protected override void Describe(DescribeMembersContext context)
 {
     context
     .Member(null, typeof(string), T("Value"), T("The value of the field."))
     .Member("HashAlgorithm", typeof(string), T("HashAlgorithm"), T("The algorithm the field value is hashed with."))
     .Member("Salt", typeof(string), T("Salt"), T("The salt used to hash the field value."));
 }
        /// <summary>
        ///
        /// </summary>
        /// <param name="fieldIndexPart"></param>
        /// <param name="indexService"></param>
        private void DescribeValuesToindex(FieldIndexPart fieldIndexPart, Action <IndexServiceContext> indexService)
        {
            foreach (var part in fieldIndexPart.ContentItem.Parts)
            {
                foreach (var field in part.PartDefinition.Fields)
                {
                    // get all drivers for the current field type
                    // the driver will describe what values of the field should be indexed
                    var drivers = _contentFieldDrivers.Where(x => x.GetFieldInfo().Any(fi => fi.FieldTypeName == field.FieldDefinition.Name)).ToList();

                    ContentPart localPart = part;
                    ContentPartFieldDefinition localField = field;
                    var membersContext = new DescribeMembersContext(
                        (storageName, storageType, displayName, description) => {
                        var fieldStorage = _fieldStorageProvider.BindStorage(localPart, localField);

                        // fieldStorage.Get<T>(storageName)
                        var getter     = typeof(IFieldStorage).GetMethod("Get").MakeGenericMethod(storageType);
                        var fieldValue = getter.Invoke(fieldStorage, new[] { storageName });
                        indexService(new IndexServiceContext {
                            LocalPart   = localPart,
                            LocalField  = localField,
                            StorageName = storageName,
                            FieldValue  = fieldValue,
                            StorageType = storageType
                        });
                    });

                    foreach (var driver in drivers)
                    {
                        driver.Describe(membersContext);
                    }
                }
            }
        }
Exemple #3
0
 protected override void Describe(DescribeMembersContext context)
 {
     context
     .Member(null, typeof(DateTime), T("Value"), T("The date time value of the field."))
     .Enumerate <DateTimeField>(() => field => new[] { field.DateTime })
     ;
 }
Exemple #4
0
 protected override void Describe(DescribeMembersContext context)
 {
     context
     .Member(null, typeof(Boolean), T("Value"), T("The boolean value of the field."))
     .Enumerate <BooleanField>(() => field => new [] { field.Value })
     ;
 }
Exemple #5
0
        private List <IFieldTypeEditor> GetFieldEditors(string definitionName, string propertyName)
        {
            var fieldTypeEditors = new List <IFieldTypeEditor>();
            // drivers for the ContentField
            var drivers = DriversForField(definitionName);
            // delegate that will help us figure out the tables
            var membersContext = new DescribeMembersContext(
                (storageName, storageType, displayName, description) => {
                // get the correct field type editor
                if ((storageName == null && propertyName == null) ||
                    (storageName ?? string.Empty).Equals(propertyName ?? string.Empty))
                {
                    IFieldTypeEditor fieldTypeEditor = _fieldTypeEditors
                                                       .FirstOrDefault(x => x.CanHandle(storageType));
                    if (fieldTypeEditor != null)
                    {
                        fieldTypeEditors.Add(fieldTypeEditor);
                    }
                }
            });

            foreach (var driver in drivers)
            {
                driver.Describe(membersContext);
            }
            return(fieldTypeEditors);
        }
 protected override void Describe(DescribeMembersContext context)
 {
     context
     .Member("Text", typeof(string), T("Text"), T("The text of the link."))
     .Member(null, typeof(string), T("Url"), T("The url of the link."))
     .Enumerate <LinkField>(() => field => new[] { field.Value });
 }
        public Type GetFieldType(string fieldNameType)
        {
            var  drivers        = _contentFieldDrivers.Where(x => x.GetFieldInfo().Any(fi => fi.FieldTypeName == fieldNameType)).ToList();
            Type defaultType    = typeof(string);
            var  membersContext = new DescribeMembersContext(
                (storageName, storageType, displayName, description) => {
                defaultType = storageType;
            });

            foreach (var driver in drivers)
            {
                driver.Describe(membersContext);
            }
            return(defaultType);
        }
Exemple #8
0
        public void Describe(DescribeFilterContext describe)
        {
            foreach (var part in _contentDefinitionManager.ListPartDefinitions())
            {
                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 concreteFieldTypeEditor = _fieldTypeEditors.FirstOrDefault(x => x.CanHandle(localField.FieldDefinition.Name, storageType))
                                                                           ?? _fieldTypeEditors.FirstOrDefault(x => x.CanHandle(storageType));
                        IFieldTypeEditor fieldTypeEditor = concreteFieldTypeEditor;

                        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),
                            filter: context => concreteFieldTypeEditor.ApplyFilter(context, storageName, storageType, localPart, localField),
                            display: context => fieldTypeEditor.DisplayFilter(localPart.Name.CamelFriendly() + "." + localField.DisplayName, storageName, context.State),
                            form: fieldTypeEditor.FormName);
                    });

                    foreach (var driver in drivers)
                    {
                        driver.Describe(membersContext);
                    }
                }
            }
        }
 protected override void Describe(DescribeMembersContext context)
 {
     context
     .Member(null, typeof(string), null, null)
     .Member("alpha", typeof(string), null, null)
     .Member("string", typeof(string), null, null)
     .Member("int1", typeof(int), null, null)
     .Member("int2", typeof(int), null, null)
     .Member("long1", typeof(long), null, null)
     .Member("long2", typeof(long), null, null)
     .Member("datetime", typeof(DateTime), null, null)
     .Member("bool1", typeof(bool), null, null)
     .Member("bool2", typeof(bool), null, null)
     .Member("decimal1", typeof(decimal), null, null)
     .Member("decimal2", typeof(decimal), null, null)
     .Member("double1", typeof(double), null, null)
     .Member("double2", typeof(double), null, null);
 }
Exemple #10
0
        public void Describe(DescribeFilterContext describe)
        {
            foreach (var part in _contentDefinitionManager.ListPartDefinitions())
            {
                if (!part.Fields.Any())
                {
                    continue;
                }

                var descriptor = describe.For(part.Name + "ContentFieldsNullSafe", T("{0} Content Fields (null-safe)", part.Name.CamelFriendly()), T("Content Fields for {0} (null-safe).", 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.
                        IFieldTypeEditor fieldTypeEditor = _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 : "") + " (null-safe)"),
                            description: new LocalizedString(description != null ? description + " (null-safe)" : "No filter will be applied if the filter value is empty, so items indexed as null in the database won't be excluded from the result."),
                            filter: context => ApplyFilter(context, fieldTypeEditor, storageName, storageType, localPart, localField),
                            display: context => fieldTypeEditor.DisplayFilter(localPart.Name + "." + localField.DisplayName, storageName, context.State),
                            form: fieldTypeEditor.FormName);
                    });

                    foreach (var driver in drivers)
                    {
                        driver.Describe(membersContext);
                    }
                }
            }
        }
Exemple #11
0
        public void Publishing(PublishContentContext context, FieldIndexPart fieldIndexPart)
        {
            foreach (var part in fieldIndexPart.ContentItem.Parts)
            {
                foreach (var field in part.PartDefinition.Fields)
                {
                    // get the correct field storage provider
                    var fieldStorageProvider = _fieldStorageProviderSelector.GetProvider(field);

                    // get all drivers for the current field type
                    // the driver will describe what values of the field should be indexed
                    var drivers = _contentFieldDrivers.Where(x => x.GetFieldInfo().Any(fi => fi.FieldTypeName == field.FieldDefinition.Name)).ToList();

                    ContentPart localPart = part;
                    ContentPartFieldDefinition localField = field;
                    var membersContext = new DescribeMembersContext(
                        (storageName, storageType, displayName, description) => {
                        var fieldStorage = fieldStorageProvider.BindStorage(localPart, localField);

                        // fieldStorage.Get<T>(storageName)
                        var getter     = typeof(IFieldStorage).GetMethod("Get").MakeGenericMethod(storageType);
                        var fieldValue = getter.Invoke(fieldStorage, new[] { storageName });

                        _fieldIndexService.Set(fieldIndexPart,
                                               localPart.PartDefinition.Name,
                                               localField.Name,
                                               storageName, fieldValue, storageType);
                    });

                    foreach (var driver in drivers)
                    {
                        driver.Describe(membersContext);
                    }
                }
            }
        }
 protected virtual void Describe(DescribeMembersContext context)
 {
 }
 void IContentFieldDriver.Describe(DescribeMembersContext context)
 {
     Describe(context);
 }
Exemple #14
0
 protected override void Describe(DescribeMembersContext context)
 {
     context.Member(null, typeof(decimal), T("Value"), T("The value of the field."));
 }
 protected override void Describe(DescribeMembersContext context)
 {
     context.Member("Amount", typeof(decimal?), T("Amount"), T("The amount of the money."))
     .Member("Currency", typeof(string), T("Currency"), T("The currency of the money."));
 }
 protected override void Describe(DescribeMembersContext context)
 {
     context
     .Member(null, typeof(string), T("Items"), T("A Json serialized list of the media."));
 }
 protected override void Describe(DescribeMembersContext context)
 {
     context
     .Member(null, typeof(string), T("Value"), T("The value of the field."))
     .Enumerate <InputField>(() => field => new[] { field.Value });
 }
Exemple #18
0
 protected override void Describe(DescribeMembersContext context)
 {
     context
     .Member(null, typeof(DateTime), T("Value"), T("The date time value of the field."));
 }
 protected override void Describe(DescribeMembersContext context)
 {
     context
     .Member(null, typeof(string), T("Value"), T("The Hex value string associated with the color (eg. #ff0000)."));
 }
 protected override void Describe(DescribeMembersContext context)
 {
     context
     .Member(null, typeof(string), T("Value"), T("The string associated with the field."))
     .Enumerate <HiddenStringField>(() => field => new[] { field.Value });
 }
Exemple #21
0
 protected override void Describe(DescribeMembersContext context)
 {
     context
     .Member(null, typeof(string), T("Url"), T("The url of the media."));
 }
 protected override void Describe(DescribeMembersContext context)
 {
     context
     .Member("Text", typeof(string), T("Text"), T("The text of the link."))
     .Member(null, typeof(string), T("Url"), T("The url of the link."));
 }
Exemple #23
0
 protected override void Describe(DescribeMembersContext context)
 {
     context
     .Member(null, typeof(string), T("值"), T("此字段值."))
     .Enumerate <TextBoxField>(() => field => new[] { field.Value });
 }
        public void Describe(DescribeGroupByContext describe)
        {
            foreach (var part in _contentDefinitionManager.ListPartDefinitions())
            {
                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
                        IFieldTypeEditor fieldTypeEditor = _fieldTypeEditors.FirstOrDefault(x => x.CanHandle(storageType));

                        if (fieldTypeEditor == null)
                        {
                            return;
                        }

                        if (localField.FieldDefinition.Name == "NumericField")
                        {
                            this.DescribeNumericFieldMemberContext(
                                localField: localField,
                                description: description,
                                storageName: storageName,
                                descriptor: descriptor,
                                displayName: displayName,
                                fieldTypeEditor: fieldTypeEditor,
                                localPart: localPart);
                        }
                        else if (localField.FieldDefinition.Name == "EnumerationField")
                        {
                            //field.FieldDefinition.Name
                            List <AggregateMethods> methods = new List <AggregateMethods>();
                            methods.Add(AggregateMethods.Count);

                            descriptor.Element(
                                type: localPart.Name + "." + localField.Name + "." + storageName,
                                name: T(localField.DisplayName),
                                description: T("group the result by {0} values", localField.DisplayName),
                                run: (query, method) => this.fieldAggregateQueryService.RunEnumerationAggregation(query, method, localField.Name, localPart.Name),
                                aggregateMethods: methods,
                                display: context => fieldTypeEditor.DisplayFilter(localPart.Name.CamelFriendly() + "." + localField.DisplayName, storageName, context.State));
                        }
                    });

                    foreach (var driver in drivers)
                    {
                        driver.Describe(membersContext);
                    }
                }
            }
        }
 protected override void Describe(DescribeMembersContext context)
 {
     context
     .Member(null, typeof(string), T("Value"), T("The selected values of the field."))
     .Enumerate <EnumerationField>(() => field => field.SelectedValues);
 }
 protected override void Describe(DescribeMembersContext context)
 {
     context
     .Member(null, typeof(string), T("HTML"), T("The HTML value of the field."))
     .Enumerate <HtmlBlockField>(() => field => new[] { RemoveTagsRegex.Replace(field.HTML, " ") });
 }
 protected override void Describe(DescribeMembersContext context)
 {
     context
     .Member(null, typeof(string), T("Ids"), T("A formatted list of the ids, e.g., {1},{42}"));
 }
Exemple #28
0
 protected override void Describe(DescribeMembersContext context)
 {
     // A field can have multiple values stored. If there are multiple values you should add them in such a form
     // here.
     context.Member("VideoId", typeof(string), T("Video ID"), T("The ID of the video."));
 }
Exemple #29
0
 protected override void Describe(DescribeMembersContext context)
 {
     context.Member(null, typeof(string), null, T("The value of the field."));
 }
        public InfosetFieldIndexingHandler(
            IEnumerable <IContentFieldDriver> contentFieldDrivers,
            IFieldStorageProvider fieldStorageProvider)
        {
            _contentFieldDrivers  = contentFieldDrivers;
            _fieldStorageProvider = fieldStorageProvider;

            OnIndexing <InfosetPart>(
                (context, cp) => {
                var infosetPart = context.ContentItem.As <InfosetPart>();
                if (infosetPart == null)
                {
                    return;
                }


                // part fields
                foreach (var part in infosetPart.ContentItem.Parts)
                {
                    foreach (var field in part.PartDefinition.Fields)
                    {
                        if (!field.Settings.GetModel <FieldIndexing>().Included)
                        {
                            continue;
                        }

                        // get all drivers for the current field type
                        // the driver will describe what values of the field should be indexed
                        var drivers = _contentFieldDrivers.Where(x => x.GetFieldInfo().Any(fi => fi.FieldTypeName == field.FieldDefinition.Name)).ToList();

                        ContentPart localPart = part;
                        ContentPartFieldDefinition localField = field;
                        var membersContext = new DescribeMembersContext(
                            (storageName, storageType, displayName, description) =>
                        {
                            var fieldStorage = _fieldStorageProvider.BindStorage(localPart, localField);

                            // fieldStorage.Get<T>(storageName)
                            var getter     = typeof(IFieldStorage).GetMethod("Get").MakeGenericMethod(storageType);
                            var fieldValue = getter.Invoke(fieldStorage, new[] { storageName });
                            var indexName  = String.Format("{0}-{1}", infosetPart.TypeDefinition.Name.ToLower(), field.Name.ToLower());

                            TypeCode typeCode = Type.GetTypeCode(storageType);
                            switch (typeCode)
                            {
                            case TypeCode.Empty:
                            case TypeCode.Object:
                            case TypeCode.DBNull:
                            case TypeCode.String:
                            case TypeCode.Char:
                                context.DocumentIndex.Add(indexName, fieldValue.ToString()).RemoveTags().Analyze();
                                break;

                            case TypeCode.Boolean:
                                context.DocumentIndex.Add(indexName, Convert.ToBoolean(fieldValue));
                                break;

                            case TypeCode.SByte:
                            case TypeCode.Int16:
                            case TypeCode.UInt16:
                            case TypeCode.Int32:
                            case TypeCode.UInt32:
                            case TypeCode.Int64:
                            case TypeCode.UInt64:
                                context.DocumentIndex.Add(indexName, Convert.ToInt32(fieldValue));
                                break;

                            case TypeCode.Single:
                            case TypeCode.Double:
                            case TypeCode.Decimal:
                                context.DocumentIndex.Add(indexName, Convert.ToDouble(fieldValue));
                                break;

                            case TypeCode.DateTime:
                                context.DocumentIndex.Add(indexName, Convert.ToDateTime(fieldValue));
                                break;
                            }
                        });

                        foreach (var driver in drivers)
                        {
                            driver.Describe(membersContext);
                        }
                    }
                }
            });
        }