/// <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); }
/// <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); }