Example #1
0
		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());
			}
		}
Example #2
0
        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();
        }
Example #3
0
        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);
        }
Example #4
0
        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));
        }
Example #5
0
        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);
        }
Example #6
0
        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());
        }
Example #7
0
        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));
        }
Example #10
0
        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());
                }
            }
        }
Example #11
0
            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);
            }
Example #12
0
        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));
        }
Example #13
0
        /// <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);
        }
Example #16
0
        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);
        }
Example #17
0
        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);
        }
Example #18
0
        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);
        }
Example #20
0
        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);
            }
        }
Example #21
0
		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);
            }
        }
Example #23
0
        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);
        }
Example #24
0
		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);
		}
Example #25
0
		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);
			}
		}
Example #26
0
        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);
        }
Example #27
0
        /// <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);
            }
        }
Example #28
0
		/// <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());
 }
Example #31
0
		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;
		}
Example #32
0
		/// <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;
		}
Example #33
0
		/// <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;
		}
Example #34
0
        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());
            }
        }
		private void WriteItem(ElementWriter propertyElement, ContentItem item)
		{
			propertyElement.WriteAttribute("typeName", SerializationUtility.GetTypeAndAssemblyName(typeof(ContentItem)));
			propertyElement.WriteAttribute("versionKey", item.GetVersionKey());
			propertyElement.Write(item.ID.ToString());
		}
Example #36
0
        /// <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);
			}
Example #38
0
		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;
		}
Example #39
0
		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);
		}
Example #40
0
		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;
		}
Example #41
0
		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;
		}
Example #42
0
        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);
			}
		}