/// <summary> /// Renders the specified writer. /// </summary> /// <param name="badge">The badge.</param> /// <param name="writer">The writer.</param> public override void Render(PersonBadgeCache badge, System.Web.UI.HtmlTextWriter writer) { int duration = GetAttributeValue(badge, "Duration").AsIntegerOrNull() ?? 16; writer.Write(string.Format("<div class='badge badge-weeksattendanceduration badge-id-{0}' data-original-title='Family attendance for the last {1} weeks.'>", badge.Id, duration)); writer.Write("</div>"); writer.Write(string.Format(@" <script> Sys.Application.add_load(function () {{ $.ajax({{ type: 'GET', url: Rock.settings.get('baseUrl') + 'api/PersonBadges/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); }} }}, }}); }}); </script> ", 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(PersonBadgeCache badge, System.Web.UI.HtmlTextWriter writer) { if (Person != null) { // create url for link to details string detailPageUrl = new PageReference(GetAttributeValue(badge, "PersonalDevicesDetail"), new Dictionary <string, string> { { "PersonGuid", Person.Guid.ToString() } }).BuildUrl(); writer.Write($"<div class='badge badge-personaldevice badge-id-{badge.Id}' data-toggle='tooltip' data-original-title=''>"); writer.Write("</div>"); writer.Write($@" <script> Sys.Application.add_load(function () {{ $.ajax({{ type: 'GET', url: Rock.settings.get('baseUrl') + 'api/PersonBadges/PersonalDevicesNumber/{Person.Id}' , statusCode: {{ 200: function (data, status, xhr) {{ var badgeHtml = ''; var devicesNumber = data; var cssClass = ''; var linkUrl = '{detailPageUrl}'; var badgeContent = ''; var labelContent = ''; if (devicesNumber > 0) {{ 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=\'fa fa-mobile badge-icon\'></i><span class=\'deviceCount\'>' + devicesNumber + '</span></div></a>'; }} else {{ badgeContent = '<div class=\'badge-content \'><i class=\'fa fa-mobile badge-icon\'></i><span class=\'deviceCount\'>' + devicesNumber + '</span></div>'; }} $('.badge-personaldevice.badge-id-{badge.Id}').html(badgeContent); $('.badge-personaldevice.badge-id-{badge.Id}').attr('data-original-title', labelContent); }} else {{ $('.badge-personaldevice.badge-id-{badge.Id}').css('display', 'none'); $('.badge-personaldevice.badge-id-{badge.Id}').html(''); }} }} }}, }}); }}); </script> "); } }
/// <summary> /// Renders the specified writer. /// </summary> /// <param name="badge">The badge.</param> /// <param name="writer">The writer.</param> public override void Render( PersonBadgeCache badge, System.Web.UI.HtmlTextWriter writer ) { 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 == Person.Id && n.IsAlert == true && ( !n.IsPrivateNote || n.CreatedByPersonAlias.PersonId == currentPersonId ) ) .Any(); if ( alertNotesExist ) { writer.Write( GetAttributeValue( badge, "BadgeContent" ) ); } }
/// <summary> /// Renders the specified writer. /// </summary> /// <param name="badge">The badge.</param> /// <param name="writer">The writer.</param> public override void Render(PersonBadgeCache badge, System.Web.UI.HtmlTextWriter writer) { int minBarHeight = GetAttributeValue(badge, "MinimumBarHeight").AsIntegerOrNull() ?? 2; int monthsToDisplay = GetAttributeValue(badge, "MonthsToDisplay").AsIntegerOrNull() ?? 24; string animateClass = string.Empty; if (GetAttributeValue(badge, "AnimateBars") == null || GetAttributeValue(badge, "AnimateBars").AsBoolean()) { animateClass = " animate"; } string tooltip = string.Empty; if (Person.AgeClassification == AgeClassification.Child) { tooltip = $"{Person.NickName.ToPossessive().EncodeHtml()} attendance for the last 24 months. Each bar is a month."; } else { tooltip = "Family attendance for the last 24 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>"); writer.Write(String.Format(@" <script> Sys.Application.add_load(function () {{ var monthNames = [ 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' ]; $.ajax({{ type: 'GET', url: Rock.settings.get('baseUrl') + 'api/PersonBadges/FamilyAttendance/{0}/{1}' , statusCode: {{ 200: function (data, status, xhr) {{ var chartHtml = '<ul class=\'badge-attendance-chart list-unstyled\'>'; $.each(data, function() {{ var barHeight = (this.AttendanceCount / this.SundaysInMonth) * 100; if (barHeight < {2}) {{ barHeight = {2}; }} chartHtml += '<li title=\'' + monthNames[this.Month -1] + ' ' + this.Year +'\'><span style=\'height: ' + barHeight + '%\'></span></li>'; }}); chartHtml += '</ul>'; $('.badge-attendance.badge-id-{3}').html(chartHtml); }} }}, }}); }}); </script> ", Person.Id.ToString(), monthsToDisplay, minBarHeight, badge.Id)); }
/// <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.AddCSSLink("~/Styles/fluidbox.css"); RockPage.AddScriptLink("~/Scripts/imagesloaded.min.js"); RockPage.AddScriptLink("~/Scripts/jquery.fluidbox.min.js"); // this event gets fired after block settings are updated. it's nice to repaint the screen if these settings would alter it this.BlockUpdated += Block_BlockUpdated; this.AddConfigurationUpdateTrigger(pnlContent); if (Person != null) { pnlFollow.Visible = GetAttributeValue("AllowFollowing").AsBoolean(); // Record Type - this is always "business". it will never change. if (Person.RecordTypeValueId == DefinedValueCache.Get(Rock.SystemGuid.DefinedValue.PERSON_RECORD_TYPE_BUSINESS.AsGuid()).Id) { var parms = new Dictionary <string, string>(); parms.Add("businessId", Person.Id.ToString()); NavigateToLinkedPage("BusinessDetailPage", parms); } if (Person.IsDeceased) { divBio.AddCssClass("deceased"); } // Set the browser page title to include person's name RockPage.BrowserTitle = Person.FullName; string badgeList = GetAttributeValue("Badges"); if (!string.IsNullOrWhiteSpace(badgeList)) { foreach (string badgeGuid in badgeList.SplitDelimitedValues()) { Guid guid = badgeGuid.AsGuid(); if (guid != Guid.Empty) { var personBadge = PersonBadgeCache.Get(guid); if (personBadge != null) { blStatus.PersonBadges.Add(personBadge); } } } } lbEditPerson.Visible = IsUserAuthorized(Rock.Security.Authorization.EDIT); // only show if the Impersonation button if the feature is enabled, and the current user is authorized to Administrate the person bool enableImpersonation = this.GetAttributeValue("EnableImpersonation").AsBoolean(); lbImpersonate.Visible = false; if (enableImpersonation && Person.Id != CurrentPersonId && Person.IsAuthorized(Rock.Security.Authorization.ADMINISTRATE, this.CurrentPerson)) { lbImpersonate.Visible = true; } } }
/// <summary> /// Renders the specified writer. /// </summary> /// <param name="badge">The badge.</param> /// <param name="writer">The writer.</param> public override void Render(PersonBadgeCache badge, System.Web.UI.HtmlTextWriter writer) { 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 == Person.Id && n.IsAlert == true && (!n.IsPrivateNote || n.CreatedByPersonAlias.PersonId == currentPersonId) ) .Any(); if (alertNotesExist) { writer.Write(GetAttributeValue(badge, "BadgeContent")); } }
/// <summary> /// Sends server control content to a provided <see cref="T:System.Web.UI.HtmlTextWriter" /> object, which writes the content to be rendered on the client. /// </summary> /// <param name="writer">The <see cref="T:System.Web.UI.HtmlTextWriter" /> object that receives the server control content.</param> protected override void Render(HtmlTextWriter writer) { #pragma warning disable CS0618 // Type or member is obsolete var personBadgeCache = new PersonBadgeCache(BadgeCache); #pragma warning restore CS0618 // Type or member is obsolete var badgeComponent = BadgeCache?.BadgeComponent; if (badgeComponent != null) { var contextEntityBlock = ContextEntityBlock; if (contextEntityBlock != null) { if (BadgeService.DoesBadgeApplyToEntity(BadgeCache, contextEntityBlock.Entity)) { badgeComponent.ParentContextEntityBlock = contextEntityBlock; badgeComponent.Entity = contextEntityBlock.Entity; badgeComponent.Render(BadgeCache, writer); #pragma warning disable CS0618 // Type or member is obsolete badgeComponent.Render(personBadgeCache, writer); #pragma warning restore CS0618 // Type or member is obsolete const string script = "$('.badge[data-toggle=\"tooltip\"]').tooltip({html: true}); $('.badge[data-toggle=\"popover\"]').popover();"; ScriptManager.RegisterStartupScript(this, this.GetType(), "badge-popover", script, true); } } } }
/// <summary> /// Sends server control content to a provided <see cref="T:System.Web.UI.HtmlTextWriter" /> object, which writes the content to be rendered on the client. /// </summary> /// <param name="writer">The <see cref="T:System.Web.UI.HtmlTextWriter" /> object that receives the server control content.</param> protected override void Render(HtmlTextWriter writer) { #pragma warning disable CS0618 // Type or member is obsolete var personBadgeCache = new PersonBadgeCache(BadgeCache); #pragma warning restore CS0618 // Type or member is obsolete var badgeComponent = BadgeCache?.BadgeComponent; if (badgeComponent == null) { return; } var entity = Entity; if (entity == null) { entity = ContextEntityBlock?.Entity; } if (entity == null) { return; } if (!BadgeService.DoesBadgeApplyToEntity(BadgeCache, entity)) { return; } try { badgeComponent.ParentContextEntityBlock = ContextEntityBlock; badgeComponent.Entity = entity; badgeComponent.Render(BadgeCache, writer); #pragma warning disable CS0618 // Type or member is obsolete badgeComponent.Render(personBadgeCache, writer); #pragma warning restore CS0618 // Type or member is obsolete var script = badgeComponent.GetWrappedJavaScript(BadgeCache); if (!script.IsNullOrWhiteSpace()) { ScriptManager.RegisterStartupScript(this, GetType(), $"badge_{ClientID}", script, true); } } catch (Exception ex) { var errorMessage = $"An error occurred rendering badge: {BadgeCache?.Name }, badge-id: {BadgeCache?.Id}"; ExceptionLogService.LogException(new Exception(errorMessage, ex)); var badgeNameClass = BadgeCache?.Name.ToLower().RemoveAllNonAlphaNumericCharacters() ?? "error"; writer.Write($"<div class='badge badge-{badgeNameClass} badge-id-{BadgeCache?.Id} badge-error' data-toggle='tooltip' data-original-title='{errorMessage}'>"); writer.Write($" <i class='fa fa-exclamation-triangle badge-icon text-warning'></i>"); writer.Write("</div>"); } finally { const string script = "$('.badge[data-toggle=\"tooltip\"]').tooltip({html: true}); $('.badge[data-toggle=\"popover\"]').popover();"; ScriptManager.RegisterStartupScript(this, this.GetType(), "badge-popover", script, true); } }
/// <summary> /// Renders the specified writer. /// </summary> /// <param name="badge">The badge.</param> /// <param name="writer">The writer.</param> public override void Render( PersonBadgeCache badge, System.Web.UI.HtmlTextWriter writer ) { 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>"); writer.Write(string.Format( @" <script> Sys.Application.add_load(function () {{ $.ajax({{ type: 'GET', url: Rock.settings.get('baseUrl') + 'api/PersonBadges/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); }} }}, }}); }}); </script> ", 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( PersonBadgeCache badge, System.Web.UI.HtmlTextWriter writer ) { // Find the Spiritual Gift Personality Type / Strength String description = string.Empty; string gifting = Person.GetAttributeValue( "Gifting" ); DefinedValueCache giftingValue = null; if ( !string.IsNullOrEmpty( gifting ) ) { giftingValue = DefinedTypeCache.Read( com.centralaz.SpiritualGifts.SystemGuid.DefinedType.SPRITUAL_GIFTS_DEFINED_TYPE.AsGuid() ).DefinedValues.Where( v => v.Value == gifting ).FirstOrDefault(); if ( giftingValue != null ) { description = giftingValue.Description; } } // create url for link to details if configured string detailPageUrl = string.Empty; if ( !String.IsNullOrEmpty( GetAttributeValue( badge, "SpiritualGiftResultDetail" ) ) ) { int pageId = Rock.Web.Cache.PageCache.Read( Guid.Parse( GetAttributeValue( badge, "SpiritualGiftResultDetail" ) ) ).Id; detailPageUrl = System.Web.VirtualPathUtility.ToAbsolute( String.Format( "~/page/{0}?Person={1}", pageId, Person.UrlEncodedKey ) ); } //Determine icon string iconClass = string.Empty; if ( giftingValue != null ) { switch ( giftingValue.Value ) { case "Prophecy": iconClass = "badge-icon fa fa-cloud-download"; break; case "Ministry": iconClass = "badge-icon fa fa-globe"; break; case "Teaching": iconClass = "badge-icon fa fa-compass"; break; case "Encouragement": iconClass = "badge-icon fa fa-fire"; break; case "Giving": iconClass = "badge-icon fa fa-diamond"; break; case "Leadership": iconClass = "badge-icon fa fa-bullhorn"; break; case "Mercy": iconClass = "badge-icon fa fa-life-ring"; break; } //Badge HTML writer.Write( "<div class='badge' data-original-title='Spiritual Gift is {0}' ><a href='{1}'>", giftingValue.Value, !String.IsNullOrEmpty( detailPageUrl ) ? detailPageUrl : "#" ); writer.Write( String.Format( "<i class='{0}'></i>", iconClass ) ); writer.Write( "</a></div>" ); } }
/// <summary> /// Renders the specified writer. /// </summary> /// <param name="badge">The badge.</param> /// <param name="writer">The writer.</param> public override void Render(PersonBadgeCache badge, System.Web.UI.HtmlTextWriter writer) { Guid?groupTypeGuid = GetAttributeValue(badge, "GroupType").AsGuidOrNull(); if (groupTypeGuid.HasValue) { var lavaTemplate = this.GetAttributeValue(badge, "LavaTemplate"); var slidingDateRangeDelimitedValues = this.GetAttributeValue(badge, "DateRange"); var dateRange = SlidingDateRangePicker.CalculateDateRangeFromDelimitedValues(slidingDateRangeDelimitedValues); var dateRangeSummary = SlidingDateRangePicker.FormatDelimitedValues(slidingDateRangeDelimitedValues); var mergeFields = Lava.LavaHelper.GetCommonMergeFields(null, null, new Lava.CommonMergeFieldsOptions { GetLegacyGlobalMergeFields = false }); mergeFields.Add("Person", this.Person); using (var rockContext = new RockContext()) { var groupType = GroupTypeCache.Read(groupTypeGuid.Value); int groupTypeId = groupType?.Id ?? 0; mergeFields.Add("GroupType", groupType); mergeFields.Add("Badge", badge); mergeFields.Add("DateRange", new { Dates = dateRange, Summary = dateRangeSummary }); var personAliasIds = Person.Aliases.Select(a => a.Id).ToList(); var attendanceQuery = new AttendanceService(rockContext).Queryable().Where(a => a.Group.GroupTypeId == groupTypeId && a.DidAttend == true && personAliasIds.Contains(a.PersonAliasId.Value)); if (dateRange.Start.HasValue) { attendanceQuery = attendanceQuery.Where(a => a.StartDateTime >= dateRange.Start.Value); } if (dateRange.End.HasValue) { attendanceQuery = attendanceQuery.Where(a => a.StartDateTime < dateRange.End.Value); } var attendanceDateTimes = attendanceQuery.Select(a => a.StartDateTime).ToList(); if (attendanceDateTimes.Any()) { var attendanceResult = new { Count = attendanceDateTimes.Count(), LastDateTime = attendanceDateTimes.Max() }; mergeFields.Add("Attendance", attendanceResult); } string output = lavaTemplate.ResolveMergeFields(mergeFields); writer.Write(output); } } }
/// <summary> /// Renders the specified writer. /// </summary> /// <param name="badge">The badge.</param> /// <param name="writer">The writer.</param> public override void Render(PersonBadgeCache badge, System.Web.UI.HtmlTextWriter writer) { var value = Person.GetAttributeValue("FirstVisit"); 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-original-title='{0} is new this week.'>", Person.NickName)); } else { writer.Write(String.Format("<div class='badge badge-attendingduration' data-original-title='{0} has attended for {1} {2}.'>", Person.NickName, spanValue, spanUnit)); } 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> /// Renders the specified writer. /// </summary> /// <param name="badge">The badge.</param> /// <param name="writer">The writer.</param> public override void Render( PersonBadgeCache badge, System.Web.UI.HtmlTextWriter writer ) { var value = Person.GetAttributeValue( "FirstVisit" ); 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> /// Renders the specified writer. /// </summary> /// <param name="badge">The badge.</param> /// <param name="writer">The writer.</param> public override void Render(PersonBadgeCache badge, System.Web.UI.HtmlTextWriter writer) { if (Person != null) { var label = GetLabel(Person); if (label != null) { label.RenderControl(writer); } } }
/// <summary> /// Renders the specified writer. /// </summary> /// <param name="badge">The badge.</param> /// <param name="writer">The writer.</param> public override void Render( PersonBadgeCache badge, System.Web.UI.HtmlTextWriter writer ) { if ( Person != null ) { var label = GetLabel( Person ); if ( label != null ) { label.RenderControl( writer ); } } }
/// <summary> /// Renders the specified writer. /// </summary> /// <param name="badge">The badge.</param> /// <param name="writer">The writer.</param> public override void Render( PersonBadgeCache badge, System.Web.UI.HtmlTextWriter writer ) { if (!string.IsNullOrWhiteSpace(Person.GetAttributeValue("FirstVisit"))) { DateTime firstVisit = Convert.ToDateTime(Person.GetAttributeValue("FirstVisit")); TimeSpan attendanceDuration = DateTime.Now - firstVisit; 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-original-title='{0} is new this week.'>", Person.NickName)); } else { writer.Write(String.Format("<div class='badge badge-attendingduration' data-original-title='{0} has attended for {1} {2}.'>", Person.NickName, spanValue, spanUnit)); } 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>"); } }
public PersonBadgeInfo(PersonBadgeCache badge) { Id = badge.Id; Name = badge.Name; Description = badge.Description; badge.LoadAttributes(); IsActive = badge.BadgeComponent != null ? badge.BadgeComponent.IsActive : false; Order = badge.BadgeComponent != null ? badge.BadgeComponent.Order : 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 = PersonBadgeCache.FromJson(json); } }
/// <summary> /// Gets the Guid for the RestAction that has the specified Id /// </summary> /// <param name="id">The identifier.</param> /// <returns></returns> public override Guid?GetGuid(int id) { var cacheItem = PersonBadgeCache.Get(id); if (cacheItem != null) { return(cacheItem.Guid); } return(null); }
/// <summary> /// Renders the specified writer. /// </summary> /// <param name="badge">The badge.</param> /// <param name="writer">The writer.</param> public override void Render( PersonBadgeCache badge, System.Web.UI.HtmlTextWriter writer ) { if (!String.IsNullOrEmpty(GetAttributeValue(badge, "GroupType"))) { string badgeColor = "#0ab4dd"; if (!String.IsNullOrEmpty(GetAttributeValue(badge, "BadgeColor"))) { badgeColor = GetAttributeValue(badge, "BadgeColor"); } Guid groupTypeGuid = GetAttributeValue( badge, "GroupType" ).AsGuid(); if ( groupTypeGuid != Guid.Empty ) { writer.Write( String.Format( "<div class='badge badge-ingroupoftype 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/PersonBadges/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 + '.'; }} 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); }} }}, }}); }}); </script> ", 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(PersonBadgeCache badge, System.Web.UI.HtmlTextWriter writer) { if (!String.IsNullOrEmpty(GetAttributeValue(badge, "GroupType"))) { string badgeColor = "#0ab4dd"; if (!String.IsNullOrEmpty(GetAttributeValue(badge, "BadgeColor"))) { badgeColor = GetAttributeValue(badge, "BadgeColor"); } Guid groupTypeGuid = GetAttributeValue(badge, "GroupType").AsGuid(); if (groupTypeGuid != Guid.Empty) { writer.Write(String.Format("<div class='badge badge-ingroupoftype badge-id-{0}' 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/PersonBadges/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 + '.'; }} else {{ badgeHtml = '<i class=\'badge-icon badge-disabled ' + groupIcon + '\' style=\'color: {2}\'></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); }} }}, }}); }}); </script> ", Person.Id.ToString(), groupTypeGuid.ToString(), badgeColor, badge.Id)); } } }
/// <summary> /// Handles the Click event of the btnSave control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="EventArgs" /> instance containing the event data.</param> protected void btnSave_Click(object sender, EventArgs e) { PersonBadge PersonBadge = null; var rockContext = new RockContext(); PersonBadgeService PersonBadgeService = new PersonBadgeService(rockContext); if (PersonBadgeId != 0) { PersonBadge = PersonBadgeService.Get(PersonBadgeId); } if (PersonBadge == null) { PersonBadge = new PersonBadge(); PersonBadgeService.Add(PersonBadge); } PersonBadge.Name = tbName.Text; PersonBadge.Description = tbDescription.Text; if (!string.IsNullOrWhiteSpace(compBadgeType.SelectedValue)) { var badgeType = EntityTypeCache.Read(compBadgeType.SelectedValue.AsGuid()); if (badgeType != null) { PersonBadge.EntityTypeId = badgeType.Id; } } PersonBadge.LoadAttributes(rockContext); Rock.Attribute.Helper.GetEditValues(phAttributes, PersonBadge); if (!Page.IsValid) { return; } if (!PersonBadge.IsValid) { return; } rockContext.WrapTransaction(() => { rockContext.SaveChanges(); PersonBadge.SaveAttributeValues(rockContext); }); PersonBadgeCache.Flush(PersonBadge.Id); NavigateToParentPage(); }
/// <summary> /// Renders the specified writer. /// </summary> /// <param name="badge">The badge.</param> /// <param name="writer">The writer.</param> public override void Render( PersonBadgeCache badge, System.Web.UI.HtmlTextWriter writer ) { if ( Person != null ) { writer.AddAttribute( HtmlTextWriterAttribute.Class, "badge" ); writer.AddAttribute( HtmlTextWriterAttribute.Title, GetToolTipText( Person ) ); writer.RenderBeginTag( HtmlTextWriterTag.Div ); writer.AddAttribute( HtmlTextWriterAttribute.Src, GetIconPath( Person ) ); writer.RenderBeginTag( HtmlTextWriterTag.Img ); writer.RenderEndTag(); writer.RenderEndTag(); } }
/// <summary> /// Renders the specified writer. /// </summary> /// <param name="badge">The badge.</param> /// <param name="writer">The writer.</param> public override void Render(PersonBadgeCache badge, System.Web.UI.HtmlTextWriter writer) { if (Person != null) { writer.AddAttribute(HtmlTextWriterAttribute.Class, "badge"); writer.AddAttribute(HtmlTextWriterAttribute.Title, GetToolTipText(Person)); writer.RenderBeginTag(HtmlTextWriterTag.Div); writer.AddAttribute(HtmlTextWriterAttribute.Src, GetIconPath(Person)); writer.RenderBeginTag(HtmlTextWriterTag.Img); writer.RenderEndTag(); writer.RenderEndTag(); } }
/// <summary> /// Renders the specified writer. /// </summary> /// <param name="badge">The badge.</param> /// <param name="writer">The writer.</param> public override void Render( PersonBadgeCache badge, System.Web.UI.HtmlTextWriter writer ) { int minBarHeight = GetAttributeValue(badge, "MinimumBarHeight").AsIntegerOrNull() ?? 2; int monthsToDisplay = GetAttributeValue(badge, "MonthsToDisplay").AsIntegerOrNull() ?? 24; string animateClass = string.Empty; if (GetAttributeValue(badge, "AnimateBars") == null || GetAttributeValue(badge, "AnimateBars").AsBoolean()) { animateClass = " animate"; } writer.Write(String.Format( "<div class='badge badge-attendance{0} badge-id-{1}' data-toggle='tooltip' data-original-title='Family attendance for the last 24 months. Each bar is a month.'>", animateClass, badge.Id)); writer.Write("</div>"); writer.Write(String.Format( @" <script> Sys.Application.add_load(function () {{ var monthNames = [ 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' ]; $.ajax({{ type: 'GET', url: Rock.settings.get('baseUrl') + 'api/PersonBadges/FamilyAttendance/{0}/{1}' , statusCode: {{ 200: function (data, status, xhr) {{ var chartHtml = '<ul class=\'badge-attendance-chart list-unstyled\'>'; $.each(data, function() {{ var barHeight = (this.AttendanceCount / this.SundaysInMonth) * 100; if (barHeight < {2}) {{ barHeight = {2}; }} chartHtml += '<li title=\'' + monthNames[this.Month -1] + ' ' + this.Year +'\'><span style=\'height: ' + barHeight + '%\'></span></li>'; }}); chartHtml += '</ul>'; $('.badge-attendance.badge-id-{3}').html(chartHtml); }} }}, }}); }}); </script> ", Person.Id.ToString(), monthsToDisplay , minBarHeight, badge.Id )); }
void gPersonBadge_GridReorder(object sender, GridReorderEventArgs e) { var rockContext = new RockContext(); var service = new PersonBadgeService(rockContext); var personBadges = service.Queryable().OrderBy(b => b.Order); service.Reorder(personBadges.ToList(), e.OldIndex, e.NewIndex); rockContext.SaveChanges(); foreach (var personBadge in personBadges) { PersonBadgeCache.Flush(personBadge.Id); } BindGrid(); }
/// <summary> /// Renders the specified writer. /// </summary> /// <param name="badge">The badge.</param> /// <param name="writer">The writer.</param> public override void Render(PersonBadgeCache badge, HtmlTextWriter writer) { string badgeColour = GetAttributeValue(badge, "badgeColour"); if (String.IsNullOrEmpty(badgeColour)) { badgeColour = "#ECC759"; } int duration = GetAttributeValue(badge, "Duration").AsIntegerOrNull() ?? 16; var groupTypeGuids = GetAttributeValue(badge, "groupTypes").Split(',').AsGuidList(); bool recursive = GetAttributeValue(badge, "recursive").AsBoolean(); var groupTypes = groupTypeGuids.Select(groupTypeGuid => GroupTypeCache.Get(groupTypeGuid)).Distinct().ToList(); var ids = groupTypes.Select(gt => gt.Id).ToList(); string groupTypeNames = CheckInGroupsHelper.CreateGroupListString(groupTypes); writer.Write(string.Format("<style>#badge-id-{0}::before {{ color: {1};}}</style>", badge.Id, badgeColour)); writer.Write(string.Format("<div class='badge badge-weeksattendanceduration badge-id-{0}' data-toggle='tooltip' data-original-title='Individual attendance for the last {1} weeks to {2}.'>", badge.Id, duration, groupTypeNames.Truncate(150))); writer.Write("</div>"); writer.Write(string.Format(@" <script> Sys.Application.add_load(function () {{ $.ajax({{ type: 'GET', url: Rock.settings.get('baseUrl') + 'api/PersonBadges/IndividualWeeksAttendedInDuration/{1}/{0}/{3}/{4}' , statusCode: {{ 200: function (data, status, xhr) {{ var badgeHtml = '<div class=\'weeks-metric\' id=\'badge-id-{2}\'>'; badgeHtml += '<span class=\'weeks-attended\' >' + data + '</span><span class=\'week-duration\'>/{0}</span>'; badgeHtml += '</div>'; $('.badge-weeksattendanceduration.badge-id-{2}').html(badgeHtml); }} }}, }}); }}); </script> ", duration, Person.Id.ToString(), badge.Id, string.Join(",", ids), recursive)); }
/// <summary> /// Renders the specified writer. /// </summary> /// <param name="badge">The badge.</param> /// <param name="writer">The writer.</param> public override void Render(PersonBadgeCache badge, System.Web.UI.HtmlTextWriter writer) { Guid? groupTypeGuid = GetAttributeValue(badge, "GroupType").AsGuid(); string badgeColor = GetAttributeValue(badge, "BadgeColor"); if (groupTypeGuid.HasValue && !String.IsNullOrEmpty(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/PersonBadges/GeofencingGroups/{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"">' + this.GroupName + '</span>'; }}); if (badgeHtml != '') {{ $badge.show('fast'); }} else {{ $badge.hide(); }} $badge.html(badgeHtml); $badge.find('span').tooltip(); }} }}, }}); }}); </script> ", Person.Id.ToString(), groupTypeGuid.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( PersonBadgeCache badge, System.Web.UI.HtmlTextWriter writer ) { Guid? groupTypeGuid = GetAttributeValue( badge, "GroupType" ).AsGuid(); string badgeColor = GetAttributeValue( badge, "BadgeColor" ); if ( groupTypeGuid.HasValue && !String.IsNullOrEmpty( 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/PersonBadges/GeofencingGroups/{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"">' + this.GroupName + '</span>'; }}); if (badgeHtml != '') {{ $badge.show('fast'); }} else {{ $badge.hide(); }} $badge.html(badgeHtml); $badge.find('span').tooltip(); }} }}, }}); }}); </script> ", Person.Id.ToString(), groupTypeGuid.ToString(), badge.Id ) ); } }
/// <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.AddCSSLink(ResolveRockUrl("~/Styles/fluidbox.css")); RockPage.AddScriptLink(ResolveRockUrl("~/Scripts/imagesloaded.min.js")); RockPage.AddScriptLink(ResolveRockUrl("~/Scripts/jquery.fluidbox.min.js")); if (Person != null) { // Record Type - this is always "business". it will never change. if (Person.RecordTypeValueId == DefinedValueCache.Read(Rock.SystemGuid.DefinedValue.PERSON_RECORD_TYPE_BUSINESS.AsGuid()).Id) { var parms = new Dictionary <string, string>(); parms.Add("businessId", Person.Id.ToString()); NavigateToLinkedPage("BusinessDetailPage", parms); } if (Person.IsDeceased) { divBio.AddCssClass("deceased"); } // Set the browser page title to include person's name RockPage.BrowserTitle = Person.FullName; string badgeList = GetAttributeValue("Badges"); if (!string.IsNullOrWhiteSpace(badgeList)) { foreach (string badgeGuid in badgeList.SplitDelimitedValues()) { Guid guid = badgeGuid.AsGuid(); if (guid != Guid.Empty) { var personBadge = PersonBadgeCache.Read(guid); if (personBadge != null) { blStatus.PersonBadges.Add(personBadge); } } } } lbEditPerson.Visible = IsUserAuthorized(Rock.Security.Authorization.EDIT); } }
/// <summary> /// Renders the specified writer. /// </summary> /// <param name="badge">The badge.</param> /// <param name="writer">The writer.</param> public override void Render(PersonBadgeCache badge, System.Web.UI.HtmlTextWriter writer) { if (!string.IsNullOrWhiteSpace(Person.TopSignalColor) && Person.Signals.Count > 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, Person.Signals.Count, 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( PersonBadgeCache 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>(); var qry = dataView.GetQuery( null, 30, out errors ); if ( qry != null && qry.Where( e => e.Id == Person.Id ).Any() ) { Dictionary<string, object> mergeValues = new Dictionary<string, object>(); mergeValues.Add( "Person", Person ); 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(PersonBadgeCache 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(); } // check for alert note var alertNotesExist = new NoteService(new RockContext()).Queryable().AsNoTracking() .Where(n => noteTypes.Contains(n.NoteType.Guid) && n.EntityId.Value == Person.Id && n.IsAlert == true) .Any(); if (alertNotesExist) { writer.Write(GetAttributeValue(badge, "BadgeContent")); } }
/// <summary> /// Renders the specified writer. /// </summary> /// <param name="badge">The badge.</param> /// <param name="writer">The writer.</param> public override void Render(PersonBadgeCache badge, System.Web.UI.HtmlTextWriter writer) { 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>(); var qry = dataView.GetQuery(null, 30, out errors); if (qry != null && qry.Where(e => e.Id == Person.Id).Any()) { Dictionary <string, object> mergeValues = new Dictionary <string, object>(); mergeValues.Add("Person", Person); writer.Write(GetAttributeValue(badge, "BadgeContent").ResolveMergeFields(mergeValues)); } } } }
/// <summary> /// Handles the Delete event of the gPersonBadge control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="RowEventArgs" /> instance containing the event data.</param> protected void gPersonBadge_Delete(object sender, RowEventArgs e) { var rockContext = new RockContext(); PersonBadgeService PersonBadgeService = new PersonBadgeService(rockContext); PersonBadge PersonBadge = PersonBadgeService.Get((int)e.RowKeyValue); if (PersonBadge != null) { string errorMessage; if (!PersonBadgeService.CanDelete(PersonBadge, out errorMessage)) { mdGridWarning.Show(errorMessage, ModalAlertType.Information); return; } PersonBadgeCache.Flush(PersonBadge.Id); PersonBadgeService.Delete(PersonBadge); rockContext.SaveChanges(); } BindGrid(); }
/// <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); if (!Page.IsPostBack && Person != null && Person.Id != 0) { string badgeList = GetAttributeValue("Badges"); if (!string.IsNullOrWhiteSpace(badgeList)) { foreach (string badgeGuid in badgeList.SplitDelimitedValues()) { Guid guid = badgeGuid.AsGuid(); if (guid != Guid.Empty) { var personBadge = PersonBadgeCache.Read(guid); if (personBadge != null) { blBadges.PersonBadges.Add(personBadge); } } } } } }
/// <summary> /// Renders the specified writer. /// </summary> /// <param name="badge">The badge.</param> /// <param name="writer">The writer.</param> public override void Render(PersonBadgeCache badge, System.Web.UI.HtmlTextWriter writer) { string displayText = GetAttributeValue(badge, "DisplayText"); if (Person != null) { Dictionary <string, object> mergeValues = new Dictionary <string, object>(); mergeValues.Add("Person", Person); displayText = displayText.ResolveMergeFields(mergeValues); if (GetAttributeValue(badge, "EnableDebug").AsBoolean()) { string debugInfo = string.Format(@" <small><a data-toggle='collapse' data-parent='#accordion' href='#badge-debug'><i class='fa fa-eye'></i></a></small> <div id='badge-debug' class='collapse well badge-debug'> {0} </div> ", mergeValues.lavaDebugInfo()); displayText += debugInfo; } } writer.Write(displayText); }
/// <summary> /// Renders the specified writer. /// </summary> /// <param name="badge">The badge.</param> /// <param name="writer">The writer.</param> public override void Render( PersonBadgeCache badge, System.Web.UI.HtmlTextWriter writer ) { string displayText = GetAttributeValue( badge, "DisplayText" ); if ( Person != null ) { Dictionary<string, object> mergeValues = new Dictionary<string, object>(); mergeValues.Add( "Person", Person ); displayText = displayText.ResolveMergeFields( mergeValues ); if ( GetAttributeValue( badge, "EnableDebug" ).AsBoolean() ) { string debugInfo = string.Format( @" <small><a data-toggle='collapse' data-parent='#accordion' href='#badge-debug'><i class='fa fa-eye'></i></a></small> <pre id='badge-debug' class='collapse well badge-debug'> {0} </pre> ", mergeValues.LiquidHelpText() ); displayText += debugInfo; } } writer.Write( displayText ); }
/// <summary> /// Renders the specified writer. /// </summary> /// <param name="badge">The badge.</param> /// <param name="writer">The writer.</param> public override void Render( PersonBadgeCache badge, System.Web.UI.HtmlTextWriter writer ) { // Grab the DISC Scores bool isValidDiscScore = true; int discStrength = 0; int?[] discScores = new int?[] { Person.GetAttributeValue( "NaturalD" ).AsIntegerOrNull(), Person.GetAttributeValue( "NaturalI" ).AsIntegerOrNull(), Person.GetAttributeValue( "NaturalS" ).AsIntegerOrNull(), Person.GetAttributeValue( "NaturalC" ).AsIntegerOrNull() }; // Validate the DISC Scores, find the strength for ( int i = 0; i < discScores.Length; i++ ) { // Does the scores have values? if ( !discScores[i].HasValue ) { isValidDiscScore = false; } else { // Are the scores valid values? if ( ( discScores[i].Value < 0 ) || ( discScores[i].Value > MAX ) ) { isValidDiscScore = false; } else { if ( discScores[i].Value > discScores[discStrength].Value ) { discStrength = i; } } } } // Create the badge if ( isValidDiscScore ) { // Find the DISC Personality Type / Strength String description = string.Empty; string personalityType = Person.GetAttributeValue( "PersonalityType" ); if ( !string.IsNullOrEmpty( personalityType ) ) { var personalityValue = DefinedTypeCache.Read( Rock.SystemGuid.DefinedType.DISC_RESULTS_TYPE.AsGuid() ).DefinedValues.Where( v => v.Value == personalityType ).FirstOrDefault(); if ( personalityValue != null ) { description = personalityValue.Description; } } // create url for link to details if configured string detailPageUrl = string.Empty; if ( !String.IsNullOrEmpty( GetAttributeValue( badge, "DISCResultDetail" ) ) ) { int pageId = Rock.Web.Cache.PageCache.Read( Guid.Parse( GetAttributeValue( badge, "DISCResultDetail" ) ) ).Id; detailPageUrl = System.Web.VirtualPathUtility.ToAbsolute( String.Format( "~/page/{0}?Person={1}", pageId, Person.UrlEncodedKey ) ); writer.Write( "<a href='{0}'>", detailPageUrl ); } //Badge HTML writer.Write( String.Format( "<div class='badge badge-disc badge-id-{0}' data-toggle='tooltip' data-original-title='{1}'>", badge.Id, description ) ); writer.Write( "<ul class='badge-disc-chart list-unstyled'>" ); writer.Write( string.Format( "<li class='badge-disc-d {1}' title='D'><span style='height:{0}%'></span></li>", Math.Floor( (double)( (double)discScores[0].Value / (double)MAX ) * 100 ), ( discStrength == 0 ) ? "badge-disc-primary" : String.Empty ) ); writer.Write( string.Format( "<li class='badge-disc-i {1}' title='I'><span style='height:{0}%'></span></li>", Math.Floor( (double)( (double)discScores[1].Value / (double)MAX ) * 100 ), ( discStrength == 1 ) ? "badge-disc-primary" : String.Empty ) ); writer.Write( string.Format( "<li class='badge-disc-s {1}' title='S'><span style='height:{0}%'></span></li>", Math.Floor( (double)( (double)discScores[2].Value / (double)MAX ) * 100 ), ( discStrength == 2 ) ? "badge-disc-primary" : String.Empty ) ); writer.Write( string.Format( "<li class='badge-disc-c {1}' title='C'><span style='height:{0}%'></span></li>", Math.Floor( (double)( (double)discScores[3].Value / (double)MAX ) * 100 ), ( discStrength == 3 ) ? "badge-disc-primary" : String.Empty ) ); writer.Write( "</ul></div>" ); if ( !String.IsNullOrEmpty( detailPageUrl ) ) { writer.Write( "</a>" ); } } else { // check for recent DISC request DateTime? lastRequestDate = Person.GetAttributeValue( "LastDiscRequestDate" ).AsDateTime(); bool recentRequest = lastRequestDate.HasValue && lastRequestDate.Value > (RockDateTime.Now.AddDays( -30 )); if ( recentRequest ) { writer.Write( String.Format( "<div class='badge badge-disc badge-id-{0}' data-toggle='tooltip' data-original-title='A DISC request was made on {1}'>", badge.Id, lastRequestDate.Value.ToShortDateString() ) ); writer.Write( "<ul class='badge-disc-chart list-unstyled'>" ); writer.Write( string.Format( "<li class='badge-disc-d badge-disc-disabled' title='D'><span style='height:{0}%'></span></li>", 80 )); writer.Write( string.Format( "<li class='badge-disc-i badge-disc-disabled' title='I'><span style='height:{0}%'></span></li>", 20 )); writer.Write( string.Format( "<li class='badge-disc-s badge-disc-disabled' title='S'><span style='height:{0}%'></span></li>", 60 )); writer.Write( string.Format( "<li class='badge-disc-c badge-disc-disabled' title='C'><span style='height:{0}%'></span></li>", 10 )); writer.Write( "</ul><div class='requested'>R</div></div>" ); } } }
/// <summary> /// Renders the specified writer. /// </summary> /// <param name="badge">The badge.</param> /// <param name="writer">The writer.</param> public override void Render( PersonBadgeCache badge, System.Web.UI.HtmlTextWriter writer ) { int? siteId = GetAttributeValue( badge, "Site" ).AsIntegerOrNull(); if ( siteId.HasValue ) { var site = Rock.Web.Cache.SiteCache.Read( siteId.Value ); if ( site != null ) { string siteName = site.Name; // create url for link to details string detailPageUrl = string.Empty; if ( !String.IsNullOrEmpty( GetAttributeValue( badge, "PageViewDetails" ) ) ) { int pageId = Rock.Web.Cache.PageCache.Read( Guid.Parse( GetAttributeValue( badge, "PageViewDetails" ) ) ).Id; detailPageUrl = System.Web.VirtualPathUtility.ToAbsolute( String.Format( "~/page/{0}?Person={1}&SiteId={2}", pageId, Person.UrlEncodedKey, siteId ) ); } writer.Write( String.Format( "<div class='badge badge-lastvisitonsite 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/PersonBadges/LastVisitOnSite/{0}/{1}' , statusCode: {{ 200: function (data, status, xhr) {{ var badgeHtml = ''; var daysSinceVisit = data; var cssClass = ''; var linkUrl = '{3}'; var badgeContent = ''; var labelContent = ''; var siteName = '{4}'; if (daysSinceVisit >= 0 && daysSinceVisit < 1000) {{ labelContent = 'It has been ' + daysSinceVisit + ' day(s) since the last visit to the ' + siteName + ' site.'; if (daysSinceVisit == 0) {{ daysSinceVisit = 'Today'; cssClass = 'today'; labelContent = 'Visited the ' + siteName + ' site today.'; }} else if (daysSinceVisit < 7) {{ cssClass = 'very-recent'; }} else if (daysSinceVisit < 21 ) {{ cssClass = 'recent'; }} else if (daysSinceVisit < 90 ) {{ cssClass = 'moderate'; }} else if (daysSinceVisit < 365 ) {{ cssClass = 'not-recent'; }} else {{ cssClass = 'old'; }} if (linkUrl != '') {{ badgeContent = '<a href=\'' + linkUrl + '\'><div class=\'badge-content ' + cssClass + '\'><i class=\'fa fa-desktop badge-icon\'></i><span class=\'duration\'>' + daysSinceVisit + '</span></div></a>'; }} else {{ badgeContent = '<div class=\'badge-content ' + cssClass + '\'><i class=\'fa fa-desktop badge-icon\'></i><span class=\'duration\'>' + daysSinceVisit + '</span></div>'; }} $('.badge-lastvisitonsite.badge-id-{2}').html(badgeContent); $('.badge-lastvisitonsite.badge-id-{2}').attr('data-original-title', labelContent); }} }} }}, }}); }}); </script> ", Person.Id, siteId, badge.Id, detailPageUrl, siteName ) ); } } }
/// <summary> /// Renders the specified writer. /// </summary> /// <param name="badge">The badge.</param> /// <param name="writer">The writer.</param> public override void Render(PersonBadgeCache badge, System.Web.UI.HtmlTextWriter writer) { int?siteId = GetAttributeValue(badge, "Site").AsIntegerOrNull(); if (siteId.HasValue) { var site = Rock.Web.Cache.SiteCache.Read(siteId.Value); if (site != null) { string siteName = site.Name; // create url for link to details string detailPageUrl = string.Empty; if (!String.IsNullOrEmpty(GetAttributeValue(badge, "PageViewDetails"))) { int pageId = Rock.Web.Cache.PageCache.Read(Guid.Parse(GetAttributeValue(badge, "PageViewDetails"))).Id; detailPageUrl = System.Web.VirtualPathUtility.ToAbsolute(String.Format("~/page/{0}?Person={1}&SiteId={2}", pageId, Person.UrlEncodedKey, siteId)); } writer.Write(String.Format("<div class='badge badge-lastvisitonsite 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/PersonBadges/LastVisitOnSite/{0}/{1}' , statusCode: {{ 200: function (data, status, xhr) {{ var badgeHtml = ''; var daysSinceVisit = data; var cssClass = ''; var linkUrl = '{3}'; var badgeContent = ''; var labelContent = ''; var siteName = '{4}'; if (daysSinceVisit >= 0 && daysSinceVisit < 1000) {{ labelContent = 'It has been ' + daysSinceVisit + ' day(s) since the last visit to the ' + siteName + ' site.'; if (daysSinceVisit == 0) {{ daysSinceVisit = 'Today'; cssClass = 'today'; labelContent = 'Visited the ' + siteName + ' site today.'; }} else if (daysSinceVisit < 7) {{ cssClass = 'very-recent'; }} else if (daysSinceVisit < 21 ) {{ cssClass = 'recent'; }} else if (daysSinceVisit < 90 ) {{ cssClass = 'moderate'; }} else if (daysSinceVisit < 365 ) {{ cssClass = 'not-recent'; }} else {{ cssClass = 'old'; }} if (linkUrl != '') {{ badgeContent = '<a href=\'' + linkUrl + '\'><div class=\'badge-content ' + cssClass + '\'><i class=\'fa fa-desktop badge-icon\'></i><span class=\'duration\'>' + daysSinceVisit + '</span></div></a>'; }} else {{ badgeContent = '<div class=\'badge-content ' + cssClass + '\'><i class=\'fa fa-desktop badge-icon\'></i><span class=\'duration\'>' + daysSinceVisit + '</span></div>'; }} $('.badge-lastvisitonsite.badge-id-{2}').html(badgeContent); $('.badge-lastvisitonsite.badge-id-{2}').attr('data-original-title', labelContent); }} }} }}, }}); }}); </script> ", Person.Id, siteId, badge.Id, detailPageUrl, siteName)); } } }
/// <summary> /// Gets the attribute value for the badge /// </summary> /// <param name="badge">The badge.</param> /// <param name="key">The key.</param> /// <returns></returns> protected string GetAttributeValue( PersonBadgeCache badge, string key ) { return badge.GetAttributeValue( key ); }
/// <summary> /// Renders the specified writer. /// </summary> /// <param name="badge">The badge.</param> /// <param name="writer">The writer.</param> public abstract void Render( PersonBadgeCache badge, HtmlTextWriter writer );
/// <summary> /// Renders the specified writer. /// </summary> /// <param name="badge">The badge.</param> /// <param name="writer">The writer.</param> public override void Render(PersonBadgeCache badge, System.Web.UI.HtmlTextWriter writer) { var accountGuids = this.GetAttributeValue(badge, "Accounts")?.SplitDelimitedValues().AsGuidList(); var minimumAmount = this.GetAttributeValue(badge, "MinimumAmount")?.AsDecimalOrNull(); var slidingDateRangeDelimitedValues = this.GetAttributeValue(badge, "DateRange"); var lavaTemplate = this.GetAttributeValue(badge, "LavaTemplate"); var dateRange = SlidingDateRangePicker.CalculateDateRangeFromDelimitedValues(slidingDateRangeDelimitedValues); var dateRangeSummary = SlidingDateRangePicker.FormatDelimitedValues(slidingDateRangeDelimitedValues); var mergeFields = Lava.LavaHelper.GetCommonMergeFields(null, null, new Lava.CommonMergeFieldsOptions { GetLegacyGlobalMergeFields = false }); mergeFields.Add("Person", this.Person); using (var rockContext = new RockContext()) { mergeFields.Add("Badge", badge); mergeFields.Add("DateRange", new { Dates = dateRange, Summary = dateRangeSummary }); // fetch all the possible PersonAliasIds that have this GivingID to help optimize the SQL var personAliasIds = new PersonAliasService(rockContext).Queryable().Where(a => a.Person.GivingId == this.Person.GivingId).Select(a => a.Id).ToList(); var transactionTypeContributionValueId = DefinedValueCache.Read(Rock.SystemGuid.DefinedValue.TRANSACTION_TYPE_CONTRIBUTION.AsGuid()).Id; var qry = new FinancialTransactionService(rockContext).Queryable().Where(a => a.TransactionTypeValueId == transactionTypeContributionValueId); // get the transactions for the person or all the members in the person's giving group (Family) qry = qry.Where(t => t.AuthorizedPersonAliasId.HasValue && personAliasIds.Contains(t.AuthorizedPersonAliasId.Value)); if (dateRange.Start.HasValue) { qry = qry.Where(t => t.TransactionDateTime >= dateRange.Start.Value); } if (dateRange.End.HasValue) { qry = qry.Where(t => t.TransactionDateTime < dateRange.End.Value); } if (minimumAmount.HasValue) { qry = qry.Where(a => a.TransactionDetails.Sum(d => ( decimal? )d.Amount) > minimumAmount); } if (accountGuids.Any()) { qry = qry.Where(t => t.TransactionDetails.Any(d => accountGuids.Contains(d.Account.Guid))); } var contributionList = qry.Select(a => new { a.TransactionDateTime, ContributionAmount = a.TransactionDetails.Sum(d => ( decimal? )d.Amount) }).ToList(); if (contributionList.Any()) { var contributionResult = new { Count = contributionList.Count(), LastDateTime = contributionList.Max(a => a.TransactionDateTime), TotalAmount = contributionList.Sum(a => a.ContributionAmount), }; mergeFields.Add("Contributions", contributionResult); } string output = lavaTemplate.ResolveMergeFields(mergeFields); writer.Write(output); } }
/// <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 = PersonBadgeCache.FromJson( json ); } }
/// <summary> /// Gets the attribute value for the badge /// </summary> /// <param name="badge">The badge.</param> /// <param name="key">The key.</param> /// <returns></returns> protected string GetAttributeValue(PersonBadgeCache badge, string key) { return(badge.GetAttributeValue(key)); }
/// <summary> /// Renders the specified writer. /// </summary> /// <param name="badge">The badge.</param> /// <param name="writer">The writer.</param> public abstract void Render(PersonBadgeCache badge, HtmlTextWriter writer);