Example #1
0
        /// <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);
        }
Example #7
0
        /// <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 );
        }
Example #10
0
        /// <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);
                }
            }
        }
Example #18
0
        /// <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;
            }
        }
Example #19
0
        /// <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 );
                }
            }
        }
Example #20
0
        /// <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 );
            }
        }
Example #22
0
        /// <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;
        }
Example #23
0
        /// <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);
                }
            }
        }
Example #25
0
        /// <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();
        }
Example #28
0
 /// <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 );
 }
Example #29
0
 /// <summary>
 /// Sets the value on select.
 /// </summary>
 protected override void SetValueOnSelect()
 {
     var item = new MergeTemplateService( new RockContext() ).Get( ItemId.AsInteger() );
     this.SetValue( item );
 }
Example #30
0
        /// <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();
        }
Example #33
0
        /// <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();
        }
Example #35
0
        /// <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);
                }
            }
        }
Example #37
0
 /// <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 );
 }
Example #38
0
        /// <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>
        /// 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;
            }
        }