Beispiel #1
0
        private void ProcessInternal(HiddenStringFieldUpdateProcessVariant variant, string contentTypeName, string partName, string fieldName)
        {
            var contents = _contentManager.Query(
                VersionOptions.Latest, contentTypeName);
            var contentCount = _contentManager.Query(
                VersionOptions.Latest, contentTypeName).Count();

            for (var i = 0; i < contentCount; i += PAGE_SIZE)
            {
                // Content Items with the required part.
                var contentPage = Enumerable.Empty <ContentItem>();
                if (variant == HiddenStringFieldUpdateProcessVariant.All)
                {
                    contentPage = contents.Slice(i, PAGE_SIZE)
                                  .Where(ci => ci.Parts
                                         .Any(pa => pa.PartDefinition.Name.Equals(partName, StringComparison.OrdinalIgnoreCase)));
                }
                else if (variant == HiddenStringFieldUpdateProcessVariant.Empty)
                {
                    contentPage = contents.Slice(i, PAGE_SIZE)
                                  .Where(ci => ci.Parts
                                         .Any(pa => pa.PartDefinition.Name.Equals(partName, StringComparison.OrdinalIgnoreCase) &&
                                              string.IsNullOrWhiteSpace(
                                                  (pa.Fields
                                                   .First(fi => fi.Name.Equals(fieldName, StringComparison.OrdinalIgnoreCase)) as HiddenStringField).Value)));
                }

                // Read settings from the first content item
                var firstCi = contentPage.FirstOrDefault();
                if (firstCi != null)
                {
                    var field = firstCi.Parts
                                .SelectMany(p => p.Fields)
                                .FirstOrDefault(f => f.Name.Equals(fieldName, StringComparison.OrdinalIgnoreCase));
                    if (field != null)
                    {
                        var settings = field.PartFieldDefinition.Settings.GetModel <HiddenStringFieldSettings>();
                        if (settings != null)
                        {
                            var parts = contentPage
                                        .Select(ci => ci.Parts
                                                .FirstOrDefault(pa => pa.PartDefinition.Name.Equals(partName, StringComparison.OrdinalIgnoreCase)));
                            if (settings.Tokenized)
                            {
                                ProcessPartsTokenized(fieldName, parts, settings.TemplateString);
                            }
                            else
                            {
                                ProcessParts(fieldName, parts, settings.TemplateString);
                            }
                        }
                    }
                }
            }
        }
        private IEnumerable <int> GetIdsToProcess(HiddenStringFieldUpdateProcessVariant variant, ContentPartFieldDefinitionBuilder builder)
        {
            var partDefinition = _contentDefinitionManager.GetPartDefinition(builder.PartName);

            return(_contentManager.Query(
                       _contentDefinitionManager.ListTypeDefinitions()
                       .Where(td => td.Parts.Any(ptd => ptd.PartDefinition.Name == partDefinition.Name))
                       .Select(td => td.Name)
                       .ToArray())
                   .List()
                   .Where(ci => ci.Parts.Where(_partsEnumerableFilters[variant](builder)).Any())
                   .Select(ci => ci.Id));
        }
 public void AddTask(HiddenStringFieldUpdateProcessVariant variant, HiddenStringFieldSettings settings, ContentPartFieldDefinitionBuilder builder)
 {
     if (variant != HiddenStringFieldUpdateProcessVariant.None)
     {
         _processingEngine
         .AddTask(_shellSettings,
                  _shellDescriptorManager.GetShellDescriptor(),
                  "IHiddenStringFieldUpdateProcessor.Process",
                  new Dictionary <string, object> {
             { "contentItemIds", GetIdsToProcess(variant, builder) },
             { "partName", builder.PartName },
             { "fieldName", builder.Name },
             { "settings", settings }
         });
     }
 }