private void LoadCategories() { string errorResponse = string.Empty; PackageCategoryService packageCategoryService = new PackageCategoryService(); var categories = packageCategoryService.GetCategories(out errorResponse); // check for errors ErrorCheck(errorResponse); 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)); mergeFields.Add("Categories", categories); // add link to detail page Dictionary <string, object> linkedPages = new Dictionary <string, object>(); linkedPages.Add("DetailPage", LinkedPageUrl("DetailPage", null)); mergeFields.Add("LinkedPages", linkedPages); lOutput.Text = GetAttributeValue("LavaTemplate").ResolveMergeFields(mergeFields); // show debug info if (GetAttributeValue("EnableDebug").AsBoolean() && IsUserAuthorized(Authorization.EDIT)) { lDebug.Visible = true; lDebug.Text = mergeFields.lavaDebugInfo(); } }
private void DisplayResults() { RockContext rockContext = new RockContext(); if (Request["BenevolenceRequestId"] != null) { int id; int.TryParse(Request["BenevolenceRequestId"].ToString(), out id); var benevolenceRequest = new BenevolenceRequestService(rockContext).Get(id); var mergeFields = new Dictionary <string, object>(); mergeFields.Add("Request", benevolenceRequest); var template = GetAttributeValue("LavaTemplate"); lResults.Text = template.ResolveMergeFields(mergeFields); // show debug info if (GetAttributeValue("EnableDebug").AsBoolean() && IsUserAuthorized(Authorization.EDIT)) { lDebug.Visible = true; lDebug.Text = mergeFields.lavaDebugInfo(); } } }
/// <summary> /// Shows the active users. /// </summary> private void DisplayItems() { RockContext rockContext = new RockContext(); Guid? contentChannelGuid = GetAttributeValue("ContentChannel").AsGuidOrNull(); ContentChannel contentChannel = null; ContentChannelItemService itemService = new ContentChannelItemService(rockContext); var items = itemService.Queryable().AsNoTracking().Where(c => c.CreatedByPersonAlias != null && c.CreatedByPersonAlias.PersonId == CurrentPersonId); if (contentChannelGuid.HasValue) { items = items.Where(c => c.ContentChannel.Guid == contentChannelGuid.Value); contentChannel = new ContentChannelService(rockContext).Get(contentChannelGuid.Value); } var mergeFields = new Dictionary <string, object>(); mergeFields.Add("DetailPage", LinkedPageRoute("DetailPage")); mergeFields.Add("ContentChannel", contentChannel); mergeFields.Add("CurrentPerson", CurrentPerson); mergeFields.Add("Items", items.Take(GetAttributeValue("MaxItems").AsInteger()).ToList()); 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(); } }
public static Dictionary <string, object> GetMergeFieldsAndDimensions(ref string debugLava, Dictionary <string, dynamic> customDimensionValues, MergeFieldObjects mergeFieldObjects) { var mergeFields = new Dictionary <string, object>(); var account = mergeFieldObjects.Account; if (mergeFieldObjects.CustomDimensions.Count > 0) { foreach (var rockKey in mergeFieldObjects.CustomDimensions) { var dimension = rockKey.Split('.').Last(); customDimensionValues.Add(dimension, account.GetAttributeValue(rockKey)); } } mergeFields.Add("Account", account); mergeFields.Add("Summary", mergeFieldObjects.Summary); mergeFields.Add("Batch", mergeFieldObjects.Batch); mergeFields.Add("Registrations", mergeFieldObjects.Registrations); mergeFields.Add("GroupMembers", mergeFieldObjects.GroupMembers); mergeFields.Add("CustomDimensions", customDimensionValues); if (debugLava.Length < 6 && debugLava.AsBoolean()) { debugLava = mergeFields.lavaDebugInfo(); } return(mergeFields); }
/// <summary> /// Raises the <see cref="E:System.Web.UI.Control.Load" /> event. /// </summary> /// <param name="e">The <see cref="T:System.EventArgs" /> object that contains the event data.</param> protected override void OnLoad(EventArgs e) { base.OnLoad(e); litDebug.Text = ""; if (!Page.IsPostBack) { // Load the storage slots BindData(); if (cbEnableDebug.Checked) { litDebug.Text = mergeFields.lavaDebugInfo(); } } }
public void LoadContent() { // get opportunity id int opportunityId = -1; if (!string.IsNullOrWhiteSpace(PageParameter("OpportunityId"))) { opportunityId = Convert.ToInt32(PageParameter("OpportunityId")); } if (opportunityId > 0) { RockContext rockContext = new RockContext(); ConnectionOpportunityService connectionOpportunityService = new ConnectionOpportunityService(rockContext); bool enableDebug = GetAttributeValue("EnableDebug").AsBoolean(); var qry = connectionOpportunityService .Queryable() .Where(g => g.Id == opportunityId); if (!enableDebug) { qry = qry.AsNoTracking(); } var opportunity = qry.FirstOrDefault(); var mergeFields = new Dictionary <string, object>(); mergeFields.Add("Opportunity", opportunity); // add linked pages Dictionary <string, object> linkedPages = new Dictionary <string, object>(); linkedPages.Add("SignupPage", LinkedPageUrl("SignupPage", null)); mergeFields.Add("LinkedPages", linkedPages); mergeFields.Add("CurrentPerson", CurrentPerson); var globalAttributeFields = Rock.Web.Cache.GlobalAttributesCache.GetMergeFields(CurrentPerson); globalAttributeFields.ToList().ForEach(d => mergeFields.Add(d.Key, d.Value)); lOutput.Text = GetAttributeValue("LavaTemplate").ResolveMergeFields(mergeFields); if (GetAttributeValue("SetPageTitle").AsBoolean()) { string pageTitle = opportunity.PublicName; RockPage.PageTitle = pageTitle; RockPage.BrowserTitle = String.Format("{0} | {1}", pageTitle, RockPage.Site.Name); RockPage.Header.Title = String.Format("{0} | {1}", pageTitle, RockPage.Site.Name); } // show debug info if (GetAttributeValue("EnableDebug").AsBoolean() && IsUserAuthorized(Authorization.EDIT)) { lDebug.Visible = true; lDebug.Text = mergeFields.lavaDebugInfo(); } } }
private void DisplayDetails() { int eventItemOccurrenceId = 0; // get the calendarItem id if ( !string.IsNullOrWhiteSpace( PageParameter( "EventOccurrenceId" ) ) ) { eventItemOccurrenceId = Convert.ToInt32( PageParameter( "EventOccurrenceId" ) ); } if ( eventItemOccurrenceId > 0 ) { var eventItemOccurrenceService = new EventItemOccurrenceService( new RockContext() ); var qry = eventItemOccurrenceService .Queryable( "EventItem, EventItem.Photo, Campus, Linkages" ) .Where( i => i.Id == eventItemOccurrenceId ); var eventItemOccurrence = qry.FirstOrDefault(); var mergeFields = new Dictionary<string, object>(); mergeFields.Add( "RegistrationPage", LinkedPageRoute( "RegistrationPage" ) ); var campusEntityType = EntityTypeCache.Read( "Rock.Model.Campus" ); var contextCampus = RockPage.GetCurrentContext( campusEntityType ) as Campus; if ( contextCampus != null ) { mergeFields.Add( "CampusContext", contextCampus ); } mergeFields.Add( "EventItemOccurrence", eventItemOccurrence ); mergeFields.Add( "Event", eventItemOccurrence != null ? eventItemOccurrence.EventItem : null ); mergeFields.Add( "CurrentPerson", CurrentPerson ); lOutput.Text = GetAttributeValue( "LavaTemplate" ).ResolveMergeFields( mergeFields ); if ( GetAttributeValue( "SetPageTitle" ).AsBoolean() ) { string pageTitle = eventItemOccurrence != null ? eventItemOccurrence.EventItem.Name : "Event"; RockPage.PageTitle = pageTitle; RockPage.BrowserTitle = String.Format( "{0} | {1}", pageTitle, RockPage.Site.Name ); RockPage.Header.Title = String.Format( "{0} | {1}", pageTitle, RockPage.Site.Name ); } // show debug info if ( GetAttributeValue( "EnableDebug" ).AsBoolean() && IsUserAuthorized( Authorization.EDIT ) ) { lDebug.Visible = true; lDebug.Text = mergeFields.lavaDebugInfo(); } } else { lOutput.Text = "<div class='alert alert-warning'>No event was available from the querystring.</div>"; } }
private void ListGroups() { RockContext rockContext = new RockContext(); var qry = new GroupMemberService(rockContext) .Queryable("Group") .Where(m => m.PersonId == CurrentPersonId && m.GroupMemberStatus == GroupMemberStatus.Active && m.Group.IsActive == true); List <Guid> includeGroupTypeGuids = GetAttributeValue("IncludeGroupTypes").SplitDelimitedValues().Select(a => Guid.Parse(a)).ToList(); if (includeGroupTypeGuids.Count > 0) { qry = qry.Where(t => includeGroupTypeGuids.Contains(t.Group.GroupType.Guid)); } List <Guid> excludeGroupTypeGuids = GetAttributeValue("ExcludeGroupTypes").SplitDelimitedValues().Select(a => Guid.Parse(a)).ToList(); if (excludeGroupTypeGuids.Count > 0) { qry = qry.Where(t => !excludeGroupTypeGuids.Contains(t.Group.GroupType.Guid)); } var groups = qry.Select(m => new GroupInvolvementSummary { Group = m.Group, Role = m.GroupRole.Name, IsLeader = m.GroupRole.IsLeader, GroupType = m.Group.GroupType.Name }).ToList(); var mergeFields = new Dictionary <string, object>(); mergeFields.Add("Groups", groups); mergeFields.Add("CurrentPerson", CurrentPerson); var globalAttributeFields = Rock.Web.Cache.GlobalAttributesCache.GetMergeFields(CurrentPerson); globalAttributeFields.ToList().ForEach(d => mergeFields.Add(d.Key, d.Value)); Dictionary <string, object> linkedPages = new Dictionary <string, object>(); linkedPages.Add("DetailPage", LinkedPageUrl("DetailPage", null)); mergeFields.Add("LinkedPages", linkedPages); string template = GetAttributeValue("LavaTemplate"); // show debug info bool enableDebug = GetAttributeValue("EnableDebug").AsBoolean(); if (enableDebug && IsUserAuthorized(Authorization.EDIT)) { lDebug.Visible = true; lDebug.Text = mergeFields.lavaDebugInfo(); } lContent.Text = template.ResolveMergeFields(mergeFields); }
private void LoadPackages() { // get category int?categoryId = null; if (!string.IsNullOrWhiteSpace(GetAttributeValue("CategoryId"))) { categoryId = Convert.ToInt32(GetAttributeValue("CategoryId")); } else if (!string.IsNullOrWhiteSpace(PageParameter("CategoryId"))) { categoryId = Convert.ToInt32(PageParameter("CategoryId")); } string categoryName = PageParameter("CategoryName"); if (GetAttributeValue("SetPageTitle").AsBoolean() && !string.IsNullOrWhiteSpace(categoryName)) { string pageTitle = "Items for " + categoryName; RockPage.PageTitle = pageTitle; RockPage.BrowserTitle = String.Format("{0} | {1}", pageTitle, RockPage.Site.Name); RockPage.Header.Title = String.Format("{0} | {1}", pageTitle, RockPage.Site.Name); } PackageService packageService = new PackageService(); var packages = packageService.GetAllPackages(categoryId); var mergeFields = new Dictionary <string, object>(); mergeFields.Add("CurrentPerson", CurrentPerson); // add link to detail page Dictionary <string, object> linkedPages = new Dictionary <string, object>(); linkedPages.Add("DetailPage", LinkedPageUrl("DetailPage", null)); mergeFields.Add("LinkedPages", linkedPages); var globalAttributeFields = Rock.Web.Cache.GlobalAttributesCache.GetMergeFields(CurrentPerson); globalAttributeFields.ToList().ForEach(d => mergeFields.Add(d.Key, d.Value)); mergeFields.Add("Packages", packages); lOutput.Text = GetAttributeValue("LavaTemplate").ResolveMergeFields(mergeFields); // show debug info if (GetAttributeValue("EnableDebug").AsBoolean() && IsUserAuthorized(Authorization.EDIT)) { lDebug.Visible = true; lDebug.Text = mergeFields.lavaDebugInfo();; } }
private void BindData() { List <ReservationService.ReservationSummary> reservationSummaryList = GetReservationSummaries(); // Bind to Grid var reservationSummaries = reservationSummaryList.Select(r => new { Id = r.Id, ReservationName = r.ReservationName, ApprovalState = r.ApprovalState.ConvertToString(), Locations = r.ReservationLocations.ToList(), Resources = r.ReservationResources.ToList(), CalendarDate = r.EventStartDateTime.ToLongDateString(), EventStartDateTime = r.EventStartDateTime, EventEndDateTime = r.EventEndDateTime, ReservationStartDateTime = r.ReservationStartDateTime, ReservationEndDateTime = r.ReservationEndDateTime, EventDateTimeDescription = r.EventTimeDescription, ReservationDateTimeDescription = r.ReservationTimeDescription, SetupPhotoId = r.SetupPhotoId, SetupPhotoLink = ResolveRockUrl(String.Format("~/GetImage.ashx?id={0}", r.SetupPhotoId ?? 0)) }) .OrderBy(r => r.EventStartDateTime) .GroupBy(r => r.EventStartDateTime.Date) .Select(r => r.ToList()) .ToList(); var mergeFields = new Dictionary <string, object>(); mergeFields.Add("TimeFrame", ViewMode); mergeFields.Add("DetailsPage", LinkedPageUrl("DetailsPage", null)); mergeFields.Add("ReservationSummaries", reservationSummaries); mergeFields.Add("CurrentPerson", CurrentPerson); lOutput.Text = GetAttributeValue("LavaTemplate").ResolveMergeFields(mergeFields); // show debug info if (GetAttributeValue("EnableDebug").AsBoolean() && IsUserAuthorized(Authorization.EDIT)) { lDebug.Visible = true; lDebug.Text = mergeFields.lavaDebugInfo(); } else { lDebug.Visible = false; lDebug.Text = string.Empty; } }
/// <summary> /// Shows the list. /// </summary> protected void ShowList() { var mergeFields = new Dictionary <string, object>(); mergeFields.Add("CurrentPerson", CurrentPerson); if (_definedType != null) { var definedValues = new List <DefinedValueCache>(); foreach (var definedValue in _definedType.DefinedValues) { if (_canEdit || definedValue.IsAuthorized(Authorization.VIEW, CurrentPerson)) { definedValues.Add(definedValue); } } mergeFields.Add("DefinedValues", definedValues); } // add collection of allowed security actions Dictionary <string, object> securityActions = new Dictionary <string, object>(); securityActions.Add("Edit", UserCanEdit); securityActions.Add("Administrate", UserCanAdministrate); mergeFields.Add("AllowedActions", securityActions); string template = GetAttributeValue("LavaTemplate"); // show debug info if (GetAttributeValue("EnableDebug").AsBoolean() && IsUserAuthorized(Authorization.EDIT)) { string postbackCommands = @" <h5>Available Postback Commands</h5> <ul> <li><strong>EditList:</strong> Shows a panel for modifing group info.<code>{{ '' | Postback:'EditList' }}</code></li> </ul> "; lDebug.Visible = true; lDebug.Text = mergeFields.lavaDebugInfo(null, string.Empty, postbackCommands); } lContent.Text = template.ResolveMergeFields(mergeFields).ResolveClientIds(upnlContent.ClientID); }
/// <summary> /// Renders the specified writer. /// </summary> /// <param name="badge">The badge.</param> /// <param name="writer">The writer.</param> public override void Render(BadgeCache badge, System.Web.UI.HtmlTextWriter writer) { var displayText = GetAttributeValue(badge, "DisplayText"); if (Entity != null) { var mergeValues = new Dictionary <string, object>(); // Always add Entity as a merge field so that lava badges that aren't tied to a particular model can have consistency mergeValues.Add("Entity", Entity); // Add a merge field by the model's name (Group, Person, FinancialAccount, etc) var modelTypeName = Entity.GetType()?.BaseType?.Name; if (!modelTypeName.IsNullOrWhiteSpace()) { mergeValues.Add(modelTypeName, Entity); } // Continue to provide the person merge field since this was originally a person badge and the lava would need to be updated to not break if (modelTypeName != "Person") { mergeValues.Add("Person", Person); } // Resolve the merge fields and add debug info if requested displayText = displayText.ResolveMergeFields(mergeValues); if (GetAttributeValue(badge, "EnableDebug").AsBoolean()) { displayText += $@"<small><a data-toggle='collapse' data-parent='#accordion' href='#badge-debug'><i class='fa fa-eye'></i></a></small> <div id='badge-debug' class='collapse well badge-debug'> {mergeValues.lavaDebugInfo()} </div>"; } } if (!displayText.IsNullOrWhiteSpace()) { writer.Write(displayText); } }
private void DisplayResults() { var numberOfYears = GetAttributeValue("MaxYearsToDisplay").AsInteger(); RockContext rockContext = new RockContext(); FinancialTransactionDetailService financialTransactionDetailService = new FinancialTransactionDetailService(rockContext); var qry = financialTransactionDetailService.Queryable().AsNoTracking() .Where(t => t.Transaction.AuthorizedPersonAlias.Person.GivingId == TargetPerson.GivingId); if (string.IsNullOrWhiteSpace(GetAttributeValue("Accounts"))) { qry = qry.Where(t => t.Account.IsTaxDeductible); } else { var accountGuids = GetAttributeValue("Accounts").Split(',').Select(Guid.Parse).ToList(); qry = qry.Where(t => accountGuids.Contains(t.Account.Guid)); } var yearQry = qry.GroupBy(t => t.Transaction.TransactionDateTime.Value.Year) .Select(g => new { Year = g.Key }) .OrderByDescending(y => y.Year); var mergeFields = new Dictionary <string, object>(); mergeFields.Add("DetailPage", LinkedPageRoute("DetailPage")); mergeFields.Add("StatementYears", yearQry.Take(numberOfYears)); mergeFields.Add("PersonGuid", TargetPerson.Guid); var template = GetAttributeValue("LavaTemplate"); lResults.Text = template.ResolveMergeFields(mergeFields); // show debug info if (GetAttributeValue("EnableDebug").AsBoolean() && IsUserAuthorized(Authorization.EDIT)) { lDebug.Visible = true; lDebug.Text = mergeFields.lavaDebugInfo(); } }
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)); var entityType = EntityTypeCache.Read(GetAttributeValue("EntityType").AsGuid()); if (entityType != null) { RockContext rockContext = new RockContext(); int entityTypeId = EntityTypeCache.GetId <Group>().Value; int personId = this.CurrentPersonId.Value; var followingService = new FollowingService(rockContext); IQueryable <IEntity> qryFollowedItems = followingService.GetFollowedItems(entityTypeId, personId); mergeFields.Add("FollowingItems", qryFollowedItems); mergeFields.Add("EntityType", entityType.FriendlyName); mergeFields.Add("LinkUrl", GetAttributeValue("LinkUrl")); 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(); } } else { lContent.Text = string.Format("<div class='alert alert-warning'>Please configure an entity in the block settings."); } }
private void DisplayPackage() { // get package id int packageId = -1; if (!string.IsNullOrWhiteSpace(PageParameter("PackageId"))) { packageId = Convert.ToInt32(PageParameter("PackageId")); } PackageService packageService = new PackageService(); var package = packageService.GetPackage(packageId); var mergeFields = new Dictionary <string, object>(); mergeFields.Add("Package", package); mergeFields.Add("CurrentPerson", CurrentPerson); var globalAttributeFields = Rock.Web.Cache.GlobalAttributesCache.GetMergeFields(CurrentPerson); globalAttributeFields.ToList().ForEach(d => mergeFields.Add(d.Key, d.Value)); lOutput.Text = GetAttributeValue("LavaTemplate").ResolveMergeFields(mergeFields); if (GetAttributeValue("SetPageTitle").AsBoolean()) { string pageTitle = package.Name; RockPage.PageTitle = pageTitle; RockPage.BrowserTitle = String.Format("{0} | {1}", pageTitle, RockPage.Site.Name); RockPage.Header.Title = String.Format("{0} | {1}", pageTitle, RockPage.Site.Name); } // show debug info if (GetAttributeValue("EnableDebug").AsBoolean() && IsUserAuthorized(Authorization.EDIT)) { lDebug.Visible = true; lDebug.Text = mergeFields.lavaDebugInfo(); } }
protected void LoadContent() { List <DefinedValueCache> definedValues = new List <DefinedValueCache>(); var mergeFields = new Dictionary <string, object>(); // TODO: When support for "Person" is not supported anymore (should use "CurrentPerson" instead), remove this line mergeFields.Add("Person", CurrentPerson); mergeFields.Add("CurrentPerson", CurrentPerson); var globalAttributeFields = Rock.Web.Cache.GlobalAttributesCache.GetMergeFields(CurrentPerson); globalAttributeFields.ToList().ForEach(d => mergeFields.Add(d.Key, d.Value)); string selectedDefinedType = GetAttributeValue("DefinedType"); if (!string.IsNullOrWhiteSpace(selectedDefinedType)) { var dtItem = DefinedTypeCache.Read(Guid.Parse(selectedDefinedType)); foreach (var item in dtItem.DefinedValues) { definedValues.Add(item); } mergeFields.Add("DefinedValues", definedValues); string template = GetAttributeValue("LiquidTemplate"); lContent.Text = template.ResolveMergeFields(mergeFields); } // show debug info if (GetAttributeValue("EnableDebug").AsBoolean() && IsUserAuthorized(Authorization.EDIT)) { lDebug.Visible = true; // TODO: When support for "Person" is not supported anymore (should use "CurrentPerson" instead), remove this line mergeFields.Remove("Person"); lDebug.Text = mergeFields.lavaDebugInfo(); } }
/// <summary> /// Renders the specified writer. /// </summary> /// <param name="badge">The badge.</param> /// <param name="writer">The writer.</param> public override void Render( PersonBadgeCache badge, System.Web.UI.HtmlTextWriter writer ) { string displayText = GetAttributeValue( badge, "DisplayText" ); if ( Person != null ) { Dictionary<string, object> mergeValues = new Dictionary<string, object>(); mergeValues.Add( "Person", Person ); displayText = displayText.ResolveMergeFields( mergeValues ); if ( GetAttributeValue( badge, "EnableDebug" ).AsBoolean() ) { string debugInfo = string.Format( @" <small><a data-toggle='collapse' data-parent='#accordion' href='#badge-debug'><i class='fa fa-eye'></i></a></small> <div id='badge-debug' class='collapse well badge-debug'> {0} </div> ", mergeValues.lavaDebugInfo() ); displayText += debugInfo; } } writer.Write( displayText ); }
/// <summary> /// Renders the specified writer. /// </summary> /// <param name="badge">The badge.</param> /// <param name="writer">The writer.</param> public override void Render(PersonBadgeCache badge, System.Web.UI.HtmlTextWriter writer) { string displayText = GetAttributeValue(badge, "DisplayText"); if (Person != null) { Dictionary <string, object> mergeValues = new Dictionary <string, object>(); mergeValues.Add("Person", Person); displayText = displayText.ResolveMergeFields(mergeValues); if (GetAttributeValue(badge, "EnableDebug").AsBoolean()) { string debugInfo = string.Format(@" <small><a data-toggle='collapse' data-parent='#accordion' href='#badge-debug'><i class='fa fa-eye'></i></a></small> <div id='badge-debug' class='collapse well badge-debug'> {0} </div> ", mergeValues.lavaDebugInfo()); displayText += debugInfo; } } writer.Write(displayText); }
/// <summary> /// Shows the success panel /// </summary> private void ShowSuccess( int registrationId ) { decimal currentStep = ( FormCount * RegistrationState.RegistrantCount ) + ( Using3StepGateway ? 3 : 2 ); PercentComplete = ( currentStep / ProgressBarSteps ) * 100.0m; pnlSuccessProgressBar.Visible = GetAttributeValue( "DisplayProgressBar" ).AsBoolean(); lSuccessTitle.Text = "Congratulations"; lSuccess.Text = "You have successfully completed this registration."; try { var rockContext = new RockContext(); var registration = new RegistrationService( rockContext ) .Queryable( "RegistrationInstance.RegistrationTemplate" ) .FirstOrDefault( r => r.Id == registrationId ); if ( registration != null && registration.RegistrationInstance != null && registration.RegistrationInstance.RegistrationTemplate != null ) { var template = registration.RegistrationInstance.RegistrationTemplate; var mergeFields = new Dictionary<string, object>(); mergeFields.Add( "CurrentPerson", CurrentPerson ); mergeFields.Add( "RegistrationInstance", registration.RegistrationInstance ); mergeFields.Add( "Registration", registration ); if ( template != null && !string.IsNullOrWhiteSpace( template.SuccessTitle ) ) { lSuccessTitle.Text = template.SuccessTitle.ResolveMergeFields( mergeFields ); } else { lSuccessTitle.Text = "Congratulations"; } if ( template != null && !string.IsNullOrWhiteSpace( template.SuccessText ) ) { lSuccess.Text = template.SuccessText.ResolveMergeFields( mergeFields ); } else { lSuccess.Text = "You have successfully completed this " + RegistrationTerm.ToLower(); } // show debug info if ( GetAttributeValue( "EnableDebug" ).AsBoolean() && UserCanEdit ) { lSuccessDebug.Visible = true; lSuccessDebug.Text = mergeFields.lavaDebugInfo(); } } if ( nbAmountPaid.Visible = true && nbAmountPaid.Text.AsDecimalOrNull().HasValue && nbAmountPaid.Text.AsDecimalOrNull().Value > 0.0M && ( rblSavedCC.Items.Count == 0 || ( rblSavedCC.SelectedValueAsId() ?? 0 ) == 0 ) ) { cbSaveAccount.Visible = true; pnlSaveAccount.Visible = true; txtSaveAccount.Visible = true; // If current person does not have a login, have them create a username and password phCreateLogin.Visible = !new UserLoginService( rockContext ).GetByPersonId( CurrentPersonId ).Any(); } else { pnlSaveAccount.Visible = false; } } catch ( Exception ex ) { ExceptionLogService.LogException( ex, Context, this.RockPage.PageId, this.RockPage.Site.Id, CurrentPersonAlias ); } SetPanel( 4 ); }
public void LoadContent() { // get opportunity id int opportunityId = -1; if ( !string.IsNullOrWhiteSpace( PageParameter( "OpportunityId" ) ) ) { opportunityId = Convert.ToInt32( PageParameter( "OpportunityId" ) ); } if ( opportunityId > 0 ) { RockContext rockContext = new RockContext(); ConnectionOpportunityService connectionOpportunityService = new ConnectionOpportunityService( rockContext ); bool enableDebug = GetAttributeValue( "EnableDebug" ).AsBoolean(); var qry = connectionOpportunityService .Queryable() .Where( g => g.Id == opportunityId ); if ( !enableDebug ) { qry = qry.AsNoTracking(); } var opportunity = qry.FirstOrDefault(); var mergeFields = new Dictionary<string, object>(); mergeFields.Add( "Opportunity", opportunity ); // add linked pages Dictionary<string, object> linkedPages = new Dictionary<string, object>(); linkedPages.Add( "SignupPage", LinkedPageUrl( "SignupPage", null ) ); mergeFields.Add( "LinkedPages", linkedPages ); mergeFields.Add( "CurrentPerson", CurrentPerson ); var globalAttributeFields = Rock.Web.Cache.GlobalAttributesCache.GetMergeFields( CurrentPerson ); globalAttributeFields.ToList().ForEach( d => mergeFields.Add( d.Key, d.Value ) ); lOutput.Text = GetAttributeValue( "LavaTemplate" ).ResolveMergeFields( mergeFields ); if ( GetAttributeValue( "SetPageTitle" ).AsBoolean() ) { string pageTitle = opportunity.PublicName; RockPage.PageTitle = pageTitle; RockPage.BrowserTitle = String.Format( "{0} | {1}", pageTitle, RockPage.Site.Name ); RockPage.Header.Title = String.Format( "{0} | {1}", pageTitle, RockPage.Site.Name ); } // show debug info if ( GetAttributeValue( "EnableDebug" ).AsBoolean() && IsUserAuthorized( Authorization.EDIT ) ) { lDebug.Visible = true; lDebug.Text = mergeFields.lavaDebugInfo(); } } }
/// <summary> /// Shows the detail. /// </summary> /// <param name="opportunityId">The opportunity identifier.</param> public void ShowDetail(int opportunityId) { using (var rockContext = new RockContext()) { var opportunity = new ConnectionOpportunityService(rockContext).Get(opportunityId); if (opportunity == null) { pnlSignup.Visible = false; ShowError("Incorrect Opportunity Type", "The requested opportunity does not exist."); return; } // load campus dropdown var campuses = CampusCache.All().Where(c => (c.IsActive ?? false) && opportunity.ConnectionOpportunityCampuses.Any(o => o.CampusId == c.Id)).ToList(); cpCampus.Campuses = campuses; cpCampus.Visible = campuses.Any(); if (campuses.Any()) { cpCampus.SetValue(campuses.First().Id); } if ((!string.IsNullOrEmpty(PageParameter("CampusId")) && opportunity.ConnectionOpportunityCampuses.Any(o => o.CampusId == PageParameter("CampusId").AsInteger())) || (!string.IsNullOrEmpty(PageParameter("Campus")) && opportunity.ConnectionOpportunityCampuses.Any(o => o.Campus.Guid == PageParameter("Campus").AsGuidOrNull()))) { if (PageParameter("Campus").AsGuidOrNull().HasValue) { cpCampus.SetValue(CampusCache.Read(PageParameter("Campus").AsGuid()).Id); ltCampus.Text = CampusCache.Read(PageParameter("Campus").AsGuid()).Name; } else { cpCampus.SetValue(PageParameter("CampusId").AsInteger()); ltCampus.Text = CampusCache.Read(PageParameter("CampusId").AsInteger()).Name; } cpCampus.CssClass = "hidden"; cpCampus.Label = null; ltCampus.Visible = true; } pnlSignup.Visible = true; if (!string.IsNullOrWhiteSpace(opportunity.IconCssClass)) { lIcon.Text = string.Format("<i class='{0}' ></i>", opportunity.IconCssClass); } lTitle.Text = opportunity.Name; btnConnect.Text = GetAttributeValue("ConnectButtonText"); divHome.Visible = pnHome.Visible = GetAttributeValue("DisplayHomePhone").AsBoolean(); divMobile.Visible = pnMobile.Visible = GetAttributeValue("DisplayMobilePhone").AsBoolean(); divBirthdate.Visible = bpBirthdate.Visible = GetAttributeValue("DisplayBirthdate").AsBoolean(); tbComments.Visible = GetAttributeValue("DisplayComments").AsBoolean(); // If any of these aren't showing then set the width to be a bit wider on the columns if (!(divHome.Visible && divMobile.Visible && divBirthdate.Visible)) { divHome.RemoveCssClass("col-md-4"); divHome.AddCssClass("col-md-6"); divMobile.RemoveCssClass("col-md-4"); divMobile.AddCssClass("col-md-6"); divBirthdate.RemoveCssClass("col-md-4"); divBirthdate.AddCssClass("col-md-6"); } Person registrant = null; if (RockPage.PageParameter("PersonGuid") != null) { Guid?personGuid = RockPage.PageParameter("PersonGuid").AsGuidOrNull(); if (personGuid.HasValue) { registrant = new PersonService(rockContext).Get(personGuid.Value); } } if (registrant == null && CurrentPerson != null) { registrant = CurrentPerson; } if (registrant != null) { tbFirstName.Text = registrant.FirstName.EncodeHtml(); tbLastName.Text = registrant.LastName.EncodeHtml(); tbEmail.Text = registrant.Email.EncodeHtml(); bpBirthdate.SelectedDate = registrant.BirthDate; if (pnHome.Visible && _homePhone != null) { var homePhoneNumber = registrant.PhoneNumbers.Where(p => p.NumberTypeValueId == _homePhone.Id).FirstOrDefault(); if (homePhoneNumber != null) { pnHome.Number = homePhoneNumber.NumberFormatted; pnHome.CountryCode = homePhoneNumber.CountryCode; } } if (pnMobile.Visible && _cellPhone != null) { var cellPhoneNumber = registrant.PhoneNumbers.Where(p => p.NumberTypeValueId == _cellPhone.Id).FirstOrDefault(); if (cellPhoneNumber != null) { pnMobile.Number = cellPhoneNumber.NumberFormatted; pnMobile.CountryCode = cellPhoneNumber.CountryCode; } } var campus = registrant.GetCampus(); if (campus != null) { cpCampus.SelectedCampusId = campus.Id; } } else { // set the campus to the context if (GetAttributeValue("EnableCampusContext").AsBoolean()) { var campusEntityType = EntityTypeCache.Read("Rock.Model.Campus"); var contextCampus = RockPage.GetCurrentContext(campusEntityType) as Campus; if (contextCampus != null) { cpCampus.SelectedCampusId = contextCampus.Id; } } } // Role rptGroupRoleAttributes.DataSource = RoleRequests; rptGroupRoleAttributes.DataBind(); int repeaterIndex = 0; foreach (ConnectionRoleRequest roleRequest in RoleRequests) { if (opportunity.ConnectionOpportunityGroupConfigs.Where(gc => gc.GroupMemberRoleId == roleRequest.GroupTypeRoleId || gc.GroupMemberRole.Guid.ToString() == roleRequest.GroupTypeRole).Any()) { var groupConfig = opportunity.ConnectionOpportunityGroupConfigs.Where(gc => gc.GroupMemberRoleId == roleRequest.GroupTypeRoleId || gc.GroupMemberRole.Guid.ToString() == roleRequest.GroupTypeRole).FirstOrDefault(); (( Literal )(rptGroupRoleAttributes.Items[repeaterIndex].FindControl("ltRole"))).Text = groupConfig.GroupType.Name + " - " + groupConfig.GroupMemberRole.Name; (( Literal )(rptGroupRoleAttributes.Items[repeaterIndex].FindControl("ltRole"))).Visible = true; (( HiddenField )(rptGroupRoleAttributes.Items[repeaterIndex].FindControl("hdnGroupRoleTypeId"))).Value = groupConfig.GroupMemberRole.Id.ToString(); } repeaterIndex++; } // show debug info var mergeFields = new Dictionary <string, object>(); mergeFields.Add("Opportunity", new ConnectionOpportunityService(rockContext).Get(PageParameter("OpportunityId").AsInteger())); mergeFields.Add("CurrentPerson", CurrentPerson); if (GetAttributeValue("EnableDebug").AsBoolean() && IsUserAuthorized(Authorization.EDIT)) { lDebug.Visible = true; lDebug.Text = mergeFields.lavaDebugInfo(); } } }
/// <summary> /// Handles the Click event of the btnRegister 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 btnRegister_Click(object sender, EventArgs e) { if (Page.IsValid) { var rockContext = new RockContext(); var personService = new PersonService(rockContext); Person person = null; Person spouse = null; Group family = null; GroupLocation homeLocation = null; var changes = new List <string>(); var spouseChanges = new List <string>(); var familyChanges = new List <string>(); // Only use current person if the name entered matches the current person's name and autofill mode is true if (_autoFill) { if (CurrentPerson != null && tbFirstName.Text.Trim().Equals(CurrentPerson.FirstName.Trim(), StringComparison.OrdinalIgnoreCase) && tbLastName.Text.Trim().Equals(CurrentPerson.LastName.Trim(), StringComparison.OrdinalIgnoreCase)) { person = personService.Get(CurrentPerson.Id); } } // Try to find person by name/email if (person == null) { var matches = personService.GetByMatch(tbFirstName.Text.Trim(), tbLastName.Text.Trim(), tbEmail.Text.Trim()); if (matches.Count() == 1) { person = matches.First(); } } // Check to see if this is a new person if (person == null) { // If so, create the person and family record for the new person person = new Person(); person.FirstName = tbFirstName.Text.Trim(); person.LastName = tbLastName.Text.Trim(); person.Email = tbEmail.Text.Trim(); person.IsEmailActive = true; person.EmailPreference = EmailPreference.EmailAllowed; person.RecordTypeValueId = DefinedValueCache.Read(Rock.SystemGuid.DefinedValue.PERSON_RECORD_TYPE_PERSON.AsGuid()).Id; person.ConnectionStatusValueId = _dvcConnectionStatus.Id; person.RecordStatusValueId = _dvcRecordStatus.Id; person.Gender = Gender.Unknown; family = PersonService.SaveNewPerson(person, rockContext, _group.CampusId, false); } else { // updating current existing person History.EvaluateChange(changes, "Email", person.Email, tbEmail.Text); person.Email = tbEmail.Text; // Get the current person's families var families = person.GetFamilies(rockContext); // If address can being entered, look for first family with a home location if (!IsSimple) { foreach (var aFamily in families) { homeLocation = aFamily.GroupLocations .Where(l => l.GroupLocationTypeValueId == _homeAddressType.Id && l.IsMappedLocation) .FirstOrDefault(); if (homeLocation != null) { family = aFamily; break; } } } // If a family wasn't found with a home location, use the person's first family if (family == null) { family = families.FirstOrDefault(); } } // If using a 'Full' view, save the phone numbers and address if (!IsSimple) { SetPhoneNumber(rockContext, person, pnHome, null, Rock.SystemGuid.DefinedValue.PERSON_PHONE_TYPE_HOME.AsGuid(), changes); SetPhoneNumber(rockContext, person, pnCell, cbSms, Rock.SystemGuid.DefinedValue.PERSON_PHONE_TYPE_MOBILE.AsGuid(), changes); string oldLocation = homeLocation != null?homeLocation.Location.ToString() : string.Empty; string newLocation = string.Empty; var location = new LocationService(rockContext).Get(acAddress.Street1, acAddress.Street2, acAddress.City, acAddress.State, acAddress.PostalCode, acAddress.Country); if (location != null) { if (homeLocation == null) { homeLocation = new GroupLocation(); homeLocation.GroupLocationTypeValueId = _homeAddressType.Id; family.GroupLocations.Add(homeLocation); } else { oldLocation = homeLocation.Location.ToString(); } homeLocation.Location = location; newLocation = location.ToString(); } else { if (homeLocation != null) { homeLocation.Location = null; family.GroupLocations.Remove(homeLocation); new GroupLocationService(rockContext).Delete(homeLocation); } } History.EvaluateChange(familyChanges, "Home Location", oldLocation, newLocation); // Check for the spouse if (IsFullWithSpouse && !string.IsNullOrWhiteSpace(tbSpouseFirstName.Text) && !string.IsNullOrWhiteSpace(tbSpouseLastName.Text)) { spouse = person.GetSpouse(); if (spouse == null || !tbSpouseFirstName.Text.Trim().Equals(spouse.FirstName.Trim(), StringComparison.OrdinalIgnoreCase) || !tbSpouseLastName.Text.Trim().Equals(spouse.LastName.Trim(), StringComparison.OrdinalIgnoreCase)) { spouse = new Person(); spouse.FirstName = tbSpouseFirstName.Text; History.EvaluateChange(spouseChanges, "First Name", string.Empty, spouse.FirstName); spouse.LastName = tbSpouseLastName.Text; History.EvaluateChange(spouseChanges, "Last Name", string.Empty, spouse.LastName); spouse.ConnectionStatusValueId = _dvcConnectionStatus.Id; spouse.RecordStatusValueId = _dvcRecordStatus.Id; spouse.Gender = Gender.Unknown; spouse.IsEmailActive = true; spouse.EmailPreference = EmailPreference.EmailAllowed; var groupMember = new GroupMember(); groupMember.GroupRoleId = _adultRole.Id; groupMember.Person = spouse; family.Members.Add(groupMember); spouse.MaritalStatusValueId = _married.Id; person.MaritalStatusValueId = _married.Id; } History.EvaluateChange(changes, "Email", person.Email, tbEmail.Text); spouse.Email = tbSpouseEmail.Text; SetPhoneNumber(rockContext, spouse, pnHome, null, Rock.SystemGuid.DefinedValue.PERSON_PHONE_TYPE_HOME.AsGuid(), spouseChanges); SetPhoneNumber(rockContext, spouse, pnSpouseCell, cbSpouseSms, Rock.SystemGuid.DefinedValue.PERSON_PHONE_TYPE_MOBILE.AsGuid(), spouseChanges); } } // Save the person/spouse and change history rockContext.SaveChanges(); HistoryService.SaveChanges(rockContext, typeof(Person), Rock.SystemGuid.Category.HISTORY_PERSON_DEMOGRAPHIC_CHANGES.AsGuid(), person.Id, changes); HistoryService.SaveChanges(rockContext, typeof(Person), Rock.SystemGuid.Category.HISTORY_PERSON_FAMILY_CHANGES.AsGuid(), person.Id, familyChanges); if (spouse != null) { HistoryService.SaveChanges(rockContext, typeof(Person), Rock.SystemGuid.Category.HISTORY_PERSON_DEMOGRAPHIC_CHANGES.AsGuid(), spouse.Id, spouseChanges); HistoryService.SaveChanges(rockContext, typeof(Person), Rock.SystemGuid.Category.HISTORY_PERSON_FAMILY_CHANGES.AsGuid(), spouse.Id, familyChanges); } // Check to see if a workflow should be launched for each person WorkflowType workflowType = null; Guid? workflowTypeGuid = GetAttributeValue("Workflow").AsGuidOrNull(); if (workflowTypeGuid.HasValue) { var workflowTypeService = new WorkflowTypeService(rockContext); workflowType = workflowTypeService.Get(workflowTypeGuid.Value); } // Save the registrations ( and launch workflows ) var newGroupMembers = new List <GroupMember>(); AddPersonToGroup(rockContext, person, workflowType, newGroupMembers); AddPersonToGroup(rockContext, spouse, workflowType, newGroupMembers); // Show the results pnlView.Visible = false; pnlResult.Visible = true; // Show lava content var mergeFields = new Dictionary <string, object>(); mergeFields.Add("Group", _group); mergeFields.Add("GroupMembers", newGroupMembers); bool showDebug = UserCanEdit && GetAttributeValue("EnableDebug").AsBoolean(); lResultDebug.Visible = showDebug; if (showDebug) { lResultDebug.Text = mergeFields.lavaDebugInfo(_rockContext); } string template = GetAttributeValue("ResultLavaTemplate"); lResult.Text = template.ResolveMergeFields(mergeFields); // Will only redirect if a value is specifed NavigateToLinkedPage("ResultPage"); } }
// helper functional methods (like BindGrid(), etc.) private void ShowContent() { List<Dictionary<string, object>> scheduleSummaries = new List<Dictionary<string, object>>(); // get scheduled transactions for current user if ( CurrentPerson != null ) { var rockContext = new RockContext(); FinancialScheduledTransactionService transactionService = new FinancialScheduledTransactionService( rockContext ); var schedules = transactionService.Queryable( "ScheduledTransactionDetails.Account" ) .Where( s => s.AuthorizedPersonAlias.Person.GivingId == CurrentPerson.GivingId && s.IsActive == true ); foreach ( FinancialScheduledTransaction schedule in schedules ) { string errorMsgs = string.Empty; transactionService.GetStatus( schedule, out errorMsgs ); decimal totalAmount = 0; Dictionary<string, object> scheduleSummary = new Dictionary<string, object>(); scheduleSummary.Add("Id", schedule.Id); scheduleSummary.Add("Guid", schedule.Guid); scheduleSummary.Add("StartDate", schedule.StartDate); scheduleSummary.Add("EndDate", schedule.EndDate); scheduleSummary.Add("NextPaymentDate", schedule.NextPaymentDate); if ( schedule.NextPaymentDate.HasValue ) { scheduleSummary.Add( "DaysTillNextPayment", (schedule.NextPaymentDate.Value - DateTime.Now).Days ); } else { scheduleSummary.Add( "DaysTillNextPayment", null ); } DateTime? lastPaymentDate = schedule.Transactions.Max(t => t.TransactionDateTime); scheduleSummary.Add("LastPaymentDate", lastPaymentDate); if ( lastPaymentDate.HasValue ) { scheduleSummary.Add("DaysSinceLastPayment", (DateTime.Now - lastPaymentDate.Value).Days); } else { scheduleSummary.Add( "DaysSinceLastPayment", null ); } scheduleSummary.Add("CurrencyType", ( schedule.FinancialPaymentDetail != null && schedule.FinancialPaymentDetail.CurrencyTypeValue != null ) ? schedule.FinancialPaymentDetail.CurrencyTypeValue.Value : "" ); scheduleSummary.Add( "CreditCardType", ( schedule.FinancialPaymentDetail != null && schedule.FinancialPaymentDetail.CreditCardTypeValue != null) ? schedule.FinancialPaymentDetail.CreditCardTypeValue.Value : "" ); scheduleSummary.Add("UrlEncryptedKey", schedule.UrlEncodedKey); scheduleSummary.Add("Frequency", schedule.TransactionFrequencyValue.Value); scheduleSummary.Add("FrequencyDescription", schedule.TransactionFrequencyValue.Description); List<Dictionary<string, object>> summaryDetails = new List<Dictionary<string,object>>(); foreach ( FinancialScheduledTransactionDetail detail in schedule.ScheduledTransactionDetails ) { Dictionary<string, object> detailSummary = new Dictionary<string,object>(); detailSummary.Add("AccountId", detail.Id); detailSummary.Add("AccountName", detail.Account.Name); detailSummary.Add("Amount", detail.Amount); detailSummary.Add("Summary", detail.Summary); summaryDetails.Add( detailSummary ); totalAmount += detail.Amount; } scheduleSummary.Add("ScheduledAmount", totalAmount); scheduleSummary.Add( "TransactionDetails", summaryDetails ); scheduleSummaries.Add( scheduleSummary ); } rockContext.SaveChanges(); } // added linked pages to mergefields Dictionary<string, object> linkedPages = new Dictionary<string, object>(); linkedPages.Add( "ManageScheduledTransactionsPage", LinkedPageRoute( "ManageScheduledTransactionsPage" ) ); linkedPages.Add( "TransactionHistoryPage", LinkedPageRoute( "TransactionHistoryPage" ) ); linkedPages.Add( "TransactionEntryPage", LinkedPageRoute( "TransactionEntryPage" ) ); var scheduleValues = new Dictionary<string, object>(); scheduleValues.Add( "ScheduledTransactions", scheduleSummaries.ToList() ); scheduleValues.Add( "LinkedPages", linkedPages ); // TODO: When support for "Person" is not supported anymore (should use "CurrentPerson" instead), remove this line scheduleValues.Add( "Person", CurrentPerson ); scheduleValues.Add( "CurrentPerson", CurrentPerson ); string content = GetAttributeValue( "Template" ).ResolveMergeFields( scheduleValues ); // show merge fields if needed if ( GetAttributeValue( "EnableDebug" ).AsBoolean() && IsUserAuthorized( Authorization.EDIT ) ) { // TODO: When support for "Person" is not supported anymore (should use "CurrentPerson" instead), remove this line scheduleValues.Remove( "Person" ); content += scheduleValues.lavaDebugInfo(); } lContent.Text = content; }
/// <summary> /// Updates the list. /// </summary> private void UpdateList() { using ( var rockContext = new RockContext() ) { var searchSelections = new Dictionary<string, string>(); var connectionTypeId = GetAttributeValue( "ConnectionTypeId" ).AsInteger(); var connectionType = new ConnectionTypeService( rockContext ).Get( connectionTypeId ); var connectionOpportunityService = new ConnectionOpportunityService( rockContext ); var qrySearch = connectionOpportunityService.Queryable().Where( a => a.ConnectionTypeId == connectionTypeId && a.IsActive == true ).ToList(); if ( GetAttributeValue( "DisplayNameFilter" ).AsBoolean() ) { if ( !string.IsNullOrWhiteSpace( tbSearchName.Text ) ) { searchSelections.Add( "tbSearchName", tbSearchName.Text ); var searchTerms = tbSearchName.Text.ToLower().SplitDelimitedValues( true ); qrySearch = qrySearch.Where( o => searchTerms.Any( t => t.Contains( o.Name.ToLower() ) || o.Name.ToLower().Contains( t ) ) ).ToList(); } } if ( GetAttributeValue( "DisplayCampusFilter" ).AsBoolean() ) { var searchCampuses = cblCampus.SelectedValuesAsInt; if ( searchCampuses.Count > 0 ) { searchSelections.Add( "cblCampus", searchCampuses.AsDelimited("|") ); qrySearch = qrySearch.Where( o => o.ConnectionOpportunityCampuses.Any( c => searchCampuses.Contains( c.CampusId ) ) ).ToList(); } } if ( GetAttributeValue( "DisplayAttributeFilters" ).AsBoolean() ) { // Filter query by any configured attribute filters if ( AvailableAttributes != null && AvailableAttributes.Any() ) { var attributeValueService = new AttributeValueService( rockContext ); var parameterExpression = attributeValueService.ParameterExpression; foreach ( var attribute in AvailableAttributes ) { string filterControlId = "filter_" + attribute.Id.ToString(); var filterControl = phAttributeFilters.FindControl( filterControlId ); if ( filterControl != null ) { var filterValues = attribute.FieldType.Field.GetFilterValues( filterControl, attribute.QualifierValues, Rock.Reporting.FilterMode.SimpleFilter ); var expression = attribute.FieldType.Field.AttributeFilterExpression( attribute.QualifierValues, filterValues, parameterExpression ); if ( expression != null ) { searchSelections.Add( filterControlId, filterValues.ToJson() ); var attributeValues = attributeValueService .Queryable() .Where( v => v.Attribute.Id == attribute.Id ); attributeValues = attributeValues.Where( parameterExpression, expression, null ); qrySearch = qrySearch.Where( o => attributeValues.Select( v => v.EntityId ).Contains( o.Id ) ).ToList(); } } } } } string sessionKey = string.Format( "ConnectionSearch_{0}", this.BlockId ); Session[sessionKey] = searchSelections; var opportunities = qrySearch.OrderBy( s => s.PublicName ).ToList(); var mergeFields = new Dictionary<string, object>(); mergeFields.Add( "Opportunities", opportunities); mergeFields.Add( "CurrentPerson", CurrentPerson ); var pageReference = new PageReference( GetAttributeValue( "DetailPage" ), null ); mergeFields.Add( "DetailPage", BuildDetailPageUrl(pageReference.BuildUrl()) ); lOutput.Text = GetAttributeValue( "LavaTemplate" ).ResolveMergeFields( mergeFields ); if ( GetAttributeValue( "SetPageTitle" ).AsBoolean() ) { string pageTitle = "Connection"; RockPage.PageTitle = pageTitle; RockPage.BrowserTitle = String.Format( "{0} | {1}", pageTitle, RockPage.Site.Name ); RockPage.Header.Title = String.Format( "{0} | {1}", pageTitle, RockPage.Site.Name ); } // show debug info if ( GetAttributeValue( "EnableDebug" ).AsBoolean() && IsUserAuthorized( Authorization.EDIT ) ) { lDebug.Visible = true; lDebug.Text = mergeFields.lavaDebugInfo(); } } }
/// <summary> /// Handles the Click event of the btnRegister 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 btnRegister_Click( object sender, EventArgs e ) { if ( Page.IsValid ) { var rockContext = new RockContext(); var personService = new PersonService( rockContext ); Person person = null; Person spouse = null; Group family = null; GroupLocation homeLocation = null; var changes = new List<string>(); var spouseChanges = new List<string>(); var familyChanges = new List<string>(); // Only use current person if the name entered matches the current person's name and autofill mode is true if ( _autoFill ) { if ( CurrentPerson != null && tbFirstName.Text.Trim().Equals( CurrentPerson.FirstName.Trim(), StringComparison.OrdinalIgnoreCase ) && tbLastName.Text.Trim().Equals( CurrentPerson.LastName.Trim(), StringComparison.OrdinalIgnoreCase ) ) { person = personService.Get( CurrentPerson.Id ); } } // Try to find person by name/email if ( person == null ) { var matches = personService.GetByMatch( tbFirstName.Text.Trim(), tbLastName.Text.Trim(), tbEmail.Text.Trim() ); if ( matches.Count() == 1 ) { person = matches.First(); } } // Check to see if this is a new person if ( person == null ) { // If so, create the person and family record for the new person person = new Person(); person.FirstName = tbFirstName.Text.Trim(); person.LastName = tbLastName.Text.Trim(); person.Email = tbEmail.Text.Trim(); person.IsEmailActive = true; person.EmailPreference = EmailPreference.EmailAllowed; person.RecordTypeValueId = DefinedValueCache.Read( Rock.SystemGuid.DefinedValue.PERSON_RECORD_TYPE_PERSON.AsGuid() ).Id; person.ConnectionStatusValueId = _dvcConnectionStatus.Id; person.RecordStatusValueId = _dvcRecordStatus.Id; person.Gender = Gender.Unknown; family = PersonService.SaveNewPerson( person, rockContext, _group.CampusId, false ); } else { // updating current existing person History.EvaluateChange( changes, "Email", person.Email, tbEmail.Text ); person.Email = tbEmail.Text; // Get the current person's families var families = person.GetFamilies( rockContext ); // If address can being entered, look for first family with a home location if ( !IsSimple ) { foreach ( var aFamily in families ) { homeLocation = aFamily.GroupLocations .Where( l => l.GroupLocationTypeValueId == _homeAddressType.Id && l.IsMappedLocation ) .FirstOrDefault(); if ( homeLocation != null ) { family = aFamily; break; } } } // If a family wasn't found with a home location, use the person's first family if ( family == null ) { family = families.FirstOrDefault(); } } // If using a 'Full' view, save the phone numbers and address if ( !IsSimple ) { SetPhoneNumber( rockContext, person, pnHome, null, Rock.SystemGuid.DefinedValue.PERSON_PHONE_TYPE_HOME.AsGuid(), changes ); SetPhoneNumber( rockContext, person, pnCell, cbSms, Rock.SystemGuid.DefinedValue.PERSON_PHONE_TYPE_MOBILE.AsGuid(), changes ); string oldLocation = homeLocation != null ? homeLocation.Location.ToString() : string.Empty; string newLocation = string.Empty; var location = new LocationService( rockContext ).Get( acAddress.Street1, acAddress.Street2, acAddress.City, acAddress.State, acAddress.PostalCode, acAddress.Country ); if ( location != null ) { if ( homeLocation == null ) { homeLocation = new GroupLocation(); homeLocation.GroupLocationTypeValueId = _homeAddressType.Id; family.GroupLocations.Add( homeLocation ); } else { oldLocation = homeLocation.Location.ToString(); } homeLocation.Location = location; newLocation = location.ToString(); } else { if ( homeLocation != null ) { homeLocation.Location = null; family.GroupLocations.Remove( homeLocation ); new GroupLocationService( rockContext ).Delete( homeLocation ); } } History.EvaluateChange( familyChanges, "Home Location", oldLocation, newLocation ); // Check for the spouse if ( IsFullWithSpouse && !string.IsNullOrWhiteSpace(tbSpouseFirstName.Text) && !string.IsNullOrWhiteSpace(tbSpouseLastName.Text) ) { spouse = person.GetSpouse(); if ( spouse == null || !tbSpouseFirstName.Text.Trim().Equals( spouse.FirstName.Trim(), StringComparison.OrdinalIgnoreCase ) || !tbSpouseLastName.Text.Trim().Equals( spouse.LastName.Trim(), StringComparison.OrdinalIgnoreCase ) ) { spouse = new Person(); spouse.FirstName = tbSpouseFirstName.Text; History.EvaluateChange( spouseChanges, "First Name", string.Empty, spouse.FirstName ); spouse.LastName = tbSpouseLastName.Text; History.EvaluateChange( spouseChanges, "Last Name", string.Empty, spouse.LastName ); spouse.ConnectionStatusValueId = _dvcConnectionStatus.Id; spouse.RecordStatusValueId = _dvcRecordStatus.Id; spouse.Gender = Gender.Unknown; spouse.IsEmailActive = true; spouse.EmailPreference = EmailPreference.EmailAllowed; var groupMember = new GroupMember(); groupMember.GroupRoleId = _adultRole.Id; groupMember.Person = spouse; family.Members.Add( groupMember ); spouse.MaritalStatusValueId = _married.Id; person.MaritalStatusValueId = _married.Id; } History.EvaluateChange( changes, "Email", person.Email, tbEmail.Text ); spouse.Email = tbSpouseEmail.Text; SetPhoneNumber( rockContext, spouse, pnHome, null, Rock.SystemGuid.DefinedValue.PERSON_PHONE_TYPE_HOME.AsGuid(), spouseChanges ); SetPhoneNumber( rockContext, spouse, pnSpouseCell, cbSpouseSms, Rock.SystemGuid.DefinedValue.PERSON_PHONE_TYPE_MOBILE.AsGuid(), spouseChanges ); } } // Save the person/spouse and change history rockContext.SaveChanges(); HistoryService.SaveChanges( rockContext, typeof( Person ), Rock.SystemGuid.Category.HISTORY_PERSON_DEMOGRAPHIC_CHANGES.AsGuid(), person.Id, changes ); HistoryService.SaveChanges( rockContext, typeof( Person ), Rock.SystemGuid.Category.HISTORY_PERSON_FAMILY_CHANGES.AsGuid(), person.Id, familyChanges ); if ( spouse != null ) { HistoryService.SaveChanges( rockContext, typeof( Person ), Rock.SystemGuid.Category.HISTORY_PERSON_DEMOGRAPHIC_CHANGES.AsGuid(), spouse.Id, spouseChanges ); HistoryService.SaveChanges( rockContext, typeof( Person ), Rock.SystemGuid.Category.HISTORY_PERSON_FAMILY_CHANGES.AsGuid(), spouse.Id, familyChanges ); } // Check to see if a workflow should be launched for each person WorkflowType workflowType = null; Guid? workflowTypeGuid = GetAttributeValue( "Workflow" ).AsGuidOrNull(); if ( workflowTypeGuid.HasValue ) { var workflowTypeService = new WorkflowTypeService( rockContext ); workflowType = workflowTypeService.Get( workflowTypeGuid.Value ); } // Save the registrations ( and launch workflows ) var newGroupMembers = new List<GroupMember>(); AddPersonToGroup( rockContext, person, workflowType, newGroupMembers ); AddPersonToGroup( rockContext, spouse, workflowType, newGroupMembers ); // Show the results pnlView.Visible = false; pnlResult.Visible = true; // Show lava content var mergeFields = new Dictionary<string, object>(); mergeFields.Add( "Group", _group ); mergeFields.Add( "GroupMembers", newGroupMembers ); bool showDebug = UserCanEdit && GetAttributeValue( "EnableDebug" ).AsBoolean(); lResultDebug.Visible = showDebug; if ( showDebug ) { lResultDebug.Text = mergeFields.lavaDebugInfo( _rockContext ); } string template = GetAttributeValue( "ResultLavaTemplate" ); lResult.Text = template.ResolveMergeFields( mergeFields ); // Will only redirect if a value is specifed NavigateToLinkedPage( "ResultPage" ); } }
private void ListGroups() { RockContext rockContext = new RockContext(); var qry = new GroupMemberService(rockContext) .Queryable("Group") .Where( m => m.PersonId == CurrentPersonId && m.GroupMemberStatus == GroupMemberStatus.Active && m.Group.IsActive == true); List<Guid> includeGroupTypeGuids = GetAttributeValue( "IncludeGroupTypes" ).SplitDelimitedValues().Select( a => Guid.Parse( a ) ).ToList(); if ( includeGroupTypeGuids.Count > 0 ) { qry = qry.Where( t => includeGroupTypeGuids.Contains( t.Group.GroupType.Guid ) ); } List<Guid> excludeGroupTypeGuids = GetAttributeValue( "ExcludeGroupTypes" ).SplitDelimitedValues().Select( a => Guid.Parse( a ) ).ToList(); if ( excludeGroupTypeGuids.Count > 0 ) { qry = qry.Where( t => !excludeGroupTypeGuids.Contains( t.Group.GroupType.Guid ) ); } var groups = qry.Select( m => new GroupInvolvementSummary { Group = m.Group, Role = m.GroupRole.Name, IsLeader = m.GroupRole.IsLeader, GroupType = m.Group.GroupType.Name } ).ToList(); var mergeFields = new Dictionary<string, object>(); mergeFields.Add( "Groups", groups ); mergeFields.Add( "CurrentPerson", CurrentPerson ); var globalAttributeFields = Rock.Web.Cache.GlobalAttributesCache.GetMergeFields( CurrentPerson ); globalAttributeFields.ToList().ForEach( d => mergeFields.Add( d.Key, d.Value ) ); Dictionary<string, object> linkedPages = new Dictionary<string, object>(); linkedPages.Add( "DetailPage", LinkedPageUrl( "DetailPage", null ) ); mergeFields.Add( "LinkedPages", linkedPages ); string template = GetAttributeValue( "LavaTemplate" ); // show debug info bool enableDebug = GetAttributeValue( "EnableDebug" ).AsBoolean(); if ( enableDebug && IsUserAuthorized( Authorization.EDIT ) ) { lDebug.Visible = true; lDebug.Text = mergeFields.lavaDebugInfo(); } lContent.Text = template.ResolveMergeFields( mergeFields ); }
private void LoadPackages() { // get category int? categoryId = null; if ( !string.IsNullOrWhiteSpace( GetAttributeValue( "CategoryId" ) ) ) { categoryId = Convert.ToInt32(GetAttributeValue( "CategoryId" )); } else if ( !string.IsNullOrWhiteSpace( PageParameter( "CategoryId" ) ) ) { categoryId = Convert.ToInt32( PageParameter( "CategoryId" ) ); } string categoryName = PageParameter( "CategoryName" ); if ( GetAttributeValue( "SetPageTitle" ).AsBoolean() && !string.IsNullOrWhiteSpace(categoryName) ) { string pageTitle = "Items for " + categoryName; RockPage.PageTitle = pageTitle; RockPage.BrowserTitle = String.Format( "{0} | {1}", pageTitle, RockPage.Site.Name ); RockPage.Header.Title = String.Format( "{0} | {1}", pageTitle, RockPage.Site.Name ); } PackageService packageService = new PackageService(); var packages = packageService.GetAllPackages( categoryId ); var mergeFields = new Dictionary<string, object>(); mergeFields.Add( "CurrentPerson", CurrentPerson ); // add link to detail page Dictionary<string, object> linkedPages = new Dictionary<string, object>(); linkedPages.Add( "DetailPage", LinkedPageUrl( "DetailPage", null ) ); mergeFields.Add( "LinkedPages", linkedPages ); var globalAttributeFields = Rock.Web.Cache.GlobalAttributesCache.GetMergeFields( CurrentPerson ); globalAttributeFields.ToList().ForEach( d => mergeFields.Add( d.Key, d.Value ) ); mergeFields.Add( "Packages", packages ); lOutput.Text = GetAttributeValue( "LavaTemplate" ).ResolveMergeFields( mergeFields ); // show debug info if ( GetAttributeValue( "EnableDebug" ).AsBoolean() && IsUserAuthorized( Authorization.EDIT ) ) { lDebug.Visible = true; lDebug.Text = mergeFields.lavaDebugInfo(); ; } }
private void DisplayResults() { RockContext rockContext = new RockContext(); var statementYear = RockDateTime.Now.Year; if ( Request["StatementYear"] != null ) { Int32.TryParse( Request["StatementYear"].ToString(), out statementYear ); } FinancialTransactionDetailService financialTransactionDetailService = new FinancialTransactionDetailService( rockContext ); var qry = financialTransactionDetailService.Queryable().AsNoTracking() .Where( t=> t.Transaction.AuthorizedPersonAlias.Person.GivingId == CurrentPerson.GivingId); qry = qry.Where( t => t.Transaction.TransactionDateTime.Value.Year == statementYear ); if ( string.IsNullOrWhiteSpace( GetAttributeValue( "Accounts" ) ) ) { qry = qry.Where( t => t.Account.IsTaxDeductible ); } else { var accountGuids = GetAttributeValue( "Accounts" ).Split( ',' ).Select( Guid.Parse ).ToList(); qry = qry.Where( t => accountGuids.Contains( t.Account.Guid ) ); } qry = qry.OrderByDescending( t => t.Transaction.TransactionDateTime ); var mergeFields = new Dictionary<string, object>(); mergeFields.Add( "StatementStartDate", "1/1/" + statementYear.ToString() ); if ( statementYear == RockDateTime.Now.Year ) { mergeFields.Add( "StatementEndDate", RockDateTime.Now ); } else { mergeFields.Add( "StatementEndDate", "12/31/" + statementYear.ToString() ); } var familyGroupTypeId = GroupTypeCache.Read( Rock.SystemGuid.GroupType.GROUPTYPE_FAMILY ).Id; var groupMemberQry = new GroupMemberService( rockContext ).Queryable().Where( m => m.Group.GroupTypeId == familyGroupTypeId ); // get giving group members in order by family role (adult -> child) and then gender (male -> female) var givingGroup = new PersonService( rockContext ).Queryable().AsNoTracking() .Where( p => p.GivingId == CurrentPerson.GivingId ) .GroupJoin( groupMemberQry, p => p.Id, m => m.PersonId, (p, m) => new {p, m}) .SelectMany( x => x.m.DefaultIfEmpty(), (y,z) => new { Person = y.p, GroupMember = z} ) .Select( p => new { FirstName = p.Person.NickName, LastName = p.Person.LastName, FamilyRoleOrder = p.GroupMember.GroupRole.Order, Gender = p.Person.Gender, PersonId = p.Person.Id } ) .DistinctBy(p => p.PersonId) .OrderBy(p => p.FamilyRoleOrder).ThenBy(p => p.Gender) .ToList(); // make a list of person ids in the giving group List<int> givingGroupIdsOnly = new List<int>(); foreach ( var x in givingGroup ) { givingGroupIdsOnly.Add(x.PersonId); } string salutation = string.Empty; if (givingGroup.GroupBy(g => g.LastName).Count() == 1 ) { salutation = string.Join( ", ", givingGroup.Select( g => g.FirstName ) ) + " " + givingGroup.FirstOrDefault().LastName; if ( salutation.Contains( "," ) ) { salutation = salutation.ReplaceLastOccurrence( ",", " &" ); } } else { salutation = string.Join( ", ", givingGroup.Select( g => g.FirstName + " " + g.LastName ) ); if ( salutation.Contains( "," ) ) { salutation = salutation.ReplaceLastOccurrence( ",", " &" ); } } mergeFields.Add( "Salutation", salutation ); var homeAddress = CurrentPerson.GetHomeLocation(); if ( homeAddress != null ) { mergeFields.Add( "StreetAddress1", homeAddress.Street1 ); mergeFields.Add( "StreetAddress2", homeAddress.Street2 ); mergeFields.Add( "City", homeAddress.City ); mergeFields.Add( "State", homeAddress.State ); mergeFields.Add( "PostalCode", homeAddress.PostalCode ); mergeFields.Add( "Country", homeAddress.Country ); } else { mergeFields.Add( "StreetAddress1", string.Empty ); mergeFields.Add( "StreetAddress2", string.Empty ); mergeFields.Add( "City", string.Empty ); mergeFields.Add( "State", string.Empty ); mergeFields.Add( "PostalCode", string.Empty ); mergeFields.Add( "Country", string.Empty ); } mergeFields.Add( "TransactionDetails", qry.ToList() ); mergeFields.Add( "AccountSummary", qry.GroupBy( t => t.Account.Name ).Select( s => new AccountSummary { AccountName = s.Key, Total = s.Sum( a => a.Amount ), Order = s.Max(a => a.Account.Order) } ).OrderBy(s => s.Order )); // pledge information var pledges = new FinancialPledgeService( rockContext ).Queryable().AsNoTracking() .Where(p => p.PersonAlias.Person.GivingId == CurrentPerson.GivingId && (p.StartDate.Year == statementYear || p.EndDate.Year == statementYear)) .GroupBy(p => p.Account) .Select(g => new PledgeSummary { AccountId = g.Key.Id, AccountName = g.Key.Name, AmountPledged = g.Sum( p => p.TotalAmount ), PledgeStartDate = g.Min(p => p.StartDate), PledgeEndDate = g.Max( p => p.EndDate) } ) .ToList(); // add detailed pledge information foreach(var pledge in pledges ) { var adjustedPedgeEndDate = pledge.PledgeEndDate.Value.Date.AddHours( 23 ).AddMinutes( 59 ).AddSeconds( 59 ); pledge.AmountGiven = new FinancialTransactionDetailService( rockContext ).Queryable() .Where( t => t.AccountId == pledge.AccountId && givingGroupIdsOnly.Contains(t.Transaction.AuthorizedPersonAlias.PersonId) && t.Transaction.TransactionDateTime >= pledge.PledgeStartDate && t.Transaction.TransactionDateTime <= adjustedPedgeEndDate ) .Sum( t => t.Amount ); pledge.AmountRemaining = (pledge.AmountGiven > pledge.AmountPledged) ? 0 : (pledge.AmountPledged - pledge.AmountGiven); if ( pledge.AmountPledged > 0 ) { var test = (double)pledge.AmountGiven / (double)pledge.AmountPledged; pledge.PercentComplete = (int)((pledge.AmountGiven * 100) / pledge.AmountPledged); } } mergeFields.Add( "Pledges", pledges ); var template = GetAttributeValue( "LavaTemplate" ); lResults.Text = template.ResolveMergeFields( mergeFields ); // show debug info if ( GetAttributeValue( "EnableDebug" ).AsBoolean() && IsUserAuthorized( Authorization.EDIT ) ) { lDebug.Visible = true; lDebug.Text = mergeFields.lavaDebugInfo(); } }
public void ProcessRequest( HttpContext context ) { request = context.Request; response = context.Response; RockContext rockContext = new RockContext(); if ( request.HttpMethod != "GET" ) { response.Write( "Invalid request type." ); response.StatusCode = 200; return; } if ( request.QueryString["ChannelId"] != null ) { int channelId; int templateDefinedValueId; DefinedValueCache dvRssTemplate; string rssTemplate; if ( !int.TryParse( request.QueryString["ChannelId"] , out channelId )) { response.Write( "Invalid channel id." ); response.StatusCode = 200; return; } if ( request.QueryString["TemplateId"] == null || !int.TryParse( request.QueryString["TemplateId"], out templateDefinedValueId ) ) { dvRssTemplate = DefinedValueCache.Read( Rock.SystemGuid.DefinedValue.DEFAULT_RSS_CHANNEL ); } else { dvRssTemplate = DefinedValueCache.Read( templateDefinedValueId ); } rssTemplate = dvRssTemplate.GetAttributeValue( "Template" ); if ( request.QueryString["EnableDebug"] != null ) { // when in debug mode we need to export as html and linkin styles so that the debug info will be displayed string appPath = HttpContext.Current.Request.ApplicationPath; response.Write( "<html>" ); response.Write( "<head>" ); response.Write( string.Format( "<link rel='stylesheet' type='text/css' href='{0}Themes/Rock/Styles/bootstrap.css'>", appPath ) ); response.Write( string.Format( "<link rel='stylesheet' type='text/css' href='{0}Themes/Rock/Styles/theme.css'>", appPath ) ); response.Write( string.Format( "<script src='{0}Scripts/jquery-1.10.2.min.js'></script>", appPath ) ); response.Write( string.Format( "<script src='{0}Scripts/bootstrap.min.js'></script>", appPath ) ); response.Write( "</head>" ); response.Write( "<body style='padding: 24px;'>" ); } else { if ( string.IsNullOrWhiteSpace( dvRssTemplate.GetAttributeValue( "MimeType" ) ) ) { response.ContentType = "application/rss+xml"; } else { response.ContentType = dvRssTemplate.GetAttributeValue( "MimeType" ); } } ContentChannelService channelService = new ContentChannelService( rockContext ); var channel = channelService.Queryable( "ContentChannelType" ).Where( c => c.Id == channelId ).FirstOrDefault(); if ( channel != null ) { if ( channel.EnableRss ) { // load merge fields var mergeFields = new Dictionary<string, object>(); mergeFields.Add( "Campuses", CampusCache.All() ); mergeFields.Add( "Channel", channel ); Dictionary<string, object> requestObjects = new Dictionary<string, object>(); requestObjects.Add( "Scheme", request.Url.Scheme ); requestObjects.Add( "Host", request.Url.Host ); requestObjects.Add( "Authority", request.Url.Authority ); requestObjects.Add( "LocalPath", request.Url.LocalPath ); requestObjects.Add( "AbsoluteUri", request.Url.AbsoluteUri ); requestObjects.Add( "AbsolutePath", request.Url.AbsolutePath ); requestObjects.Add( "Port", request.Url.Port ); requestObjects.Add( "Query", request.Url.Query ); requestObjects.Add( "OriginalString", request.Url.OriginalString ); mergeFields.Add( "Request", requestObjects ); var globalAttributeFields = Rock.Web.Cache.GlobalAttributesCache.GetMergeFields(null); globalAttributeFields.ToList().ForEach( d => mergeFields.Add( d.Key, d.Value ) ); // check for new rss item limit if ( request.QueryString["Count"] != null ) { int.TryParse( request.QueryString["Count"], out rssItemLimit ); } // get channel items ContentChannelItemService contentService = new ContentChannelItemService( rockContext ); var content = contentService.Queryable( "ContentChannelType" ) .Where( c => c.ContentChannelId == channel.Id && (c.Status == ContentChannelItemStatus.Approved || c.ContentChannel.RequiresApproval == false) && c.StartDateTime <= RockDateTime.Now ) .OrderByDescending( c => c.StartDateTime ) .Take( rssItemLimit ); if ( channel.ContentChannelType.DateRangeType == ContentChannelDateType.DateRange ) { if ( channel.ContentChannelType.IncludeTime ) { content = content.Where( c => c.ExpireDateTime >= RockDateTime.Now ); } else { content = content.Where( c => c.ExpireDateTime > RockDateTime.Today ); } } foreach ( var item in content ) { item.Content = item.Content.ResolveMergeFields( mergeFields ); // resolve any relative links var globalAttributes = Rock.Web.Cache.GlobalAttributesCache.Read(); string publicAppRoot = globalAttributes.GetValue( "PublicApplicationRoot" ).EnsureTrailingForwardslash(); item.Content = item.Content.Replace( @" src=""/", @" src=""" + publicAppRoot ); item.Content = item.Content.Replace( @" href=""/", @" href=""" + publicAppRoot ); // get item attributes and add them as elements to the feed item.LoadAttributes( rockContext ); foreach ( var attributeValue in item.AttributeValues ) { attributeValue.Value.Value = attributeValue.Value.Value.ResolveMergeFields( mergeFields ); } } mergeFields.Add( "Items", content ); mergeFields.Add( "RockVersion", Rock.VersionInfo.VersionInfo.GetRockProductVersionNumber() ); // show debug info if ( request.QueryString["EnableDebug"] != null ) { response.Write( mergeFields.lavaDebugInfo() ); response.Write( "<pre>" ); response.Write( WebUtility.HtmlEncode(rssTemplate.ResolveMergeFields( mergeFields )) ); response.Write( "</pre>" ); response.Write( "</body>" ); response.Write( "</html" ); } else { response.Write( rssTemplate.ResolveMergeFields( mergeFields ) ); } } else { response.Write( "RSS is not enabled for this channel." ); response.StatusCode = 200; return; } } else { response.StatusCode = 200; response.Write( "Invalid channel id." ); response.StatusCode = 200; return; } } else { response.Write( "A ChannelId is required." ); response.StatusCode = 200; return; } }
/// <summary> /// Loads and displays the event item occurrences /// </summary> private void BindData() { var rockContext = new RockContext(); var eventItemOccurrenceService = new EventItemOccurrenceService( rockContext ); // Grab events var qry = eventItemOccurrenceService .Queryable( "EventItem, EventItem.EventItemAudiences,Schedule" ) .Where( m => m.EventItem.EventCalendarItems.Any( i => i.EventCalendarId == _calendarId ) && m.EventItem.IsActive && m.EventItem.IsApproved ); // Filter by campus List<int> campusIds = cblCampus.Items.OfType<ListItem>().Where( l => l.Selected ).Select( a => a.Value.AsInteger() ).ToList(); if ( campusIds.Any() ) { qry = qry .Where( c => !c.CampusId.HasValue || // All campusIds.Contains( c.CampusId.Value ) ); } // Filter by Category List<int> categories = cblCategory.Items.OfType<ListItem>().Where( l => l.Selected ).Select( a => a.Value.AsInteger() ).ToList(); if ( categories.Any() ) { qry = qry .Where( i => i.EventItem.EventItemAudiences .Any( c => categories.Contains( c.DefinedValueId ) ) ); } // Get the beginning and end dates var today = RockDateTime.Today; var filterStart = FilterStartDate.HasValue ? FilterStartDate.Value : today; var monthStart = new DateTime( filterStart.Year, filterStart.Month, 1 ); var rangeStart = monthStart.AddMonths( -1 ); var rangeEnd = monthStart.AddMonths( 2 ); var beginDate = FilterStartDate.HasValue ? FilterStartDate.Value : rangeStart; var endDate = FilterEndDate.HasValue ? FilterEndDate.Value : rangeEnd; endDate = endDate.AddDays( 1 ).AddMilliseconds( -1 ); // Get the occurrences var occurrences = qry.ToList(); var occurrencesWithDates = occurrences .Select( o => new EventOccurrenceDate { EventItemOccurrence = o, Dates = o.GetStartTimes( beginDate, endDate ).ToList() } ) .Where( d => d.Dates.Any() ) .ToList(); CalendarEventDates = new List<DateTime>(); var eventOccurrenceSummaries = new List<EventOccurrenceSummary>(); foreach ( var occurrenceDates in occurrencesWithDates ) { var eventItemOccurrence = occurrenceDates.EventItemOccurrence; foreach ( var datetime in occurrenceDates.Dates ) { if ( eventItemOccurrence.Schedule.EffectiveEndDate.HasValue && ( eventItemOccurrence.Schedule.EffectiveStartDate != eventItemOccurrence.Schedule.EffectiveEndDate ) ) { var multiDate = eventItemOccurrence.Schedule.EffectiveStartDate; while ( multiDate.HasValue && ( multiDate.Value < eventItemOccurrence.Schedule.EffectiveEndDate.Value )) { CalendarEventDates.Add( multiDate.Value.Date ); multiDate = multiDate.Value.AddDays( 1 ); } } else { CalendarEventDates.Add( datetime.Date ); } if ( datetime >= beginDate && datetime < endDate ) { eventOccurrenceSummaries.Add( new EventOccurrenceSummary { EventItemOccurrence = eventItemOccurrence, Name = eventItemOccurrence.EventItem.Name, DateTime = datetime, Date = datetime.ToShortDateString(), Time = datetime.ToShortTimeString(), Campus = eventItemOccurrence.Campus != null ? eventItemOccurrence.Campus.Name : "All Campuses", Location = eventItemOccurrence.Campus != null ? eventItemOccurrence.Campus.Name : "All Campuses", LocationDescription = eventItemOccurrence.Location, Description = eventItemOccurrence.EventItem.Description, Summary = eventItemOccurrence.EventItem.Summary, OccurrenceNote = eventItemOccurrence.Note.SanitizeHtml(), DetailPage = String.IsNullOrWhiteSpace( eventItemOccurrence.EventItem.DetailsUrl ) ? null : eventItemOccurrence.EventItem.DetailsUrl } ); } } } var eventSummaries = eventOccurrenceSummaries .OrderBy( e => e.DateTime ) .GroupBy( e => e.Name ) .Select( e => e.ToList() ) .ToList(); eventOccurrenceSummaries = eventOccurrenceSummaries .OrderBy( e => e.DateTime ) .ThenBy( e => e.Name ) .ToList(); var mergeFields = new Dictionary<string, object>(); mergeFields.Add( "TimeFrame", ViewMode ); mergeFields.Add( "DetailsPage", LinkedPageUrl( "DetailsPage", null ) ); mergeFields.Add( "EventItems", eventSummaries ); mergeFields.Add( "EventItemOccurrences", eventOccurrenceSummaries ); mergeFields.Add( "CurrentPerson", CurrentPerson ); lOutput.Text = GetAttributeValue( "LavaTemplate" ).ResolveMergeFields( mergeFields ); // show debug info if ( GetAttributeValue( "EnableDebug" ).AsBoolean() && IsUserAuthorized( Authorization.EDIT ) ) { lDebug.Visible = true; lDebug.Text = mergeFields.lavaDebugInfo(); } else { lDebug.Visible = false; lDebug.Text = string.Empty; } }
/// <summary> /// Shows the details. /// </summary> private void ShowDetails() { _rockContext = _rockContext ?? new RockContext(); if ( _group != null ) { // Show lava content var mergeFields = new Dictionary<string, object>(); mergeFields.Add( "Group", _group ); bool showDebug = UserCanEdit && GetAttributeValue( "EnableDebug" ).AsBoolean(); lLavaOutputDebug.Visible = showDebug; if ( showDebug ) { lLavaOutputDebug.Text = mergeFields.lavaDebugInfo( _rockContext ); } string template = GetAttributeValue( "LavaTemplate" ); lLavaOverview.Text = template.ResolveMergeFields( mergeFields ); // Set visibility based on selected mode if ( IsFullWithSpouse ) { pnlCol1.RemoveCssClass( "col-md-12" ).AddCssClass( "col-md-6" ); } else { pnlCol1.RemoveCssClass( "col-md-6" ).AddCssClass( "col-md-12" ); } pnlCol2.Visible = IsFullWithSpouse; pnlHomePhone.Visible = !IsSimple; pnlCellPhone.Visible = !IsSimple; acAddress.Visible = !IsSimple; if ( CurrentPersonId.HasValue && _autoFill ) { var personService = new PersonService( _rockContext ); Person person = personService .Queryable( "PhoneNumbers.NumberTypeValue" ).AsNoTracking() .FirstOrDefault( p => p.Id == CurrentPersonId.Value ); tbFirstName.Text = CurrentPerson.FirstName; tbLastName.Text = CurrentPerson.LastName; tbEmail.Text = CurrentPerson.Email; if ( !IsSimple ) { Guid homePhoneType = Rock.SystemGuid.DefinedValue.PERSON_PHONE_TYPE_HOME.AsGuid(); var homePhone = person.PhoneNumbers .FirstOrDefault( n => n.NumberTypeValue.Guid.Equals( homePhoneType ) ); if ( homePhone != null ) { pnHome.Text = homePhone.Number; } Guid cellPhoneType = Rock.SystemGuid.DefinedValue.PERSON_PHONE_TYPE_MOBILE.AsGuid(); var cellPhone = person.PhoneNumbers .FirstOrDefault( n => n.NumberTypeValue.Guid.Equals( cellPhoneType ) ); if ( cellPhone != null ) { pnCell.Text = cellPhone.Number; cbSms.Checked = cellPhone.IsMessagingEnabled; } var homeAddress = person.GetHomeLocation(); if ( homeAddress != null ) { acAddress.SetValues( homeAddress ); } if ( IsFullWithSpouse ) { var spouse = person.GetSpouse( _rockContext ); if ( spouse != null ) { tbSpouseFirstName.Text = spouse.FirstName; tbSpouseLastName.Text = spouse.LastName; tbSpouseEmail.Text = spouse.Email; var spouseCellPhone = spouse.PhoneNumbers .FirstOrDefault( n => n.NumberTypeValue.Guid.Equals( cellPhoneType ) ); if ( spouseCellPhone != null ) { pnSpouseCell.Text = spouseCellPhone.Number; cbSpouseSms.Checked = spouseCellPhone.IsMessagingEnabled; } } } } } if ( GetAttributeValue( "PreventOvercapacityRegistrations" ).AsBoolean() ) { int openGroupSpots = 2; int openRoleSpots = 2; // If the group has a GroupCapacity, check how far we are from hitting that. if ( _group.GroupCapacity.HasValue ) { openGroupSpots = _group.GroupCapacity.Value - _group.Members.Count(); } // When someone registers for a group on the front-end website, they automatically get added with the group's default // GroupTypeRole. If that role exists and has a MaxCount, check how far we are from hitting that. if ( _defaultGroupRole != null && _defaultGroupRole.MaxCount.HasValue ) { openRoleSpots = _defaultGroupRole.MaxCount.Value - _group.Members.Where( m => m.GroupRoleId == _defaultGroupRole.Id ).Count(); } // Between the group's GroupCapacity and DefaultGroupRole.MaxCount, grab the one we're closest to hitting, and how close we are to // hitting it. int openSpots = Math.Min( openGroupSpots, openRoleSpots ); // If there's only one spot open, disable the spouse fields and display a warning message. if ( openSpots == 1 ) { tbSpouseFirstName.Enabled = false; tbSpouseLastName.Enabled = false; pnSpouseCell.Enabled = false; cbSpouseSms.Enabled = false; tbSpouseEmail.Enabled = false; nbWarning.Text = "This group is near its capacity. Only one individual can register."; nbWarning.Visible = true; } // If no spots are open, display a message that says so. if ( openSpots <= 0 ) { nbNotice.Text = "This group is at or exceeds capacity."; nbNotice.Visible = true; pnlView.Visible = false; } } } }
/// <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(); } }
private void DisplayResults() { RockContext rockContext = new RockContext(); var statementYear = RockDateTime.Now.Year; if (Request["StatementYear"] != null) { Int32.TryParse(Request["StatementYear"].ToString(), out statementYear); } FinancialTransactionDetailService financialTransactionDetailService = new FinancialTransactionDetailService(rockContext); Person targetPerson = CurrentPerson; List <Guid> excludedCurrencyTypes = new List <Guid>(); if (!string.IsNullOrWhiteSpace(GetAttributeValue("ExcludedCurrencyTypes"))) { excludedCurrencyTypes = GetAttributeValue("ExcludedCurrencyTypes").Split(',').Select(Guid.Parse).ToList(); } if (GetAttributeValue("AllowPersonQuerystring").AsBoolean()) { if (!string.IsNullOrWhiteSpace(Request["PersonGuid"])) { Guid?personGuid = Request["PersonGuid"].AsGuidOrNull(); if (personGuid.HasValue) { var person = new PersonService(rockContext).Get(personGuid.Value); if (person != null) { targetPerson = person; } } } } // fetch all the possible PersonAliasIds that have this GivingID to help optimize the SQL var personAliasIds = new PersonAliasService(rockContext).Queryable().Where(a => a.Person.GivingId == targetPerson.GivingId).Select(a => a.Id).ToList(); // get the transactions for the person or all the members in the person's giving group (Family) var qry = financialTransactionDetailService.Queryable().AsNoTracking() .Where(t => t.Transaction.AuthorizedPersonAliasId.HasValue && personAliasIds.Contains(t.Transaction.AuthorizedPersonAliasId.Value)); qry = qry.Where(t => t.Transaction.TransactionDateTime.Value.Year == statementYear); if (string.IsNullOrWhiteSpace(GetAttributeValue("Accounts"))) { qry = qry.Where(t => t.Account.IsTaxDeductible); } else { var accountGuids = GetAttributeValue("Accounts").Split(',').Select(Guid.Parse).ToList(); qry = qry.Where(t => accountGuids.Contains(t.Account.Guid)); } if (excludedCurrencyTypes.Count > 0) { qry = qry.Where(t => !excludedCurrencyTypes.Contains(t.Transaction.FinancialPaymentDetail.CurrencyTypeValue.Guid)); } qry = qry.OrderByDescending(t => t.Transaction.TransactionDateTime); var mergeFields = new Dictionary <string, object>(); mergeFields.Add("StatementStartDate", "1/1/" + statementYear.ToString()); if (statementYear == RockDateTime.Now.Year) { mergeFields.Add("StatementEndDate", RockDateTime.Now); } else { mergeFields.Add("StatementEndDate", "12/31/" + statementYear.ToString()); } var familyGroupTypeId = GroupTypeCache.Read(Rock.SystemGuid.GroupType.GROUPTYPE_FAMILY).Id; var groupMemberQry = new GroupMemberService(rockContext).Queryable().Where(m => m.Group.GroupTypeId == familyGroupTypeId); // get giving group members in order by family role (adult -> child) and then gender (male -> female) var givingGroup = new PersonService(rockContext).Queryable().AsNoTracking() .Where(p => p.GivingId == targetPerson.GivingId) .GroupJoin( groupMemberQry, p => p.Id, m => m.PersonId, (p, m) => new { p, m }) .SelectMany(x => x.m.DefaultIfEmpty(), (y, z) => new { Person = y.p, GroupMember = z }) .Select(p => new { FirstName = p.Person.NickName, LastName = p.Person.LastName, FamilyRoleOrder = p.GroupMember.GroupRole.Order, Gender = p.Person.Gender, PersonId = p.Person.Id }) .DistinctBy(p => p.PersonId) .OrderBy(p => p.FamilyRoleOrder).ThenBy(p => p.Gender) .ToList(); string salutation = string.Empty; if (givingGroup.GroupBy(g => g.LastName).Count() == 1) { salutation = string.Join(", ", givingGroup.Select(g => g.FirstName)) + " " + givingGroup.FirstOrDefault().LastName; if (salutation.Contains(",")) { salutation = salutation.ReplaceLastOccurrence(",", " &"); } } else { salutation = string.Join(", ", givingGroup.Select(g => g.FirstName + " " + g.LastName)); if (salutation.Contains(",")) { salutation = salutation.ReplaceLastOccurrence(",", " &"); } } mergeFields.Add("Salutation", salutation); var homeAddress = targetPerson.GetHomeLocation(); if (homeAddress != null) { mergeFields.Add("StreetAddress1", homeAddress.Street1); mergeFields.Add("StreetAddress2", homeAddress.Street2); mergeFields.Add("City", homeAddress.City); mergeFields.Add("State", homeAddress.State); mergeFields.Add("PostalCode", homeAddress.PostalCode); mergeFields.Add("Country", homeAddress.Country); } else { mergeFields.Add("StreetAddress1", string.Empty); mergeFields.Add("StreetAddress2", string.Empty); mergeFields.Add("City", string.Empty); mergeFields.Add("State", string.Empty); mergeFields.Add("PostalCode", string.Empty); mergeFields.Add("Country", string.Empty); } mergeFields.Add("TransactionDetails", qry.ToList()); mergeFields.Add("AccountSummary", qry.GroupBy(t => t.Account.Name).Select(s => new AccountSummary { AccountName = s.Key, Total = s.Sum(a => a.Amount), Order = s.Max(a => a.Account.Order) }).OrderBy(s => s.Order)); // pledge information var pledges = new FinancialPledgeService(rockContext).Queryable().AsNoTracking() .Where(p => p.PersonAliasId.HasValue && personAliasIds.Contains(p.PersonAliasId.Value)) .GroupBy(p => p.Account) .Select(g => new PledgeSummary { AccountId = g.Key.Id, AccountName = g.Key.Name, AmountPledged = g.Sum(p => p.TotalAmount), PledgeStartDate = g.Min(p => p.StartDate), PledgeEndDate = g.Max(p => p.EndDate) }) .ToList(); // add detailed pledge information foreach (var pledge in pledges) { var adjustedPedgeEndDate = pledge.PledgeEndDate.Value.Date.AddDays(1); pledge.AmountGiven = new FinancialTransactionDetailService(rockContext).Queryable() .Where(t => t.AccountId == pledge.AccountId && t.Transaction.AuthorizedPersonAliasId.HasValue && personAliasIds.Contains(t.Transaction.AuthorizedPersonAliasId.Value) && t.Transaction.TransactionDateTime >= pledge.PledgeStartDate && t.Transaction.TransactionDateTime < adjustedPedgeEndDate) .Sum(t => ( decimal? )t.Amount) ?? 0; pledge.AmountRemaining = (pledge.AmountGiven > pledge.AmountPledged) ? 0 : (pledge.AmountPledged - pledge.AmountGiven); if (pledge.AmountPledged > 0) { var test = (double)pledge.AmountGiven / (double)pledge.AmountPledged; pledge.PercentComplete = (int)((pledge.AmountGiven * 100) / pledge.AmountPledged); } } mergeFields.Add("Pledges", pledges); var template = GetAttributeValue("LavaTemplate"); lResults.Text = template.ResolveMergeFields(mergeFields); // show debug info if (GetAttributeValue("EnableDebug").AsBoolean() && IsUserAuthorized(Authorization.EDIT)) { lDebug.Visible = true; lDebug.Text = mergeFields.lavaDebugInfo(); } }
/// <summary> /// Raises the <see cref="E:System.Web.UI.Control.Load" /> event. /// </summary> /// <param name="e">The <see cref="T:System.EventArgs" /> object that contains the event data.</param> protected override void OnLoad(EventArgs e) { base.OnLoad(e); if (!Page.IsPostBack) { RockContext rockContext = new RockContext(); Group group = null; Guid personGuid = Guid.Empty; // get group id from url if (Request["GroupId"] != null) { int groupId = 0; if (Int32.TryParse(Request["GroupId"], out groupId)) { group = new GroupService(rockContext).Queryable().Where(g => g.Id == groupId).FirstOrDefault(); } } else { Guid groupGuid = Guid.Empty; if (Guid.TryParse(GetAttributeValue("DefaultGroup"), out groupGuid)) { group = new GroupService(rockContext).Queryable().Where(g => g.Guid == groupGuid).FirstOrDefault();; } } if (group == null) { lAlerts.Text = "Could not determine the group to add to."; return; } // get person Person person = null; if (!string.IsNullOrWhiteSpace(Request["PersonGuid"])) { person = new PersonService(rockContext).Get(Request["PersonGuid"].AsGuid()); } if (person == null) { lAlerts.Text += "A person could not be found for the identifier provided."; return; } // hide alert divAlert.Visible = false; // get status var groupMemberStatus = this.GetAttributeValue("GroupMemberStatus").ConvertToEnum <GroupMemberStatus>(GroupMemberStatus.Active); // load merge fields var mergeFields = new Dictionary <string, object>(); mergeFields.Add("Group", group); mergeFields.Add("Person", person); mergeFields.Add("CurrentPerson", CurrentPerson); // show debug info? bool enableDebug = GetAttributeValue("EnableDebug").AsBoolean(); if (enableDebug && IsUserAuthorized(Authorization.EDIT)) { lDebug.Visible = true; lDebug.Text = mergeFields.lavaDebugInfo(); } var groupMemberService = new GroupMemberService(rockContext); var groupMemberList = groupMemberService.Queryable() .Where(m => m.GroupId == group.Id && m.PersonId == person.Id) .ToList(); if (groupMemberList.Count > 0) { foreach (var groupMember in groupMemberList) { groupMemberService.Delete(groupMember); rockContext.SaveChanges(); } lContent.Text = GetAttributeValue("SuccessMessage").ResolveMergeFields(mergeFields); } else { if (GetAttributeValue("WarnWhenNotInGroup").AsBoolean()) { lContent.Text = GetAttributeValue("NotInGroupMessage").ResolveMergeFields(mergeFields); } else { lContent.Text = GetAttributeValue("SuccessMessage").ResolveMergeFields(mergeFields); } } } }
/// <summary> /// Shows the details. /// </summary> private void ShowDetails() { _rockContext = _rockContext ?? new RockContext(); if ( _group != null ) { // Show lava content var mergeFields = new Dictionary<string, object>(); mergeFields.Add( "Group", _group ); bool showDebug = UserCanEdit && GetAttributeValue( "EnableDebug" ).AsBoolean(); lLavaOutputDebug.Visible = showDebug; if ( showDebug ) { lLavaOutputDebug.Text = mergeFields.lavaDebugInfo( _rockContext ); } string template = GetAttributeValue( "LavaTemplate" ); lLavaOverview.Text = template.ResolveMergeFields( mergeFields ); // Set visibility based on selected mode if ( IsFullWithSpouse ) { pnlCol1.RemoveCssClass( "col-md-12" ).AddCssClass( "col-md-6" ); } else { pnlCol1.RemoveCssClass( "col-md-6" ).AddCssClass( "col-md-12" ); } pnlCol2.Visible = IsFullWithSpouse; pnlHomePhone.Visible = !IsSimple; pnlCellPhone.Visible = !IsSimple; acAddress.Visible = !IsSimple; if ( CurrentPersonId.HasValue && _autoFill ) { var personService = new PersonService( _rockContext ); Person person = personService .Queryable( "PhoneNumbers.NumberTypeValue" ).AsNoTracking() .FirstOrDefault( p => p.Id == CurrentPersonId.Value ); tbFirstName.Text = CurrentPerson.FirstName; tbLastName.Text = CurrentPerson.LastName; tbEmail.Text = CurrentPerson.Email; if ( !IsSimple ) { Guid homePhoneType = Rock.SystemGuid.DefinedValue.PERSON_PHONE_TYPE_HOME.AsGuid(); var homePhone = person.PhoneNumbers .FirstOrDefault( n => n.NumberTypeValue.Guid.Equals( homePhoneType ) ); if ( homePhone != null ) { pnHome.Text = homePhone.Number; } Guid cellPhoneType = Rock.SystemGuid.DefinedValue.PERSON_PHONE_TYPE_MOBILE.AsGuid(); var cellPhone = person.PhoneNumbers .FirstOrDefault( n => n.NumberTypeValue.Guid.Equals( cellPhoneType ) ); if ( cellPhone != null ) { pnCell.Text = cellPhone.Number; cbSms.Checked = cellPhone.IsMessagingEnabled; } var homeAddress = person.GetHomeLocation(); if ( homeAddress != null ) { acAddress.SetValues( homeAddress ); } if ( IsFullWithSpouse ) { var spouse = person.GetSpouse( _rockContext ); if ( spouse != null ) { tbSpouseFirstName.Text = spouse.FirstName; tbSpouseLastName.Text = spouse.LastName; tbSpouseEmail.Text = spouse.Email; var spouseCellPhone = spouse.PhoneNumbers .FirstOrDefault( n => n.NumberTypeValue.Guid.Equals( cellPhoneType ) ); if ( spouseCellPhone != null ) { pnSpouseCell.Text = spouseCellPhone.Number; cbSpouseSms.Checked = spouseCellPhone.IsMessagingEnabled; } } } } } } }
/// <summary> /// Shows the success panel /// </summary> private void ShowSuccess( int registrationId ) { lSuccessTitle.Text = "Congratulations"; lSuccess.Text = "You have succesfully completed this registration."; try { using ( var rockContext = new RockContext() ) { var registration = new RegistrationService( rockContext ) .Queryable( "RegistrationInstance.RegistrationTemplate" ) .FirstOrDefault( r => r.Id == registrationId ); if ( registration != null && registration.RegistrationInstance != null && registration.RegistrationInstance.RegistrationTemplate != null ) { var template = registration.RegistrationInstance.RegistrationTemplate; var mergeFields = new Dictionary<string, object>(); mergeFields.Add( "CurrentPerson", CurrentPerson ); mergeFields.Add( "RegistrationInstance", registration.RegistrationInstance ); mergeFields.Add( "Registration", registration ); if ( template != null && !string.IsNullOrWhiteSpace( template.SuccessTitle ) ) { lSuccessTitle.Text = template.SuccessTitle.ResolveMergeFields( mergeFields ); } else { lSuccessTitle.Text = "Congratulations"; } if ( template != null && !string.IsNullOrWhiteSpace( template.SuccessText ) ) { lSuccess.Text = template.SuccessText.ResolveMergeFields( mergeFields ); } else { lSuccess.Text = "You have succesfully completed this " + RegistrationTerm.ToLower(); } // show debug info if ( GetAttributeValue( "EnableDebug" ).AsBoolean() && UserCanEdit ) { lSuccessDebug.Visible = true; lSuccessDebug.Text = mergeFields.lavaDebugInfo(); } } } } catch ( Exception ex ) { ExceptionLogService.LogException( ex, Context, this.RockPage.PageId, this.RockPage.Site.Id, CurrentPersonAlias ); } SetPanel( 3 ); }
public void ProcessRequest(HttpContext context) { request = context.Request; response = context.Response; RockContext rockContext = new RockContext(); if (request.HttpMethod != "GET") { response.Write("Invalid request type."); response.StatusCode = 200; return; } if (request.QueryString["ChannelId"] != null) { int channelId; int templateDefinedValueId; DefinedValueCache dvRssTemplate; string rssTemplate; if (!int.TryParse(request.QueryString["ChannelId"], out channelId)) { response.Write("Invalid channel id."); response.StatusCode = 200; return; } if (request.QueryString["TemplateId"] == null || !int.TryParse(request.QueryString["TemplateId"], out templateDefinedValueId)) { dvRssTemplate = DefinedValueCache.Read(Rock.SystemGuid.DefinedValue.DEFAULT_RSS_CHANNEL); } else { dvRssTemplate = DefinedValueCache.Read(templateDefinedValueId); } rssTemplate = dvRssTemplate.GetAttributeValue("Template"); if (request.QueryString["EnableDebug"] != null) { // when in debug mode we need to export as html and linkin styles so that the debug info will be displayed string appPath = HttpContext.Current.Request.ApplicationPath; response.Write("<html>"); response.Write("<head>"); response.Write(string.Format("<link rel='stylesheet' type='text/css' href='{0}Themes/Rock/Styles/bootstrap.css'>", appPath)); response.Write(string.Format("<link rel='stylesheet' type='text/css' href='{0}Themes/Rock/Styles/theme.css'>", appPath)); response.Write(string.Format("<script src='{0}Scripts/jquery-1.10.2.min.js'></script>", appPath)); response.Write(string.Format("<script src='{0}Scripts/bootstrap.min.js'></script>", appPath)); response.Write("</head>"); response.Write("<body style='padding: 24px;'>"); } else { if (string.IsNullOrWhiteSpace(dvRssTemplate.GetAttributeValue("MimeType"))) { response.ContentType = "application/rss+xml"; } else { response.ContentType = dvRssTemplate.GetAttributeValue("MimeType"); } } ContentChannelService channelService = new ContentChannelService(rockContext); var channel = channelService.Queryable("ContentChannelType").Where(c => c.Id == channelId).FirstOrDefault(); if (channel != null) { if (channel.EnableRss) { // load merge fields var mergeFields = new Dictionary <string, object>(); mergeFields.Add("Campuses", CampusCache.All()); mergeFields.Add("Channel", channel); Dictionary <string, object> requestObjects = new Dictionary <string, object>(); requestObjects.Add("Scheme", request.Url.Scheme); requestObjects.Add("Host", request.Url.Host); requestObjects.Add("Authority", request.Url.Authority); requestObjects.Add("LocalPath", request.Url.LocalPath); requestObjects.Add("AbsoluteUri", request.Url.AbsoluteUri); requestObjects.Add("AbsolutePath", request.Url.AbsolutePath); requestObjects.Add("Port", request.Url.Port); requestObjects.Add("Query", request.Url.Query); requestObjects.Add("OriginalString", request.Url.OriginalString); mergeFields.Add("Request", requestObjects); var globalAttributeFields = Rock.Web.Cache.GlobalAttributesCache.GetMergeFields(null); globalAttributeFields.ToList().ForEach(d => mergeFields.Add(d.Key, d.Value)); // check for new rss item limit if (request.QueryString["Count"] != null) { int.TryParse(request.QueryString["Count"], out rssItemLimit); } // get channel items ContentChannelItemService contentService = new ContentChannelItemService(rockContext); var content = contentService.Queryable("ContentChannelType") .Where(c => c.ContentChannelId == channel.Id && c.Status == ContentChannelItemStatus.Approved && c.StartDateTime <= RockDateTime.Now) .OrderByDescending(c => c.StartDateTime) .Take(rssItemLimit); if (channel.ContentChannelType.DateRangeType == ContentChannelDateType.DateRange) { content = content.Where(c => c.ExpireDateTime >= RockDateTime.Now); } foreach (var item in content) { item.Content = item.Content.ResolveMergeFields(mergeFields); // resolve any relative links var globalAttributes = Rock.Web.Cache.GlobalAttributesCache.Read(); string publicAppRoot = globalAttributes.GetValue("PublicApplicationRoot").EnsureTrailingForwardslash(); item.Content = item.Content.Replace(@" src=""/", @" src=""" + publicAppRoot); item.Content = item.Content.Replace(@" href=""/", @" href=""" + publicAppRoot); // get item attributes and add them as elements to the feed item.LoadAttributes(rockContext); foreach (var attributeValue in item.AttributeValues) { attributeValue.Value.Value = attributeValue.Value.Value.ResolveMergeFields(mergeFields); } } mergeFields.Add("Items", content); mergeFields.Add("RockVersion", Rock.VersionInfo.VersionInfo.GetRockProductVersionNumber()); // show debug info if (request.QueryString["EnableDebug"] != null) { response.Write(mergeFields.lavaDebugInfo()); response.Write("<pre>"); response.Write(WebUtility.HtmlEncode(rssTemplate.ResolveMergeFields(mergeFields))); response.Write("</pre>"); response.Write("</body>"); response.Write("</html"); } else { response.Write(rssTemplate.ResolveMergeFields(mergeFields)); } } else { response.Write("RSS is not enabled for this channel."); response.StatusCode = 200; return; } } else { response.StatusCode = 200; response.Write("Invalid channel id."); response.StatusCode = 200; return; } } else { response.Write("A ChannelId is required."); response.StatusCode = 200; return; } }
/// <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(); } }
private void Render() { PageCache currentPage = PageCache.Read( RockPage.PageId ); PageCache rootPage = null; Guid pageGuid = Guid.Empty; if ( Guid.TryParse( GetAttributeValue( ROOT_PAGE ), out pageGuid ) ) { rootPage = PageCache.Read( pageGuid ); } // If a root page was not found, use current page if ( rootPage == null ) { rootPage = currentPage; } int levelsDeep = Convert.ToInt32( GetAttributeValue( NUM_LEVELS ) ); Dictionary<string, string> pageParameters = null; if ( GetAttributeValue( "IncludeCurrentParameters" ).AsBoolean() ) { pageParameters = CurrentPageReference.Parameters; } NameValueCollection queryString = null; if ( GetAttributeValue( "IncludeCurrentQueryString" ).AsBoolean() ) { queryString = CurrentPageReference.QueryString; } // Get list of pages in curren't page's heirarchy var pageHeirarchy = new List<int>(); if ( currentPage != null ) { pageHeirarchy = currentPage.GetPageHierarchy().Select( p => p.Id ).ToList(); } var pageProperties = new Dictionary<string, object>(); using ( var rockContext = new RockContext() ) { pageProperties.Add( "Page", rootPage.GetMenuProperties( levelsDeep, CurrentPerson, rockContext, pageHeirarchy, pageParameters, queryString ) ); } string content = GetTemplate().Render( Hash.FromDictionary( pageProperties ) ); // check for errors if ( content.Contains( "error" ) ) { content = "<div class='alert alert-warning'><h4>Warning</h4>" + content + "</div>"; } phContent.Controls.Clear(); phContent.Controls.Add( new LiteralControl( content ) ); // add debug info if ( GetAttributeValue( "EnableDebug" ).AsBoolean() && IsUserAuthorized( Authorization.EDIT ) ) { StringBuilder tipInfo = new StringBuilder(); tipInfo.Append( "<p /><div class='alert alert-success' style='clear: both;'><h4>Page Menu Tips</h4>" ); tipInfo.Append( "<p><em>Note:</em> If a page or group of pages is not in the data above check the following: <ul>" ); tipInfo.Append( "<li>The parent page has 'Show Child Pages' enabled in the 'Page Properties' > 'Display Settings'</li>" ); tipInfo.Append( "<li>Check the 'Display Settings' on the child pages</li>" ); tipInfo.Append( "<li>Check the security of the child pages</li>" ); tipInfo.Append( "</ul><br /></p>" ); tipInfo.Append( "</div>" ); phContent.Controls.Add( new LiteralControl( tipInfo.ToString() + pageProperties.lavaDebugInfo() ) ); } }
/// <summary> /// Binds the grid. /// </summary> private void ShowResults() { // Get the group types that we're interested in Guid? groupTypeGuid = GetAttributeValue( "GroupType" ).AsGuidOrNull(); if ( !groupTypeGuid.HasValue ) { ShowError( "A valid Group Type is required." ); return; } gGroups.Columns[1].Visible = GetAttributeValue( "ShowDescription" ).AsBoolean(); gGroups.Columns[2].Visible = GetAttributeValue( "ShowSchedule" ).AsBoolean(); gGroups.Columns[3].Visible = GetAttributeValue( "ShowCount" ).AsBoolean(); gGroups.Columns[4].Visible = GetAttributeValue( "ShowAge" ).AsBoolean(); bool showProximity = GetAttributeValue( "ShowProximity" ).AsBoolean(); gGroups.Columns[5].Visible = showProximity; // Distance // Get query of groups of the selected group type var rockContext = new RockContext(); var groupService = new GroupService( rockContext ); var groupQry = groupService .Queryable( "GroupLocations.Location" ) .Where( g => g.IsActive && g.GroupType.Guid.Equals( groupTypeGuid.Value ) && g.IsPublic ); var groupParameterExpression = groupService.ParameterExpression; var schedulePropertyExpression = Expression.Property( groupParameterExpression, "Schedule" ); var dowFilterControl = phFilterControls.FindControl( "filter_dow" ); if ( dowFilterControl != null ) { var field = FieldTypeCache.Read( Rock.SystemGuid.FieldType.DAY_OF_WEEK ).Field; var filterValues = field.GetFilterValues( dowFilterControl, null, Rock.Reporting.FilterMode.SimpleFilter ); var expression = field.PropertyFilterExpression( null, filterValues, schedulePropertyExpression, "WeeklyDayOfWeek", typeof( DayOfWeek? ) ); groupQry = groupQry.Where( groupParameterExpression, expression, null ); } var timeFilterControl = phFilterControls.FindControl( "filter_time" ); if ( timeFilterControl != null ) { var field = FieldTypeCache.Read( Rock.SystemGuid.FieldType.TIME ).Field; var filterValues = field.GetFilterValues( timeFilterControl, null, Rock.Reporting.FilterMode.SimpleFilter ); var expression = field.PropertyFilterExpression( null, filterValues, schedulePropertyExpression, "WeeklyTimeOfDay", typeof( TimeSpan? ) ); groupQry = groupQry.Where( groupParameterExpression, expression, null ); } // Filter query by any configured attribute filters if ( AttributeFilters != null && AttributeFilters.Any() ) { var attributeValueService = new AttributeValueService( rockContext ); var parameterExpression = attributeValueService.ParameterExpression; foreach ( var attribute in AttributeFilters ) { var filterControl = phFilterControls.FindControl( "filter_" + attribute.Id.ToString() ); if ( filterControl != null ) { var filterValues = attribute.FieldType.Field.GetFilterValues( filterControl, attribute.QualifierValues, Rock.Reporting.FilterMode.SimpleFilter ); var expression = attribute.FieldType.Field.AttributeFilterExpression( attribute.QualifierValues, filterValues, parameterExpression ); if ( expression != null ) { var attributeValues = attributeValueService .Queryable() .Where( v => v.Attribute.Id == attribute.Id ); attributeValues = attributeValues.Where( parameterExpression, expression, null ); groupQry = groupQry.Where( w => attributeValues.Select( v => v.EntityId ).Contains( w.Id ) ); } } } } List<GroupLocation> fences = null; List<Group> groups = null; // Run query to get list of matching groups SortProperty sortProperty = gGroups.SortProperty; if ( sortProperty != null ) { groups = groupQry.Sort( sortProperty ).ToList(); } else { groups = groupQry.OrderBy( g => g.Name ).ToList(); } int? fenceGroupTypeId = GetGroupTypeId( GetAttributeValue( "GeofencedGroupType" ).AsGuidOrNull() ); bool showMap = GetAttributeValue( "ShowMap" ).AsBoolean(); bool showFences = showMap && GetAttributeValue( "ShowFence" ).AsBoolean(); var distances = new Dictionary<int, double>(); // If we care where these groups are located... if ( fenceGroupTypeId.HasValue || showMap || showProximity ) { // Get the location for the address entered Location personLocation = null; if ( fenceGroupTypeId.HasValue || showProximity ) { personLocation = new LocationService( rockContext ) .Get( acAddress.Street1, acAddress.Street2, acAddress.City, acAddress.State, acAddress.PostalCode, acAddress.Country ); } // If showing a map, and person's location was found, save a mapitem for this location FinderMapItem personMapItem = null; if ( showMap && personLocation != null && personLocation.GeoPoint != null ) { var infoWindow = string.Format( @" <div style='width:250px'> <div class='clearfix'> <strong>Your Location</strong> <br/>{0} </div> </div> ", personLocation.FormattedHtmlAddress ); personMapItem = new FinderMapItem( personLocation ); personMapItem.Name = "Your Location"; personMapItem.InfoWindow = HttpUtility.HtmlEncode( infoWindow.Replace( Environment.NewLine, string.Empty ).Replace( "\n", string.Empty ).Replace( "\t", string.Empty ) ); } // Get the locations, and optionally calculate the distance for each of the groups var groupLocations = new List<GroupLocation>(); foreach ( var group in groups ) { foreach ( var groupLocation in group.GroupLocations .Where( gl => gl.Location.GeoPoint != null ) ) { groupLocations.Add( groupLocation ); if ( showProximity && personLocation != null && personLocation.GeoPoint != null ) { double meters = groupLocation.Location.GeoPoint.Distance( personLocation.GeoPoint ) ?? 0.0D; double miles = meters * Location.MilesPerMeter; // If this group already has a distance calculated, see if this location is closer and if so, use it instead if ( distances.ContainsKey( group.Id ) ) { if ( distances[group.Id] < miles ) { distances[group.Id] = miles; } } else { distances.Add( group.Id, miles ); } } } } // If groups should be limited by a geofence var fenceMapItems = new List<MapItem>(); if ( fenceGroupTypeId.HasValue ) { fences = new List<GroupLocation>(); if ( personLocation != null && personLocation.GeoPoint != null ) { fences = new GroupLocationService( rockContext ) .Queryable( "Group,Location" ) .Where( gl => gl.Group.GroupTypeId == fenceGroupTypeId && gl.Location.GeoFence != null && personLocation.GeoPoint.Intersects( gl.Location.GeoFence ) ) .ToList(); } // Limit the group locations to only those locations inside one of the fences groupLocations = groupLocations .Where( gl => fences.Any( f => gl.Location.GeoPoint.Intersects( f.Location.GeoFence ) ) ) .ToList(); // Limit the groups to the those that still contain a valid location groups = groups .Where( g => groupLocations.Any( gl => gl.GroupId == g.Id ) ) .ToList(); // If the map and fences should be displayed, create a map item for each fence if ( showMap && showFences ) { foreach ( var fence in fences ) { var mapItem = new FinderMapItem( fence.Location ); mapItem.EntityTypeId = EntityTypeCache.Read( "Rock.Model.Group" ).Id; mapItem.EntityId = fence.GroupId; mapItem.Name = fence.Group.Name; fenceMapItems.Add( mapItem ); } } } // if not sorting by ColumnClick and SortByDistance, then sort the groups by distance if ( gGroups.SortProperty == null && GetAttributeValue( "SortByDistance" ).AsBoolean() ) { // only show groups with a known location, and sort those by distance groups = groups.Where( a => distances.Select( b => b.Key ).Contains( a.Id ) ).ToList(); groups = groups.OrderBy( a => distances[a.Id] ).ThenBy( a => a.Name ).ToList(); } // if limiting by PageSize, limit to the top X groups int? pageSize = ddlPageSize.SelectedValue.AsIntegerOrNull(); if ( pageSize.HasValue && pageSize > 0 ) { groups = groups.Take( pageSize.Value ).ToList(); } // If a map is to be shown if ( showMap && groups.Any() ) { Template template = Template.Parse( GetAttributeValue( "MapInfo" ) ); bool showDebug = UserCanEdit && GetAttributeValue( "MapInfoDebug" ).AsBoolean(); lMapInfoDebug.Visible = showDebug; // Add mapitems for all the remaining valid group locations var groupMapItems = new List<MapItem>(); foreach ( var gl in groupLocations ) { var group = groups.Where( g => g.Id == gl.GroupId ).FirstOrDefault(); if ( group != null ) { // Resolve info window lava template var linkedPageParams = new Dictionary<string, string> { { "GroupId", group.Id.ToString() } }; var mergeFields = new Dictionary<string, object>(); mergeFields.Add( "Group", gl.Group ); mergeFields.Add( "Location", gl.Location ); Dictionary<string, object> linkedPages = new Dictionary<string, object>(); linkedPages.Add( "GroupDetailPage", LinkedPageRoute( "GroupDetailPage" ) ); if ( _targetPersonGuid != Guid.Empty ) { linkedPages.Add( "RegisterPage", LinkedPageUrl( "RegisterPage", _urlParms ) ); } else { linkedPages.Add( "RegisterPage", LinkedPageUrl( "RegisterPage", null ) ); } mergeFields.Add( "LinkedPages", linkedPages ); // add collection of allowed security actions Dictionary<string, object> securityActions = new Dictionary<string, object>(); securityActions.Add( "View", group.IsAuthorized( Authorization.VIEW, CurrentPerson ) ); securityActions.Add( "Edit", group.IsAuthorized( Authorization.EDIT, CurrentPerson ) ); securityActions.Add( "Administrate", group.IsAuthorized( Authorization.ADMINISTRATE, CurrentPerson ) ); mergeFields.Add( "AllowedActions", securityActions ); string infoWindow = template.Render( Hash.FromDictionary( mergeFields ) ); if ( showDebug ) { lMapInfoDebug.Text = mergeFields.lavaDebugInfo( null, "<span class='label label-info'>Lava used for the map window.</span>", "" ); showDebug = false; } // Add a map item for group var mapItem = new FinderMapItem( gl.Location ); mapItem.EntityTypeId = EntityTypeCache.Read( "Rock.Model.Group" ).Id; mapItem.EntityId = group.Id; mapItem.Name = group.Name; mapItem.InfoWindow = HttpUtility.HtmlEncode( infoWindow.Replace( Environment.NewLine, string.Empty ).Replace( "\n", string.Empty ).Replace( "\t", string.Empty ) ); groupMapItems.Add( mapItem ); } } // Show the map Map( personMapItem, fenceMapItems, groupMapItems ); pnlMap.Visible = true; } else { pnlMap.Visible = false; } } else { pnlMap.Visible = false; } // Should a lava output be displayed if ( GetAttributeValue( "ShowLavaOutput" ).AsBoolean() ) { string template = GetAttributeValue( "LavaOutput" ); var mergeFields = new Dictionary<string, object>(); if ( fences != null ) { mergeFields.Add( "Fences", fences.Select( f => f.Group ).ToList() ); } else { mergeFields.Add( "Fences", new Dictionary<string, object>() ); } mergeFields.Add( "Groups", groups ); Dictionary<string, object> linkedPages = new Dictionary<string, object>(); linkedPages.Add( "GroupDetailPage", LinkedPageUrl( "GroupDetailPage", null ) ); if ( _targetPersonGuid != Guid.Empty ) { linkedPages.Add( "RegisterPage", LinkedPageUrl( "RegisterPage", _urlParms ) ); } else { linkedPages.Add( "RegisterPage", LinkedPageUrl( "RegisterPage", null ) ); } mergeFields.Add( "LinkedPages", linkedPages ); lLavaOverview.Text = template.ResolveMergeFields( mergeFields ); bool showDebug = UserCanEdit && GetAttributeValue( "LavaOutputDebug" ).AsBoolean(); lLavaOutputDebug.Visible = showDebug; if ( showDebug ) { lLavaOutputDebug.Text = mergeFields.lavaDebugInfo( null, "<span class='label label-info'>Lava used for the summary info.</span>" ); } pnlLavaOutput.Visible = true; } else { pnlLavaOutput.Visible = false; } // Should a grid be displayed if ( GetAttributeValue( "ShowGrid" ).AsBoolean() ) { pnlGrid.Visible = true; // Save the groups into the grid's object list since it is not being bound to actual group objects gGroups.ObjectList = new Dictionary<string, object>(); groups.ForEach( g => gGroups.ObjectList.Add( g.Id.ToString(), g ) ); // Bind the grid gGroups.DataSource = groups.Select( g => { var qryMembers = new GroupMemberService( rockContext ).Queryable().Where( a => a.GroupId == g.Id ); var groupType = GroupTypeCache.Read( g.GroupTypeId ); return new { Id = g.Id, Name = g.Name, GroupTypeName = groupType.Name, GroupOrder = g.Order, GroupTypeOrder = groupType.Order, Description = g.Description, IsSystem = g.IsSystem, IsActive = g.IsActive, GroupRole = string.Empty, DateAdded = DateTime.MinValue, Schedule = g.Schedule, MemberCount = qryMembers.Count(), AverageAge = Math.Round( qryMembers.Select( m => m.Person.BirthDate ).ToList().Select( a => Person.GetAge( a ) ).Average() ?? 0.0D ), Distance = distances.Where( d => d.Key == g.Id ) .Select( d => d.Value ).FirstOrDefault() }; } ).ToList(); gGroups.DataBind(); } else { pnlGrid.Visible = false; } // Show the results pnlResults.Visible = true; }
/// <summary> /// Shows the details. /// </summary> private void ShowDetails() { _rockContext = _rockContext ?? new RockContext(); if (_group != null) { // Show lava content var mergeFields = new Dictionary <string, object>(); mergeFields.Add("Group", _group); bool showDebug = UserCanEdit && GetAttributeValue("EnableDebug").AsBoolean(); lLavaOutputDebug.Visible = showDebug; if (showDebug) { lLavaOutputDebug.Text = mergeFields.lavaDebugInfo(_rockContext); } string template = GetAttributeValue("LavaTemplate"); lLavaOverview.Text = template.ResolveMergeFields(mergeFields); // Set visibility based on selected mode if (IsFullWithSpouse) { pnlCol1.RemoveCssClass("col-md-12").AddCssClass("col-md-6"); } else { pnlCol1.RemoveCssClass("col-md-6").AddCssClass("col-md-12"); } pnlCol2.Visible = IsFullWithSpouse; pnlHomePhone.Visible = !IsSimple; pnlCellPhone.Visible = !IsSimple; acAddress.Visible = !IsSimple; if (CurrentPersonId.HasValue && _autoFill) { var personService = new PersonService(_rockContext); Person person = personService .Queryable("PhoneNumbers.NumberTypeValue").AsNoTracking() .FirstOrDefault(p => p.Id == CurrentPersonId.Value); tbFirstName.Text = CurrentPerson.FirstName; tbLastName.Text = CurrentPerson.LastName; tbEmail.Text = CurrentPerson.Email; if (!IsSimple) { Guid homePhoneType = Rock.SystemGuid.DefinedValue.PERSON_PHONE_TYPE_HOME.AsGuid(); var homePhone = person.PhoneNumbers .FirstOrDefault(n => n.NumberTypeValue.Guid.Equals(homePhoneType)); if (homePhone != null) { pnHome.Text = homePhone.Number; } Guid cellPhoneType = Rock.SystemGuid.DefinedValue.PERSON_PHONE_TYPE_MOBILE.AsGuid(); var cellPhone = person.PhoneNumbers .FirstOrDefault(n => n.NumberTypeValue.Guid.Equals(cellPhoneType)); if (cellPhone != null) { pnCell.Text = cellPhone.Number; cbSms.Checked = cellPhone.IsMessagingEnabled; } var homeAddress = person.GetHomeLocation(); if (homeAddress != null) { acAddress.SetValues(homeAddress); } if (IsFullWithSpouse) { var spouse = person.GetSpouse(_rockContext); if (spouse != null) { tbSpouseFirstName.Text = spouse.FirstName; tbSpouseLastName.Text = spouse.LastName; tbSpouseEmail.Text = spouse.Email; var spouseCellPhone = spouse.PhoneNumbers .FirstOrDefault(n => n.NumberTypeValue.Guid.Equals(cellPhoneType)); if (spouseCellPhone != null) { pnSpouseCell.Text = spouseCellPhone.Number; cbSpouseSms.Checked = spouseCellPhone.IsMessagingEnabled; } } } } } } }
private void LoadCategories() { string errorResponse = string.Empty; PackageCategoryService packageCategoryService = new PackageCategoryService(); var categories = packageCategoryService.GetCategories(out errorResponse); // check for errors ErrorCheck( errorResponse ); 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 ) ); mergeFields.Add( "Categories", categories ); // add link to detail page Dictionary<string, object> linkedPages = new Dictionary<string, object>(); linkedPages.Add( "DetailPage", LinkedPageUrl( "DetailPage", null ) ); mergeFields.Add( "LinkedPages", linkedPages ); lOutput.Text = GetAttributeValue( "LavaTemplate" ).ResolveMergeFields( mergeFields ); // show debug info if ( GetAttributeValue( "EnableDebug" ).AsBoolean() && IsUserAuthorized( Authorization.EDIT ) ) { lDebug.Visible = true; lDebug.Text = mergeFields.lavaDebugInfo(); } }
private void LoadFeed() { string feedUrl = GetAttributeValue("RSSFeedUrl"); Dictionary <string, string> messages = new Dictionary <string, string>(); bool isError = false; try { Dictionary <string, object> feedDictionary = SyndicationFeedHelper.GetFeed(feedUrl, GetAttributeValue("DetailPage"), GetAttributeValue("CacheDuration").AsInteger(), ref messages, ref isError); if (feedDictionary != null) { int articlesPerPage = GetAttributeValue("Resultsperpage").AsInteger(); int currentPage = 0; string baseUrl = new PageReference(RockPage.PageId).BuildUrl(); int.TryParse(PageParameter("articlepage"), out currentPage); if (feedDictionary.ContainsKey("ResultsPerPage")) { feedDictionary["ResultsPerPage"] = articlesPerPage; } else { feedDictionary.Add("ResultsPerPage", articlesPerPage); } if (feedDictionary.ContainsKey("CurrentPage")) { feedDictionary["CurrentPage"] = currentPage; } else { feedDictionary.Add("CurrentPage", currentPage); } if (feedDictionary.ContainsKey("BaseUrl")) { feedDictionary["BaseUrl"] = baseUrl; } else { feedDictionary.Add("BaseUrl", baseUrl); } if (!String.IsNullOrWhiteSpace(GetAttributeValue("RSSFeedUrl")) && GetAttributeValue("IncludeRSSLink").AsBoolean()) { string rssLink = string.Format("<link rel=\"alternate\" type=\"application/rss+xml\" title=\"{0}\" href=\"{1}\" />", feedDictionary.ContainsKey("title") ? feedDictionary["title"].ToString() : "RSS", GetAttributeValue("RSSFeedUrl")); Page.Header.Controls.Add(new LiteralControl(rssLink)); } // rearrange the dictionary for cleaning purposes if (feedDictionary.ContainsKey("entry")) { var item = feedDictionary["entry"]; if (item != null) { feedDictionary.Remove("entry"); feedDictionary["Entries"] = item; } } // remove the link item if (feedDictionary.ContainsKey("link")) { var item = feedDictionary["link"]; if (item != null) { feedDictionary.Remove("link"); } } string content = String.Empty; if (GetAttributeValue("EnableDebug").AsBoolean() && IsUserAuthorized(Authorization.EDIT)) { content = feedDictionary.lavaDebugInfo(); } else { content = GetTemplate().Render(Hash.FromDictionary(feedDictionary)); } if (content.Contains("No such template")) { System.Text.RegularExpressions.Match match = System.Text.RegularExpressions.Regex.Match(GetAttributeValue("Template"), @"'([^']*)"); if (match.Success) { messages.Add("Warning", string.Format("Could not find the template _{0}.liquid in {1}.", match.Groups[1].Value, ResolveRockUrl("~~/Assets/Liquid"))); isError = true; } else { messages.Add("Warning", "Unable to parse the template name from settings."); isError = true; } } else { phRSSFeed.Controls.Clear(); phRSSFeed.Controls.Add(new LiteralControl(content)); } pnlContent.Visible = true; } } catch (Exception ex) { if (IsUserAuthorized(Authorization.ADMINISTRATE)) { throw ex; } else { messages.Add("exception", "An exception has occurred."); } } if (messages.Count > 0) { if (IsUserAuthorized(Authorization.ADMINISTRATE)) { SetNotificationBox(messages.FirstOrDefault().Key, messages.FirstOrDefault().Value, isError ? NotificationBoxType.Warning : NotificationBoxType.Info); } else { SetNotificationBox("Content not available", "Oops. The requested content is not currently available. Please try again later."); } } }
private void DisplayDetails() { int eventItemOccurrenceId = 0; // get the calendarItem id if ( !string.IsNullOrWhiteSpace( PageParameter( "EventOccurrenceId" ) ) ) { eventItemOccurrenceId = Convert.ToInt32( PageParameter( "EventOccurrenceId" ) ); } if ( eventItemOccurrenceId > 0 ) { var eventItemOccurrenceService = new EventItemOccurrenceService( new RockContext() ); var qry = eventItemOccurrenceService .Queryable( "EventItem, EventItem.Photo, Campus, Linkages" ) .Where( i => i.Id == eventItemOccurrenceId ); var eventItemOccurrence = qry.FirstOrDefault(); var mergeFields = new Dictionary<string, object>(); mergeFields.Add( "RegistrationPage", LinkedPageUrl( "RegistrationPage", null ) ); var campusEntityType = EntityTypeCache.Read( "Rock.Model.Campus" ); var contextCampus = RockPage.GetCurrentContext( campusEntityType ) as Campus; if ( contextCampus != null ) { mergeFields.Add( "CampusContext", contextCampus ); } mergeFields.Add( "EventItemOccurrence", eventItemOccurrence ); mergeFields.Add( "Event", eventItemOccurrence != null ? eventItemOccurrence.EventItem : null ); mergeFields.Add( "CurrentPerson", CurrentPerson ); lOutput.Text = GetAttributeValue( "LavaTemplate" ).ResolveMergeFields( mergeFields ); if ( GetAttributeValue( "SetPageTitle" ).AsBoolean() ) { string pageTitle = eventItemOccurrence != null ? eventItemOccurrence.EventItem.Name : "Event"; RockPage.PageTitle = pageTitle; RockPage.BrowserTitle = String.Format( "{0} | {1}", pageTitle, RockPage.Site.Name ); RockPage.Header.Title = String.Format( "{0} | {1}", pageTitle, RockPage.Site.Name ); } // show debug info if ( GetAttributeValue( "EnableDebug" ).AsBoolean() && IsUserAuthorized( Authorization.EDIT ) ) { lDebug.Visible = true; lDebug.Text = mergeFields.lavaDebugInfo(); } } else { lOutput.Text = "<div class='alert alert-warning'>No event was available from the querystring.</div>"; } }
private void LoadPromos() { string errorResponse = string.Empty; PromoService promoService = new PromoService(); var promos = new List<Promo>(); // get category int? categoryId = null; if ( !string.IsNullOrWhiteSpace( GetAttributeValue( "CategoryId" ) ) ) { categoryId = Convert.ToInt32(GetAttributeValue( "CategoryId" )); } // get promo type bool isTopFree = false; bool isTopPaid = false; bool isFeatured = false; string promoType = GetAttributeValue( "PromoType" ); //"Top Paid, Top Free, Featured" switch ( promoType ) { case "Top Paid": isTopPaid = true; break; case "Top Free": isTopFree = true; break; case "Featured": isFeatured = true; break; } promos = promoService.GetPromos( categoryId, out errorResponse, isTopFree, isFeatured, isTopPaid ); // check for errors ErrorCheck( errorResponse ); 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 ) ); mergeFields.Add( "Promos", promos ); // add link to detail page Dictionary<string, object> linkedPages = new Dictionary<string, object>(); linkedPages.Add( "DetailPage", LinkedPageUrl( "DetailPage", null ) ); mergeFields.Add( "LinkedPages", linkedPages ); lOutput.Text = GetAttributeValue( "LavaTemplate" ).ResolveMergeFields( mergeFields ); // show debug info if ( GetAttributeValue( "EnableDebug" ).AsBoolean() && IsUserAuthorized( Authorization.EDIT ) ) { lDebug.Visible = true; lDebug.Text = mergeFields.lavaDebugInfo(); } }
private void DisplayDetails() { int eventItemOccurrenceId = 0; RockContext rockContext = new RockContext(); // get the calendarItem id if ( !string.IsNullOrWhiteSpace( PageParameter( "EventOccurrenceId" ) ) ) { eventItemOccurrenceId = Convert.ToInt32( PageParameter( "EventOccurrenceId" ) ); } if ( eventItemOccurrenceId > 0 ) { var eventItemOccurrenceService = new EventItemOccurrenceService( rockContext ); var qry = eventItemOccurrenceService .Queryable( "EventItem, EventItem.Photo, Campus, Linkages" ) .Where( i => i.Id == eventItemOccurrenceId ); var eventItemOccurrence = qry.FirstOrDefault(); var mergeFields = new Dictionary<string, object>(); mergeFields.Add( "RegistrationPage", LinkedPageRoute( "RegistrationPage" ) ); var campusEntityType = EntityTypeCache.Read( "Rock.Model.Campus" ); var contextCampus = RockPage.GetCurrentContext( campusEntityType ) as Campus; if ( contextCampus != null ) { mergeFields.Add( "CampusContext", contextCampus ); } // determine if the registration is full var maxRegistrantCount = 0; var currentRegistrationCount = 0; var linkage = eventItemOccurrence.Linkages.FirstOrDefault(); if (linkage != null ) { if (linkage.RegistrationInstance != null ) { if ( linkage.RegistrationInstance.MaxAttendees != 0 ) { maxRegistrantCount = linkage.RegistrationInstance.MaxAttendees; } } if ( maxRegistrantCount != 0 ) { currentRegistrationCount = new RegistrationRegistrantService( rockContext ).Queryable().AsNoTracking() .Where( r => r.Registration.RegistrationInstanceId == linkage.RegistrationInstanceId && r.OnWaitList == false ) .Count(); } } mergeFields.Add( "RegistrationStatusLabel", (maxRegistrantCount - currentRegistrationCount > 0) ? "Register" : "Join Wait List"); mergeFields.Add( "EventItemOccurrence", eventItemOccurrence ); mergeFields.Add( "Event", eventItemOccurrence != null ? eventItemOccurrence.EventItem : null ); mergeFields.Add( "CurrentPerson", CurrentPerson ); lOutput.Text = GetAttributeValue( "LavaTemplate" ).ResolveMergeFields( mergeFields ); if ( GetAttributeValue( "SetPageTitle" ).AsBoolean() ) { string pageTitle = eventItemOccurrence != null ? eventItemOccurrence.EventItem.Name : "Event"; RockPage.PageTitle = pageTitle; RockPage.BrowserTitle = String.Format( "{0} | {1}", pageTitle, RockPage.Site.Name ); RockPage.Header.Title = String.Format( "{0} | {1}", pageTitle, RockPage.Site.Name ); } // show debug info if ( GetAttributeValue( "EnableDebug" ).AsBoolean() && IsUserAuthorized( Authorization.EDIT ) ) { lDebug.Visible = true; lDebug.Text = mergeFields.lavaDebugInfo(); } } else { lOutput.Text = "<div class='alert alert-warning'>No event was available from the querystring.</div>"; } }
/// <summary> /// Loads the content. /// </summary> private void LoadContent() { var rockContext = new RockContext(); var eventCalendarGuid = GetAttributeValue("EventCalendar").AsGuid(); var eventCalendar = new EventCalendarService(rockContext).Get(eventCalendarGuid); if (eventCalendar == null) { lMessages.Text = "<div class='alert alert-warning'>No event calendar is configured for this block.</div>"; lContent.Text = string.Empty; return; } else { lMessages.Text = string.Empty; } var eventItemOccurrenceService = new EventItemOccurrenceService(rockContext); // Grab events // NOTE: Do not use AsNoTracking() so that things can be lazy loaded if needed var qry = eventItemOccurrenceService .Queryable("EventItem, EventItem.EventItemAudiences,Schedule") .Where(m => m.EventItem.EventCalendarItems.Any(i => i.EventCalendarId == eventCalendar.Id) && m.EventItem.IsActive); // Filter by campus (always include the "All Campuses" events) if (GetAttributeValue("UseCampusContext").AsBoolean()) { var campusEntityType = EntityTypeCache.Read <Campus>(); var contextCampus = RockPage.GetCurrentContext(campusEntityType) as Campus; if (contextCampus != null) { qry = qry.Where(e => e.CampusId == contextCampus.Id || !e.CampusId.HasValue); } } else { var campusGuidList = GetAttributeValue("Campuses").Split(',').AsGuidList(); if (campusGuidList.Any()) { qry = qry.Where(e => !e.CampusId.HasValue || campusGuidList.Contains(e.Campus.Guid)); } } // make sure they have a date range var dateRange = SlidingDateRangePicker.CalculateDateRangeFromDelimitedValues(this.GetAttributeValue("DateRange")); var today = RockDateTime.Today; dateRange.Start = dateRange.Start ?? today; if (dateRange.End == null) { dateRange.End = dateRange.Start.Value.AddDays(1000); } // Get the occurrences var occurrences = qry.ToList(); var occurrencesWithDates = occurrences .Select(o => new EventOccurrenceDate { EventItemOccurrence = o, Dates = o.GetStartTimes(dateRange.Start.Value, dateRange.End.Value).ToList() }) .Where(d => d.Dates.Any()) .ToList(); CalendarEventDates = new List <DateTime>(); var eventOccurrenceSummaries = new List <EventOccurrenceSummary>(); foreach (var occurrenceDates in occurrencesWithDates) { var eventItemOccurrence = occurrenceDates.EventItemOccurrence; foreach (var datetime in occurrenceDates.Dates) { CalendarEventDates.Add(datetime.Date); if (datetime >= dateRange.Start.Value && datetime < dateRange.End.Value) { eventOccurrenceSummaries.Add(new EventOccurrenceSummary { EventItemOccurrence = eventItemOccurrence, EventItem = eventItemOccurrence.EventItem, Name = eventItemOccurrence.EventItem.Name, DateTime = datetime, Date = datetime.ToShortDateString(), Time = datetime.ToShortTimeString(), Location = eventItemOccurrence.Campus != null ? eventItemOccurrence.Campus.Name : "All Campuses", Description = eventItemOccurrence.EventItem.Description, Summary = eventItemOccurrence.EventItem.Summary, DetailPage = string.IsNullOrWhiteSpace(eventItemOccurrence.EventItem.DetailsUrl) ? null : eventItemOccurrence.EventItem.DetailsUrl }); } } } eventOccurrenceSummaries = eventOccurrenceSummaries .OrderBy(e => e.DateTime) .ThenBy(e => e.Name) .ToList(); // limit results int?maxItems = GetAttributeValue("MaxOccurrences").AsIntegerOrNull(); if (maxItems.HasValue) { eventOccurrenceSummaries = eventOccurrenceSummaries.Take(maxItems.Value).ToList(); } var mergeFields = new Dictionary <string, object>(); mergeFields.Add("DetailsPage", LinkedPageUrl("DetailsPage", null)); mergeFields.Add("EventOccurrenceSummaries", eventOccurrenceSummaries); mergeFields.Add("CurrentPerson", CurrentPerson); lContent.Text = GetAttributeValue("LavaTemplate").ResolveMergeFields(mergeFields); // show debug info if (GetAttributeValue("EnableDebug").AsBoolean() && IsUserAuthorized(Authorization.EDIT)) { lDebug.Visible = true; lDebug.Text = mergeFields.lavaDebugInfo(); } else { lDebug.Visible = false; lDebug.Text = string.Empty; } }
public string GetHtmlForBlock( int blockId, int? entityTypeId = null, int? entityId = null ) { RockContext rockContext = this.Service.Context as RockContext ?? new RockContext(); Block block = new BlockService( rockContext ).Get( blockId ); if ( block != null ) { block.LoadAttributes(); string liquidTemplate = block.GetAttributeValue( "LiquidTemplate" ); var metricCategoryPairList = Rock.Attribute.MetricCategoriesFieldAttribute.GetValueAsGuidPairs( block.GetAttributeValue( "MetricCategories" ) ); var metricGuids = metricCategoryPairList.Select( a => a.MetricGuid ).ToList(); bool roundYValues = block.GetAttributeValue( "RoundValues" ).AsBooleanOrNull() ?? true; MetricService metricService = new MetricService( rockContext ); var metrics = metricService.GetByGuids( metricGuids ); List<object> metricsData = new List<object>(); if ( metrics.Count() == 0 ) { return @"<div class='alert alert-warning'> Please select a metric in the block settings. </div>"; } MetricValueService metricValueService = new MetricValueService( rockContext ); DateTime firstDayOfYear = new DateTime( RockDateTime.Now.Year, 1, 1 ); DateTime currentDateTime = RockDateTime.Now; DateTime firstDayOfNextYear = new DateTime( RockDateTime.Now.Year + 1, 1, 1 ); foreach ( var metric in metrics ) { var metricYTDData = JsonConvert.DeserializeObject( metric.ToJson(), typeof( MetricYTDData ) ) as MetricYTDData; var qryMeasureValues = metricValueService.Queryable() .Where( a => a.MetricId == metricYTDData.Id ) .Where( a => a.MetricValueDateTime >= firstDayOfYear && a.MetricValueDateTime < currentDateTime ) .Where( a => a.MetricValueType == MetricValueType.Measure ); //// if an entityTypeId/EntityId filter was specified, and the entityTypeId is the same as the metrics.EntityTypeId, filter the values to the specified entityId //// Note: if a Metric or it's Metric Value doesn't have a context, include it regardless of Context setting if ( entityTypeId.HasValue && ( metric.EntityTypeId == entityTypeId || metric.EntityTypeId == null ) ) { if ( entityId.HasValue ) { qryMeasureValues = qryMeasureValues.Where( a => a.EntityId == entityId || a.EntityId == null ); } } var lastMetricValue = qryMeasureValues.OrderByDescending( a => a.MetricValueDateTime ).FirstOrDefault(); if ( lastMetricValue != null ) { metricYTDData.LastValue = lastMetricValue.YValue.HasValue ? Math.Round( lastMetricValue.YValue.Value, roundYValues ? 0 : 2 ) : (decimal?)null; metricYTDData.LastValueDate = lastMetricValue.MetricValueDateTime.HasValue ? lastMetricValue.MetricValueDateTime.Value.Date : DateTime.MinValue; } decimal? sum = qryMeasureValues.Sum( a => a.YValue ); metricYTDData.CumulativeValue = sum.HasValue ? Math.Round( sum.Value, roundYValues ? 0 : 2 ) : (decimal?)null; // figure out goal as of current date time by figuring out the slope of the goal var qryGoalValuesCurrentYear = metricValueService.Queryable() .Where( a => a.MetricId == metricYTDData.Id ) .Where( a => a.MetricValueDateTime >= firstDayOfYear && a.MetricValueDateTime < firstDayOfNextYear ) .Where( a => a.MetricValueType == MetricValueType.Goal ); // if an entityTypeId/EntityId filter was specified, and the entityTypeId is the same as the metrics.EntityTypeId, filter the values to the specified entityId if ( entityTypeId.HasValue && metric.EntityTypeId == entityTypeId ) { if ( entityId.HasValue ) { qryGoalValuesCurrentYear = qryGoalValuesCurrentYear.Where( a => a.EntityId == entityId ); } } MetricValue goalLineStartPoint = qryGoalValuesCurrentYear.Where( a => a.MetricValueDateTime <= currentDateTime ).OrderByDescending( a => a.MetricValueDateTime ).FirstOrDefault(); MetricValue goalLineEndPoint = qryGoalValuesCurrentYear.Where( a => a.MetricValueDateTime >= currentDateTime ).FirstOrDefault(); if ( goalLineStartPoint != null && goalLineEndPoint != null ) { var changeInX = goalLineEndPoint.DateTimeStamp - goalLineStartPoint.DateTimeStamp; var changeInY = goalLineEndPoint.YValue - goalLineStartPoint.YValue; if ( changeInX != 0 ) { decimal? slope = changeInY / changeInX; decimal goalValue = ( ( slope * ( currentDateTime.ToJavascriptMilliseconds() - goalLineStartPoint.DateTimeStamp ) ) + goalLineStartPoint.YValue ).Value; metricYTDData.GoalValue = Math.Round( goalValue, roundYValues ? 0 : 2 ); } } else { // if there isn't a both a start goal and end goal within the date range, there wouldn't be a goal line shown in a line chart, so don't display a goal in liquid either metricYTDData.GoalValue = null; } metricsData.Add( metricYTDData.ToLiquid() ); } Dictionary<string, object> mergeValues = new Dictionary<string, object>(); mergeValues.Add( "Metrics", metricsData ); string resultHtml = liquidTemplate.ResolveMergeFields( mergeValues ); // show liquid help for debug if ( block.GetAttributeValue( "EnableDebug" ).AsBoolean() ) { resultHtml += mergeValues.lavaDebugInfo(); } return resultHtml; } return string.Format( @"<div class='alert alert-danger'> unable to find block_id: {1} </div>", blockId ); }
/// <summary> /// Raises the <see cref="E:System.Web.UI.Control.Load" /> event. /// </summary> /// <param name="e">The <see cref="T:System.EventArgs" /> object that contains the event data.</param> protected override void OnLoad( EventArgs e ) { base.OnLoad( e ); if ( !Page.IsPostBack ) { RockContext rockContext = new RockContext(); Group group = null; Guid personGuid = Guid.Empty; GroupTypeRole groupMemberRole = null; // get group id from url if ( Request["GroupId"] != null ) { int groupId = 0; if ( Int32.TryParse( Request["GroupId"], out groupId ) ) { group = new GroupService( rockContext ).Queryable("GroupType,GroupType.Roles").Where(g => g.Id == groupId ).FirstOrDefault(); } } else { Guid groupGuid = Guid.Empty; if ( Guid.TryParse( GetAttributeValue( "DefaultGroup" ), out groupGuid ) ) { group = new GroupService( rockContext ).Queryable( "GroupType,GroupType.Roles" ).Where( g => g.Guid == groupGuid ).FirstOrDefault(); ; } } if ( group == null ) { lAlerts.Text = "Could not determine the group to add to."; return; } // get group role id from url if ( Request["GroupMemberRoleId"] != null ) { int groupMemberRoleId = 0; if ( Int32.TryParse( Request["GroupMemberRoleId"], out groupMemberRoleId ) ) { groupMemberRole = new GroupTypeRoleService( rockContext ).Get( groupMemberRoleId ); } } else { Guid groupMemberRoleGuid = Guid.Empty; if ( Guid.TryParse( GetAttributeValue( "DefaultGroupMemberRole" ), out groupMemberRoleGuid ) ) { groupMemberRole = new GroupTypeRoleService( rockContext ).Get( groupMemberRoleGuid ); } } if ( groupMemberRole == null ) { lAlerts.Text += "Could not determine the group role to use for the add."; return; } // get person if ( Request["PersonGuid"] != null ) { Guid.TryParse( Request["PersonGuid"], out personGuid ); } if ( personGuid == Guid.Empty ) { lAlerts.Text += "A valid person identifier was not found in the page address."; return; } // ensure that the group type has this role if ( ! group.GroupType.Roles.Contains( groupMemberRole ) ) { lAlerts.Text += "The group you have provided does not have the group member role configured."; return; } // get person Person person = new PersonService( rockContext ).Get( personGuid ); if ( person == null ) { lAlerts.Text += "A person could not be found for the identifier provided."; return; } // hide alert divAlert.Visible = false; // get status var groupMemberStatus = this.GetAttributeValue( "GroupMemberStatus" ).ConvertToEnum<GroupMemberStatus>( GroupMemberStatus.Active ); // load merge fields var mergeFields = new Dictionary<string, object>(); mergeFields.Add( "GroupMemberStatus", groupMemberStatus.ToString() ); mergeFields.Add( "Group", group ); mergeFields.Add( "Person", person ); mergeFields.Add( "Role", groupMemberRole ); mergeFields.Add( "CurrentPerson", CurrentPerson ); // show debug info? bool enableDebug = GetAttributeValue( "EnableDebug" ).AsBoolean(); if ( enableDebug && IsUserAuthorized( Authorization.EDIT ) ) { lDebug.Visible = true; lDebug.Text = mergeFields.lavaDebugInfo(); } // ensure that the person is not already in the group if ( group.Members.Where( m => m.PersonId == person.Id && m.GroupRoleId == groupMemberRole.Id ).Count() != 0 ) { string templateInGroup = GetAttributeValue( "AlreadyInGroupMessage" ); lContent.Text = templateInGroup.ResolveMergeFields( mergeFields ); return; } // add person to group GroupMember groupMember = new GroupMember(); groupMember.GroupId = group.Id; groupMember.PersonId = person.Id; groupMember.GroupRoleId = groupMemberRole.Id; groupMember.GroupMemberStatus = groupMemberStatus; group.Members.Add( groupMember ); try { rockContext.SaveChanges(); } catch ( Exception ex ) { divAlert.Visible = true; lAlerts.Text = String.Format( "An error occurred adding {0} to the group {1}. Message: {2}.", person.FullName, group.Name, ex.Message ); } string templateSuccess = GetAttributeValue( "SuccessMessage" ); lContent.Text = templateSuccess.ResolveMergeFields( mergeFields ); } }
private void LoadContent() { var eventItemGuid = GetAttributeValue( "EventItem" ).AsGuid(); if ( eventItemGuid != Guid.Empty ) { lMessages.Text = string.Empty; RockContext rockContext = new RockContext(); // get event occurrences var qry = new EventItemOccurrenceService( rockContext ).Queryable() .Where( e => e.EventItem.Guid == eventItemGuid ); // filter occurrences for campus if ( GetAttributeValue( "UseCampusContext" ).AsBoolean() ) { var campusEntityType = EntityTypeCache.Read( "Rock.Model.Campus" ); var contextCampus = RockPage.GetCurrentContext( campusEntityType ) as Campus; qry = qry.Where( e => e.CampusId == contextCampus.Id ); } else { if ( !string.IsNullOrWhiteSpace( GetAttributeValue( "Campuses" ) ) ) { var selectedCampuses = Array.ConvertAll( GetAttributeValue( "Campuses" ).Split( ',' ), s => new Guid( s ) ).ToList(); qry = qry.Where( e => selectedCampuses.Contains( e.Campus.Guid ) ); } } // retrieve occurrences var itemOccurrences = qry.ToList(); // filter by date range var dateRange = SlidingDateRangePicker.CalculateDateRangeFromDelimitedValues( GetAttributeValue( "DateRange" ) ); if ( dateRange.Start != null && dateRange.End != null ) { foreach ( var occurrence in itemOccurrences ) { if ( occurrence.GetStartTimes( dateRange.Start.Value, dateRange.End.Value ).Count() == 0 ) { itemOccurrences.Remove( occurrence ); } } } // limit results int maxItems = GetAttributeValue( "MaxOccurrences" ).AsInteger(); itemOccurrences = itemOccurrences.OrderBy( i => i.NextStartDateTime ).Take( maxItems ).ToList(); // make lava merge fields var mergeFields = new Dictionary<string, object>(); mergeFields.Add( "RegistrationPage", LinkedPageUrl( "RegistrationPage", null ) ); mergeFields.Add( "EventItem", new EventItemService( rockContext ).Get( eventItemGuid ) ); mergeFields.Add( "EventItemOccurrences", itemOccurrences ); lContent.Text = GetAttributeValue( "LavaTemplate" ).ResolveMergeFields( mergeFields ); // show debug info if ( GetAttributeValue( "EnableDebug" ).AsBoolean() && IsUserAuthorized( Authorization.EDIT ) ) { lDebug.Visible = true; lDebug.Text = mergeFields.lavaDebugInfo(); } else { lDebug.Visible = false; lDebug.Text = string.Empty; } } else { lMessages.Text = "<div class='alert alert-warning'>No event item is configured for this block.</div>"; } }
/// <summary> /// Shows the detail. /// </summary> public void ShowDetail() { if (!string.IsNullOrWhiteSpace(GetAttributeValue("ConnectionTypes")) || !string.IsNullOrWhiteSpace(GetAttributeValue("ConnectionTypeDisplayOrder"))) { btnConnect.Text = GetAttributeValue("ConnectButtonText"); using (var rockContext = new RockContext()) { List <Guid> connectionTypeGuids = Array.ConvertAll(GetAttributeValue("ConnectionTypes").Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries), s => new Guid(s)).ToList(); var test = GetAttributeValue("ConnectionTypeDisplayOrder"); List <int> connectionTypeIds = Array.ConvertAll(GetAttributeValue("ConnectionTypeDisplayOrder").Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries), s => s.AsInteger()).ToList(); if (!string.IsNullOrWhiteSpace(GetAttributeValue("ConnectionTypeDisplayOrder"))) { foreach (var connectionTypeId in connectionTypeIds) { var connectionById = new ConnectionTypeService(rockContext).Get(connectionTypeId); if (connectionById != null) { _connectionTypes.Add(connectionById); } } } else { foreach (var connectionTypeGuid in connectionTypeGuids) { _connectionTypes.Add(new ConnectionTypeService(rockContext).Get(connectionTypeGuid)); } } if (!_connectionTypes.Any()) { pnlSignup.Visible = false; ShowError("Incorrect Opportunity Type", "The requested opportunity does not exist."); return; } // load campus dropdown var campuses = CampusCache.All().Where(c => (c.IsActive ?? false)).ToList(); cpCampus.Campuses = campuses; cpCampus.Visible = campuses.Any(); if (campuses.Any()) { cpCampus.SetValue(campuses.First().Id); } pnlSignup.Visible = true; tbComments.Visible = GetAttributeValue("ShowComments").AsBoolean(); pnHome.Visible = GetAttributeValue("DisplayHomePhone").AsBoolean(); pnMobile.Visible = GetAttributeValue("DisplayMobilePhone").AsBoolean(); Person registrant = null; if (RockPage.PageParameter("PersonGuid") != null) { Guid?personGuid = RockPage.PageParameter("PersonGuid").AsGuidOrNull(); if (personGuid.HasValue) { registrant = new PersonService(rockContext).Get(personGuid.Value); } } if (registrant == null && CurrentPerson != null) { registrant = CurrentPerson; } if (registrant != null) { pnlPersonInfo.Visible = GetAttributeValue("ShowPersonInfo").AsBoolean(); tbFirstName.Text = registrant.FirstName.EncodeHtml(); tbLastName.Text = registrant.LastName.EncodeHtml(); tbEmail.Text = registrant.Email.EncodeHtml(); if (pnHome.Visible && _homePhone != null) { var homePhoneNumber = registrant.PhoneNumbers.Where(p => p.NumberTypeValueId == _homePhone.Id).FirstOrDefault(); if (homePhoneNumber != null) { pnHome.Number = homePhoneNumber.NumberFormatted; pnHome.CountryCode = homePhoneNumber.CountryCode; } } if (pnMobile.Visible && _cellPhone != null) { var cellPhoneNumber = registrant.PhoneNumbers.Where(p => p.NumberTypeValueId == _cellPhone.Id).FirstOrDefault(); if (cellPhoneNumber != null) { pnMobile.Number = cellPhoneNumber.NumberFormatted; pnMobile.CountryCode = cellPhoneNumber.CountryCode; } } var campus = registrant.GetCampus(); if (campus != null) { cpCampus.SelectedCampusId = campus.Id; } } else { pnlPersonInfo.Visible = true; // set the campus to the context if (GetAttributeValue("EnableCampusContext").AsBoolean()) { var campusEntityType = EntityTypeCache.Get("Rock.Model.Campus"); var contextCampus = RockPage.GetCurrentContext(campusEntityType) as Campus; if (contextCampus != null) { cpCampus.SelectedCampusId = contextCampus.Id; } } } // show debug info var mergeFields = new Dictionary <string, object>(); mergeFields.Add("CurrentPerson", CurrentPerson); if (GetAttributeValue("EnableDebug").AsBoolean() && IsUserAuthorized(Authorization.EDIT)) { lDebug.Visible = true; lDebug.Text = mergeFields.lavaDebugInfo(); } } // // Create Bootstrap row to contain all the Connection containers // var divRow = new Panel { CssClass = "row" }; phConnections.Controls.Add(divRow); // // Walk through each Connection Type, and create a div for each. // foreach (var connectionType in _connectionTypes) { LoadConnection(connectionType, divRow); } } else { pnlSignup.Visible = false; ShowError("Configure Block", "Please select at least one Connection Type in the block settings."); } }
protected void rptScheduledTransactions_ItemDataBound( object sender, RepeaterItemEventArgs e ) { if ( e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem ) { var transactionSchedule = e.Item.DataItem as FinancialScheduledTransaction; HiddenField hfScheduledTransactionId = (HiddenField)e.Item.FindControl( "hfScheduledTransactionId" ); hfScheduledTransactionId.Value = transactionSchedule.Id.ToString(); // create dictionary for liquid Dictionary<string, object> scheduleSummary = new Dictionary<string, object>(); scheduleSummary.Add( "Id", transactionSchedule.Id ); scheduleSummary.Add( "Guid", transactionSchedule.Guid ); scheduleSummary.Add( "StartDate", transactionSchedule.StartDate ); scheduleSummary.Add( "EndDate", transactionSchedule.EndDate ); scheduleSummary.Add( "NextPaymentDate", transactionSchedule.NextPaymentDate ); if ( transactionSchedule.NextPaymentDate.HasValue ) { scheduleSummary.Add( "DaysTillNextPayment", (transactionSchedule.NextPaymentDate.Value - DateTime.Now).Days ); } else { scheduleSummary.Add( "DaysTillNextPayment", null ); } DateTime? lastPaymentDate = transactionSchedule.Transactions.Max( t => t.TransactionDateTime ); scheduleSummary.Add( "LastPaymentDate", lastPaymentDate ); if ( lastPaymentDate.HasValue ) { scheduleSummary.Add( "DaysSinceLastPayment", (DateTime.Now - lastPaymentDate.Value).Days ); } else { scheduleSummary.Add( "DaysSinceLastPayment", null ); } scheduleSummary.Add( "CurrencyType", ( transactionSchedule.FinancialPaymentDetail != null && transactionSchedule.FinancialPaymentDetail.CurrencyTypeValue != null ) ? transactionSchedule.FinancialPaymentDetail.CurrencyTypeValue.Value : "" ); scheduleSummary.Add( "CreditCardType", ( transactionSchedule.FinancialPaymentDetail != null && transactionSchedule.FinancialPaymentDetail.CreditCardTypeValue != null) ? transactionSchedule.FinancialPaymentDetail.CreditCardTypeValue.Value : "" ); scheduleSummary.Add( "UrlEncryptedKey", transactionSchedule.UrlEncodedKey ); scheduleSummary.Add( "Frequency", transactionSchedule.TransactionFrequencyValue.Value ); scheduleSummary.Add( "FrequencyDescription", transactionSchedule.TransactionFrequencyValue.Description ); List<Dictionary<string, object>> summaryDetails = new List<Dictionary<string, object>>(); decimal totalAmount = 0; foreach ( FinancialScheduledTransactionDetail detail in transactionSchedule.ScheduledTransactionDetails ) { Dictionary<string, object> detailSummary = new Dictionary<string, object>(); detailSummary.Add( "AccountId", detail.Id ); detailSummary.Add( "AccountName", detail.Account.Name ); detailSummary.Add( "Amount", detail.Amount ); detailSummary.Add( "Summary", detail.Summary ); summaryDetails.Add( detailSummary ); totalAmount += detail.Amount; } scheduleSummary.Add( "ScheduledAmount", totalAmount ); scheduleSummary.Add( "TransactionDetails", summaryDetails ); Dictionary<string, object> schedule = new Dictionary<string, object>(); schedule.Add( "ScheduledTransaction", scheduleSummary ); // merge into content Literal lLiquidContent = (Literal)e.Item.FindControl( "lLiquidContent" ); lLiquidContent.Text = GetAttributeValue( "Template" ).ResolveMergeFields( schedule ); // set debug info if ( GetAttributeValue( "EnableDebug" ).AsBoolean() && IsUserAuthorized( Authorization.EDIT ) ) { lDebug.Text = schedule.lavaDebugInfo(); } } }
protected void lbProfileNext_Click(object sender, EventArgs e) { // setup merge fields var mergeFields = new Dictionary <string, object>(); mergeFields.Add("PersonId", hfPersonId.Value); mergeFields.Add("FirstName", tbFirstName.Text); mergeFields.Add("LastName", tbLastName.Text); mergeFields.Add("StreetAddress", acAddress.Street1); mergeFields.Add("City", acAddress.City); mergeFields.Add("State", acAddress.State); mergeFields.Add("PostalCode", acAddress.PostalCode); mergeFields.Add("Country", acAddress.Country); mergeFields.Add("Email", tbEmail.Text); mergeFields.Add("HomePhone", pnbHomePhone.Text); mergeFields.Add("MobilePhone", pnbHomePhone.Text); mergeFields.Add("BirthDate", dpBirthdate.Text); mergeFields.Add("OtherUpdates", tbOtherUpdates.Text); var globalAttributeFields = Rock.Web.Cache.GlobalAttributesCache.GetMergeFields(CurrentPerson); globalAttributeFields.ToList().ForEach(d => mergeFields.Add(d.Key, d.Value)); // if an email was provided email results RockContext rockContext = new RockContext(); if (!string.IsNullOrWhiteSpace(GetAttributeValue("UpdateEmail"))) { var receiptEmail = new SystemEmailService(rockContext).Get(new Guid(GetAttributeValue("UpdateEmail"))); if (receiptEmail != null) { var appRoot = Rock.Web.Cache.GlobalAttributesCache.Read(rockContext).GetValue("ExternalApplicationRoot"); var recipients = new List <RecipientData>(); recipients.Add(new RecipientData(null, mergeFields)); Email.Send(receiptEmail.Guid, recipients, appRoot); } } // launch workflow if configured if (!string.IsNullOrWhiteSpace(GetAttributeValue("WorkflowType"))) { var workflowTypeService = new WorkflowTypeService(rockContext); var workflowService = new WorkflowService(rockContext); var workflowType = workflowTypeService.Get(new Guid(GetAttributeValue("WorkflowType"))); if (workflowType != null) { var workflow = Rock.Model.Workflow.Activate(workflowType, "Kiosk Update Info"); // set attributes workflow.SetAttributeValue("PersonId", hfPersonId.Value); workflow.SetAttributeValue("FirstName", tbFirstName.Text); workflow.SetAttributeValue("LastName", tbLastName.Text); workflow.SetAttributeValue("StreetAddress", acAddress.Street1); workflow.SetAttributeValue("City", acAddress.City); workflow.SetAttributeValue("State", acAddress.State); workflow.SetAttributeValue("PostalCode", acAddress.PostalCode); workflow.SetAttributeValue("Country", acAddress.Country); workflow.SetAttributeValue("Email", tbEmail.Text); workflow.SetAttributeValue("HomePhone", pnbHomePhone.Text); workflow.SetAttributeValue("MobilePhone", pnbHomePhone.Text); workflow.SetAttributeValue("BirthDate", dpBirthdate.Text); workflow.SetAttributeValue("OtherUpdates", tbOtherUpdates.Text); // lauch workflow List <string> workflowErrors; workflowService.Process(workflow, out workflowErrors); } } HidePanels(); pnlComplete.Visible = true; lCompleteMessage.Text = GetAttributeValue("CompleteMessageLava").ResolveMergeFields(mergeFields); bool enableDebug = GetAttributeValue("EnableDebug").AsBoolean(); if (enableDebug && IsUserAuthorized(Authorization.EDIT)) { lDebug.Visible = true; lDebug.Text = mergeFields.lavaDebugInfo(); } }
private void DisplayPackage() { // get package id int packageId = -1; if ( !string.IsNullOrWhiteSpace( PageParameter( "PackageId" ) ) ) { packageId = Convert.ToInt32( PageParameter( "PackageId" ) ); } PackageService packageService = new PackageService(); var package = packageService.GetPackage( packageId ); var mergeFields = new Dictionary<string, object>(); mergeFields.Add( "Package", package ); mergeFields.Add( "CurrentPerson", CurrentPerson ); var globalAttributeFields = Rock.Web.Cache.GlobalAttributesCache.GetMergeFields( CurrentPerson ); globalAttributeFields.ToList().ForEach( d => mergeFields.Add( d.Key, d.Value ) ); lOutput.Text = GetAttributeValue( "LavaTemplate" ).ResolveMergeFields( mergeFields ); if ( GetAttributeValue( "SetPageTitle" ).AsBoolean() ) { string pageTitle = package.Name; RockPage.PageTitle = pageTitle; RockPage.BrowserTitle = String.Format( "{0} | {1}", pageTitle, RockPage.Site.Name ); RockPage.Header.Title = String.Format( "{0} | {1}", pageTitle, RockPage.Site.Name ); } // show debug info if ( GetAttributeValue( "EnableDebug" ).AsBoolean() && IsUserAuthorized( Authorization.EDIT ) ) { lDebug.Visible = true; lDebug.Text = mergeFields.lavaDebugInfo(); } }
/// <summary> /// Shows the active users. /// </summary> private void DisplayItems() { RockContext rockContext = new RockContext(); Guid? contentChannelGuid = GetAttributeValue( "ContentChannel").AsGuidOrNull(); ContentChannel contentChannel = null; ContentChannelItemService itemService = new ContentChannelItemService( rockContext ); var items = itemService.Queryable().AsNoTracking().Where(c => c.CreatedByPersonAlias != null && c.CreatedByPersonAlias.PersonId == CurrentPersonId); if ( contentChannelGuid.HasValue ) { items = items.Where( c => c.ContentChannel.Guid == contentChannelGuid.Value ); contentChannel = new ContentChannelService( rockContext ).Get( contentChannelGuid.Value ); } var mergeFields = new Dictionary<string, object>(); mergeFields.Add( "DetailPage", LinkedPageRoute( "DetailPage" ) ); mergeFields.Add( "ContentChannel", contentChannel ); mergeFields.Add( "CurrentPerson", CurrentPerson ); mergeFields.Add( "Items", items.Take(GetAttributeValue( "MaxItems" ).AsInteger()).ToList() ); 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(); } }
protected void lbProfileNext_Click( object sender, EventArgs e ) { // setup merge fields var mergeFields = new Dictionary<string, object>(); mergeFields.Add( "PersonId", hfPersonId.Value ); mergeFields.Add( "FirstName", tbFirstName.Text ); mergeFields.Add( "LastName", tbLastName.Text ); mergeFields.Add( "StreetAddress", acAddress.Street1 ); mergeFields.Add( "City", acAddress.City ); mergeFields.Add( "State", acAddress.State ); mergeFields.Add( "PostalCode", acAddress.PostalCode ); mergeFields.Add( "Country", acAddress.Country ); mergeFields.Add( "Email", tbEmail.Text ); mergeFields.Add( "HomePhone", pnbHomePhone.Text ); mergeFields.Add( "MobilePhone", pnbHomePhone.Text ); mergeFields.Add( "BirthDate", dpBirthdate.Text ); mergeFields.Add( "OtherUpdates", tbOtherUpdates.Text ); var globalAttributeFields = Rock.Web.Cache.GlobalAttributesCache.GetMergeFields( CurrentPerson ); globalAttributeFields.ToList().ForEach( d => mergeFields.Add( d.Key, d.Value ) ); // if an email was provided email results RockContext rockContext = new RockContext(); if ( !string.IsNullOrWhiteSpace( GetAttributeValue( "UpdateEmail" ) ) ) { var receiptEmail = new SystemEmailService( rockContext ).Get( new Guid( GetAttributeValue( "UpdateEmail" ) ) ); if ( receiptEmail != null ) { var appRoot = Rock.Web.Cache.GlobalAttributesCache.Read( rockContext ).GetValue( "ExternalApplicationRoot" ); var recipients = new List<RecipientData>(); recipients.Add( new RecipientData( null, mergeFields ) ); Email.Send( receiptEmail.Guid, recipients, appRoot ); } } // launch workflow if configured if ( !string.IsNullOrWhiteSpace( GetAttributeValue( "WorkflowType" ) ) ) { var workflowTypeService = new WorkflowTypeService( rockContext ); var workflowService = new WorkflowService( rockContext ); var workflowType = workflowTypeService.Get( new Guid( GetAttributeValue( "WorkflowType" ) ) ); if ( workflowType != null ) { var workflow = Rock.Model.Workflow.Activate( workflowType, "Kiosk Update Info" ); // set attributes workflow.SetAttributeValue( "PersonId", hfPersonId.Value ); workflow.SetAttributeValue( "FirstName", tbFirstName.Text ); workflow.SetAttributeValue( "LastName", tbLastName.Text ); workflow.SetAttributeValue( "StreetAddress", acAddress.Street1 ); workflow.SetAttributeValue( "City", acAddress.City ); workflow.SetAttributeValue( "State", acAddress.State ); workflow.SetAttributeValue( "PostalCode", acAddress.PostalCode ); workflow.SetAttributeValue( "Country", acAddress.Country ); workflow.SetAttributeValue( "Email", tbEmail.Text ); workflow.SetAttributeValue( "HomePhone", pnbHomePhone.Text ); workflow.SetAttributeValue( "MobilePhone", pnbHomePhone.Text ); workflow.SetAttributeValue( "BirthDate", dpBirthdate.Text ); workflow.SetAttributeValue( "OtherUpdates", tbOtherUpdates.Text ); // lauch workflow List<string> workflowErrors; workflowService.Process( workflow, out workflowErrors ); } } HidePanels(); pnlComplete.Visible = true; lCompleteMessage.Text = GetAttributeValue( "CompleteMessageLava" ).ResolveMergeFields( mergeFields ); bool enableDebug = GetAttributeValue( "EnableDebug" ).AsBoolean(); if ( enableDebug && IsUserAuthorized( Authorization.EDIT ) ) { lDebug.Visible = true; lDebug.Text = mergeFields.lavaDebugInfo(); } }
/// <summary> /// Raises the <see cref="E:System.Web.UI.Control.Load" /> event. /// </summary> /// <param name="e">The <see cref="T:System.EventArgs" /> object that contains the event data.</param> protected override void OnLoad( EventArgs e ) { base.OnLoad( e ); if ( !Page.IsPostBack ) { RockContext rockContext = new RockContext(); Group group = null; Guid personGuid = Guid.Empty; // get group from url if ( Request["GroupId"] != null || Request["GroupGuid"] != null ) { if ( Request["GroupId"] != null ) { int groupId = 0; if ( Int32.TryParse( Request["GroupId"], out groupId ) ) { group = new GroupService( rockContext ).Queryable().Where( g => g.Id == groupId ).FirstOrDefault(); } } else { Guid groupGuid = Request["GroupGuid"].AsGuid(); group = new GroupService( rockContext ).Queryable().Where( g => g.Guid == groupGuid ).FirstOrDefault(); } } else { Guid groupGuid = Guid.Empty; if ( Guid.TryParse( GetAttributeValue( "DefaultGroup" ), out groupGuid ) ) { group = new GroupService( rockContext ).Queryable().Where( g => g.Guid == groupGuid ).FirstOrDefault(); ; } } if ( group == null ) { lAlerts.Text = "Could not determine the group to add to."; return; } // get person Person person = null; if ( !string.IsNullOrWhiteSpace(Request["PersonGuid"]) ) { person = new PersonService( rockContext ).Get( Request["PersonGuid"].AsGuid() ); } if ( person == null ) { lAlerts.Text += "A person could not be found for the identifier provided."; return; } // hide alert divAlert.Visible = false; // get status var groupMemberStatus = this.GetAttributeValue( "GroupMemberStatus" ).ConvertToEnum<GroupMemberStatus>( GroupMemberStatus.Active ); // load merge fields var mergeFields = new Dictionary<string, object>(); mergeFields.Add( "Group", group ); mergeFields.Add( "Person", person ); mergeFields.Add( "CurrentPerson", CurrentPerson ); // show debug info? bool enableDebug = GetAttributeValue( "EnableDebug" ).AsBoolean(); if ( enableDebug && IsUserAuthorized( Authorization.EDIT ) ) { lDebug.Visible = true; lDebug.Text = mergeFields.lavaDebugInfo(); } var groupMemberService = new GroupMemberService(rockContext); var groupMemberList = groupMemberService.Queryable() .Where( m => m.GroupId == group.Id && m.PersonId == person.Id ) .ToList(); if (groupMemberList.Count > 0 ) { foreach(var groupMember in groupMemberList ) { if ( GetAttributeValue( "Inactivate" ).AsBoolean() ) { groupMember.GroupMemberStatus = GroupMemberStatus.Inactive; } else { groupMemberService.Delete( groupMember ); } rockContext.SaveChanges(); } lContent.Text = GetAttributeValue( "SuccessMessage" ).ResolveMergeFields( mergeFields ); } else { if ( GetAttributeValue( "WarnWhenNotInGroup").AsBoolean() ) { lContent.Text = GetAttributeValue( "NotInGroupMessage" ).ResolveMergeFields( mergeFields ); } else { lContent.Text = GetAttributeValue( "SuccessMessage" ).ResolveMergeFields( mergeFields ); } } } }
private void SetCampus() { RockContext rockContext = new RockContext(); Campus campus = null; // get device string deviceIp = GetIPAddress(); DeviceService deviceService = new DeviceService(rockContext); var deviceQry = deviceService.Queryable( "Location" ) .Where( d => d.IPAddress == deviceIp ); // add device type filter if (!string.IsNullOrWhiteSpace(GetAttributeValue("DeviceType"))) { Guid givingKioskGuid = new Guid( GetAttributeValue("DeviceType")); deviceQry = deviceQry.Where( d => d.DeviceType.Guid == givingKioskGuid); } var device = deviceQry.FirstOrDefault(); if ( device != null ) { if ( device.Locations.Count > 0 ) { campus = new CampusService( new RockContext() ).Get( device.Locations.First().CampusId.Value ); // set the context if ( campus != null ) { var campusEntityType = EntityTypeCache.Read( "Rock.Model.Campus" ); var currentCampus = RockPage.GetCurrentContext( campusEntityType ) as Campus; if ( currentCampus == null || currentCampus.Id != campus.Id ) { bool pageScope = GetAttributeValue( "ContextScope" ) == "Page"; RockPage.SetContextCookie( campus, pageScope, true ); } } } } // set display output var mergeFields = new Dictionary<string, object>(); mergeFields.Add( "ClientIp", deviceIp ); mergeFields.Add( "Device", device ); mergeFields.Add( "Campus", campus ); mergeFields.Add( "CurrentPerson", CurrentPerson ); var globalAttributeFields = Rock.Web.Cache.GlobalAttributesCache.GetMergeFields( CurrentPerson ); globalAttributeFields.ToList().ForEach( d => mergeFields.Add( d.Key, d.Value ) ); lOutput.Text = GetAttributeValue( "DisplayLava" ).ResolveMergeFields( mergeFields ); // show debug info if ( GetAttributeValue( "EnableDebug" ).AsBoolean() && IsUserAuthorized( Authorization.EDIT ) ) { lDebug.Visible = true; lDebug.Text = mergeFields.lavaDebugInfo(); } }
private void LoadPromos() { string errorResponse = string.Empty; PromoService promoService = new PromoService(); var promos = new List <Promo>(); // get category int?categoryId = null; if (!string.IsNullOrWhiteSpace(GetAttributeValue("CategoryId"))) { categoryId = Convert.ToInt32(GetAttributeValue("CategoryId")); } // get promo type bool isTopFree = false; bool isTopPaid = false; bool isFeatured = false; string promoType = GetAttributeValue("PromoType"); //"Top Paid, Top Free, Featured" switch (promoType) { case "Top Paid": isTopPaid = true; break; case "Top Free": isTopFree = true; break; case "Featured": isFeatured = true; break; } promos = promoService.GetPromos(categoryId, out errorResponse, isTopFree, isFeatured, isTopPaid); // check for errors ErrorCheck(errorResponse); 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)); mergeFields.Add("Promos", promos); // add link to detail page Dictionary <string, object> linkedPages = new Dictionary <string, object>(); linkedPages.Add("DetailPage", LinkedPageUrl("DetailPage", null)); mergeFields.Add("LinkedPages", linkedPages); lOutput.Text = GetAttributeValue("LavaTemplate").ResolveMergeFields(mergeFields); // show debug info if (GetAttributeValue("EnableDebug").AsBoolean() && IsUserAuthorized(Authorization.EDIT)) { lDebug.Visible = true; lDebug.Text = mergeFields.lavaDebugInfo(); } }
protected void rptScheduledTransactions_ItemDataBound(object sender, RepeaterItemEventArgs e) { if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { var transactionSchedule = e.Item.DataItem as FinancialScheduledTransaction; HiddenField hfScheduledTransactionId = (HiddenField)e.Item.FindControl("hfScheduledTransactionId"); hfScheduledTransactionId.Value = transactionSchedule.Id.ToString(); // create dictionary for liquid Dictionary <string, object> scheduleSummary = new Dictionary <string, object>(); scheduleSummary.Add("Id", transactionSchedule.Id); scheduleSummary.Add("Guid", transactionSchedule.Guid); scheduleSummary.Add("StartDate", transactionSchedule.StartDate); scheduleSummary.Add("EndDate", transactionSchedule.EndDate); scheduleSummary.Add("NextPaymentDate", transactionSchedule.NextPaymentDate); if (transactionSchedule.NextPaymentDate.HasValue) { scheduleSummary.Add("DaysTillNextPayment", (transactionSchedule.NextPaymentDate.Value - DateTime.Now).Days); } else { scheduleSummary.Add("DaysTillNextPayment", null); } DateTime?lastPaymentDate = transactionSchedule.Transactions.Max(t => t.TransactionDateTime); scheduleSummary.Add("LastPaymentDate", lastPaymentDate); if (lastPaymentDate.HasValue) { scheduleSummary.Add("DaysSinceLastPayment", (DateTime.Now - lastPaymentDate.Value).Days); } else { scheduleSummary.Add("DaysSinceLastPayment", null); } scheduleSummary.Add("CurrencyType", transactionSchedule.CurrencyTypeValue.Value); scheduleSummary.Add("CreditCardType", (transactionSchedule.CreditCardTypeValue == null) ? "" : transactionSchedule.CreditCardTypeValue.Value); scheduleSummary.Add("UrlEncryptedKey", transactionSchedule.UrlEncodedKey); scheduleSummary.Add("Frequency", transactionSchedule.TransactionFrequencyValue.Value); scheduleSummary.Add("FrequencyDescription", transactionSchedule.TransactionFrequencyValue.Description); List <Dictionary <string, object> > summaryDetails = new List <Dictionary <string, object> >(); decimal totalAmount = 0; foreach (FinancialScheduledTransactionDetail detail in transactionSchedule.ScheduledTransactionDetails) { Dictionary <string, object> detailSummary = new Dictionary <string, object>(); detailSummary.Add("AccountId", detail.Id); detailSummary.Add("AccountName", detail.Account.Name); detailSummary.Add("Amount", detail.Amount); detailSummary.Add("Summary", detail.Summary); summaryDetails.Add(detailSummary); totalAmount += detail.Amount; } scheduleSummary.Add("ScheduledAmount", totalAmount); scheduleSummary.Add("TransactionDetails", summaryDetails); Dictionary <string, object> schedule = new Dictionary <string, object>(); schedule.Add("ScheduledTransaction", scheduleSummary); // merge into content Literal lLiquidContent = (Literal)e.Item.FindControl("lLiquidContent"); lLiquidContent.Text = GetAttributeValue("Template").ResolveMergeFields(schedule); // set debug info if (GetAttributeValue("EnableDebug").AsBoolean() && IsUserAuthorized(Authorization.EDIT)) { lDebug.Text = schedule.lavaDebugInfo(); } } }