public void Describe(DescribeSortCriterionContext describe)
        {
            foreach (var part in _contentDefinitionManager.ListUserDefinedPartDefinitions())
            {
                if (!part.Fields.Any())
                {
                    continue;
                }

                var descriptor = describe.For(part.Name + "ContentFields", T("{0} Content Fields", part.Name.CamelFriendly()), T("Content Fields for {0}", part.Name.CamelFriendly()));

                foreach (var field in part.Fields)
                {
                    var localField = field;
                    var localPart  = part;
                    var drivers    = _contentFieldDrivers.Where(x => x.GetFieldInfo().Any(fi => fi.FieldTypeName == localField.FieldDefinition.Name)).ToList();

                    var membersContext = new DescribeMembersContext(
                        (storageName, storageType, displayName, description) => {
                        // look for a compatible field type editor
                        IConcreteFieldTypeEditor fieldTypeEditor = _fieldTypeEditors.FirstOrDefault(x => x.CanHandle(localField.FieldDefinition.Name, storageType))
                                                                   ?? _fieldTypeEditors.FirstOrDefault(x => x.CanHandle(storageType));

                        if (fieldTypeEditor == null)
                        {
                            return;
                        }

                        descriptor.Element(
                            type: localPart.Name + "." + localField.Name + "." + storageName ?? "",
                            name: new LocalizedString(localField.DisplayName + (displayName != null ? ":" + displayName.Text : "")),
                            description: description ?? T("{0} property for {1}", storageName, localField.DisplayName),
                            sort: context => fieldTypeEditor.ApplySortCriterion(context, storageName, storageType, localPart, localField),
                            display: context => DisplaySortCriterion(context, localPart, localField),
                            form: SortCriterionFormProvider.FormName);
                    });

                    foreach (var driver in drivers)
                    {
                        driver.Describe(membersContext);
                    }
                }
            }
        }
示例#2
0
        public bool Build()
        {
            // user-defined parts
            // except for those parts with the same name as a type (implicit type's part or a mistake)
            var userDefinedParts = _contentDefinitionManager
                                   .ListUserDefinedPartDefinitions()
                                   .Select(cpd => new DynamicTypeDefinition {
                Name   = cpd.Name,
                Fields = cpd.Fields.Select(f => new DynamicFieldDefinition {
                    Name = f.Name,
                    Type = GetFieldType(f.FieldDefinition.Name)
                })
            }).ToList();

            if (userDefinedParts.Any())
            {
                Build(userDefinedParts);
                return(true);
            }
            return(false);
        }