/**
* Generate the module
*/
protected function compile()
{
// Create the date object
try {
if (\Input::get('month')) {
$this->Date = new \Date(\Input::get('month'), 'Ym');
} elseif (\Input::get('day')) {
$this->Date = new \Date(\Input::get('day'), 'Ymd');
} else {
$this->Date = new \Date();
}
} catch (\OutOfBoundsException $e) {
throw new PageNotFoundException('Page not found');
}
$time = \Date::floorToMinute();
// Find the boundaries
$objMinMax = $this->Database->query("SELECT MIN(startTime) AS dateFrom, MAX(endTime) AS dateTo, MAX(repeatEnd) AS repeatUntil FROM tl_calendar_events WHERE pid IN(" . implode(',', array_map('intval', $this->cal_calendar)) . ")" . (!BE_USER_LOGGED_IN ? " AND (start='' OR start<='{$time}') AND (stop='' OR stop>'" . ($time + 60) . "') AND published='1'" : ""));
/** @var FrontendTemplate|object $objTemplate */
$objTemplate = new \FrontendTemplate($this->cal_ctemplate);
// Store year and month
$intYear = date('Y', $this->Date->tstamp);
$intMonth = date('m', $this->Date->tstamp);
$objTemplate->intYear = $intYear;
$objTemplate->intMonth = $intMonth;
// Previous month
$prevMonth = $intMonth == 1 ? 12 : $intMonth - 1;
$prevYear = $intMonth == 1 ? $intYear - 1 : $intYear;
$lblPrevious = $GLOBALS['TL_LANG']['MONTHS'][$prevMonth - 1] . ' ' . $prevYear;
$intPrevYm = intval($prevYear . str_pad($prevMonth, 2, 0, STR_PAD_LEFT));
// Only generate a link if there are events (see #4160)
if ($objMinMax->dateFrom !== null && $intPrevYm >= date('Ym', $objMinMax->dateFrom)) {
$objTemplate->prevHref = $this->strUrl . '?month=' . $intPrevYm;
$objTemplate->prevTitle = specialchars($lblPrevious);
$objTemplate->prevLink = $GLOBALS['TL_LANG']['MSC']['cal_previous'] . ' ' . $lblPrevious;
$objTemplate->prevLabel = $GLOBALS['TL_LANG']['MSC']['cal_previous'];
}
// Current month
$objTemplate->current = $GLOBALS['TL_LANG']['MONTHS'][date('m', $this->Date->tstamp) - 1] . ' ' . date('Y', $this->Date->tstamp);
// Next month
$nextMonth = $intMonth == 12 ? 1 : $intMonth + 1;
$nextYear = $intMonth == 12 ? $intYear + 1 : $intYear;
$lblNext = $GLOBALS['TL_LANG']['MONTHS'][$nextMonth - 1] . ' ' . $nextYear;
$intNextYm = $nextYear . str_pad($nextMonth, 2, 0, STR_PAD_LEFT);
// Only generate a link if there are events (see #4160)
if ($objMinMax->dateTo !== null && $intNextYm <= date('Ym', max($objMinMax->dateTo, $objMinMax->repeatUntil))) {
$objTemplate->nextHref = $this->strUrl . '?month=' . $intNextYm;
$objTemplate->nextTitle = specialchars($lblNext);
$objTemplate->nextLink = $lblNext . ' ' . $GLOBALS['TL_LANG']['MSC']['cal_next'];
$objTemplate->nextLabel = $GLOBALS['TL_LANG']['MSC']['cal_next'];
}
// Set the week start day
if (!$this->cal_startDay) {
$this->cal_startDay = 0;
}
$objTemplate->days = $this->compileDays();
$objTemplate->weeks = $this->compileWeeks();
$objTemplate->substr = $GLOBALS['TL_LANG']['MSC']['dayShortLength'];
$this->Template->calendar = $objTemplate->parse();
}