public override bool ChangeFieldSharing(
            [NotNull] TemplateField fieldDefinition,
            TemplateFieldSharing sharing,
            [NotNull] CallContext context)
        {
            var converter = GetFieldSharingConverter();

            bool result;

            switch (sharing)
            {
            case TemplateFieldSharing.None:
                result = converter.MakeVersioned(fieldDefinition);
                break;

            case TemplateFieldSharing.Shared:
                result = converter.MakeShared(fieldDefinition);
                break;

            case TemplateFieldSharing.Unversioned:
                result = converter.MakeUnversioned(fieldDefinition);
                break;

            default:
                Log.Warn("Unknown sharing type in ChangeFieldSharing: " + sharing, this);
                return(false);
            }

            if (result)
            {
                CacheManager.ClearAllCaches();
            }

            return(result);
        }
Exemple #2
0
        /// <summary>
        /// When you change a template field from versioned to shared or unversioned (or vice versa), the conversion of the values
        /// in existing items with that field is NOT automatic. This method causes the requisite field updates (moving the values between db tables)
        /// </summary>
        protected void UpdateFieldSharingIfNeeded(IItemData serializedItemData, Item targetItem)
        {
            // This is what Sitecore's internal deserializer does instead. Will investigate if this is a better option. Also depends on which Sitecore version introduced this.
            //if (EventDisabler.IsActive)
            //	ReflectionUtil.CallMethod(targetItem.Database.Engines.TemplateEngine, "HandleItemSaved", new object[] {targetItem, (ItemChanges) ReflectionUtil.CallMethod(targetItem, "GetFullChanges"), false});
            //return;

            Assert.ArgumentNotNull(serializedItemData, nameof(serializedItemData));
            Assert.ArgumentNotNull(targetItem, nameof(targetItem));

            if (serializedItemData.TemplateId != TemplateIDs.TemplateField.Guid)
            {
                return;
            }

            var shared      = serializedItemData.SharedFields.FirstOrDefault(field => field.FieldId == TemplateFieldIDs.Shared.Guid);
            var unversioned = serializedItemData.SharedFields.FirstOrDefault(field => field.FieldId == TemplateFieldIDs.Unversioned.Guid);

            TemplateFieldSharing sharedness = TemplateFieldSharing.None;

            if (shared != null && shared.Value.Equals("1"))
            {
                sharedness = TemplateFieldSharing.Shared;
            }
            else if (unversioned != null && unversioned.Value.Equals("1"))
            {
                sharedness = TemplateFieldSharing.Unversioned;
            }

            var templateField = TemplateManager.GetTemplateField(targetItem.ID, targetItem.Parent.Parent.ID, targetItem.Database);

            if (templateField == null)
            {
                // BOMB WIG
                CacheManager.ClearAllCaches();
                targetItem.Database.Engines.TemplateEngine.Reset();

                templateField = TemplateManager.GetTemplateField(targetItem.ID, targetItem.Parent.Parent.ID, targetItem.Database);
            }

            Assert.IsNotNull(templateField, $"Unable to find template field {targetItem.ID} in {targetItem.Database.Name}, even after resetting the engine.");

            TemplateFieldSharing templateSharedness = TemplateFieldSharing.None;

            if (templateField.IsShared)
            {
                templateSharedness = TemplateFieldSharing.Shared;
            }
            else if (templateField.IsUnversioned)
            {
                templateSharedness = TemplateFieldSharing.Unversioned;
            }

            if (templateSharedness == sharedness)
            {
                return;
            }

            TemplateManager.ChangeFieldSharing(templateField, sharedness, targetItem.Database);
        }
        /// <summary>
        /// When you change a template field from versioned to shared or unversioned (or vice versa), the conversion of the values
        /// in existing items with that field is NOT automatic. This method causes the requisite field updates (moving the values between db tables)
        /// </summary>
        protected void UpdateFieldSharingIfNeeded(IItemData serializedItemData, Item targetItem)
        {
            Assert.ArgumentNotNull(serializedItemData, nameof(serializedItemData));
            Assert.ArgumentNotNull(targetItem, nameof(targetItem));

            if (serializedItemData.TemplateId != TemplateIDs.TemplateField.Guid)
            {
                return;
            }

            var shared      = serializedItemData.SharedFields.FirstOrDefault(field => field.FieldId == TemplateFieldIDs.Shared.Guid);
            var unversioned = serializedItemData.SharedFields.FirstOrDefault(field => field.FieldId == TemplateFieldIDs.Unversioned.Guid);

            TemplateFieldSharing sharedness = TemplateFieldSharing.None;

            if (shared != null && shared.Value.Equals("1"))
            {
                sharedness = TemplateFieldSharing.Shared;
            }
            else if (unversioned != null && unversioned.Value.Equals("1"))
            {
                sharedness = TemplateFieldSharing.Unversioned;
            }

            var templateField = TemplateManager.GetTemplateField(targetItem.ID, targetItem.Parent.Parent.ID, targetItem.Database);

            if (templateField == null)
            {
                // BOMB WIG
                CacheManager.ClearAllCaches();
                targetItem.Database.Engines.TemplateEngine.Reset();

                templateField = TemplateManager.GetTemplateField(targetItem.ID, targetItem.Parent.Parent.ID, targetItem.Database);
            }

            Assert.IsNotNull(templateField, $"Unable to find template field {targetItem.ID} in {targetItem.Database.Name}, even after resetting the engine.");

            TemplateFieldSharing templateSharedness = TemplateFieldSharing.None;

            if (templateField.IsShared)
            {
                templateSharedness = TemplateFieldSharing.Shared;
            }
            else if (templateField.IsUnversioned)
            {
                templateSharedness = TemplateFieldSharing.Unversioned;
            }

            if (templateSharedness == sharedness)
            {
                return;
            }

            TemplateManager.ChangeFieldSharing(templateField, sharedness, targetItem.Database);
        }
Exemple #4
0
        public override bool ChangeFieldSharing(TemplateField fieldDefinition, TemplateFieldSharing sharing, CallContext context)
        {
            if (HeadProvider.ChangeFieldSharing(fieldDefinition, sharing, context))
            {
                this.Trace(true, null, context);

                return(true);
            }

            throw new NotImplementedException();
        }
Exemple #5
0
        /// <summary>
        /// When you change a template field from versioned to shared or unversioned (or vice versa), the conversion of the values
        /// in existing items with that field is NOT automatic. This method causes the requisite field updates (moving the values between db tables)
        /// </summary>
        protected void UpdateFieldSharingIfNeeded(IItemData serializedItemData, Item targetItem)
        {
            if (serializedItemData.TemplateId != TemplateIDs.TemplateField.Guid)
            {
                return;
            }

            var shared      = serializedItemData.SharedFields.FirstOrDefault(field => field.FieldId == TemplateFieldIDs.Shared.Guid);
            var unversioned = serializedItemData.SharedFields.FirstOrDefault(field => field.FieldId == TemplateFieldIDs.Unversioned.Guid);

            TemplateFieldSharing sharedness = TemplateFieldSharing.None;

            if (shared != null && shared.Value.Equals("1"))
            {
                sharedness = TemplateFieldSharing.Shared;
            }
            else if (unversioned != null && unversioned.Value.Equals("1"))
            {
                sharedness = TemplateFieldSharing.Unversioned;
            }

            var templateField = TemplateManager.GetTemplateField(targetItem.ID, targetItem.Parent.Parent.ID, targetItem.Database);

            TemplateFieldSharing templateSharedness = TemplateFieldSharing.None;

            if (templateField.IsShared)
            {
                templateSharedness = TemplateFieldSharing.Shared;
            }
            else if (templateField.IsUnversioned)
            {
                templateSharedness = TemplateFieldSharing.Unversioned;
            }

            if (templateSharedness == sharedness)
            {
                return;
            }

            TemplateManager.ChangeFieldSharing(templateField, sharedness, targetItem.Database);
        }
 public sealed override bool ChangeFieldSharing(TemplateField fieldDefinition, TemplateFieldSharing sharing, CallContext context)
 {
     throw new NotSupportedException(MustNotBeCalled);
 }
 public override bool ChangeFieldSharing(TemplateField fieldDefinition, TemplateFieldSharing sharing, CallContext context)
 {
     return base.ChangeFieldSharing(fieldDefinition, sharing, context);
 }
Exemple #8
0
 public override bool ChangeFieldSharing(TemplateField fieldDefinition, TemplateFieldSharing sharing, CallContext context)
 {
     return(base.ChangeFieldSharing(fieldDefinition, sharing, context));
 }
    public void ChangeFieldSharing(ID fieldID, TemplateFieldSharing sharing)
    {
      Assert.ArgumentNotNull(fieldID, nameof(fieldID));

      if (this.ReadOnly)
      {
        return;
      }

      Lock.EnterWriteLock();
      try
      {
        foreach (var item in this.ItemsCache.Values)
        {
          if (item == null)
          {
            continue;
          }

          switch (sharing)
          {
            case TemplateFieldSharing.None:
              this.ChangeFieldSharingToVersioned(item, fieldID);
              break;

            case TemplateFieldSharing.Unversioned:
              this.ChangeFieldSharingToUnversioned(item, fieldID);
              break;

            case TemplateFieldSharing.Shared:
              this.ChangeFieldSharingToShared(item, fieldID);
              break;
          }
        }
      }
      finally
      {
        Lock.ExitWriteLock();
      }

      this.Commit();
    }