/// <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)); }
/// <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(); } }
/// <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); } }
/// <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>"); }
/// <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); } } } } }
/// <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}"); }
/// <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")); } }
/// <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)); }
/// <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); }} }}, }});"); }
/// <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)); } } } }
/// <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())))); } }
/// <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>"); } }
/// <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)); } }
/// <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>"); }
/// <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(); } }
/// <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); }
/// <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); } }
/// <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)); }
/// <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>"); }
/// <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); } }
/// <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"))); } } }
/// <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); } }
/// <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>"); }
/// <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>"); } }
/// <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); }} }}, }});"); }
/// <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); }
/// <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())); } }
/// <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)); }