/// <summary> /// Returns a collection of blocks for a given page and block type. This will usually be one but in some cases may be more. /// </summary> /// <param name="pageGuid">The page unique identifier.</param> /// <param name="blockTypeGuid">The block type unique identifier.</param> /// <returns></returns> public IQueryable <Block> GetByPageAndBlockType(Guid pageGuid, Guid blockTypeGuid) { int?pageId = PageCache.GetId(pageGuid) ?? -1; int?blockTypeId = BlockTypeCache.GetId(blockTypeGuid) ?? -1; return(GetByPageAndBlockType(pageId.Value, blockTypeId.Value)); }
/// <summary> /// Updates the configuration from block settings. /// </summary> private void UpdateConfigurationFromBlockSettings() { var configuredCheckinTypeGuid = this.GetAttributeValue(AttributeKey.CheckinConfiguration_GroupTypeGuid).AsGuid(); var configuredCheckinTypeId = GroupTypeCache.GetId(configuredCheckinTypeGuid); LocalDeviceConfig.CurrentCheckinTypeId = configuredCheckinTypeId; LocalDeviceConfig.CurrentGroupTypeIds = this.GetAttributeValue(AttributeKey.ConfiguredAreas_GroupTypeIds).SplitDelimitedValues().AsIntegerList(); LocalDeviceConfig.CurrentTheme = this.GetAttributeValue(AttributeKey.CheckinTheme); // override the HomePage block setting to the mobile home page LocalDeviceConfig.HomePageOverride = this.PageCache.Guid; LocalDeviceConfig.BlockedPageIds = null; LocalDeviceConfig.AllowCheckout = false; var blockedPageIds = new List <int?>(); blockedPageIds.Add(PageCache.GetId(Rock.SystemGuid.Page.CHECKIN_ADMIN.AsGuid())); blockedPageIds.Add(PageCache.GetId(Rock.SystemGuid.Page.CHECKIN_WELCOME.AsGuid())); blockedPageIds.Add(PageCache.GetId(Rock.SystemGuid.Page.CHECKIN_SEARCH.AsGuid())); blockedPageIds.Add(PageCache.GetId(Rock.SystemGuid.Page.CHECKIN_FAMILY_SELECT.AsGuid())); LocalDeviceConfig.BlockedPageIds = blockedPageIds.Where(a => a.HasValue).Select(a => a.Value).ToArray(); // turn off the idle redirect blocks since we don't a person's mobile device to do that LocalDeviceConfig.DisableIdleRedirect = true; // we want the SuccessBlock to generate a QR Code that contains the AttendanceSession(s) LocalDeviceConfig.GenerateQRCodeForAttendanceSessions = true; LocalDeviceConfig.SaveToCookie(this.Page); // create new checkin state since we are starting a new checkin sessions this.CurrentCheckInState = new CheckInState(this.LocalDeviceConfig); SaveState(); }
/// <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) { if (Person == null) { return; } var streakTypeCache = GetStreakTypeCache(badge); if (streakTypeCache == null) { return; } var isDaily = streakTypeCache.OccurrenceFrequency == StreakOccurrenceFrequency.Daily; var timeUnit = isDaily ? "day" : "week"; var timeUnits = isDaily ? "days" : "weeks"; var minBarHeight = GetAttributeValue(badge, AttributeKey.MinBarHeight).AsIntegerOrNull() ?? AttributeDefault.MinBarHeight; var unitsToDisplay = GetAttributeValue(badge, AttributeKey.BarCount).AsIntegerOrNull() ?? AttributeDefault.BarCount; var doAnimateBars = GetAttributeValue(badge, AttributeKey.AnimateBars).AsBooleanOrNull() ?? AttributeDefault.AnimateBars; var animateClass = doAnimateBars ? " animate" : string.Empty; var tooltip = $"{Person.NickName.ToPossessive().EncodeHtml()} attendance for the last {unitsToDisplay} {timeUnits}. Each bar is a {timeUnit}."; var chartHtml = $"<div class='badge badge-attendance{animateClass} badge-id-{badge.Id}' data-toggle='tooltip' data-original-title='{tooltip}'></div>"; var script = $@" <script> Sys.Application.add_load(function () {{ $.ajax({{ type: 'GET', url: Rock.settings.get('baseUrl') + 'api/StreakTypes/RecentEngagement/{streakTypeCache.Id}/{Person.Id}?unitCount={unitsToDisplay}' , statusCode: {{ 200: function (data, status, xhr) {{ var chartHtml = ['<ul class=\'attendance-chart list-unstyled\'>']; if (data) {{ for(var i = data.length - 1; i >= 0; i--) {{ var occurrenceEngagement = data[i]; var isBitSet = occurrenceEngagement && occurrenceEngagement.HasEngagement; var title = occurrenceEngagement ? new Date(occurrenceEngagement.DateTime).toLocaleDateString() : ''; var barHeight = isBitSet ? 100 : {minBarHeight}; chartHtml.push('<li title=""' + title + '""><span style=\'height: ' + barHeight + '%\'></span></li>'); }} }} chartHtml.push('</ul>'); $('.badge-attendance.badge-id-{badge.Id}').html(chartHtml.join('')); }} }}, }}); }}); </script>"; var linkedPageGuid = GetAttributeValue(badge, AttributeKey.StreakDetailPage).AsGuidOrNull(); var linkedPageId = linkedPageGuid.HasValue ? PageCache.GetId(linkedPageGuid.Value) : null; if (!linkedPageId.HasValue) { writer.Write($"{chartHtml}{script}"); } else { var link = $"/page/{linkedPageId.Value}?streakTypeId={streakTypeCache.Id}&personId={Person.Id}"; writer.Write($@"<a href=""{link}"">{chartHtml}</a>{script}"); } }
/// <summary> /// Binds the page list. /// </summary> public void BindPageList() { if (this.RegistrationInstance == null || this.RegistrationInstance.RegistrationTemplate == null) { return; } var waitListPageGuid = this.GetAttributeValue(AttributeKey.WaitListPage).SplitDelimitedValues().FirstOrDefault().AsGuidOrNull(); var groupPlacementToolPageGuid = this.GetAttributeValue(AttributeKey.GroupPlacementToolPage).SplitDelimitedValues().FirstOrDefault().AsGuidOrNull(); var showWaitListTab = this.RegistrationInstance.RegistrationTemplate.WaitListEnabled; var rockContext = new RockContext(); var pageList = this.PageCache.ParentPage.GetPages(rockContext).OrderBy(a => a.Order).ToList(); if (!showWaitListTab && waitListPageGuid.HasValue) { pageList = pageList.Where(a => a.Guid != waitListPageGuid.Value).ToList(); } if (groupPlacementToolPageGuid.HasValue) { pageList = pageList.Where(a => a.Guid != groupPlacementToolPageGuid.Value).ToList(); } var navigationPageInfoList = pageList .Where(a => a.DisplayInNavWhen != DisplayInNavWhen.Never) .Select(a => new NavigationPageInfo { TabTitle = a.PageTitle, PageReference = new PageReference(a.Id) }).ToList(); if (groupPlacementToolPageGuid.HasValue) { var groupPlacementToolPageId = PageCache.GetId(groupPlacementToolPageGuid.Value); if (groupPlacementToolPageId.HasValue) { pageList = pageList.Where(a => a.Guid != groupPlacementToolPageGuid.Value).ToList(); var registrationTemplatePlacements = this.RegistrationInstance.RegistrationTemplate.Placements.OrderBy(a => a.Order).ThenBy(a => a.Name).ToList(); foreach (var registrationTemplatePlacement in registrationTemplatePlacements) { var groupPlacementPageReference = new PageReference(groupPlacementToolPageId.Value); groupPlacementPageReference.Parameters.Add(PageParameterKey.RegistrationTemplatePlacementId, registrationTemplatePlacement.Id.ToString()); var navigationPageInfo = new NavigationPageInfo { PageReference = groupPlacementPageReference, TabTitle = registrationTemplatePlacement.Name, IsGroupPlacementPage = true, RegistrationTemplatePlacementId = registrationTemplatePlacement.Id }; navigationPageInfoList.Add(navigationPageInfo); } } } var currentPageParameters = this.PageParameters().Where(a => a.Key != "PageId" && a.Key != PageParameterKey.RegistrationTemplatePlacementId && a.Key != PageParameterKey.RegistrantId).ToList(); foreach (var navigationPageInfo in navigationPageInfoList) { foreach (var pageParameter in currentPageParameters) { navigationPageInfo.PageReference.Parameters.AddOrReplace(pageParameter.Key, pageParameter.Value.ToString()); } } rptPages.DataSource = navigationPageInfoList; rptPages.DataBind(); }
/// <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) { if (Person == null) { return; } var streakTypeCache = GetStreakTypeCache(badge); if (streakTypeCache == null) { return; } var timeUnit = string.Empty; var timeUnits = string.Empty; switch (streakTypeCache.OccurrenceFrequency) { case StreakOccurrenceFrequency.Daily: timeUnit = "day"; timeUnits = "days"; break; case StreakOccurrenceFrequency.Weekly: timeUnit = "week"; timeUnits = "weeks"; break; case StreakOccurrenceFrequency.Monthly: timeUnit = "month"; timeUnits = "months"; break; case StreakOccurrenceFrequency.Yearly: timeUnit = "year"; timeUnits = "years"; break; default: throw new NotImplementedException(string.Format("StreakOccurrenceFrequency '{0}' is not implemented", streakTypeCache.OccurrenceFrequency)); } var unitsToDisplay = GetAttributeValue(badge, AttributeKey.BarCount).AsIntegerOrNull() ?? AttributeDefault.BarCount; var doAnimateBars = GetAttributeValue(badge, AttributeKey.AnimateBars).AsBooleanOrNull() ?? AttributeDefault.AnimateBars; var animateClass = doAnimateBars ? " animate" : string.Empty; var tooltip = $"{Person.NickName.ToPossessive()} engagement in the streak '{streakTypeCache.Name}' for the last {unitsToDisplay} {timeUnits}. Each bar is a {timeUnit}."; var chartHtml = $"<div class='badge badge-attendance{animateClass} badge-id-{badge.Id}' data-toggle='tooltip' data-original-title='{tooltip.EncodeHtml()}'></div>"; var linkedPageGuid = GetAttributeValue(badge, AttributeKey.StreakDetailPage).AsGuidOrNull(); var linkedPageId = linkedPageGuid.HasValue ? PageCache.GetId(linkedPageGuid.Value) : null; if (!linkedPageId.HasValue) { writer.Write($"{chartHtml}"); } else { var link = $"/page/{linkedPageId.Value}?StreakTypeId={streakTypeCache.Id}&PersonId={Person.Id}"; writer.Write($@"<a href=""{link}"">{chartHtml}</a>"); } }