Example #1
0
		/// <summary>Creates a version of the item. This must be called before the item item is modified to save a version before modifications.</summary>
		/// <param name="item">The item to create a old version of.</param>
		/// <returns>The old version.</returns>
		public virtual ContentItem SaveVersion(ContentItem item)
		{
			if (item == null) 
				throw new ArgumentNullException("item");

			CancellableItemEventArgs args = new CancellableItemEventArgs(item);
			if (ItemSavingVersion != null)
				ItemSavingVersion.Invoke(this, args);

			if (args.Cancel)
				return null;

			item = args.AffectedItem;
                
			ContentItem oldVersion = item.Clone(false);
			if(item.State == ContentState.Published)
				stateChanger.ChangeTo(oldVersion, ContentState.Unpublished);
			else
				stateChanger.ChangeTo(oldVersion, ContentState.Draft);
			oldVersion.Expires = Utility.CurrentTime().AddSeconds(-1);
			oldVersion.Updated = Utility.CurrentTime().AddSeconds(-1);
			oldVersion.Parent = null;
			oldVersion.VersionOf = item;
			if (item.Parent != null)
				oldVersion["ParentID"] = item.Parent.ID;
			itemRepository.SaveOrUpdate(oldVersion);

			if (ItemSavedVersion != null)
				ItemSavedVersion.Invoke(this, new ItemEventArgs(oldVersion));

			TrimVersionCountTo(item, maximumVersionsPerItem);

			return oldVersion;
		}
Example #2
0
        public void CloningItem_WithNameSetToID_ClearsName()
        {
            ContentItem root  = CreateOneItem <AnItem>(1, "1", null);
            ContentItem clone = root.Clone(false);

            Assert.That(clone.Name, Is.Null);
        }
		public TemplateDefinition GetTemplate(ContentItem item)
		{
			var template = CreateTemplate(map.GetOrCreateDefinition(item));
			template.OriginalFactory = () => item;
			template.TemplateFactory = () => item.Clone(false);
			return template;
		}
Example #4
0
        private void CopyItem(NameValueCollection request)
        {
            ContentItem item = navigator.Navigate(request["item"]);
            ContentItem parent;

            item          = item.Clone(true);
            item.Name     = null;
            item.ZoneName = request["zone"];

            string before = request["before"];
            string below  = request["below"];

            if (!string.IsNullOrEmpty(before))
            {
                ContentItem beforeItem = navigator.Navigate(before);
                parent = beforeItem.Parent;
                int newIndex = parent.Children.IndexOf(beforeItem);
                Utility.Insert(item, parent, newIndex);
            }
            else
            {
                parent = navigator.Navigate(below);
                Utility.Insert(item, parent, parent.Children.Count);
            }

            persister.Save(item);

            IEnumerable <ContentItem> changedItems = Utility.UpdateSortOrder(parent.Children);

            foreach (ContentItem changedItem in changedItems)
            {
                persister.Save(changedItem);
            }
        }
Example #5
0
        public static ContentItem CloneForVersioningRecursive(this ContentItem item, StateChanger stateChanger = null, bool asPreviousVersion = true)
        {
            ContentItem clone = item.Clone(false);

            if (stateChanger != null)
            {
                if (item.State == ContentState.Published && asPreviousVersion)
                {
                    stateChanger.ChangeTo(clone, ContentState.Unpublished);
                }
                else if (item.State != ContentState.Unpublished || asPreviousVersion == false)
                {
                    stateChanger.ChangeTo(clone, ContentState.Draft);
                }
            }
            clone.Updated        = Utility.CurrentTime().AddSeconds(-1);
            clone.Parent         = null;
            clone.AncestralTrail = "/";
            clone.VersionOf      = item.VersionOf.Value ?? item;

            CopyAutoImplementedProperties(item, clone);

            foreach (var child in item.Children.Where(c => !c.IsPage))
            {
                var childClone = child.CloneForVersioningRecursive(stateChanger, asPreviousVersion);
                childClone.AddTo(clone);
            }

            return(clone);
        }
Example #6
0
        public TemplateDefinition GetTemplate(ContentItem item)
        {
            var template = CreateTemplate(map.GetOrCreateDefinition(item));

            template.OriginalFactory = () => item;
            template.TemplateFactory = () => item.Clone(false);
            return(template);
        }
Example #7
0
		public void CanClone_Item_WithDetailCollection()
		{
			ContentItem root = CreateOneItem<AnItem>(1, "root", null);
			root.GetDetailCollection("TheDetailCollection", true).Add("TheValue");
			ContentItem clonedRoot = root.Clone(false);

			Assert.AreEqual("TheValue", clonedRoot.GetDetailCollection("TheDetailCollection", false)[0]);
		}
Example #8
0
		public void CanClone_Item_WithDateTimeDetail()
		{
			ContentItem root = CreateOneItem<AnItem>(1, "root", null);
			root["TheDetail"] = new DateTime(2009, 05, 09);
			ContentItem clonedRoot = root.Clone(false);

			Assert.AreEqual(new DateTime(2009, 05, 09), clonedRoot["TheDetail"]);
		}
Example #9
0
		public void CanClone_Item_WithDetail(object value)
		{
			ContentItem root = CreateOneItem<AnItem>(1, "root", null);
			root["TheDetail"] = value;
			ContentItem clonedRoot = root.Clone(false);

			Assert.AreEqual(value, clonedRoot["TheDetail"], "The value " + value + " was not intact on the cloned item.");
		}
Example #10
0
        public void CanCloneItem()
        {
            ContentItem root       = CreateOneItem <AnItem>(1, "root", null);
            ContentItem clonedRoot = root.Clone(false);

            Assert.AreEqual(0, clonedRoot.ID);
            Assert.AreEqual(root.Name, clonedRoot.Name);
            Assert.AreEqual(root.Title, clonedRoot.Title);
        }
Example #11
0
        public void CanCloneItem_WithProtectedDefaultConstructor()
        {
            ContentItem root       = CreateOneItem <AnItemWithProtectedDefaultConstructor>(1, "root", null);
            ContentItem clonedRoot = root.Clone(false);

            Assert.AreEqual(0, clonedRoot.ID);
            Assert.AreEqual(root.Name, clonedRoot.Name);
            Assert.AreEqual(root.Title, clonedRoot.Title);
        }
Example #12
0
        public TemplateDefinition GetTemplate(ContentItem item)
        {
            if (item["TemplatName"] != null)
                return null;

            var template = CreateTemplate(map.GetOrCreateDefinition(item));
            template.Original = () => item;
            template.Template = () => item.Clone(false);
            return template;
        }
Example #13
0
		public void CanClone_Item_WithObjectDetail()
		{
			ContentItem root = CreateOneItem<AnItem>(1, "root", null);
			X originalValue = new X { Number = 123};
			root["TheDetail"] = originalValue;
			ContentItem clonedRoot = root.Clone(false);

			X clonedValue = (X) clonedRoot["TheDetail"];
			Assert.AreEqual(clonedValue.Number, originalValue.Number);
		}
Example #14
0
 /// <summary>Copies an item and all sub-items to a destination</summary>
 /// <param name="source">The item to copy</param>
 /// <param name="destination">The destination below which to place the copied item</param>
 /// <param name="includeChildren">Whether child items should be copied as well.</param>
 /// <returns>The copied item</returns>
 public virtual ContentItem Copy(ContentItem source, ContentItem destination, bool includeChildren)
 {
     if (includeChildren)
     {
         return(Copy(source, destination));
     }
     else
     {
         return(Copy(source.Clone(false), destination));
     }
 }
Example #15
0
		public CommandContext(ItemDefinition definition, ContentItem content, string userInterface, IPrincipal user, IContentForm<CommandContext> binder, IValidator<CommandContext> validator)
        {
			Definition = definition;
            Content = content;
			Original = content.VersionOf.Value ?? content.Clone(false);
            Interface = userInterface;
            User = user;
            Binder = binder;
            Validator = validator;
            ValidationErrors = new List<ValidationError>();
            Errors = new List<Exception>();
			Parameters = new Dictionary<string, object>();
        }
Example #16
0
 public CommandContext(ItemDefinition definition, ContentItem content, string userInterface, IPrincipal user, IContentForm <CommandContext> binder, IValidator <CommandContext> validator)
 {
     Definition       = definition;
     Content          = content;
     Original         = content.VersionOf.Value ?? content.Clone(false);
     Interface        = userInterface;
     User             = user;
     Binder           = binder;
     Validator        = validator;
     ValidationErrors = new List <ValidationError>();
     Errors           = new List <Exception>();
     Parameters       = new Dictionary <string, object>();
 }
Example #17
0
        public TemplateDefinition GetTemplate(ContentItem item)
        {
            if (item["TemplatName"] != null)
            {
                return(null);
            }

            var template = CreateTemplate(map.GetOrCreateDefinition(item));

            template.Original = () => item;
            template.Template = () => item.Clone(false);
            return(template);
        }
Example #18
0
        protected override bool UpdateItem(NameValueCollection request, ContentItem item)
	    {
            item = item.Clone(true);
            item.Name = null;
            item.ZoneName = request["zone"];
            foreach (var child in Find.EnumerateChildren(item, true, false))
                child.SetVersionKey(Guid.NewGuid().ToString());

            int newIndex;
            var parent = GetParentAndIndex(request, Page, out newIndex);
            if (parent == null)
                throw new Exception("could not locate target of action");

            InsertItem(parent, item, newIndex);

            return true;
	    }
Example #19
0
        public override ContentItem Copy(ContentItem source, ContentItem destination)
        {
            logger.Info("ContentPersister.Copy " + source + " to " + destination);
            ContentItem cloned = source.Clone(includeChildren: true);

            if (cloned.Name == source.ID.ToString())
            {
                cloned.Name = null;
            }
            cloned.Parent = destination;

            Save(cloned);
            foreach (var descendant in Find.EnumerateChildren(cloned).ToArray())
            {
                Save(descendant);
            }

            return(cloned);
        }
Example #20
0
        /// <summary>Creates a version of the item. This must be called before the item item is modified to save a version before modifications.</summary>
        /// <param name="item">The item to create a old version of.</param>
        /// <returns>The old version.</returns>
        public virtual ContentItem SaveVersion(ContentItem item)
        {
            CancellableItemEventArgs args = new CancellableItemEventArgs(item);

            if (ItemSavingVersion != null)
            {
                ItemSavingVersion.Invoke(this, args);
            }
            if (!args.Cancel)
            {
                item = args.AffectedItem;

                ContentItem oldVersion = item.Clone(false);
                if (item.State == ContentState.Published)
                {
                    stateChanger.ChangeTo(oldVersion, ContentState.Unpublished);
                }
                else
                {
                    stateChanger.ChangeTo(oldVersion, ContentState.Draft);
                }
                oldVersion.Expires   = Utility.CurrentTime().AddSeconds(-1);
                oldVersion.Updated   = Utility.CurrentTime().AddSeconds(-1);
                oldVersion.Parent    = null;
                oldVersion.VersionOf = item;
                if (item.Parent != null)
                {
                    oldVersion["ParentID"] = item.Parent.ID;
                }
                itemRepository.SaveOrUpdate(oldVersion);

                if (ItemSavedVersion != null)
                {
                    ItemSavedVersion.Invoke(this, new ItemEventArgs(oldVersion));
                }

                TrimVersionCountTo(item, maximumVersionsPerItem);

                return(oldVersion);
            }
            return(null);
        }
Example #21
0
        protected override bool UpdateItem(NameValueCollection request, ContentItem item)
        {
            item          = item.Clone(true);
            item.Name     = null;
            item.ZoneName = request["zone"];
            foreach (var child in Find.EnumerateChildren(item, true, false))
            {
                child.SetVersionKey(Guid.NewGuid().ToString());
            }

            int newIndex;
            var parent = GetParentAndIndex(request, Page, out newIndex);

            if (parent == null)
            {
                throw new Exception("could not locate target of action");
            }

            InsertItem(parent, item, newIndex);

            return(true);
        }
		private TemplateDefinition CreateTemplateInfo(ContentItem template)
		{
			var info = new TemplateDefinition
			{
				Name = template.Name,
				Title = template.Title,
				Description = template.GetDetail(TemplateDescription, ""),
				TemplateUrl = template.Url,
				Definition = map.GetOrCreateDefinition(template.GetContentType(), template.Name),
				TemplateFactory = () =>
				{
					var clone = template.Clone(true);
					clone.SetDetail(TemplateDescription, null, typeof(string));
					clone.Title = "";
					clone.Name = null;
					clone.TemplateKey = template.Name;
					return clone;
				},
				OriginalFactory = () => template
			};
			return info;
		}
Example #23
0
        private TemplateDefinition CreateTemplateInfo(ContentItem template)
        {
            var clone = template.Clone(true);

            clone.SetDetail(TemplateDescription, null, typeof(string));
            clone.Title           = "";
            clone.Name            = null;
            clone["TemplateName"] = template.Name;
            var info = new TemplateDefinition
            {
                Name        = template.Name,
                Title       = template.Title,
                Description = template.GetDetail(TemplateDescription, ""),
                TemplateUrl = template.Url,
                Definition  = definitions.GetDefinition(template.GetContentType()).Clone(),
                Template    = clone,
                Original    = template
            };

            info.Definition.Template = template.Name;
            return(info);
        }
Example #24
0
        private TemplateDefinition CreateTemplateInfo(ContentItem template)
        {
            var info = new TemplateDefinition
            {
                Name            = template.Name,
                Title           = template.Title,
                Description     = template.GetDetail(TemplateDescription, ""),
                TemplateUrl     = template.Url,
                Definition      = map.GetOrCreateDefinition(template.GetContentType(), template.Name),
                TemplateFactory = () =>
                {
                    var clone = template.Clone(true);
                    clone.SetDetail(TemplateDescription, null, typeof(string));
                    clone.Title       = "";
                    clone.Name        = null;
                    clone.TemplateKey = template.Name;
                    return(clone);
                },
                OriginalFactory = () => template
            };

            return(info);
        }
Example #25
0
        private string CopyItem(NameValueCollection request)
        {
            var         path = PartsExtensions.EnsureDraft(versions, versionRepository, navigator, request);
            ContentItem item = path.CurrentItem;
            ContentItem page = path.CurrentPage;

            item          = item.Clone(true);
            item.Name     = null;
            item.ZoneName = request["zone"];
            foreach (var child in Find.EnumerateChildren(item, true, false))
            {
                child.SetVersionKey(Guid.NewGuid().ToString());
            }

            var         beforeItem = PartsExtensions.GetBeforeItem(navigator, request, page);
            ContentItem parent;

            if (beforeItem != null)
            {
                parent = beforeItem.Parent;
                int newIndex = parent.Children.IndexOf(beforeItem);
                ValidateLocation(item, parent);
                Utility.Insert(item, parent, newIndex);
            }
            else
            {
                parent = PartsExtensions.GetBelowItem(navigator, request, page);
                ValidateLocation(item, parent);
                Utility.Insert(item, parent, parent.Children.Count);
            }

            Utility.UpdateSortOrder(parent.Children);
            versionRepository.Save(page);

            return(page.Url.ToUrl().SetQueryParameter("edit", "drag"));
        }
Example #26
0
		public override ContentItem Copy(ContentItem source, ContentItem destination)
		{
			Trace.TraceInformation("ContentPersister.Copy " + source + " to " + destination);
			ContentItem cloned = source.Clone(includeChildren:true);
			if (cloned.Name == source.ID.ToString())
				cloned.Name = null;
			cloned.Parent = destination;

            Save(cloned);
            foreach (var descendant in Find.EnumerateChildren(cloned).ToArray())
                Save(descendant);

			return cloned;
		}
 private ContentTemplate CreateTemplateInfo(ContentItem template)
 {
     var clone = template.Clone(true);
     var info = new ContentTemplate
     {
         Name = template.Name,
         Title = template.Title,
         Description = template.GetDetail(TemplateDescription, ""),
         TemplateUrl = template.Url,
         Definition = definitions.GetDefinition(template.GetContentType()),
         Template = clone,
         Original = template
         //HiddenEditors = (template.GetDetailCollection("HiddenEditors", false) ?? new DetailCollection()).ToList<string>(),
     };
     clone.SetDetail(TemplateDescription, null, typeof(string));
     clone.Title = "";
     clone.Name = null;
     return info;
 }
Example #28
0
		public override ContentItem Copy(ContentItem source, ContentItem destination)
		{
			Trace.TraceInformation("ContentPersister.Copy " + source + " to " + destination);
			ContentItem cloned = source.Clone(includeChildren:true);
			if (cloned.Name == source.ID.ToString())
				cloned.Name = null;
			cloned.Parent = destination;

			Save(cloned);

			return cloned;
		}
Example #29
0
        /// <summary>Creates an old version of an item. This must be called before the item item is modified.</summary>
        /// <param name="item">The item to create a old version of.</param>
        /// <returns>The old version.</returns>
        public virtual ContentItem SaveVersion(ContentItem item)
        {
            CancelItemEventArgs args = new CancelItemEventArgs(item);
            if (ItemSavingVersion != null)
                ItemSavingVersion.Invoke(this, args);
            if (!args.Cancel)
            {
                item = args.AffectedItem;

                ContentItem oldVersion = item.Clone(false);
                oldVersion.Expires = Utility.CurrentTime().AddSeconds(-1);
                oldVersion.Updated = Utility.CurrentTime().AddSeconds(-1);
                oldVersion.Parent = null;
                oldVersion.TranslationOf = null;
                oldVersion.VersionOf = item;
                if (item.Parent != null)
                    oldVersion["ParentID"] = item.Parent.ID;
                if (item.TranslationOf != null)
                    oldVersion["TranslationOfID"] = item.TranslationOf.ID;
                _itemRepository.SaveOrUpdate(oldVersion);

                if (ItemSavedVersion != null)
                    ItemSavedVersion.Invoke(this, new ItemEventArgs(oldVersion));

                return oldVersion;
            }
            return null;
        }
Example #30
0
 private TemplateDefinition CreateTemplateInfo(ContentItem template)
 {
     var clone = template.Clone(true);
     clone.SetDetail(TemplateDescription, null, typeof(string));
     clone.Title = "";
     clone.Name = null;
     clone["TemplateName"] = template.Name;
     var info = new TemplateDefinition
     {
         Name = template.Name,
         Title = template.Title,
         Description = template.GetDetail(TemplateDescription, ""),
         TemplateUrl = template.Url,
         Definition = definitions.GetDefinition(template.GetContentType()).Clone(),
         Template = clone,
         Original = template
     };
     info.Definition.Template = template.Name;
     return info;
 }