Ejemplo n.º 1
0
        public override bool CopyItem(ItemDefinition source, ItemDefinition destination, string copyName, ID copyID, CallContext context)
        {
#if DEBUG
            this.Trace(true, null, source.ID, destination.ID, copyName, copyID, context);
#endif

            // source item is in head provider
            if (HeadProvider.GetItemDefinition(source.ID, context) != null)
            {
                if (HeadProvider.CopyItem(source, destination, copyName, copyID, context))
                {
                    return(true);
                }
            }

            var database = context.DataManager.Database;
            var itemId   = source.ID;

            using (new SecurityDisabler())
            {
                var item = database.GetItem(itemId);
                Assert.IsNotNull(item, nameof(item));

                using (var limit = new RecursionLimit($"{nameof(CopyItem)}-{item.ID}-{destination.ID}", 1))
                {
                    if (limit.Exceeded)
                    {
                        return(true);
                    }

                    var defaultOptions = ItemSerializerOptions.GetDefaultOptions();
                    defaultOptions.AllowDefaultValues  = false; // TODO: needs checking
                    defaultOptions.AllowStandardValues = false;
                    defaultOptions.IncludeBlobFields   = true;
                    defaultOptions.ProcessChildren     = true; // TODO: slow, needs optimization
                    var outerXml = item.GetOuterXml(defaultOptions);

                    var target = database.GetItem(destination.ID);
                    Assert.IsNotNull(target, nameof(target));

                    target.Paste(outerXml, true, PasteMode.Overwrite);
                    Log.Audit(this, "Default item {0} ({1}) was copied to {2} in head provider", item.Name, item.ID.ToString(), destination.ID.ToString());

                    return(true);
                }
            }
        }
Ejemplo n.º 2
0
        private bool MigrateDefaultItem([NotNull] ItemDefinition itemDefinition, [NotNull] Item item, [NotNull] CallContext context)
        {
            Assert.ArgumentNotNull(itemDefinition, nameof(itemDefinition));
            Assert.ArgumentNotNull(item, nameof(item));
            Assert.ArgumentNotNull(context, nameof(context));

            using (var limit = new RecursionLimit($"{nameof(MigrateDefaultItem)}-{item.ID}", 1))
            {
                if (limit.Exceeded)
                {
                    return(true);
                }

                using (new SecurityDisabler())
                {
                    var defaultOptions = ItemSerializerOptions.GetDefaultOptions();
                    defaultOptions.AllowDefaultValues  = false;
                    defaultOptions.AllowStandardValues = false;
                    defaultOptions.IncludeBlobFields   = true;
                    defaultOptions.ProcessChildren     = false;
                    var outerXml = item.GetOuterXml(defaultOptions);

                    var parent = item.Parent;
                    Assert.IsNotNull(parent, nameof(parent));

                    parent.Paste(outerXml, false, PasteMode.Overwrite);
                    Log.Audit(this, "Default item {0} ({1}) was migrated to head provider", item.Name, item.ID.ToString());

                    var result = MoveItem(itemDefinition, GetItemDefinition(parent.ID, context), context);

                    if (!result)
                    {
                        Log.Error($"Cannot migrate default item {item.Name} ({item.ID}) to head data provider", this);
                    }
                    else
                    {
                        item.Database.RemoveFromCaches(item.ID);
                    }

                    return(result);
                }
            }
        }
Ejemplo n.º 3
0
        public override void Serialize(Field field, JsonTextWriter writer)
        {
            Assert.ArgumentNotNull(field, nameof(field));
            Assert.ArgumentNotNull(writer, nameof(writer));

            using (RecursionLimit recursionLimit = new RecursionLimit(string.Format("{0}|{1}|{2}", GetType().FullName, field.Item.ID, field.ID), 1))
            {
                if (recursionLimit.Exceeded)
                {
                    return;
                }

                Item[] items = ((MultilistField)field).GetItems();
                if (items == null || items.Length == 0)
                {
                    writer.WritePropertyName(field.Name);
                    writer.WriteStartArray();
                    writer.WriteEndArray();
                }
                else
                {
                    writer.WritePropertyName(field.Name);
                    writer.WriteStartArray();
                    foreach (Item obj in items)
                    {
                        if (obj.IsDerived(productTemplateId))
                        {
                            continue;
                        }

                        writer.WriteStartObject();
                        writer.WritePropertyName("id");
                        writer.WriteValue(obj.ID.Guid.ToString());
                        writer.WritePropertyName("fields");
                        writer.WriteRawValue(ItemSerializer.Serialize(obj));
                        writer.WriteEndObject();
                    }
                    writer.WriteEndArray();
                }
            }
        }