Example #1
0
        /// <summary>
        /// Creates a <see cref="Rock.Field.FieldVisibilityRule"/>
        /// object from its view model representation.
        /// </summary>
        /// <param name="viewModel">The view model that represents the object.</param>
        /// <returns>The object created from the view model.</returns>
        internal static Rock.Field.FieldVisibilityRule FromViewModel(this FieldFilterRuleViewModel viewModel, List <FormFieldViewModel> formFields)
        {
            var rule = new Rock.Field.FieldVisibilityRule
            {
                Guid                    = viewModel.Guid,
                ComparisonType          = ( ComparisonType )viewModel.ComparisonType,
                ComparedToFormFieldGuid = viewModel.AttributeGuid,
                ComparedToValue         = viewModel.Value
            };

            if (rule.ComparedToFormFieldGuid.HasValue)
            {
                var comparisonValue = new Rock.Reporting.ComparisonValue
                {
                    ComparisonType = rule.ComparisonType,
                    Value          = rule.ComparedToValue
                };
                var field = formFields.Where(f => f.Guid == rule.ComparedToFormFieldGuid.Value).FirstOrDefault();

                if (field != null)
                {
                    var fieldType = FieldTypeCache.Get(field.FieldTypeGuid);

                    if (fieldType?.Field != null)
                    {
                        var privateConfigurationValues = fieldType.Field.GetPrivateConfigurationValues(field.ConfigurationValues);
                        var filterValues = fieldType.Field.GetPrivateFilterValue(comparisonValue, privateConfigurationValues).FromJsonOrNull <List <string> >();

                        if (filterValues != null && filterValues.Count == 2)
                        {
                            rule.ComparedToValue = filterValues[1];
                        }
                        else if (filterValues != null && filterValues.Count == 1)
                        {
                            rule.ComparedToValue = filterValues[0];
                        }
                    }
                }
                else
                {
                    var attribute = AttributeCache.Get(rule.ComparedToFormFieldGuid.Value);

                    if (attribute?.FieldType?.Field != null)
                    {
                        var filterValues = attribute.FieldType.Field.GetPrivateFilterValue(comparisonValue, attribute.ConfigurationValues).FromJsonOrNull <List <string> >();

                        if (filterValues != null && filterValues.Count == 2)
                        {
                            rule.ComparedToValue = filterValues[1];
                        }
                        else if (filterValues != null && filterValues.Count == 1)
                        {
                            rule.ComparedToValue = filterValues[0];
                        }
                    }
                }
            }

            return(rule);
        }
Example #2
0
        /// <summary>
        /// Creates a view model representation of a <see cref="Rock.Field.FieldVisibilityRule"/> object.
        /// </summary>
        /// <param name="rule">The object to be represented as a view model.</param>
        /// <returns>The view model representation.</returns>
        internal static FieldFilterRuleViewModel ToViewModel(this Rock.Field.FieldVisibilityRule rule)
        {
            var viewModel = new FieldFilterRuleViewModel
            {
                Guid           = rule.Guid,
                ComparisonType = ( int )rule.ComparisonType,
                SourceType     = 0,
                AttributeGuid  = rule.ComparedToFormFieldGuid,
                Value          = rule.ComparedToValue
            };

            if (rule.ComparedToFormFieldGuid.HasValue)
            {
                var attribute = AttributeCache.Get(rule.ComparedToFormFieldGuid.Value);

                if (attribute?.FieldType?.Field != null)
                {
                    var filterValues = new List <string> {
                        rule.ComparisonType.ConvertToInt().ToString(), rule.ComparedToValue
                    };
                    var comparisonValue = attribute.FieldType.Field.GetPublicFilterValue(filterValues.ToJson(), attribute.ConfigurationValues);
                    viewModel.Value = comparisonValue.Value;
                }
            }

            return(viewModel);
        }