protected virtual void WriteChild(XmlTextWriter writer, ContentItem child) { using (ElementWriter childElement = new ElementWriter("child", writer)) { childElement.WriteAttribute("id", child.ID); childElement.WriteAttribute("name", child.Name); childElement.WriteAttribute("versionIndex", child.VersionIndex); if (child.VersionOf.HasValue) childElement.WriteAttribute("versionOf", child.VersionOf.Value.ID); if (child.GetVersionKey() != null) childElement.WriteAttribute("versionKey", child.GetVersionKey()); } }
public void Initialize(string discriminator, string template, ContentItem parent) { var definition = Engine.Definitions.GetDefinition(discriminator); if (!string.IsNullOrEmpty(template)) { var info = Engine.Definitions.GetTemplate(definition.ItemType, template); if (info == null) { throw new InvalidOperationException("Failed to find definition for type " + definition.ItemType + " and template " + template); } Definition = info.Definition; var item = info.TemplateFactory(); item.Parent = parent; CurrentItem = item; } else { Discriminator = definition.Discriminator; ParentPath = parent.Path; if (parent.ID == 0) { ParentPath = Find.ClosestPage(parent).Path; ParentVersionIndex = parent.VersionIndex; ParentVersionKey = parent.GetVersionKey(); } } EnsureChildControls(); }
public static string GetRefreshFramesScript(this Page page, ContentItem item, ToolbarArea area, bool force = true) { var engine = N2.Context.Current; string format; if (area == ToolbarArea.Both) { format = EditExtensions.RefreshBothFormat; } else if (area == ToolbarArea.Preview) { format = RefreshPreviewFormat; } else { format = RefreshNavigationFormat; } string script = string.Format(format, engine.ManagementPaths.GetEditInterfaceUrl(), // 0 engine.ManagementPaths.GetNavigationUrl(item), // 1 GetPreviewUrl(page, engine, item), // 2 item.ID, // 3 item.Path, // 4 engine.ResolveAdapter <NodeAdapter>(item).GetMaximumPermission(item), // 5 force.ToString().ToLower(), // 6 item.VersionIndex, item.GetVersionKey() ); return(script); }
public static Url AppendSelection(this Url url, ContentItem item) { if (item.ID != 0) { // most published pages & parts return(url.AppendQuery(SelectionUtility.SelectedQueryKey, item.Path) .AppendQuery(PathData.ItemQueryKey, item.ID)); } if (item.VersionOf.HasValue) { // versions of published pages and parts return(url.AppendQuery(SelectionUtility.SelectedQueryKey, item.VersionOf.Path) .AppendQuery(PathData.VersionIndexQueryKey, item.VersionIndex)); } if (!item.IsPage) { var page = N2.Find.ClosestPage(item); if (page != null) { // new parts return(url.AppendQuery(SelectionUtility.SelectedQueryKey, page.Path) .AppendQuery(PathData.VersionIndexQueryKey, page.VersionIndex) .AppendQuery(PathData.VersionKeyQueryKey, item.GetVersionKey())); } } return(url.AppendQuery(SelectionUtility.SelectedQueryKey, item.Path)); }
public static ContentItem FindPartVersion(this ContentItem parent, ContentItem part) { if (part.ID == parent.VersionOf.ID) { return(parent); } if (part.VersionOf.HasValue && part.VersionOf.ID == parent.VersionOf.ID) { return(parent); } if (parent.ID == 0 && parent.GetVersionKey() == part.GetVersionKey()) { return(parent); } foreach (var child in parent.Children) { var grandChild = child.FindPartVersion(part); if (grandChild != null) { return(grandChild); } } return(null); }
internal static IDisposable GetEditableWrapper(ContentItem item, bool isEditable, string propertyName, IDisplayable displayable, TextWriter writer) { var viewEditable = displayable as IViewEditable; var contentEditable = displayable as IContentEditable; var cssClass = contentEditable != null?contentEditable.GetEditorCssClass() : "editable"; /*+ " " + displayable.GetType().Name + " Editable" + propertyName*/ if (isEditable && item != null && displayable != null && (viewEditable == null || viewEditable.IsViewEditable)) { var id = (item.ID != 0) ? item.ID : item.VersionOf.ID.GetValueOrDefault(0); var rv = new RouteValueDictionary { { "id", string.Format("{0}.{1}.{2}", displayable.GetType().Name, id, propertyName) }, // provide unique ID { "data-id", id }, { "data-property", propertyName }, { "class", cssClass }, { "title", (displayable is IEditable) ? (displayable as IEditable).Title : displayable.Name } }; // same logic as in DroppableZoneHelper.RenderTemplate if (item.ID != 0 && !item.VersionOf.HasValue) { rv[PartUtilities.PathAttribute] = item.Path; } else { var page = Find.ClosestPage(item); rv[PartUtilities.PathAttribute] = page.Path; rv["data-versionIndex"] = page.VersionIndex.ToString(); rv["data-versionKey"] = item.GetVersionKey(); } return(TagWrapper.Begin("div", writer, rv)); } return(new EmptyDisposable()); }
protected override void RenderTemplate(TextWriter writer, ContentItem model) { if (state.IsFlagSet(ControlPanelState.DragDrop) && model.Parent == CurrentItem) { ItemDefinition definition = Html.ResolveService <IDefinitionManager>().GetDefinition(model); writer.Write("<div class='" + definition.Discriminator + " zoneItem'"); if (model.ID != 0 && !model.VersionOf.HasValue) { writer.WriteAttribute(PartUtilities.PathAttribute, model.Path); } else { // same logic as in WebExtensions.GetEditableWrapper // see var page = Find.ClosestPage(model); writer.WriteAttribute(PartUtilities.PathAttribute, page.Path) .WriteAttribute("data-versionIndex", page.VersionIndex.ToString()) .WriteAttribute("data-versionKey", model.GetVersionKey()); } writer.WriteAttribute("data-sortOrder", model.SortOrder.ToString()) .WriteAttribute(PartUtilities.TypeAttribute, definition.Discriminator); writer.Write(">"); Html.ResolveService <PartUtilities>().WriteTitleBar(writer, model, Html.ViewContext.HttpContext.Request.RawUrl); base.RenderTemplate(writer, model); writer.Write("</div>"); } else { base.RenderTemplate(writer, model); } }
/// <summary>Gets the url to the edit page where to edit an existing item.</summary> /// <param name="item">The item to edit.</param> /// <returns>The url to the edit page</returns> public virtual string GetEditExistingItemUrl(ContentItem item, string returnUrl = null, string alternativeEditorPath = null) { if (item == null) { return(null); } var editUrl = (alternativeEditorPath ?? EditItemUrl).ToUrl() .ResolveTokens() .SetQueryParameter(SelectionUtility.SelectedQueryKey, item.Path); if (item.VersionOf.HasValue) { editUrl = editUrl.SetQueryParameter(PathData.ItemQueryKey, item.VersionOf.ID.Value); if (item.IsPage) { editUrl = editUrl .SetQueryParameter(PathData.VersionIndexQueryKey, item.VersionIndex) .SetQueryParameter(PathData.VersionKeyQueryKey, item.GetVersionKey()); } else { editUrl = editUrl .SetQueryParameter(PathData.VersionIndexQueryKey, Find.ClosestPage(item).VersionIndex) .SetQueryParameter(PathData.VersionKeyQueryKey, item.GetVersionKey()); } } else if (item.ID == 0) { var page = Find.ClosestPage(item); editUrl = editUrl.SetQueryParameter(PathData.ItemQueryKey, page.ID); if (page != null) { editUrl = editUrl .SetQueryParameter(SelectionUtility.SelectedQueryKey, (page.VersionOf.Value ?? page).Path) .SetQueryParameter(PathData.VersionIndexQueryKey, page.VersionIndex) .SetQueryParameter(PathData.VersionKeyQueryKey, item.GetVersionKey()); } } if (returnUrl != null) { editUrl = editUrl.SetQueryParameter("returnUrl", returnUrl); } return(editUrl); }
/// <summary>Calculates an item url by walking it's parent path.</summary> /// <param name="item">The item whose url to compute.</param> /// <returns>A friendly url to the supplied item.</returns> public override Url BuildUrl(ContentItem item) { if (item == null) { throw new ArgumentNullException("item"); } if (item.VersionOf.HasValue) { return(BuildUrl(item.VersionOf) .SetQueryParameter(PathData.VersionQueryKey, item.VersionIndex)); } else if (item.ID == 0) { var page = Find.ClosestPage(item); if (page != null && page != item) { return(BuildUrl(page) .SetQueryParameter(PathData.VersionQueryKey, page.VersionIndex) .SetQueryParameter("versionKey", item.GetVersionKey())); } } // move up until first real page var current = Find.ClosestPage(item); // no page found, throw if (current == null) { throw new N2Exception("Cannot build url to data item '{0}' with no containing page item.", item); } Url url = BuildPageUrl(current, ref current); var startPage = FindStartPage(current); // no start page found, use rewritten url if (startPage == null) { return(item.FindPath(PathData.DefaultAction).GetRewrittenUrl()); } if (!item.IsPage) { // the item was not a page, add this information as a query string url = url.AppendQuery(PathData.ItemQueryKey, item.ID); } if (startPage.ID == host.CurrentSite.StartPageID) { // the start page belongs to the current site, use relative url return(Url.ToAbsolute("~" + url.PathAndQuery)); } var site = host.GetSite(startPage.ID) ?? host.DefaultSite; return(GetHostedUrl(item, url, site)); }
protected virtual void WriteChild(XmlTextWriter writer, ContentItem child) { using (ElementWriter childElement = new ElementWriter("child", writer)) { childElement.WriteAttribute("id", child.ID); childElement.WriteAttribute("name", child.Name); childElement.WriteAttribute("versionIndex", child.VersionIndex); if (child.VersionOf.HasValue) { childElement.WriteAttribute("versionOf", child.VersionOf.Value.ID); } if (child.GetVersionKey() != null) { childElement.WriteAttribute("versionKey", child.GetVersionKey()); } } }
protected override void AppendControlPanel(TextWriter writer, IEngine engine, ContentItem item) { var state = ControlPanelExtensions.GetControlPanelState(Html); var settings = new { NavigationUrl = engine.ManagementPaths.GetNavigationUrl(item), ManagementUrl = engine.ManagementPaths.GetManagementInterfaceUrl(), Path = item.Path, Plugins = Plugins(Html, item, state), Definitions = Definitions(Html, engine, item, state), Version = typeof(ContentItem).Assembly.GetName().Version.ToString(), Permission = engine.GetContentAdapter <NodeAdapter>(item).GetMaximumPermission(item), VersionIndex = item.VersionIndex, VersionKey = item.GetVersionKey(), Force = ForceRefreshNavigationOnLoad ? "true" : "false", State = item != null?item.State.ToString() : "NonContent", Mode = GetControlPanelState(Html).ToString() }; var resources = Html.Resources(writer).Constants(); if (IncludeJQuery) { resources.JQuery(); } if (IncludeJQueryPlugins) { resources.JQueryPlugins(IncludeJQuery); } if (IncludeJQueryUi) { resources.JQueryUi(IncludeJQuery); } if (IncludePartScripts) { resources.PartsJs(); } if (IncludePartStyles) { resources.PartsCss(); resources.IconsCss(); } if (RefreshNavigationOnLoad) { resources.HtmlLiteral(formatWithRefresh.Replace(settings)); } else { resources.HtmlLiteral(formatWithoutRefresh.Replace(settings)); } if (state.IsFlagSet(ControlPanelState.DragDrop)) { resources.JavaScript(UI.WebControls.ControlPanel.DragDropScriptInitialization(item), ScriptOptions.DocumentReady); } resources.Render(writer); }
internal static string GetPreviewUrl(this Page page, IEngine engine, ContentItem item) { string returnUrl = page.Request["returnUrl"]; if (!string.IsNullOrEmpty(returnUrl)) { return(Url.Parse(returnUrl) .SetQueryParameter(PathData.VersionIndexQueryKey, item.VersionIndex) .SetQueryParameter(PathData.VersionKeyQueryKey, item.GetVersionKey())); } return(engine.ResolveAdapter <NodeAdapter>(item).GetPreviewUrl(item)); }
/// <summary>Gets the url to the edit page where to edit an existing item.</summary> /// <param name="item">The item to edit.</param> /// <returns>The url to the edit page</returns> public virtual string GetEditExistingItemUrl(ContentItem item) { if (item == null) { return(null); } var editUrl = EditItemUrl.ToUrl() .ResolveTokens() .SetQueryParameter(SelectionUtility.SelectedQueryKey, item.Path); if (item.VersionOf.HasValue) { if (item.IsPage) { editUrl = editUrl .SetQueryParameter(PathData.VersionIndexQueryKey, item.VersionIndex) .SetQueryParameter("versionKey", item.GetVersionKey()); } else { editUrl = editUrl .SetQueryParameter(PathData.VersionIndexQueryKey, Find.ClosestPage(item).VersionIndex) .SetQueryParameter("versionKey", item.GetVersionKey()); } } else if (item.ID == 0) { var page = Find.ClosestPage(item); if (page != null && page.VersionOf.HasValue) { editUrl = editUrl .SetQueryParameter(SelectionUtility.SelectedQueryKey, page.VersionOf.Path) .SetQueryParameter(PathData.VersionIndexQueryKey, page.VersionIndex) .SetQueryParameter("versionKey", item.GetVersionKey()); } } return(editUrl); }
/// <summary>Gets the url to edit page creating new items.</summary> /// <param name="selected">The selected item.</param> /// <param name="definition">The type of item to edit.</param> /// <param name="zoneName">The zone to add the item to.</param> /// <param name="position">The position relative to the selected item to add the item.</param> /// <returns>The url to the edit page.</returns> public virtual string GetEditNewPageUrl(ContentItem selected, ItemDefinition definition, string zoneName, CreationPosition position) { if (selected == null) { throw new ArgumentNullException("selected"); } if (definition == null) { throw new ArgumentNullException("definition"); } ContentItem parent = (position != CreationPosition.Below) ? selected.Parent : selected; if (selected == null) { throw new N2Exception("Cannot insert item before or after the root page."); } Url url = Url.ResolveTokens(EditItemUrl); url = url.AppendQuery(SelectionUtility.SelectedQueryKey, parent.Path); url = url.AppendQuery("discriminator", definition.Discriminator); if (!string.IsNullOrEmpty(zoneName)) { url = url.AppendQuery("zoneName", zoneName); } if (!string.IsNullOrEmpty(definition.TemplateKey)) { url = url.AppendQuery("template", definition.TemplateKey); } if (position == CreationPosition.Before) { url = url.AppendQuery("before", selected.Path); } else if (position == CreationPosition.After) { url = url.AppendQuery("after", selected.Path); } if (selected.VersionOf.HasValue) { url = url.AppendQuery(PathData.VersionIndexQueryKey, selected.VersionIndex) .AppendQuery("VersionKey", selected.GetVersionKey()); } return(url); }
private static string FormatSelectedUrl(ContentItem selectedItem, string path) { Url url = Url.ResolveTokens(path); if (selectedItem != null) { if (selectedItem.ID == 0 && !selectedItem.VersionOf.HasValue && !selectedItem.IsPage) { var page = Find.ClosestPage(selectedItem); return(url.AppendQuery(SelectionUtility.SelectedQueryKey + "=" + page.Path) .AppendQuery(PathData.VersionIndexQueryKey + "=" + page.VersionIndex) .AppendQuery(PathData.VersionKeyQueryKey, selectedItem.GetVersionKey())); } url = url.AppendQuery(SelectionUtility.SelectedQueryKey + "=" + selectedItem.Path); if (selectedItem.VersionOf.HasValue) { url = url.AppendQuery(PathData.VersionIndexQueryKey + "=" + selectedItem.VersionIndex) .AppendQuery(PathData.VersionKeyQueryKey, selectedItem.GetVersionKey()); } } return(url); }
private PathData EnsureDraft(ContentItem item) { var page = Find.ClosestPage(item); if (page.ID == 0) { return(new PathData(page, item)); } var cvr = Engine.Resolve <ContentVersionRepository>(); var vm = Engine.Resolve <IVersionManager>(); var path = PartsExtensions.EnsureDraft(vm, cvr, "", item.GetVersionKey(), item); return(path); }
private PathData EnsureDraft(ContentItem item) { var page = Find.ClosestPage(item); //New/Draft master version or a version of an item if (page.ID == 0 || (!page.VersionOf.HasValue && (page.State == ContentState.New || page.State == ContentState.Draft))) { return(new PathData(page, item)); } var cvr = Engine.Resolve <ContentVersionRepository>(); var vm = Engine.Resolve <IVersionManager>(); var path = PartsExtensions.EnsureDraft(vm, cvr, "", item.GetVersionKey(), item); return(path); }
private void ApplyCommonValuesRecursive(ContentItem parent) { if (string.IsNullOrEmpty(parent.GetVersionKey())) { parent.SetVersionKey(Guid.NewGuid().ToString()); } foreach (var child in parent.Children) { child.State = parent.State; child.VersionIndex = parent.VersionIndex; ApplyCommonValuesRecursive(child); } }
/// <summary>Calculates an item url by walking it's parent path.</summary> /// <param name="item">The item whose url to compute.</param> /// <returns>A friendly url to the supplied item.</returns> public override Url BuildUrl(ContentItem item) { if (item == null) throw new ArgumentNullException("item"); if (item.VersionOf.HasValue && item.VersionOf.Value != null) { return BuildUrl(item.VersionOf.Value) .SetQueryParameter(PathData.VersionIndexQueryKey, item.VersionIndex); } else if (item.ID == 0) { var page = Find.ClosestPage(item); if (page != null && page != item) { return BuildUrl(page) .SetQueryParameter(PathData.VersionIndexQueryKey, page.VersionIndex) .SetQueryParameter("versionKey", item.GetVersionKey()); } } // move up until first real page var current = Find.ClosestPage(item); // no page found, throw if (current == null) throw new N2Exception("Cannot build url to data item '{0}' with no containing page item.", item); Url url = BuildPageUrl(current, ref current); var startPage = FindStartPage(current); // no start page found, use rewritten url if (startPage == null) return item.FindPath(PathData.DefaultAction).GetRewrittenUrl(); if (!item.IsPage) // the item was not a page, add this information as a query string url = url.AppendQuery(PathData.ItemQueryKey, item.ID); if (startPage.ID == host.CurrentSite.StartPageID) { // the start page belongs to the current site, use relative url return Url.ToAbsolute("~" + url.PathAndQuery); } var site = host.GetSite(startPage.ID) ?? host.DefaultSite; return GetHostedUrl(item, url, site); }
protected override void AddChildItem(Control container, ContentItem item) { if (State.IsFlagSet(ControlPanelState.DragDrop) && IsMovableOnThisPage(item)) { string preview = Page.Request.QueryString["preview"]; if (!string.IsNullOrEmpty(preview)) { int previewIndex; int publishedItemID; if (int.TryParse(preview, out previewIndex) && int.TryParse(Page.Request.QueryString[PathData.ItemQueryKey], out publishedItemID)) { if (publishedItemID == item.ID) { item = Engine.Resolve <IVersionManager>().GetVersion(item, previewIndex); } } } ItemDefinition definition = GetDefinition(item); Panel itemContainer = AddPanel(container, "zoneItem " + definition.Discriminator); if (CurrentItem.ID != 0 && !CurrentItem.VersionOf.HasValue) { itemContainer.Attributes["data-id"] = item.ID.ToString(); itemContainer.Attributes[PartUtilities.PathAttribute] = item.Path; } else { itemContainer.Attributes[PartUtilities.PathAttribute] = Find.ClosestPage(item).Path; itemContainer.Attributes["data-versionKey"] = item.GetVersionKey(); itemContainer.Attributes["data-versionIndex"] = item.VersionIndex.ToString(); } itemContainer.Attributes[PartUtilities.TypeAttribute] = definition.Discriminator; itemContainer.Attributes["data-sortOrder"] = item.SortOrder.ToString(); Control toolbar = AddToolbar(itemContainer, item, definition); base.AddChildItem(itemContainer, item); } else if (State.IsFlagSet(ControlPanelState.Previewing) && item.ID.ToString() == Page.Request["original"]) { item = Engine.Persister.Get(int.Parse(Page.Request["preview"])); base.AddChildItem(this, item); } else { base.AddChildItem(this, item); } }
public static ContentItem FindPartVersion(this ContentItem parent, ContentItem part) { if (part.ID == parent.VersionOf.ID) return parent; if (part.VersionOf.HasValue && part.VersionOf.ID == parent.VersionOf.ID) return parent; if (parent.ID == 0 && parent.GetVersionKey() == part.GetVersionKey()) return parent; foreach (var child in parent.Children) { var grandChild = child.FindPartVersion(part); if (grandChild != null) return grandChild; } return null; }
private void ApplyCommonValuesRecursive(ContentItem parent) { if (string.IsNullOrEmpty(parent.GetVersionKey())) { parent.SetVersionKey(Guid.NewGuid().ToString()); } foreach (var child in parent.Children) { // copy state-related properties child.State = parent.State; child.Published = parent.Published; child.Expires = parent.Expires; child.VersionIndex = parent.VersionIndex; ApplyCommonValuesRecursive(child); } }
public static void RefreshPreviewFrame(this Page page, ContentItem item, string previewUrl) { var engine = page.GetEngine(); string script = string.Format(RefreshBothFormat, engine.ManagementPaths.GetEditInterfaceUrl(), // 0 engine.ManagementPaths.GetNavigationUrl(item), // 1 Url.ToAbsolute(previewUrl), // 2 item.ID, // 3 item.Path, // 4 engine.ResolveAdapter <NodeAdapter>(item).GetMaximumPermission(item), // permission:'{5}', "true", // force:{6} item.VersionIndex, item.GetVersionKey() ); page.ClientScript.RegisterClientScriptBlock( typeof(EditExtensions), "RefreshFramesScript", script, true); }
public static void RefreshPreviewFrame(this Page page, ContentItem item, string previewUrl) { var engine = page.GetEngine(); string script = string.Format(RefreshBothFormat, engine.ManagementPaths.GetEditInterfaceUrl(), // 0 engine.ManagementPaths.GetNavigationUrl(item), // 1 Url.ToAbsolute(previewUrl), // 2 item.ID, // 3 item.Path, // 4 engine.ResolveAdapter<NodeAdapter>(item).GetMaximumPermission(item), // permission:'{5}', "true", // force:{6} item.VersionIndex, item.GetVersionKey() ); page.ClientScript.RegisterClientScriptBlock( typeof(EditExtensions), "RefreshFramesScript", script, true); }
protected override void AddChildItem(Control container, ContentItem item) { if (State.IsFlagSet(ControlPanelState.DragDrop) && IsMovableOnThisPage(item)) { string preview = Page.Request.QueryString["preview"]; if (!string.IsNullOrEmpty(preview)) { int previewIndex; int publishedItemID; if (int.TryParse(preview, out previewIndex) && int.TryParse(Page.Request.QueryString["item"], out publishedItemID)) if (publishedItemID == item.ID) item = Engine.Resolve<IVersionManager>().GetVersion(item, previewIndex); } ItemDefinition definition = GetDefinition(item); Panel itemContainer = AddPanel(container, "zoneItem " + definition.Discriminator); if (CurrentItem.ID != 0 && !CurrentItem.VersionOf.HasValue) itemContainer.Attributes[PartUtilities.PathAttribute] = item.Path; else { itemContainer.Attributes[PartUtilities.PathAttribute] = Find.ClosestPage(item).Path; itemContainer.Attributes["data-versionKey"] = item.GetVersionKey(); itemContainer.Attributes["data-versionIndex"] = item.VersionIndex.ToString(); } itemContainer.Attributes[PartUtilities.TypeAttribute] = definition.Discriminator; itemContainer.Attributes["data-sortOrder"] = item.SortOrder.ToString(); Control toolbar = AddToolbar(itemContainer, item, definition); base.AddChildItem(itemContainer, item); } else if (State.IsFlagSet(ControlPanelState.Previewing) && item.ID.ToString() == Page.Request["original"]) { item = Engine.Persister.Get(int.Parse(Page.Request["preview"])); base.AddChildItem(this, item); } else { base.AddChildItem(this, item); } }
private VirtualPathData ResolvePartActionUrl(RequestContext requestContext, RouteValueDictionary values, ContentItem page, ContentItem item) { if (page.ID == 0) { if (page.VersionOf.Value == null) { return(null); } values[ContentPageKey] = page.VersionOf.ID; values[PathData.VersionIndexQueryKey] = page.VersionIndex; } else { values[ContentPageKey] = page.ID; } values[ContentPartKey] = item.ID; if (item.ID == 0) { if (item.VersionOf.Value != null) { values[ContentPartKey] = item.VersionOf.ID; } values[PathData.VersionKeyQueryKey] = item.GetVersionKey(); } var vpd = innerRoute.GetVirtualPath(requestContext, values); if (vpd == null) { return(null); } vpd.Route = this; vpd.DataTokens[PathData.PathKey] = new PathData(page, item); return(vpd); }
/// <summary>Calculates an item url by walking it's parent path.</summary> /// <param name="item">The item whose url to compute.</param> /// <returns>A friendly url to the supplied item.</returns> public virtual Url BuildUrl(ContentItem item) { if (item == null) { throw new ArgumentNullException("item"); } if (item.VersionOf.HasValue) { ContentItem version = item.VersionOf; if (version != null) { return(BuildUrl(version) .SetQueryParameter(PathData.VersionQueryKey, item.VersionIndex)); } } else if (item.ID == 0) { var page = Find.ClosestPage(item); if (page != null && page != item) { return(BuildUrl(page) .SetQueryParameter(PathData.VersionQueryKey, page.VersionIndex) .SetQueryParameter("versionKey", item.GetVersionKey())); } } var current = Find.ClosestPage(item); // no page found, throw if (current == null) { throw new N2Exception("Cannot build url to data item '{0}' with no containing page item.", item); } Url url = BuildPageUrl(current, ref current); if (current == null) { // no start page found, use rewritten url return(item.FindPath(PathData.DefaultAction).GetRewrittenUrl()); } if (!item.IsPage) { // the item was not a page, add this information as a query string url = url.AppendQuery(PathData.ItemQueryKey, item.ID); } var absoluteUrl = Url.ToAbsolute("~" + url); if (BuiltUrl != null) { var args = new UrlEventArgs(item) { Url = absoluteUrl }; BuiltUrl(this, args); return(args.Url); } else { return(absoluteUrl); } }
/// <summary>Calculates an item url by walking it's parent path.</summary> /// <param name="item">The item whose url to compute.</param> /// <returns>A friendly url to the supplied item.</returns> public virtual Url BuildUrl(ContentItem item) { if (item == null) throw new ArgumentNullException("item"); if (item.VersionOf.HasValue) { ContentItem version = item.VersionOf; if (version != null) return BuildUrl(version).SetQueryParameter(PathData.VersionIndexQueryKey, item.VersionIndex); } else if (item.ID == 0) { var page = Find.ClosestPage(item); if (page != null && page != item) { return BuildUrl(page) .SetQueryParameter(PathData.VersionIndexQueryKey, page.VersionIndex) .SetQueryParameter("versionKey", item.GetVersionKey()); } } var current = Find.ClosestPage(item); // no page found, throw if (current == null) throw new N2Exception("Cannot build url to data item '{0}' with no containing page item.", item); Url url = BuildPageUrl(current, ref current); if (current == null) // no start page found, use rewritten url return item.FindPath(PathData.DefaultAction).GetRewrittenUrl(); if (!item.IsPage) // the item was not a page, add this information as a query string url = url.AppendQuery(PathData.ItemQueryKey, item.ID); var absoluteUrl = Url.ToAbsolute("~" + url); if (BuiltUrl != null) { var args = new UrlEventArgs(item) { Url = absoluteUrl }; BuiltUrl(this, args); return args.Url; } else return absoluteUrl; }
private void ApplyCommonValuesRecursive(ContentItem parent) { if (string.IsNullOrEmpty(parent.GetVersionKey())) parent.SetVersionKey(Guid.NewGuid().ToString()); foreach (var child in parent.Children) { child.State = parent.State; child.VersionIndex = parent.VersionIndex; ApplyCommonValuesRecursive(child); } }
private void WriteItem(ElementWriter propertyElement, ContentItem item) { propertyElement.WriteAttribute("typeName", SerializationUtility.GetTypeAndAssemblyName(typeof(ContentItem))); propertyElement.WriteAttribute("versionKey", item.GetVersionKey()); propertyElement.Write(item.ID.ToString()); }
private static string FormatSelectedUrl(ContentItem selectedItem, string path) { Url url = Url.ResolveTokens(path); if (selectedItem != null) { if (selectedItem.ID == 0 && !selectedItem.VersionOf.HasValue && !selectedItem.IsPage) { var page = Find.ClosestPage(selectedItem); return url.AppendQuery(SelectionUtility.SelectedQueryKey + "=" + page.Path) .AppendQuery(PathData.VersionIndexQueryKey + "=" + page.VersionIndex) .AppendQuery("versionKey", selectedItem.GetVersionKey()); } url = url.AppendQuery(SelectionUtility.SelectedQueryKey + "=" + selectedItem.Path); if (selectedItem.VersionOf.HasValue) url = url.AppendQuery(PathData.VersionIndexQueryKey + "=" + selectedItem.VersionIndex) .AppendQuery("versionKey", selectedItem.GetVersionKey()); } return url; }
/// <summary>Gets the url to the edit page where to edit an existing item.</summary> /// <param name="item">The item to edit.</param> /// <returns>The url to the edit page</returns> public virtual string GetEditExistingItemUrl(ContentItem item) { if (item == null) return null; var editUrl = EditItemUrl.ToUrl() .ResolveTokens() .SetQueryParameter(SelectionUtility.SelectedQueryKey, item.Path); if (item.VersionOf.HasValue) { if (item.IsPage) editUrl = editUrl .SetQueryParameter(PathData.VersionIndexQueryKey, item.VersionIndex) .SetQueryParameter("versionKey", item.GetVersionKey()); else editUrl = editUrl .SetQueryParameter(PathData.VersionIndexQueryKey, Find.ClosestPage(item).VersionIndex) .SetQueryParameter("versionKey", item.GetVersionKey()); } else if (item.ID == 0) { var page = Find.ClosestPage(item); if (page != null && page.VersionOf.HasValue) editUrl = editUrl .SetQueryParameter(SelectionUtility.SelectedQueryKey, page.VersionOf.Path) .SetQueryParameter(PathData.VersionIndexQueryKey, page.VersionIndex) .SetQueryParameter("versionKey", item.GetVersionKey()); } return editUrl; }
/// <summary>Gets the url to edit page creating new items.</summary> /// <param name="selected">The selected item.</param> /// <param name="definition">The type of item to edit.</param> /// <param name="zoneName">The zone to add the item to.</param> /// <param name="position">The position relative to the selected item to add the item.</param> /// <returns>The url to the edit page.</returns> public virtual string GetEditNewPageUrl(ContentItem selected, ItemDefinition definition, string zoneName, CreationPosition position) { if (selected == null) throw new ArgumentNullException("selected"); if (definition == null) throw new ArgumentNullException("definition"); ContentItem parent = (position != CreationPosition.Below) ? selected.Parent : selected; if (selected == null) throw new N2Exception("Cannot insert item before or after the root page."); Url url = Url.ResolveTokens(EditItemUrl); url = url.AppendQuery(SelectionUtility.SelectedQueryKey, parent.Path); url = url.AppendQuery("discriminator", definition.Discriminator); if (!string.IsNullOrEmpty(zoneName)) url = url.AppendQuery("zoneName", zoneName); if (!string.IsNullOrEmpty(definition.TemplateKey)) url = url.AppendQuery("template", definition.TemplateKey); if (position == CreationPosition.Before) url = url.AppendQuery("before", selected.Path); else if (position == CreationPosition.After) url = url.AppendQuery("after", selected.Path); if (selected.VersionOf.HasValue) { url = url.AppendQuery(PathData.VersionIndexQueryKey, selected.VersionIndex) .AppendQuery("VersionKey", selected.GetVersionKey()); } return url; }
internal static IDisposable GetEditableWrapper(ContentItem item, bool isEditable, string propertyName, IDisplayable displayable, TextWriter writer) { var viewEditable = displayable as IViewEditable; if (isEditable && (viewEditable == null || viewEditable.IsViewEditable) && item != null && displayable != null) { return(TagWrapper.Begin("div", writer, htmlAttributes: new RouteValueDictionary { { "data-id", item.ID }, { "data-path", item.Path }, { "data-property", propertyName }, { "data-displayable", displayable.GetType().Name }, { "data-versionIndex", item.VersionIndex }, { "data-versionKey", item.GetVersionKey() }, { "class", "editable " + displayable.GetType().Name + " Editable" + propertyName }, { "title", (displayable is IEditable) ? (displayable as IEditable).Title : displayable.Name } })); } else { return(new EmptyDisposable()); } }
/// <summary>Gets the url to the edit page where to edit an existing item.</summary> /// <param name="item">The item to edit.</param> /// <returns>The url to the edit page</returns> public virtual string GetEditExistingItemUrl(ContentItem item, string returnUrl = null, string alternativeEditorPath = null) { if (item == null) return null; var editUrl = (alternativeEditorPath ?? EditItemUrl).ToUrl() .ResolveTokens() .SetQueryParameter(SelectionUtility.SelectedQueryKey, item.Path); if (item.VersionOf.HasValue) { editUrl = editUrl.SetQueryParameter(PathData.ItemQueryKey, item.VersionOf.ID.Value); if (item.IsPage) editUrl = editUrl .SetQueryParameter(PathData.VersionIndexQueryKey, item.VersionIndex) .SetQueryParameter(PathData.VersionKeyQueryKey, item.GetVersionKey()); else editUrl = editUrl .SetQueryParameter(PathData.VersionIndexQueryKey, Find.ClosestPage(item).VersionIndex) .SetQueryParameter(PathData.VersionKeyQueryKey, item.GetVersionKey()); } else if (item.ID == 0) { var page = Find.ClosestPage(item); editUrl = editUrl.SetQueryParameter(PathData.ItemQueryKey, page.ID); if (page != null) editUrl = editUrl .SetQueryParameter(SelectionUtility.SelectedQueryKey, (page.VersionOf.Value ?? page).Path) .SetQueryParameter(PathData.VersionIndexQueryKey, page.VersionIndex) .SetQueryParameter(PathData.VersionKeyQueryKey, item.GetVersionKey()); } if (returnUrl != null) editUrl = editUrl.SetQueryParameter("returnUrl", returnUrl); return editUrl; }
protected override void AppendControlPanel(TextWriter writer, IEngine engine, ContentItem item) { var state = ControlPanelExtensions.GetControlPanelState(Html); var settings = new { NavigationUrl = engine.ManagementPaths.GetNavigationUrl(item), ManagementUrl = engine.ManagementPaths.GetManagementInterfaceUrl(), Path = item.Path, Plugins = Plugins(Html, item, state), Definitions = Definitions(Html, engine, item, state), Version = typeof(ContentItem).Assembly.GetName().Version.ToString(), Permission = engine.GetContentAdapter<NodeAdapter>(item).GetMaximumPermission(item), VersionIndex = item.VersionIndex, VersionKey = item.GetVersionKey(), Force = ForceRefreshNavigationOnLoad ? "true" : "false", State = item != null ? item.State.ToString() : "NonContent", Mode = GetControlPanelState(Html).ToString() }; var resources = Html.Resources(writer).Constants(); if (IncludeJQuery) resources.JQuery(); if (IncludeJQueryPlugins) resources.JQueryPlugins(IncludeJQuery); if (IncludeJQueryUi) resources.JQueryUi(IncludeJQuery); if (IncludePartScripts) resources.PartsJs(); if (IncludePartStyles) { resources.PartsCss(); resources.IconsCss(); } if (RefreshNavigationOnLoad) resources.HtmlLiteral(formatWithRefresh.Replace(settings)); else resources.HtmlLiteral(formatWithoutRefresh.Replace(settings)); if (state.IsFlagSet(ControlPanelState.DragDrop)) resources.JavaScript(UI.WebControls.ControlPanel.DragDropScriptInitialization(item), ScriptOptions.DocumentReady); resources.Render(writer); }
public static string GetRefreshFramesScript(this Page page, ContentItem item, ToolbarArea area, bool force = true) { var engine = N2.Context.Current; string format; if (area == ToolbarArea.Both) format = EditExtensions.RefreshBothFormat; else if (area == ToolbarArea.Preview) format = RefreshPreviewFormat; else format = RefreshNavigationFormat; string script = string.Format(format, engine.ManagementPaths.GetEditInterfaceUrl(), // 0 engine.ManagementPaths.GetNavigationUrl(item), // 1 GetPreviewUrl(page, engine, item), // 2 item.ID, // 3 item.Path, // 4 engine.ResolveAdapter<NodeAdapter>(item).GetMaximumPermission(item), // 5 force.ToString().ToLower(), // 6 item.VersionIndex, item.GetVersionKey() ); return script; }
internal static string GetPreviewUrl(this Page page, IEngine engine, ContentItem item) { string returnUrl = page.Request["returnUrl"]; if (!string.IsNullOrEmpty(returnUrl)) return Url.Parse(returnUrl).SetQueryParameter(PathData.VersionIndexQueryKey, item.VersionIndex).SetQueryParameter("versionKey", item.GetVersionKey()); return engine.ResolveAdapter<NodeAdapter>(item).GetPreviewUrl(item); }
private VirtualPathData ResolvePartActionUrl(RequestContext requestContext, RouteValueDictionary values, ContentItem page, ContentItem item) { if (page.ID == 0) { if (page.VersionOf.Value == null) return null; values[ContentPageKey] = page.VersionOf.ID; values[PathData.VersionIndexQueryKey] = page.VersionIndex; } else values[ContentPageKey] = page.ID; values[ContentPartKey] = item.ID; if (item.ID == 0) { if (item.VersionOf.Value != null) values[ContentPartKey] = item.VersionOf.ID; values[PathData.VersionKeyQueryKey] = item.GetVersionKey(); } var vpd = innerRoute.GetVirtualPath(requestContext, values); if (vpd == null) return null; vpd.Route = this; vpd.DataTokens[PathData.PathKey] = new PathData(page, item); return vpd; }
private PathData EnsureDraft(ContentItem item) { var page = Find.ClosestPage(item); if (page.ID == 0) return new PathData(page, item); var cvr = Engine.Resolve<ContentVersionRepository>(); var vm = Engine.Resolve<IVersionManager>(); var path = PartsExtensions.EnsureDraft(vm, cvr, "", item.GetVersionKey(), item); return path; }
protected override void RenderTemplate(TextWriter writer, ContentItem model) { if (state.IsFlagSet(ControlPanelState.DragDrop) && model.Parent == CurrentItem) { ItemDefinition definition = Html.ResolveService<IDefinitionManager>().GetDefinition(model); writer.Write("<div class='" + definition.Discriminator + " zoneItem'"); if (model.ID != 0 && !model.VersionOf.HasValue) writer.WriteAttribute(PartUtilities.PathAttribute, model.Path); else { writer.WriteAttribute(PartUtilities.PathAttribute, Find.ClosestPage(model).Path); writer.WriteAttribute("data-versionKey", model.GetVersionKey()) .WriteAttribute("data-versionIndex", model.VersionIndex.ToString()); } writer.WriteAttribute("data-sortOrder", model.SortOrder.ToString()) .WriteAttribute(PartUtilities.TypeAttribute, definition.Discriminator); writer.Write(">"); Html.ResolveService<PartUtilities>().WriteTitleBar(writer, model, Html.ViewContext.HttpContext.Request.RawUrl); base.RenderTemplate(writer, model); writer.Write("</div>"); } else base.RenderTemplate(writer, model); }
private void ApplyCommonValuesRecursive(ContentItem parent) { if (string.IsNullOrEmpty(parent.GetVersionKey())) parent.SetVersionKey(Guid.NewGuid().ToString()); foreach (var child in parent.Children) { // copy state-related properties child.State = parent.State; child.Published = parent.Published; child.Expires = parent.Expires; child.VersionIndex = parent.VersionIndex; ApplyCommonValuesRecursive(child); } }