/// <summary> /// Gets the todays birthdays. /// </summary> /// TODO: Make DST shift for the user private void GetTodaysBirthdays() { if (!this.Get <YafBoardSettings>().ShowTodaysBirthdays) { return; } this.StatsTodaysBirthdays.Text = this.GetText("stats_birthdays"); var users = this.Get <IDataCache>().GetOrSet( Constants.Cache.TodaysBirthdays, () => LegacyDb.User_ListTodaysBirthdays(this.PageContext.PageBoardID, this.Get <YafBoardSettings>().UseStyledNicks), TimeSpan.FromHours(1)); if (users == null || users.Rows.Count <= 0) { return; } foreach (DataRow user in users.Rows) { DateTime birth; if (!DateTime.TryParse(user["Birthday"].ToString(), out birth)) { continue; } int tz; if (!int.TryParse(user["TimeZone"].ToString(), out tz)) { tz = 0; } // Get the user birhday based on his timezone date. var dtt = birth.AddYears(DateTime.UtcNow.Year - birth.Year); // The user can be congratulated. The time zone in profile is saved in the list user timezone if (DateTime.UtcNow <= dtt.AddMinutes(-tz).ToUniversalTime() || DateTime.UtcNow >= dtt.AddMinutes(-tz + 1440).ToUniversalTime()) { continue; } this.BirthdayUsers.Controls.Add( new UserLink { UserID = (int)user["UserID"], ReplaceName = this.Get <YafBoardSettings>().EnableDisplayName ? user["UserDisplayName"].ToString() : user["UserName"].ToString(), Style = this.Get <IStyleTransform>().DecodeStyleByString(user["Style"].ToString(), false), PostfixText = " ({0})".FormatWith(DateTime.Now.Year - user["Birthday"].ToType <DateTime>().Year) }); var separator = new HtmlGenericControl { InnerHtml = " , " }; this.BirthdayUsers.Controls.Add(separator); if (!this.BirthdayUsers.Visible) { this.BirthdayUsers.Visible = true; } } if (this.BirthdayUsers.Visible) { // Remove last Separator this.BirthdayUsers.Controls.RemoveAt(this.BirthdayUsers.Controls.Count - 1); } }