/// <summary> /// Creates the model representation of the child controls used to display and edit the filter settings. /// </summary> /// <param name="entityType">The System Type of the entity to which the filter will be applied.</param> /// <param name="filterControl">The control that serves as the container for the filter controls.</param> /// <returns> /// The array of new controls created to implement the filter. /// </returns> public override Control[] CreateChildControls( Type entityType, FilterField filterControl ) { // Define Control: Person Data View Picker var ddlDataView = new DataViewPicker(); ddlDataView.ID = filterControl.GetChildControlInstanceName( _CtlDataView ); ddlDataView.Label = "Contains People from this Data View"; ddlDataView.Help = "A Person Data View that provides the set of possible Group Members."; filterControl.Controls.Add( ddlDataView ); var ddlCompare = ComparisonHelper.ComparisonControl( CountComparisonTypesSpecifier ); ddlCompare.Label = "where the number of matching Group Members is"; ddlCompare.ID = filterControl.GetChildControlInstanceName( _CtlComparison ); ddlCompare.AddCssClass( "js-filter-compare" ); filterControl.Controls.Add( ddlCompare ); var nbCount = new NumberBox(); nbCount.Label = " "; nbCount.ID = filterControl.GetChildControlInstanceName( _CtlMemberCount ); nbCount.AddCssClass( "js-filter-control js-member-count" ); nbCount.FieldName = "Member Count"; filterControl.Controls.Add( nbCount ); // Populate the Data View Picker ddlDataView.EntityTypeId = EntityTypeCache.Read( typeof(Model.Person) ).Id; return new Control[] {ddlDataView, ddlCompare, nbCount}; }
/// <summary> /// Creates the child controls. /// </summary> /// <returns></returns> public override Control[] CreateChildControls( Type entityType, FilterField filterControl ) { var ddlIntegerCompare = ComparisonHelper.ComparisonControl( ComparisonHelper.NumericFilterComparisonTypes ); ddlIntegerCompare.Label = "Count"; ddlIntegerCompare.ID = string.Format( "{0}_ddlIntegerCompare", filterControl.ID ); ddlIntegerCompare.AddCssClass( "js-filter-compare" ); filterControl.Controls.Add( ddlIntegerCompare ); var nbMemberCount = new NumberBox(); nbMemberCount.Label = " "; nbMemberCount.ID = string.Format( "{0}_nbMemberCount", filterControl.ID ); nbMemberCount.AddCssClass( "js-filter-control js-member-count" ); nbMemberCount.FieldName = "Member Count"; filterControl.Controls.Add( nbMemberCount ); RockDropDownList ddlLeader = new RockDropDownList(); ddlLeader.ID = string.Format( "{0}_ddlMemberType", filterControl.ID ); ddlLeader.AddCssClass( "js-filter-control js-member-is-leader" ); ddlLeader.Label = "Member Type"; ddlLeader.Items.Add( new ListItem( string.Empty, string.Empty ) ); ddlLeader.Items.Add( new ListItem( "Leader", "true" ) ); ddlLeader.Items.Add( new ListItem( "Not Leader", "false" ) ); filterControl.Controls.Add( ddlLeader ); ddlLeader.Style[HtmlTextWriterStyle.Display] = this.SimpleMemberCountMode ? "none" : string.Empty; RockDropDownList ddlMemberStatus = new RockDropDownList(); ddlMemberStatus.ID = string.Format( "{0}_ddlMemberStatus", filterControl.ID ); ddlMemberStatus.AddCssClass( "js-filter-control js-member-status" ); ddlMemberStatus.Label = "Member Status"; ddlMemberStatus.Items.Add( new ListItem( string.Empty, string.Empty ) ); foreach ( GroupMemberStatus memberStatus in Enum.GetValues( typeof( GroupMemberStatus ) ) ) { ddlMemberStatus.Items.Add( new ListItem( memberStatus.ConvertToString(), memberStatus.ConvertToInt().ToString() ) ); } filterControl.Controls.Add( ddlMemberStatus ); ddlLeader.Visible = !this.SimpleMemberCountMode; ddlMemberStatus.Visible = !this.SimpleMemberCountMode; return new Control[] { ddlIntegerCompare, nbMemberCount, ddlLeader, ddlMemberStatus }; }
/// <summary> /// Creates the child controls. /// </summary> /// <returns></returns> public override Control[] CreateChildControls( Type entityType, FilterField filterControl ) { var controls = new List<Control>(); var ddlIntegerCompare = ComparisonHelper.ComparisonControl( ComparisonHelper.NumericFilterComparisonTypes ); ddlIntegerCompare.ID = string.Format( "{0}_{1}", filterControl.ID, controls.Count() ); ddlIntegerCompare.AddCssClass( "js-filter-compare" ); filterControl.Controls.Add( ddlIntegerCompare ); controls.Add( ddlIntegerCompare ); var numberBox = new NumberBox(); numberBox.ID = string.Format( "{0}_{1}", filterControl.ID, controls.Count() ); numberBox.AddCssClass( "js-filter-control" ); filterControl.Controls.Add( numberBox ); controls.Add( numberBox ); numberBox.FieldName = "Age"; return controls.ToArray(); }
/// <summary> /// Creates the child controls. /// </summary> /// <returns></returns> public override Control[] CreateChildControls( Type entityType, FilterField filterControl ) { LocationPicker locationPicker = new LocationPicker(); locationPicker.ID = filterControl.ID + "_0"; locationPicker.Label = "Location"; filterControl.Controls.Add( locationPicker ); NumberBox numberBox = new NumberBox(); numberBox.ID = filterControl.ID + "_1"; numberBox.NumberType = ValidationDataType.Double; numberBox.Label = "Miles"; numberBox.AddCssClass( "number-box-miles" ); filterControl.Controls.Add( numberBox ); return new Control[2] { locationPicker, numberBox }; }
/// <summary> /// Adds the field type controls. /// </summary> /// <param name="parentControl">The filter control.</param> /// <param name="controls">The controls.</param> /// <param name="entityField">The entity field.</param> protected void AddFieldTypeControls( Control parentControl, List<Control> controls, EntityField entityField ) { string controlIdPrefix = string.Format( "{0}_{1}", parentControl.ID, entityField.FieldKind == FieldKind.Attribute ? entityField.AttributeGuid.Value.ToString("n") : entityField.Name ); switch ( entityField.FilterFieldType ) { case SystemGuid.FieldType.DATE: var ddlDateCompare = ComparisonControl( DateFilterComparisonTypes ); ddlDateCompare.ID = string.Format( "{0}_ddlDateCompare", controlIdPrefix ); ddlDateCompare.AddCssClass( "js-filter-compare" ); parentControl.Controls.Add( ddlDateCompare ); controls.Add( ddlDateCompare ); var datePicker = new DatePicker(); datePicker.ID = string.Format( "{0}_dtPicker", controlIdPrefix ); datePicker.AddCssClass( "js-filter-control" ); parentControl.Controls.Add( datePicker ); controls.Add( datePicker ); break; case SystemGuid.FieldType.TIME: var ddlTimeCompare = ComparisonControl( DateFilterComparisonTypes ); ddlTimeCompare.ID = string.Format( "{0}_ddlTimeCompare", controlIdPrefix ); ddlTimeCompare.AddCssClass( "js-filter-compare" ); parentControl.Controls.Add( ddlTimeCompare ); controls.Add( ddlTimeCompare ); var timePicker = new TimePicker(); timePicker.ID = string.Format( "{0}_timePicker", controlIdPrefix ); timePicker.AddCssClass( "js-filter-control" ); parentControl.Controls.Add( timePicker ); controls.Add( timePicker ); break; case SystemGuid.FieldType.INTEGER: case SystemGuid.FieldType.DECIMAL: var ddlNumberCompare = ComparisonControl( NumericFilterComparisonTypes ); ddlNumberCompare.ID = string.Format( "{0}_ddlNumberCompare", controlIdPrefix ); ddlNumberCompare.AddCssClass( "js-filter-compare" ); parentControl.Controls.Add( ddlNumberCompare ); controls.Add( ddlNumberCompare ); var numberBox = new NumberBox(); numberBox.ID = string.Format( "{0}_numberBox", controlIdPrefix ); numberBox.AddCssClass( "js-filter-control" ); parentControl.Controls.Add( numberBox ); controls.Add( numberBox ); numberBox.FieldName = entityField.Title; break; case SystemGuid.FieldType.MULTI_SELECT: var cblMultiSelect = new RockCheckBoxList(); cblMultiSelect.ID = string.Format( "{0}_cblMultiSelect", controlIdPrefix ); parentControl.Controls.Add( cblMultiSelect ); cblMultiSelect.RepeatDirection = RepeatDirection.Horizontal; controls.Add( cblMultiSelect ); if ( entityField.FieldKind == FieldKind.Property ) { if ( entityField.PropertyType.IsEnum ) { // Enumeration property foreach ( var value in Enum.GetValues( entityField.PropertyType ) ) { cblMultiSelect.Items.Add( new ListItem( Enum.GetName( entityField.PropertyType, value ).SplitCase() ) ); } } else if ( entityField.DefinedTypeGuid.HasValue ) { // Defined Value Properties var definedType = DefinedTypeCache.Read( entityField.DefinedTypeGuid.Value ); if ( definedType != null ) { foreach ( var definedValue in definedType.DefinedValues ) { cblMultiSelect.Items.Add( new ListItem( definedValue.Name, definedValue.Guid.ToString() ) ); } } } } else { var attribute = AttributeCache.Read( entityField.AttributeGuid.Value ); if ( attribute != null ) { switch ( attribute.FieldType.Guid.ToString().ToUpper() ) { case SystemGuid.FieldType.SINGLE_SELECT: //TODO get attribute values qualifier to populate cbl break; case SystemGuid.FieldType.MULTI_SELECT: //TODO get attribute values qualifier to populate cbl break; } } } break; case SystemGuid.FieldType.SINGLE_SELECT: var ddlSingleSelect = new RockDropDownList(); ddlSingleSelect.ID = string.Format( "{0}_ddlSingleSelect", controlIdPrefix ); parentControl.Controls.Add( ddlSingleSelect ); controls.Add( ddlSingleSelect ); if ( entityField.FieldKind == FieldKind.Property ) { if ( entityField.PropertyType == typeof( bool ) || entityField.PropertyType == typeof( bool? ) ) { ddlSingleSelect.Items.Add( new ListItem( "True", "True" ) ); ddlSingleSelect.Items.Add( new ListItem( "False", "False" ) ); } } else { var attribute = AttributeCache.Read( entityField.AttributeGuid.Value ); if ( attribute != null ) { switch ( attribute.FieldType.Guid.ToString().ToUpper() ) { case SystemGuid.FieldType.BOOLEAN: ddlSingleSelect.Items.Add( new ListItem( "True", "True" ) ); ddlSingleSelect.Items.Add( new ListItem( "False", "False" ) ); break; } } } break; case SystemGuid.FieldType.DAY_OF_WEEK: var dayOfWeekPicker = new DayOfWeekPicker(); dayOfWeekPicker.Label = string.Empty; dayOfWeekPicker.ID = string.Format( "{0}_dayOfWeekPicker", controlIdPrefix ); dayOfWeekPicker.AddCssClass( "js-filter-control" ); parentControl.Controls.Add( dayOfWeekPicker ); controls.Add( dayOfWeekPicker ); break; case SystemGuid.FieldType.TEXT: var ddlText = ComparisonControl( StringFilterComparisonTypes ); ddlText.ID = string.Format( "{0}_ddlText", controlIdPrefix ); ddlText.AddCssClass( "js-filter-compare" ); parentControl.Controls.Add( ddlText ); controls.Add( ddlText ); var tbText = new RockTextBox(); tbText.ID = string.Format( "{0}_tbText", controlIdPrefix ); tbText.AddCssClass( "js-filter-control" ); parentControl.Controls.Add( tbText ); controls.Add( tbText ); break; } }
/// <summary> /// Creates the child controls. /// </summary> /// <returns></returns> public override Control[] CreateChildControls( Type entityType, FilterField filterControl ) { var controls = new List<Control>(); var ddlIntegerCompare = ComparisonHelper.ComparisonControl( ComparisonHelper.NumericFilterComparisonTypes | ComparisonType.Between ); ddlIntegerCompare.ID = string.Format( "{0}_{1}", filterControl.ID, "ddlIntegerCompare" ); ddlIntegerCompare.AddCssClass( "js-filter-compare" ); filterControl.Controls.Add( ddlIntegerCompare ); controls.Add( ddlIntegerCompare ); var numberBox = new NumberBox(); numberBox.ID = string.Format( "{0}_{1}", filterControl.ID, "numberBox" ); numberBox.AddCssClass( "js-filter-control" ); filterControl.Controls.Add( numberBox ); controls.Add( numberBox ); numberBox.FieldName = "Age"; var numberRangeEditor = new Rock.Web.UI.Controls.NumberRangeEditor(); numberRangeEditor.ID = string.Format( "{0}_{1}", filterControl.ID, "numberRangeEditor" ); numberRangeEditor.RangeLabel = "and"; numberRangeEditor.AddCssClass( "js-filter-control-between" ); filterControl.Controls.Add( numberRangeEditor ); controls.Add( numberRangeEditor ); return controls.ToArray(); }
/// <summary> /// Creates the child controls. /// </summary> /// <returns></returns> public override Control[] CreateChildControls( Type entityType, FilterField filterControl ) { RockDropDownList groupLocationTypeList = new RockDropDownList(); groupLocationTypeList.Items.Clear(); foreach ( var value in Rock.Web.Cache.DefinedTypeCache.Read( Rock.SystemGuid.DefinedType.GROUP_LOCATION_TYPE.AsGuid() ).DefinedValues.OrderBy( a => a.Order ).ThenBy( a => a.Value ) ) { groupLocationTypeList.Items.Add( new ListItem( value.Value, value.Guid.ToString() ) ); } groupLocationTypeList.Items.Insert( 0, Rock.Constants.None.ListItem ); groupLocationTypeList.ID = filterControl.ID + "_groupLocationTypeList"; groupLocationTypeList.Label = "Location Type"; filterControl.Controls.Add( groupLocationTypeList ); LocationPicker locationPicker = new LocationPicker(); locationPicker.ID = filterControl.ID + "_locationPicker"; locationPicker.Label = "Location"; filterControl.Controls.Add( locationPicker ); NumberBox numberBox = new NumberBox(); numberBox.ID = filterControl.ID + "_numberBox"; numberBox.NumberType = ValidationDataType.Double; numberBox.Label = "Miles"; numberBox.AddCssClass( "number-box-miles" ); filterControl.Controls.Add( numberBox ); return new Control[3] { groupLocationTypeList, locationPicker, numberBox }; }