示例#1
0
        /// <summary>
        /// Gets the java script.
        /// </summary>
        /// <param name="badge"></param>
        /// <returns></returns>
        protected override string GetJavaScript(BadgeCache badge)
        {
            if (Person == null)
            {
                return(null);
            }

            var duration = GetAttributeValue(badge, "Duration").AsIntegerOrNull() ?? 16;

            return(string.Format(@"
                $.ajax({{
                    type: 'GET',
                    url: Rock.settings.get('baseUrl') + 'api/Badges/WeeksAttendedInDuration/{1}/{0}' ,
                    statusCode: {{
                        200: function (data, status, xhr) {{
                            var badgeHtml = '<div class=\'weeks-metric\'>';
                                            
                            badgeHtml += '<span class=\'weeks-attended\'>' + data + '</span><span class=\'week-duration\'>/{0}</span>';                
                            badgeHtml += '</div>';
                                            
                            $('.badge-weeksattendanceduration.badge-id-{2}').html(badgeHtml);
                        }}
                    }},
                }});", duration, Person.Id.ToString(), badge.Id));
        }
示例#2
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, HtmlTextWriter writer)
        {
            if (Entity != null)
            {
                writer.AddAttribute(HtmlTextWriterAttribute.Class, "badge");

                var tooltipText = GetToolTipText(Entity);

                if (tooltipText.IsNullOrWhiteSpace())
                {
#pragma warning disable CS0618 // Type or member is obsolete
                    tooltipText = GetToolTipText(Person);
#pragma warning restore CS0618 // Type or member is obsolete
                }

                writer.AddAttribute(HtmlTextWriterAttribute.Title, tooltipText);
                writer.RenderBeginTag(HtmlTextWriterTag.Div);

                var iconPath = GetIconPath(Entity);

                if (iconPath.IsNullOrWhiteSpace())
                {
#pragma warning disable CS0618 // Type or member is obsolete
                    iconPath = GetIconPath(Person);
#pragma warning restore CS0618 // Type or member is obsolete
                }

                writer.AddAttribute(HtmlTextWriterAttribute.Src, iconPath);
                writer.RenderBeginTag(HtmlTextWriterTag.Img);
                writer.RenderEndTag();

                writer.RenderEndTag();
            }
        }
示例#3
0
        /// <summary>
        /// Raises the <see cref="E:System.Web.UI.Control.Init" /> event.
        /// </summary>
        /// <param name="e">An <see cref="T:System.EventArgs" /> object that contains the event data.</param>
        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);

            RockPage.AddScriptLink("~/Scripts/CheckinClient/ZebraPrint.js");
            RockPage.AddCSSLink("~/Styles/fluidbox.css");
            RockPage.AddScriptLink("~/Scripts/jquery.fluidbox.min.js");

            this.BlockUpdated += Block_BlockUpdated;
            this.AddConfigurationUpdateTrigger(upnlContent);

            gAttendanceHistory.DataKeyNames = new string[] { "Id" };

            var leftBadgeGuids  = GetAttributeValues(AttributeKey.BadgesLeft).AsGuidList();
            var rightBadgeGuids = GetAttributeValues(AttributeKey.BadgesRight).AsGuidList();

            var leftBadges  = leftBadgeGuids.Select(a => BadgeCache.Get(a)).Where(a => a != null).OrderBy(a => a.Order).ToList();
            var rightBadges = rightBadgeGuids.Select(a => BadgeCache.Get(a)).Where(a => a != null).OrderBy(a => a.Order).ToList();

            // Set BadgeEntity using a new RockContext that won't get manually disposed.
            var badgesEntity = new PersonService(new RockContext()).Get(GetPersonGuid());

            blBadgesLeft.Entity  = badgesEntity;
            blBadgesRight.Entity = badgesEntity;

            foreach (var badge in leftBadges)
            {
                blBadgesLeft.BadgeTypes.Add(badge);
            }

            foreach (var badge in rightBadges)
            {
                blBadgesRight.BadgeTypes.Add(badge);
            }
        }
示例#4
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;
            }

            string animateClass = string.Empty;

            if (GetAttributeValue(badge, "AnimateBars") == null || GetAttributeValue(badge, "AnimateBars").AsBoolean())
            {
                animateClass = " animate";
            }

            string tooltip;
            var    monthsToDisplay = GetAttributeValue(badge, "MonthsToDisplay").AsIntegerOrNull() ?? 24;

            if (Person.AgeClassification == AgeClassification.Child)
            {
                tooltip = $"{Person.NickName.ToPossessive().EncodeHtml()} attendance for the last {monthsToDisplay} months. Each bar is a month.";
            }
            else
            {
                tooltip = $"Family attendance for the last {monthsToDisplay} months. Each bar is a month.";
            }

            writer.Write(string.Format("<div class='badge badge-attendance{0} badge-id-{1}' data-toggle='tooltip' data-original-title='{2}'>", animateClass, badge.Id, tooltip));

            writer.Write("</div>");
        }
示例#5
0
        /// <summary>
        /// Shows the badges.
        /// </summary>
        /// <param name="businessId">The business identifier.</param>
        private void ShowBadges(int businessId)
        {
            var business = new PersonService(new RockContext()).Get(businessId);

            Entity = business;

            string badgeList = GetAttributeValue(AttributeKey.Badges);

            blStatus.BadgeTypes.Clear();
            if (!string.IsNullOrWhiteSpace(badgeList))
            {
                foreach (string badgeGuid in badgeList.SplitDelimitedValues())
                {
                    Guid guid = badgeGuid.AsGuid();
                    if (guid != Guid.Empty)
                    {
                        var badge = BadgeCache.Get(guid);
                        if (badge != null)
                        {
                            blStatus.BadgeTypes.Add(badge);
                        }
                    }
                }
            }
        }
示例#6
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)
        {
            var achievementTypeGuid = GetAchievementTypeGuid(badge);

            if (!achievementTypeGuid.HasValue)
            {
                return;
            }

            var achievementType = AchievementTypeCache.Get(achievementTypeGuid.Value);

            if (achievementType == null)
            {
                return;
            }

            var achiever = Entity;

            if (achievementType.AchieverEntityTypeId == EntityTypeCache.Get <PersonAlias>().Id&& Person != null)
            {
                // Translate this person badge to the person alias achievement
                achiever = Person.PrimaryAlias;
            }
            else if (achievementType.AchieverEntityTypeId != Entity.TypeId)
            {
                // This badge is not compatabile with this achievement
                return;
            }

            var domElementKey = GenerateBadgeKey(badge);
            var html          = GetHtmlTemplate(domElementKey);

            writer.Write($"{html}");
        }
示例#7
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)
        {
            List <Guid> noteTypes = new List <Guid>();

            if (!string.IsNullOrEmpty(GetAttributeValue(badge, "NoteTypes")))
            {
                noteTypes = Array.ConvertAll(GetAttributeValue(badge, "NoteTypes").Split(','), s => new Guid(s)).ToList();
            }

            var currentUser     = UserLoginService.GetCurrentUser();
            int?currentPersonId = currentUser != null ? currentUser.PersonId : null;

            // check for alert note
            var alertNotesExist = new NoteService(new RockContext()).Queryable().AsNoTracking()
                                  .Where(n => noteTypes.Contains(n.NoteType.Guid) &&
                                         n.EntityId.Value == Entity.Id &&
                                         n.IsAlert == true &&
                                         (!n.IsPrivateNote || n.CreatedByPersonAlias.PersonId == currentPersonId)
                                         )
                                  .Any();

            if (alertNotesExist)
            {
                writer.Write(GetAttributeValue(badge, "BadgeContent"));
            }
        }
示例#8
0
        /// <summary>
        /// Gets the java script.
        /// </summary>
        /// <param name="badge"></param>
        /// <returns></returns>
        protected override string GetJavaScript(BadgeCache badge)
        {
            var achievementTypeGuid = GetAchievementTypeGuid(badge);

            if (!achievementTypeGuid.HasValue)
            {
                return(null);
            }

            var achievementType = AchievementTypeCache.Get(achievementTypeGuid.Value);

            if (achievementType == null)
            {
                return(null);
            }

            var achiever = Entity;

            if (achievementType.AchieverEntityTypeId == EntityTypeCache.Get <PersonAlias>().Id&& Person != null)
            {
                // Translate this person badge to the person alias achievement
                achiever = Person.PrimaryAlias;
            }
            else if (achievementType.AchieverEntityTypeId != Entity.TypeId)
            {
                // This badge is not compatabile with this achievement
                return(null);
            }

            var domElementKey = GenerateBadgeKey(badge);

            return(GetScript(achievementType.Id, achiever.Id, domElementKey));
        }
示例#9
0
        /// <summary>
        /// Gets the java script.
        /// </summary>
        /// <param name="badge"></param>
        /// <returns></returns>
        protected override string GetJavaScript(BadgeCache badge)
        {
            var minBarHeight    = GetAttributeValue(badge, "MinimumBarHeight").AsIntegerOrNull() ?? 2;
            var monthsToDisplay = GetAttributeValue(badge, "MonthsToDisplay").AsIntegerOrNull() ?? 24;

            return
                ($@"var monthNames = [ 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' ];

$.ajax({{
    type: 'GET',
    url: Rock.settings.get('baseUrl') + 'api/Badges/FamilyAttendance/{Person.Id}/{monthsToDisplay}' ,
    statusCode: {{
        200: function (data, status, xhr) {{
            var chartHtml = '<ul class=\'attendance-chart trend-chart list-unstyled\'>';
            $.each(data, function() {{
                var barHeight = (this.AttendanceCount / this.SundaysInMonth) * 100;
                if (barHeight < {minBarHeight}) {{
                    barHeight = {minBarHeight};
                }}

                chartHtml += '<li title=\'' + monthNames[this.Month -1] + ' ' + this.Year +'\'><span style=\'height: ' + barHeight + '%\'></span></li>';
            }});
            chartHtml += '</ul>';

            $('.badge-attendance.badge-id-{badge.Id}').html(chartHtml);
        }}
    }},
}});");
        }
示例#10
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)
        {
            RockContext rockContext           = new RockContext();
            var         dataViewAttributeGuid = GetAttributeValue(badge, "DataView").AsGuid();
            var         dataViewService       = new DataViewService(rockContext);

            if (dataViewAttributeGuid != Guid.Empty)
            {
                var dataView = dataViewService.Get(dataViewAttributeGuid);
                if (dataView != null)
                {
                    var errors = new List <string>();

                    Stopwatch stopwatch     = Stopwatch.StartNew();
                    var       qry           = dataView.GetQuery(null, 30, out errors);
                    var       isEntityFound = false;
                    if (qry != null)
                    {
                        isEntityFound = qry.Where(e => e.Id == Entity.Id).Any();
                        stopwatch.Stop();
                        DataViewService.AddRunDataViewTransaction(dataView.Id,
                                                                  Convert.ToInt32(stopwatch.Elapsed.TotalMilliseconds));
                    }

                    if (isEntityFound)
                    {
                        Dictionary <string, object> mergeValues = new Dictionary <string, object>();
                        mergeValues.Add("Person", Person);
                        mergeValues.Add("Entity", Entity);
                        writer.Write(GetAttributeValue(badge, "BadgeContent").ResolveMergeFields(mergeValues));
                    }
                }
            }
        }
示例#11
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 signalCount = Person.Signals.Where(s => !s.ExpirationDate.HasValue || s.ExpirationDate >= RockDateTime.Now).Count();

            if (!string.IsNullOrWhiteSpace(Person.TopSignalColor) && signalCount > 0)
            {
                writer.Write(string.Format(@"
<div class='badge badge-signal badge-id-{0}' data-toggle='tooltip' title='{3} has the following {4}: {5}'>
    <div class='badge-content' style='color: {1};'>
        <i class='fa fa-flag badge-icon'></i>
        <span class='signal'>{2}</span>
    </div>
</div>",
                                           badge.Id,
                                           Person.TopSignalColor,
                                           signalCount,
                                           Person.NickName,
                                           "signal".PluralizeIf(Person.Signals.Count != 1),
                                           string.Join(", ", Person.Signals.Select(s => s.SignalType.Name.EncodeHtml()))));
            }
        }
示例#12
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;
            }

            DateTime?firstVisit = Person.GetAttributeValue("FirstVisit").AsDateTime();

            if (firstVisit.HasValue)
            {
                TimeSpan attendanceDuration = DateTime.Now - firstVisit.Value;

                string spanValue = string.Empty;
                string spanUnit  = string.Empty;
                string cssClass  = string.Empty;

                if (attendanceDuration.Days < _weeksPeriodInDays) // display value in weeks
                {
                    if (attendanceDuration.Days < 7)
                    {
                        spanValue = "New";
                        cssClass  = "duration-new";
                    }
                    else
                    {
                        spanValue = (attendanceDuration.Days / 7).ToString();
                        spanUnit  = "wk";
                        cssClass  = "duration-weeks";
                    }
                }
                else if (attendanceDuration.Days < _monthsPeriodInDays)    // display value in months
                {
                    spanValue = (attendanceDuration.Days / 30).ToString();
                    spanUnit  = "mo";
                    cssClass  = "duration-months";
                }
                else // display value in months
                {
                    spanValue = (attendanceDuration.Days / 365).ToString();
                    spanUnit  = "yr";
                    cssClass  = "duration-years";
                }

                if (spanValue == "New")
                {
                    writer.Write(String.Format("<div class='badge badge-attendingduration' data-toggle='tooltip' data-original-title='{0} is new this week.'>", Person.NickName));
                }
                else
                {
                    writer.Write(String.Format("<div class='badge badge-attendingduration' data-toggle='tooltip' data-original-title='{0} first visited {1} ago.'>", Person.NickName, spanUnit.ToQuantity(spanValue.AsInteger())));
                }

                writer.Write(String.Format("<div class='duration-metric {0}'>", cssClass));
                writer.Write(String.Format("<span class='metric-value'>{0}<span class='metric-unit'>{1}</span></span>", spanValue, spanUnit));
                writer.Write("</div>");

                writer.Write("</div>");
            }
        }
示例#13
0
        /// <summary>
        /// Gets the java script.
        /// </summary>
        /// <param name="badge"></param>
        /// <returns></returns>
        protected override string GetJavaScript(BadgeCache badge)
        {
            var groupTypeGuid = GetAttributeValue(badge, "GroupType").AsGuidOrNull();

            if (!groupTypeGuid.HasValue || Person == null)
            {
                return(null);
            }

            var badgeColor = GetAttributeValue(badge, "BadgeColor");

            if (badgeColor.IsNullOrWhiteSpace())
            {
                badgeColor = "#0ab4dd";
            }

            return(string.Format(@"
$.ajax({{
    type: 'GET',
    url: Rock.settings.get('baseUrl') + 'api/Badges/InGroupOfType/{0}/{1}' ,
    statusCode: {{
        200: function (data, status, xhr) {{
            var badgeHtml = '';
            var groupIcon = data.GroupTypeIconCss;

            if (groupIcon == '') {{
                groupIcon = 'fa fa-times';
            }}

            if (data.PersonInGroup) {{
                badgeHtml = '<i class=\'badge-icon ' + groupIcon + '\' style=\'color: {2}\'></i>';
                var labelText = data.NickName + ' is in a ' + data.GroupTypeName + '.';
                var groupLength = data.GroupList.length;
                if(groupLength>5){{
                    groupLength = 5;
                }}

                for (i = 0; i < groupLength; ++i) {{
                    labelText = labelText + ' <br/> ' +  data.GroupList[i].GroupName;
                }}

                if(data.GroupList.length >5){{
                    var restGroup = data.GroupList.length - 5;
                    labelText = labelText + ' <br/> (...and ' + restGroup.toString() + ' more)';
                }}


            }} else {{
                badgeHtml = '<i class=\'badge-icon badge-disabled ' + groupIcon + '\'></i>';
                var labelText = data.NickName + ' is not in a ' + data.GroupTypeName + '.';
            }}
            $('.badge-ingroupoftype.badge-id-{3}').html(badgeHtml);
            $('.badge-ingroupoftype.badge-id-{3}').attr('data-original-title', labelText);
        }}
    }},
}});", Person.Id.ToString(), groupTypeGuid.ToString(), badgeColor, badge.Id));
        }
        /// <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)
        {
            Guid?  groupTypeGuid = GetAttributeValue(badge, "GroupType").AsGuid();
            string badgeColor    = GetAttributeValue(badge, "BadgeColor");

            var groupNameOrLink = LinkedPageUrl(badge, "GroupDetailPage");

            if (!string.IsNullOrWhiteSpace(groupNameOrLink))
            {
                groupNameOrLink = @"<a href=""" + groupNameOrLink + @"?GroupId=' + this.GroupId + '"">' + this.GroupName + '</a>";
            }
            else
            {
                groupNameOrLink = @"' + this.GroupName + '";
            }

            if (groupTypeGuid.HasValue && !String.IsNullOrWhiteSpace(badgeColor))
            {
                writer.Write(String.Format(
                                 "<span class='label badge-geofencing-group badge-id-{0}' style='background-color:{1};display:none' ></span>",
                                 badge.Id, badgeColor.EscapeQuotes()));

                writer.Write(String.Format(@"
<script>
Sys.Application.add_load(function () {{
    $.ajax({{
            type: 'GET',
            url: Rock.settings.get('baseUrl') + 'api/rocks.kfs/PersonBadges/NestedGeofencingGroups/{0}/{1}' ,
            statusCode: {{
                200: function (data, status, xhr) {{
                    var $badge = $('.badge-geofencing-group.badge-id-{2}');
                    var badgeHtml = '';

                    $.each(data, function() {{
                        if ( badgeHtml != '' ) {{
                            badgeHtml += ' | ';
                        }}
                        badgeHtml += '<span title=""' + this.LeaderNames + '"" data-toggle=""tooltip"">{3}</span>';
                    }});

                    if (badgeHtml != '') {{
                        $badge.show('fast');
                    }} else {{
                        $badge.hide();
                    }}
                    $badge.html(badgeHtml);
                    $badge.find('span').tooltip();
                }}
            }},
    }});
}});
</script>

", Person.Id.ToString(), groupTypeGuid.ToString(), badge.Id, groupNameOrLink));
            }
        }
示例#15
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;
            }

            writer.Write($"<div class='badge badge-personaldevice badge-id-{badge.Id}' data-toggle='tooltip' data-original-title=''>");
            writer.Write("</div>");
        }
示例#16
0
        /// <summary>
        /// Restores view-state information from a previous request that was saved with the <see cref="M:System.Web.UI.WebControls.WebControl.SaveViewState" /> method.
        /// </summary>
        /// <param name="savedState">An object that represents the control state to restore.</param>
        protected override void LoadViewState(object savedState)
        {
            base.LoadViewState(savedState);
            var delimitedIds = ViewState["BadgeTypeIds"] as string;

            if (!string.IsNullOrWhiteSpace(delimitedIds))
            {
                var badgeTypeIds = delimitedIds.Split(',').Select(s => s.AsIntegerOrNull()).Where(i => i.HasValue);
                BadgeTypes = badgeTypeIds.Select(id => BadgeCache.Get(id.Value)).ToList();
            }
        }
示例#17
0
        /// <summary>
        /// Gets the Guid for the Badge that has the specified Id
        /// </summary>
        /// <param name="id">The identifier.</param>
        /// <returns></returns>
        public override Guid?GetGuid(int id)
        {
            var cacheItem = BadgeCache.Get(id);

            if (cacheItem != null)
            {
                return(cacheItem.Guid);
            }

            return(null);
        }
示例#18
0
        /// <summary>
        /// Restores view-state information from a previous page request that was saved by the <see cref="M:System.Web.UI.Control.SaveViewState" /> method.
        /// </summary>
        /// <param name="savedState">An <see cref="T:System.Object" /> that represents the control state to be restored.</param>
        protected override void LoadViewState(object savedState)
        {
            base.LoadViewState(savedState);

            string json = ViewState["PersonBadge"] as string;

            if (!string.IsNullOrWhiteSpace(json))
            {
                PersonBadge = BadgeCache.FromJson(json);
            }
        }
示例#19
0
        /// <summary>
        /// Get the streak type described by the attribute value
        /// </summary>
        /// <param name="badge"></param>
        /// <returns></returns>
        private StreakTypeCache GetStreakTypeCache(BadgeCache badge)
        {
            var streakTypeGuid = GetAttributeValue(badge, AttributeKey.StreakType).AsGuidOrNull();

            if (!streakTypeGuid.HasValue)
            {
                return(null);
            }

            return(StreakTypeCache.Get(streakTypeGuid.Value));
        }
示例#20
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;
            }

            writer.Write(String.Format("<div class='badge badge-ingroupwithpurpose badge-id-{0}' data-toggle='tooltip' data-original-title=''>", badge.Id));

            writer.Write("</div>");
        }
示例#21
0
        /// <summary>
        /// Restores view-state information from a previous page request that was saved by the <see cref="M:System.Web.UI.Control.SaveViewState" /> method.
        /// </summary>
        /// <param name="savedState">An <see cref="T:System.Object" /> that represents the control state to be restored.</param>
        protected override void LoadViewState(object savedState)
        {
            base.LoadViewState(savedState);

            var badgeId = ViewState["BadgeId"] as int?;

            if (badgeId.HasValue)
            {
                BadgeCache = BadgeCache.Get(badgeId.Value);
            }
        }
示例#22
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;
            }

            if (!String.IsNullOrEmpty(GetAttributeValue(badge, "GroupTypePurpose")))
            {
                string badgeColor = "#0ab4dd";

                if (!String.IsNullOrEmpty(GetAttributeValue(badge, "BadgeColor")))
                {
                    badgeColor = GetAttributeValue(badge, "BadgeColor");
                }

                Guid groupTypePurposeGuid = GetAttributeValue(badge, "GroupTypePurpose").AsGuid();
                if (groupTypePurposeGuid != Guid.Empty)
                {
                    writer.Write(String.Format("<div class='badge badge-ingroupwithpurpose badge-id-{0}' data-toggle='tooltip' data-original-title=''>", badge.Id));

                    writer.Write("</div>");

                    writer.Write(String.Format(@"
<script>
    Sys.Application.add_load(function () {{
                                                
        $.ajax({{
                type: 'GET',
                url: Rock.settings.get('baseUrl') + 'api/Badges/InGroupWithPurpose/{0}/{1}' ,
                statusCode: {{
                    200: function (data, status, xhr) {{
                        var badgeHtml = '';
                        var groupIcon = '{4}';

                        if (data.PersonInGroup) {{
                            badgeHtml = '<i class=\'badge-icon ' + groupIcon + '\' style=\'color: {2}\'></i>';
                            var labelText = data.NickName + ' is in group with the ' + data.Purpose + ' purpose.';
                        }} else {{
                            badgeHtml = '<i class=\'badge-icon badge-disabled ' + groupIcon + '\'></i>';
                            var labelText = data.NickName + ' is not in a group with the ' + data.Purpose + ' purpose.';
                        }}
                        $('.badge-ingroupwithpurpose.badge-id-{3}').html(badgeHtml);
                        $('.badge-ingroupwithpurpose.badge-id-{3}').attr('data-original-title', labelText);
                    }}
                }},
        }});
    }});
</script>          
", Person.Id.ToString(), groupTypePurposeGuid.ToString(), badgeColor, badge.Id, GetAttributeValue(badge, "BadgeIconCss")));
                }
            }
        }
示例#23
0
        /// <summary>
        /// Gets the java script.
        /// </summary>
        /// <param name="badge"></param>
        /// <returns></returns>
        protected override string GetJavaScript(BadgeCache badge)
        {
            if (Person == null)
            {
                return(null);
            }

            //  create url for link to details
            string detailPageUrl = new PageReference(GetAttributeValue(badge, "PersonalDevicesDetail"), new Dictionary <string, string> {
                { "PersonGuid", Person.Guid.ToString() }
            }).BuildUrl();

            string noneCss = GetAttributeValue(badge, "HideIfNone").AsBoolean() ? "none" : "";

            return($@"
                $.ajax({{
                    type: 'GET',
                    url: Rock.settings.get('baseUrl') + 'api/Badges/PersonalDevicesNumber/{Person.Id}' ,
                    statusCode: {{
                        200: function (data, status, xhr) {{
                            var badgeHtml = '';
                            var devicesNumber = data;
                            var cssClass = '';
                            var linkUrl = '{detailPageUrl}';
                            var badgeContent = '';
                            var labelContent = '';
                            var badgeClass = 'badge-disabled';

                            if (devicesNumber > 0){{
                                badgeClass=''
                            }}

                            if ( devicesNumber !=1 ) {{
                                labelContent = 'There are ' + devicesNumber + ' devices linked to this individual.';                                 
                            }} else {{
                                labelContent = 'There is 1 device linked to this individual.';
                            }}
        
                            if (linkUrl != '') {{
                                badgeContent = '<a href=\'' + linkUrl + '\'><div class=\'badge-content \'><i class=\''+ badgeClass +' fa fa-mobile badge-icon\'></i><span class=\'deviceCount badge-icon '+ badgeClass +'\'>' + devicesNumber + '</span></div></a>';
                            }} else {{
                                badgeContent = '<div class=\'badge-content \'><i class=\''+ badgeClass +' fa  fa-mobile badge-icon\'></i><span class=\'deviceCount badge-icon '+ badgeClass +'\'>' + devicesNumber + '</span></div>';
                            }}
                            $('.badge-personaldevice.badge-id-{badge.Id}').html(badgeContent);
                            $('.badge-personaldevice.badge-id-{badge.Id}').attr('data-original-title', labelContent);

                            if (devicesNumber < 1) {{
                                $('.badge-personaldevice.badge-id-{badge.Id}').css('display', '{noneCss}');
                            }}
                        }}
                    }},
                }});");
        }
        /// <summary>
        /// Builds and returns the URL for a linked <see cref="Rock.Model.Page"/> from a "linked page attribute" and any necessary query parameters.
        /// </summary>
        /// <param name="attributeKey">A <see cref="System.String"/> representing the name of the linked <see cref="Rock.Model.Page"/> attribute key.</param>
        /// <param name="queryParams">A <see cref="System.Collections.Generic.Dictionary{String,String}" /> containing the query string parameters to be added to the URL.
        /// In each <see cref="System.Collections.Generic.KeyValuePair{String,String}"/> the key value is a <see cref="System.String"/> that represents the name of the query string
        /// parameter, and the value is a <see cref="System.String"/> that represents the query string value..</param>
        /// <returns>A <see cref="System.String"/> representing the URL to the linked <see cref="Rock.Model.Page"/>. </returns>
        public virtual string LinkedPageUrl(BadgeCache badge, string attributeKey, Dictionary <string, string> queryParams = null)
        {
            var pageReference = new PageReference(GetAttributeValue(badge, attributeKey), queryParams);

            if (pageReference.PageId > 0)
            {
                return(pageReference.BuildUrl());
            }
            else
            {
                return(string.Empty);
            }
        }
示例#25
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;
            }

            int duration = GetAttributeValue(badge, "Duration").AsIntegerOrNull() ?? 16;

            writer.Write(string.Format("<div class='badge badge-weeksattendanceduration badge-id-{0}' data-toggle='tooltip' data-original-title='Family attendance for the last {1} weeks.'>", badge.Id, duration));

            writer.Write("</div>");
        }
示例#26
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;
            }

            if (!String.IsNullOrEmpty(GetAttributeValue(badge, "GroupType")))
            {
                writer.Write(String.Format("<div class='badge badge-ingroupoftype badge-id-{0}' data-html='true'  data-toggle='tooltip' data-original-title=''>", badge.Id));

                writer.Write("</div>");
            }
        }
示例#27
0
        /// <summary>
        /// Gets the java script.
        /// </summary>
        /// <param name="badge"></param>
        /// <returns></returns>
        protected override string GetJavaScript(BadgeCache badge)
        {
            if (Person == null)
            {
                return(null);
            }

            var interactionChannelGuid = GetAttributeValue(badge, "InteractionChannel").AsGuidOrNull();
            var badgeColor             = GetAttributeValue(badge, "BadgeColor");

            if (!interactionChannelGuid.HasValue || string.IsNullOrEmpty(badgeColor))
            {
                return(null);
            }

            var dateRange = GetAttributeValue(badge, "DateRange");
            var badgeIcon = GetAttributeValue(badge, "BadgeIconCss");

            var pageId             = PageCache.Get(GetAttributeValue(badge, "DetailPage").AsGuid())?.Id;
            var interactionChannel = InteractionChannelCache.Get(interactionChannelGuid.Value);
            var detailPageUrl      = VirtualPathUtility.ToAbsolute($"~/page/{pageId}?ChannelId={interactionChannel?.Id}");

            return($@"
                $.ajax({{
                    type: 'GET',
                    url: Rock.settings.get('baseUrl') + 'api/Badges/InteractionsInRange/{Person.Id}/{interactionChannel.Id}/{HttpUtility.UrlEncode( dateRange )}' ,
                    statusCode: {{
                        200: function (data, status, xhr) {{

                        var interactionCount = data;
                        var opacity = 0;
                        if(data===0){{
                            opacity = 0.4;
                        }} else {{
                            opacity = 1;
                        }}
                        var linkUrl = '{detailPageUrl}';

                        if (linkUrl != '') {{
                                badgeContent = '<a href=\'' + linkUrl + '\'><span class=\'badge-content fa-layers fa-fw\' style=\'opacity:'+ opacity +'\'><i class=\'fa {badgeIcon} badge-icon\' style=\'color: {badgeColor}\'></i><span class=\'fa-layers-counter\'>'+ interactionCount +'</span></span></a>';
                            }} else {{
                                badgeContent = '<div class=\'badge-content fa-layers \' style=\'opacity:'+ opacity +'\'><i class=\'fa {badgeIcon} badge-icon\' style=\'color: {badgeColor}\'></i><span class=\'fa-layers-counter\'>'+ interactionCount +'</span></div>';
                            }}

                            $('.badge-interactioninrange.badge-id-{badge.Id}').html(badgeContent);
                        }}
                    }},
                }});");
        }
示例#28
0
        /// <summary>
        /// Determines if the badge applies to the entity
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="badge"></param>
        public static bool DoesBadgeApplyToEntity(BadgeCache badge, IEntity entity)
        {
            if (entity == null || badge == null)
            {
                return(false);
            }

            // Determine the type of the entity
            var typeOfEntity = entity.GetType();

            if (typeOfEntity.IsDynamicProxyType())
            {
                typeOfEntity = typeOfEntity.BaseType;
            }

            var entityTypeCache = EntityTypeCache.Get(typeOfEntity);

            // Check that the type matches
            if (entityTypeCache == null || (badge.EntityTypeId.HasValue && entityTypeCache.Id != badge.EntityTypeId))
            {
                return(false);
            }

            if (badge.EntityTypeQualifierColumn.IsNullOrWhiteSpace() || badge.EntityTypeQualifierValue.IsNullOrWhiteSpace())
            {
                // If the qualifier column or value are omitted, then the badge is not filtered
                return(true);
            }

            // Get the property to which the qualifier column refers
            var qualifierProperty = typeOfEntity.GetProperties().FirstOrDefault(p => p.Name == badge.EntityTypeQualifierColumn);

            if (qualifierProperty == null)
            {
                return(false);
            }

            // Make sure the qualifier value matches the badge type specifications
            var qualifierValue = qualifierProperty.GetValue(entity);

            if (qualifierValue == null || qualifierValue.ToString() != badge.EntityTypeQualifierValue)
            {
                return(false);
            }

            // Qualifiers match
            return(true);
        }
示例#29
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;
            }

            string badgeColor = GetAttributeValue(badge, "BadgeColor");

            if (!badgeColor.IsNullOrWhiteSpace())
            {
                writer.Write(string.Format(
                                 "<span class='label badge-geofencing-group badge-id-{0}' style='background-color:{1};display:none' ></span>",
                                 badge.Id, badgeColor.EscapeQuotes()));
            }
        }
示例#30
0
        /// <summary>
        /// Gets the java script.
        /// </summary>
        /// <param name="badge"></param>
        /// <returns></returns>
        protected override string GetJavaScript(BadgeCache badge)
        {
            if (Person == null)
            {
                return(null);
            }

            var stepProgramGuid = GetStepProgramGuid(badge);

            if (!stepProgramGuid.HasValue)
            {
                return(null);
            }

            var domElementKey = GenerateBadgeKey(badge);
            var isCondensed   = IsCondensed(badge);

            return(GetScript(stepProgramGuid.Value, Person.Id, domElementKey, isCondensed));
        }