/// <summary> /// Raises the <see cref="E:System.Web.UI.Control.Init" /> event. /// </summary> /// <param name="e">An <see cref="T:System.EventArgs" /> object that contains the event data.</param> protected override void OnInit( EventArgs e ) { base.OnInit( e ); // this event gets fired after block settings are updated. it's nice to repaint the screen if these settings would alter it this.BlockUpdated += Block_BlockUpdated; this.AddConfigurationUpdateTrigger( upnlSettings ); int definedTypeId = InitForDefinedType(); _definedType = new DefinedTypeService( new RockContext() ).Get( definedTypeId ); if ( _definedType != null ) { gDefinedValues.DataKeyNames = new string[] { "id" }; gDefinedValues.Actions.ShowAdd = true; gDefinedValues.Actions.AddClick += gDefinedValues_Add; gDefinedValues.GridRebind += gDefinedValues_GridRebind; gDefinedValues.GridReorder += gDefinedValues_GridReorder; bool canAddEditDelete = IsUserAuthorized( Authorization.EDIT ); gDefinedValues.Actions.ShowAdd = canAddEditDelete; gDefinedValues.IsDeleteEnabled = canAddEditDelete; AddAttributeColumns(); var deleteField = new DeleteField(); gDefinedValues.Columns.Add( deleteField ); deleteField.Click += gDefinedValues_Delete; modalValue.SaveClick += btnSaveValue_Click; modalValue.OnCancelScript = string.Format( "$('#{0}').val('');", hfDefinedValueId.ClientID ); } }
/// <summary> /// Raises the <see cref="E:System.Web.UI.Control.Init" /> event. /// </summary> /// <param name="e">An <see cref="T:System.EventArgs" /> object that contains the event data.</param> protected override void OnInit( EventArgs e ) { base.OnInit( e ); gReport.DataKeyNames = new string[] { "Id" }; gReport.GridRebind += gReport_GridRebind; int tagId = int.MinValue; if ( int.TryParse( PageParameter( "tagId" ), out tagId ) && tagId > 0 ) { Tag _tag = new TagService( new RockContext() ).Get( tagId ); if ( _tag != null ) { TagId = tagId; TagEntityType = EntityTypeCache.Read( _tag.EntityTypeId ); if ( TagEntityType != null ) { Type modelType = TagEntityType.GetEntityType(); gReport.RowItemText = modelType.Name + " Tag"; lTaggedTitle.Text = "Tagged " + modelType.Name.Pluralize(); if ( modelType != null ) { // If displaying people, set the person id fiels so that merge and communication icons are displayed if ( TagEntityType.Name == "Rock.Model.Person" ) { gReport.PersonIdField = "Id"; } foreach ( var column in gReport.GetPreviewColumns( modelType ) ) { gReport.Columns.Add( column ); } // Add delete column var deleteField = new DeleteField(); gReport.Columns.Add( deleteField ); deleteField.Click += gReport_Delete; BindGrid(); } } } } }
/// <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(); _hfExpanded = new HiddenFieldWithClass(); Controls.Add( _hfExpanded ); _hfExpanded.ID = this.ID + "_hfExpanded"; _hfExpanded.CssClass = "filter-expanded"; _hfExpanded.Value = "False"; _hfActivityTypeGuid = new HiddenField(); Controls.Add( _hfActivityTypeGuid ); _hfActivityTypeGuid.ID = this.ID + "_hfActivityTypeGuid"; _lblActivityTypeName = new Label(); Controls.Add( _lblActivityTypeName ); _lblActivityTypeName.ClientIDMode = ClientIDMode.Static; _lblActivityTypeName.ID = this.ID + "_lblActivityTypeName"; _lblActivityTypeDescription = new Label(); Controls.Add( _lblActivityTypeDescription ); _lblActivityTypeDescription.ClientIDMode = ClientIDMode.Static; _lblActivityTypeDescription.ID = this.ID + "_lblActivityTypeDescription"; _lblInactive = new Label(); Controls.Add( _lblInactive ); _lblInactive.ClientIDMode = ClientIDMode.Static; _lblInactive.ID = this.ID + "_lblInactive"; _lblInactive.CssClass = "pull-right"; _lblInactive.Text = "<span class='label label-danger'>Inactive</span>"; _lbDeleteActivityType = new LinkButton(); Controls.Add( _lbDeleteActivityType ); _lbDeleteActivityType.CausesValidation = false; _lbDeleteActivityType.ID = this.ID + "_lbDeleteActivityType"; _lbDeleteActivityType.CssClass = "btn btn-xs btn-danger js-activity-delete"; _lbDeleteActivityType.Click += lbDeleteActivityType_Click; _lbDeleteActivityType.Controls.Add( new LiteralControl { Text = "<i class='fa fa-times'></i>" } ); _sbSecurity = new SecurityButton(); Controls.Add( _sbSecurity ); _sbSecurity.ID = this.ID + "_sbSecurity"; _sbSecurity.Attributes["class"] = "btn btn-security btn-xs security pull-right"; _sbSecurity.EntityTypeId = EntityTypeCache.Read( typeof( Rock.Model.WorkflowActivityType ) ).Id; _cbActivityTypeIsActive = new RockCheckBox { Text = "Active" }; Controls.Add( _cbActivityTypeIsActive ); _cbActivityTypeIsActive.ID = this.ID + "_cbActivityTypeIsActive"; string checkboxScriptFormat = @" javascript: if ($(this).is(':checked')) {{ $('#{0}').hide(); $('#{1}').removeClass('workflow-activity-inactive'); }} else {{ $('#{0}').show(); $('#{1}').addClass('workflow-activity-inactive'); }} "; _cbActivityTypeIsActive.InputAttributes.Add( "onclick", string.Format( checkboxScriptFormat, _lblInactive.ID, this.ID + "_section" ) ); _tbActivityTypeName = new RockTextBox(); Controls.Add( _tbActivityTypeName ); _tbActivityTypeName.ID = this.ID + "_tbActivityTypeName"; _tbActivityTypeName.Label = "Name"; _tbActivityTypeName.Required = true; _tbActivityTypeName.Attributes["onblur"] = string.Format( "javascript: $('#{0}').text($(this).val());", _lblActivityTypeName.ID ); _tbActivityTypeDescription = new RockTextBox(); Controls.Add( _tbActivityTypeDescription ); _tbActivityTypeDescription.ID = this.ID + "_tbActivityTypeDescription"; _tbActivityTypeDescription.Label = "Description"; _tbActivityTypeDescription.TextMode = TextBoxMode.MultiLine; _tbActivityTypeDescription.Rows = 2; _tbActivityTypeDescription.Attributes["onblur"] = string.Format( "javascript: $('#{0}').text($(this).val());", _lblActivityTypeDescription.ID ); _cbActivityTypeIsActivatedWithWorkflow = new RockCheckBox { Text = "Activated with Workflow" }; Controls.Add( _cbActivityTypeIsActivatedWithWorkflow ); _cbActivityTypeIsActivatedWithWorkflow.ID = this.ID + "_cbActivityTypeIsActivatedWithWorkflow"; checkboxScriptFormat = @" javascript: if ($(this).is(':checked')) {{ $('#{0}').addClass('activated-with-workflow'); }} else {{ $('#{0}').removeClass('activated-with-workflow'); }} "; _cbActivityTypeIsActivatedWithWorkflow.InputAttributes.Add( "onclick", string.Format( checkboxScriptFormat, this.ID + "_section" ) ); _lbAddActionType = new LinkButton(); Controls.Add( _lbAddActionType ); _lbAddActionType.ID = this.ID + "_lbAddAction"; _lbAddActionType.CssClass = "btn btn-xs btn-action"; _lbAddActionType.Click += lbAddActionType_Click; _lbAddActionType.CausesValidation = false; _lbAddActionType.Controls.Add( new LiteralControl { Text = "<i class='fa fa-plus'></i> Add Action" } ); _pwAttributes = new PanelWidget(); Controls.Add( _pwAttributes ); _pwAttributes.ID = this.ID + "_pwAttributes"; _pwAttributes.Title = "Activity Attributes"; _pwAttributes.CssClass = "attribute-panel"; _gAttributes = new Grid(); _pwAttributes.Controls.Add( _gAttributes ); _gAttributes.ID = this.ID + "_gAttributes"; _gAttributes.AllowPaging = false; _gAttributes.DisplayType = GridDisplayType.Light; _gAttributes.RowItemText = "Activity Attribute"; _gAttributes.AddCssClass( "attribute-grid" ); _gAttributes.DataKeyNames = new string[] { "Guid" }; _gAttributes.Actions.ShowAdd = true; _gAttributes.Actions.AddClick += gAttributes_Add; _gAttributes.GridRebind += gAttributes_Rebind; _gAttributes.GridReorder += gAttributes_Reorder; var reorderField = new ReorderField(); _gAttributes.Columns.Add( reorderField ); var nameField = new BoundField(); nameField.DataField = "Name"; nameField.HeaderText = "Attribute"; _gAttributes.Columns.Add( nameField ); var descField = new BoundField(); descField.DataField = "Description"; descField.HeaderText = "Description"; _gAttributes.Columns.Add( descField ); var fieldTypeField = new BoundField(); fieldTypeField.DataField = "FieldType"; fieldTypeField.HeaderText = "Field Type"; _gAttributes.Columns.Add( fieldTypeField ); var reqField = new BoolField(); reqField.DataField = "IsRequired"; reqField.HeaderText = "Required"; _gAttributes.Columns.Add( reqField ); var editField = new EditField(); editField.Click += gAttributes_Edit; _gAttributes.Columns.Add( editField ); var delField = new DeleteField(); delField.Click += gAttributes_Delete; _gAttributes.Columns.Add( delField ); }
private void CreateGrids( RockContext rockContext ) { if ( ContentChannels.Any() ) { this.Visible = true; // TODO: security bool canEdit = true; phContentChannelGrids.Controls.Clear(); foreach ( var contentChannel in ContentChannels ) { var pwItems = new PanelWidget(); phContentChannelGrids.Controls.Add( pwItems ); pwItems.ID = string.Format( "pwItems_{0}", contentChannel.Id ); pwItems.Title = contentChannel.Name; pwItems.Expanded = ExpandedPanels.Contains( contentChannel.Id ); var divItems = new HtmlGenericControl( "div" ); pwItems.Controls.Add( divItems ); divItems.ID = string.Format( "divItems_{0}", contentChannel.Id ); divItems.AddCssClass( "grid" ); divItems.AddCssClass( "grid-panel" ); Grid gItems = new Grid(); divItems.Controls.Add( gItems ); gItems.ID = string.Format( "gItems_{0}", contentChannel.Id ); gItems.DataKeyNames = new string[] { "Id" }; gItems.EmptyDataText = "No Items Found"; gItems.RowItemText = "Item"; gItems.AllowSorting = true; gItems.Actions.ShowAdd = canEdit; gItems.IsDeleteEnabled = canEdit; gItems.Actions.AddClick += gItems_Add; gItems.RowSelected += gItems_Edit; gItems.GridRebind += gItems_GridRebind; gItems.Columns.Add( new RockBoundField { DataField = "Title", HeaderText = "Title", SortExpression = "Title" } ); gItems.Columns.Add( new DateTimeField { DataField = "StartDateTime", HeaderText = contentChannel.ContentChannelType.DateRangeType == ContentChannelDateType.DateRange ? "Start" : "Active", SortExpression = "StartDateTime" } ); if ( contentChannel.ContentChannelType.DateRangeType == ContentChannelDateType.DateRange ) { gItems.Columns.Add( new DateTimeField { DataField = "ExpireDateTime", HeaderText = "Expire", SortExpression = "ExpireDateTime" } ); } if ( !contentChannel.ContentChannelType.DisablePriority ) { var priorityField = new RockBoundField { DataField = "Priority", HeaderText = "Priority", SortExpression = "Priority", DataFormatString = "{0:N0}", }; priorityField.ItemStyle.HorizontalAlign = HorizontalAlign.Right; gItems.Columns.Add( priorityField ); } // Add attribute columns int entityTypeId = EntityTypeCache.Read( typeof( Rock.Model.ContentChannelItem ) ).Id; string qualifier = contentChannel.ContentChannelTypeId.ToString(); foreach ( var attribute in new AttributeService( rockContext ).Queryable() .Where( a => a.EntityTypeId == entityTypeId && a.IsGridColumn && a.EntityTypeQualifierColumn.Equals( "ContentChannelTypeId", StringComparison.OrdinalIgnoreCase ) && a.EntityTypeQualifierValue.Equals( qualifier ) ) .OrderBy( a => a.Order ) .ThenBy( a => a.Name ) ) { string dataFieldExpression = attribute.Key; bool columnExists = gItems.Columns.OfType<AttributeField>().FirstOrDefault( a => a.DataField.Equals( dataFieldExpression ) ) != null; if ( !columnExists ) { AttributeField boundField = new AttributeField(); boundField.DataField = dataFieldExpression; boundField.HeaderText = attribute.Name; boundField.SortExpression = string.Empty; var attributeCache = Rock.Web.Cache.AttributeCache.Read( attribute.Id ); if ( attributeCache != null ) { boundField.ItemStyle.HorizontalAlign = attributeCache.FieldType.Field.AlignValue; } gItems.Columns.Add( boundField ); } } if ( contentChannel.RequiresApproval ) { var statusField = new BoundField(); gItems.Columns.Add( statusField ); statusField.DataField = "Status"; statusField.HeaderText = "Status"; statusField.SortExpression = "Status"; statusField.HtmlEncode = false; } var deleteField = new DeleteField(); gItems.Columns.Add( deleteField ); deleteField.Click += gItems_Delete; } } else { this.Visible = false; } }
/// <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(); // HiddenField to store which AttributeMatrix record we are editing _hfAttributeMatrixGuid = new HiddenField { ID = "_hfAttributeMatrixGuid" }; this.Controls.Add(_hfAttributeMatrixGuid); _nbWarning = new NotificationBox { ID = "_nbWarning", NotificationBoxType = NotificationBoxType.Warning, Dismissable = true }; this.Controls.Add(_nbWarning); // Grid with view of MatrixItems _gMatrixItems = new Grid { ID = "_gMatrixItems", DisplayType = GridDisplayType.Light }; this.Controls.Add(_gMatrixItems); _gMatrixItems.DataKeyNames = new string[] { "Id" }; _gMatrixItems.Actions.AddClick += gMatrixItems_AddClick; _gMatrixItems.Actions.ShowAdd = true; _gMatrixItems.IsDeleteEnabled = true; _gMatrixItems.GridReorder += gMatrixItems_GridReorder; _gMatrixItems.GridRebind += _gMatrixItems_GridRebind; _hfRowCount = new HiddenFieldWithValidationProperty { ID = "_hfRowCount" }; this.Controls.Add(_hfRowCount); _requiredRowCountRangeValidator = new HiddenFieldRangeValidator(); _requiredRowCountRangeValidator.ID = _hfRowCount.ID + "_rfv"; _requiredRowCountRangeValidator.ControlToValidate = _hfRowCount.ID; _requiredRowCountRangeValidator.Display = ValidatorDisplay.Dynamic; _requiredRowCountRangeValidator.Type = ValidationDataType.Integer; _requiredRowCountRangeValidator.CssClass = "validation-error help-inline"; _requiredRowCountRangeValidator.Enabled = false; this.Controls.Add(_requiredRowCountRangeValidator); _gMatrixItems.Columns.Add(new ReorderField()); AttributeMatrixItem tempAttributeMatrixItem = null; if (this.AttributeMatrixTemplateId.HasValue) { tempAttributeMatrixItem = new AttributeMatrixItem(); tempAttributeMatrixItem.AttributeMatrix = new AttributeMatrix { AttributeMatrixTemplateId = this.AttributeMatrixTemplateId.Value }; tempAttributeMatrixItem.LoadAttributes(); foreach (var attribute in tempAttributeMatrixItem.Attributes.Select(a => a.Value)) { _gMatrixItems.Columns.Add(new AttributeField { DataField = attribute.Key, HeaderText = attribute.Name }); } AttributeMatrixTemplateService attributeMatrixTemplateService = new AttributeMatrixTemplateService(new RockContext()); var attributeMatrixTemplateRanges = attributeMatrixTemplateService.GetSelect(this.AttributeMatrixTemplateId.Value, s => new { s.MinimumRows, s.MaximumRows }); _requiredRowCountRangeValidator.MinimumValue = (attributeMatrixTemplateRanges.MinimumRows ?? 0).ToString(); _requiredRowCountRangeValidator.Enabled = this.Required && attributeMatrixTemplateRanges.MinimumRows.HasValue; if (attributeMatrixTemplateRanges.MinimumRows == 1) { _requiredRowCountRangeValidator.ErrorMessage = $"At least {attributeMatrixTemplateRanges.MinimumRows} row is required"; } else { _requiredRowCountRangeValidator.ErrorMessage = $"At least {attributeMatrixTemplateRanges.MinimumRows} rows are required"; } } DeleteField deleteField = new DeleteField(); deleteField.Click += gMatrixItems_DeleteClick; _gMatrixItems.Columns.Add(deleteField); _gMatrixItems.RowSelected += gMatrixItems_RowSelected; // Edit Item _pnlEditMatrixItem = new Panel { ID = "_pnlEditMatrixItem", Visible = false, CssClass = "well js-validation-group" }; _hfMatrixItemId = new HiddenField { ID = "_hfMatrixItemId" }; _pnlEditMatrixItem.Controls.Add(_hfMatrixItemId); _phMatrixItemAttributes = new DynamicPlaceholder { ID = "_phMatrixItemAttributes" }; _pnlEditMatrixItem.Controls.Add(_phMatrixItemAttributes); string validationGroup = GetValidationGroupForAttributeControls(); if (tempAttributeMatrixItem != null) { Rock.Attribute.Helper.AddEditControls(tempAttributeMatrixItem, _phMatrixItemAttributes, false, validationGroup); } _pnlActions = new Panel { ID = "_pnlActions", CssClass = "actions" }; _pnlEditMatrixItem.Controls.Add(_pnlActions); _btnSaveMatrixItem = new LinkButton { ID = "_btnSaveMatrixItem", CssClass = "btn btn-primary btn-sm", Text = "Save", ValidationGroup = validationGroup, CausesValidation = true }; _btnSaveMatrixItem.Click += btnSaveMatrixItem_Click; _pnlActions.Controls.Add(_btnSaveMatrixItem); _btnCancelMatrixItem = new LinkButton { ID = "_btnCancelMatrixItem", CssClass = "btn btn-link", Text = "Cancel", CausesValidation = false }; _btnCancelMatrixItem.Click += btnCancelMatrixItem_Click; _pnlActions.Controls.Add(_btnCancelMatrixItem); this.Controls.Add(_pnlEditMatrixItem); }
protected void AddColumns( ContentChannel channel) { // Remove all columns gContentChannelItems.Columns.Clear(); if ( channel != null ) { // Add Title column var titleField = new BoundField(); titleField.DataField = "Title"; titleField.HeaderText = "Title"; titleField.SortExpression = "Title"; gContentChannelItems.Columns.Add( titleField ); // Add Attribute columns int entityTypeId = EntityTypeCache.Read( typeof( Rock.Model.ContentChannelItem ) ).Id; string channelId = channel.Id.ToString(); string channelTypeId = channel.ContentChannelTypeId.ToString(); foreach ( var attribute in new AttributeService( new RockContext() ).Queryable() .Where( a => a.EntityTypeId == entityTypeId && a.IsGridColumn && ( ( a.EntityTypeQualifierColumn.Equals( "ContentChannelTypeId", StringComparison.OrdinalIgnoreCase ) && a.EntityTypeQualifierValue.Equals( channelTypeId ) ) || ( a.EntityTypeQualifierColumn.Equals( "ContentChannelId", StringComparison.OrdinalIgnoreCase ) && a.EntityTypeQualifierValue.Equals( channelId ) ) ) ) .OrderBy( a => a.Order ) .ThenBy( a => a.Name ) ) { string dataFieldExpression = attribute.Key; bool columnExists = gContentChannelItems.Columns.OfType<AttributeField>().FirstOrDefault( a => a.DataField.Equals( dataFieldExpression ) ) != null; if ( !columnExists ) { AttributeField boundField = new AttributeField(); boundField.DataField = dataFieldExpression; boundField.HeaderText = attribute.Name; boundField.SortExpression = string.Empty; var attributeCache = Rock.Web.Cache.AttributeCache.Read( attribute.Id ); if ( attributeCache != null ) { boundField.ItemStyle.HorizontalAlign = attributeCache.FieldType.Field.AlignValue; } gContentChannelItems.Columns.Add( boundField ); } } // Add Start column var startField = new DateTimeField(); startField.DataField = "StartDateTime"; startField.HeaderText = channel.ContentChannelType.DateRangeType == ContentChannelDateType.DateRange ? "Start" : "Date"; startField.SortExpression = "StartDateTime"; gContentChannelItems.Columns.Add( startField ); // Expire column if ( channel.ContentChannelType.DateRangeType == ContentChannelDateType.DateRange ) { var expireField = new DateTimeField(); expireField.DataField = "ExpireDateTime"; expireField.HeaderText = "Expire"; expireField.SortExpression = "ExpireDateTime"; gContentChannelItems.Columns.Add( expireField ); } // Priority column var priorityField = new BoundField(); priorityField.DataField = "Priority"; priorityField.HeaderText = "Priority"; priorityField.SortExpression = "Priority"; priorityField.DataFormatString = "{0:N0}"; priorityField.ItemStyle.HorizontalAlign = HorizontalAlign.Right; gContentChannelItems.Columns.Add( priorityField ); // Status column if ( channel.RequiresApproval ) { var statusField = new BoundField(); gContentChannelItems.Columns.Add( statusField ); statusField.DataField = "Status"; statusField.HeaderText = "Status"; statusField.SortExpression = "Status"; statusField.HtmlEncode = false; } bool canEditChannel = channel.IsAuthorized( Rock.Security.Authorization.EDIT, CurrentPerson ); gContentChannelItems.Actions.ShowAdd = canEditChannel; gContentChannelItems.IsDeleteEnabled = canEditChannel; if ( canEditChannel ) { var deleteField = new DeleteField(); gContentChannelItems.Columns.Add( deleteField ); deleteField.Click += gContentChannelItems_Delete; } } }
/// <summary> /// Creates the locations grid. /// </summary> private void CreateLocationsGrid() { _gLocations = new Grid(); // make the ID static so we can handle Postbacks from the Add and Delete actions _gLocations.ClientIDMode = System.Web.UI.ClientIDMode.Static; _gLocations.ID = this.ClientID + "_gCheckinLabels"; _gLocations.DisplayType = GridDisplayType.Light; _gLocations.ShowActionRow = true; _gLocations.RowItemText = "Location"; _gLocations.Actions.ShowAdd = true; //// Handle AddClick manually in OnLoad() _gLocations.Actions.AddClick += AddLocation_Click; _gLocations.DataKeyNames = new string[] { "LocationId" }; _gLocations.Columns.Add( new BoundField { DataField = "Name", HeaderText = "Name" } ); DeleteField deleteField = new DeleteField(); //// handle manually in OnLoad() deleteField.Click += DeleteLocation_Click; _gLocations.Columns.Add( deleteField ); Controls.Add( _gLocations ); }
protected void AddDynamicControls( ContentChannel channel) { // Remove all columns gContentChannelItems.Columns.Clear(); phAttributeFilters.Controls.Clear(); if ( channel != null ) { // Add Title column var titleField = new BoundField(); titleField.DataField = "Title"; titleField.HeaderText = "Title"; titleField.SortExpression = "Title"; gContentChannelItems.Columns.Add( titleField ); // Add Attribute columns int entityTypeId = EntityTypeCache.Read( typeof( Rock.Model.ContentChannelItem ) ).Id; string channelId = channel.Id.ToString(); string channelTypeId = channel.ContentChannelTypeId.ToString(); foreach ( var attribute in AvailableAttributes ) { var control = attribute.FieldType.Field.FilterControl( attribute.QualifierValues, "filter_" + attribute.Id.ToString(), false, Rock.Reporting.FilterMode.SimpleFilter ); if ( control != null ) { if ( control is IRockControl ) { var rockControl = (IRockControl)control; rockControl.Label = attribute.Name; rockControl.Help = attribute.Description; phAttributeFilters.Controls.Add( control ); } else { var wrapper = new RockControlWrapper(); wrapper.ID = control.ID + "_wrapper"; wrapper.Label = attribute.Name; wrapper.Controls.Add( control ); phAttributeFilters.Controls.Add( wrapper ); } string savedValue = gfFilter.GetUserPreference( MakeKeyUniqueToChannel( channel.Id, attribute.Key ) ); if ( !string.IsNullOrWhiteSpace( savedValue ) ) { try { var values = JsonConvert.DeserializeObject<List<string>>( savedValue ); attribute.FieldType.Field.SetFilterValues( control, attribute.QualifierValues, values ); } catch { // intentionally ignore } } } string dataFieldExpression = attribute.Key; bool columnExists = gContentChannelItems.Columns.OfType<AttributeField>().FirstOrDefault( a => a.DataField.Equals( dataFieldExpression ) ) != null; if ( !columnExists ) { AttributeField boundField = new AttributeField(); boundField.DataField = dataFieldExpression; boundField.HeaderText = attribute.Name; boundField.SortExpression = string.Empty; boundField.ItemStyle.HorizontalAlign = attribute.FieldType.Field.AlignValue; gContentChannelItems.Columns.Add( boundField ); } } if ( channel.ContentChannelType.IncludeTime ) { // Add Start column var startField = new DateTimeField(); startField.DataField = "StartDateTime"; startField.HeaderText = channel.ContentChannelType.DateRangeType == ContentChannelDateType.DateRange ? "Start" : "Date"; startField.SortExpression = "StartDateTime"; gContentChannelItems.Columns.Add( startField ); // Expire column if ( channel.ContentChannelType.DateRangeType == ContentChannelDateType.DateRange ) { var expireField = new DateTimeField(); expireField.DataField = "ExpireDateTime"; expireField.HeaderText = "Expire"; expireField.SortExpression = "ExpireDateTime"; gContentChannelItems.Columns.Add( expireField ); } } else { // Add Start column var startField = new DateField(); startField.DataField = "StartDateTime"; startField.HeaderText = channel.ContentChannelType.DateRangeType == ContentChannelDateType.DateRange ? "Start" : "Date"; startField.SortExpression = "StartDateTime"; gContentChannelItems.Columns.Add( startField ); // Expire column if ( channel.ContentChannelType.DateRangeType == ContentChannelDateType.DateRange ) { var expireField = new DateField(); expireField.DataField = "ExpireDateTime"; expireField.HeaderText = "Expire"; expireField.SortExpression = "ExpireDateTime"; gContentChannelItems.Columns.Add( expireField ); } } // Priority column var priorityField = new BoundField(); priorityField.DataField = "Priority"; priorityField.HeaderText = "Priority"; priorityField.SortExpression = "Priority"; priorityField.DataFormatString = "{0:N0}"; priorityField.ItemStyle.HorizontalAlign = HorizontalAlign.Right; gContentChannelItems.Columns.Add( priorityField ); // Status column if ( channel.RequiresApproval ) { var statusField = new BoundField(); gContentChannelItems.Columns.Add( statusField ); statusField.DataField = "Status"; statusField.HeaderText = "Status"; statusField.SortExpression = "Status"; statusField.HtmlEncode = false; } // Add occurrences Count column var occurrencesField = new BoolField(); occurrencesField.DataField = "Occurrences"; occurrencesField.HeaderText = "Event Occurrences"; gContentChannelItems.Columns.Add( occurrencesField ); bool canEditChannel = channel.IsAuthorized( Rock.Security.Authorization.EDIT, CurrentPerson ); gContentChannelItems.Actions.ShowAdd = canEditChannel; gContentChannelItems.IsDeleteEnabled = canEditChannel; if ( canEditChannel ) { var deleteField = new DeleteField(); gContentChannelItems.Columns.Add( deleteField ); deleteField.Click += gContentChannelItems_Delete; } } }
/// <summary> /// Creates the locations grid. /// </summary> private void CreateLocationsGrid() { _gLocations = new Grid(); _gLocations.ID = this.ID + "_gCheckinLabels"; _gLocations.DisplayType = GridDisplayType.Light; _gLocations.ShowActionRow = true; _gLocations.RowItemText = "Location"; _gLocations.Actions.ShowAdd = true; //// Handle AddClick manually in OnLoad() _gLocations.Actions.AddClick += AddLocation_Click; _gLocations.DataKeyNames = new string[] { "LocationId" }; _gLocations.TooltipField = "Name"; _gLocations.Columns.Add( new BoundField { DataField = "FullNamePath", HeaderText = "Name" } ); DeleteField deleteField = new DeleteField(); //// handle manually in OnLoad() deleteField.Click += DeleteLocation_Click; _gLocations.Columns.Add( deleteField ); Controls.Add( _gLocations ); }
/// <summary> /// Creates the checkin labels grid. /// </summary> private void CreateCheckinLabelsGrid() { _gCheckinLabels = new Grid(); // make the ID static so we can handle Postbacks from the Add and Delete actions _gCheckinLabels.ClientIDMode = System.Web.UI.ClientIDMode.Static; _gCheckinLabels.ID = this.ClientID + "_gCheckinLabels"; _gCheckinLabels.CssClass = "margin-b-md"; _gCheckinLabels.DisplayType = GridDisplayType.Light; _gCheckinLabels.ShowActionRow = true; _gCheckinLabels.RowItemText = "Label"; _gCheckinLabels.Actions.ShowAdd = true; //// Handle AddClick manually in OnLoad() //// gCheckinLabels.Actions.AddClick += AddCheckinLabel_Click; _gCheckinLabels.DataKeyNames = new string[] { "AttributeKey" }; _gCheckinLabels.Columns.Add( new BoundField { DataField = "BinaryFileId", Visible = false } ); _gCheckinLabels.Columns.Add( new BoundField { DataField = "FileName", HeaderText = "Name" } ); DeleteField deleteField = new DeleteField(); //// handle manually in OnLoad() //// deleteField.Click += DeleteCheckinLabel_Click; _gCheckinLabels.Columns.Add( deleteField ); Controls.Add( _gCheckinLabels ); }
/// <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(); _hfExpanded = new HiddenFieldWithClass(); Controls.Add(_hfExpanded); _hfExpanded.ID = this.ID + "_hfExpanded"; _hfExpanded.CssClass = "filter-expanded"; _hfExpanded.Value = "False"; _hfActivityTypeGuid = new HiddenField(); Controls.Add(_hfActivityTypeGuid); _hfActivityTypeGuid.ID = this.ID + "_hfActivityTypeGuid"; _lblActivityTypeName = new Label(); Controls.Add(_lblActivityTypeName); _lblActivityTypeName.ClientIDMode = ClientIDMode.Static; _lblActivityTypeName.ID = this.ID + "_lblActivityTypeName"; _lblActivityTypeDescription = new Label(); Controls.Add(_lblActivityTypeDescription); _lblActivityTypeDescription.ClientIDMode = ClientIDMode.Static; _lblActivityTypeDescription.ID = this.ID + "_lblActivityTypeDescription"; _lblInactive = new Label(); Controls.Add(_lblInactive); _lblInactive.ClientIDMode = ClientIDMode.Static; _lblInactive.ID = this.ID + "_lblInactive"; _lblInactive.CssClass = "pull-right"; _lblInactive.Text = "<span class='label label-danger'>Inactive</span>"; _lbDeleteActivityType = new LinkButton(); Controls.Add(_lbDeleteActivityType); _lbDeleteActivityType.CausesValidation = false; _lbDeleteActivityType.ID = this.ID + "_lbDeleteActivityType"; _lbDeleteActivityType.CssClass = "btn btn-xs btn-square btn-danger js-activity-delete"; _lbDeleteActivityType.Click += lbDeleteActivityType_Click; _lbDeleteActivityType.Controls.Add(new LiteralControl { Text = "<i class='fa fa-times'></i>" }); _sbSecurity = new SecurityButton(); Controls.Add(_sbSecurity); _sbSecurity.ID = this.ID + "_sbSecurity"; _sbSecurity.Attributes["class"] = "btn btn-security btn-xs security pull-right"; _sbSecurity.EntityTypeId = EntityTypeCache.Get(typeof(Rock.Model.WorkflowActivityType)).Id; _cbActivityTypeIsActive = new RockCheckBox { Text = "Active" }; Controls.Add(_cbActivityTypeIsActive); _cbActivityTypeIsActive.ID = this.ID + "_cbActivityTypeIsActive"; string checkboxScriptFormat = @" javascript: if ($(this).is(':checked')) {{ $('#{0}').hide(); $('#{1}').removeClass('workflow-activity-inactive'); }} else {{ $('#{0}').show(); $('#{1}').addClass('workflow-activity-inactive'); }} "; _cbActivityTypeIsActive.InputAttributes.Add("onclick", string.Format(checkboxScriptFormat, _lblInactive.ID, this.ID + "_section")); _tbActivityTypeName = new RockTextBox(); Controls.Add(_tbActivityTypeName); _tbActivityTypeName.ID = this.ID + "_tbActivityTypeName"; _tbActivityTypeName.Label = "Name"; _tbActivityTypeName.Required = true; _tbActivityTypeName.Attributes["onblur"] = string.Format("javascript: $('#{0}').text($(this).val());", _lblActivityTypeName.ID); _tbActivityTypeDescription = new RockTextBox(); Controls.Add(_tbActivityTypeDescription); _tbActivityTypeDescription.ID = this.ID + "_tbActivityTypeDescription"; _tbActivityTypeDescription.Label = "Description"; _tbActivityTypeDescription.TextMode = TextBoxMode.MultiLine; _tbActivityTypeDescription.Rows = 2; _tbActivityTypeDescription.Attributes["onblur"] = string.Format("javascript: $('#{0}').text($(this).val());", _lblActivityTypeDescription.ID); _cbActivityTypeIsActivatedWithWorkflow = new RockCheckBox { Text = "Activated with Workflow" }; Controls.Add(_cbActivityTypeIsActivatedWithWorkflow); _cbActivityTypeIsActivatedWithWorkflow.ID = this.ID + "_cbActivityTypeIsActivatedWithWorkflow"; checkboxScriptFormat = @" javascript: if ($(this).is(':checked')) {{ $('#{0}').addClass('activated-with-workflow'); }} else {{ $('#{0}').removeClass('activated-with-workflow'); }} "; _cbActivityTypeIsActivatedWithWorkflow.InputAttributes.Add("onclick", string.Format(checkboxScriptFormat, this.ID + "_section")); _lbAddActionType = new LinkButton(); Controls.Add(_lbAddActionType); _lbAddActionType.ID = this.ID + "_lbAddAction"; _lbAddActionType.CssClass = "btn btn-xs btn-action add-action"; _lbAddActionType.Click += lbAddActionType_Click; _lbAddActionType.CausesValidation = false; _lbAddActionType.Controls.Add(new LiteralControl { Text = "<i class='fa fa-plus'></i> Add Action" }); _pwAttributes = new PanelWidget(); Controls.Add(_pwAttributes); _pwAttributes.ID = this.ID + "_pwAttributes"; _pwAttributes.Title = "Activity Attributes"; _pwAttributes.CssClass = "attribute-panel"; _gAttributes = new Grid(); _pwAttributes.Controls.Add(_gAttributes); _gAttributes.ID = this.ID + "_gAttributes"; _gAttributes.AllowPaging = false; _gAttributes.DisplayType = GridDisplayType.Light; _gAttributes.RowItemText = "Activity Attribute"; _gAttributes.AddCssClass("attribute-grid"); _gAttributes.DataKeyNames = new string[] { "Guid" }; _gAttributes.Actions.ShowAdd = true; _gAttributes.Actions.AddClick += gAttributes_Add; _gAttributes.GridRebind += gAttributes_Rebind; _gAttributes.GridReorder += gAttributes_Reorder; _gAttributes.ShowActionsInHeader = false; var reorderField = new ReorderField(); _gAttributes.Columns.Add(reorderField); var nameField = new BoundField(); nameField.DataField = "Name"; nameField.HeaderText = "Attribute"; _gAttributes.Columns.Add(nameField); var descField = new BoundField(); descField.DataField = "Description"; descField.HeaderText = "Description"; _gAttributes.Columns.Add(descField); var fieldTypeField = new BoundField(); fieldTypeField.DataField = "FieldType"; fieldTypeField.HeaderText = "Field Type"; _gAttributes.Columns.Add(fieldTypeField); var reqField = new BoolField(); reqField.DataField = "IsRequired"; reqField.HeaderText = "Required"; _gAttributes.Columns.Add(reqField); var editField = new EditField(); editField.Click += gAttributes_Edit; _gAttributes.Columns.Add(editField); var delField = new DeleteField(); delField.Click += gAttributes_Delete; _gAttributes.Columns.Add(delField); }
private void AddDynamicControls() { if ( AvailableAttributes != null ) { foreach ( var attribute in AvailableAttributes ) { var control = attribute.FieldType.Field.FilterControl( attribute.QualifierValues, "filter_" + attribute.Id.ToString(), false, Rock.Reporting.FilterMode.SimpleFilter ); if ( control != null ) { if ( control is IRockControl ) { var rockControl = (IRockControl)control; rockControl.Label = attribute.Name; rockControl.Help = attribute.Description; phAttributeFilters.Controls.Add( control ); } else { var wrapper = new RockControlWrapper(); wrapper.ID = control.ID + "_wrapper"; wrapper.Label = attribute.Name; wrapper.Controls.Add( control ); phAttributeFilters.Controls.Add( wrapper ); } string savedValue = rFilter.GetUserPreference( attribute.Key); if ( !string.IsNullOrWhiteSpace( savedValue ) ) { try { var values = JsonConvert.DeserializeObject<List<string>>( savedValue ); attribute.FieldType.Field.SetFilterValues( control, attribute.QualifierValues, values ); } catch { // intentionally ignore } } } bool columnExists = gList.Columns.OfType<AttributeField>().FirstOrDefault( a => a.AttributeId == attribute.Id ) != null; if ( !columnExists ) { AttributeField boundField = new AttributeField(); boundField.DataField = attribute.Key; boundField.AttributeId = attribute.Id; boundField.HeaderText = attribute.Name; var attributeCache = Rock.Web.Cache.AttributeCache.Read( attribute.Id ); if ( attributeCache != null ) { boundField.ItemStyle.HorizontalAlign = attributeCache.FieldType.Field.AlignValue; } gList.Columns.Add( boundField ); } } } // Add delete column var deleteField = new DeleteField(); gList.Columns.Add( deleteField ); deleteField.Click += gList_Delete; }
/// <summary> /// Adds the filter controls and grid columns for all of the registration template's form fields /// that were configured to 'Show on Grid' /// </summary> private void AddDynamicControls() { phRegistrantFormFieldFilters.Controls.Clear(); phWaitListFormFieldFilters.Controls.Clear(); ClearGrid( gGroupPlacements ); ClearGrid( gRegistrants ); ClearGrid( gWaitList ); if ( RegistrantFields != null ) { foreach ( var field in RegistrantFields ) { if ( field.FieldSource == RegistrationFieldSource.PersonField && field.PersonFieldType.HasValue ) { switch ( field.PersonFieldType.Value ) { case RegistrationPersonFieldType.Campus: { var ddlCampus = new RockDropDownList(); ddlCampus.ID = "ddlCampus"; ddlCampus.Label = "Home Campus"; ddlCampus.DataValueField = "Id"; ddlCampus.DataTextField = "Name"; ddlCampus.DataSource = CampusCache.All(); ddlCampus.DataBind(); ddlCampus.Items.Insert( 0, new ListItem( "", "" ) ); ddlCampus.SetValue( fRegistrants.GetUserPreference( "Home Campus" ) ); phRegistrantFormFieldFilters.Controls.Add( ddlCampus ); var ddlCampus2 = new RockDropDownList(); ddlCampus2.ID = "ddlCampus"; ddlCampus2.Label = "Home Campus"; ddlCampus2.DataValueField = "Id"; ddlCampus2.DataTextField = "Name"; ddlCampus2.DataSource = CampusCache.All(); ddlCampus2.DataBind(); ddlCampus2.Items.Insert( 0, new ListItem( "", "" ) ); ddlCampus2.SetValue( fRegistrants.GetUserPreference( "WL-Home Campus" ) ); phWaitListFormFieldFilters.Controls.Add( ddlCampus2 ); var templateField = new RockLiteralField(); templateField.ID = "lCampus"; templateField.HeaderText = "Campus"; gRegistrants.Columns.Add( templateField ); var templateField2 = new RockLiteralField(); templateField2.ID = "lCampus"; templateField2.HeaderText = "Campus"; gGroupPlacements.Columns.Add( templateField2 ); var templateField3 = new RockLiteralField(); templateField3.ID = "lCampus"; templateField3.HeaderText = "Campus"; gWaitList.Columns.Add( templateField3 ); break; } case RegistrationPersonFieldType.Email: { var tbEmailFilter = new RockTextBox(); tbEmailFilter.ID = "tbEmailFilter"; tbEmailFilter.Label = "Email"; tbEmailFilter.Text = fRegistrants.GetUserPreference( "Email" ); phRegistrantFormFieldFilters.Controls.Add( tbEmailFilter ); var tbEmailFilter2 = new RockTextBox(); tbEmailFilter2.ID = "tbEmailFilter"; tbEmailFilter2.Label = "Email"; tbEmailFilter2.Text = fRegistrants.GetUserPreference( "WL-Email" ); phWaitListFormFieldFilters.Controls.Add( tbEmailFilter2 ); string dataFieldExpression = "PersonAlias.Person.Email"; var emailField = new RockBoundField(); emailField.DataField = dataFieldExpression; emailField.HeaderText = "Email"; emailField.SortExpression = dataFieldExpression; gRegistrants.Columns.Add( emailField ); var emailField2 = new RockBoundField(); emailField2.DataField = dataFieldExpression; emailField2.HeaderText = "Email"; emailField2.SortExpression = dataFieldExpression; gGroupPlacements.Columns.Add( emailField2 ); var emailField3 = new RockBoundField(); emailField3.DataField = dataFieldExpression; emailField3.HeaderText = "Email"; emailField3.SortExpression = dataFieldExpression; gWaitList.Columns.Add( emailField3 ); break; } case RegistrationPersonFieldType.Birthdate: { var drpBirthdateFilter = new DateRangePicker(); drpBirthdateFilter.ID = "drpBirthdateFilter"; drpBirthdateFilter.Label = "Birthdate Range"; drpBirthdateFilter.DelimitedValues = fRegistrants.GetUserPreference( "Birthdate Range" ); phRegistrantFormFieldFilters.Controls.Add( drpBirthdateFilter ); var drpBirthdateFilter2 = new DateRangePicker(); drpBirthdateFilter2.ID = "drpBirthdateFilter"; drpBirthdateFilter2.Label = "Birthdate Range"; drpBirthdateFilter2.DelimitedValues = fRegistrants.GetUserPreference( "WL-Birthdate Range" ); phWaitListFormFieldFilters.Controls.Add( drpBirthdateFilter2 ); string dataFieldExpression = "PersonAlias.Person.BirthDate"; var birthdateField = new DateField(); birthdateField.DataField = dataFieldExpression; birthdateField.HeaderText = "Birthdate"; birthdateField.SortExpression = dataFieldExpression; gRegistrants.Columns.Add( birthdateField ); var birthdateField2 = new DateField(); birthdateField2.DataField = dataFieldExpression; birthdateField2.HeaderText = "Birthdate"; birthdateField2.SortExpression = dataFieldExpression; gGroupPlacements.Columns.Add( birthdateField2 ); var birthdateField3 = new DateField(); birthdateField3.DataField = dataFieldExpression; birthdateField3.HeaderText = "Birthdate"; birthdateField3.SortExpression = dataFieldExpression; gWaitList.Columns.Add( birthdateField3 ); break; } case RegistrationPersonFieldType.Grade: { var gpGradeFilter = new GradePicker(); gpGradeFilter.ID = "gpGradeFilter"; gpGradeFilter.Label = "Grade"; gpGradeFilter.UseAbbreviation = true; gpGradeFilter.UseGradeOffsetAsValue = true; gpGradeFilter.CssClass = "input-width-md"; gpGradeFilter.SetValue( fRegistrants.GetUserPreference( "Grade" ).AsIntegerOrNull() ); phRegistrantFormFieldFilters.Controls.Add( gpGradeFilter ); var gpGradeFilter2 = new GradePicker(); gpGradeFilter2.ID = "gpGradeFilter"; gpGradeFilter2.Label = "Grade"; gpGradeFilter2.UseAbbreviation = true; gpGradeFilter2.UseGradeOffsetAsValue = true; gpGradeFilter2.CssClass = "input-width-md"; gpGradeFilter2.SetValue( fRegistrants.GetUserPreference( "WL-Grade" ).AsIntegerOrNull() ); phWaitListFormFieldFilters.Controls.Add( gpGradeFilter2 ); string dataFieldExpression = "PersonAlias.Person.GraduationYear"; var gradeField = new RockBoundField(); gradeField.DataField = dataFieldExpression; gradeField.HeaderText = "Graduation Year"; gradeField.SortExpression = dataFieldExpression; gRegistrants.Columns.Add( gradeField ); var gradeField2 = new RockBoundField(); gradeField2.DataField = dataFieldExpression; gradeField2.HeaderText = "Graduation Year"; gradeField2.SortExpression = dataFieldExpression; gGroupPlacements.Columns.Add( gradeField2 ); var gradeField3 = new RockBoundField(); gradeField3.DataField = dataFieldExpression; gradeField3.HeaderText = "Graduation Year"; gradeField3.SortExpression = dataFieldExpression; gWaitList.Columns.Add( gradeField3 ); break; } case RegistrationPersonFieldType.Gender: { var ddlGenderFilter = new RockDropDownList(); ddlGenderFilter.BindToEnum<Gender>( true ); ddlGenderFilter.ID = "ddlGenderFilter"; ddlGenderFilter.Label = "Gender"; ddlGenderFilter.SetValue( fRegistrants.GetUserPreference( "Gender" ) ); phRegistrantFormFieldFilters.Controls.Add( ddlGenderFilter ); var ddlGenderFilter2 = new RockDropDownList(); ddlGenderFilter2.BindToEnum<Gender>( true ); ddlGenderFilter2.ID = "ddlGenderFilter"; ddlGenderFilter2.Label = "Gender"; ddlGenderFilter2.SetValue( fRegistrants.GetUserPreference( "WL-Gender" ) ); phWaitListFormFieldFilters.Controls.Add( ddlGenderFilter2 ); string dataFieldExpression = "PersonAlias.Person.Gender"; var genderField = new EnumField(); genderField.DataField = dataFieldExpression; genderField.HeaderText = "Gender"; genderField.SortExpression = dataFieldExpression; gRegistrants.Columns.Add( genderField ); var genderField2 = new EnumField(); genderField2.DataField = dataFieldExpression; genderField2.HeaderText = "Gender"; genderField2.SortExpression = dataFieldExpression; gGroupPlacements.Columns.Add( genderField2 ); var genderField3 = new EnumField(); genderField3.DataField = dataFieldExpression; genderField3.HeaderText = "Gender"; genderField3.SortExpression = dataFieldExpression; gWaitList.Columns.Add( genderField3 ); break; } case RegistrationPersonFieldType.MaritalStatus: { var ddlMaritalStatusFilter = new RockDropDownList(); ddlMaritalStatusFilter.BindToDefinedType( DefinedTypeCache.Read( Rock.SystemGuid.DefinedType.PERSON_MARITAL_STATUS.AsGuid() ), true ); ddlMaritalStatusFilter.ID = "ddlMaritalStatusFilter"; ddlMaritalStatusFilter.Label = "Marital Status"; ddlMaritalStatusFilter.SetValue( fRegistrants.GetUserPreference( "Marital Status" ) ); phRegistrantFormFieldFilters.Controls.Add( ddlMaritalStatusFilter ); var ddlMaritalStatusFilter2 = new RockDropDownList(); ddlMaritalStatusFilter2.BindToDefinedType( DefinedTypeCache.Read( Rock.SystemGuid.DefinedType.PERSON_MARITAL_STATUS.AsGuid() ), true ); ddlMaritalStatusFilter2.ID = "ddlMaritalStatusFilter"; ddlMaritalStatusFilter2.Label = "Marital Status"; ddlMaritalStatusFilter2.SetValue( fRegistrants.GetUserPreference( "WL-Marital Status" ) ); phWaitListFormFieldFilters.Controls.Add( ddlMaritalStatusFilter2 ); string dataFieldExpression = "PersonAlias.Person.MaritalStatusValue.Value"; var maritalStatusField = new RockBoundField(); maritalStatusField.DataField = dataFieldExpression; maritalStatusField.HeaderText = "MaritalStatus"; maritalStatusField.SortExpression = dataFieldExpression; gRegistrants.Columns.Add( maritalStatusField ); var maritalStatusField2 = new RockBoundField(); maritalStatusField2.DataField = dataFieldExpression; maritalStatusField2.HeaderText = "MaritalStatus"; maritalStatusField2.SortExpression = dataFieldExpression; gGroupPlacements.Columns.Add( maritalStatusField2 ); var maritalStatusField3 = new RockBoundField(); maritalStatusField3.DataField = dataFieldExpression; maritalStatusField3.HeaderText = "MaritalStatus"; maritalStatusField3.SortExpression = dataFieldExpression; gWaitList.Columns.Add( maritalStatusField3 ); break; } case RegistrationPersonFieldType.MobilePhone: { var tbPhoneFilter = new RockTextBox(); tbPhoneFilter.ID = "tbPhoneFilter"; tbPhoneFilter.Label = "Phone"; tbPhoneFilter.Text = fRegistrants.GetUserPreference( "Phone" ); phRegistrantFormFieldFilters.Controls.Add( tbPhoneFilter ); var tbPhoneFilter2 = new RockTextBox(); tbPhoneFilter2.ID = "tbPhoneFilter"; tbPhoneFilter2.Label = "Phone"; tbPhoneFilter2.Text = fRegistrants.GetUserPreference( "WL-Phone" ); phWaitListFormFieldFilters.Controls.Add( tbPhoneFilter2 ); var phoneNumbersField = new PhoneNumbersField(); phoneNumbersField.DataField = "PersonAlias.Person.PhoneNumbers"; phoneNumbersField.HeaderText = "Phone(s)"; gRegistrants.Columns.Add( phoneNumbersField ); var phoneNumbersField2 = new PhoneNumbersField(); phoneNumbersField2.DataField = "PersonAlias.Person.PhoneNumbers"; phoneNumbersField2.HeaderText = "Phone(s)"; gGroupPlacements.Columns.Add( phoneNumbersField2 ); var phoneNumbersField3 = new PhoneNumbersField(); phoneNumbersField3.DataField = "PersonAlias.Person.PhoneNumbers"; phoneNumbersField3.HeaderText = "Phone(s)"; gWaitList.Columns.Add( phoneNumbersField3 ); break; } } } else if ( field.Attribute != null ) { var attribute = field.Attribute; // add dynamic filter to registrant grid var control = attribute.FieldType.Field.FilterControl( attribute.QualifierValues, "filter_" + attribute.Id.ToString(), false, Rock.Reporting.FilterMode.SimpleFilter ); if ( control != null ) { if ( control is IRockControl ) { var rockControl = (IRockControl)control; rockControl.Label = attribute.Name; rockControl.Help = attribute.Description; phRegistrantFormFieldFilters.Controls.Add( control ); } else { var wrapper = new RockControlWrapper(); wrapper.ID = control.ID + "_wrapper"; wrapper.Label = attribute.Name; wrapper.Controls.Add( control ); phRegistrantFormFieldFilters.Controls.Add( wrapper ); } string savedValue = fRegistrants.GetUserPreference( attribute.Key ); if ( !string.IsNullOrWhiteSpace( savedValue ) ) { try { var values = JsonConvert.DeserializeObject<List<string>>( savedValue ); attribute.FieldType.Field.SetFilterValues( control, attribute.QualifierValues, values ); } catch { } } } // add dynamic filter to wait list grid var control2 = attribute.FieldType.Field.FilterControl( attribute.QualifierValues, "filter_" + attribute.Id.ToString(), false, Rock.Reporting.FilterMode.SimpleFilter ); if ( control2 != null ) { if ( control2 is IRockControl ) { var rockControl2 = (IRockControl)control2; rockControl2.Label = attribute.Name; rockControl2.Help = attribute.Description; phWaitListFormFieldFilters.Controls.Add( control2 ); } else { var wrapper2 = new RockControlWrapper(); wrapper2.ID = control.ID + "_wrapper"; wrapper2.Label = attribute.Name; wrapper2.Controls.Add( control2 ); phWaitListFormFieldFilters.Controls.Add( wrapper2 ); } string savedValue = fWaitList.GetUserPreference( "WL-" + attribute.Key ); if ( !string.IsNullOrWhiteSpace( savedValue ) ) { try { var values = JsonConvert.DeserializeObject<List<string>>( savedValue ); attribute.FieldType.Field.SetFilterValues( control2, attribute.QualifierValues, values ); } catch { } } } string dataFieldExpression = attribute.Id.ToString() + attribute.Key; bool columnExists = gRegistrants.Columns.OfType<AttributeField>().FirstOrDefault( a => a.DataField.Equals( dataFieldExpression ) ) != null; if ( !columnExists ) { AttributeField boundField = new AttributeField(); boundField.DataField = dataFieldExpression; boundField.AttributeId = attribute.Id; boundField.HeaderText = attribute.Name; AttributeField boundField2 = new AttributeField(); boundField2.DataField = dataFieldExpression; boundField2.AttributeId = attribute.Id; boundField2.HeaderText = attribute.Name; AttributeField boundField3 = new AttributeField(); boundField3.DataField = dataFieldExpression; boundField3.AttributeId = attribute.Id; boundField3.HeaderText = attribute.Name; var attributeCache = Rock.Web.Cache.AttributeCache.Read( attribute.Id ); if ( attributeCache != null ) { boundField.ItemStyle.HorizontalAlign = attributeCache.FieldType.Field.AlignValue; boundField2.ItemStyle.HorizontalAlign = attributeCache.FieldType.Field.AlignValue; boundField3.ItemStyle.HorizontalAlign = attributeCache.FieldType.Field.AlignValue; } gRegistrants.Columns.Add( boundField ); gGroupPlacements.Columns.Add( boundField2 ); gWaitList.Columns.Add( boundField3 ); } } } } // Add fee column var feeField = new RockLiteralField(); feeField.ID = "lFees"; feeField.HeaderText = "Fees"; gRegistrants.Columns.Add( feeField ); var deleteField = new DeleteField(); gRegistrants.Columns.Add( deleteField ); deleteField.Click += gRegistrants_Delete; var groupPickerField = new GroupPickerField(); groupPickerField.HeaderText = "Group"; groupPickerField.RootGroupId = gpGroupPlacementParentGroup.SelectedValueAsInt(); gGroupPlacements.Columns.Add( groupPickerField ); }
/// <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(); _hfExpanded = new HiddenFieldWithClass(); Controls.Add(_hfExpanded); _hfExpanded.ID = this.ID + "_hfExpanded"; _hfExpanded.CssClass = "filter-expanded"; _hfExpanded.Value = "False"; _hfFormGuid = new HiddenField(); Controls.Add(_hfFormGuid); _hfFormGuid.ID = this.ID + "_hfFormGuid"; _hfFormId = new HiddenField(); Controls.Add(_hfFormId); _hfFormId.ID = this.ID + "_hfFormId"; _lblFormName = new Label(); Controls.Add(_lblFormName); _lblFormName.ClientIDMode = ClientIDMode.Static; _lblFormName.ID = this.ID + "_lblFormName"; _lbDeleteForm = new LinkButton(); Controls.Add(_lbDeleteForm); _lbDeleteForm.CausesValidation = false; _lbDeleteForm.ID = this.ID + "_lbDeleteForm"; _lbDeleteForm.CssClass = "btn btn-xs btn-danger js-activity-delete"; _lbDeleteForm.Click += lbDeleteForm_Click; _lbDeleteForm.Controls.Add(new LiteralControl { Text = "<i class='fa fa-times'></i>" }); _tbFormName = new RockTextBox(); Controls.Add(_tbFormName); _tbFormName.ID = this.ID + "_tbFormName"; _tbFormName.Label = "Form Name"; _tbFormName.Required = true; _tbFormName.Attributes["onblur"] = string.Format("javascript: $('#{0}').text($(this).val());", _lblFormName.ID); _gFields = new Grid(); Controls.Add(_gFields); _gFields.ID = this.ID + "_gFields"; _gFields.AllowPaging = false; _gFields.DisplayType = GridDisplayType.Light; _gFields.RowItemText = "Field"; _gFields.AddCssClass("field-grid"); _gFields.DataKeyNames = new string[] { "Guid" }; _gFields.Actions.ShowAdd = true; _gFields.Actions.AddClick += gFields_Add; _gFields.GridRebind += gFields_Rebind; _gFields.GridReorder += gFields_Reorder; var reorderField = new ReorderField(); _gFields.Columns.Add(reorderField); var nameField = new BoundField(); nameField.DataField = "Name"; nameField.HeaderText = "Field"; _gFields.Columns.Add(nameField); var sourceField = new EnumField(); sourceField.DataField = "FieldSource"; sourceField.HeaderText = "Source"; _gFields.Columns.Add(sourceField); var typeField = new FieldTypeField(); typeField.DataField = "FieldType"; typeField.HeaderText = "Type"; _gFields.Columns.Add(typeField); var isInternalField = new BoolField(); isInternalField.DataField = "IsInternal"; isInternalField.HeaderText = "Internal"; _gFields.Columns.Add(isInternalField); var isSharedValueField = new BoolField(); isSharedValueField.DataField = "IsSharedValue"; isSharedValueField.HeaderText = "Common"; _gFields.Columns.Add(isSharedValueField); var showCurrentValueField = new BoolField(); showCurrentValueField.DataField = "ShowCurrentValue"; showCurrentValueField.HeaderText = "Use Current Value"; _gFields.Columns.Add(showCurrentValueField); var isRequiredField = new BoolField(); isRequiredField.DataField = "IsRequired"; isRequiredField.HeaderText = "Required"; _gFields.Columns.Add(isRequiredField); var isGridField = new BoolField(); isGridField.DataField = "IsGridField"; isGridField.HeaderText = "Show on Grid"; _gFields.Columns.Add(isGridField); var editField = new EditField(); editField.Click += gFields_Edit; _gFields.Columns.Add(editField); var delField = new DeleteField(); delField.Click += gFields_Delete; _gFields.Columns.Add(delField); }
/// <summary> /// Adds the filter controls and grid columns for all of the registration template's form fields /// that were configured to 'Show on Grid' /// </summary> private void AddDynamicRegistrantControls() { phRegistrantFormFieldFilters.Controls.Clear(); // Remove any of the dynamic person fields var dynamicColumns = new List<string> { "PersonAlias.Person.BirthDate", }; foreach ( var column in gRegistrants.Columns .OfType<BoundField>() .Where( c => dynamicColumns.Contains( c.DataField ) ) .ToList() ) { gRegistrants.Columns.Remove( column ); } // Remove any of the dynamic attribute fields foreach ( var column in gRegistrants.Columns .OfType<AttributeField>() .ToList() ) { gRegistrants.Columns.Remove( column ); } // Remove the fees field foreach ( var column in gRegistrants.Columns .OfType<TemplateField>() .Where( c => c.HeaderText == "Fees" ) .ToList() ) { gRegistrants.Columns.Remove( column ); } // Remove the delete field foreach ( var column in gRegistrants.Columns .OfType<DeleteField>() .ToList() ) { gRegistrants.Columns.Remove( column ); } if ( RegistrantFields != null ) { foreach ( var field in RegistrantFields ) { if ( field.FieldSource == RegistrationFieldSource.PersonField && field.PersonFieldType.HasValue ) { switch ( field.PersonFieldType.Value ) { case RegistrationPersonFieldType.Campus: { var ddlCampus = new RockDropDownList(); ddlCampus.ID = "ddlCampus"; ddlCampus.Label = "Home Campus"; ddlCampus.DataValueField = "Id"; ddlCampus.DataTextField = "Name"; ddlCampus.DataSource = CampusCache.All(); ddlCampus.DataBind(); ddlCampus.Items.Insert( 0, new ListItem( "", "" ) ); ddlCampus.SetValue( fRegistrants.GetUserPreference( "Home Campus" ) ); phRegistrantFormFieldFilters.Controls.Add( ddlCampus ); var templateField = new TemplateField(); templateField.ItemTemplate = new LiteralFieldTemplate( "lCampus" ); templateField.HeaderText = "Campus"; gRegistrants.Columns.Add( templateField ); break; } case RegistrationPersonFieldType.Email: { var tbEmailFilter = new RockTextBox(); tbEmailFilter.ID = "tbEmailFilter"; tbEmailFilter.Label = "Email"; tbEmailFilter.Text = fRegistrants.GetUserPreference( "Email" ); phRegistrantFormFieldFilters.Controls.Add( tbEmailFilter ); string dataFieldExpression = "PersonAlias.Person.Email"; var emailField = new BoundField(); emailField.DataField = dataFieldExpression; emailField.HeaderText = "Email"; emailField.SortExpression = dataFieldExpression; gRegistrants.Columns.Add( emailField ); break; } case RegistrationPersonFieldType.Birthdate: { var drpBirthdateFilter = new DateRangePicker(); drpBirthdateFilter.ID = "drpBirthdateFilter"; drpBirthdateFilter.Label = "Birthdate Range"; drpBirthdateFilter.DelimitedValues = fRegistrants.GetUserPreference( "Birthdate Range" ); phRegistrantFormFieldFilters.Controls.Add( drpBirthdateFilter ); string dataFieldExpression = "PersonAlias.Person.BirthDate"; var birthdateField = new DateField(); birthdateField.DataField = dataFieldExpression; birthdateField.HeaderText = "Birthdate"; birthdateField.SortExpression = dataFieldExpression; gRegistrants.Columns.Add( birthdateField ); break; } case RegistrationPersonFieldType.Gender: { var ddlGenderFilter = new RockDropDownList(); ddlGenderFilter.BindToEnum<Gender>( true ); ddlGenderFilter.ID = "ddlGenderFilter"; ddlGenderFilter.Label = "Gender"; ddlGenderFilter.SetValue( fRegistrants.GetUserPreference( "Gender" ) ); phRegistrantFormFieldFilters.Controls.Add( ddlGenderFilter ); string dataFieldExpression = "PersonAlias.Person.Gender"; var genderField = new EnumField(); genderField.DataField = dataFieldExpression; genderField.HeaderText = "Gender"; genderField.SortExpression = dataFieldExpression; gRegistrants.Columns.Add( genderField ); break; } case RegistrationPersonFieldType.MaritalStatus: { var ddlMaritalStatusFilter = new RockDropDownList(); ddlMaritalStatusFilter.BindToDefinedType( DefinedTypeCache.Read( Rock.SystemGuid.DefinedType.PERSON_MARITAL_STATUS.AsGuid() ), true ); ddlMaritalStatusFilter.ID = "ddlMaritalStatusFilter"; ddlMaritalStatusFilter.Label = "Marital Status"; ddlMaritalStatusFilter.SetValue( fRegistrants.GetUserPreference( "Marital Status" ) ); phRegistrantFormFieldFilters.Controls.Add( ddlMaritalStatusFilter ); string dataFieldExpression = "PersonAlias.Person.MaritalStatusValue.Value"; var maritalStatusField = new BoundField(); maritalStatusField.DataField = dataFieldExpression; maritalStatusField.HeaderText = "MaritalStatus"; maritalStatusField.SortExpression = dataFieldExpression; gRegistrants.Columns.Add( maritalStatusField ); break; } case RegistrationPersonFieldType.MobilePhone: { var tbPhoneFilter = new RockTextBox(); tbPhoneFilter.ID = "tbPhoneFilter"; tbPhoneFilter.Label = "Phone"; tbPhoneFilter.Text = fRegistrants.GetUserPreference( "Phone" ); phRegistrantFormFieldFilters.Controls.Add( tbPhoneFilter ); var templateField = new TemplateField(); templateField.ItemTemplate = new LiteralFieldTemplate( "lPhone" ); templateField.HeaderText = "Phone(s)"; gRegistrants.Columns.Add( templateField ); break; } } } else if ( field.Attribute != null ) { var attribute = field.Attribute; var control = attribute.FieldType.Field.FilterControl( attribute.QualifierValues, "filter_" + attribute.Id.ToString(), false, Rock.Reporting.FilterMode.SimpleFilter ); if ( control != null ) { if ( control is IRockControl ) { var rockControl = (IRockControl)control; rockControl.Label = attribute.Name; rockControl.Help = attribute.Description; phRegistrantFormFieldFilters.Controls.Add( control ); } else { var wrapper = new RockControlWrapper(); wrapper.ID = control.ID + "_wrapper"; wrapper.Label = attribute.Name; wrapper.Controls.Add( control ); phRegistrantFormFieldFilters.Controls.Add( wrapper ); } string savedValue = fRegistrants.GetUserPreference( attribute.Key ); if ( !string.IsNullOrWhiteSpace( savedValue ) ) { try { var values = JsonConvert.DeserializeObject<List<string>>( savedValue ); attribute.FieldType.Field.SetFilterValues( control, attribute.QualifierValues, values ); } catch { } } } string dataFieldExpression = attribute.Id.ToString() + attribute.Key; bool columnExists = gRegistrants.Columns.OfType<AttributeField>().FirstOrDefault( a => a.DataField.Equals( dataFieldExpression ) ) != null; if ( !columnExists ) { AttributeField boundField = new AttributeField(); boundField.DataField = dataFieldExpression; boundField.HeaderText = attribute.Name; boundField.SortExpression = string.Empty; var attributeCache = Rock.Web.Cache.AttributeCache.Read( attribute.Id ); if ( attributeCache != null ) { boundField.ItemStyle.HorizontalAlign = attributeCache.FieldType.Field.AlignValue; } gRegistrants.Columns.Add( boundField ); } } } } // Add fee column var feeField = new TemplateField(); feeField.HeaderText = "Fees"; feeField.ItemTemplate = new LiteralFieldTemplate( "lFees" ); gRegistrants.Columns.Add( feeField ); var deleteField = new DeleteField(); gRegistrants.Columns.Add( deleteField ); deleteField.Click += gRegistrants_Delete; }
/// <summary> /// Raises the <see cref="E:System.Web.UI.Control.Init" /> event. /// </summary> /// <param name="e">An <see cref="T:System.EventArgs" /> object that contains the event data.</param> protected override void OnInit( EventArgs e ) { base.OnInit( e ); // if this block has a specific GroupId set, use that, otherwise, determine it from the PageParameters int groupId = GetAttributeValue( "Group" ).AsInteger(); if ( groupId == 0 ) { groupId = PageParameter( "GroupId" ).AsInteger(); if ( groupId != 0 ) { string key = string.Format( "Group:{0}", groupId ); _group = RockPage.GetSharedItem( key ) as Group; if ( _group == null ) { _group = new GroupService( new RockContext() ).Queryable( "GroupType" ) .Where( g => g.Id == groupId ) .FirstOrDefault(); RockPage.SaveSharedItem( key, _group ); } if ( _group != null ) { rFilter.ApplyFilterClick += rFilter_ApplyFilterClick; gGroupMembers.DataKeyNames = new string[] { "Id" }; gGroupMembers.CommunicateMergeFields = new List<string> { "GroupRole.Name" }; gGroupMembers.PersonIdField = "PersonId"; gGroupMembers.Actions.AddClick += gGroupMembers_AddClick; gGroupMembers.Actions.ShowAdd = true; gGroupMembers.IsDeleteEnabled = true; gGroupMembers.GridRebind += gGroupMembers_GridRebind; gGroupMembers.RowItemText = _group.GroupType.GroupTerm + " " + _group.GroupType.GroupMemberTerm; gGroupMembers.ExportFilename = _group.Name; // make sure they have Auth to the block AND Edit to the Group bool canEditBlock = IsUserAuthorized( Authorization.EDIT ) && _group.IsAuthorized( Authorization.EDIT, this.CurrentPerson ); gGroupMembers.Actions.ShowAdd = canEditBlock; gGroupMembers.IsDeleteEnabled = canEditBlock; // Add attribute columns AddAttributeColumns(); // Add delete column var deleteField = new DeleteField(); gGroupMembers.Columns.Add( deleteField ); deleteField.Click += DeleteGroupMember_Click; } } } }
/// <summary> /// Raises the <see cref="E:System.Web.UI.Control.Init" /> event. /// </summary> /// <param name="e">An <see cref="T:System.EventArgs" /> object that contains the event data.</param> protected override void OnInit( EventArgs e ) { base.OnInit( e ); // set person context var contextEntity = this.ContextEntity(); if ( contextEntity != null ) { if ( contextEntity is Person ) { _person = contextEntity as Person; } } // set person if grid should be filtered by the current person if ( GetAttributeValue( "FilterItemsForCurrentUser" ).AsBoolean() ) { _person = CurrentPerson; } gfFilter.Visible = GetAttributeValue( "ShowFilters" ).AsBoolean(); _channelId = PageParameter( "contentChannelId" ).AsIntegerOrNull(); if ( _channelId != null ) { upnlContent.Visible = true; string cssIcon = "fa fa-bullhorn"; var contentChannel = new ContentChannelService( new RockContext() ).Get( _channelId.Value ); if ( contentChannel != null ) { string startHeading = contentChannel.ContentChannelType.DateRangeType == ContentChannelDateType.DateRange ? "Start" : "Active"; bool isRange = contentChannel.ContentChannelType.DateRangeType == ContentChannelDateType.DateRange; gItems.Columns[1].HeaderText = startHeading; gItems.Columns[3].HeaderText = startHeading; ddlStatus.Visible = contentChannel.RequiresApproval; if ( contentChannel.ContentChannelType.IncludeTime ) { gItems.Columns[1].Visible = true; gItems.Columns[2].Visible = isRange; gItems.Columns[3].Visible = false; gItems.Columns[4].Visible = false; } else { gItems.Columns[1].Visible = false; gItems.Columns[2].Visible = false; gItems.Columns[3].Visible = true; gItems.Columns[4].Visible = isRange; } gItems.Columns[5].Visible = !contentChannel.ContentChannelType.DisablePriority; lContentChannel.Text = contentChannel.Name; _typeId = contentChannel.ContentChannelTypeId; if ( !string.IsNullOrWhiteSpace( contentChannel.IconCssClass ) ) { cssIcon = contentChannel.IconCssClass; } } lIcon.Text = string.Format( "<i class='{0}'></i>", cssIcon ); // Block Security and special attributes (RockPage takes care of View) bool canAddEditDelete = IsUserAuthorized( Authorization.EDIT ); gfFilter.ApplyFilterClick += gfFilter_ApplyFilterClick; gfFilter.DisplayFilterValue += gfFilter_DisplayFilterValue; gItems.DataKeyNames = new string[] { "Id" }; gItems.Actions.ShowAdd = canAddEditDelete; gItems.IsDeleteEnabled = canAddEditDelete; gItems.Actions.AddClick += gItems_Add; gItems.GridRebind += gItems_GridRebind; AddAttributeColumns(); if ( contentChannel != null && contentChannel.RequiresApproval ) { var statusField = new BoundField(); gItems.Columns.Add( statusField ); statusField.DataField = "Status"; statusField.HeaderText = "Status"; statusField.SortExpression = "Status"; statusField.HtmlEncode = false; } var securityField = new SecurityField(); gItems.Columns.Add( securityField ); securityField.TitleField = "Title"; securityField.EntityTypeId = EntityTypeCache.Read( typeof( Rock.Model.ContentChannelItem ) ).Id; var deleteField = new DeleteField(); gItems.Columns.Add( deleteField ); deleteField.Click += gItems_Delete; // this event gets fired after block settings are updated. it's nice to repaint the screen if these settings would alter it this.BlockUpdated += Block_BlockUpdated; this.AddConfigurationUpdateTrigger( upnlContent ); } else { upnlContent.Visible = false; } }
/// <summary> /// Adds the attribute columns. /// </summary> private void AddDynamicControls() { // Clear the filter controls phAttributeFilters.Controls.Clear(); // Remove attribute columns foreach ( var column in gEventCalendarItems.Columns.OfType<AttributeField>().ToList() ) { gEventCalendarItems.Columns.Remove( column ); } // Remove status columns foreach ( var column in gEventCalendarItems.Columns.OfType<BoundField>() .Where( c => c.DataField == "Instances" || c.DataField == "Status" || c.DataField == "ApprovalStatus" ) .ToList() ) { gEventCalendarItems.Columns.Remove( column ); } // Remove Delete column foreach ( var column in gEventCalendarItems.Columns.OfType<DeleteField>().ToList() ) { gEventCalendarItems.Columns.Remove( column ); } if ( AvailableAttributes != null ) { foreach ( var attribute in AvailableAttributes ) { var control = attribute.FieldType.Field.FilterControl( attribute.QualifierValues, "filter_" + attribute.Id.ToString(), false, Rock.Reporting.FilterMode.SimpleFilter ); if ( control != null ) { if ( control is IRockControl ) { var rockControl = (IRockControl)control; rockControl.Label = attribute.Name; rockControl.Help = attribute.Description; phAttributeFilters.Controls.Add( control ); } else { var wrapper = new RockControlWrapper(); wrapper.ID = control.ID + "_wrapper"; wrapper.Label = attribute.Name; wrapper.Controls.Add( control ); phAttributeFilters.Controls.Add( wrapper ); } string savedValue = rFilter.GetUserPreference( MakeKeyUniqueToEventCalendar( attribute.Key ) ); if ( !string.IsNullOrWhiteSpace( savedValue ) ) { try { var values = JsonConvert.DeserializeObject<List<string>>( savedValue ); attribute.FieldType.Field.SetFilterValues( control, attribute.QualifierValues, values ); } catch { } } } string dataFieldExpression = attribute.Key; bool columnExists = gEventCalendarItems.Columns.OfType<AttributeField>().FirstOrDefault( a => a.DataField.Equals( dataFieldExpression ) ) != null; if ( !columnExists ) { AttributeField boundField = new AttributeField(); boundField.DataField = dataFieldExpression; boundField.HeaderText = attribute.Name; boundField.SortExpression = string.Empty; var attributeCache = Rock.Web.Cache.AttributeCache.Read( attribute.Id ); if ( attributeCache != null ) { boundField.ItemStyle.HorizontalAlign = attributeCache.FieldType.Field.AlignValue; } gEventCalendarItems.Columns.Add( boundField ); } } } // Add occurrences Count column var occurrencesField = new BadgeField(); occurrencesField.ImportantMin = int.MaxValue; occurrencesField.WarningMin = 0; occurrencesField.WarningMax = 0; occurrencesField.InfoMin = 1; occurrencesField.InfoMax = int.MaxValue; occurrencesField.DataField = "Occurrences"; occurrencesField.HeaderText = "Occurrences"; occurrencesField.HtmlEncode = false; gEventCalendarItems.Columns.Add( occurrencesField ); // Add Status column var statusField = new BoundField(); statusField.DataField = "Status"; statusField.SortExpression = "EventItem.IsActive"; statusField.HeaderText = "Status"; statusField.HtmlEncode = false; gEventCalendarItems.Columns.Add( statusField ); // Add Approval Status column var approvalStatusField = new BoundField(); approvalStatusField.DataField = "ApprovalStatus"; approvalStatusField.SortExpression = "EventItem.IsApproved"; approvalStatusField.HeaderText = "Approval Status"; approvalStatusField.HtmlEncode = false; gEventCalendarItems.Columns.Add( approvalStatusField ); // Add delete column if ( _canEdit ) { var deleteField = new DeleteField(); gEventCalendarItems.Columns.Add( deleteField ); deleteField.Click += DeleteEventCalendarItem_Click; } }
/// <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(); _hfExpanded = new HiddenFieldWithClass(); Controls.Add( _hfExpanded ); _hfExpanded.ID = this.ID + "_hfExpanded"; _hfExpanded.CssClass = "filter-expanded"; _hfExpanded.Value = "False"; _hfFormGuid = new HiddenField(); Controls.Add( _hfFormGuid ); _hfFormGuid.ID = this.ID + "_hfFormGuid"; _hfFormId = new HiddenField(); Controls.Add( _hfFormId ); _hfFormId.ID = this.ID + "_hfFormId"; _lblFormName = new Label(); Controls.Add( _lblFormName ); _lblFormName.ClientIDMode = ClientIDMode.Static; _lblFormName.ID = this.ID + "_lblFormName"; _lbDeleteForm = new LinkButton(); Controls.Add( _lbDeleteForm ); _lbDeleteForm.CausesValidation = false; _lbDeleteForm.ID = this.ID + "_lbDeleteForm"; _lbDeleteForm.CssClass = "btn btn-xs btn-danger js-activity-delete"; _lbDeleteForm.Click += lbDeleteForm_Click; _lbDeleteForm.Controls.Add( new LiteralControl { Text = "<i class='fa fa-times'></i>" } ); _tbFormName = new RockTextBox(); Controls.Add( _tbFormName ); _tbFormName.ID = this.ID + "_tbFormName"; _tbFormName.Label = "Form Name"; _tbFormName.Required = true; _tbFormName.Attributes["onblur"] = string.Format( "javascript: $('#{0}').text($(this).val());", _lblFormName.ID ); _gFields = new Grid(); Controls.Add( _gFields ); _gFields.ID = this.ID + "_gFields"; _gFields.AllowPaging = false; _gFields.DisplayType = GridDisplayType.Light; _gFields.RowItemText = "Field"; _gFields.AddCssClass( "field-grid" ); _gFields.DataKeyNames = new string[] { "Guid" }; _gFields.Actions.ShowAdd = true; _gFields.Actions.AddClick += gFields_Add; _gFields.GridRebind += gFields_Rebind; _gFields.GridReorder += gFields_Reorder; var reorderField = new ReorderField(); _gFields.Columns.Add( reorderField ); var nameField = new BoundField(); nameField.DataField = "Name"; nameField.HeaderText = "Field"; _gFields.Columns.Add( nameField ); var sourceField = new EnumField(); sourceField.DataField = "FieldSource"; sourceField.HeaderText = "Source"; _gFields.Columns.Add( sourceField ); var typeField = new FieldTypeField(); typeField.DataField = "FieldType"; typeField.HeaderText = "Type"; _gFields.Columns.Add( typeField ); var isInternalField = new BoolField(); isInternalField.DataField = "IsInternal"; isInternalField.HeaderText = "Internal"; _gFields.Columns.Add( isInternalField ); var isSharedValueField = new BoolField(); isSharedValueField.DataField = "IsSharedValue"; isSharedValueField.HeaderText = "Common"; _gFields.Columns.Add( isSharedValueField ); var showCurrentValueField = new BoolField(); showCurrentValueField.DataField = "ShowCurrentValue"; showCurrentValueField.HeaderText = "Use Current Value"; _gFields.Columns.Add( showCurrentValueField ); var isRequiredField = new BoolField(); isRequiredField.DataField = "IsRequired"; isRequiredField.HeaderText = "Required"; _gFields.Columns.Add( isRequiredField ); var isGridField = new BoolField(); isGridField.DataField = "IsGridField"; isGridField.HeaderText = "Show on Grid"; _gFields.Columns.Add( isGridField ); var editField = new EditField(); editField.Click += gFields_Edit; _gFields.Columns.Add( editField ); var delField = new DeleteField(); delField.Click += gFields_Delete; _gFields.Columns.Add( delField ); }
/// <summary> /// Raises the <see cref="E:System.Web.UI.Control.Init" /> event. /// </summary> /// <param name="e">An <see cref="T:System.EventArgs" /> object that contains the event data.</param> protected override void OnInit( EventArgs e ) { base.OnInit( e ); if ( _workflowType != null ) { gfWorkflows.ApplyFilterClick += gfWorkflows_ApplyFilterClick; gfWorkflows.DisplayFilterValue += gfWorkflows_DisplayFilterValue; // this event gets fired after block settings are updated. it's nice to repaint the screen if these settings would alter it this.BlockUpdated += Block_BlockUpdated; this.AddConfigurationUpdateTrigger( upnlSettings ); gWorkflows.DataKeyNames = new string[] { "id" }; gWorkflows.Actions.ShowAdd = true; gWorkflows.Actions.AddClick += gWorkflows_Add; gWorkflows.GridRebind += gWorkflows_GridRebind; // Block Security and special attributes (RockPage takes care of View) bool canAddEditDelete = IsUserAuthorized( Authorization.EDIT ); gWorkflows.Actions.ShowAdd = canAddEditDelete; gWorkflows.IsDeleteEnabled = canAddEditDelete; AddAttributeColumns(); var dateField = new DateTimeField(); gWorkflows.Columns.Add( dateField ); dateField.DataField = "CreatedDateTime"; dateField.SortExpression = "CreatedDateTime"; dateField.HeaderText = "Created"; dateField.FormatAsElapsedTime = true; var statusField = new BoundField(); gWorkflows.Columns.Add( statusField ); statusField.DataField = "Status"; statusField.SortExpression = "Status"; statusField.HeaderText = "Status"; statusField.HtmlEncode = false; var stateField = new BoundField(); gWorkflows.Columns.Add( stateField ); stateField.DataField = "State"; stateField.SortExpression = "CompletedDateTime"; stateField.HeaderText = "State"; stateField.HtmlEncode = false; var formField = new EditField(); gWorkflows.Columns.Add( formField ); formField.IconCssClass = "fa fa-edit"; formField.Click += formField_Click; var deleteField = new DeleteField(); gWorkflows.Columns.Add( deleteField ); deleteField.Click += gWorkflows_Delete; if ( !string.IsNullOrWhiteSpace( _workflowType.WorkTerm ) ) { gWorkflows.RowItemText = _workflowType.WorkTerm; lGridTitle.Text = _workflowType.WorkTerm.Pluralize(); } RockPage.PageTitle = _workflowType.Name; if ( !string.IsNullOrWhiteSpace( _workflowType.IconCssClass ) ) { lHeadingIcon.Text = string.Format("<i class='{0}'></i>", _workflowType.IconCssClass); } } else { pnlWorkflowList.Visible = false; } }
/// <summary> /// Adds the attribute columns. /// </summary> private void AddDynamicControls() { // Clear the filter controls phAttributeFilters.Controls.Clear(); // Remove attribute columns foreach ( var column in gGroupMembers.Columns.OfType<AttributeField>().ToList() ) { gGroupMembers.Columns.Remove( column ); } if ( AvailableAttributes != null ) { foreach ( var attribute in AvailableAttributes ) { var control = attribute.FieldType.Field.FilterControl( attribute.QualifierValues, "filter_" + attribute.Id.ToString(), false, Rock.Reporting.FilterMode.SimpleFilter ); if ( control != null ) { if ( control is IRockControl ) { var rockControl = (IRockControl)control; rockControl.Label = attribute.Name; rockControl.Help = attribute.Description; phAttributeFilters.Controls.Add( control ); } else { var wrapper = new RockControlWrapper(); wrapper.ID = control.ID + "_wrapper"; wrapper.Label = attribute.Name; wrapper.Controls.Add( control ); phAttributeFilters.Controls.Add( wrapper ); } string savedValue = rFilter.GetUserPreference( MakeKeyUniqueToGroup( attribute.Key ) ); if ( !string.IsNullOrWhiteSpace( savedValue ) ) { try { var values = JsonConvert.DeserializeObject<List<string>>( savedValue ); attribute.FieldType.Field.SetFilterValues( control, attribute.QualifierValues, values ); } catch { // intentionally ignore } } } string dataFieldExpression = attribute.Key; bool columnExists = gGroupMembers.Columns.OfType<AttributeField>().FirstOrDefault( a => a.DataField.Equals( dataFieldExpression ) ) != null; if ( !columnExists ) { AttributeField boundField = new AttributeField(); boundField.DataField = dataFieldExpression; boundField.HeaderText = attribute.Name; boundField.SortExpression = string.Empty; var attributeCache = Rock.Web.Cache.AttributeCache.Read( attribute.Id ); if ( attributeCache != null ) { boundField.ItemStyle.HorizontalAlign = attributeCache.FieldType.Field.AlignValue; } gGroupMembers.Columns.Add( boundField ); } } } // Add Place Elsewhere column if the group or group type has any Place Elsewhere member triggers if ( _group != null && _group.GroupType != null ) { if ( _group.GetGroupMemberWorkflowTriggers().Where( a => a.TriggerType == GroupMemberWorkflowTriggerType.MemberPlacedElsewhere ).Any() ) { AddPlaceElsewhereColumn(); } } // Add Link to Profile Page Column if ( !string.IsNullOrEmpty( GetAttributeValue( "PersonProfilePage" ) ) ) { AddPersonProfileLinkColumn(); } // Add delete column var deleteField = new DeleteField(); gGroupMembers.Columns.Add( deleteField ); deleteField.Click += DeleteGroupMember_Click; }
/// <summary> /// Raises the <see cref="E:System.Web.UI.Control.Init" /> event. /// </summary> /// <param name="e">An <see cref="T:System.EventArgs" /> object that contains the event data.</param> protected override void OnInit( EventArgs e ) { base.OnInit( e ); gReport.DataKeyNames = new string[] { "Id" }; gReport.GridRebind += gReport_GridRebind; int tagId = int.MinValue; if ( int.TryParse( PageParameter( "tagId" ), out tagId ) && tagId > 0 ) { Tag _tag = new TagService( new RockContext() ).Get( tagId ); if ( _tag != null ) { TagId = tagId; TagEntityType = EntityTypeCache.Read( _tag.EntityTypeId ); if ( TagEntityType != null ) { Type modelType = TagEntityType.GetEntityType(); gReport.RowItemText = modelType.Name + " Tag"; lTaggedTitle.Text = "Tagged " + modelType.Name.Pluralize(); if ( modelType != null ) { // If displaying people, set the person id fiels so that merge and communication icons are displayed if ( TagEntityType.Name == "Rock.Model.Person" ) { gReport.PersonIdField = "Id"; } foreach ( var column in gReport.GetPreviewColumns( modelType ) ) { gReport.Columns.Add( column ); } // Add a CreatedDateTime if one does not exist var gridBoundColumns = gReport.Columns.OfType<BoundField>(); if ( gridBoundColumns.Any( c => c.DataField.Equals( "CreatedDateTime" ) ) == false ) { BoundField addedDateTime = new DateField(); addedDateTime.DataField = "CreatedDateTime"; addedDateTime.SortExpression = "CreatedDateTime"; addedDateTime.HeaderText = "Date Tagged"; gReport.Columns.Add( addedDateTime ); } // Add delete column var deleteField = new DeleteField(); gReport.Columns.Add( deleteField ); deleteField.Click += gReport_Delete; if ( !Page.IsPostBack ) { BindGrid(); } } } } } }
/// <summary> /// Adds the attribute columns. /// </summary> private void AddDynamicControls() { // Clear the filter controls phAttributeFilters.Controls.Clear(); // Remove attribute columns foreach ( var column in gWorkflows.Columns.OfType<AttributeField>().ToList() ) { gWorkflows.Columns.Remove( column ); } if ( AvailableAttributes != null ) { foreach ( var attribute in AvailableAttributes ) { var control = attribute.FieldType.Field.FilterControl( attribute.QualifierValues, "filter_" + attribute.Id.ToString(), false, Rock.Reporting.FilterMode.SimpleFilter ); if ( control is IRockControl ) { var rockControl = (IRockControl)control; rockControl.Label = attribute.Name; rockControl.Help = attribute.Description; phAttributeFilters.Controls.Add( control ); } else { var wrapper = new RockControlWrapper(); wrapper.ID = control.ID + "_wrapper"; wrapper.Label = attribute.Name; wrapper.Controls.Add( control ); phAttributeFilters.Controls.Add( wrapper ); } string savedValue = gfWorkflows.GetUserPreference( MakeKeyUniqueToType( attribute.Key ) ); if ( !string.IsNullOrWhiteSpace( savedValue ) ) { try { var values = JsonConvert.DeserializeObject<List<string>>( savedValue ); attribute.FieldType.Field.SetFilterValues( control, attribute.QualifierValues, values ); } catch { } } string dataFieldExpression = attribute.Key; bool columnExists = gWorkflows.Columns.OfType<AttributeField>().FirstOrDefault( a => a.DataField.Equals( dataFieldExpression ) ) != null; if ( !columnExists ) { AttributeField boundField = new AttributeField(); boundField.DataField = dataFieldExpression; boundField.HeaderText = attribute.Name; boundField.SortExpression = string.Empty; boundField.Condensed = false; var attributeCache = Rock.Web.Cache.AttributeCache.Read( attribute.Id ); if ( attributeCache != null ) { boundField.ItemStyle.HorizontalAlign = attributeCache.FieldType.Field.AlignValue; } gWorkflows.Columns.Add( boundField ); } } } var dateField = new DateTimeField(); gWorkflows.Columns.Add( dateField ); dateField.DataField = "CreatedDateTime"; dateField.SortExpression = "CreatedDateTime"; dateField.HeaderText = "Created"; dateField.FormatAsElapsedTime = true; var statusField = new BoundField(); gWorkflows.Columns.Add( statusField ); statusField.DataField = "Status"; statusField.SortExpression = "Status"; statusField.HeaderText = "Status"; statusField.DataFormatString = "<span class='label label-info'>{0}</span>"; statusField.HtmlEncode = false; var stateField = new CallbackField(); gWorkflows.Columns.Add( stateField ); stateField.DataField = "IsCompleted"; stateField.SortExpression = "CompletedDateTime"; stateField.HeaderText = "State"; stateField.HtmlEncode = false; stateField.OnFormatDataValue += ( sender, e ) => { if ( (bool)e.DataValue ) { e.FormattedValue = "<span class='label label-default'>Completed</span>"; } else { e.FormattedValue = "<span class='label label-success'>Active</span>"; } }; if ( _canView ) { var manageField = new LinkButtonField(); gWorkflows.Columns.Add( manageField ); manageField.CssClass = "btn btn-default btn-sm fa fa-file-text-o"; manageField.Click += gWorkflows_Manage; } if ( _canEdit ) { var deleteField = new DeleteField(); gWorkflows.Columns.Add( deleteField ); deleteField.Click += gWorkflows_Delete; } }
/// <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(); // HiddenField to store which AttributeMatrix record we are editing _hfAttributeMatrixGuid = new HiddenField { ID = "_hfAttributeMatrixGuid" }; this.Controls.Add(_hfAttributeMatrixGuid); _nbWarning = new NotificationBox { ID = "_nbWarning", NotificationBoxType = NotificationBoxType.Warning, Dismissable = true }; this.Controls.Add(_nbWarning); // Grid with view of MatrixItems _gMatrixItems = new Grid { ID = "_gMatrixItems", DisplayType = GridDisplayType.Light }; this.Controls.Add(_gMatrixItems); _gMatrixItems.DataKeyNames = new string[] { "Id" }; _gMatrixItems.Actions.AddClick += gMatrixItems_AddClick; _gMatrixItems.Actions.ShowAdd = true; _gMatrixItems.IsDeleteEnabled = true; _gMatrixItems.GridReorder += gMatrixItems_GridReorder; _gMatrixItems.GridRebind += _gMatrixItems_GridRebind; _gMatrixItems.Columns.Add(new ReorderField()); AttributeMatrixItem tempAttributeMatrixItem = null; if (this.AttributeMatrixTemplateId.HasValue) { tempAttributeMatrixItem = new AttributeMatrixItem(); tempAttributeMatrixItem.AttributeMatrix = new AttributeMatrix { AttributeMatrixTemplateId = this.AttributeMatrixTemplateId.Value }; tempAttributeMatrixItem.LoadAttributes(); foreach (var attribute in tempAttributeMatrixItem.Attributes.Select(a => a.Value)) { _gMatrixItems.Columns.Add(new AttributeField { DataField = attribute.Key, HeaderText = attribute.Name }); } } DeleteField deleteField = new DeleteField(); deleteField.Click += gMatrixItems_DeleteClick; _gMatrixItems.Columns.Add(deleteField); _gMatrixItems.RowSelected += gMatrixItems_RowSelected; // Edit Item _pnlEditMatrixItem = new Panel { ID = "_pnlEditMatrixItem", Visible = false, CssClass = "well js-validation-group" }; _hfMatrixItemId = new HiddenField { ID = "_hfMatrixItemId" }; _pnlEditMatrixItem.Controls.Add(_hfMatrixItemId); _phMatrixItemAttributes = new DynamicPlaceholder { ID = "_phMatrixItemAttributes" }; _pnlEditMatrixItem.Controls.Add(_phMatrixItemAttributes); string validationGroup = GetValidationGroupForAttributeControls(); if (tempAttributeMatrixItem != null) { Rock.Attribute.Helper.AddEditControls(tempAttributeMatrixItem, _phMatrixItemAttributes, false, validationGroup); } _pnlActions = new Panel { ID = "_pnlActions", CssClass = "actions" }; _pnlEditMatrixItem.Controls.Add(_pnlActions); _btnSaveMatrixItem = new LinkButton { ID = "_btnSaveMatrixItem", CssClass = "btn btn-primary btn-sm", Text = "Save", ValidationGroup = validationGroup, CausesValidation = true }; _btnSaveMatrixItem.Click += btnSaveMatrixItem_Click; _pnlActions.Controls.Add(_btnSaveMatrixItem); _btnCancelMatrixItem = new LinkButton { ID = "_btnCancelMatrixItem", CssClass = "btn btn-link", Text = "Cancel", CausesValidation = false }; _btnCancelMatrixItem.Click += btnCancelMatrixItem_Click; _pnlActions.Controls.Add(_btnCancelMatrixItem); this.Controls.Add(_pnlEditMatrixItem); }