Five New Optimizely Certifications are Here! Validate your expertise and advance your career with our latest certification exams. Click here to find out more
AI OnAI Off
Five New Optimizely Certifications are Here! Validate your expertise and advance your career with our latest certification exams. Click here to find out more
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));
}
}
}