/// <summary> /// Shows the lava help. /// </summary> private void ShowLavaHelp() { var rockContext = new RockContext(); List <object> mergeObjectsList = GetMergeObjectList(rockContext, 1); var mergeFields = Rock.Lava.LavaHelper.GetCommonMergeFields(this.RockPage, this.CurrentPerson); MergeTemplate mergeTemplate = new MergeTemplateService(rockContext).Get(mtPicker.SelectedValue.AsInteger()); MergeTemplateType mergeTemplateType = null; if (mergeTemplate != null) { mergeTemplateType = this.GetMergeTemplateType(rockContext, mergeTemplate); } if (mergeTemplateType != null) { // have the mergeTemplateType generate the help text lShowMergeFields.Text = mergeTemplateType.GetLavaDebugInfo(mergeObjectsList, mergeFields); } else { lShowMergeFields.Text = MergeTemplateType.GetDefaultLavaDebugInfo(mergeObjectsList, mergeFields); } }
/// <summary> /// Sets the values on select. /// </summary> protected override void SetValuesOnSelect() { var itemIds = ItemIds.Select(int.Parse); var items = new MergeTemplateService(new RockContext()).Queryable().Where(i => itemIds.Contains(i.Id)); this.SetValues(items); }
/// <summary> /// Handles the Click event of the btnCancel control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param> protected void btnCancel_Click(object sender, EventArgs e) { if (hfMergeTemplateId.Value.Equals("0")) { int?categoryId = PageParameter("ParentCategoryId").AsIntegerOrNull(); if (categoryId.HasValue) { // Cancelling on Add, and we know the categoryId, so we are probably in treeview mode, so navigate to the current page var qryParams = new Dictionary <string, string>(); if (categoryId != 0) { qryParams["CategoryId"] = categoryId.ToString(); } qryParams["ExpandedIds"] = PageParameter("ExpandedIds"); NavigateToPage(RockPage.Guid, qryParams); } else { // Cancelling on Add. Return to Grid NavigateToParentPage(); } } else { // Cancelling on Edit. Return to Details var service = new MergeTemplateService(new RockContext()); var item = service.Get(hfMergeTemplateId.Value.AsInteger()); ShowReadonlyDetails(item); } }
/// <summary> /// Gets the edit value as the IEntity.Id /// </summary> /// <param name="control">The control.</param> /// <param name="configurationValues">The configuration values.</param> /// <returns></returns> public int?GetEditValueAsEntityId(Control control, Dictionary <string, ConfigurationValue> configurationValues) { var guid = GetEditValue(control, configurationValues).AsGuid(); var item = new MergeTemplateService(new RockContext()).Get(guid); return(item != null ? item.Id : ( int? )null); }
/// <summary> /// Sets the edit value from IEntity.Id value /// </summary> /// <param name="control">The control.</param> /// <param name="configurationValues">The configuration values.</param> /// <param name="id">The identifier.</param> public void SetEditValueFromEntityId(Control control, Dictionary <string, ConfigurationValue> configurationValues, int?id) { var item = new MergeTemplateService(new RockContext()).Get(id ?? 0); var guidValue = item != null?item.Guid.ToString() : string.Empty; SetEditValue(control, configurationValues, guidValue); }
/// <summary> /// Handles the Click event of the btnEdit control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param> protected void btnEdit_Click(object sender, EventArgs e) { var service = new MergeTemplateService(new RockContext()); var item = service.Get(hfMergeTemplateId.Value.AsInteger()); ShowEditDetails(item); }
/// <summary> /// Gets the type of the merge template. /// </summary> /// <param name="rockContext">The rock context.</param> /// <param name="mergeTemplate">The merge template.</param> /// <returns></returns> private MergeTemplateType GetMergeTemplateType(RockContext rockContext, MergeTemplate mergeTemplate) { mergeTemplate = new MergeTemplateService(rockContext).Get(mtPicker.SelectedValue.AsInteger()); if (mergeTemplate == null) { return(null); } return(mergeTemplate.GetMergeTemplateType()); }
/// <summary> /// Sets the value. /// Expects value as a MergeTemplate.Guid as string /// </summary> /// <param name="control">The control.</param> /// <param name="configurationValues">The configuration values.</param> /// <param name="value">The value.</param> public override void SetEditValue( System.Web.UI.Control control, Dictionary<string, ConfigurationValue> configurationValues, string value ) { MergeTemplatePicker mergeTemplatePicker = control as MergeTemplatePicker; if ( mergeTemplatePicker != null ) { Guid guid = value.AsGuid(); // get the item (or null) and set it var mergeTemplate = new MergeTemplateService( new RockContext() ).Get( guid ); mergeTemplatePicker.SetValue( mergeTemplate ); } }
/// <summary> /// Returns the field's current value(s) /// </summary> /// <param name="parentControl">The parent control.</param> /// <param name="value">Information about the value</param> /// <param name="configurationValues">The configuration values.</param> /// <param name="condensed">Flag indicating if the value should be condensed (i.e. for use in a grid column)</param> /// <returns></returns> public override string FormatValue( System.Web.UI.Control parentControl, string value, Dictionary<string, ConfigurationValue> configurationValues, bool condensed ) { string formattedValue = value; if ( !string.IsNullOrWhiteSpace( value ) ) { var mergeTemplate = new MergeTemplateService( new RockContext() ).Get( value.AsGuid() ); if ( mergeTemplate != null ) { formattedValue = mergeTemplate.Name; } } return base.FormatValue( parentControl, formattedValue, configurationValues, condensed ); }
/// <summary> /// Gets the type of the merge template. /// </summary> /// <param name="rockContext">The rock context.</param> /// <param name="mergeTemplate">The merge template.</param> /// <returns></returns> private MergeTemplateType GetMergeTemplateType(RockContext rockContext, MergeTemplate mergeTemplate) { mergeTemplate = new MergeTemplateService(rockContext).Get(mtPicker.SelectedValue.AsInteger()); if (mergeTemplate == null) { return(null); } var mergeTemplateTypeEntityType = EntityTypeCache.Read(mergeTemplate.MergeTemplateTypeEntityTypeId); if (mergeTemplateTypeEntityType == null) { return(null); } return(MergeTemplateTypeContainer.GetComponent(mergeTemplateTypeEntityType.Name)); }
/// <summary> /// Handles the Click event of the btnDelete control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param> protected void btnDelete_Click(object sender, EventArgs e) { int?categoryId = null; var rockContext = new RockContext(); var service = new MergeTemplateService(rockContext); var item = service.Get(hfMergeTemplateId.Value.AsInteger()); if (item != null) { string errorMessage; if (!service.CanDelete(item, out errorMessage)) { ShowReadonlyDetails(item); mdDeleteWarning.Show(errorMessage, ModalAlertType.Information); } else { categoryId = item.CategoryId; service.Delete(item); rockContext.SaveChanges(); // set IsTemporary to true so that the file will eventually get cleaned up BinaryFileService binaryFileService = new BinaryFileService(rockContext); var binaryFile = binaryFileService.Get(item.TemplateBinaryFileId); if (binaryFile != null && binaryFile.IsTemporary) { binaryFile.IsTemporary = false; } // reload page, selecting the deleted item's parent var qryParams = new Dictionary <string, string>(); if (categoryId != null) { qryParams["CategoryId"] = categoryId.ToString(); } qryParams["ExpandedIds"] = PageParameter("ExpandedIds"); NavigateToPage(RockPage.Guid, qryParams); } } }
/// <summary> /// Reads new values entered by the user for the field /// returns MergeTemplate.Guid as string /// </summary> /// <param name="control">Parent control that controls were added to in the CreateEditControl() method</param> /// <param name="configurationValues">The configuration values.</param> /// <returns></returns> public override string GetEditValue( System.Web.UI.Control control, Dictionary<string, ConfigurationValue> configurationValues ) { MergeTemplatePicker mergeTemplatePicker = control as MergeTemplatePicker; if ( mergeTemplatePicker != null ) { int? mergeTemplateId = mergeTemplatePicker.SelectedValue.AsIntegerOrNull(); if ( mergeTemplateId.HasValue ) { var mergeTemplate = new MergeTemplateService( new RockContext() ).Get( mergeTemplateId.Value ); if ( mergeTemplate != null ) { return mergeTemplate.Guid.ToString(); } } } return string.Empty; }
/// <summary> /// Handles the Delete event of the gMergeTemplates control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="RowEventArgs"/> instance containing the event data.</param> protected void gMergeTemplates_Delete( object sender, RowEventArgs e ) { var rockContext = new RockContext(); MergeTemplateService service = new MergeTemplateService( rockContext ); MergeTemplate item = service.Get( e.RowKeyId ); if ( item != null ) { string errorMessage; if ( !service.CanDelete( item, out errorMessage ) ) { mdGridWarning.Show( errorMessage, ModalAlertType.Information ); return; } service.Delete( item ); rockContext.SaveChanges(); } BindGrid(); }
/// <summary> /// Reads new values entered by the user for the field /// returns MergeTemplate.Guid as string /// </summary> /// <param name="control">Parent control that controls were added to in the CreateEditControl() method</param> /// <param name="configurationValues">The configuration values.</param> /// <returns></returns> public override string GetEditValue(System.Web.UI.Control control, Dictionary <string, ConfigurationValue> configurationValues) { var picker = control as MergeTemplatePicker; if (picker != null) { int? itemId = picker.SelectedValue.AsIntegerOrNull(); Guid?itemGuid = null; if (itemId.HasValue) { using (var rockContext = new RockContext()) { itemGuid = new MergeTemplateService(rockContext).Queryable().Where(a => a.Id == itemId.Value).Select(a => ( Guid? )a.Guid).FirstOrDefault(); } } return(itemGuid?.ToString() ?? string.Empty); } return(null); }
/// <summary> /// Handles the Delete event of the gMergeTemplates control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="RowEventArgs"/> instance containing the event data.</param> protected void gMergeTemplates_Delete(object sender, RowEventArgs e) { var rockContext = new RockContext(); MergeTemplateService service = new MergeTemplateService(rockContext); MergeTemplate item = service.Get(e.RowKeyId); if (item != null) { string errorMessage; if (!service.CanDelete(item, out errorMessage)) { mdGridWarning.Show(errorMessage, ModalAlertType.Information); return; } service.Delete(item); rockContext.SaveChanges(); } BindGrid(); }
/// <summary> /// Sets the value. /// Expects value as a MergeTemplate.Guid as string /// </summary> /// <param name="control">The control.</param> /// <param name="configurationValues">The configuration values.</param> /// <param name="value">The value.</param> public override void SetEditValue(System.Web.UI.Control control, Dictionary <string, ConfigurationValue> configurationValues, string value) { var picker = control as MergeTemplatePicker; if (picker != null) { MergeTemplate item = null; Guid? itemGuid = value.AsGuidOrNull(); if (itemGuid.HasValue) { using (var rockContext = new RockContext()) { item = new MergeTemplateService(rockContext).Get(itemGuid.Value); picker.SetValue(item); } } else { picker.SetValue(null); } } }
/// <summary> /// Handles the Click event of the btnMerge control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param> protected void btnMerge_Click(object sender, EventArgs e) { // NOTE: This is a full postback (not a partial like most other blocks) var rockContext = new RockContext(); int?databaseTimeoutSeconds = GetAttributeValue("DatabaseTimeout").AsIntegerOrNull(); if (databaseTimeoutSeconds != null && databaseTimeoutSeconds.Value > 0) { rockContext.Database.CommandTimeout = databaseTimeoutSeconds.Value; } List <object> mergeObjectsList = GetMergeObjectList(rockContext); MergeTemplate mergeTemplate = new MergeTemplateService(rockContext).Get(mtPicker.SelectedValue.AsInteger()); if (mergeTemplate == null) { nbWarningMessage.Text = "Unable to get merge template"; nbWarningMessage.NotificationBoxType = NotificationBoxType.Danger; nbWarningMessage.Visible = true; return; } MergeTemplateType mergeTemplateType = this.GetMergeTemplateType(rockContext, mergeTemplate); if (mergeTemplateType == null) { nbWarningMessage.Text = "Unable to get merge template type"; nbWarningMessage.NotificationBoxType = NotificationBoxType.Danger; nbWarningMessage.Visible = true; return; } var mergeFields = Rock.Lava.LavaHelper.GetCommonMergeFields(this.RockPage, this.CurrentPerson); BinaryFile outputBinaryFileDoc = null; try { outputBinaryFileDoc = mergeTemplateType.CreateDocument(mergeTemplate, mergeObjectsList, mergeFields); if (mergeTemplateType.Exceptions != null && mergeTemplateType.Exceptions.Any()) { if (mergeTemplateType.Exceptions.Count == 1) { this.LogException(mergeTemplateType.Exceptions[0]); } else if (mergeTemplateType.Exceptions.Count > 50) { this.LogException(new AggregateException(string.Format("Exceptions merging template {0}. See InnerExceptions for top 50.", mergeTemplate.Name), mergeTemplateType.Exceptions.Take(50).ToList())); } else { this.LogException(new AggregateException(string.Format("Exceptions merging template {0}. See InnerExceptions", mergeTemplate.Name), mergeTemplateType.Exceptions.ToList())); } } var uri = new UriBuilder(outputBinaryFileDoc.Url); var qry = System.Web.HttpUtility.ParseQueryString(uri.Query); qry["attachment"] = true.ToTrueFalse(); uri.Query = qry.ToString(); Response.Redirect(uri.ToString(), false); Context.ApplicationInstance.CompleteRequest(); } catch (Exception ex) { this.LogException(ex); if (ex is System.FormatException) { nbMergeError.Text = "Error loading the merge template. Please verify that the merge template file is valid."; } else { nbMergeError.Text = "An error occurred while merging"; } nbMergeError.Details = ex.Message; nbMergeError.Visible = true; } }
/// <summary> /// Shows the detail. /// </summary> /// <param name="mergeTemplateId">The merge template identifier.</param> /// <param name="parentCategoryId">The parent category identifier.</param> public void ShowDetail( int mergeTemplateId, int? parentCategoryId ) { pnlDetails.Visible = false; var rockContext = new RockContext(); var mergeTemplateService = new MergeTemplateService( rockContext ); MergeTemplate mergeTemplate = null; if ( !mergeTemplateId.Equals( 0 ) ) { mergeTemplate = mergeTemplateService.Get( mergeTemplateId ); } var mergeTemplateOwnership = this.GetAttributeValue( "MergeTemplatesOwnership" ).ConvertToEnum<MergeTemplateOwnership>( MergeTemplateOwnership.Global ); if ( mergeTemplate == null ) { mergeTemplate = new MergeTemplate(); mergeTemplate.CategoryId = parentCategoryId ?? 0; if ( mergeTemplateOwnership == MergeTemplateOwnership.Personal ) { mergeTemplate.PersonAliasId = this.CurrentPersonAliasId; mergeTemplate.PersonAlias = this.CurrentPersonAlias; } } pnlDetails.Visible = true; hfMergeTemplateId.Value = mergeTemplateId.ToString(); // render UI based on Authorized bool readOnly = false; nbEditModeMessage.Text = string.Empty; if ( mergeTemplate.PersonAliasId.HasValue && mergeTemplate.PersonAlias.PersonId == this.CurrentPersonId ) { // Allow Person to edit their own Merge Templates } else if ( !IsUserAuthorized( Authorization.EDIT ) ) { readOnly = true; nbEditModeMessage.Text = EditModeMessage.ReadOnlyEditActionNotAllowed( MergeTemplate.FriendlyTypeName ); } if ( readOnly ) { btnEdit.Visible = false; btnDelete.Visible = false; ShowReadonlyDetails( mergeTemplate ); } else { btnEdit.Visible = true; string errorMessage = string.Empty; btnDelete.Visible = mergeTemplateService.CanDelete( mergeTemplate, out errorMessage ); if ( mergeTemplate.Id > 0 ) { ShowReadonlyDetails( mergeTemplate ); } else { ShowEditDetails( mergeTemplate ); } } }
/// <summary> /// Handles the Click event of the btnSave control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param> protected void btnSave_Click( object sender, EventArgs e ) { MergeTemplate mergeTemplate; var rockContext = new RockContext(); MergeTemplateService mergeTemplateService = new MergeTemplateService( rockContext ); int mergeTemplateId = hfMergeTemplateId.Value.AsInteger(); int? origBinaryFileId = null; if ( mergeTemplateId == 0 ) { mergeTemplate = new MergeTemplate(); mergeTemplateService.Add( mergeTemplate ); } else { mergeTemplate = mergeTemplateService.Get( mergeTemplateId ); origBinaryFileId = mergeTemplate.TemplateBinaryFileId; } mergeTemplate.Name = tbName.Text; mergeTemplate.Description = tbDescription.Text; mergeTemplate.MergeTemplateTypeEntityTypeId = ddlMergeTemplateType.SelectedValue.AsInteger(); mergeTemplate.TemplateBinaryFileId = fuTemplateBinaryFile.BinaryFileId ?? 0; mergeTemplate.PersonAliasId = ppPerson.PersonAliasId; mergeTemplate.CategoryId = cpCategory.SelectedValue.AsInteger(); int personalMergeTemplateCategoryId = CategoryCache.Read( Rock.SystemGuid.Category.PERSONAL_MERGE_TEMPLATE.AsGuid() ).Id; if ( mergeTemplate.PersonAliasId.HasValue ) { if ( mergeTemplate.CategoryId == 0 ) { // if the category picker isn't shown and/or the category isn't selected, and it's a personal filter... mergeTemplate.CategoryId = personalMergeTemplateCategoryId; } // ensure Personal templates are only in the Personal merge template category if ( mergeTemplate.CategoryId != personalMergeTemplateCategoryId ) { // prohibit personal templates from being in something other than the Personal category cpCategory.Visible = true; cpCategory.ShowErrorMessage( "Personal Merge Templates must be in Personal category" ); } } else { if ( mergeTemplate.CategoryId == personalMergeTemplateCategoryId ) { // prohibit global templates from being in Personal category cpCategory.ShowErrorMessage( "Person is required when using the Personal category" ); } } if ( !mergeTemplate.IsValid || !Page.IsValid ) { // Controls will render the error messages return; } BinaryFileService binaryFileService = new BinaryFileService( rockContext ); if ( origBinaryFileId.HasValue && origBinaryFileId.Value != mergeTemplate.TemplateBinaryFileId ) { // if a new the binaryFile was uploaded, mark the old one as Temporary so that it gets cleaned up var oldBinaryFile = binaryFileService.Get( origBinaryFileId.Value ); if ( oldBinaryFile != null && !oldBinaryFile.IsTemporary ) { oldBinaryFile.IsTemporary = true; } } // ensure the IsTemporary is set to false on binaryFile associated with this MergeTemplate var binaryFile = binaryFileService.Get( mergeTemplate.TemplateBinaryFileId ); if ( binaryFile != null && binaryFile.IsTemporary ) { binaryFile.IsTemporary = false; } rockContext.SaveChanges(); var qryParams = new Dictionary<string, string>(); qryParams["ExpandedIds"] = PageParameter( "ExpandedIds" ); qryParams["MergeTemplateId"] = mergeTemplate.Id.ToString(); NavigateToPage( RockPage.Guid, qryParams ); }
/// <summary> /// Shows the lava help. /// </summary> private void ShowLavaHelp() { var rockContext = new RockContext(); List<object> mergeObjectsList = GetMergeObjectList( rockContext, 1 ); var globalMergeFields = GlobalAttributesCache.GetMergeFields( this.CurrentPerson ); globalMergeFields.Add( "CurrentPerson", this.CurrentPerson ); MergeTemplate mergeTemplate = new MergeTemplateService( rockContext ).Get( mtPicker.SelectedValue.AsInteger() ); MergeTemplateType mergeTemplateType = null; if ( mergeTemplate != null ) { mergeTemplateType = this.GetMergeTemplateType( rockContext, mergeTemplate ); } if ( mergeTemplateType != null ) { // have the mergeTemplateType generate the help text lShowMergeFields.Text = mergeTemplateType.GetLavaDebugInfo( mergeObjectsList, globalMergeFields ); } else { lShowMergeFields.Text = MergeTemplateType.GetDefaultLavaDebugInfo( mergeObjectsList, globalMergeFields ); } }
/// <summary> /// Handles the Click event of the lbPrintAttendanceRoster control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param> protected void lbPrintAttendanceRoster_Click(object sender, EventArgs e) { // NOTE: lbPrintAttendanceRoster is a full postback since we are returning a download of the roster nbPrintRosterWarning.Visible = false; var rockContext = new RockContext(); Dictionary <int, object> mergeObjectsDictionary = new Dictionary <int, object>(); if (_attendees != null) { var personIdList = _attendees.Select(a => a.PersonId).ToList(); var personList = new PersonService(rockContext).GetByIds(personIdList); foreach (var person in personList.OrderBy(a => a.LastName).ThenBy(a => a.NickName)) { mergeObjectsDictionary.AddOrIgnore(person.Id, person); } } var mergeFields = Rock.Lava.LavaHelper.GetCommonMergeFields(this.RockPage, this.CurrentPerson); mergeFields.Add("Group", this._group); var mergeTemplate = new MergeTemplateService(rockContext).Get(this.GetAttributeValue("AttendanceRosterTemplate").AsGuid()); if (mergeTemplate == null) { this.LogException(new Exception("No Merge Template specified in block settings")); nbPrintRosterWarning.Visible = true; nbPrintRosterWarning.Text = "Unable to print Attendance Roster"; return; } MergeTemplateType mergeTemplateType = mergeTemplate.GetMergeTemplateType(); if (mergeTemplateType == null) { this.LogException(new Exception("Unable to determine Merge Template Type")); nbPrintRosterWarning.Visible = true; nbPrintRosterWarning.Text = "Error printing Attendance Roster"; return; } BinaryFile outputBinaryFileDoc = null; var mergeObjectList = mergeObjectsDictionary.Select(a => a.Value).ToList(); outputBinaryFileDoc = mergeTemplateType.CreateDocument(mergeTemplate, mergeObjectList, mergeFields); // set the name of the output doc outputBinaryFileDoc = new BinaryFileService(rockContext).Get(outputBinaryFileDoc.Id); outputBinaryFileDoc.FileName = _group.Name + " Attendance Roster" + Path.GetExtension(outputBinaryFileDoc.FileName ?? "") ?? ".docx"; rockContext.SaveChanges(); if (mergeTemplateType.Exceptions != null && mergeTemplateType.Exceptions.Any()) { if (mergeTemplateType.Exceptions.Count == 1) { this.LogException(mergeTemplateType.Exceptions[0]); } else if (mergeTemplateType.Exceptions.Count > 50) { this.LogException(new AggregateException(string.Format("Exceptions merging template {0}. See InnerExceptions for top 50.", mergeTemplate.Name), mergeTemplateType.Exceptions.Take(50).ToList())); } else { this.LogException(new AggregateException(string.Format("Exceptions merging template {0}. See InnerExceptions", mergeTemplate.Name), mergeTemplateType.Exceptions.ToList())); } } var uri = new UriBuilder(outputBinaryFileDoc.Url); var qry = System.Web.HttpUtility.ParseQueryString(uri.Query); qry["attachment"] = true.ToTrueFalse(); uri.Query = qry.ToString(); Response.Redirect(uri.ToString(), false); Context.ApplicationInstance.CompleteRequest(); }
/// <summary> /// Shows the detail. /// </summary> /// <param name="mergeTemplateId">The merge template identifier.</param> /// <param name="parentCategoryId">The parent category identifier.</param> public void ShowDetail(int mergeTemplateId, int?parentCategoryId) { pnlDetails.Visible = false; var rockContext = new RockContext(); var mergeTemplateService = new MergeTemplateService(rockContext); MergeTemplate mergeTemplate = null; if (!mergeTemplateId.Equals(0)) { mergeTemplate = mergeTemplateService.Get(mergeTemplateId); pdAuditDetails.SetEntity(mergeTemplate, ResolveRockUrl("~")); } var mergeTemplateOwnership = this.GetAttributeValue("MergeTemplatesOwnership").ConvertToEnum <MergeTemplateOwnership>(MergeTemplateOwnership.Global); if (mergeTemplate == null) { mergeTemplate = new MergeTemplate(); mergeTemplate.CategoryId = parentCategoryId ?? 0; if (mergeTemplateOwnership == MergeTemplateOwnership.Personal) { mergeTemplate.PersonAliasId = this.CurrentPersonAliasId; mergeTemplate.PersonAlias = this.CurrentPersonAlias; // Don't show security on a personal merge template. btnSecurity.Visible = false; } // hide the panel drawer that show created and last modified dates pdAuditDetails.Visible = false; } pnlDetails.Visible = true; hfMergeTemplateId.Value = mergeTemplateId.ToString(); // render UI based on Authorized bool readOnly = false; nbEditModeMessage.Text = string.Empty; if (mergeTemplate.PersonAliasId.HasValue && mergeTemplate.PersonAlias.PersonId == this.CurrentPersonId) { // Allow Person to edit their own Merge Templates } else if (!IsUserAuthorized(Authorization.EDIT)) { readOnly = true; nbEditModeMessage.Text = EditModeMessage.ReadOnlyEditActionNotAllowed(MergeTemplate.FriendlyTypeName); } btnSecurity.Visible = mergeTemplate.IsAuthorized(Authorization.ADMINISTRATE, CurrentPerson); btnSecurity.Title = mergeTemplate.Name; btnSecurity.EntityId = mergeTemplate.Id; if (readOnly) { btnEdit.Visible = false; btnDelete.Visible = false; ShowReadonlyDetails(mergeTemplate); } else { btnEdit.Visible = true; string errorMessage = string.Empty; btnDelete.Visible = mergeTemplateService.CanDelete(mergeTemplate, out errorMessage); if (mergeTemplate.Id > 0) { ShowReadonlyDetails(mergeTemplate); } else { ShowEditDetails(mergeTemplate); } } }
/// <summary> /// Sets the value on select. /// </summary> protected override void SetValueOnSelect() { var item = new MergeTemplateService(new RockContext()).Get(ItemId.AsInteger()); this.SetValue(item); }
/// <summary> /// Handles the Click event of the btnSave control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param> protected void btnSave_Click(object sender, EventArgs e) { MergeTemplate mergeTemplate; var rockContext = new RockContext(); MergeTemplateService mergeTemplateService = new MergeTemplateService(rockContext); int mergeTemplateId = hfMergeTemplateId.Value.AsInteger(); int?origBinaryFileId = null; if (mergeTemplateId == 0) { mergeTemplate = new MergeTemplate(); mergeTemplateService.Add(mergeTemplate); } else { mergeTemplate = mergeTemplateService.Get(mergeTemplateId); origBinaryFileId = mergeTemplate.TemplateBinaryFileId; } mergeTemplate.Name = tbName.Text; mergeTemplate.Description = tbDescription.Text; mergeTemplate.MergeTemplateTypeEntityTypeId = ddlMergeTemplateType.SelectedValue.AsInteger(); mergeTemplate.TemplateBinaryFileId = fuTemplateBinaryFile.BinaryFileId ?? 0; mergeTemplate.PersonAliasId = ppPerson.PersonAliasId; mergeTemplate.CategoryId = cpCategory.SelectedValue.AsInteger(); int personalMergeTemplateCategoryId = CategoryCache.Get(Rock.SystemGuid.Category.PERSONAL_MERGE_TEMPLATE.AsGuid()).Id; if (mergeTemplate.PersonAliasId.HasValue) { if (mergeTemplate.CategoryId == 0) { // if the category picker isn't shown and/or the category isn't selected, and it's a personal filter... mergeTemplate.CategoryId = personalMergeTemplateCategoryId; } // ensure Personal templates are only in the Personal merge template category if (mergeTemplate.CategoryId != personalMergeTemplateCategoryId) { // prohibit personal templates from being in something other than the Personal category cpCategory.Visible = true; cpCategory.ShowErrorMessage("Personal Merge Templates must be in Personal category"); } } else { if (mergeTemplate.CategoryId == personalMergeTemplateCategoryId) { // prohibit global templates from being in Personal category cpCategory.ShowErrorMessage("Person is required when using the Personal category"); } } if (!mergeTemplate.IsValid || !Page.IsValid) { // Controls will render the error messages return; } BinaryFileService binaryFileService = new BinaryFileService(rockContext); if (origBinaryFileId.HasValue && origBinaryFileId.Value != mergeTemplate.TemplateBinaryFileId) { // if a new the binaryFile was uploaded, mark the old one as Temporary so that it gets cleaned up var oldBinaryFile = binaryFileService.Get(origBinaryFileId.Value); if (oldBinaryFile != null && !oldBinaryFile.IsTemporary) { oldBinaryFile.IsTemporary = true; } } // ensure the IsTemporary is set to false on binaryFile associated with this MergeTemplate var binaryFile = binaryFileService.Get(mergeTemplate.TemplateBinaryFileId); if (binaryFile != null && binaryFile.IsTemporary) { binaryFile.IsTemporary = false; } rockContext.SaveChanges(); var qryParams = new Dictionary <string, string>(); qryParams["ExpandedIds"] = PageParameter("ExpandedIds"); qryParams["MergeTemplateId"] = mergeTemplate.Id.ToString(); NavigateToPage(RockPage.Guid, qryParams); }
/// <summary> /// Gets the type of the merge template. /// </summary> /// <param name="rockContext">The rock context.</param> /// <param name="mergeTemplate">The merge template.</param> /// <returns></returns> private MergeTemplateType GetMergeTemplateType( RockContext rockContext, MergeTemplate mergeTemplate ) { mergeTemplate = new MergeTemplateService( rockContext ).Get( mtPicker.SelectedValue.AsInteger() ); if ( mergeTemplate == null ) { return null; } return mergeTemplate.GetMergeTemplateType(); }
/// <summary> /// Sets the values on select. /// </summary> protected override void SetValuesOnSelect() { var itemIds = ItemIds.Select( int.Parse ); var items = new MergeTemplateService( new RockContext() ).Queryable().Where( i => itemIds.Contains( i.Id ) ); this.SetValues( items ); }
/// <summary> /// Sets the value on select. /// </summary> protected override void SetValueOnSelect() { var item = new MergeTemplateService( new RockContext() ).Get( ItemId.AsInteger() ); this.SetValue( item ); }
/// <summary> /// Gets the type of the merge template. /// </summary> /// <param name="rockContext">The rock context.</param> /// <param name="mergeTemplate">The merge template.</param> /// <returns></returns> private MergeTemplateType GetMergeTemplateType( RockContext rockContext, MergeTemplate mergeTemplate ) { mergeTemplate = new MergeTemplateService( rockContext ).Get( mtPicker.SelectedValue.AsInteger() ); if ( mergeTemplate == null ) { return null; } var mergeTemplateTypeEntityType = EntityTypeCache.Read( mergeTemplate.MergeTemplateTypeEntityTypeId ); if ( mergeTemplateTypeEntityType == null ) { return null; } return MergeTemplateTypeContainer.GetComponent( mergeTemplateTypeEntityType.Name ); }
/// <summary> /// Handles the Click event of the lbPrintAttendanceRoster control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param> protected void lbPrintAttendanceRoster_Click( object sender, EventArgs e ) { // NOTE: lbPrintAttendanceRoster is a full postback since we are returning a download of the roster nbPrintRosterWarning.Visible = false; var rockContext = new RockContext(); Dictionary<int, object> mergeObjectsDictionary = new Dictionary<int, object>(); if ( _attendees != null ) { var personIdList = _attendees.Select( a => a.PersonId ).ToList(); var personList = new PersonService( rockContext ).GetByIds( personIdList ); foreach ( var person in personList.OrderBy( a => a.LastName ).ThenBy( a => a.NickName ) ) { mergeObjectsDictionary.AddOrIgnore( person.Id, person ); } } var mergeFields = Rock.Lava.LavaHelper.GetCommonMergeFields( this.RockPage, this.CurrentPerson ); mergeFields.Add( "Group", this._group ); var mergeTemplate = new MergeTemplateService( rockContext ).Get( this.GetAttributeValue( "AttendanceRosterTemplate" ).AsGuid() ); if ( mergeTemplate == null ) { this.LogException( new Exception( "No Merge Template specified in block settings" ) ); nbPrintRosterWarning.Visible = true; nbPrintRosterWarning.Text = "Unable to print Attendance Roster"; return; } MergeTemplateType mergeTemplateType = mergeTemplate.GetMergeTemplateType(); if ( mergeTemplateType == null ) { this.LogException( new Exception( "Unable to determine Merge Template Type" ) ); nbPrintRosterWarning.Visible = true; nbPrintRosterWarning.Text = "Error printing Attendance Roster"; return; } BinaryFile outputBinaryFileDoc = null; var mergeObjectList = mergeObjectsDictionary.Select( a => a.Value ).ToList(); outputBinaryFileDoc = mergeTemplateType.CreateDocument( mergeTemplate, mergeObjectList, mergeFields ); // set the name of the output doc outputBinaryFileDoc = new BinaryFileService( rockContext ).Get( outputBinaryFileDoc.Id ); outputBinaryFileDoc.FileName = _group.Name + " Attendance Roster" + Path.GetExtension( outputBinaryFileDoc.FileName ?? "" ) ?? ".docx"; rockContext.SaveChanges(); if ( mergeTemplateType.Exceptions != null && mergeTemplateType.Exceptions.Any() ) { if ( mergeTemplateType.Exceptions.Count == 1 ) { this.LogException( mergeTemplateType.Exceptions[0] ); } else if ( mergeTemplateType.Exceptions.Count > 50 ) { this.LogException( new AggregateException( string.Format( "Exceptions merging template {0}. See InnerExceptions for top 50.", mergeTemplate.Name ), mergeTemplateType.Exceptions.Take( 50 ).ToList() ) ); } else { this.LogException( new AggregateException( string.Format( "Exceptions merging template {0}. See InnerExceptions", mergeTemplate.Name ), mergeTemplateType.Exceptions.ToList() ) ); } } var uri = new UriBuilder( outputBinaryFileDoc.Url ); var qry = System.Web.HttpUtility.ParseQueryString( uri.Query ); qry["attachment"] = true.ToTrueFalse(); uri.Query = qry.ToString(); Response.Redirect( uri.ToString(), false ); Context.ApplicationInstance.CompleteRequest(); }
/// <summary> /// Binds the grid. /// </summary> private void BindGrid() { var service = new MergeTemplateService( new RockContext() ); SortProperty sortProperty = gMergeTemplates.SortProperty; var qry = service.Queryable(); var mergeTemplateOwnership = this.GetAttributeValue( "MergeTemplatesOwnership" ).ConvertToEnum<MergeTemplateOwnership>( MergeTemplateOwnership.Personal ); var personColumn = gMergeTemplates.Columns.OfType<PersonField>().FirstOrDefault(); personColumn.Visible = false; // Only Authorization.EDIT should be able to use the grid filter if ( this.IsUserAuthorized( Authorization.EDIT ) && gfSettings.Visible ) { // show all merge templates regardless of block settings personColumn.Visible = true; int? personIdFilter = gfSettings.GetUserPreference( "Person" ).AsIntegerOrNull(); bool showGlobalMergeTemplates = gfSettings.GetUserPreference( "Show Global Merge Templates" ).AsBooleanOrNull() ?? true; if ( personIdFilter.HasValue ) { if ( showGlobalMergeTemplates ) { qry = qry.Where( a => !a.PersonAliasId.HasValue || a.PersonAlias.PersonId == personIdFilter ); } else { qry = qry.Where( a => a.PersonAliasId.HasValue && a.PersonAlias.PersonId == personIdFilter ); } } else { if ( showGlobalMergeTemplates ) { qry = qry.Where( a => !a.PersonAliasId.HasValue ); } else { qry = qry.Where( a => a.PersonAliasId.HasValue ); } } } else if ( mergeTemplateOwnership == MergeTemplateOwnership.Personal ) { qry = qry.Where( a => a.PersonAlias.PersonId == this.CurrentPersonId ); } else if ( mergeTemplateOwnership == MergeTemplateOwnership.PersonalAndGlobal ) { qry = qry.Where( a => !a.PersonAliasId.HasValue || a.PersonAlias.PersonId == this.CurrentPersonId ); personColumn.Visible = true; } else if ( mergeTemplateOwnership == MergeTemplateOwnership.Global ) { qry = qry.Where( a => !a.PersonAliasId.HasValue ); } if ( sortProperty != null ) { gMergeTemplates.DataSource = qry.Sort( sortProperty ).ToList(); } else { gMergeTemplates.DataSource = qry.OrderBy( s => s.Name ).ToList(); } gMergeTemplates.DataBind(); }
/// <summary> /// Handles the Click event of the btnCancel control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param> protected void btnCancel_Click( object sender, EventArgs e ) { if ( hfMergeTemplateId.Value.Equals( "0" ) ) { int? categoryId = PageParameter( "ParentCategoryId" ).AsIntegerOrNull(); if ( categoryId.HasValue ) { // Cancelling on Add, and we know the categoryId, so we are probably in treeview mode, so navigate to the current page var qryParams = new Dictionary<string, string>(); if ( categoryId != 0 ) { qryParams["CategoryId"] = categoryId.ToString(); } qryParams["ExpandedIds"] = PageParameter( "ExpandedIds" ); NavigateToPage( RockPage.Guid, qryParams ); } else { // Cancelling on Add. Return to Grid NavigateToParentPage(); } } else { // Cancelling on Edit. Return to Details var service = new MergeTemplateService( new RockContext() ); var item = service.Get( hfMergeTemplateId.Value.AsInteger() ); ShowReadonlyDetails( item ); } }
/// <summary> /// Binds the grid. /// </summary> private void BindGrid() { var service = new MergeTemplateService(new RockContext()); SortProperty sortProperty = gMergeTemplates.SortProperty; var qry = service.Queryable(); var mergeTemplateOwnership = this.GetAttributeValue("MergeTemplatesOwnership").ConvertToEnum <MergeTemplateOwnership>(MergeTemplateOwnership.Personal); var personColumn = gMergeTemplates.Columns.OfType <PersonField>().FirstOrDefault(); personColumn.Visible = false; // Only Authorization.EDIT should be able to use the grid filter if (this.IsUserAuthorized(Authorization.EDIT) && gfSettings.Visible) { // show all merge templates regardless of block settings personColumn.Visible = true; int? personIdFilter = gfSettings.GetUserPreference("Person").AsIntegerOrNull(); bool showGlobalMergeTemplates = gfSettings.GetUserPreference("Show Global Merge Templates").AsBooleanOrNull() ?? true; if (personIdFilter.HasValue) { if (showGlobalMergeTemplates) { qry = qry.Where(a => !a.PersonAliasId.HasValue || a.PersonAlias.PersonId == personIdFilter); } else { qry = qry.Where(a => a.PersonAliasId.HasValue && a.PersonAlias.PersonId == personIdFilter); } } else { if (showGlobalMergeTemplates) { qry = qry.Where(a => !a.PersonAliasId.HasValue); } else { qry = qry.Where(a => a.PersonAliasId.HasValue); } } } else if (mergeTemplateOwnership == MergeTemplateOwnership.Personal) { qry = qry.Where(a => a.PersonAlias.PersonId == this.CurrentPersonId); } else if (mergeTemplateOwnership == MergeTemplateOwnership.PersonalAndGlobal) { qry = qry.Where(a => !a.PersonAliasId.HasValue || a.PersonAlias.PersonId == this.CurrentPersonId); personColumn.Visible = true; } else if (mergeTemplateOwnership == MergeTemplateOwnership.Global) { qry = qry.Where(a => !a.PersonAliasId.HasValue); } if (sortProperty != null) { gMergeTemplates.DataSource = qry.Sort(sortProperty).ToList(); } else { gMergeTemplates.DataSource = qry.OrderBy(s => s.Name).ToList(); } gMergeTemplates.DataBind(); }
/// <summary> /// Handles the Click event of the btnDelete control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param> protected void btnDelete_Click( object sender, EventArgs e ) { int? categoryId = null; var rockContext = new RockContext(); var service = new MergeTemplateService( rockContext ); var item = service.Get( hfMergeTemplateId.Value.AsInteger() ); if ( item != null ) { string errorMessage; if ( !service.CanDelete( item, out errorMessage ) ) { ShowReadonlyDetails( item ); mdDeleteWarning.Show( errorMessage, ModalAlertType.Information ); } else { categoryId = item.CategoryId; service.Delete( item ); rockContext.SaveChanges(); // set IsTemporary to true so that the file will eventually get cleaned up BinaryFileService binaryFileService = new BinaryFileService( rockContext ); var binaryFile = binaryFileService.Get( item.TemplateBinaryFileId ); if ( binaryFile != null && binaryFile.IsTemporary ) { binaryFile.IsTemporary = false; } // reload page, selecting the deleted item's parent var qryParams = new Dictionary<string, string>(); if ( categoryId != null ) { qryParams["CategoryId"] = categoryId.ToString(); } qryParams["ExpandedIds"] = PageParameter( "ExpandedIds" ); NavigateToPage( RockPage.Guid, qryParams ); } } }
/// <summary> /// Shows the detail. /// </summary> /// <param name="mergeTemplateId">The merge template identifier.</param> /// <param name="parentCategoryId">The parent category identifier.</param> public void ShowDetail(int mergeTemplateId, int?parentCategoryId) { pnlDetails.Visible = false; var rockContext = new RockContext(); var mergeTemplateService = new MergeTemplateService(rockContext); MergeTemplate mergeTemplate = null; if (!mergeTemplateId.Equals(0)) { mergeTemplate = mergeTemplateService.Get(mergeTemplateId); } var mergeTemplateOwnership = this.GetAttributeValue("MergeTemplatesOwnership").ConvertToEnum <MergeTemplateOwnership>(MergeTemplateOwnership.Global); if (mergeTemplate == null) { mergeTemplate = new MergeTemplate(); mergeTemplate.CategoryId = parentCategoryId ?? 0; if (mergeTemplateOwnership == MergeTemplateOwnership.Personal) { mergeTemplate.PersonAliasId = this.CurrentPersonAliasId; mergeTemplate.PersonAlias = this.CurrentPersonAlias; } } pnlDetails.Visible = true; hfMergeTemplateId.Value = mergeTemplateId.ToString(); // render UI based on Authorized bool readOnly = false; nbEditModeMessage.Text = string.Empty; if (mergeTemplate.PersonAliasId.HasValue && mergeTemplate.PersonAlias.PersonId == this.CurrentPersonId) { // Allow Person to edit their own Merge Templates } else if (!IsUserAuthorized(Authorization.EDIT)) { readOnly = true; nbEditModeMessage.Text = EditModeMessage.ReadOnlyEditActionNotAllowed(MergeTemplate.FriendlyTypeName); } if (readOnly) { btnEdit.Visible = false; btnDelete.Visible = false; ShowReadonlyDetails(mergeTemplate); } else { btnEdit.Visible = true; string errorMessage = string.Empty; btnDelete.Visible = mergeTemplateService.CanDelete(mergeTemplate, out errorMessage); if (mergeTemplate.Id > 0) { ShowReadonlyDetails(mergeTemplate); } else { ShowEditDetails(mergeTemplate); } } }
/// <summary> /// Handles the Click event of the btnEdit control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param> protected void btnEdit_Click( object sender, EventArgs e ) { var service = new MergeTemplateService( new RockContext() ); var item = service.Get( hfMergeTemplateId.Value.AsInteger() ); ShowEditDetails( item ); }
/// <summary> /// Handles the Click event of the btnMerge control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param> protected void btnMerge_Click( object sender, EventArgs e ) { // NOTE: This is a full postback (not a partial like most other blocks) var rockContext = new RockContext(); List<object> mergeObjectsList = GetMergeObjectList( rockContext ); MergeTemplate mergeTemplate = new MergeTemplateService( rockContext ).Get( mtPicker.SelectedValue.AsInteger() ); if ( mergeTemplate == null ) { nbWarningMessage.Text = "Unable to get merge template"; nbWarningMessage.NotificationBoxType = NotificationBoxType.Danger; nbWarningMessage.Visible = true; return; } MergeTemplateType mergeTemplateType = this.GetMergeTemplateType( rockContext, mergeTemplate ); if ( mergeTemplateType == null ) { nbWarningMessage.Text = "Unable to get merge template type"; nbWarningMessage.NotificationBoxType = NotificationBoxType.Danger; nbWarningMessage.Visible = true; return; } var globalMergeFields = GlobalAttributesCache.GetMergeFields( this.CurrentPerson ); globalMergeFields.Add( "CurrentPerson", this.CurrentPerson ); BinaryFile outputBinaryFileDoc = null; try { outputBinaryFileDoc = mergeTemplateType.CreateDocument( mergeTemplate, mergeObjectsList, globalMergeFields ); if ( mergeTemplateType.Exceptions != null && mergeTemplateType.Exceptions.Any() ) { if ( mergeTemplateType.Exceptions.Count == 1 ) { this.LogException( mergeTemplateType.Exceptions[0] ); } else if ( mergeTemplateType.Exceptions.Count > 50 ) { this.LogException( new AggregateException( string.Format( "Exceptions merging template {0}. See InnerExceptions for top 50.", mergeTemplate.Name ), mergeTemplateType.Exceptions.Take( 50 ).ToList() ) ); } else { this.LogException( new AggregateException( string.Format( "Exceptions merging template {0}. See InnerExceptions", mergeTemplate.Name ), mergeTemplateType.Exceptions.ToList() ) ); } } var uri = new UriBuilder( outputBinaryFileDoc.Url ); var qry = System.Web.HttpUtility.ParseQueryString( uri.Query ); qry["attachment"] = true.ToTrueFalse(); uri.Query = qry.ToString(); Response.Redirect( uri.ToString(), false ); Context.ApplicationInstance.CompleteRequest(); } catch ( Exception ex ) { this.LogException( ex ); if ( ex is System.FormatException ) { nbMergeError.Text = "Error loading the merge template. Please verify that the merge template file is valid."; } else { nbMergeError.Text = "An error occurred while merging"; } nbMergeError.Details = ex.Message; nbMergeError.Visible = true; } }