Don't miss out Virtual Happy Hour this Friday (April 26).
Try our conversational search powered by Generative AI!
AI OnAI Off
Don't miss out Virtual Happy Hour this Friday (April 26).
using System;
using System.Globalization;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
using EPiServer;
using EPiServer.Core;
using EPiServer.WebControls;
using EPiServer.DataAbstraction;
namespace Extrude.EPi.WebControls
{
///
/// Summary description for Calendar.
///
[ToolboxData("<{0}:Calendar runat=server>")]
public class Calendar : EPiServer.WebControls.Calendar
{
public Calendar() {
}
protected override void CreateChildControls() {
if (EventTemplate == null)
return;
PageDataCollection pages = GetPages();
if (pages.Count == 0)
return;
PageData rootPage = null;
int dayCnt = 0;
int eventCnt = 0;
int calendarType = -1;
if (this.PageLink != PageReference.EmptyReference)
rootPage = GetPage(this.PageLink);
if (rootPage.Property.Exists("CalendarType") && rootPage["CalendarType"] != null && rootPage["CalendarType"].ToString().Length > 0)
calendarType = Convert.ToInt32(rootPage["CalendarType"]);
// Fall tillbaka på dagens datum och 1 år framåt
if (this.SelectedDates.Count == 0) {
int daysInMonth = DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month);
this.SelectedDates.SelectRange(DateTime.Now, DateTime.Now.AddYears(1));
}
foreach (DateTime span in this.SelectedDates) {
foreach (PageData page in pages) {
if (calendarType > -1 && (page.PageTypeID != calendarType))
break;
if (page.Property.Exists("EventStartDate")) {
DateTime startDate = (DateTime)page["EventStartDate"];
DateTime endDate = (DateTime)page["EventStopDate"];
if (span.Date >= startDate.Date && span.Date <= endDate.Date) {
int validDays = 0;
int validDaysInterval = 1;
// Återkommande dag
if (page.Property.Exists("ValidDays") && page["ValidDays"] != null)
validDays = Convert.ToInt32(page["ValidDays"]);
// Återkommande intervall (ex. 1 = varje vecka, 2 = varannan vecka, 52 = en gång om året osv)
if (page.Property.Exists("ValidDaysInterval") && page["ValidDaysInterval"] != null)
validDaysInterval = Convert.ToInt32(page["ValidDaysInterval"]);
if (validDays > 0) {
if (validDaysInterval == 1) { // Varje vecka
if (this.IsEventRecurring(page, this.GetDayNumber((int)span.DayOfWeek))) {
if (dayCnt < 1 && DayPrefixTemplate != null)
this.CreateDayPrefix(span);
if (!this.DateIsActive(span))
this.AddActiveDate(span);
this.CreateEventTemplate(page, span);
dayCnt++;
eventCnt++;
}
}
else { // Varannan, var tredje, var fjärde osv
int offset = validDaysInterval * 7;
if (this.IsEventRecurring(page, this.GetDayNumber((int)span.DayOfWeek))) {
DateTime tmp = startDate.AddDays(this.GetDayOfWeekDiff(span, startDate));
TimeSpan daysDiff = span.Subtract(tmp.Date);
if (daysDiff.TotalDays % offset == 0) {
if (dayCnt < 1 && DayPrefixTemplate != null)
this.CreateDayPrefix(span);
if (!this.DateIsActive(span))
this.AddActiveDate(span);
this.CreateEventTemplate(page, span);
dayCnt++;
eventCnt++;
}
}
}
}
else {
if (dayCnt < 1 && DayPrefixTemplate != null)
this.CreateDayPrefix(span);
if (!this.DateIsActive(span))
this.AddActiveDate(span);
this.CreateEventTemplate(page, span);
dayCnt++;
eventCnt++;
}
}
}
if (MaxCount > 0 && eventCnt >= MaxCount)
break;
}
if ((DaySuffixTemplate != null) && this.DateIsActive(span))
this.CreateDaySuffix(span);
if (MaxCount > 0 && eventCnt >= MaxCount)
break;
dayCnt = 0;
}
}
private int GetDayOfWeek(DayOfWeek dow) {
int[] days = {7, 1, 2, 3, 4, 5, 6};
return days[(int)dow];
}
protected int GetDayOfWeekDiff(DateTime dt1, DateTime dt2) {
return (this.GetDayOfWeek(dt1.DayOfWeek) - this.GetDayOfWeek(dt2.DayOfWeek));
}
}
}