/// <summary> /// Shows the prayer request's detail. /// </summary> /// <param name="prayerId">The prayer identifier.</param> public void ShowDetail( int prayerId ) { PrayerRequest prayerRequest = null; if ( prayerId != 0 ) { prayerRequest = new PrayerRequestService( new RockContext() ) .Queryable( "RequestedByPersonAlias.Person,ApprovedByPersonAlias.Person" ) .FirstOrDefault( p => p.Id == prayerId ); } if ( prayerRequest == null ) { prayerRequest = new PrayerRequest { Id = 0, IsActive = true, IsApproved = true, AllowComments = true }; } hfPrayerRequestId.Value = prayerRequest.Id.ToString(); // render UI based on Authorized and IsSystem bool readOnly = false; nbEditModeMessage.Text = string.Empty; if ( !IsUserAuthorized( Authorization.EDIT ) ) { readOnly = true; nbEditModeMessage.Title = "Information"; nbEditModeMessage.Text = EditModeMessage.ReadOnlyEditActionNotAllowed( PrayerRequest.FriendlyTypeName ); } if ( readOnly ) { lbEdit.Visible = false; ShowReadonlyDetails( prayerRequest ); } else { if ( prayerRequest.Id > 0 ) { ShowReadonlyDetails( prayerRequest ); } else { ShowEditDetails( prayerRequest ); } } }
/// <summary> /// Handles the SaveClick event of the mdFlag control and flags the prayer request and moves to the next. /// </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 mdFlag_SaveClick( object sender, EventArgs e ) { int prayerRequestId = hfIdValue.ValueAsInt(); var rockContext = new RockContext(); var service = new PrayerRequestService( rockContext ); PrayerRequest request = service.Get( prayerRequestId ); if ( request != null ) { request.FlagCount = ( request.FlagCount ?? 0 ) + 1; if ( request.FlagCount >= _flagLimit ) { request.IsApproved = false; } rockContext.SaveChanges(); } mdFlag.Hide(); lbNext_Click( sender, e ); }
/// <summary> /// Handles the edit Click event of the lbEdit 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 lbEdit_Click( object sender, EventArgs e ) { PrayerRequestService service = new PrayerRequestService( new RockContext() ); PrayerRequest item = service.Get( hfPrayerRequestId.ValueAsInt() ); ShowEditDetails( item ); }
/// <summary> /// Handles the Delete event of the gPrayerRequests 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 gPrayerRequests_Delete( object sender, RowEventArgs e ) { RockTransactionScope.WrapTransaction( () => { PrayerRequestService prayerRequestService = new PrayerRequestService(); PrayerRequest prayerRequest = prayerRequestService.Get( (int)e.RowKeyValue ); if ( prayerRequest != null ) { DeleteAllRelatedNotes( prayerRequest ); string errorMessage; if ( !prayerRequestService.CanDelete( prayerRequest, out errorMessage ) ) { maGridWarning.Show( errorMessage, ModalAlertType.Information ); return; } prayerRequestService.Delete( prayerRequest, CurrentPersonId ); prayerRequestService.Save( prayerRequest, CurrentPersonId ); } } ); BindGrid(); }
/// <summary> /// Handles the Delete event of the gPrayerRequests 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 gPrayerRequests_Delete( object sender, RowEventArgs e ) { var rockContext = new RockContext(); PrayerRequestService prayerRequestService = new PrayerRequestService( rockContext ); PrayerRequest prayerRequest = prayerRequestService.Get( e.RowKeyId ); if ( prayerRequest != null ) { DeleteAllRelatedNotes( prayerRequest ); string errorMessage; if ( !prayerRequestService.CanDelete( prayerRequest, out errorMessage ) ) { maGridWarning.Show( errorMessage, ModalAlertType.Information ); return; } prayerRequestService.Delete( prayerRequest ); rockContext.SaveChanges(); } BindGrid(); }
/// <summary> /// Binds the comments grid. /// </summary> private void BindCommentsGrid() { var rockContext = new RockContext(); var noteTypeService = new NoteTypeService( rockContext ); var noteType = noteTypeService.Get( Rock.SystemGuid.NoteType.PRAYER_COMMENT.AsGuid() ); var noteService = new NoteService( rockContext ); var prayerComments = noteService.GetByNoteTypeId( noteType.Id ); SortProperty sortProperty = gPrayerComments.SortProperty; // Filter by Category. First see if there is a Block Setting, otherwise use the Grid Filter CategoryCache categoryFilter = null; var blockCategoryGuid = GetAttributeValue( "PrayerRequestCategory" ).AsGuidOrNull(); if ( blockCategoryGuid.HasValue ) { categoryFilter = CategoryCache.Read( blockCategoryGuid.Value ); } if ( categoryFilter == null && catpPrayerCategoryFilter.Visible ) { int? filterCategoryId = catpPrayerCategoryFilter.SelectedValue.AsIntegerOrNull(); if ( filterCategoryId.HasValue ) { categoryFilter = CategoryCache.Read( filterCategoryId.Value ); } } if ( categoryFilter != null ) { // if filtered by category, only show comments for prayer requests in that category or any of its decendent categories var categoryService = new CategoryService( rockContext ); var categories = new CategoryService( rockContext ).GetAllDescendents( categoryFilter.Guid ).Select( a => a.Id ).ToList(); var prayerRequestQry = new PrayerRequestService( rockContext ).Queryable().Where( a => a.CategoryId.HasValue && ( a.Category.Guid == categoryFilter.Guid || categories.Contains( a.CategoryId.Value ) ) ) .Select( a => a.Id ); prayerComments = prayerComments.Where( a => a.EntityId.HasValue && prayerRequestQry.Contains( a.EntityId.Value ) ); } // Filter by Date Range if ( drpDateRange.LowerValue.HasValue ) { DateTime startDate = drpDateRange.LowerValue.Value.Date; prayerComments = prayerComments.Where( a => a.CreatedDateTime.HasValue && a.CreatedDateTime.Value >= startDate ); } if ( drpDateRange.UpperValue.HasValue ) { // Add one day in order to include everything up to the end of the selected datetime. var endDate = drpDateRange.UpperValue.Value.AddDays( 1 ); prayerComments = prayerComments.Where( a => a.CreatedDateTime.HasValue && a.CreatedDateTime.Value < endDate ); } // Sort by the given property otherwise sort by the EnteredDate if ( sortProperty != null ) { gPrayerComments.DataSource = prayerComments.Sort( sortProperty ).ToList(); } else { gPrayerComments.DataSource = prayerComments.OrderByDescending( n => n.CreatedDateTime ).ToList(); } gPrayerComments.DataBind(); }
/// <summary> /// Loads the content. /// </summary> protected void LoadContent() { var mergeFields = new Dictionary<string, object>(); mergeFields.Add( "CurrentPerson", CurrentPerson ); var globalAttributeFields = Rock.Web.Cache.GlobalAttributesCache.GetMergeFields( CurrentPerson ); globalAttributeFields.ToList().ForEach( d => mergeFields.Add( d.Key, d.Value ) ); RockContext rockContext = new RockContext(); var prayerRequestService = new PrayerRequestService( rockContext ); var qryPrayerRequests = prayerRequestService.Queryable(); // filter out expired if ( !GetAttributeValue( "Show Expired" ).AsBoolean() ) { qryPrayerRequests = qryPrayerRequests.Where( r => r.ExpirationDate >= RockDateTime.Now ); } // filter by date range var requestDateRange = SlidingDateRangePicker.CalculateDateRangeFromDelimitedValues( GetAttributeValue( "DateRange" ) ?? "-1||" ); if ( requestDateRange.Start != null && requestDateRange.End != null ) { qryPrayerRequests = qryPrayerRequests.Where( r => r.EnteredDateTime >= requestDateRange.Start && r.EnteredDateTime <= requestDateRange.End ); } var categoryGuids = ( GetAttributeValue( "Category" ) ?? string.Empty ).SplitDelimitedValues().AsGuidList(); if ( categoryGuids.Any() ) { qryPrayerRequests = qryPrayerRequests.Where( a => a.CategoryId.HasValue && ( categoryGuids.Contains( a.Category.Guid ) || ( a.Category.ParentCategoryId.HasValue && categoryGuids.Contains( a.Category.ParentCategory.Guid ) ) ) ); } // filter by status int? statusFilterType = GetAttributeValue( "ApprovalStatus" ).AsIntegerOrNull(); if ( statusFilterType.HasValue ) { switch ( statusFilterType.Value ) { case 1: { qryPrayerRequests = qryPrayerRequests.Where( a => a.IsApproved == true ); break; } case 2: { qryPrayerRequests = qryPrayerRequests.Where( a => a.IsApproved == false ); break; } } } int sortBy = GetAttributeValue( "Sortby" ).AsInteger(); switch ( sortBy ) { case 0: qryPrayerRequests = qryPrayerRequests.OrderBy( a => a.EnteredDateTime ); break; case 1: qryPrayerRequests = qryPrayerRequests.OrderByDescending( a => a.EnteredDateTime ); break; case 2: qryPrayerRequests = qryPrayerRequests.OrderBy( a => a.Text ); break; default: qryPrayerRequests = qryPrayerRequests.OrderBy( a => a.EnteredDateTime ); break; } int? maxResults = GetAttributeValue( "MaxResults" ).AsIntegerOrNull(); if ( maxResults.HasValue && maxResults > 0 ) { qryPrayerRequests = qryPrayerRequests.Take( maxResults.Value ); } mergeFields.Add( "PrayerRequestItems", qryPrayerRequests ); var queryParams = new Dictionary<string, string>(); queryParams.Add( "PrayerRequestId", "_PrayerRequestIdParam_" ); string url = LinkedPageUrl( "PrayerRequestDetailPage", queryParams ); if ( !string.IsNullOrWhiteSpace( url ) ) { url = url.Replace( "_PrayerRequestIdParam_", "[Id]" ); } mergeFields.Add( "LinkUrl", url ); string template = GetAttributeValue( "LavaTemplate" ); lContent.Text = template.ResolveMergeFields( mergeFields ); // show debug info if ( GetAttributeValue( "EnableDebug" ).AsBoolean() && IsUserAuthorized( Authorization.EDIT ) ) { lDebug.Visible = true; lDebug.Text = mergeFields.lavaDebugInfo(); } }
/// <summary> /// Handler that gets the next prayer request and updates its prayer count. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void lbNext_Click( object sender, EventArgs e ) { int index = hfPrayerIndex.ValueAsInt(); index++; List<int> prayerRequestIds = (List<int>)Session[_sessionKey]; int currentNumber = index + 1; if ( currentNumber <= prayerRequestIds.Count ) { UpdateSessionCountLabel( currentNumber, prayerRequestIds.Count ); hfPrayerIndex.Value = index.ToString(); var rockContext = new RockContext(); PrayerRequestService service = new PrayerRequestService( rockContext ); int prayerRequestId = prayerRequestIds[index]; PrayerRequest request = service.Queryable( "RequestedByPersonAlias.Person" ).FirstOrDefault( p => p.Id == prayerRequestId ); ShowPrayerRequest( request, rockContext ); } else { pnlFinished.Visible = true; pnlPrayer.Visible = false; lbStartAgain.Focus(); } }
/// <summary> /// Binds all comments for the given prayer request Id. /// </summary> /// <param name="prayerRequestId">the id of a prayer request</param> private void ShowComments( int prayerRequestId ) { PrayerRequestService prayerRequestService = new PrayerRequestService(); var prayerRequest = prayerRequestService.Get( prayerRequestId ); ShowComments( prayerRequest ); }
/// <summary> /// Displays the details for a single, given prayer request. /// </summary> /// <param name="prayerRequest"></param> /// <param name="service"></param> private void ShowPrayerRequest( PrayerRequest prayerRequest, PrayerRequestService service ) { pnlPrayer.Visible = true; pPrayerAnswer.Visible = false; prayerRequest.PrayerCount = ( prayerRequest.PrayerCount ?? 0 ) + 1; hlblPrayerCountTotal.Text = prayerRequest.PrayerCount.ToString() + " team prayers"; hlblUrgent.Visible = prayerRequest.IsUrgent ?? false; lTitle.Text = prayerRequest.FullName.FormatAsHtmlTitle(); //lPrayerText.Text = prayerRequest.Text.EncodeHtmlThenConvertCrLfToHtmlBr(); lPrayerText.Text = ScrubHtmlAndConvertCrLfToBr( prayerRequest.Text ); hlblCategory.Text = prayerRequest.Category.Name; // Show their answer if there is one on the request. if ( !string.IsNullOrWhiteSpace( prayerRequest.Answer ) ) { pPrayerAnswer.Visible = true; lPrayerAnswerText.Text = prayerRequest.Answer.EncodeHtmlThenConvertCrLfToHtmlBr(); } // put the request's id in the hidden field in case it needs to be flagged. hfIdValue.SetValue( prayerRequest.Id ); lPersonIconHtml.Text = GetPhotoUrl( prayerRequest.RequestedByPerson ); pnlComments.Visible = prayerRequest.AllowComments ?? false; if ( rptComments.Visible ) { ShowComments( prayerRequest ); } // save because the prayer count was just modified. service.Save( prayerRequest, this.CurrentPersonId ); }
/// <summary> /// Handles the SaveClick event of the mdFlag control and flags the prayer request and moves to the next. /// </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 mdFlag_SaveClick( object sender, EventArgs e ) { int prayerRequestId = hfIdValue.ValueAsInt(); var service = new PrayerRequestService(); PrayerRequest request = service.Get( prayerRequestId ); if ( request != null ) { request.FlagCount = ( request.FlagCount ?? 0 ) + 1; if ( request.FlagCount >= _flagLimit ) { request.IsApproved = false; } service.Save( request, this.CurrentPersonId ); } mdFlag.Hide(); lbNext_Click( sender, e ); }
/// <summary> /// Handler that gets the next prayer request and updates its prayer count. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void lbNext_Click( object sender, EventArgs e ) { int index = hfPrayerIndex.ValueAsInt(); index++; List<int> prayerRequestIds = (List<int>) Session[ _sessionKey ]; int currentNumber = index + 1; if ( currentNumber <= prayerRequestIds.Count ) { UpdateSessionCountLabel( currentNumber, prayerRequestIds.Count ); hfPrayerIndex.Value = index.ToString(); PrayerRequestService service = new PrayerRequestService(); PrayerRequest request = service.Get( prayerRequestIds[index] ); ShowPrayerRequest( request, service ); } else { pnlFinished.Visible = true; pnlPrayer.Visible = false; lbStartAgain.Focus(); } }
/// <summary> /// Shows the prayer request's detail. /// </summary> /// <param name="prayerId">The prayer identifier.</param> public void ShowDetail( int prayerId ) { PrayerRequest prayerRequest = null; if ( prayerId != 0 ) { prayerRequest = new PrayerRequestService( new RockContext() ) .Queryable( "RequestedByPersonAlias.Person,ApprovedByPersonAlias.Person" ) .FirstOrDefault( p => p.Id == prayerId ); pdAuditDetails.SetEntity( prayerRequest, ResolveRockUrl( "~" ) ); } if ( prayerRequest == null ) { prayerRequest = new PrayerRequest { Id = 0, IsActive = true, IsApproved = true, AllowComments = true }; // hide the panel drawer that show created and last modified dates pdAuditDetails.Visible = false; } hfPrayerRequestId.Value = prayerRequest.Id.ToString(); // render UI based on Authorized and IsSystem bool readOnly = false; nbEditModeMessage.Text = string.Empty; if ( !IsUserAuthorized( Authorization.EDIT ) ) { readOnly = true; nbEditModeMessage.Title = "Information"; nbEditModeMessage.Text = EditModeMessage.ReadOnlyEditActionNotAllowed( PrayerRequest.FriendlyTypeName ); } hlCategory.Text = prayerRequest.Category != null ? prayerRequest.Category.Name : string.Empty; if ( readOnly ) { lbEdit.Visible = false; ShowReadonlyDetails( prayerRequest ); } else { if ( prayerRequest.Id > 0 ) { ShowReadonlyDetails( prayerRequest ); } else { ShowEditDetails( prayerRequest ); } } }
/// <summary> /// Handles the Click event to save the prayer request. /// </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 ) { if ( ! IsValid() ) { return; } bool isAutoApproved = GetAttributeValue( "EnableAutoApprove" ).AsBoolean(); bool defaultAllowComments = GetAttributeValue( "DefaultAllowCommentsSetting" ).AsBoolean(); PrayerRequest prayerRequest = new PrayerRequest { Id = 0, IsActive = true, IsApproved = isAutoApproved, AllowComments = defaultAllowComments }; var rockContext = new RockContext(); PrayerRequestService prayerRequestService = new PrayerRequestService( rockContext ); prayerRequestService.Add( prayerRequest ); prayerRequest.EnteredDateTime = RockDateTime.Now; if ( isAutoApproved ) { prayerRequest.ApprovedByPersonAliasId = CurrentPersonAliasId; prayerRequest.ApprovedOnDateTime = RockDateTime.Now; var expireDays = Convert.ToDouble( GetAttributeValue( "ExpireDays" ) ); prayerRequest.ExpirationDate = RockDateTime.Now.AddDays( expireDays ); } // Now record all the bits... // Make sure the Category is hydrated so it's included for any Lava processing Category category; int? categoryId = bddlCategory.SelectedValueAsInt(); Guid defaultCategoryGuid = GetAttributeValue( "DefaultCategory" ).AsGuid(); if ( categoryId == null && !defaultCategoryGuid.IsEmpty() ) { category = new CategoryService( rockContext ).Get( defaultCategoryGuid ); categoryId = category.Id; } else { category = new CategoryService( rockContext ).Get( categoryId.Value ); } prayerRequest.CategoryId = categoryId; prayerRequest.Category = category; prayerRequest.RequestedByPersonAliasId = CurrentPersonAliasId; prayerRequest.FirstName = tbFirstName.Text; prayerRequest.LastName = tbLastName.Text; prayerRequest.Email = tbEmail.Text; prayerRequest.Text = dtbRequest.Text; if ( this.EnableUrgentFlag ) { prayerRequest.IsUrgent = cbIsUrgent.Checked; } else { prayerRequest.IsUrgent = false; } if ( this.EnableCommentsFlag ) { prayerRequest.AllowComments = cbAllowComments.Checked; } if ( this.EnablePublicDisplayFlag ) { prayerRequest.IsPublic = cbAllowPublicDisplay.Checked; } else { prayerRequest.IsPublic = false; } if ( !Page.IsValid ) { return; } if ( !prayerRequest.IsValid ) { // field controls render error messages return; } rockContext.SaveChanges(); StartWorkflow( prayerRequest, rockContext ); bool isNavigateToParent = GetAttributeValue( "NavigateToParentOnSave" ).AsBoolean(); if ( isNavigateToParent ) { NavigateToParentPage(); } else { pnlForm.Visible = false; pnlReceipt.Visible = true; // Build success text that is Lava capable var mergeFields = Rock.Lava.LavaHelper.GetCommonMergeFields( this.RockPage, this.CurrentPerson ); mergeFields.Add( "PrayerRequest", prayerRequest ); nbMessage.Text = GetAttributeValue( "SaveSuccessText" ).ResolveMergeFields( mergeFields ); // Resolve any dynamic url references string appRoot = ResolveRockUrl( "~/" ); string themeRoot = ResolveRockUrl( "~~/" ); nbMessage.Text = nbMessage.Text.Replace( "~~/", themeRoot ).Replace( "~/", appRoot ); // show liquid help for debug if ( GetAttributeValue( "EnableDebug" ).AsBoolean() && IsUserAuthorized( Authorization.EDIT ) ) { nbMessage.Text += mergeFields.lavaDebugInfo(); } } }
/// <summary> /// Binds the 'active' categories for the given top-level category GUID to the list for /// the user to choose. /// </summary> /// <param name="categoryGuid">the guid string of a top-level prayer category</param> /// <returns>true if there were active categories or false if there were none</returns> private bool BindCategories( string categoryGuid ) { string settingPrefix = string.Format( "prayer-categories-{0}-", this.BlockId ); IQueryable<PrayerRequest> prayerRequestQuery = new PrayerRequestService( new RockContext() ).GetActiveApprovedUnexpired(); // Filter categories if one has been selected in the configuration if ( !string.IsNullOrEmpty( categoryGuid ) ) { Guid guid = new Guid( categoryGuid ); var filterCategory = CategoryCache.Read( guid ); if ( filterCategory != null ) { prayerRequestQuery = prayerRequestQuery.Where( p => p.Category.ParentCategoryId == filterCategory.Id ); } } var categoryList = prayerRequestQuery .Where( p => p.Category != null ) .Select( p => new { p.Category.Id, p.Category.Name } ) .GroupBy( g => new { g.Id, g.Name } ) .OrderBy( g => g.Key.Name ) .Select( a => new { Id = a.Key.Id, Name = a.Key.Name + " (" + System.Data.Entity.SqlServer.SqlFunctions.StringConvert( (double)a.Count() ).Trim() + ")", Count = a.Count() //,Checked = selectedIDs.Contains( a.Key.Id ) } ).ToList(); cblCategories.DataTextField = "Name"; cblCategories.DataValueField = "Id"; cblCategories.DataSource = categoryList; cblCategories.DataBind(); // use the users preferences to set which items are checked. _savedCategoryIdsSetting = this.GetUserPreference( settingPrefix ).SplitDelimitedValues(); for ( int i = 0; i < cblCategories.Items.Count; i++ ) { ListItem item = (ListItem)cblCategories.Items[i]; item.Selected = _savedCategoryIdsSetting.Contains( item.Value ); } return categoryList.Count() > 0; }
/// <summary> /// Finds all approved prayer requests for the given selected categories and orders them by least prayed-for. /// Also updates the prayer count for the first item in the list. /// </summary> /// <param name="categoriesList"></param> private void SetAndDisplayPrayerRequests( RockCheckBoxList categoriesList ) { RockContext rockContext = new RockContext(); PrayerRequestService service = new PrayerRequestService( rockContext ); var prayerRequests = service.GetByCategoryIds( categoriesList.SelectedValuesAsInt ).OrderByDescending( p => p.IsUrgent ).ThenBy( p => p.PrayerCount ); List<int> list = prayerRequests.Select( p => p.Id ).ToList<int>(); Session[_sessionKey] = list; if ( list.Count > 0 ) { UpdateSessionCountLabel( 1, list.Count ); hfPrayerIndex.Value = "0"; PrayerRequest request = prayerRequests.First(); ShowPrayerRequest( request, rockContext ); } }
/// <summary> /// Handles the edit Click event of the lbEdit 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 lbEdit_Click( object sender, EventArgs e ) { int prayerRequestId = hfPrayerRequestId.ValueAsInt(); PrayerRequest item = new PrayerRequestService( new RockContext() ) .Queryable( "RequestedByPersonAlias.Person,ApprovedByPersonAlias.Person" ) .FirstOrDefault( p => p.Id == prayerRequestId ); ShowEditDetails( item ); }
/// <summary> /// Handles the Click event to save the prayer request. /// </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 ) { if ( ! IsValid() ) { return; } bool isAutoApproved = GetAttributeValue( "EnableAutoApprove" ).AsBoolean(); bool defaultAllowComments = GetAttributeValue( "DefaultAllowCommentsSetting" ).AsBoolean(); PrayerRequest prayerRequest = new PrayerRequest { Id = 0, IsActive = true, IsApproved = isAutoApproved, AllowComments = defaultAllowComments }; var rockContext = new RockContext(); PrayerRequestService prayerRequestService = new PrayerRequestService( rockContext ); prayerRequestService.Add( prayerRequest ); prayerRequest.EnteredDateTime = RockDateTime.Now; if ( isAutoApproved ) { prayerRequest.ApprovedByPersonAliasId = CurrentPersonAliasId; prayerRequest.ApprovedOnDateTime = RockDateTime.Now; var expireDays = Convert.ToDouble( GetAttributeValue( "ExpireDays" ) ); prayerRequest.ExpirationDate = RockDateTime.Now.AddDays( expireDays ); } // Now record all the bits... int? categoryId = bddlCategory.SelectedValueAsInt(); Guid defaultCategoryGuid = GetAttributeValue( "DefaultCategory" ).AsGuid(); if ( categoryId == null && !defaultCategoryGuid.IsEmpty() ) { var category = new CategoryService( rockContext ).Get( defaultCategoryGuid ); categoryId = category.Id; } prayerRequest.CategoryId = categoryId; prayerRequest.RequestedByPersonAliasId = CurrentPersonAliasId; prayerRequest.FirstName = dtbFirstName.Text; prayerRequest.LastName = dtbLastName.Text; prayerRequest.Email = dtbEmail.Text; prayerRequest.Text = dtbRequest.Text; if ( this.EnableUrgentFlag ) { prayerRequest.IsUrgent = cbIsUrgent.Checked; } else { prayerRequest.IsUrgent = false; } if ( this.EnableCommentsFlag ) { prayerRequest.AllowComments = cbAllowComments.Checked; } if ( this.EnablePublicDisplayFlag ) { prayerRequest.IsPublic = cbAllowPublicDisplay.Checked; } else { prayerRequest.IsPublic = false; } if ( !Page.IsValid ) { return; } if ( !prayerRequest.IsValid ) { // field controls render error messages return; } rockContext.SaveChanges(); bool isNavigateToParent = GetAttributeValue( "NavigateToParentOnSave" ).AsBoolean(); if ( isNavigateToParent ) { NavigateToParentPage(); } else { pnlForm.Visible = false; pnlReceipt.Visible = true; } }
/// <summary> /// Handles the Click event of the lbPrevious 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 lbBack_Click( object sender, EventArgs e ) { int index = hfPrayerIndex.ValueAsInt(); index--; List<int> prayerRequestIds = this.PrayerRequestIds; int currentNumber = index + 1; if ( ( prayerRequestIds != null ) && ( currentNumber > 0 ) ) { UpdateSessionCountLabel( currentNumber, prayerRequestIds.Count ); hfPrayerIndex.Value = index.ToString(); var rockContext = new RockContext(); PrayerRequestService service = new PrayerRequestService( rockContext ); int prayerRequestId = prayerRequestIds[index]; PrayerRequest request = service.Queryable( "RequestedByPersonAlias.Person" ).FirstOrDefault( p => p.Id == prayerRequestId ); ShowPrayerRequest( request, rockContext ); } else { lbBack.Visible = false; } }
/// <summary> /// Binds the comments grid. /// </summary> private void BindCommentsGrid() { var rockContext = new RockContext(); var noteTypeService = new NoteTypeService( rockContext ); var noteType = noteTypeService.Get( Rock.SystemGuid.NoteType.PRAYER_COMMENT.AsGuid() ); // TODO log exception if noteType is null var noteService = new NoteService( rockContext ); var prayerComments = noteService.GetByNoteTypeId( noteType.Id ); SortProperty sortProperty = gPrayerComments.SortProperty; if ( _blockInstancePrayerRequestCategoryGuid.HasValue ) { // if filtered by category, only show comments for prayer requests in that category or any of its decendent categories var categoryService = new CategoryService( rockContext ); if ( _blockInstancePrayerRequestCategoryGuid.HasValue ) { var categories = new CategoryService( rockContext ).GetAllDescendents( _blockInstancePrayerRequestCategoryGuid.Value ).Select( a => a.Id ).ToList(); var prayerRequestQry = new PrayerRequestService( rockContext ).Queryable().Where( a => a.CategoryId.HasValue && ( a.Category.Guid == _blockInstancePrayerRequestCategoryGuid.Value || categories.Contains( a.CategoryId.Value ) ) ) .Select( a => a.Id ); prayerComments = prayerComments.Where( a => a.EntityId.HasValue && prayerRequestQry.Contains( a.EntityId.Value ) ); } } // Filter by Date Range if ( drpDateRange.LowerValue.HasValue ) { DateTime startDate = drpDateRange.LowerValue.Value.Date; prayerComments = prayerComments.Where( a => a.CreatedDateTime.HasValue && a.CreatedDateTime.Value >= startDate ); } if ( drpDateRange.UpperValue.HasValue ) { // Add one day in order to include everything up to the end of the selected datetime. var endDate = drpDateRange.UpperValue.Value.AddDays( 1 ); prayerComments = prayerComments.Where( a => a.CreatedDateTime.HasValue && a.CreatedDateTime.Value < endDate ); } // Sort by the given property otherwise sort by the EnteredDate if ( sortProperty != null ) { gPrayerComments.DataSource = prayerComments.Sort( sortProperty ).ToList(); } else { gPrayerComments.DataSource = prayerComments.OrderBy( n => n.CreatedDateTime ).ToList(); } gPrayerComments.DataBind(); }
/// <summary> /// Shows the prayer request's detail. /// </summary> /// <param name="itemKey">The item key.</param> /// <param name="itemKeyValue">The item key value.</param> public void ShowDetail( string itemKey, int itemKeyValue ) { if ( !itemKey.Equals( _prayerRequestKeyParameter ) ) { return; } PrayerRequest prayerRequest; if ( !itemKeyValue.Equals( 0 ) ) { prayerRequest = new PrayerRequestService( new RockContext() ).Get( itemKeyValue ); } else { prayerRequest = new PrayerRequest { Id = 0, IsActive = true, IsApproved = true, AllowComments = true }; } if ( prayerRequest == null ) { return; } hfPrayerRequestId.Value = prayerRequest.Id.ToString(); // render UI based on Authorized and IsSystem bool readOnly = false; nbEditModeMessage.Text = string.Empty; if ( !IsUserAuthorized( Authorization.EDIT ) ) { readOnly = true; nbEditModeMessage.Title = "Information"; nbEditModeMessage.Text = EditModeMessage.ReadOnlyEditActionNotAllowed( PrayerRequest.FriendlyTypeName ); } if ( readOnly ) { lbEdit.Visible = false; ShowReadonlyDetails( prayerRequest ); } else { if ( prayerRequest.Id > 0 ) { ShowReadonlyDetails( prayerRequest ); } else { ShowEditDetails( prayerRequest ); } } }
/// <summary> /// Handles the CheckChanged event of the gPrayerRequests IsApproved field. /// </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 gPrayerRequests_CheckChanged( object sender, RowEventArgs e ) { bool failure = true; if ( e.RowKeyValue != null ) { var rockContext = new RockContext(); PrayerRequestService prayerRequestService = new PrayerRequestService( rockContext ); PrayerRequest prayerRequest = prayerRequestService.Get( e.RowKeyId ); if ( prayerRequest != null ) { failure = false; // if it was approved, set it to unapproved... otherwise if ( prayerRequest.IsApproved ?? false ) { prayerRequest.IsApproved = false; } else { prayerRequest.IsApproved = true; prayerRequest.ApprovedByPersonId = CurrentPerson.Id; prayerRequest.ApprovedOnDateTime = RockDateTime.Now; // reset the flag count only to zero ONLY if it had a value previously. if ( prayerRequest.FlagCount.HasValue && prayerRequest.FlagCount > 0 ) { prayerRequest.FlagCount = 0; } } rockContext.SaveChanges(); } BindGrid(); } if ( failure ) { maGridWarning.Show( "Unable to approve that prayer request", ModalAlertType.Warning ); } }
/// <summary> /// Saves the prayer request. /// </summary> private void SaveRequest() { var rockContext = new RockContext(); PrayerRequest prayerRequest; PrayerRequestService prayerRequestService = new PrayerRequestService( rockContext ); int prayerRequestId = int.Parse( hfPrayerRequestId.Value ); // Fetch the prayer request or create a new one if needed if ( prayerRequestId == 0 ) { prayerRequest = new PrayerRequest(); prayerRequestService.Add( prayerRequest ); prayerRequest.EnteredDateTime = RockDateTime.Now; } else { prayerRequest = prayerRequestService.Get( prayerRequestId ); } // If changing from NOT-approved to approved, record who and when if ( !( prayerRequest.IsApproved ?? false ) && cbApproved.Checked ) { prayerRequest.ApprovedByPersonId = CurrentPerson.Id; prayerRequest.ApprovedOnDateTime = RockDateTime.Now; // reset the flag count only to zero ONLY if it had a value previously. if ( prayerRequest.FlagCount.HasValue && prayerRequest.FlagCount > 0 ) { prayerRequest.FlagCount = 0; } } // If no expiration date was manually set, then use the default setting. if ( !dpExpirationDate.SelectedDate.HasValue ) { var expireDays = Convert.ToDouble( GetAttributeValue( "ExpireDays" ) ); prayerRequest.ExpirationDate = RockDateTime.Now.AddDays( expireDays ); } else { prayerRequest.ExpirationDate = dpExpirationDate.SelectedDate; } // If no category was selected, then use the default category if there is one. int? categoryId = catpCategory.SelectedValueAsInt(); Guid defaultCategoryGuid = GetAttributeValue( "DefaultCategory" ).AsGuid(); if ( categoryId == null && !defaultCategoryGuid.IsEmpty() ) { var category = new CategoryService( rockContext ).Get( defaultCategoryGuid ); categoryId = category.Id; } prayerRequest.CategoryId = categoryId; // Now record all the bits... prayerRequest.IsApproved = cbApproved.Checked; prayerRequest.IsActive = cbIsActive.Checked; prayerRequest.IsUrgent = cbIsUrgent.Checked; prayerRequest.AllowComments = cbAllowComments.Checked; prayerRequest.IsPublic = cbIsPublic.Checked; prayerRequest.FirstName = dtbFirstName.Text; prayerRequest.LastName = dtbLastName.Text; prayerRequest.Text = dtbText.Text.Trim(); prayerRequest.Answer = dtbAnswer.Text.Trim(); if ( !Page.IsValid ) { return; } if ( !prayerRequest.IsValid ) { // field controls render error messages return; } rockContext.SaveChanges(); NavigateToParentPage(); }
/// <summary> /// Binds the grid to a list of Prayer Requests. /// </summary> private void BindGrid() { PrayerRequestService prayerRequestService = new PrayerRequestService( new RockContext() ); SortProperty sortProperty = gPrayerRequests.SortProperty; var prayerRequests = prayerRequestService.Queryable().Select( a => new { a.Id, FullName = a.FirstName + " " + a.LastName, CategoryName = a.Category.Name, EnteredDate = a.EnteredDateTime, a.ExpirationDate, a.Text, a.FlagCount, a.IsApproved, a.CategoryId, CategoryParentCategoryId = a.Category.ParentCategoryId, a.IsUrgent, a.IsPublic, a.IsActive, a.AllowComments } ); // Filter by prayer category if one is selected... int selectedPrayerCategoryID = catpPrayerCategoryFilter.SelectedValue.AsIntegerOrNull() ?? All.Id; if ( selectedPrayerCategoryID != All.Id && selectedPrayerCategoryID != None.Id ) { prayerRequests = prayerRequests.Where( c => c.CategoryId == selectedPrayerCategoryID || c.CategoryParentCategoryId == selectedPrayerCategoryID ); } // Filter by approved/unapproved if ( ddlApprovedFilter.SelectedIndex > -1 ) { if ( ddlApprovedFilter.SelectedValue == "unapproved" ) { prayerRequests = prayerRequests.Where( a => a.IsApproved == false || !a.IsApproved.HasValue ); } else if ( ddlApprovedFilter.SelectedValue == "approved" ) { prayerRequests = prayerRequests.Where( a => a.IsApproved == true ); } } // Filter by urgent/non-urgent if ( ddlUrgentFilter.SelectedIndex > -1 ) { if ( ddlUrgentFilter.SelectedValue == "non-urgent" ) { prayerRequests = prayerRequests.Where( a => a.IsUrgent == false || !a.IsUrgent.HasValue ); } else if ( ddlUrgentFilter.SelectedValue == "urgent" ) { prayerRequests = prayerRequests.Where( a => a.IsUrgent == true ); } } // Filter by public/non-public if ( ddlPublicFilter.SelectedIndex > -1 ) { if ( ddlPublicFilter.SelectedValue == "non-public" ) { prayerRequests = prayerRequests.Where( a => a.IsPublic == false || !a.IsPublic.HasValue ); } else if ( ddlPublicFilter.SelectedValue == "public" ) { prayerRequests = prayerRequests.Where( a => a.IsPublic == true ); } } // Filter by active/inactive if ( ddlActiveFilter.SelectedIndex > -1 ) { if ( ddlActiveFilter.SelectedValue == "inactive" ) { prayerRequests = prayerRequests.Where( a => a.IsActive == false || !a.IsActive.HasValue ); } else if ( ddlActiveFilter.SelectedValue == "active" ) { prayerRequests = prayerRequests.Where( a => a.IsActive == true ); } } // Filter by active/inactive if ( ddlAllowCommentsFilter.SelectedIndex > -1 ) { if ( ddlAllowCommentsFilter.SelectedValue == "unallow" ) { prayerRequests = prayerRequests.Where( a => a.AllowComments == false || !a.AllowComments.HasValue ); } else if ( ddlAllowCommentsFilter.SelectedValue == "allow" ) { prayerRequests = prayerRequests.Where( a => a.AllowComments == true ); } } // Filter by Date Range if ( drpDateRange.LowerValue.HasValue ) { DateTime startDate = drpDateRange.LowerValue.Value.Date; prayerRequests = prayerRequests.Where( a => a.EnteredDate >= startDate ); } if ( drpDateRange.UpperValue.HasValue ) { // Add one day in order to include everything up to the end of the selected datetime. var endDate = drpDateRange.UpperValue.Value.AddDays( 1 ); prayerRequests = prayerRequests.Where( a => a.EnteredDate < endDate ); } // Don't show expired prayer requests. // TODO save users filter setting? if ( !cbShowExpired.Checked ) { prayerRequests = prayerRequests.Where( a => RockDateTime.Today <= a.ExpirationDate ); } // Sort by the given property otherwise sort by the EnteredDate (and Id) // (this is a hack because the Date field alone doesn't sort in the descending direction well) if ( sortProperty != null ) { gPrayerRequests.DataSource = prayerRequests.Sort( sortProperty ).ToList(); } else { // TODO Figure out how to tell Grid what Direction and Property it's sorting on //sortProperty.Direction = SortDirection.Ascending; //sortProperty.Property = "EnteredDate"; gPrayerRequests.DataSource = prayerRequests.OrderByDescending( p => p.EnteredDate ).ThenByDescending( p => p.Id ).ToList(); } gPrayerRequests.DataBind(); }
/// <summary> /// Binds the grid to a list of Prayer Requests. /// </summary> private void BindGrid() { PrayerRequestService prayerRequestService = new PrayerRequestService( new RockContext() ); SortProperty sortProperty = gPrayerRequests.SortProperty; var prayerRequests = prayerRequestService.Queryable().Select( a => new { a.Id, FullName = a.FirstName + " " + a.LastName, CategoryName = a.CategoryId.HasValue ? a.Category.Name : null, EnteredDate = a.EnteredDateTime, a.ExpirationDate, a.Text, a.FlagCount, PrayerCount = a.PrayerCount.HasValue ? a.PrayerCount : 0, a.IsApproved, a.CategoryId, CategoryParentCategoryId = a.CategoryId.HasValue ? a.Category.ParentCategoryId : null, a.IsUrgent, a.IsPublic, a.IsActive, a.AllowComments } ); // Filter by prayer category if one is selected... int selectedPrayerCategoryID = catpPrayerCategoryFilter.SelectedValue.AsIntegerOrNull() ?? All.Id; if ( selectedPrayerCategoryID != All.Id && selectedPrayerCategoryID != None.Id ) { prayerRequests = prayerRequests.Where( c => c.CategoryId == selectedPrayerCategoryID || c.CategoryParentCategoryId == selectedPrayerCategoryID ); } // Filter by approved/unapproved if ( ddlApprovedFilter.SelectedIndex > -1 ) { if ( ddlApprovedFilter.SelectedValue == "unapproved" ) { prayerRequests = prayerRequests.Where( a => a.IsApproved == false || !a.IsApproved.HasValue ); } else if ( ddlApprovedFilter.SelectedValue == "approved" ) { prayerRequests = prayerRequests.Where( a => a.IsApproved == true ); } } // Filter by urgent/non-urgent if ( ddlUrgentFilter.SelectedIndex > -1 ) { if ( ddlUrgentFilter.SelectedValue == "non-urgent" ) { prayerRequests = prayerRequests.Where( a => a.IsUrgent == false || !a.IsUrgent.HasValue ); } else if ( ddlUrgentFilter.SelectedValue == "urgent" ) { prayerRequests = prayerRequests.Where( a => a.IsUrgent == true ); } } // Filter by public/non-public if ( ddlPublicFilter.SelectedIndex > -1 ) { if ( ddlPublicFilter.SelectedValue == "non-public" ) { prayerRequests = prayerRequests.Where( a => a.IsPublic == false || !a.IsPublic.HasValue ); } else if ( ddlPublicFilter.SelectedValue == "public" ) { prayerRequests = prayerRequests.Where( a => a.IsPublic == true ); } } // Filter by active/inactive if ( ddlActiveFilter.SelectedIndex > -1 ) { if ( ddlActiveFilter.SelectedValue == "inactive" ) { prayerRequests = prayerRequests.Where( a => a.IsActive == false || !a.IsActive.HasValue ); } else if ( ddlActiveFilter.SelectedValue == "active" ) { prayerRequests = prayerRequests.Where( a => a.IsActive == true ); } } // Filter by active/inactive if ( ddlAllowCommentsFilter.SelectedIndex > -1 ) { if ( ddlAllowCommentsFilter.SelectedValue == "unallow" ) { prayerRequests = prayerRequests.Where( a => a.AllowComments == false || !a.AllowComments.HasValue ); } else if ( ddlAllowCommentsFilter.SelectedValue == "allow" ) { prayerRequests = prayerRequests.Where( a => a.AllowComments == true ); } } // Filter by Date Range if ( drpDateRange.LowerValue.HasValue ) { DateTime startDate = drpDateRange.LowerValue.Value.Date; prayerRequests = prayerRequests.Where( a => a.EnteredDate >= startDate ); } if ( drpDateRange.UpperValue.HasValue ) { // Add one day in order to include everything up to the end of the selected datetime. var endDate = drpDateRange.UpperValue.Value.AddDays( 1 ); prayerRequests = prayerRequests.Where( a => a.EnteredDate < endDate ); } // Don't show expired prayer requests. if ( !cbShowExpired.Checked ) { prayerRequests = prayerRequests.Where( a => a.ExpirationDate == null || RockDateTime.Today <= a.ExpirationDate ); } if ( sortProperty != null ) { gPrayerRequests.DataSource = prayerRequests.Sort( sortProperty ).ToList(); } else { gPrayerRequests.DataSource = prayerRequests.OrderByDescending( p => p.EnteredDate ).ThenByDescending( p => p.Id ).ToList(); } gPrayerRequests.EntityTypeId = EntityTypeCache.Read<PrayerRequest>().Id; gPrayerRequests.DataBind(); }