/// <summary> /// Handles the SelectedIndexChanged event of the contentChannelTypePicker control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param> public void contentChannelTypePicker_SelectedIndexChanged(object sender, EventArgs e) { RockDropDownList contentChannelTypePicker = sender as RockDropDownList; DynamicControlsPanel containerControl = contentChannelTypePicker.Parent as DynamicControlsPanel; FilterField filterControl = containerControl.FirstParentControlOfType <FilterField>(); containerControl.Controls.Clear(); containerControl.Controls.Add(contentChannelTypePicker); // Create the field selection dropdown var ddlProperty = new RockDropDownList(); ddlProperty.ID = string.Format("{0}_{1}_ddlProperty", containerControl.ID, contentChannelTypePicker.SelectedValue.AsInteger()); ddlProperty.Attributes["EntityTypeId"] = EntityTypeCache.GetId <Rock.Model.ContentChannelItem>().ToString(); containerControl.Controls.Add(ddlProperty); // add Empty option first ddlProperty.Items.Add(new ListItem()); var entityFields = GetContentChannelItemAttributes(contentChannelTypePicker.SelectedValue.AsIntegerOrNull()); foreach (var entityField in entityFields) { string controlId = string.Format("{0}_{1}", containerControl.ID, entityField.UniqueName); var control = entityField.FieldType.Field.FilterControl(entityField.FieldConfig, controlId, true, filterControl.FilterMode); if (control != null) { // Add the field to the dropdown of available fields if (AttributeCache.Get(entityField.AttributeGuid.Value)?.EntityTypeQualifierColumn == "ContentChannelTypeId") { ddlProperty.Items.Add(new ListItem(entityField.TitleWithoutQualifier, entityField.UniqueName)); } else { ddlProperty.Items.Add(new ListItem(entityField.Title, entityField.UniqueName)); } containerControl.Controls.Add(control); } } ddlProperty.AutoPostBack = true; // grab the currently selected value off of the request params since we are creating the controls after the Page Init var selectedValue = ddlProperty.Page.Request.Params[ddlProperty.UniqueID]; if (selectedValue != null) { ddlProperty.SelectedValue = selectedValue; ddlProperty_SelectedIndexChanged(ddlProperty, new EventArgs()); } ddlProperty.SelectedIndexChanged += ddlProperty_SelectedIndexChanged; }
/// <summary> /// Ensures that the correct attribute filter controls are created based on the selected <see cref="StepType"/>. /// </summary> /// <param name="stepTypePicker">The <see cref="StepTypePicker"/>.</param> private void EnsureSelectedStepTypeControls(StepTypePicker stepTypePicker) { DynamicControlsPanel containerControl = stepTypePicker.Parent as DynamicControlsPanel; FilterField filterControl = containerControl.FirstParentControlOfType <FilterField>(); // Get the EntityFields for the attributes associated with the selected StepType. var entityFields = GetStepAttributes(stepTypePicker.SelectedValueAsId()); // Create the attribute selection dropdown. string propertyControlId = string.Format("{0}_ddlProperty", containerControl.ID); RockDropDownList ddlProperty = containerControl.Controls.OfType <RockDropDownList>().FirstOrDefault(a => a.ID == propertyControlId); if (ddlProperty == null) { ddlProperty = new RockDropDownList(); ddlProperty.ID = propertyControlId; ddlProperty.AutoPostBack = true; ddlProperty.SelectedIndexChanged += ddlProperty_SelectedIndexChanged; ddlProperty.AddCssClass("js-property-dropdown"); containerControl.Controls.Add(ddlProperty); } // Clear the list of items. We will rebuild them to match the selected StepType. ddlProperty.Items.Clear(); // Add an empty option. ddlProperty.Items.Add(new ListItem()); // Add a ListItem for each of the attributes. foreach (var entityField in entityFields) { ddlProperty.Items.Add(new ListItem(entityField.TitleWithoutQualifier, entityField.UniqueName)); } if (stepTypePicker.Page.IsPostBack) { // If the attribute has been selected, make sure that value is retained. ddlProperty.SetValue(stepTypePicker.Page.Request.Params[ddlProperty.UniqueID]); } // Add the filter controls (comparison type and value). foreach (var entityField in entityFields) { string controlId = string.Format("{0}_{1}", containerControl.ID, entityField.UniqueName); if (!containerControl.Controls.OfType <Control>().Any(a => a.ID == controlId)) { var control = entityField.FieldType.Field.FilterControl(entityField.FieldConfig, controlId, true, filterControl.FilterMode); if (control != null) { containerControl.Controls.Add(control); } } } }
/// <summary> /// Ensures that the controls that are created based on the WorkflowType have been created /// </summary> /// <param name="workflowTypePicker">The workflow type picker.</param> private void EnsureSelectedWorkflowTypeControls(WorkflowTypePicker workflowTypePicker) { DynamicControlsPanel containerControl = workflowTypePicker.Parent as DynamicControlsPanel; FilterField filterControl = containerControl.FirstParentControlOfType <FilterField>(); var entityFields = GetWorkflowAttributes(workflowTypePicker.SelectedValueAsId()); // Create the field selection dropdown string propertyControlId = string.Format("{0}_ddlProperty", containerControl.ID); RockDropDownList ddlProperty = containerControl.Controls.OfType <RockDropDownList>().FirstOrDefault(a => a.ID == propertyControlId); if (ddlProperty == null) { ddlProperty = new RockDropDownList(); ddlProperty.ID = propertyControlId; ddlProperty.AutoPostBack = true; ddlProperty.SelectedIndexChanged += ddlProperty_SelectedIndexChanged; ddlProperty.AddCssClass("js-property-dropdown"); ddlProperty.Attributes["EntityTypeId"] = EntityTypeCache.GetId <Rock.Model.Workflow>().ToString(); containerControl.Controls.Add(ddlProperty); } // update the list of items just in case the WorkflowType changed ddlProperty.Items.Clear(); // add Empty option first ddlProperty.Items.Add(new ListItem()); foreach (var entityField in entityFields) { // Add the field to the dropdown of available fields ddlProperty.Items.Add(new ListItem(entityField.TitleWithoutQualifier, entityField.UniqueName)); } if (workflowTypePicker.Page.IsPostBack) { ddlProperty.SetValue(workflowTypePicker.Page.Request.Params[ddlProperty.UniqueID]); } foreach (var entityField in entityFields) { string controlId = string.Format("{0}_{1}", containerControl.ID, entityField.UniqueName); if (!containerControl.Controls.OfType <Control>().Any(a => a.ID == controlId)) { var control = entityField.FieldType.Field.FilterControl(entityField.FieldConfig, controlId, true, filterControl.FilterMode); if (control != null) { containerControl.Controls.Add(control); } } } }
/// <summary> /// Handles the SelectItem event of the workflowTypePicker control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param> public void workflowTypePicker_SelectItem(object sender, EventArgs e) { WorkflowTypePicker workflowTypePicker = sender as WorkflowTypePicker; if (workflowTypePicker == null) { workflowTypePicker = (sender as Control).FirstParentControlOfType <WorkflowTypePicker>(); } DynamicControlsPanel containerControl = workflowTypePicker.Parent as DynamicControlsPanel; FilterField filterControl = containerControl.FirstParentControlOfType <FilterField>(); containerControl.Controls.Clear(); containerControl.Controls.Add(workflowTypePicker); // Create the field selection dropdown var ddlProperty = new RockDropDownList(); ddlProperty.ID = string.Format("{0}_{1}_ddlProperty", containerControl.ID, workflowTypePicker.SelectedValue); containerControl.Controls.Add(ddlProperty); // add Empty option first ddlProperty.Items.Add(new ListItem()); var entityFields = GetWorkflowAttributes(workflowTypePicker.SelectedValue.AsIntegerOrNull()); foreach (var entityField in entityFields) { string controlId = string.Format("{0}_{1}", containerControl.ID, entityField.UniqueName); var control = entityField.FieldType.Field.FilterControl(entityField.FieldConfig, controlId, true, filterControl.FilterMode); if (control != null) { // Add the field to the dropdown of available fields ddlProperty.Items.Add(new ListItem(entityField.TitleWithoutQualifier, entityField.UniqueName)); containerControl.Controls.Add(control); } } ddlProperty.AutoPostBack = true; // grab the currently selected value off of the request params since we are creating the controls after the Page Init var selectedValue = ddlProperty.Page.Request.Params[ddlProperty.UniqueID]; if (selectedValue != null) { ddlProperty.SelectedValue = selectedValue; ddlProperty_SelectedIndexChanged(ddlProperty, new EventArgs()); } ddlProperty.SelectedIndexChanged += ddlProperty_SelectedIndexChanged; }