/// <summary> /// Called by the ASP.NET page framework to notify server controls that use composition-based implementation to create any child controls they contain in preparation for posting back or rendering. /// </summary> protected override void CreateChildControls() { base.CreateChildControls(); Controls.Clear(); RockControlHelper.CreateChildControls(this, Controls); _date = new TextBox(); _date.ID = "tbDate"; _date.AddCssClass("form-control js-datetime-date"); Controls.Add(_date); _time = new TextBox(); _time.ID = "tbTime"; _time.AddCssClass("form-control js-datetime-time"); Controls.Add(_time); _cbCurrent = new RockCheckBox(); _cbCurrent.ID = "cbCurrent"; _cbCurrent.AddCssClass("js-current-datetime-checkbox"); _cbCurrent.Text = "Current Time"; this.Controls.Add(_cbCurrent); _nbTimeOffset = new RockTextBox(); _nbTimeOffset.ID = "nbTimeOffset"; _nbTimeOffset.Help = "Enter the number of minutes after the current time to use as the date. Use a negative number to specify minutes before."; _nbTimeOffset.AddCssClass("input-width-md js-current-datetime-offset"); _nbTimeOffset.Label = "+- Minutes"; this.Controls.Add(_nbTimeOffset); RequiredFieldValidator.ControlToValidate = _date.ID; }
/// <summary> /// Gets the filter value control with the specified FilterMode /// </summary> /// <param name="configurationValues">The configuration values.</param> /// <param name="id">The identifier.</param> /// <param name="required">if set to <c>true</c> [required].</param> /// <param name="filterMode">The filter mode.</param> /// <returns></returns> public override Control FilterValueControl( Dictionary<string, ConfigurationValue> configurationValues, string id, bool required, FilterMode filterMode ) { var control = new RockTextBox { ID = id }; control.ID = string.Format( "{0}_ctlCompareValue", id ); control.AddCssClass( "js-filter-control" ); return control; }
/// <summary> /// This is where you implment the simple aspects of rendering your control. The rest /// will be handled by calling RenderControlHelper's RenderControl() method. /// </summary> /// <param name="writer">The writer.</param> public void RenderBaseControl(HtmlTextWriter writer) { bool ddlItemSelected = false; foreach (ListItem li in _dropDownList.Items) { if (li.Value == _hiddenField.Value) { li.Selected = true; ddlItemSelected = true; } else { li.Selected = false; } } if (!ddlItemSelected) { _textBox.Text = _hiddenField.Value; } writer.AddAttribute(HtmlTextWriterAttribute.Class, "row js-text-or-ddl-row " + this.CssClass); writer.AddAttribute(HtmlTextWriterAttribute.Style, this.Style.Value); writer.RenderBeginTag(HtmlTextWriterTag.Div); _hiddenField.RenderControl(writer); if (ValidateRequestMode == System.Web.UI.ValidateRequestMode.Disabled) { _hfDisableVrm.RenderControl(writer); } writer.AddAttribute(HtmlTextWriterAttribute.Class, "col-xs-6"); writer.RenderBeginTag(HtmlTextWriterTag.Div); _textBox.AddCssClass("js-text-or-ddl-input"); _textBox.RenderControl(writer); writer.RenderEndTag(); writer.AddAttribute(HtmlTextWriterAttribute.Class, "col-xs-1"); writer.RenderBeginTag(HtmlTextWriterTag.Div); var lOr = new RockLiteral(); lOr.Label = " "; lOr.Text = "or"; lOr.RenderControl(writer); writer.RenderEndTag(); writer.AddAttribute(HtmlTextWriterAttribute.Class, "col-xs-5"); writer.RenderBeginTag(HtmlTextWriterTag.Div); _dropDownList.AddCssClass("js-text-or-ddl-input"); _dropDownList.RenderControl(writer); writer.RenderEndTag(); writer.RenderEndTag(); // row RegisterClientScript(); }
/// <summary> /// Called by the ASP.NET page framework to notify server controls that use composition-based implementation to create any child controls they contain in preparation for posting back or rendering. /// </summary> protected override void CreateChildControls() { base.CreateChildControls(); _cbCurrent = new CheckBox(); _cbCurrent.ID = this.ID + "_cbCurrent"; _cbCurrent.AddCssClass("js-current-date-checkbox"); _cbCurrent.Text = "Current Date"; this.Controls.Add(_cbCurrent); _nbDayOffset = new RockTextBox(); _nbDayOffset.ID = this.ID + "_nbDayOffset"; _nbDayOffset.Help = "Enter the number of days after the current date to use as the date. Use a negative number to specify days before."; _nbDayOffset.AddCssClass("input-width-md js-current-date-offset"); _nbDayOffset.Label = "+- Days"; this.Controls.Add(_nbDayOffset); }
/// <summary> /// Creates the person field. /// </summary> /// <param name="field">The field.</param> /// <param name="setValue">if set to <c>true</c> [set value].</param> /// <param name="fieldValue">The field value.</param> private void CreatePersonField( RegistrationTemplateFormField field, bool setValue, object fieldValue ) { switch ( field.PersonFieldType ) { case RegistrationPersonFieldType.FirstName: { var tbFirstName = new RockTextBox(); tbFirstName.ID = "tbFirstName"; tbFirstName.Label = "First Name"; tbFirstName.Required = field.IsRequired; tbFirstName.ValidationGroup = BlockValidationGroup; tbFirstName.AddCssClass( "js-first-name" ); phRegistrantControls.Controls.Add( tbFirstName ); if ( setValue && fieldValue != null ) { tbFirstName.Text = fieldValue.ToString(); } break; } case RegistrationPersonFieldType.LastName: { var tbLastName = new RockTextBox(); tbLastName.ID = "tbLastName"; tbLastName.Label = "Last Name"; tbLastName.Required = field.IsRequired; tbLastName.ValidationGroup = BlockValidationGroup; phRegistrantControls.Controls.Add( tbLastName ); if ( setValue && fieldValue != null ) { tbLastName.Text = fieldValue.ToString(); } break; } case RegistrationPersonFieldType.Campus: { var cpHomeCampus = new CampusPicker(); cpHomeCampus.ID = "cpHomeCampus"; cpHomeCampus.Label = "Campus"; cpHomeCampus.Required = field.IsRequired; cpHomeCampus.ValidationGroup = BlockValidationGroup; cpHomeCampus.Campuses = CampusCache.All(); phRegistrantControls.Controls.Add( cpHomeCampus ); if ( setValue && fieldValue != null ) { cpHomeCampus.SelectedCampusId = fieldValue.ToString().AsIntegerOrNull(); } break; } case RegistrationPersonFieldType.Address: { var acAddress = new AddressControl(); acAddress.ID = "acAddress"; acAddress.Label = "Address"; acAddress.UseStateAbbreviation = true; acAddress.UseCountryAbbreviation = false; acAddress.Required = field.IsRequired; acAddress.ValidationGroup = BlockValidationGroup; phRegistrantControls.Controls.Add( acAddress ); if ( setValue && fieldValue != null ) { var value = fieldValue.ToString().FromJsonOrNull<Location>(); acAddress.SetValues( value ); } break; } case RegistrationPersonFieldType.Email: { var tbEmail = new EmailBox(); tbEmail.ID = "tbEmail"; tbEmail.Label = "Email"; tbEmail.Required = field.IsRequired; tbEmail.ValidationGroup = BlockValidationGroup; phRegistrantControls.Controls.Add( tbEmail ); if ( setValue && fieldValue != null ) { tbEmail.Text = fieldValue.ToString(); } break; } case RegistrationPersonFieldType.Birthdate: { var bpBirthday = new BirthdayPicker(); bpBirthday.ID = "bpBirthday"; bpBirthday.Label = "Birthday"; bpBirthday.Required = field.IsRequired; bpBirthday.ValidationGroup = BlockValidationGroup; phRegistrantControls.Controls.Add( bpBirthday ); if ( setValue && fieldValue != null ) { var value = fieldValue as DateTime?; bpBirthday.SelectedDate = value; } break; } case RegistrationPersonFieldType.Gender: { var ddlGender = new RockDropDownList(); ddlGender.ID = "ddlGender"; ddlGender.Label = "Gender"; ddlGender.Required = field.IsRequired; ddlGender.ValidationGroup = BlockValidationGroup; ddlGender.BindToEnum<Gender>( false ); // change the 'Unknow' value to be blank instead ddlGender.Items.FindByValue( "0" ).Text = string.Empty; phRegistrantControls.Controls.Add( ddlGender ); if ( setValue && fieldValue != null ) { var value = fieldValue.ToString().ConvertToEnumOrNull<Gender>() ?? Gender.Unknown; ddlGender.SetValue( value.ConvertToInt() ); } break; } case RegistrationPersonFieldType.MaritalStatus: { var ddlMaritalStatus = new RockDropDownList(); ddlMaritalStatus.ID = "ddlMaritalStatus"; ddlMaritalStatus.Label = "Marital Status"; ddlMaritalStatus.Required = field.IsRequired; ddlMaritalStatus.ValidationGroup = BlockValidationGroup; ddlMaritalStatus.BindToDefinedType( DefinedTypeCache.Read( Rock.SystemGuid.DefinedType.PERSON_MARITAL_STATUS.AsGuid() ), true ); phRegistrantControls.Controls.Add( ddlMaritalStatus ); if ( setValue && fieldValue != null ) { var value = fieldValue.ToString().AsInteger(); ddlMaritalStatus.SetValue( value ); } break; } case RegistrationPersonFieldType.MobilePhone: { var dv = DefinedValueCache.Read( Rock.SystemGuid.DefinedValue.PERSON_PHONE_TYPE_MOBILE ); if ( dv != null ) { var ppMobile = new PhoneNumberBox(); ppMobile.ID = "ppMobile"; ppMobile.Label = dv.Value; ppMobile.Required = field.IsRequired; ppMobile.ValidationGroup = BlockValidationGroup; ppMobile.CountryCode = PhoneNumber.DefaultCountryCode(); phRegistrantControls.Controls.Add( ppMobile ); if ( setValue && fieldValue != null ) { var value = fieldValue as PhoneNumber; if ( value != null ) { ppMobile.CountryCode = value.CountryCode; ppMobile.Number = value.ToString(); } } } break; } case RegistrationPersonFieldType.HomePhone: { var dv = DefinedValueCache.Read( Rock.SystemGuid.DefinedValue.PERSON_PHONE_TYPE_HOME ); if ( dv != null ) { var ppHome = new PhoneNumberBox(); ppHome.ID = "ppHome"; ppHome.Label = dv.Value; ppHome.Required = field.IsRequired; ppHome.ValidationGroup = BlockValidationGroup; ppHome.CountryCode = PhoneNumber.DefaultCountryCode(); phRegistrantControls.Controls.Add( ppHome ); if ( setValue && fieldValue != null ) { var value = fieldValue as PhoneNumber; if ( value != null ) { ppHome.CountryCode = value.CountryCode; ppHome.Number = value.ToString(); } } } break; } case RegistrationPersonFieldType.WorkPhone: { var dv = DefinedValueCache.Read( Rock.SystemGuid.DefinedValue.PERSON_PHONE_TYPE_WORK ); if ( dv != null ) { var ppWork = new PhoneNumberBox(); ppWork.ID = "ppWork"; ppWork.Label = dv.Value; ppWork.Required = field.IsRequired; ppWork.ValidationGroup = BlockValidationGroup; ppWork.CountryCode = PhoneNumber.DefaultCountryCode(); phRegistrantControls.Controls.Add( ppWork ); if ( setValue && fieldValue != null ) { var value = fieldValue.ToString().FromJsonOrNull<PhoneNumber>(); if ( value != null ) { ppWork.CountryCode = value.CountryCode; ppWork.Number = value.ToString(); } } } break; } } }
/// <summary> /// Called by the ASP.NET page framework to notify server controls that use composition-based implementation to create any child controls they contain in preparation for posting back or rendering. /// </summary> protected override void CreateChildControls() { Controls.Clear(); _hfValue.ID = this.ID + "_hfValue"; Controls.Add(_hfValue); _actionControls = new List <RockTextBox>(); _buttonHtmlControls = new List <RockDropDownList>(); _activityControls = new List <RockDropDownList>(); _responseControls = new List <RockTextBox>(); string[] nameValues = this.Value.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < nameValues.Length; i++) { string[] nameValueResponse = nameValues[i].Split(new char[] { '^' }); var tbAction = new RockTextBox(); tbAction.ID = this.ID + "_tbAction" + i.ToString(); Controls.Add(tbAction); tbAction.Placeholder = "Action"; tbAction.AddCssClass("form-action-key"); tbAction.AddCssClass("form-control"); tbAction.AddCssClass("js-form-action-input"); tbAction.Text = nameValueResponse.Length > 0 ? nameValueResponse[0] : string.Empty; _actionControls.Add(tbAction); var ddlButtonHtml = new RockDropDownList(); ddlButtonHtml.ID = this.ID + "_ddlButtonHtml" + i.ToString(); ddlButtonHtml.EnableViewState = false; Controls.Add(ddlButtonHtml); ddlButtonHtml.AddCssClass("form-action-button"); ddlButtonHtml.AddCssClass("form-control"); ddlButtonHtml.AddCssClass("js-form-action-input"); var definedType = DefinedTypeCache.Get(Rock.SystemGuid.DefinedType.BUTTON_HTML.AsGuid()); foreach (var definedValue in definedType.DefinedValues) { var li = new ListItem(definedValue.Value, definedValue.Guid.ToString()); li.Selected = nameValueResponse.Length > 1 && li.Value.Equals(nameValueResponse[1], StringComparison.OrdinalIgnoreCase); ddlButtonHtml.Items.Add(li); } _buttonHtmlControls.Add(ddlButtonHtml); var ddlActivity = new RockDropDownList(); ddlActivity.ID = this.ID + "_ddlActivity" + i.ToString(); ddlActivity.EnableViewState = false; Controls.Add(ddlActivity); ddlActivity.AddCssClass("form-action-value"); ddlActivity.AddCssClass("form-control"); ddlActivity.AddCssClass("js-form-action-input"); ddlActivity.DataTextField = "Value"; ddlActivity.DataValueField = "Key"; ddlActivity.DataSource = Activities; ddlActivity.DataBind(); ddlActivity.Items.Insert(0, new ListItem(string.Empty, string.Empty)); foreach (ListItem li in ddlActivity.Items) { li.Selected = nameValueResponse.Length > 2 && li.Value.Equals(nameValueResponse[2], StringComparison.OrdinalIgnoreCase); } _activityControls.Add(ddlActivity); var tbResponse = new RockTextBox(); tbResponse.ID = this.ID + "_tbResponse" + i.ToString(); Controls.Add(tbResponse); tbResponse.Placeholder = "Response Text"; tbResponse.AddCssClass("form-action-response"); tbResponse.AddCssClass("form-control"); tbResponse.AddCssClass("js-form-action-input"); tbResponse.Text = nameValueResponse.Length > 3 ? nameValueResponse[3] : string.Empty; _responseControls.Add(tbResponse); } }
/// <summary> /// Called by the ASP.NET page framework to notify server controls that use composition-based implementation to create any child controls they contain in preparation for posting back or rendering. /// </summary> protected override void CreateChildControls() { base.CreateChildControls(); _cbCurrent = new CheckBox(); _cbCurrent.ID = this.ID + "_cbCurrent"; _cbCurrent.AddCssClass( "js-current-date-checkbox" ); _cbCurrent.Text = "Current Date"; this.Controls.Add( _cbCurrent ); _nbDayOffset = new RockTextBox(); _nbDayOffset.ID = this.ID + "_nbDayOffset"; _nbDayOffset.Help = "Enter the number of days after the current date to use as the date. Use a negative number to specify days before."; _nbDayOffset.AddCssClass( "input-width-md js-current-date-offset" ); _nbDayOffset.Label = "+- Days"; this.Controls.Add( _nbDayOffset ); }
/// <summary> /// Called by the ASP.NET page framework to notify server controls that use composition-based implementation to create any child controls they contain in preparation for posting back or rendering. /// </summary> protected override void CreateChildControls() { Controls.Clear(); _hfValue.ID = this.ID + "_hfValue"; Controls.Add( _hfValue ); _actionControls = new List<RockTextBox>(); _buttonHtmlControls = new List<RockDropDownList>(); _activityControls = new List<RockDropDownList>(); _responseControls = new List<RockTextBox>(); string[] nameValues = this.Value.Split( new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries ); for ( int i = 0; i < nameValues.Length; i++ ) { string[] nameValueResponse = nameValues[i].Split( new char[] { '^' } ); var tbAction = new RockTextBox(); tbAction.ID = this.ID + "_tbAction" + i.ToString(); Controls.Add( tbAction ); tbAction.Placeholder = "Action"; tbAction.AddCssClass( "form-action-key" ); tbAction.AddCssClass( "form-control" ); tbAction.AddCssClass( "js-form-action-input" ); tbAction.Text = nameValueResponse.Length > 0 ? nameValueResponse[0] : string.Empty; _actionControls.Add( tbAction ); var ddlButtonHtml = new RockDropDownList(); ddlButtonHtml.ID = this.ID + "_ddlButtonHtml" + i.ToString(); Controls.Add( ddlButtonHtml ); ddlButtonHtml.AddCssClass( "form-action-button" ); ddlButtonHtml.AddCssClass( "form-control" ); ddlButtonHtml.AddCssClass( "js-form-action-input" ); var definedType = Rock.Web.Cache.DefinedTypeCache.Read( Rock.SystemGuid.DefinedType.BUTTON_HTML.AsGuid() ); foreach( var definedValue in definedType.DefinedValues ) { var li = new ListItem( definedValue.Value, definedValue.Guid.ToString() ); li.Selected = nameValueResponse.Length > 1 && li.Value.Equals( nameValueResponse[1], StringComparison.OrdinalIgnoreCase ); ddlButtonHtml.Items.Add( li ); } _buttonHtmlControls.Add( ddlButtonHtml ); var ddlActivity = new RockDropDownList(); ddlActivity.ID = this.ID + "_ddlActivity" + i.ToString(); Controls.Add( ddlActivity ); ddlActivity.AddCssClass( "form-action-value" ); ddlActivity.AddCssClass( "form-control" ); ddlActivity.AddCssClass( "js-form-action-input" ); ddlActivity.DataTextField = "Value"; ddlActivity.DataValueField = "Key"; ddlActivity.DataSource = Activities; ddlActivity.DataBind(); ddlActivity.Items.Insert( 0, new ListItem( string.Empty, string.Empty ) ); foreach(ListItem li in ddlActivity.Items) { li.Selected = nameValueResponse.Length > 2 && li.Value.Equals( nameValueResponse[2], StringComparison.OrdinalIgnoreCase ); } _activityControls.Add( ddlActivity ); var tbResponse = new RockTextBox(); tbResponse.ID = this.ID + "_tbResponse" + i.ToString(); Controls.Add( tbResponse ); tbResponse.Placeholder = "Response Text"; tbResponse.AddCssClass( "form-action-response" ); tbResponse.AddCssClass( "form-control" ); tbResponse.AddCssClass( "js-form-action-input" ); tbResponse.Text = nameValueResponse.Length > 3 ? nameValueResponse[3] : string.Empty; _responseControls.Add( tbResponse ); } }
/// <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> /// Called by the ASP.NET page framework to notify server controls that use composition-based implementation to create any child controls they contain in preparation for posting back or rendering. /// </summary> protected override void CreateChildControls() { base.CreateChildControls(); Controls.Clear(); RockControlHelper.CreateChildControls( this, Controls ); _date = new TextBox(); _date.ID = "tbDate"; _date.AddCssClass( "form-control js-datetime-date" ); Controls.Add( _date ); _time = new TextBox(); _time.ID = "tbTime"; _time.AddCssClass( "form-control js-datetime-time"); Controls.Add( _time ); _cbCurrent = new CheckBox(); _cbCurrent.ID = "cbCurrent"; _cbCurrent.AddCssClass( "js-current-datetime-checkbox" ); _cbCurrent.Text = "Current Time"; this.Controls.Add( _cbCurrent ); _nbTimeOffset = new RockTextBox(); _nbTimeOffset.ID = "nbTimeOffset"; _nbTimeOffset.Help = "Enter the number of minutes after the current time to use as the date. Use a negative number to specify minutes before."; _nbTimeOffset.AddCssClass( "input-width-md js-current-datetime-offset" ); _nbTimeOffset.Label = "+- Minutes"; this.Controls.Add( _nbTimeOffset ); RequiredFieldValidator.ControlToValidate = _date.ID; }
/// <summary> /// Creates the child controls. /// </summary> /// <returns></returns> public override Control[] CreateChildControls( Type entityType, FilterField filterControl ) { var pGroupPicker = new GroupPicker(); pGroupPicker.AllowMultiSelect = true; pGroupPicker.ID = filterControl.ID + "_pGroupPicker"; pGroupPicker.AddCssClass( "js-group-picker" ); filterControl.Controls.Add( pGroupPicker ); var cbChildGroups = new RockCheckBox(); cbChildGroups.ID = filterControl.ID + "_cbChildGroups"; cbChildGroups.AddCssClass( "js-child-groups" ); cbChildGroups.Text = "Include Child Groups"; filterControl.Controls.Add( cbChildGroups ); var ddlIntegerCompare = ComparisonHelper.ComparisonControl( ComparisonHelper.NumericFilterComparisonTypes ); ddlIntegerCompare.Label = "Attendance Count"; ddlIntegerCompare.ID = filterControl.ID + "_ddlIntegerCompare"; ddlIntegerCompare.AddCssClass( "js-filter-compare" ); filterControl.Controls.Add( ddlIntegerCompare ); var tbAttendedCount = new RockTextBox(); tbAttendedCount.ID = filterControl.ID + "_2"; tbAttendedCount.Label = " "; // give it whitespace label so it lines up nicely tbAttendedCount.AddCssClass( "js-attended-count" ); filterControl.Controls.Add( tbAttendedCount ); var slidingDateRangePicker = new SlidingDateRangePicker(); slidingDateRangePicker.Label = "Date Range"; slidingDateRangePicker.ID = filterControl.ID + "_slidingDateRangePicker"; slidingDateRangePicker.AddCssClass( "js-sliding-date-range" ); filterControl.Controls.Add( slidingDateRangePicker ); var controls = new Control[5] { pGroupPicker, cbChildGroups, ddlIntegerCompare, tbAttendedCount, slidingDateRangePicker }; // convert pipe to comma delimited var defaultDelimitedValues = slidingDateRangePicker.DelimitedValues.Replace( "|", "," ); var defaultCount = 4; // set the default values in case this is a newly added filter SetSelection( entityType, controls, string.Format( "{0}|{1}|{2}|{3}|false", string.Empty, ComparisonType.GreaterThanOrEqualTo.ConvertToInt().ToString(), defaultCount, defaultDelimitedValues ) ); return controls; }
/// <summary> /// Gets the filter value control. /// </summary> /// <param name="configurationValues">The configuration values.</param> /// <param name="id">The identifier.</param> /// <param name="required">if set to <c>true</c> [required].</param> /// <returns></returns> public override Control FilterValueControl( Dictionary<string, ConfigurationValue> configurationValues, string id, bool required ) { var tbValue = new RockTextBox(); tbValue.ID = string.Format( "{0}_ctlCompareValue", id ); tbValue.AddCssClass( "js-filter-control" ); return tbValue; }
/// <summary> /// Creates the child controls. /// </summary> /// <returns></returns> public override Control[] CreateChildControls( Type entityType, FilterField filterControl ) { var gtpGroupType = new GroupTypePicker(); gtpGroupType.ID = filterControl.ID + "_0"; gtpGroupType.AddCssClass( "js-group-type" ); filterControl.Controls.Add( gtpGroupType ); gtpGroupType.UseGuidAsValue = true; gtpGroupType.GroupTypes = new GroupTypeService( new RockContext() ).Queryable().OrderBy(a => a.Name).ToList(); var cbChildGroupTypes = new RockCheckBox(); cbChildGroupTypes.ID = filterControl.ID + "_cbChildGroupTypes"; cbChildGroupTypes.AddCssClass( "js-child-group-types" ); cbChildGroupTypes.Text = "Include Child Group Types(s)"; filterControl.Controls.Add( cbChildGroupTypes ); var ddlIntegerCompare = ComparisonHelper.ComparisonControl( ComparisonHelper.NumericFilterComparisonTypes ); ddlIntegerCompare.Label = "Attendance Count"; ddlIntegerCompare.ID = filterControl.ID + "_ddlIntegerCompare"; ddlIntegerCompare.AddCssClass( "js-filter-compare" ); filterControl.Controls.Add( ddlIntegerCompare ); var tbAttendedCount = new RockTextBox(); tbAttendedCount.ID = filterControl.ID + "_2"; tbAttendedCount.Label = " "; // give it whitespace label so it lines up nicely tbAttendedCount.AddCssClass( "js-attended-count" ); filterControl.Controls.Add( tbAttendedCount ); var slidingDateRangePicker = new SlidingDateRangePicker(); slidingDateRangePicker.Label = "Date Range"; slidingDateRangePicker.ID = filterControl.ID + "_slidingDateRangePicker"; slidingDateRangePicker.AddCssClass( "js-sliding-date-range" ); filterControl.Controls.Add( slidingDateRangePicker ); var controls = new Control[5] { gtpGroupType, cbChildGroupTypes, ddlIntegerCompare, tbAttendedCount, slidingDateRangePicker }; // convert pipe to comma delimited var defaultDelimitedValues = slidingDateRangePicker.DelimitedValues.Replace( "|", "," ); var defaultCount = 4; // set the default values in case this is a newly added filter SetSelection( entityType, controls, string.Format( "{0}|{1}|{2}|{3}|false", gtpGroupType.Items.Count > 0 ? gtpGroupType.Items[0].Value : "0", ComparisonType.GreaterThanOrEqualTo.ConvertToInt().ToString(), defaultCount, defaultDelimitedValues ) ); return controls; }
/// <summary> /// Creates the child controls. /// </summary> /// <returns></returns> public override Control[] CreateChildControls( Type entityType, FilterField filterControl ) { var controls = new List<Control>(); ddlStringFilterComparison = ComparisonHelper.ComparisonControl( ComparisonHelper.StringFilterComparisonTypes ); ddlStringFilterComparison.ID = string.Format( "{0}_{1}", filterControl.ID, controls.Count() ); ddlStringFilterComparison.AddCssClass( "js-filter-compare" ); filterControl.Controls.Add( ddlStringFilterComparison ); controls.Add( ddlStringFilterComparison ); tbPostalCode = new RockTextBox(); tbPostalCode.ID = filterControl.ID + "_tbPostalCode"; tbPostalCode.AddCssClass( "js-filter-control" ); filterControl.Controls.Add( tbPostalCode ); controls.Add( tbPostalCode ); return controls.ToArray(); }