示例#1
0
 private function generateWeeks()
 {
     $date = new \TYPO3\CMS\Cal\Model\CalDate();
     $date->setDay(1);
     $date->setMonth($this->month);
     $date->setYear($this->year);
     $this->monthStartWeekdayNum = $date->format('%w');
     $this->monthLength = $date->getDaysInMonth();
     $monthEnd = \TYPO3\CMS\Cal\Controller\Calendar::calculateEndMonthTime($date);
     $weekEnd = $monthEnd->getWeekOfYear();
     $newDate = \TYPO3\CMS\Cal\Controller\Calendar::calculateStartWeekTime($date);
     $this->weeks = array();
     $weekNumber = $newDate->getWeekOfYear();
     if ($this->month == 12 && $weekEnd == 1) {
         do {
             if ($weekNumber == $weekEnd) {
                 $this->weeks[$newDate->getYear() + 1 . '_' . $weekNumber] = new \TYPO3\CMS\Cal\View\NewWeekView($weekNumber, $newDate->getYear() + 1, $this->month);
             } else {
                 $this->weeks[$newDate->getYear() . '_' . $weekNumber] = new \TYPO3\CMS\Cal\View\NewWeekView($weekNumber, $newDate->getYear(), $this->month);
             }
             $newDate->addSeconds(86400 * 7);
             $weekNumber = $newDate->getWeekOfYear();
             $weekNumberTmp = $weekNumber;
             if ($weekNumber != $weekEnd) {
                 $weekNumberTmp = 0;
             }
         } while ($weekNumberTmp <= $weekEnd && $newDate->year == $this->year);
     } else {
         if ($this->month == 1) {
             do {
                 if ($weekNumber > 6) {
                     $this->weeks[$newDate->getYear() . '_' . $weekNumber] = new \TYPO3\CMS\Cal\View\NewWeekView($weekNumber, $newDate->getYear(), $this->month);
                 } else {
                     $this->weeks[$this->year . '_' . $weekNumber] = new \TYPO3\CMS\Cal\View\NewWeekView($weekNumber, $this->year, $this->month);
                 }
                 $newDate->addSeconds(86400 * 7);
                 $weekNumber = $newDate->getWeekOfYear();
             } while ($weekNumber <= $weekEnd && $newDate->year == $this->year);
         } else {
             do {
                 $this->weeks[$this->year . '_' . $weekNumber] = new \TYPO3\CMS\Cal\View\NewWeekView($weekNumber, $newDate->getYear(), $this->month);
                 $newDate->addSeconds(86400 * 7);
                 $weekNumber = $newDate->getWeekOfYear();
             } while ($weekNumber <= $weekEnd && $newDate->getYear() == $this->year);
         }
     }
     $this->maxWeeksInYear = max($this->maxWeeksInYear, $weekNumber);
 }
示例#2
0
 function _parseString($value)
 {
     $value = strtolower($value);
     switch ($value) {
         case 'last':
             array_push($this->stack, array('range' => 'last'));
             break;
         case 'next':
             array_push($this->stack, array('range' => 'next'));
             break;
         case 'now':
             array_push($this->stack, array('abs' => $this->timeObj->getTime()));
             break;
         case 'today':
             array_push($this->stack, array('today' => $this->timeObj->getTime()));
             break;
         case 'current':
             array_push($this->stack, array('today' => $this->timeObj->getTime()));
             break;
         case 'tomorrow':
             array_push($this->stack, array('tomorrow' => $this->timeObj->getTime()));
             break;
         case 'yesterday':
             array_push($this->stack, array('yesterday' => $this->timeObj->getTime()));
             break;
         case 'yearstart':
             array_push($this->stack, array('date' => \TYPO3\CMS\Cal\Controller\Calendar::calculateStartYearTime($this->timeObj)));
             break;
         case 'monthstart':
             array_push($this->stack, array('date' => \TYPO3\CMS\Cal\Controller\Calendar::calculateStartMonthTime($this->timeObj)));
             break;
         case 'weekstart':
             array_push($this->stack, array('date' => \TYPO3\CMS\Cal\Controller\Calendar::calculateStartWeekTime($this->timeObj)));
             break;
         case 'weekend':
             array_push($this->stack, array('date' => \TYPO3\CMS\Cal\Controller\Calendar::calculateEndWeekTime($this->timeObj)));
             break;
         case 'monthend':
             array_push($this->stack, array('date' => \TYPO3\CMS\Cal\Controller\Calendar::calculateEndMonthTime($this->timeObj)));
             break;
         case 'yearend':
             array_push($this->stack, array('date' => \TYPO3\CMS\Cal\Controller\Calendar::calculateEndYearTime($this->timeObj)));
             break;
         case 'quarterstart':
             $timeObj = $this->timeObj;
             $startMonth = '01';
             switch ($timeObj->getQuarterOfYear()) {
                 case 2:
                     $startMonth = '04';
                     break;
                 case 3:
                     $startMonth = '07';
                     break;
                 case 4:
                     $startMonth = '10';
                     break;
             }
             $timeObj->setDay(1);
             $timeObj->setMonth($startMonth);
             $timeObj->setHour(0);
             $timeObj->setMinute(0);
             $timeObj->setSecond(0);
             array_push($this->stack, array('date' => $timeObj));
             break;
         case 'quarterend':
             $timeObj = $this->timeObj;
             $endDay = '31';
             $endMonth = '03';
             switch ($timeObj->getQuarterOfYear()) {
                 case 2:
                     $endDay = '30';
                     $endMonth = '06';
                     break;
                 case 3:
                     $endDay = '30';
                     $endMonth = '09';
                     break;
                 case 4:
                     $endDay = '31';
                     $endMonth = '12';
                     break;
             }
             $timeObj->setDay($endDay);
             $timeObj->setMonth($endMonth);
             $timeObj->setHour(23);
             $timeObj->setMinute(59);
             $timeObj->setSecond(59);
             array_push($this->stack, array('date' => $timeObj));
             break;
         case 'day':
         case 'days':
             array_push($this->stack, array('value' => 86400));
             break;
         case 'week':
         case 'weeks':
             array_push($this->stack, array('value' => 604800));
             break;
         case 'h':
         case 'hour':
         case 'hours':
             $value = array_pop(array_pop($this->stack));
             array_push($this->stack, array('range' => $value));
             array_push($this->stack, array('value' => 'hour'));
             break;
         case 'm':
         case 'minute':
         case 'minutes':
             $value = array_pop(array_pop($this->stack));
             array_push($this->stack, array('range' => $value));
             array_push($this->stack, array('value' => 'minute'));
             break;
         case 'month':
         case 'months':
             array_push($this->stack, array('value' => 'month'));
             break;
         case 'year':
         case 'years':
             array_push($this->stack, array('value' => 'year'));
             break;
         case 'mon':
         case 'monday':
             array_push($this->stack, array('weekday' => 1));
             break;
         case 'tue':
         case 'tuesday':
             array_push($this->stack, array('weekday' => 2));
             break;
         case 'wed':
         case 'wednesday':
             array_push($this->stack, array('weekday' => 3));
             break;
         case 'thu':
         case 'thursday':
             array_push($this->stack, array('weekday' => 4));
             break;
         case 'fri':
         case 'friday':
             array_push($this->stack, array('weekday' => 5));
             break;
         case 'sat':
         case 'saturday':
             array_push($this->stack, array('weekday' => 6));
             break;
         case 'sun':
         case 'sunday':
             array_push($this->stack, array('weekday' => 0));
             break;
         case 'jan':
         case 'january':
             array_push($this->stack, array('month' => 1));
             break;
         case 'feb':
         case 'february':
             array_push($this->stack, array('month' => 2));
             break;
         case 'mar':
         case 'march':
             array_push($this->stack, array('month' => 3));
             break;
         case 'apr':
         case 'april':
             array_push($this->stack, array('month' => 4));
             break;
         case 'may':
             array_push($this->stack, array('month' => 5));
             break;
         case 'jun':
         case 'june':
             array_push($this->stack, array('month' => 6));
             break;
         case 'jul':
         case 'july':
             array_push($this->stack, array('month' => 7));
             break;
         case 'aug':
         case 'august':
             array_push($this->stack, array('month' => 8));
             break;
         case 'sep':
         case 'september':
             array_push($this->stack, array('month' => 9));
             break;
         case 'oct':
         case 'october':
             array_push($this->stack, array('month' => 10));
             break;
         case 'nov':
         case 'november':
             array_push($this->stack, array('month' => 11));
             break;
         case 'dec':
         case 'december':
             array_push($this->stack, array('month' => 12));
             break;
         default:
             break;
     }
 }
示例#3
0
 /**
  * Draws the month view
  *  @param		$page	string		The page template
  *  @param		$offset	integer		The month offset. Default = +0
  *  @param		$type	integer		The date of the event
  *	@return		string		The HTML output.
  */
 function _draw_month($page, $offset = '+0', $type)
 {
     $viewTarget = $this->conf['view.']['monthLinkTarget'];
     $monthTemplate = $this->cObj->getSubpart($page, '###MONTH_TEMPLATE###');
     if ($monthTemplate != '') {
         $loop_wd = $this->cObj->getSubpart($monthTemplate, '###LOOPWEEKDAY###');
         $t_month = $this->cObj->getSubpart($monthTemplate, '###SWITCHMONTHDAY###');
         $startweek = $this->cObj->getSubpart($monthTemplate, '###LOOPMONTHWEEKS_DAYS###');
         $endweek = $this->cObj->getSubpart($monthTemplate, '###LOOPMONTHDAYS_WEEKS###');
         $weeknum = $this->cObj->getSubpart($monthTemplate, '###LOOPWEEK_NUMS###');
         $corner = $this->cObj->getSubpart($monthTemplate, '###CORNER###');
         /* 11.12.2008 Franz:
          * why is there a limitation that only MEDIUM calendar sheets can have absolute offsets and vice versa?
          * I'm commenting this out and make it more flexible.
          */
         #if ($type != 'medium') {  // old one
         if (preg_match('![+|-][0-9]{1,2}!is', $offset)) {
             // new one
             $fake_getdate_time = new \TYPO3\CMS\Cal\Model\CalDate();
             $fake_getdate_time->copy($this->controller->getDateTimeObject);
             $fake_getdate_time->setDay(15);
             if (intval($offset) < 0) {
                 $fake_getdate_time->subtractSeconds(abs(intval($offset)) * 2592000);
             } else {
                 $fake_getdate_time->addSeconds(intval($offset) * 2592000);
             }
         } else {
             $fake_getdate_time = new \TYPO3\CMS\Cal\Model\CalDate();
             $fake_getdate_time->copy($this->controller->getDateTimeObject);
             $fake_getdate_time->setDay(15);
             $fake_getdate_time->setMonth($offset);
         }
         $minical_month = $fake_getdate_time->getMonth();
         $minical_year = $fake_getdate_time->getYear();
         $today = new \TYPO3\CMS\Cal\Model\CalDate();
         $month_title = $fake_getdate_time->format($this->conf['view.'][$viewTarget . '.']['dateFormatMonth']);
         $this->initLocalCObject();
         $this->local_cObj->setCurrentVal($month_title);
         $this->local_cObj->data['view'] = $viewTarget;
         $this->controller->getParametersForTyposcriptLink($this->local_cObj->data, array('getdate' => $fake_getdate_time->format('%Y%m%d'), 'view' => $viewTarget, $this->pointerName => NULL), $this->conf['cache'], $this->conf['clear_anyway'], $this->conf['view.'][$viewTarget . '.'][$viewTarget . 'ViewPid']);
         $month_title = $this->local_cObj->cObjGetSingle($this->conf['view.'][$viewTarget . '.'][$viewTarget . 'ViewLink'], $this->conf['view.'][$viewTarget . '.'][$viewTarget . 'ViewLink.']);
         $month_date = $fake_getdate_time->format('%Y%m%d');
         $view_array = array();
         if (!$this->viewarray) {
             $this->eventArray = array();
             if (!empty($this->master_array)) {
                 // use array keys for the loop in order to be able to use referenced events instead of copies and save some memory
                 $masterArrayKeys = array_keys($this->master_array);
                 foreach ($masterArrayKeys as $dateKey) {
                     $dateArray =& $this->master_array[$dateKey];
                     $dateArrayKeys = array_keys($dateArray);
                     foreach ($dateArrayKeys as $timeKey) {
                         $arrayOfEvents =& $dateArray[$timeKey];
                         $eventKeys = array_keys($arrayOfEvents);
                         foreach ($eventKeys as $eventKey) {
                             $event =& $arrayOfEvents[$eventKey];
                             $eventReferenceKey = $dateKey . '_' . $event->getType() . '_' . $event->getUid() . '_' . $event->getStart()->format('%Y%m%d%H%M%S');
                             $this->eventArray[$eventReferenceKey] =& $event;
                             $starttime = new \TYPO3\CMS\Cal\Model\CalDate();
                             $starttime->copy($event->getStart());
                             $endtime = new \TYPO3\CMS\Cal\Model\CalDate();
                             $endtime->copy($event->getEnd());
                             if ($timeKey == '-1') {
                                 $endtime->addSeconds(1);
                                 // needed to let allday events show up
                             }
                             $j = new \TYPO3\CMS\Cal\Model\CalDate();
                             $j->copy($starttime);
                             $j->setHour(0);
                             $j->setMinute(0);
                             $j->setSecond(0);
                             for (; $j->before($endtime); $j->addSeconds(60 * 60 * 24)) {
                                 $view_array[$j->format('%Y%m%d')]['000000'][count($view_array[$j->format('%Y%m%d')]['000000'])] = $eventReferenceKey;
                             }
                         }
                     }
                 }
             }
             $this->viewarray =& $view_array;
         }
         $monthTemplate = str_replace('###MONTH_TITLE###', $month_title, $monthTemplate);
         $langtype = $this->conf['view.']['month.']['weekdayFormat' . ucwords($type) . 'Month'];
         $typeSize = intval($this->conf['view.']['month.']['weekdayLength' . ucwords($type) . 'Month']);
         $dateOfWeek = Calc::beginOfWeek(15, $fake_getdate_time->getMonth(), $fake_getdate_time->getYear());
         $start_day = new \TYPO3\CMS\Cal\Model\CalDate($dateOfWeek . '000000');
         // backwardscompatibility with old templates
         if (!empty($corner)) {
             $weekday_loop .= str_replace('###ADDITIONAL_CLASSES###', $this->conf['view.']['month.']['monthCornerStyle'], $corner);
         } else {
             $weekday_loop .= sprintf($weeknum, $this->conf['view.']['month.']['monthCornerStyle'], '');
         }
         for ($i = 0; $i < 7; $i++) {
             $weekday = $start_day->format($langtype);
             $weekdayLong = $start_day->format('%A');
             if ($typeSize) {
                 $weekday = $this->cs_convert->substr(\TYPO3\CMS\Cal\Utility\Functions::getCharset(), $weekday, 0, $typeSize);
             }
             $start_day->addSeconds(86400);
             $additionalClasses = trim(sprintf($this->conf['view.']['month.']['monthDayOfWeekStyle'], $start_day->format('%w')));
             $markerArray = array('###WEEKDAY###' => $weekday, '###WEEKDAY_LONG###' => $weekdayLong, '###ADDITIONAL_CLASSES###' => ' ' . $additionalClasses, '###CLASSES###' => !empty($additionalClasses) ? ' class="' . $additionalClasses . '" ' : '');
             $weekday_loop .= strtr($loop_wd, $markerArray);
         }
         $weekday_loop .= $endweek;
         $dateOfWeek = Calc::beginOfWeek(1, $fake_getdate_time->getMonth(), $fake_getdate_time->getYear());
         $endOfMonth = $this->controller->getListViewTime('monthend', $start_day);
         $start_day = new \TYPO3\CMS\Cal\Model\CalDate($dateOfWeek . '000000');
         $start_day->setTZbyID('UTC');
         $i = 0;
         $whole_month = TRUE;
         $isAllowedToCreateEvent = $this->rightsObj->isAllowedToCreateEvent();
         $createOffset = intval($this->conf['rights.']['create.']['event.']['timeOffset']) * 60;
         $getdate = new \TYPO3\CMS\Cal\Model\CalDate($this->conf['getdate']);
         $getdate->setTZbyID('UTC');
         $startWeekTime = \TYPO3\CMS\Cal\Controller\Calendar::calculateStartWeekTime($getdate);
         $endWeekTime = \TYPO3\CMS\Cal\Controller\Calendar::calculateEndWeekTime($getdate);
         $formattedWeekStartTime = $startWeekTime->format('%Y%m%d');
         $formattedWeekEndTime = $endWeekTime->format('%Y%m%d');
         do {
             $daylink = new \TYPO3\CMS\Cal\Model\CalDate();
             $daylink->copy($start_day);
             $formatedGetdate = $daylink->format('%Y%m%d');
             $formatedDayDate = $daylink->format($this->conf['view.']['month.']['dateFormatDay']);
             $isCurrentWeek = false;
             $isSelectedWeek = false;
             if ($formatedGetdate >= $formattedWeekStartTime && $formatedGetdate <= $formattedWeekEndTime) {
                 $isSelectedWeek = true;
             }
             if ($start_day->format('%Y%U') == $today->format('%Y%U')) {
                 $isCurrentWeek = true;
             }
             if ($i == 0 && !empty($weeknum)) {
                 $start_day->addSeconds(86400);
                 $num = $numPlain = $start_day->getWeekOfYear();
                 $hasEvent = false;
                 $start_day->subtractSeconds(86400);
                 for ($j = 0; $j < 7; $j++) {
                     if (is_array($this->viewarray[$start_day->format('%Y%m%d')]) || $isAllowedToCreateEvent) {
                         $hasEvent = true;
                         break;
                     }
                     $start_day->addSeconds(86400);
                 }
                 $start_day->copy($daylink);
                 $weekLinkViewTarget = $this->conf['view.']['weekLinkTarget'];
                 if (($this->rightsObj->isViewEnabled($weekLinkViewTarget) || $this->conf['view.'][$weekLinkViewTarget . '.'][$weekLinkViewTarget . 'ViewPid']) && $hasEvent) {
                     $this->initLocalCObject();
                     $this->local_cObj->setCurrentVal($num);
                     $this->local_cObj->data['view'] = $weekLinkViewTarget;
                     $this->controller->getParametersForTyposcriptLink($this->local_cObj->data, array('getdate' => $formatedGetdate, 'view' => $weekLinkViewTarget, $this->pointerName => NULL), $this->conf['cache'], $this->conf['clear_anyway'], $this->conf['view.'][$weekLinkViewTarget . '.'][$weekLinkViewTarget . 'ViewPid']);
                     $num = $this->local_cObj->cObjGetSingle($this->conf['view.'][$weekLinkViewTarget . '.'][$weekLinkViewTarget . 'ViewLink'], $this->conf['view.'][$weekLinkViewTarget . '.'][$weekLinkViewTarget . 'ViewLink.']);
                 }
                 $className = array();
                 if ($isSelectedWeek && !empty($this->conf['view.']['month.']['monthSelectedWeekStyle'])) {
                     $className[] = $this->conf['view.']['month.']['monthSelectedWeekStyle'];
                 }
                 if ($isCurrentWeek && !empty($this->conf['view.']['month.']['monthCurrentWeekStyle'])) {
                     $className[] = $this->conf['view.']['month.']['monthCurrentWeekStyle'];
                 }
                 if ($hasEvent && !empty($this->conf['view.']['month.']['monthWeekWithEventStyle'])) {
                     $className[] = $this->conf['view.']['month.']['monthWeekWithEventStyle'];
                 }
                 $weekClasses = trim(implode(' ', $className));
                 $markerArray = array('###ADDITIONAL_CLASSES###' => $weekClasses ? ' ' . $weekClasses : '', '###CLASSES###' => $weekClasses ? ' class="' . $weekClasses . '" ' : '', '###WEEKNUM###' => $num, '###WEEKNUM_PLAIN###' => $numPlain);
                 $middle .= strtr($startweek, $markerArray);
                 // we do this sprintf all only for backwards compatibility with old templates
                 $middle .= strtr(sprintf($weeknum, $markerArray['###ADDITIONAL_CLASSES###'], $num), $markerArray);
             }
             $i++;
             $switch = array('###ALLDAY###' => '');
             $check_month = $start_day->getMonth();
             $switch['###LINK###'] = $this->getCreateEventLink('month', '', $start_day, $createOffset, $isAllowedToCreateEvent, '', '', $this->conf['view.']['day.']['dayStart']);
             $style = array();
             $dayLinkViewTarget = $this->conf['view.']['dayLinkTarget'];
             if (($this->rightsObj->isViewEnabled($dayLinkViewTarget) || $this->conf['view.'][$dayLinkViewTarget . '.'][$dayLinkViewTarget . 'ViewPid']) && ($this->viewarray[$formatedGetdate] || $isAllowedToCreateEvent)) {
                 $this->initLocalCObject();
                 $this->local_cObj->setCurrentVal($formatedDayDate);
                 $this->local_cObj->data['view'] = $dayLinkViewTarget;
                 $this->controller->getParametersForTyposcriptLink($this->local_cObj->data, array('getdate' => $formatedGetdate, 'view' => $dayLinkViewTarget, $this->pointerName => NULL), $this->conf['cache'], $this->conf['clear_anyway'], $this->conf['view.'][$dayLinkViewTarget . '.'][$dayLinkViewTarget . 'ViewPid']);
                 $switch['###LINK###'] .= $this->local_cObj->cObjGetSingle($this->conf['view.'][$dayLinkViewTarget . '.'][$dayLinkViewTarget . 'ViewLink'], $this->conf['view.'][$dayLinkViewTarget . '.'][$dayLinkViewTarget . 'ViewLink.']);
                 if ($switch['###LINK###'] === '') {
                     $switch['###LINK###'] .= $formatedDayDate;
                 }
                 $switch['###LINK###'] = $this->cObj->stdWrap($switch['###LINK###'], $this->conf['view.']['month.'][$type . 'Link_stdWrap.']);
             } else {
                 $switch['###LINK###'] .= $formatedDayDate;
             }
             // add a css class if the current day has a event - regardless if linked or not
             if ($this->viewarray[$formatedGetdate]) {
                 $style[] = $this->conf['view.']['month.']['eventDayStyle'];
             }
             $style[] = $this->conf['view.']['month.']['month' . ucfirst($type) . 'Style'];
             if ($check_month != $minical_month) {
                 $style[] = $this->conf['view.']['month.']['monthOffStyle'];
             }
             if ($start_day->format('%w') == 0 || $start_day->format('%w') == 6) {
                 $style[] = $this->conf['view.']['month.']['monthDayWeekendStyle'];
             }
             if ($isSelectedWeek) {
                 $style[] = $this->conf['view.']['month.']['monthDaySelectedWeekStyle'];
             }
             if ($formatedGetdate == $this->conf['getdate']) {
                 $style[] = $this->conf['view.']['month.']['monthSelectedStyle'];
             }
             if ($isCurrentWeek) {
                 $style[] = $this->conf['view.']['month.']['monthDayCurrentWeekStyle'];
             }
             if ($formatedGetdate == $today->format('%Y%m%d')) {
                 $style[] = $this->conf['view.']['month.']['monthTodayStyle'];
             }
             if ($this->conf['view.']['month.']['monthDayOfWeekStyle']) {
                 $style[] = sprintf($this->conf['view.']['month.']['monthDayOfWeekStyle'], $start_day->format('%w'));
             }
             //clean up empty styles (code beautify)
             foreach ($style as $key => $classname) {
                 if ($classname == '') {
                     unset($style[$key]);
                 }
             }
             // Adds hook for processing of extra month day style markers
             if (is_array($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['tx_cal_controller']['extraMonthDayStyleMarkerHook'])) {
                 foreach ($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['tx_cal_controller']['extraMonthDayStyleMarkerHook'] as $_classRef) {
                     $_procObj =& GeneralUtility::getUserObj($_classRef);
                     if (is_object($_procObj) && method_exists($_procObj, 'extraMonthDayStyleMarkerProcessor')) {
                         $_procObj->extraMonthDayStyleMarkerProcessor($this, $daylink, $switch, $type, $style);
                     }
                 }
             }
             $classesDay = implode(' ', $style);
             $markerArray = array('###STYLE###' => $classesDay, '###ADDITIONAL_CLASSES###' => $classesDay ? ' ' . $classesDay : '', '###CLASSES###' => $classesDay ? ' class="' . $classesDay . '" ' : '', '###DAY_ID###' => $formatedGetdate);
             $temp = strtr($t_month, $markerArray);
             $wraped = array();
             if ($this->viewarray[$formatedGetdate] && preg_match('!\\###EVENT\\###!is', $t_month)) {
                 foreach ($this->viewarray[$formatedGetdate] as $cal_time => $event_times) {
                     foreach ($event_times as $uid => $eventId) {
                         if ($type == 'large') {
                             $switch['###EVENT###'] .= $this->eventArray[$eventId]->renderEventForMonth();
                         } else {
                             if ($type == 'medium') {
                                 $switch['###EVENT###'] .= $this->eventArray[$eventId]->renderEventForYear();
                             } else {
                                 if ($type == 'small') {
                                     $switch['###EVENT###'] .= $this->eventArray[$eventId]->renderEventForMiniMonth();
                                 }
                             }
                         }
                     }
                 }
             }
             if (!isset($switch['###EVENT###'])) {
                 $this->initLocalCObject();
                 $switch['###EVENT###'] = $this->local_cObj->cObjGetSingle($this->conf['view.'][$viewTarget . '.']['event.']['noEventFound'], $this->conf['view.'][$viewTarget . '.']['event.']['noEventFound.']);
             }
             if (!isset($switch['###ALLDAY###'])) {
                 $this->initLocalCObject();
                 $switch['###ALLDAY###'] = $this->local_cObj->cObjGetSingle($this->conf['view.'][$viewTarget . '.']['event.']['noEventFound'], $this->conf['view.'][$viewTarget . '.']['event.']['noEventFound.']);
             }
             // Adds hook for processing of extra month day markers
             if (is_array($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['tx_cal_controller']['extraMonthDayMarkerHook'])) {
                 foreach ($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['tx_cal_controller']['extraMonthDayMarkerHook'] as $_classRef) {
                     $_procObj =& GeneralUtility::getUserObj($_classRef);
                     if (is_object($_procObj) && method_exists($_procObj, 'extraMonthDayMarkerProcessor')) {
                         $switch = $_procObj->extraMonthDayMarkerProcessor($this, $daylink, $switch, $type);
                     }
                 }
             }
             $middle .= \TYPO3\CMS\Cal\Utility\Functions::substituteMarkerArrayNotCached($temp, $switch, array(), $wraped);
             $start_day->addSeconds(86400);
             // 60 * 60 *24 -> strtotime('+1 day', $start_day);
             if ($i == 7) {
                 $i = 0;
                 $middle .= $endweek;
                 $checkagain = $start_day->getMonth();
                 if ($checkagain != $minical_month) {
                     $whole_month = FALSE;
                 }
             }
         } while ($whole_month == TRUE);
         $rems['###LOOPWEEKDAY###'] = $weekday_loop;
         $rems['###LOOPMONTHWEEKS###'] = $middle;
         $rems['###LOOPMONTHWEEKS_DAYS###'] = '';
         $rems['###LOOPWEEK_NUMS###'] = '';
         $rems['###CORNER###'] = '';
         $monthTemplate = \TYPO3\CMS\Cal\Utility\Functions::substituteMarkerArrayNotCached($monthTemplate, array(), $rems, array());
         $monthTemplate .= $ajaxEvents;
         $page = \TYPO3\CMS\Cal\Utility\Functions::substituteMarkerArrayNotCached($page, array(), array('###MONTH_TEMPLATE###' => $monthTemplate), array());
     }
     $listTemplate = $this->cObj->getSubpart($page, '###LIST###');
     if ($listTemplate != '') {
         $tx_cal_listview =& GeneralUtility::makeInstanceService('cal_view', 'list', 'list');
         $starttime = gmmktime(0, 0, 0, $this_month, 1, $this_year);
         $endtime = gmmktime(0, 0, 0, $this_month + 1, 1, $this_year);
         $rems['###LIST###'] = $tx_cal_listview->drawList($this->master_array, $listTemplate, $starttime, $endtime);
     }
     $return = \TYPO3\CMS\Cal\Utility\Functions::substituteMarkerArrayNotCached($page, array(), $rems, array());
     if ($this->rightsObj->isViewEnabled($viewTarget) || $this->conf['view.'][$viewTarget . '.'][$viewTarget . 'ViewPid']) {
         $this->initLocalCObject();
         $this->local_cObj->setCurrentVal($month_title);
         $this->local_cObj->data['view'] = $viewTarget;
         $this->controller->getParametersForTyposcriptLink($this->local_cObj->data, array('getdate' => $month_date, 'view' => $viewTarget, $this->pointerName => NULL), $this->conf['cache'], $this->conf['clear_anyway'], $this->conf['view.'][$viewTarget . '.'][$viewTarget . 'ViewPid']);
         $month_link = $this->local_cObj->cObjGetSingle($this->conf['view.'][$viewTarget . '.'][$viewTarget . 'ViewLink'], $this->conf['view.'][$viewTarget . '.'][$viewTarget . 'ViewLink.']);
     } else {
         $month_link = $month_title;
     }
     $return = str_replace('###MONTH_LINK###', $month_link, $return);
     return $return;
 }
示例#4
0
 function findTodosForYear(&$dateObject, $type = '', $pidList = '', $eventType = '4')
 {
     $starttime = \TYPO3\CMS\Cal\Controller\Calendar::calculateStartYearTime($dateObject);
     $endtime = \TYPO3\CMS\Cal\Controller\Calendar::calculateEndYearTime($dateObject);
     return $this->findAllWithin('cal_event_model', $starttime, $endtime, $type, $this->todoSubtype, $pidList, $eventType);
 }
示例#5
0
 function getMonthDaysAccordingly(&$event, $month, $year)
 {
     $byDayArray = $event->getByDay();
     $byMonthDays = $event->getByMonthDay();
     $resultDays = array();
     if (count($byDayArray) == 0) {
         $resultDays = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31);
         return $resultDays;
     }
     for ($i = 0; $i < count($byDayArray); $i++) {
         if (preg_match('/([-\\+]{0,1})?([0-9]{1})?([A-Z]{2})/', $byDayArray[$i], $byDaySplit)) {
             $dayOfWeekday = \TYPO3\CMS\Cal\Controller\Calendar::two2threeCharDays($byDaySplit[3], false);
             $monthStartTime = new \TYPO3\CMS\Cal\Model\CalDate($year . '-' . sprintf("%02d", $month) . '-01 00:00:00');
             $monthStartTime->setTZbyId('UTC');
             $monthEndTime = \TYPO3\CMS\Cal\Controller\Calendar::calculateEndMonthTime($monthStartTime);
             if ($byDaySplit[2] > 0) {
                 if ($byDaySplit[1] == '-') {
                     $monthTime = new \TYPO3\CMS\Cal\Model\CalDate(Calc::prevDayOfWeek($dayOfWeekday, $monthEndTime->getDay(), $monthEndTime->getMonth(), $monthEndTime->getYear(), '%Y%m%d', true));
                     $monthTime->setTZbyId('UTC');
                     $monthTime->subtractSeconds(($byDaySplit[2] - 1) * 604800);
                 } else {
                     $monthTime = new \TYPO3\CMS\Cal\Model\CalDate(Calc::nextDayOfWeek($dayOfWeekday, $monthStartTime->getDay(), $monthStartTime->getMonth(), $monthStartTime->getYear(), '%Y%m%d', true));
                     $monthTime->setTZbyId('UTC');
                     $monthTime->addSeconds(($byDaySplit[2] - 1) * 604800);
                 }
                 if ($monthTime->getMonth() == $month && in_array($monthTime->getDay(), $byMonthDays)) {
                     $resultDays[] = $monthTime->getDay();
                 }
             } else {
                 $monthTime = new \TYPO3\CMS\Cal\Model\CalDate(Calc::prevDayOfWeek($dayOfWeekday, $monthStartTime->getDay(), $monthStartTime->getMonth(), $monthStartTime->getYear(), '%Y%m%d', true));
                 $monthTime->setTZbyId('UTC');
                 if ($monthTime->before($monthStartTime)) {
                     $monthTime->addSeconds(604800);
                 }
                 while ($monthTime->before($monthEndTime)) {
                     $resultDays[] = $monthTime->getDay();
                     $monthTime->addSeconds(604800);
                 }
             }
         }
     }
     $resultDays = array_intersect($resultDays, $event->getByMonthDay());
     sort($resultDays);
     return $resultDays;
 }
示例#6
0
 /**
  * 
  * @return string
  */
 public function searchEvent()
 {
     $type = $this->conf['type'];
     $pidList = $this->conf['pidList'];
     $hookObjectsArr = $this->getHookObjectsArray('drawSearchClass');
     $start_day = $this->piVars['start_day'];
     $end_day = $this->piVars['end_day'];
     $searchword = preg_replace('/["\']/', '', strip_tags($this->piVars['query']));
     $this->piVars['query'] = $searchword;
     if (!$start_day) {
         $start_day = $this->getListViewTime($this->conf['view.']['search.']['defaultValues.']['start_day']);
         $start_day = \TYPO3\CMS\Cal\Controller\Calendar::calculateStartDayTime($start_day);
     } else {
         $start_day = new \TYPO3\CMS\Cal\Model\CalDate(\TYPO3\CMS\Cal\Utility\Functions::getYmdFromDateString($this->conf, $start_day) . '000000');
         $start_day->setHour(0);
         $start_day->setMinute(0);
         $start_day->setSecond(0);
         $start_day->setTZbyId('UTC');
     }
     if (!$end_day) {
         $end_day = $this->getListViewTime($this->conf['view.']['search.']['defaultValues.']['end_day']);
         $end_day = \TYPO3\CMS\Cal\Controller\Calendar::calculateEndDayTime($end_day);
     } else {
         $end_day = new \TYPO3\CMS\Cal\Model\CalDate(\TYPO3\CMS\Cal\Utility\Functions::getYmdFromDateString($this->conf, $end_day) . '000000');
         $end_day->setHour(23);
         $end_day->setMinute(59);
         $end_day->setSecond(59);
         $end_day->setTZbyId('UTC');
     }
     if ($this->piVars['single_date']) {
         $start_day = new \TYPO3\CMS\Cal\Model\CalDate(\TYPO3\CMS\Cal\Utility\Functions::getYmdFromDateString($this->conf, $this->piVars['single_date']));
         $start_day->setHour(0);
         $start_day->setMinute(0);
         $start_day->setSecond(0);
         $start_day->setTZbyId('UTC');
         $end_day = new \TYPO3\CMS\Cal\Model\CalDate();
         $end_day->copy($start_day);
         $end_day->addSeconds(86399);
     }
     $minStarttime = new \TYPO3\CMS\Cal\Model\CalDate($this->conf['view.']['search.']['startRange'] . '000000');
     $maxEndtime = new \TYPO3\CMS\Cal\Model\CalDate($this->conf['view.']['search.']['endRange'] . '000000');
     if ($start_day->before($minStarttime)) {
         $start_day->copy($minStarttime);
     }
     if ($start_day->after($maxEndtime)) {
         $start_day->copy($maxEndtime);
     }
     if ($end_day->before($minStarttime)) {
         $end_day->copy($minStarttime);
     }
     if ($end_day->after($maxEndtime)) {
         $end_day->copy($maxEndtime);
     }
     if ($end_day->before($start_day)) {
         $end_day->copy($start_day);
     }
     $locationIds = strip_tags(Controller::convertLinkVarArrayToList($this->piVars['location_ids']));
     $organizerIds = strip_tags(Controller::convertLinkVarArrayToList($this->piVars['organizer_ids']));
     $this->getDateTimeObject->copy($start_day);
     $modelObj =& \TYPO3\CMS\Cal\Utility\Registry::Registry('basic', 'modelcontroller');
     $list = array();
     if ($this->piVars['submit'] || !$this->conf['view.']['search.']['startSearchAfterSubmit']) {
         $list = $modelObj->searchEvents($type, $pidList, $start_day, $end_day, $searchword, $locationIds, $organizerIds);
     }
     // Hook: preSearchEventRendering
     foreach ($hookObjectsArr as $hookObj) {
         if (method_exists($hookObj, 'preSearchEventRendering')) {
             $hookObj->preSearchEventRendering($list, $this);
         }
     }
     if ($this->conf['view.']['enableAjax']) {
         $ajaxStringArray = array();
         foreach ($list as $event) {
             $ajaxStringArray[] = '{' . $this->getEventAjaxString($event) . '}';
         }
         return '[' . implode(',', $ajaxStringArray) . ']';
     }
     $viewObj =& \TYPO3\CMS\Cal\Utility\Registry::Registry('basic', 'viewcontroller');
     $drawnList = $viewObj->drawSearchEventResult($list, $start_day, $end_day, $searchword, $locationIds, $organizerIds);
     // Hook: postSearchEventRendering
     foreach ($hookObjectsArr as $hookObj) {
         if (method_exists($hookObj, 'postSearchEventRendering')) {
             $hookObj->postSearchEventRendering($drawnList, $list, $this);
         }
     }
     return $drawnList;
 }
示例#7
0
 /**
  * 
  * @param string $dateObject
  * @return \TYPO3\CMS\Cal\Model\CalDate
  */
 public static function calculateEndYearTime($dateObject = '')
 {
     $timeObj = Calendar::calculateStartYearTime($dateObject);
     $timeObj->setYear($timeObj->getYear() + 1);
     $timeObj->subtractSeconds(1);
     return $timeObj;
 }
示例#8
0
文件: DayView.php 项目: ulrikkold/cal
 /**
  * Draws the day view
  * 
  * @param $master_array array
  *        	to be drawn.
  * @param $getdate integer
  *        	of the event
  * @return string HTML output.
  */
 public function drawDay(&$master_array, $getdate)
 {
     $this->_init($master_array);
     if ($this->conf['useNewTemplatesAndRendering']) {
         return $this->newDrawDay($master_array, $getdate);
     }
     $page = $this->cObj->fileResource($this->conf['view.']['day.']['dayTemplate']);
     if ($page == '') {
         return "<h3>day: no template file found:</h3>" . $this->conf['view.']['day.']['dayTemplate'] . "<br />Please check your template record and add both cal items at 'include static (from extension)'";
     }
     $dayTemplate = $this->cObj->getSubpart($page, '###DAY_TEMPLATE###');
     if ($dayTemplate == '') {
         $rems = array();
         return $this->finish($page, $rems);
     }
     $dayStart = $this->conf['view.']['day.']['dayStart'];
     // '0700'; // Start time for day grid
     $dayEnd = $this->conf['view.']['day.']['dayEnd'];
     // '2300'; // End time for day grid
     $gridLength = $this->conf['view.']['day.']['gridLength'];
     // '15'; // Grid distance in minutes for day view, multiples of 15 preferred
     if (!isset($getdate) || $getdate == '') {
         $getdate_obj = new \TYPO3\CMS\Cal\Model\CalDate();
         $getdate = $getdate_obj->format('%Y%m%d');
     }
     $day_array2 = array();
     preg_match('/([0-9]{4})([0-9]{2})([0-9]{2})/', $getdate, $day_array2);
     $this_day = $day_array2[3];
     $this_month = $day_array2[2];
     $this_year = $day_array2[1];
     $unix_time = new \TYPO3\CMS\Cal\Model\CalDate($getdate . '000000');
     $this->initLocalCObject();
     $this->local_cObj->setCurrentVal($this->conf['view.']['day.']['legendNextDayLink']);
     $legend_next_day_link = $this->local_cObj->cObjGetSingle($this->conf['view.']['day.']['legendNextDayLink'], $this->conf['view.']['day.']['legendNextDayLink.']);
     $this->local_cObj->setCurrentVal($this->conf['view.']['day.']['legendPrevDayLink']);
     $legend_prev_day_link = $this->local_cObj->cObjGetSingle($this->conf['view.']['day.']['legendPrevDayLink'], $this->conf['view.']['day.']['legendPrevDayLink.']);
     $next_month_obj = new \TYPO3\CMS\Cal\Model\CalDate();
     $next_month_obj->copy($unix_time);
     $next_month_obj->addSeconds(604800);
     $next_month = $next_month_obj->format('%Y%m%d');
     $prev_month_obj = new \TYPO3\CMS\Cal\Model\CalDate();
     $prev_month_obj->copy($unix_time);
     $prev_month_obj->subtractSeconds(604801);
     $prev_month = $prev_month_obj->format('%Y%m%d');
     $dateOfWeek = Calc::beginOfWeek($this_day, $this_month, $this_year);
     $week_start_day = new \TYPO3\CMS\Cal\Model\CalDate($dateOfWeek . '000000');
     $start_day = $unix_time;
     $start_week_time = $start_day;
     $end_week_time = new \TYPO3\CMS\Cal\Model\CalDate();
     $end_week_time->copy($start_week_time);
     $end_week_time->addSeconds(604799);
     // Nasty fix to work with TS strftime
     $start_day_time = new \TYPO3\CMS\Cal\Model\CalDate($getdate . '000000');
     $start_day_time->setTZbyId('UTC');
     $end_day_time = \TYPO3\CMS\Cal\Controller\Calendar::calculateEndDayTime($start_day_time);
     $GLOBALS['TSFE']->register['cal_day_starttime'] = $start_day_time->getTime();
     $GLOBALS['TSFE']->register['cal_day_endtime'] = $end_day_time->getTime();
     $display_date = $this->cObj->cObjGetSingle($this->conf['view.']['day.']['titleWrap'], $this->conf['view.']['day.']['titleWrap.'], $TSkey = '__');
     $dayTemplate = $this->cObj->fileResource($this->conf['view.']['day.']['dayTemplate']);
     if ($dayTemplate == '') {
         return '<h3>calendar: no template file found:</h3>' . $this->conf['view.']['day.']['dayTemplate'] . '<br />Please check your template record and add both cal items at "include static (from extension)"';
     }
     $dayTemplate = $this->replace_files($dayTemplate, array('sidebar' => $this->conf['view.']['other.']['sidebarTemplate']));
     $sims = array('###GETDATE###' => $getdate, '###DISPLAY_DATE###' => $display_date, '###LEGEND_PREV_DAY###' => $legend_prev_day_link, '###LEGEND_NEXT_DAY###' => $legend_next_day_link, '###SIDEBAR_DATE###' => '');
     // Replaces the daysofweek
     $loop_dof = $this->cObj->getSubpart($dayTemplate, '###DAYSOFWEEK###');
     // Build the body
     $dayborder = 0;
     $out = '';
     $fillTime = sprintf('%04d', $dayStart);
     $day_array = array();
     while ($fillTime < $dayEnd) {
         array_push($day_array, $fillTime);
         $dTime = array();
         preg_match('/([0-9]{2})([0-9]{2})/', $fillTime, $dTime);
         $fill_h = $dTime[1];
         $fill_min = $dTime[2];
         $fill_min = sprintf('%02d', $fill_min + $gridLength);
         if ($fill_min == 60) {
             $fill_h = sprintf('%02d', $fill_h + 1);
             $fill_min = '00';
         }
         $fillTime = $fill_h . $fill_min;
     }
     $nbrGridCols = array();
     $dayborder = 0;
     $view_array = array();
     $rowspan_array = array();
     $eventArray = array();
     $endOfDay = new \TYPO3\CMS\Cal\Model\CalDate();
     $startOfDay = new \TYPO3\CMS\Cal\Model\CalDate();
     if (!empty($this->master_array)) {
         foreach ($this->master_array as $ovlKey => $ovlValue) {
             $dTimeStart = array();
             $dTimeEnd = array();
             $dDate = array();
             preg_match('/([0-9]{2})([0-9]{2})/', $dayStart, $dTimeStart);
             preg_match('/([0-9]{2})([0-9]{2})/', $dayEnd, $dTimeEnd);
             preg_match('/([0-9]{4})([0-9]{2})([0-9]{2})/', $ovlKey, $dDate);
             $d_start = new \TYPO3\CMS\Cal\Model\CalDate($dDate[1] . $dDate[2] . $dDate[3] . ' ' . $dTimeStart[1] . ':' . $dTimeStart[2] . ':00');
             $d_start->setTZbyId('UTC');
             $d_end = new \TYPO3\CMS\Cal\Model\CalDate($dDate[1] . $dDate[2] . $dDate[3] . ' ' . $dTimeEnd[1] . ':' . $dTimeEnd[2] . ':00');
             $d_end->setTZbyId('UTC');
             foreach ($ovlValue as $ovl_time_key => $ovl_time_Value) {
                 foreach ($ovl_time_Value as $event) {
                     $eventStart = $event->getStart();
                     $eventArray[$event->getType() . '_' . $event->getUid() . '_' . $eventStart->format('%Y%m%d%H%M')] = $event;
                     $starttime = new \TYPO3\CMS\Cal\Model\CalDate();
                     $endtime = new \TYPO3\CMS\Cal\Model\CalDate();
                     $j = new \TYPO3\CMS\Cal\Model\CalDate();
                     if ($ovl_time_key == '-1') {
                         $starttime->copy($event->getStart());
                         $endtime->copy($event->getEnd());
                         $endtime->addSeconds(1);
                         for ($j->copy($starttime); $j->before($endtime) && $j->before($end_week_time); $j->addSeconds(86400)) {
                             $view_array[$j->format('%Y%m%d')]['-1'][] = $event->getType() . '_' . $event->getUid() . '_' . $eventStart->format('%Y%m%d%H%M');
                         }
                     } else {
                         $starttime->copy($event->getStart());
                         $starttime->subtractSeconds($starttime->getMinute() % $gridLength * 60);
                         $endtime->copy($event->getEnd());
                         $endtime->subtractSeconds($endtime->getMinute() % $gridLength * 60);
                         $entries = 1;
                         $old_day = new \TYPO3\CMS\Cal\Model\CalDate($ovlKey . '000000');
                         $old_day->setTZbyId('UTC');
                         $endOfDay->copy($d_end);
                         $startOfDay->copy($d_start);
                         // $d_start -= $gridLength * 60;
                         for ($k = 0; $k < count($view_array[$ovlKey]); $k++) {
                             if (empty($view_array[$starttime->format('%Y%m%d')][$starttime->format('%H%M')][$k])) {
                                 break;
                             }
                         }
                         $j->copy($starttime);
                         if ($j->before($startOfDay)) {
                             $j->copy($startOfDay);
                         }
                         while ($j->before($endtime) && $j->before($end_week_time)) {
                             if ($j->after($endOfDay)) {
                                 $rowspan_array[$old_day->format('%Y%m%d')][$event->getType() . '_' . $event->getUid() . '_' . $eventStart->format('%Y%m%d%H%M')] = $entries - 1;
                                 $endOfDay->addSeconds(60 * 60 * 24);
                                 $old_day->copy($endOfDay);
                                 $startOfDay->addSeconds(60 * 60 * 24);
                                 $j->copy($startOfDay);
                                 $entries = 0;
                                 for ($k = 0; $k < count($view_array[$startOfDay->format('%Y%m%d')]); $k++) {
                                     if (empty($view_array[$d_start->format('%Y%m%d')][$startOfDay->format('%H%M')][$k])) {
                                         break;
                                     }
                                 }
                             } else {
                                 $view_array[$j->format('%Y%m%d')][$j->format('%H%M')][] = $event->getType() . '_' . $event->getUid() . '_' . $eventStart->format('%Y%m%d%H%M');
                                 $j->addSeconds($gridLength * 60);
                             }
                             $entries++;
                         }
                         $rowspan_array[$old_day->format('%Y%m%d')][$event->getType() . '_' . $event->getUid() . '_' . $eventStart->format('%Y%m%d%H%M')] = $entries - 1;
                     }
                 }
             }
         }
     }
     if ($this->conf['view.']['day.']['dynamic'] == 1) {
         $dayStart = '2359';
         $dayEnd = '0000';
         if (is_array($view_array[$getdate])) {
             $timeKeys = array_keys($view_array[$getdate]);
             $formatedLast = array_pop($timeKeys);
             $formatedFirst = $formatedLast;
             foreach ($timeKeys as $timeKey) {
                 if ($timeKey > 0) {
                     $formatedFirst = $timeKey;
                     break;
                 }
             }
             if (intval($formatedFirst) > 0 && intval($formatedFirst) < intval($dayStart)) {
                 $dayStart = sprintf("%04d", $formatedFirst);
             }
             if (intval($formatedLast) > intval($dayEnd)) {
                 $dayEnd = sprintf("%04d", $formatedLast + $gridLength);
             }
         }
         $dayStart = substr($dayStart, 0, 2) . '00';
     }
     if (!empty($view_array[$getdate])) {
         $max = array();
         foreach ($view_array[$getdate] as $array_time => $time_val) {
             $c = count($view_array[$getdate][$array_time]);
             array_push($max, $c);
         }
         $nbrGridCols[$getdate] = max($max);
     } else {
         $nbrGridCols[$getdate] = 1;
     }
     $isAllowedToCreateEvent = $this->rightsObj->isAllowedToCreateEvent();
     $start_day = $week_start_day;
     for ($i = 0; $i < 7; $i++) {
         $day_num = $start_day->format('%w');
         $daylink = $start_day->format('%Y%m%d');
         $weekday = $start_day->format($this->conf['view.']['day.']['dateFormatDay']);
         if ($daylink == $getdate) {
             $row1 = 'rowToday';
             $row2 = 'rowOn';
             $row3 = 'rowToday';
         } else {
             $row1 = 'rowOff';
             $row2 = 'rowOn';
             $row3 = 'rowOff';
         }
         $dayLinkViewTarget = $this->conf['view.']['dayLinkTarget'];
         if (($this->rightsObj->isViewEnabled($dayLinkViewTarget) || $this->conf['view.'][$dayLinkViewTarget . '.'][$dayLinkViewTarget . 'ViewPid']) && ($view_array[$daylink] || $isAllowedToCreateEvent)) {
             $this->initLocalCObject();
             $this->local_cObj->setCurrentVal($weekday);
             $this->local_cObj->data['view'] = $dayLinkViewTarget;
             $this->controller->getParametersForTyposcriptLink($this->local_cObj->data, array('getdate' => $daylink, 'view' => $dayLinkViewTarget, $this->pointerName => NULL), $this->conf['cache'], $this->conf['clear_anyway'], $this->conf['view.'][$dayLinkViewTarget . '.'][$dayLinkViewTarget . 'ViewPid']);
             $link = $this->local_cObj->cObjGetSingle($this->conf['view.'][$dayLinkViewTarget . '.'][$dayLinkViewTarget . 'ViewLink'], $this->conf['view.'][$dayLinkViewTarget . '.'][$dayLinkViewTarget . 'ViewLink.']);
         } else {
             $link = $weekday;
         }
         $start_day->addSeconds(86400);
         $search = array('###LINK###', '###DAYLINK###', '###ROW1###', '###ROW2###', '###ROW3###');
         $replace = array($link, $daylink, $row1, $row2, $row3);
         $loop_tmp = str_replace($search, $replace, $loop_dof);
         $weekday_loop .= $loop_tmp;
     }
     $rems['###DAYSOFWEEK###'] = $weekday_loop;
     // Replaces the allday events
     $replace = '';
     if (is_array($view_array[$getdate]['-1'])) {
         $loop_ad = $this->cObj->getSubpart($dayTemplate, '###LOOPALLDAY###');
         foreach ($view_array[$getdate]['-1'] as $uid => $allday) {
             $replace .= $eventArray[$allday]->renderEventForAllDay();
         }
     }
     $sims['###ALLDAY###'] = $replace;
     $view_array = $view_array[$getdate];
     $nbrGridCols = $nbrGridCols[$getdate] ? $nbrGridCols[$getdate] : 1;
     $t_array = array();
     $pos_array = array();
     preg_match('/([0-9]{4})([0-9]{2})([0-9]{2})/', $getdate, $dDate);
     preg_match('/([0-9]{2})([0-9]{2})/', $dayStart, $dTimeStart);
     preg_match('/([0-9]{2})([0-9]{2})/', $dayEnd, $dTimeEnd);
     $dTimeStart[2] -= $dTimeStart[2] % $gridLength;
     $dTimeEnd[2] -= $dTimeEnd[2] % $gridLength;
     $d_start = new \TYPO3\CMS\Cal\Model\CalDate($dDate[1] . $dDate[2] . $dDate[3] . ' ' . $dTimeStart[1] . ':' . sprintf("%02d", $dTimeStart[2]) . ':00');
     $d_start->setTZbyId('UTC');
     $d_end = new \TYPO3\CMS\Cal\Model\CalDate($dDate[1] . $dDate[2] . $dDate[3] . ' ' . $dTimeEnd[1] . ':' . sprintf("%02d", $dTimeEnd[2]) . ':00');
     $d_end->setTZbyId('UTC');
     $i = new \TYPO3\CMS\Cal\Model\CalDate();
     $i->copy($d_start);
     $i->setTZbyId('UTC');
     while ($i->before($d_end)) {
         $i_formatted = $i->format('%H%M');
         if (is_array($view_array[$i_formatted]) && count($view_array[$i_formatted]) > 0) {
             foreach ($view_array[$i_formatted] as $eventKey) {
                 $event =& $eventArray[$eventKey];
                 $eventStart = $event->getStart();
                 if (array_key_exists($event->getType() . $event->getUid() . '_' . $eventStart->format('%Y%m%d%H%M'), $pos_array)) {
                     $eventEnd = $event->getEnd();
                     $nd = $eventEnd->subtractSeconds($eventEnd->getMinute() % $gridLength * 60);
                     if ($i_formatted >= $nd) {
                         $t_array[$i_formatted][$pos_array[$event->getType() . $event->getUid() . '_' . $eventStart->format('%Y%m%d%H%M')]] = array('ended' => $event->getType() . '_' . $event->getUid() . '_' . $eventStart->format('%Y%m%d%H%M'));
                     } else {
                         $t_array[$i_formatted][$pos_array[$event->getType() . $event->getUid() . '_' . $eventStart->format('%Y%m%d%H%M')]] = array('started' => $event->getType() . '_' . $event->getUid() . '_' . $eventStart->format('%Y%m%d%H%M'));
                     }
                 } else {
                     for ($j = 0; $j < $nbrGridCols; $j++) {
                         if (count($t_array[$i_formatted][$j]) == 0 || !isset($t_array[$i_formatted][$j])) {
                             $pos_array[$event->getType() . $event->getUid() . '_' . $eventStart->format('%Y%m%d%H%M')] = $j;
                             $t_array[$i_formatted][$j] = array('begin' => $event->getType() . '_' . $event->getUid() . '_' . $eventStart->format('%Y%m%d%H%M'));
                             break;
                         }
                     }
                 }
             }
         } else {
             $t_array[$i_formatted] = '';
         }
         $i->addSeconds($gridLength * 60);
     }
     $event_length = array();
     $border = 0;
     $createOffset = intval($this->conf['rights.']['create.']['event.']['timeOffset']) * 60;
     $cal_time_obj = new \TYPO3\CMS\Cal\Model\CalDate($getdate . '000000');
     $cal_time_obj->setTZbyId('UTC');
     foreach ($t_array as $cal_time => $val) {
         preg_match('/([0-9]{2})([0-9]{2})/', $cal_time, $dTimeStart);
         $cal_time_obj->setHour($dTimeStart[1]);
         $cal_time_obj->setMinute($dTimeStart[2]);
         $key = $cal_time_obj->format($this->conf['view.']['day.']['timeFormatDay']);
         if (intval($dTimeStart[2]) == 0) {
             $daydisplay .= sprintf($this->conf['view.']['day.']['dayTimeCell'], 60 / $gridLength, $key, $gridLength);
         } elseif ($cal_time_obj->equals($d_start)) {
             $size_tmp = 60 - (int) substr($cal_time, 2, 2);
             $daydisplay .= sprintf($this->conf['view.']['day.']['dayTimeCell'], $size_tmp / $gridLength, $key, $gridLength);
         } else {
             $daydisplay .= sprintf($this->conf['view.']['day.']['dayTimeCell2'], $gridLength);
         }
         if ($dayborder == 0) {
             $class = ' ' . $this->conf['view.']['day.']['classDayborder'];
             $dayborder++;
         } else {
             $class = ' ' . $this->conf['view.']['day.']['classDayborder2'];
             $dayborder = 0;
         }
         if ($val != '' && count($val) > 0) {
             for ($i = 0; $i < count($val); $i++) {
                 if (!empty($val[$i])) {
                     $keys = array_keys($val[$i]);
                     switch ($keys[0]) {
                         case 'begin':
                             $event =& $eventArray[$val[$i][$keys[0]]];
                             $dayEndTime = new \TYPO3\CMS\Cal\Model\CalDate();
                             $dayEndTime->copy($event->getEnd());
                             $dayStartTime = new \TYPO3\CMS\Cal\Model\CalDate();
                             $dayStartTime->copy($event->getStart());
                             $rest = $dayStartTime->getMinute() % $gridLength;
                             $plus = 0;
                             if ($rest > 0) {
                                 $plus = 1;
                             }
                             if ($dayEndTime->after($d_end)) {
                                 $dayEndTime = $d_end;
                             }
                             if ($dayStartTime->before($d_start)) {
                                 $dayStartTime = $d_start;
                             }
                             $colSpan = $rowspan_array[$getdate][$val[$i][$keys[0]]];
                             $daydisplay .= sprintf($this->conf['view.']['day.']['dayEventPre'], $colSpan);
                             $daydisplay .= $event->renderEventForDay();
                             $daydisplay .= $this->conf['view.']['day.']['dayEventPost'];
                             // End event drawing
                             break;
                     }
                 }
             }
             if (count($val) < $nbrGridCols) {
                 $remember = 0;
                 // Render cells with events
                 for ($l = 0; $l < $nbrGridCols; $l++) {
                     if (!$val[$l]) {
                         $remember++;
                     } else {
                         if ($remember > 0) {
                             $daydisplay .= $this->getCreateEventLink('day', $this->conf['view.']['day.']['normalCell'], $cal_time_obj, $createOffset, $isAllowedToCreateEvent, $remember, $class, $cal_time);
                             $remember = 0;
                         }
                     }
                 }
                 // Render cells next to events
                 if ($remember > 0) {
                     $daydisplay .= $this->getCreateEventLink('day', $this->conf['view.']['day.']['normalCell'], $cal_time_obj, $createOffset, $isAllowedToCreateEvent, $remember, $class, $cal_time);
                     $remember = 0;
                 }
             }
         } else {
             // Render cells without events
             $daydisplay .= $this->getCreateEventLink('day', $this->conf['view.']['day.']['normalCell'], $cal_time_obj, $createOffset, $isAllowedToCreateEvent, $nbrGridCols, $class, $cal_time);
         }
         $daydisplay .= $this->conf['view.']['day.']['dayFinishRow'];
     }
     $dayTemplate = \TYPO3\CMS\Cal\Utility\Functions::substituteMarkerArrayNotCached($dayTemplate, $sims, array(), array());
     $rems['###DAYEVENTS###'] = $daydisplay;
     $page = \TYPO3\CMS\Cal\Utility\Functions::substituteMarkerArrayNotCached($page, array(), array('###DAY_TEMPLATE###' => $dayTemplate), array());
     return $this->finish($page, $rems);
 }