예제 #1
0
        /// <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));
        }
예제 #2
0
        /// <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();
        }
예제 #3
0
        /// <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();
        }
예제 #5
0
        /// <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>");
            }
        }