コード例 #1
0
ファイル: Befunc.php プロジェクト: ulrikkold/cal
 public function postprocessvalue(&$conf)
 {
     if ($conf['colConf']['tx_cal_event']) {
         $value = new \TYPO3\CMS\Cal\Model\CalDate($conf['value'] . '000000');
         if ($GLOBALS['TYPO3_CONF_VARS']['SYS']['USdateFormat'] == '1') {
             $conf['value'] = $value->format('%d.%m.%Y');
         } else {
             $conf['value'] = $value->format('%d-%m-%Y');
         }
     }
     return $conf['value'];
 }
コード例 #2
0
ファイル: EventService.php プロジェクト: ulrikkold/cal
 function findMeetingEventsWithEmptyStatus($pidList)
 {
     if ($this->rightsObj->isLoggedIn()) {
         $start_date = new \TYPO3\CMS\Cal\Model\CalDate();
         $start_date->setTZById('UTC');
         $end_date = new \TYPO3\CMS\Cal\Model\CalDate();
         $end_date->copy($start_date);
         $end_date->addSeconds($this->conf['view.'][$this->conf['view'] . '.']['event.']['meeting.']['lookingAhead']);
         $this->setStartAndEndPoint($start_date, $end_date);
         $formattedStarttime = $this->starttime->format('%Y%m%d');
         $formattedEndtime = $this->endtime->format('%Y%m%d');
         $calendarService =& $this->modelObj->getServiceObjByKey('cal_calendar_model', 'calendar', 'tx_cal_calendar');
         $categoryService =& $this->modelObj->getServiceObjByKey('cal_category_model', 'category', $this->extConf['categoryService']);
         $calendarSearchString = $calendarService->getCalendarSearchString($pidList, true, $this->conf['calendar'] ? $this->conf['calendar'] : '');
         // putting everything together
         $additionalWhere = $calendarSearchString . ' AND tx_cal_event.pid IN (' . $pidList . ') ' . $this->cObj->enableFields('tx_cal_event') . ' AND ((tx_cal_event.start_date>=' . $formattedStarttime . ' AND tx_cal_event.start_date<=' . $formattedEndtime . ') OR (tx_cal_event.end_date<=' . $formattedEndtime . ' AND tx_cal_event.end_date>=' . $formattedStarttime . ') OR (tx_cal_event.end_date>=' . $formattedEndtime . ' AND tx_cal_event.start_date<=' . $formattedStarttime . ') OR (tx_cal_event.start_date<=' . $formattedEndtime . ' AND (tx_cal_event.freq IN ("day","week","month","year") AND tx_cal_event.until>=' . $formattedStarttime . ')))';
         $additionalWhere .= ' AND tx_cal_attendee.status IN ("0","NEEDS-ACTION") AND tx_cal_attendee.attendance <> "CHAIR" AND tx_cal_event.type = 3 AND tx_cal_attendee.fe_user_id = ' . $this->rightsObj->getUserId();
         // creating the arrays the user is allowed to see
         $categories = array();
         $categoryService->getCategoryArray($pidList, $categories);
         $includeRecurring = true;
         if ($this->conf['view'] == 'ics' || $this->conf['view'] == 'single_ics') {
             $includeRecurring = false;
         }
         // creating events
         return $this->getEventsFromTable($categories[0][0], $includeRecurring, $additionalWhere, $this->getServiceKey(), true, true, '3');
     }
 }
コード例 #3
0
ファイル: WeekView.php プロジェクト: ulrikkold/cal
 /**
  * Draws the week view.
  * 
  * @param $master_array array
  *        	The events to be drawn.
  * @param $getdate integer
  *        	The date of the event
  * @return string The HTML output.
  */
 public function drawWeek(&$master_array, $getdate)
 {
     if ($this->conf['useNewTemplatesAndRendering']) {
         return $this->newDrawWeek($master_array, $getdate);
     }
     $this->_init($master_array);
     $page = $this->cObj->fileResource($this->conf['view.']['week.']['weekTemplate']);
     if ($page == '') {
         return "<h3>week: no template file found:</h3>" . $this->conf['view.']['week.']['weekTemplate'] . "<br />Please check your template record and add both cal items at 'include static (from extension)'";
     }
     $weekTemplate = $this->cObj->getSubpart($page, '###WEEK_TEMPLATE###');
     if ($weekTemplate == '') {
         $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');
     $today = new \TYPO3\CMS\Cal\Model\CalDate();
     $todayFormatted = $today->format('%Y%m%d');
     $now = new \TYPO3\CMS\Cal\Model\CalDate($getdate . '000000');
     $endOfNextMonth = new \TYPO3\CMS\Cal\Model\CalDate(Calc::endOfNextMonth($this_day, $this_month, $this_year));
     $now->addSeconds(60 * 60 * 24 * 31);
     $next_month = $now->format('%Y%m%d');
     if ($now->after($endOfNextMonth)) {
         $next_month = $endOfNextMonth->format('%Y%m%d');
     }
     $now = new \TYPO3\CMS\Cal\Model\CalDate($getdate . '000000');
     $startOfPrevMonth = new \TYPO3\CMS\Cal\Model\CalDate(Calc::endOfPrevMonth($this_day, $this_month, $this_year));
     $startOfPrevMonth->setDay(1);
     $now->subtractSeconds(60 * 60 * 24 * 31);
     $prev_month = $now->format('%Y%m%d');
     if ($now->before($startOfPrevMonth)) {
         $prev_month = $startOfPrevMonth->format('%Y%m%d');
     }
     $dateOfMonth = Calc::beginOfWeek(1, $this_month, $this_year);
     $start_month_day = new \TYPO3\CMS\Cal\Model\CalDate($dateOfMonth . '000000');
     $thisday2 = $unix_time->format($this->conf['view.']['week.']['dateFormatWeekList']);
     $num_of_events2 = 0;
     $next_week_obj = new \TYPO3\CMS\Cal\Model\CalDate();
     $next_week_obj->copy($unix_time);
     $next_week_obj->addSeconds(60 * 60 * 24 * 7);
     $next_week = $next_week_obj->format('%Y%m%d');
     $next_week_obj->subtractSeconds(60 * 60 * 24 * 7 * 2);
     $prev_week = $next_week_obj->format('%Y%m%d');
     $next_day_obj = $unix_time->getNextDay();
     $next_day = $next_day_obj->format('%Y%m%d');
     $prev_day_obj = $unix_time->getPrevDay();
     $prev_day = $prev_day_obj->format('%Y%m%d');
     $dateOfWeek = Calc::beginOfWeek($unix_time->getDay(), $unix_time->getMonth(), $unix_time->getYear());
     $week_start_day = new \TYPO3\CMS\Cal\Model\CalDate($dateOfWeek . '000000');
     // Nasty fix to work with TS strftime
     $start_week_time = new \TYPO3\CMS\Cal\Model\CalDate($dateOfWeek . '000000');
     $start_week_time->setTZbyID('UTC');
     $end_week_time = new \TYPO3\CMS\Cal\Model\CalDate();
     $end_week_time->copy($start_week_time);
     $end_week_time->addSeconds(604799);
     $GLOBALS['TSFE']->register['cal_week_endtime'] = $end_week_time->getTime();
     $GLOBALS['TSFE']->register['cal_week_starttime'] = $start_week_time->getTime();
     $display_date = $this->cObj->cObjGetSingle($this->conf['view.']['week.']['titleWrap'], $this->conf['view.']['week.']['titleWrap.']);
     $this->initLocalCObject();
     $dayLinkViewTarget =& $this->conf['view.']['dayLinkTarget'];
     $this->local_cObj->data['view'] = $dayLinkViewTarget;
     $this->local_cObj->setCurrentVal($this->conf['view.']['week.']['legendNextDayLink']);
     $legend_next_day_link = $this->local_cObj->cObjGetSingle($this->conf['view.']['week.']['legendNextDayLink'], $this->conf['view.']['week.']['legendNextDayLink.']);
     $this->local_cObj->setCurrentVal($this->conf['view.']['week.']['legendPrevDayLink']);
     $legend_prev_day_link = $this->local_cObj->cObjGetSingle($this->conf['view.']['week.']['legendPrevDayLink'], $this->conf['view.']['week.']['legendPrevDayLink.']);
     // Figure out colspans
     $dayborder = 0;
     $thisdate = $start_week_time;
     $eventArray = array();
     $view_array = array();
     $rowspan_array = array();
     $endOfDay = new \TYPO3\CMS\Cal\Model\CalDate();
     $startOfDay = new \TYPO3\CMS\Cal\Model\CalDate();
     // creating the dateObjects only once:
     $starttime = new \TYPO3\CMS\Cal\Model\CalDate();
     $endtime = new \TYPO3\CMS\Cal\Model\CalDate();
     $j = new \TYPO3\CMS\Cal\Model\CalDate();
     if (count($this->master_array) > 0) {
         $masterKeys = array_keys($this->master_array);
         foreach ($masterKeys as $ovlKey) {
             $dTimeStart = array();
             $dTimeEnd = array();
             $dDate = array();
             preg_match('/([0-9]{2})([0-9]{2})/', $this->conf['view.']['day.']['dayStart'], $dTimeStart);
             preg_match('/([0-9]{2})([0-9]{2})/', $this->conf['view.']['day.']['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] . ':' . 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');
             // minus 1 second to allow endtime 24:00
             $d_end->subtractSeconds(1);
             $ovlTimeKeys = array_keys($this->master_array[$ovlKey]);
             foreach ($ovlTimeKeys as $ovl_time_key) {
                 $ovlDayKeys = array_keys($this->master_array[$ovlKey][$ovl_time_key]);
                 foreach ($ovlDayKeys as $ovl2Key) {
                     $event =& $this->master_array[$ovlKey][$ovl_time_key][$ovl2Key];
                     $eventStart = $event->getStart();
                     $eventMappingKey = $event->getType() . '_' . $event->getUid() . '_' . $eventStart->format('%Y%m%d%H%M');
                     $eventArray[$ovlKey . '_' . $eventMappingKey] =& $event;
                     $starttime->copy($event->getStart());
                     $endtime->copy($event->getEnd());
                     if ($ovl_time_key == '-1') {
                         $j->copy($starttime);
                         $view_array[$j->format('%Y%m%d')]['-1'][] = $ovlKey . '_' . $eventMappingKey;
                         $j->addSeconds(86400);
                         for (; $j->before($endtime) && $j->before($end_week_time); $j->addSeconds(86400)) {
                             $view_array[$j->format('%Y%m%d')]['-1'][] = $ovlKey . '_' . $eventMappingKey;
                         }
                     } else {
                         if ($starttime->before($end_week_time)) {
                             $starttime->subtractSeconds($starttime->getMinute() % $gridLength * 60);
                             $endtime->addSeconds($endtime->getMinute() % $gridLength * 60);
                             $entries = 1;
                             $old_day = new \TYPO3\CMS\Cal\Model\CalDate($ovlKey . '000000');
                             $endOfDay->copy($d_end);
                             $startOfDay->copy($d_start);
                             // get x-array possition
                             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);
                             }
                             $counter = 0;
                             while ($j->before($endtime) && $j->before($end_week_time)) {
                                 $counter++;
                                 $view_array[$j->format('%Y%m%d')][$j->format('%H%M')][] = $ovlKey . '_' . $eventMappingKey;
                                 if ($j->after($endOfDay)) {
                                     $rowspan_array[$old_day->format('%Y%m%d')][$eventMappingKey] = $entries - 1;
                                     $endOfDay->addSeconds(86400);
                                     $old_day->copy($endOfDay);
                                     $startOfDay->addSeconds(86400);
                                     $j->addSeconds(86400);
                                     $j->setHour($startOfDay->getHour());
                                     $j->setMinute($startOfDay->getMinute());
                                     $j->subtractSeconds($gridLength * 60);
                                     for ($k = 0; $k < count($view_array[$startOfDay->format('%Y%m%d')]); $k++) {
                                         if (empty($view_array[$startOfDay->format('%Y%m%d')][$startOfDay->format('%H%M')][$k])) {
                                             break;
                                         }
                                     }
                                     $entries = 0;
                                     $eventArray[$startOfDay->format('%Y%m%d') . '_' . $eventMappingKey] =& $event;
                                 }
                                 $j->addSeconds($gridLength * 60);
                                 $entries++;
                             }
                             $rowspan_array[$old_day->format('%Y%m%d')][$eventMappingKey] = $entries - 1;
                         }
                     }
                 }
             }
         }
     }
     if ($this->conf['view.']['week.']['dynamic'] == 1) {
         $dayStart = '2359';
         $dayEnd = '0000';
         $firstStart = true;
         $firstEnd = true;
         $dynamicEnd = intval($end_week_time->format('%Y%m%d'));
         for ($dynamicStart = intval($start_week_time->format('%Y%m%d')); $dynamicStart < $dynamicEnd; $dynamicStart++) {
             if (is_array($view_array[$dynamicStart])) {
                 $timeKeys = array_keys($view_array[$dynamicStart]);
                 $formatedLast = array_pop($timeKeys);
                 while (intval($formatedLast) < 0 && !empty($timeKeys)) {
                     $formatedLast = array_pop($timeKeys);
                 }
                 $formatedFirst = null;
                 if (count($timeKeys) > 0) {
                     do {
                         $formatedFirst = array_shift($timeKeys);
                     } while (intval($formatedFirst) < 0 && !empty($timeKeys));
                 } else {
                     $formatedFirst = $formatedLast;
                 }
                 if (intval($formatedFirst) > 0 && (intval($formatedFirst) < intval($dayStart) || $firstStart)) {
                     $dayStart = sprintf("%04d", $formatedFirst);
                     $firstStart = false;
                 }
                 if (intval($formatedLast) > intval($dayEnd) || $firstEnd) {
                     $dayEnd = sprintf("%04d", $formatedLast + $gridLength);
                     $firstEnd = false;
                 }
             }
         }
         $dayStart = substr($dayStart, 0, 2) . '00';
     }
     $startdate = new \TYPO3\CMS\Cal\Model\CalDate($start_week_time->format('%Y%m%d') . '000000');
     $enddate = new \TYPO3\CMS\Cal\Model\CalDate();
     $enddate->copy($end_week_time);
     for ($i = $startdate; $enddate->after($i); $i->addSeconds(86400)) {
         if (!empty($view_array[$i->format('%Y%m%d')])) {
             $max = array();
             foreach (array_keys($view_array[$i->format('%Y%m%d')]) as $array_time) {
                 $c = count($view_array[$i->format('%Y%m%d')][$array_time]);
                 array_push($max, $c);
             }
             $nbrGridCols[$i->format('%Y%m%d')] = max($max);
         } else {
             $nbrGridCols[$i->format('%Y%m%d')] = 1;
         }
     }
     $t_array = array();
     $pos_array = array();
     preg_match('/([0-9]{2})([0-9]{2})/', $dayStart, $dTimeStart);
     preg_match('/([0-9]{2})([0-9]{2})/', $dayEnd, $dTimeEnd);
     $nd = new \TYPO3\CMS\Cal\Model\CalDate();
     foreach (array_keys($view_array) as $week_key) {
         $week_day =& $view_array[$week_key];
         preg_match('/([0-9]{4})([0-9]{2})([0-9]{2})/', $week_key, $dDate);
         $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');
         $d_start->subtractSeconds($d_start->getMinute() % $gridLength * 60);
         $d_end->addSeconds(($gridLength - $d_end->getMinute() % $gridLength) * 60);
         for ($i->copy($d_start); !$i->after($d_end); $i->addSeconds($gridLength * 60)) {
             $timeKey = $i->format('%H%M');
             if (is_array($view_array[$week_key][$timeKey]) && count($view_array[$week_key][$timeKey]) > 0) {
                 foreach (array_keys($view_array[$week_key][$timeKey]) as $eventKey) {
                     $event =& $eventArray[$view_array[$week_key][$timeKey][$eventKey]];
                     $eventStart = $event->getStart();
                     $startFormatted = $eventStart->format('%Y%m%d%H%M');
                     $eventType = $event->getType();
                     $eventUid = $event->getUid();
                     if (is_array($pos_array[$week_key]) && array_key_exists($eventType . $eventUid . '_' . $startFormatted, $pos_array[$week_key])) {
                         $nd->copy($event->getEnd());
                         $nd->addSeconds(($gridLength - $nd->getMinute() % $gridLength) * 60);
                         if ($nd->before($i)) {
                             $t_array[$week_key][$timeKey][$pos_array[$week_key][$eventType . $eventUid . '_' . $startFormatted]] = array('ended' => $week_key . '_' . $eventType . '_' . $eventUid . '_' . $startFormatted);
                         } else {
                             $t_array[$week_key][$timeKey][$pos_array[$week_key][$eventType . $eventUid . '_' . $startFormatted]] = array('started' => $week_key . '_' . $eventType . '_' . $eventUid . '_' . $startFormatted);
                         }
                     } else {
                         for ($j = 0; $j < $nbrGridCols[$week_key] ? $nbrGridCols[$week_key] : 1; $j++) {
                             if (!isset($t_array[$week_key][$timeKey][$j]) || count($t_array[$week_key][$timeKey][$j]) == 0) {
                                 $pos_array[$week_key][$event->getType() . $event->getUid() . '_' . $startFormatted] = $j;
                                 $t_array[$week_key][$timeKey][$j] = array('begin' => $week_key . '_' . $eventType . '_' . $eventUid . '_' . $startFormatted);
                                 break;
                             }
                         }
                     }
                 }
             } else {
                 $t_array[$week_key][$timeKey] = '';
             }
         }
     }
     $thisdate = new \TYPO3\CMS\Cal\Model\CalDate();
     $thisdate->copy($week_start_day);
     for ($i = 0; $i < 7; $i++) {
         $weekarray[$i] = $thisdate->format('%Y%m%d');
         $thisdate->addSeconds(86400);
     }
     $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 allday events
     $alldays = $this->cObj->getSubpart($weekTemplate, '###ALLDAYSOFWEEK##');
     foreach ($weekarray as $get_date) {
         $replace = '';
         if (is_array($view_array[$get_date]['-1'])) {
             foreach ($view_array[$get_date]['-1'] as $id => $allday) {
                 $replace .= $eventArray[$allday]->renderEventForAllDay();
             }
         }
         $weekreplace .= \TYPO3\CMS\Cal\Utility\Functions::substituteMarkerArrayNotCached($alldays, array('###COLSPAN###' => 'colspan="' . ($nbrGridCols[$get_date] ? $nbrGridCols[$get_date] : 1) . '"', '###ALLDAY###' => $replace));
     }
     $rems = array();
     $rems['###ALLDAYSOFWEEK###'] = $weekreplace;
     // Replaces the daysofweek
     $loop_dof = $this->cObj->getSubpart($weekTemplate, '###DAYSOFWEEK###');
     $start_day = new \TYPO3\CMS\Cal\Model\CalDate();
     $start_day->copy($week_start_day);
     $isAllowedToCreateEvent = $this->rightsObj->isAllowedToCreateEvent();
     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.']['week.']['dateFormatWeekList']);
         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);
             if (!empty($this->conf['view.'][$dayLinkViewTarget . '.'][$dayLinkViewTarget . 'ViewPid'])) {
                 $this->controller->getParametersForTyposcriptLink($this->local_cObj->data, array('getdate' => $daylink, 'view' => $this->conf['view.']['dayLinkTarget'], $this->pointerName => NULL), $this->conf['cache'], $this->conf['clear_anyway'], $this->conf['view.'][$dayLinkViewTarget . '.'][$dayLinkViewTarget . 'ViewPid']);
             } else {
                 $this->controller->getParametersForTyposcriptLink($this->local_cObj->data, array('getdate' => $daylink, 'view' => $this->conf['view.']['dayLinkTarget'], $this->pointerName => NULL), $this->conf['cache'], $this->conf['clear_anyway']);
             }
             $this->local_cObj->data['view'] = $dayLinkViewTarget;
             $link = $this->local_cObj->cObjGetSingle($this->conf['view.'][$dayLinkViewTarget . '.'][$dayLinkViewTarget . 'ViewLink'], $this->conf['view.'][$dayLinkViewTarget . '.'][$dayLinkViewTarget . 'ViewLink.']);
             $link = $this->cObj->stdWrap($link, $this->conf['view.']['week.']['weekday_stdWrap.']);
         } else {
             $link = $this->cObj->stdWrap($weekday, $this->conf['view.']['week.']['weekday_stdWrap.']);
         }
         $start_day->addSeconds(86400);
         $colspan = 'colspan="' . ($nbrGridCols[$daylink] ? $nbrGridCols[$daylink] : 1) . '"';
         $search = array('###LINK###', '###DAYLINK###', '###ROW1###', '###ROW2###', '###ROW3###', '###COLSPAN###', '###TIME###');
         $replace = array($link, $daylink, $row1, $row2, $row3, $colspan, $start_day->format('%Y %m %d %H %M %s'));
         $loop_tmp = str_replace($search, $replace, $loop_dof);
         $weekday_loop .= $loop_tmp;
     }
     $rems['###DAYSOFWEEK###'] = $weekday_loop;
     // Build the body
     $border = 0;
     $thisdate = $start_week_time;
     $dTimeStart[2] -= $dTimeStart[2] % $gridLength;
     $dTimeEnd[2] -= $dTimeEnd[2] % $gridLength;
     preg_match('/([0-9]{4})([0-9]{2})([0-9]{2})/', $week_key, $dDate);
     $loops = ($dTimeEnd[1] * 60 + $dTimeEnd[2] - ($dTimeStart[1] * 60 + $dTimeStart[2])) / $gridLength;
     $weekdisplay = '';
     $createOffset = intval($this->conf['rights.']['create.']['event.']['timeOffset']) * 60;
     $cal_time_obj = new \TYPO3\CMS\Cal\Model\CalDate();
     $cal_time_obj->copy($week_start_day);
     $cal_time_obj->setHour(intval($dTimeStart[1]));
     $cal_time_obj->setMinute(intval($dTimeStart[2]));
     $start = 0;
     for ($i = $start; $i < $loops; $i++) {
         $time = $cal_time_obj->format('%H%M');
         for ($j = 0; $j < 7; $j++) {
             $day = $cal_time_obj->format('%Y%m%d');
             if ($j == 0) {
                 $key = $cal_time_obj->format('%I:%M');
                 if (preg_match('/([0-9]{1,2}):00/', $key)) {
                     $weekdisplay .= sprintf($this->conf['view.']['week.']['weekDisplayFullHour'], 60 / $gridLength, $cal_time_obj->format($this->conf['view.']['week.']['timeFormatWeek']), $gridLength);
                 } else {
                     $weekdisplay .= sprintf($this->conf['view.']['week.']['weekDisplayInbetween'], $gridLength);
                 }
             }
             $something = $t_array[$day][$time];
             $class = $this->conf['view.']['week.']['classWeekborder'];
             if ($day == $todayFormatted) {
                 $class .= ' ' . $this->conf['view.']['week.']['classTodayWeekborder'];
             }
             if (is_array($something) && $something != "" && count($something) > 0) {
                 for ($k = 0; $k < count($something); $k++) {
                     if (!empty($something[$k])) {
                         $keys = array_keys($something[$k]);
                         switch ($keys[0]) {
                             case 'begin':
                                 $event =& $eventArray[$something[$k][$keys[0]]];
                                 $rest = $event->getEnd()->getMinute() % ($gridLength * 60);
                                 $plus = 0;
                                 if ($rest > 0) {
                                     $plus = 1;
                                 }
                                 $weekdisplay .= sprintf($this->conf['view.']['week.']['weekEventPre'], $rowspan_array[$day][$event->getType() . '_' . $event->getUid() . '_' . $event->getStart()->format('%Y%m%d%H%M')]);
                                 $weekdisplay .= $event->renderEventForWeek();
                                 $weekdisplay .= $this->conf['view.']['week.']['weekEventPost'];
                                 // End event drawing
                                 break;
                         }
                     }
                 }
                 if (count($something) < ($nbrGridCols[$day] ? $nbrGridCols[$day] : 1)) {
                     $remember = 0;
                     for ($l = 0; $l < ($nbrGridCols[$day] ? $nbrGridCols[$day] : 1); $l++) {
                         if (!$something[$l]) {
                             $remember++;
                         } else {
                             if ($remember > 0) {
                                 $weekdisplay .= $this->getCreateEventLink('week', $this->conf['view.']['week.']['normalCell'], $cal_time_obj, $createOffset, $isAllowedToCreateEvent, $remember, $class, $time);
                                 $remember = 0;
                             }
                         }
                     }
                     if ($remember > 0) {
                         $weekdisplay .= $this->getCreateEventLink('week', $this->conf['view.']['week.']['normalCell'], $cal_time_obj, $createOffset, $isAllowedToCreateEvent, $remember, $class, $time);
                         $remember = 0;
                     }
                 }
             } else {
                 $weekdisplay .= $this->getCreateEventLink('week', $this->conf['view.']['week.']['normalCell'], $cal_time_obj, $createOffset, $isAllowedToCreateEvent, $nbrGridCols[$day] ? $nbrGridCols[$day] : 1, $class, $time);
             }
             if ($j == 6) {
                 $weekdisplay .= $this->conf['view.']['week.']['weekFinishRow'];
             }
             $cal_time_obj->addSeconds(86400);
         }
         $cal_time_obj->setYear($week_start_day->getYear());
         $cal_time_obj->setMonth($week_start_day->getMonth());
         $cal_time_obj->setDay($week_start_day->getDay());
         $cal_time_obj->addSeconds($gridLength * 60);
     }
     $weekTemplate = \TYPO3\CMS\Cal\Utility\Functions::substituteMarkerArrayNotCached($weekTemplate, $sims, array(), array());
     $rems['###LOOPEVENTS###'] = $weekdisplay;
     $page = \TYPO3\CMS\Cal\Utility\Functions::substituteMarkerArrayNotCached($page, array(), array('###WEEK_TEMPLATE###' => $weekTemplate), array());
     return $this->finish($page, $rems);
 }
コード例 #4
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);
 }
コード例 #5
0
ファイル: EventRecModel.php プロジェクト: ulrikkold/cal
 function isUserAllowedToDelete($feUserUid = '', $feGroupsArray = array())
 {
     $rightsObj =& \TYPO3\CMS\Cal\Utility\Registry::Registry('basic', 'rightscontroller');
     if (!$rightsObj->isViewEnabled('delete_event')) {
         return false;
     }
     if ($rightsObj->isCalAdmin()) {
         return true;
     }
     $deleteOffset = $this->parentEvent->conf['rights.']['delete.']['event.']['timeOffset'] * 60;
     if ($feUserUid == '') {
         $feUserUid = $rightsObj->getUserId();
     }
     if (empty($feGroupsArray)) {
         $feGroupsArray = $rightsObj->getUserGroups();
     }
     $isEventOwner = $this->parentEvent->isEventOwner($feUserUid, $feGroupsArray);
     $isSharedUser = $this->parentEvent->isSharedUser($feUserUid, $feGroupsArray);
     if ($rightsObj->isAllowedToDeleteStartedEvents()) {
         $eventHasntStartedYet = true;
     } else {
         $temp = new \TYPO3\CMS\Cal\Model\CalDate();
         $temp->setTZbyId('UTC');
         $temp->addSeconds($deleteOffset);
         $eventStart = $this->getStart();
         $eventHasntStartedYet = $eventStart->after($temp);
     }
     $isAllowedToDeleteEvents = $rightsObj->isAllowedToDeleteEvents();
     $isAllowedToDeleteOwnEventsOnly = $rightsObj->isAllowedToDeleteOnlyOwnEvents();
     if ($isAllowedToDeleteOwnEventsOnly) {
         return ($isEventOwner || $isSharedUser) && $eventHasntStartedYet;
     }
     return $isAllowedToDeleteEvents && ($isEventOwner || $isSharedUser) && $eventHasntStartedYet;
 }
コード例 #6
0
ファイル: DateParser.php プロジェクト: ulrikkold/cal
 function evaluateRange(&$date, $range, $rangeValue)
 {
     if (!is_numeric($range)) {
         if ($range == 'last') {
             $range = -1;
         } else {
             if ($range == 'next') {
                 $range = 1;
             }
         }
     }
     if (is_numeric($rangeValue)) {
         $date->addSeconds($rangeValue * $range);
     } else {
         if (is_array($rangeValue)) {
             foreach ($rangeValue as $key => $value) {
                 if ($key == 'weekday' && $range > 0) {
                     for ($i = 0; $i < $range; $i++) {
                         $formatedDate = Calc::nextDayOfWeek($value, $date->getDay(), $date->getMonth(), $date->getYear());
                         $date = new \TYPO3\CMS\Cal\Model\CalDate($formatedDate);
                         $date->setTZbyId('UTC');
                     }
                 } else {
                     if ($key == 'weekday' && $range < 0) {
                         for ($i = 0; $i > $range; $i--) {
                             $formatedDate = Calc::prevDayOfWeek($value, $date->getDay(), $date->getMonth(), $date->getYear());
                             $date = new \TYPO3\CMS\Cal\Model\CalDate($formatedDate);
                             $date->setTZbyId('UTC');
                         }
                     } else {
                         if ($value == 'week' && $range > 0) {
                             $date->addSeconds($range * 604800);
                         } else {
                             if ($value == 'week' && $range < 0) {
                                 $date->subtractSeconds($range * 604800);
                             }
                         }
                     }
                 }
             }
         } else {
             if ($range > 0) {
                 if ($rangeValue == 'month') {
                     for ($i = 0; $i < $range; $i++) {
                         $days = Calc::daysInMonth($date->getMonth(), $date->getYear());
                         $endOfNextMonth = new \TYPO3\CMS\Cal\Model\CalDate(Calc::endOfNextMonth($date->getDay(), $date->getMonth(), $date->getYear()));
                         $date->addSeconds(60 * 60 * 24 * $days);
                         if ($date->after($endOfNextMonth)) {
                             $date->setDay($endOfNextMonth->getDay());
                             $date->setMonth($endOfNextMonth->getMonth());
                             $date->setYear($endOfNextMonth->getYear());
                         }
                     }
                 } else {
                     if ($rangeValue == 'year') {
                         $date->setYear($date->getYear() + $range);
                     } else {
                         if ($rangeValue == 'hour') {
                             $date->addSeconds($range * 3600);
                         } else {
                             if ($rangeValue == 'minute') {
                                 $date->addSeconds($range * 60);
                             } else {
                                 $date->addSeconds($range * 86400);
                             }
                         }
                     }
                 }
             } else {
                 if ($range < 0) {
                     if ($rangeValue == 'month') {
                         for ($i = 0; $i > $range; $i--) {
                             $endOfPrevMonth = new \TYPO3\CMS\Cal\Model\CalDate(Calc::endOfPrevMonth($date->getDay(), $date->getMonth(), $date->getYear()));
                             $days = Calc::daysInMonth($endOfPrevMonth->getMonth(), $endOfPrevMonth->getYear());
                             $date->subtractSeconds(60 * 60 * 24 * $days);
                         }
                     } else {
                         if ($rangeValue == 'year') {
                             $date->setYear($date->getYear() - abs($range));
                         } else {
                             if ($rangeValue == 'hour') {
                                 $date->subtractSeconds(abs($range) * 3600);
                             } else {
                                 if ($rangeValue == 'minute') {
                                     $date->subtractSeconds(abs($range) * 60);
                                 } else {
                                     $date->subtractSeconds(abs($range) * 86400);
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
     $date->subtractSeconds(1);
 }
コード例 #7
0
ファイル: BaseView.php プロジェクト: ulrikkold/cal
 /**
  * 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;
 }
コード例 #8
0
ファイル: ListView.php プロジェクト: ulrikkold/cal
 function processObject(&$event, &$cal_time, &$firstEventDate)
 {
     $eventStart = $event->getStart();
     $eventEnd = $event->getEnd();
     if ($eventEnd->before($this->starttime) || $eventStart->after($this->endtime)) {
         return;
     }
     /* If we haven't saved an event date already, save this one */
     if (!$firstEventDate) {
         $firstEventDate = new \TYPO3\CMS\Cal\Model\CalDate();
         if ($this->reverse) {
             $firstEventDate->copy($eventEnd);
         } else {
             $firstEventDate->copy($eventStart);
         }
     }
     /* Always save the current event date as the last one and let it fall through */
     if ($this->reverse) {
         $lastEventDate = $eventStart;
     } else {
         $lastEventDate = $eventEnd;
     }
     $year = $eventStart->getYear();
     $month = $eventStart->getMonth();
     $day = $eventStart->getDay();
     $week = $eventStart->getWeekOfYear();
     $this->eventCounter['byDate'][$year][$month][$day]['total']++;
     $this->eventCounter['byWeek'][$week]['total']++;
     $this->eventCounter['byYear'][$year]['total']++;
     $this->eventCounter['byMonth'][$month]['total']++;
     $this->eventCounter['byDay'][$day]['total']++;
     $this->eventCounter['byYearMonth'][$year][$month]['total']++;
     $this->eventCounter['byYearDay'][$year][$day]['total']++;
     // Pagebrowser
     if ($this->conf['view.']['list.']['pageBrowser.']['usePageBrowser']) {
         if ($this->count < $this->recordsPerPage * $this->offset) {
             $this->eventCounter['byDate'][$year][$month][$day]['previousPages']++;
             $this->eventCounter['byWeek'][$week]['previousPages']++;
             $this->eventCounter['byYear'][$year]['previousPages']++;
             $this->eventCounter['byMonth'][$month]['previousPages']++;
             $this->eventCounter['byYearMonth'][$year][$month]['previousPages']++;
             $this->eventCounter['byDay'][$day]['previousPages']++;
             $this->eventCounter['byYearDay'][$year][$day]['previousPages']++;
         } else {
             if ($this->count > $this->recordsPerPage * $this->offset + $this->recordsPerPage - 1) {
                 $this->eventCounter['byDate'][$year][$month][$day]['nextPages']++;
                 $this->eventCounter['byWeek'][$week]['nextPages']++;
                 $this->eventCounter['byYear'][$year]['nextPages']++;
                 $this->eventCounter['byMonth'][$month]['nextPages']++;
                 $this->eventCounter['byYearMonth'][$year][$month]['nextPages']++;
                 $this->eventCounter['byDay'][$day]['nextPages']++;
                 $this->eventCounter['byYearDay'][$year][$day]['nextPages']++;
             } else {
                 $this->eventCounter['byDate'][$year][$month][$day]['currentPage']++;
                 $this->eventCounter['byWeek'][$week]['currentPage']++;
                 $this->eventCounter['byYear'][$year]['currentPage']++;
                 $this->eventCounter['byMonth'][$month]['currentPage']++;
                 $this->eventCounter['byYearMonth'][$year][$month]['currentPage']++;
                 $this->eventCounter['byDay'][$day]['currentPage']++;
                 $this->eventCounter['byYearDay'][$year][$day]['currentPage']++;
             }
         }
         if ($this->count < $this->recordsPerPage * $this->offset || $this->count > $this->recordsPerPage * $this->offset + $this->recordsPerPage - 1) {
             $this->count++;
             if ($this->count == intval($this->conf['view.']['list.']['maxEvents'])) {
                 $finished = true;
             }
             return $finished;
         }
     }
     $GLOBALS['TSFE']->register['cal_list_lastevent'] = $event->getStart()->getTime();
     // reference the event in the rendering array
     $hookObjectsArr = \TYPO3\CMS\Cal\Utility\Functions::getHookObjectsArray('tx_cal_listview', 'sorting', 'view');
     if (count($hookObjectsArr)) {
         foreach ($hookObjectsArr as $hookObj) {
             if (method_exists($hookObj, 'sorting')) {
                 $hookObj->sorting($this, $cal_time, $event);
             }
         }
     } else {
         $this->objectsInList[$cal_time][] =& $event;
     }
     if ($this->conf['view.']['list.']['showLongEventsInEachWrapper']) {
         if ($this->conf['view.']['list.']['enableDayWrapper'] && $eventStart->format('%Y%m%d') != $eventEnd->format('%Y%m%d')) {
             $tempEventStart = new \TYPO3\CMS\Cal\Model\CalDate();
             $tempEventStart->copy($eventStart);
             while ($tempEventStart->format('%Y%m%d') != $eventEnd->format('%Y%m%d')) {
                 $tempEventStart->addSeconds(60 * 60 * 24);
                 $this->objectsInList[$tempEventStart->format('%Y%m%d')][] =& $event;
             }
         }
         if ($this->conf['view.']['list.']['enableWeekWrapper'] && $eventStart->format('%Y%U') != $eventEnd->format('%Y%U')) {
             $tempEventStart = new \TYPO3\CMS\Cal\Model\CalDate();
             $tempEventStart->copy($eventStart);
             while ($tempEventStart->format('%Y%U') != $eventEnd->format('%Y%U')) {
                 $tempEventStart->addSeconds(60 * 60 * 24 * 7);
                 $this->objectsInList[$tempEventStart->format('%Y%m%d')][] =& $event;
             }
         }
         if ($this->conf['view.']['list.']['enableMonthWrapper'] && $eventStart->format('%Y%m') != $eventEnd->format('%Y%m')) {
             $tempEventStart = new \TYPO3\CMS\Cal\Model\CalDate();
             $tempEventStart->copy($eventStart);
             while ($tempEventStart->format('%Y%m') != $eventEnd->format('%Y%m')) {
                 $tempEventStart->setMonth($tempEventStart->getMonth() + 1);
                 $this->objectsInList[$tempEventStart->format('%Y%m01')][] =& $event;
             }
         }
         if ($this->conf['view.']['list.']['enableYearWrapper'] && $eventStart->format('%Y') != $eventEnd->format('%Y')) {
             $tempEventStart = new \TYPO3\CMS\Cal\Model\CalDate();
             $tempEventStart->copy($eventStart);
             while ($tempEventStart->format('%Y') != $eventEnd->format('%Y')) {
                 $tempEventStart->setYear($tempEventStart->getYear() + 1);
                 $this->objectsInList[$tempEventStart->format('%Y0101')][] =& $event;
             }
         }
     }
     $this->count++;
     if ($this->count == intval($this->conf['view.']['list.']['maxEvents'])) {
         $finished = true;
     }
     return $finished;
 }
コード例 #9
0
ファイル: NewMonthView.php プロジェクト: ulrikkold/cal
 function getMonthTitleMarker(&$template, &$sims, &$rems, &$wrapped, $view)
 {
     $current_month = new \TYPO3\CMS\Cal\Model\CalDate();
     $current_month->setMonth($this->month);
     $current_month->setYear($this->year);
     $conf =& \TYPO3\CMS\Cal\Utility\Registry::Registry('basic', 'conf');
     $sims['###MONTH_TITLE###'] = $current_month->format($conf['view.'][$view . '.']['dateFormatMonth']);
 }
コード例 #10
0
ファイル: Controller.php プロジェクト: ulrikkold/cal
 /**
  * Returns a array with fields/parameters that can be used for link rendering in typoscript.
  * It's based on the link functions from \TYPO3\CMS\Frontend\Plugin\AbstractPlugin.
  *
  * @param
  *        	array			Referenced array in which the parameters get merged into
  * @param
  *        	array			Array with parameter=>value pairs of piVars that should override present piVars
  * @param
  *        	boolean		Flag that indicates if the linktarget is allowed to be cached (takes care of cacheHash and no_cache parameter)
  * @param
  *        	boolean		Flag that's clearing all present piVars, thus only piVars defined in $overrulePIvars are kept
  * @param
  *        	integer		Alternative ID of a page that should be used as link target. If empty or 0, current page is used
  * @return nothing
  *
  */
 public function getParametersForTyposcriptLink(&$parameterArray, $overrulePIvars = array(), $cache = false, $clearAnyway = false, $altPageId = 0)
 {
     // copied from function 'pi_linkTP_keepPIvars'
     if (is_array($this->piVars) && is_array($overrulePIvars) && !$clearAnyway) {
         $piVars = $this->piVars;
         unset($piVars['DATA']);
         if (\TYPO3\CMS\Core\Utility\VersionNumberUtility::convertVersionNumberToInteger(TYPO3_version) < '6002000') {
             $piVars = GeneralUtility::array_merge_recursive_overrule($piVars, $overrulePIvars);
         } else {
             \TYPO3\CMS\Core\Utility\ArrayUtility::mergeRecursiveWithOverrule($piVars, $overrulePIvars);
         }
         $overrulePIvars = $piVars;
         if ($this->pi_autoCacheEn) {
             $cache = $this->pi_autoCache($overrulePIvars);
         }
     }
     $piVars = array($this->prefixId => $overrulePIvars);
     /* TEST */
     if ($piVars[$this->prefixId]['getdate']) {
         $date = new \TYPO3\CMS\Cal\Model\CalDate($piVars[$this->prefixId]['getdate']);
         $sessionVars = array();
         switch ($piVars[$this->prefixId]['view']) {
             case 'week':
                 $piVars[$this->prefixId]['year'] = $date->getYear();
                 $piVars[$this->prefixId]['week'] = $date->getWeekOfYear();
                 $piVars[$this->prefixId]['weekday'] = $date->getDayOfWeek();
                 $sessionVars['month'] = substr($piVars[$this->prefixId]['getdate'], 4, 2);
                 $sessionVars['day'] = substr($piVars[$this->prefixId]['getdate'], 6, 2);
                 if ($date->getMonth() == 12 && $piVars[$this->prefixId]['week'] == 1) {
                     $piVars[$this->prefixId]['year']++;
                 }
                 unset($piVars[$this->prefixId]['view']);
                 unset($piVars[$this->prefixId]['getdate']);
                 break;
             case 'event':
             case 'todo':
                 $piVars[$this->prefixId]['year'] = substr($piVars[$this->prefixId]['getdate'], 0, 4);
                 $piVars[$this->prefixId]['month'] = substr($piVars[$this->prefixId]['getdate'], 4, 2);
                 $piVars[$this->prefixId]['day'] = substr($piVars[$this->prefixId]['getdate'], 6, 2);
                 unset($piVars[$this->prefixId]['getdate']);
                 break;
             case 'day':
                 $piVars[$this->prefixId]['year'] = substr($piVars[$this->prefixId]['getdate'], 0, 4);
                 $piVars[$this->prefixId]['month'] = substr($piVars[$this->prefixId]['getdate'], 4, 2);
                 $piVars[$this->prefixId]['day'] = substr($piVars[$this->prefixId]['getdate'], 6, 2);
             case 'month':
                 $piVars[$this->prefixId]['year'] = substr($piVars[$this->prefixId]['getdate'], 0, 4);
                 $piVars[$this->prefixId]['month'] = substr($piVars[$this->prefixId]['getdate'], 4, 2);
                 $sessionVars['day'] = substr($piVars[$this->prefixId]['getdate'], 6, 2);
             case 'year':
                 $piVars[$this->prefixId]['year'] = substr($piVars[$this->prefixId]['getdate'], 0, 4);
                 $sessionVars['month'] = substr($piVars[$this->prefixId]['getdate'], 4, 2);
                 $sessionVars['day'] = substr($piVars[$this->prefixId]['getdate'], 6, 2);
                 unset($piVars[$this->prefixId]['view']);
                 unset($piVars[$this->prefixId]['getdate']);
         }
         foreach ($sessionVars as $key => $value) {
             //$_SESSION[$this->prefixId][$key] = $value;
         }
     }
     /* TEST */
     // use internal method for cleaning up piVars
     $this->cleanupUrlParameter($piVars);
     // copied and modified logic of function 'pi_linkTP'
     # once useCacheHash property in typolinks has stdWrap, we can use this flag - until then it's unfortunately useless :(
     #$parameterArray['link_useCacheHash'] = $this->pi_USER_INT_obj ? 0 : $cache;
     $parameterArray['link_no_cache'] = $this->pi_USER_INT_obj ? 0 : !$cache;
     $parameterArray['link_parameter'] = $altPageId ? $altPageId : ($this->pi_tmpPageId ? $this->pi_tmpPageId : $GLOBALS['TSFE']->id);
     $parameterArray['link_additionalParams'] = $this->conf['parent.']['addParams'] . GeneralUtility::implodeArrayForUrl('', $piVars, '', true) . $this->pi_moreParams;
     $parameterArray['link_ATagParams'] = 'class="url"';
     # add time/date related parameters to all link objects, so that they can use them e.g. to display the monthname etc.
     $parameterArray['getdate'] = $this->conf['getdate'];
     if ($overrulePIvars['getdate'] && is_object($date)) {
         $parameterArray['link_timestamp'] = $date->getTime();
         $parameterArray['link_getdate'] = $overrulePIvars['getdate'];
     }
 }
コード例 #11
0
ファイル: Functions.php プロジェクト: ulrikkold/cal
 public static function getDayByWeek($year, $week, $weekday)
 {
     $date = new \TYPO3\CMS\Cal\Model\CalDate($year . '0101');
     $date->setTZbyID('UTC');
     $offset = $weekday - $date->format('%w');
     // correct weekday
     $date->addSeconds($offset * 86400);
     $oldYearWeek = $date->getWeekOfYear() > 1 ? '0' : '1';
     // correct week
     $date->addSeconds(($week - $oldYearWeek) * 7 * 86400);
     return $date->format('%Y%m%d');
 }
コード例 #12
0
ファイル: Calendar.php プロジェクト: ulrikkold/cal
 /**
  * 
  * @param string $dateObject
  * @return \TYPO3\CMS\Cal\Model\CalDate
  */
 public static function calculateEndMonthTime($dateObject = '')
 {
     $timeObj = Calendar::calculateStartDayTime($dateObject);
     $timeObj = new \TYPO3\CMS\Cal\Model\CalDate(Calc::endOfNextMonth($timeObj->getDay(), $timeObj->getMonth(), $timeObj->getYear()));
     $timeObj->setDay(1);
     $timeObj->subtractSeconds(1);
     $timeObj->setTZbyId('UTC');
     return $timeObj;
 }
コード例 #13
0
ファイル: Labels.php プロジェクト: ulrikkold/cal
 function getDeviationRecordLabel(&$params, &$pObj)
 {
     if (!$params['table'] == 'tx_cal_event_deviation') {
         return '';
     }
     // Get complete record
     $rec = BackendUtility::getRecord($params['table'], $params['row']['uid']);
     $label = $GLOBALS['LANG']->sl('LLL:EXT:cal/Resources/Private/Language/locallang_db.xml:tx_cal_event.deviation') . ': ';
     if ($rec['orig_start_date']) {
         $origStartDate = new \TYPO3\CMS\Cal\Model\CalDate($rec['orig_start_date']);
         $origStartDate->setTZbyId('UTC');
         $label .= $origStartDate->format('%Y-%m-%d');
     }
     if ($rec['orig_start_time']) {
         $label .= ' (' . gmdate($GLOBALS['TYPO3_CONF_VARS']['SYS']['hhmm'], $rec['orig_start_time']) . ')';
     }
     // Write to the label
     $params['title'] = $label;
 }
コード例 #14
0
ファイル: NewWeekView.php プロジェクト: ulrikkold/cal
 public function addEvent(&$event)
 {
     $eventStart = new \TYPO3\CMS\Cal\Model\CalDate();
     $eventStart->copy($event->getStart());
     $eventStartFormatted = $eventStart->format('%Y%m%d');
     $eventStartYear = $eventStart->year;
     $eventEndFormatted = $event->getEnd()->format('%Y%m%d');
     $eventEndYear = $event->getEnd()->year;
     $eventStartWeek = $event->getStart()->getWeekOfYear();
     $eventEndWeek = $event->getEnd()->getWeekOfYear();
     if (($eventStartWeek == 52 || $eventStartWeek == 53) && $event->getStart()->month == 1) {
         $eventStartYear--;
     }
     if (($eventEndWeek == 52 || $eventEndWeek == 53) && $event->getEnd()->month == 1) {
         $eventEndYear--;
     }
     if ($eventStartWeek == 1 && $event->getStart()->month == 12) {
         $eventStartYear++;
     }
     if ($eventEndWeek == 1 && $event->getEnd()->month == 12) {
         $eventEndYear++;
     }
     if ($event->isAllday() || $eventStartFormatted != $eventEndFormatted) {
         $eventYearEnd = $event->getEnd()->year;
         if ($event->getEnd()->month == 12 && $event->getEnd()->getWeekOfYear() == 1) {
             $eventYearEnd++;
         }
         if (!($eventStartYear == $this->year && $eventStart->getWeekOfYear() == $this->week) && $eventStart->year . sprintf("%02d", $eventStart->getWeekOfYear()) < $this->year . sprintf("%02d", $this->week) && $eventYearEnd . sprintf("%02d", $event->getEnd()->getWeekOfYear()) >= $this->year . sprintf("%02d", $this->week)) {
             do {
                 $eventStart->addSeconds(86400);
                 $eventStartYear = $eventStart->year;
                 $eventWeek = $eventStart->getWeekOfYear();
                 if ($eventStart->month == 1 && $eventWeek > 50) {
                     $eventStartYear--;
                 }
             } while ($eventStartYear . sprintf("%02d", $eventWeek) < $this->year . sprintf("%02d", $this->week));
             $eventStartFormatted = $eventStart->format('%Y%m%d');
         }
         if ($eventStartYear == $this->year && $eventStart->getWeekOfYear() == $this->week) {
             $this->alldays[$eventStartFormatted][] = $event;
             $this->weekHasEvent = true;
             $first = true;
             do {
                 $this->dayHasEvent[$eventStart->getDayOfWeek()] = true;
                 if (is_object($this->days[$eventStart->format('%Y%m%d')])) {
                     $this->days[$eventStart->format('%Y%m%d')]->hasAlldayEvents = true;
                     if ($first) {
                         $this->days[$eventStart->format('%Y%m%d')]->addEvent($event);
                         $first = false;
                     }
                 }
                 $eventStart->addSeconds(86400);
                 $eventStartYear = $eventStart->year;
                 $eventWeek = $eventStart->getWeekOfYear();
                 if ($eventStart->month == 1 && $eventWeek > 50) {
                     $eventStartYear--;
                 }
             } while ($eventStart->format('%Y%m%d') <= $eventEndFormatted && $eventStartYear . sprintf("%02d", $eventStart->getWeekOfYear()) <= $this->year . sprintf("%02d", $this->week));
         }
     } else {
         do {
             if ($eventStartYear == $this->year && $eventStartWeek == $this->week) {
                 $this->dayHasEvent[$eventStart->getDayOfWeek()] = true;
                 if (is_object($this->days[$eventStart->format('%Y%m%d')])) {
                     $this->days[$eventStart->format('%Y%m%d')]->addEvent($event);
                 }
                 $this->weekHasEvent = true;
             }
             $eventStart->addSeconds(86400);
             $eventStartYear = $eventStart->year;
             if ($eventStart->month == 1 && $eventWeek > 50) {
                 $eventStartYear--;
             }
             $eventStartWeek = $eventStart->getWeekOfYear();
         } while ($eventStart->format('%Y%m%d') <= $eventEndFormatted && $eventStartWeek <= $this->week);
     }
 }
コード例 #15
0
ファイル: ICalendar.php プロジェクト: ulrikkold/cal
 /**
  * Export a DateTime field.
  */
 function _exportDateTime($value)
 {
     $temp = array();
     if (!is_object($value) && !is_array($value)) {
         $tz = date('O', $value);
         $TZOffset = 3600 * substr($tz, 0, 3) + 60 * substr(date('O', $value), 3, 2);
         $value -= $TZOffset;
         $temp['zone'] = 'UTC';
         $temp['year'] = date('Y', $value);
         $temp['month'] = date('n', $value);
         $temp['mday'] = date('j', $value);
         $temp['hour'] = date('G', $value);
         $temp['minute'] = date('i', $value);
         $temp['second'] = date('s', $value);
     } else {
         $dateOb = new \TYPO3\CMS\Cal\Model\CalDate($value);
         return ICalendar::_exportDateTime($dateOb->timestamp());
     }
     return ICalendar::_exportDate($temp) . 'T' . ICalendar::_exportTime($temp);
 }
コード例 #16
0
ファイル: IcsView.php プロジェクト: ulrikkold/cal
    public function drawIcs(&$master_array, $getdate, $sendHeaders = true, $limitAttendeeToThisEmail = '')
    {
        $this->_init($master_array);
        $this->limitAttendeeToThisEmail = $limitAttendeeToThisEmail;
        $absFile = \TYPO3\CMS\Core\Utility\GeneralUtility::getFileAbsFileName($this->conf['view.']['ics.']['icsTemplate']);
        $page = \TYPO3\CMS\Core\Utility\GeneralUtility::getURL($absFile);
        if ($page == '') {
            // return '<h3>calendar: no ics template file found:</h3>'.$this->conf['view.']['ics.']['icsTemplate'];
            // falling back to default:
            $page = 'BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//TYPO3/NONSGML Calendar Base (cal) V###CAL_VERSION###//EN
METHOD:###METHOD###
<!--###EVENT### start-->
<!--###EVENT### end-->
END:VCALENDAR
			';
        }
        $ics_events = '';
        $select = 'tx_cal_event_deviation.*,tx_cal_index.start_datetime,tx_cal_index.end_datetime';
        $table = 'tx_cal_event_deviation right outer join tx_cal_index on tx_cal_event_deviation.uid = tx_cal_index.event_deviation_uid';
        $oldView = $this->conf['view'];
        $this->conf['view'] = 'single_ics';
        foreach ($this->master_array as $eventDate => $eventTimeArray) {
            if (is_subclass_of($eventTimeArray, 'TYPO3\\CMS\\Cal\\Model\\Model')) {
                $ics_events .= $eventTimeArray->renderEventFor('ics');
            } else {
                foreach ($eventTimeArray as $key => $eventArray) {
                    foreach ($eventArray as $eventUid => $event) {
                        if (is_object($event)) {
                            $ics_events .= $event->renderEventFor('ics');
                            $where = 'tx_cal_event_deviation.parentid = ' . $event->getUid() . $this->cObj->enableFields('tx_cal_event_deviation');
                            $deviationResult = $GLOBALS['TYPO3_DB']->exec_SELECTquery($select, $table, $where);
                            if ($deviationResult) {
                                while ($deviationRow = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($deviationResult)) {
                                    $start = new \TYPO3\CMS\Cal\Model\CalDate(substr($deviationRow['start_datetime'], 0, 8));
                                    $start->setHour(substr($deviationRow['start_datetime'], 8, 2));
                                    $start->setMinute(substr($deviationRow['start_datetime'], 10, 2));
                                    $end = new \TYPO3\CMS\Cal\Model\CalDate(substr($deviationRow['end_datetime'], 0, 8));
                                    $end->setHour(substr($deviationRow['end_datetime'], 8, 2));
                                    $end->setMinute(substr($deviationRow['end_datetime'], 10, 2));
                                    unset($deviationRow['start_datetime']);
                                    unset($deviationRow['end_datetime']);
                                    $new_event = new \TYPO3\CMS\Cal\Model\EventRecDeviationModel($event, $deviationRow, $start, $end);
                                    $ics_events .= $new_event->renderEventFor('ics');
                                }
                                $GLOBALS['TYPO3_DB']->sql_free_result($deviationResult);
                            }
                        }
                    }
                }
            }
        }
        $this->conf['view'] = $oldView;
        $rems = array();
        $rems['###EVENT###'] = strip_tags($ics_events);
        $title = '';
        if (!empty($this->master_array)) {
            if (is_subclass_of($this->master_array[0], 'TYPO3\\CMS\\Cal\\Model\\Model')) {
                $title = $this->master_array[0]->getTitle();
            } else {
                $title = $this->appendCalendarTitle($title);
                $title = $this->appendCategoryTitle($title);
            }
        } else {
            $title = $this->appendCalendarTitle($title);
            $title = $this->appendCategoryTitle($title);
        }
        if ($title == '') {
            $title = $getdate;
        }
        $title .= '.ics';
        $title = strtr($title, array(' ' => '', ',' => '_'));
        if ($sendHeaders) {
            header('Expires: 0');
            header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
            header('Content-Disposition: attachment; filename=' . $title);
            header('Content-Type: text/ics');
            header('Pragma: ');
            header('Cache-Control:');
        }
        include \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('cal') . 'ext_emconf.php';
        $myem_conf = array_pop($EM_CONF);
        $method = 'PUBLISH';
        if ($this->limitAttendeeToThisEmail) {
            $method = 'REQUEST';
        }
        $return = \TYPO3\CMS\Cal\Utility\Functions::substituteMarkerArrayNotCached($page, array('###CAL_VERSION###' => $myem_conf['version'], '###METHOD###' => $method, '###TIMEZONE###' => $this->cObj->cObjGetSingle($this->conf['view.']['ics.']['timezone'], $this->conf['view.']['ics.']['timezone.'])), $rems, array());
        return \TYPO3\CMS\Cal\Utility\Functions::removeEmptyLines($return);
    }
コード例 #17
0
ファイル: EventModel.php プロジェクト: ulrikkold/cal
 function getToday()
 {
     $today = new \TYPO3\CMS\Cal\Model\CalDate();
     $today->setTZbyId('UTC');
     $today->setHour(0);
     $today->setMinute(0);
     $today->setSecond(0);
     return $today;
 }
コード例 #18
0
ファイル: TodoService.php プロジェクト: ulrikkold/cal
 function getRecurringEventsFromIndex($event)
 {
     $master_array = array();
     $startDate = $event->getStart();
     $master_array[$startDate->format('%Y%m%d')][$event->isAllday() ? '-1' : $startDate->format('%H%M')][$event->getUid()] =& $event;
     $select = '*';
     $table = 'tx_cal_index';
     $where = 'event_uid = ' . $event->getUid() . ' AND start_datetime >= ' . $this->starttime->format('%Y%m%d%H%M%S') . ' AND start_datetime <= ' . $this->endtime->format('%Y%m%d%H%M%S');
     $result = $GLOBALS['TYPO3_DB']->exec_SELECTquery($select, $table, $where);
     if ($result) {
         while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($result)) {
             $nextOccuranceTime = new \TYPO3\CMS\Cal\Model\CalDate($row['start_datetime']);
             $nextOccuranceEndTime = new \TYPO3\CMS\Cal\Model\CalDate($row['end_datetime']);
             $new_event = new \TYPO3\CMS\Cal\Model\TodoRecModel($event, $nextOccuranceTime, $nextOccuranceEndTime);
             if ($new_event->isAllday()) {
                 $master_array[$nextOccuranceTime->format('%Y%m%d')]['-1'][$event->getUid()] = $new_event;
             } else {
                 $master_array[$nextOccuranceTime->format('%Y%m%d')][$nextOccuranceTime->format('%H%M')][$event->getUid()] = $new_event;
             }
         }
         $GLOBALS['TYPO3_DB']->sql_free_result($result);
     }
     return $master_array;
 }
コード例 #19
0
 function formatDate($ymdDate, $format)
 {
     if ($ymdDate) {
         $dateObj = new \TYPO3\CMS\Cal\Model\CalDate(intval($ymdDate) . '000000');
         $dateObj->setTZbyId('UTC');
         return $dateObj->getTime();
     } else {
         $dateString = '';
     }
     return $dateString;
 }
コード例 #20
0
ファイル: FnbEventService.php プロジェクト: ulrikkold/cal
 public function findAllWithin(&$start_date, &$end_date, $pidList, $eventType = '0,1,2,3', $additionalWhere = '')
 {
     // How to get the events
     // 1st get Calendar specified
     // 2nd get categories specified
     // 3rd get all related events
     // make an array out of the list, so we can handle it better
     $includeRecurring = true;
     if ($this->conf['view'] == 'ics' || $this->conf['view'] == 'single_ics') {
         $includeRecurring = false;
     }
     $this->setStartAndEndPoint($start_date, $end_date);
     $dontShowOldEvents = (int) $this->conf['view.'][$this->conf['view'] . '.']['dontShowOldEvents'];
     if ($dontShowOldEvents > 0) {
         $now = new \TYPO3\CMS\Cal\Model\CalDate();
         if ($dontShowOldEvents == 2) {
             $now->setHour(0);
             $now->setMinute(0);
             $now->setSecond(0);
         }
         if ($start_date->getTime() <= $now->getTime()) {
             $start_date->copy($now);
         }
         if ($end_date->getTime() <= $now->getTime()) {
             $end_date->copy($now);
             $end_date->addSeconds(86400);
         }
         $this->starttime->copy($start_date);
         $this->endtime->copy($end_date);
     }
     $formattedStarttime = $this->starttime->format('%Y%m%d');
     $formattedEndtime = $this->endtime->format('%Y%m%d');
     $calendarService =& $this->modelObj->getServiceObjByKey('cal_calendar_model', 'calendar', 'tx_cal_calendar');
     $categoryService =& $this->modelObj->getServiceObjByKey('cal_category_model', 'category', $this->extConf['categoryService']);
     $calendarSearchString = $this->getFreeAndBusyCalendarSearchString($pidList, true, $this->conf['calendar'] ? $this->conf['calendar'] : '');
     $recurringClause = '';
     // only include the recurring clause if we don't use the new recurring model or a view not needing recurring events.
     if ($includeRecurring) {
         // get the uids of recurring events from index
         $select = 'event_uid';
         $table = 'tx_cal_index';
         $where = 'start_datetime >= ' . $this->starttime->format('%Y%m%d%H%M%S') . ' AND start_datetime <= ' . $this->endtime->format('%Y%m%d%H%M%S');
         $group = 'event_uid';
         $result = $GLOBALS['TYPO3_DB']->exec_SELECTquery($select, $table, $where, $group);
         $tmpUids = array();
         if ($result) {
             while ($tmp = $GLOBALS['TYPO3_DB']->sql_fetch_row($result)) {
                 $tmpUids[] = $tmp[0];
             }
             $GLOBALS['TYPO3_DB']->sql_free_result($result);
         }
         if (count($tmpUids)) {
             $recurringClause = ' OR (tx_cal_event.uid IN (' . implode(',', $tmpUids) . ')) ';
         }
     }
     // putting everything together
     // Franz: added simple check/include for rdate events at the end of this where clause.
     // But we need to find a way to only include rdate events within the searched timerange
     // - otherwise we'll flood the results after some time. I think we need a mm-table for that!
     $additionalWhere = $calendarSearchString . ' AND tx_cal_event.pid IN (' . $pidList . ') ' . $this->cObj->enableFields('tx_cal_event') . ' AND ((tx_cal_event.start_date>=' . $formattedStarttime . ' AND tx_cal_event.start_date<=' . $formattedEndtime . ') OR (tx_cal_event.end_date<=' . $formattedEndtime . ' AND tx_cal_event.end_date>=' . $formattedStarttime . ') OR (tx_cal_event.end_date>=' . $formattedEndtime . ' AND tx_cal_event.start_date<=' . $formattedStarttime . ')' . $recurringClause . ')' . $additionalWhere;
     // $additionalWhere = $calendarSearchString.' AND tx_cal_event.pid IN ('.$pidList.') '.$this->cObj->enableFields('tx_cal_event').' AND ((tx_cal_event.start_date>='.$formattedEndtime.' OR tx_cal_event.end_date>='.$formattedStarttime.')' . $recurringClause . ')'.$additionalWhere;
     // creating the arrays the user is allowed to see
     $categories = array();
     $categoryService->getCategoryArray($pidList, $categories);
     // creating events
     return $this->getEventsFromTable($categories[0][0], $includeRecurring, $additionalWhere, $this->getServiceKey(), true, false, $eventType);
 }
コード例 #21
0
ファイル: ICalendarService.php プロジェクト: ulrikkold/cal
 function createException($pid, $cruserId, $eventUid, $exceptionDescription)
 {
     $exceptionDate = new \TYPO3\CMS\Cal\Model\CalDate($exceptionDescription);
     $insertFields = array();
     $insertFields['tstamp'] = time();
     $insertFields['crdate'] = time();
     $insertFields['pid'] = $pid;
     $insertFields['cruser_id'] = $cruserId;
     $insertFields['title'] = 'Exception for event ' . $eventUid;
     $insertFields['start_date'] = $exceptionDate->format('%Y%m%d');
     $result = $GLOBALS['TYPO3_DB']->exec_INSERTquery('tx_cal_exception_event', $insertFields);
     if (FALSE === $result) {
         throw new \RuntimeException('Could not write tx_cal_exception_event record to database: ' . $GLOBALS['TYPO3_DB']->sql_error(), 1431458147);
     }
     $result = $GLOBALS['TYPO3_DB']->exec_INSERTquery('tx_cal_exception_event_mm', array('tablenames' => 'tx_cal_exception_event', 'uid_local' => $eventUid, 'uid_foreign' => $GLOBALS['TYPO3_DB']->sql_insert_id()));
     if (FALSE === $result) {
         throw new \RuntimeException('Could not write tx_cal_exception_event_mm record to database: ' . $GLOBALS['TYPO3_DB']->sql_error(), 1431458148);
     }
 }
コード例 #22
0
ファイル: NewTimeView.php プロジェクト: ulrikkold/cal
 public function getCreateEventLinkMarker(&$template, &$sims, &$rems, &$wrapped, $view)
 {
     $sims['###CREATE_EVENT_LINK###'] = '';
     $rightsObj =& \TYPO3\CMS\Cal\Utility\Registry::Registry('basic', 'rightscontroller');
     $conf =& \TYPO3\CMS\Cal\Utility\Registry::Registry('basic', 'conf');
     $controller =& \TYPO3\CMS\Cal\Utility\Registry::Registry('basic', 'controller');
     if (!$rightsObj->isViewEnabled('create_event')) {
         return;
     }
     $than = new \TYPO3\CMS\Cal\Model\CalDate();
     $than->setTZbyId('UTC');
     $than->addSeconds($createOffset);
     $date = new \TYPO3\CMS\Cal\Model\CalDate();
     $date->setDay($this->day);
     $date->setMonth($this->month);
     $date->setYear($this->year);
     $date->setHour($this->hour);
     $date->setMinute($this->minute);
     if ($rightsObj->isAllowedToCreateEventForTodayAndFuture()) {
         $date->setHour(23);
         $date->setMinute(59);
     }
     if (($date->after($than) || $rightsObj->isAllowedToCreateEventInPast()) && $rightsObj->isAllowedToCreateEvent()) {
         $local_cObj = $this->getLocalCObject();
         $timeParams = '';
         if ($view == 'day' || $view == 'week') {
             $timeParams = '&tx_cal_controller[gettime]=' . $date->format('%H%M');
         } else {
             if ($conf['rights.']['create.']['event.']['fields.']['starttime.']['default'] == 'now') {
                 $now = new \TYPO3\CMS\Cal\Model\CalDate();
                 $than->setTZbyId('UTC');
                 $timeParams = '&tx_cal_controller[gettime]=' . $now->format('%H%M');
             }
         }
         $local_cObj->setCurrentVal($conf['view.'][$view . '.']['event.']['addIcon']);
         // linkConf = Array();
         $local_cObj->data['link_useCacheHash'] = 0;
         $local_cObj->data['link_no_cache'] = 1;
         $local_cObj->data['link_additionalParams'] = $timeParams . '&tx_cal_controller[startdate]=' . $date->format('%Y%m%d') . '&tx_cal_controller[lastview]=' . $controller->extendLastView() . '&tx_cal_controller[view]=create_event';
         $local_cObj->data['link_section'] = 'default';
         $local_cObj->data['link_parameter'] = $conf['view.']['event.']['createEventViewPid'] ? $conf['view.']['event.']['createEventViewPid'] : $GLOBALS['TSFE']->id;
         $sims['###CREATE_EVENT_LINK###'] .= $local_cObj->cObjGetSingle($conf['view.'][$view . '.']['event.']['addLink'], $conf['view.'][$view . '.']['event.']['addLink.']);
     }
 }
コード例 #23
0
ファイル: NewDayView.php プロジェクト: ulrikkold/cal
 private function renderEventsColumn(&$eventArray, &$d_start, &$d_end, &$view_array, &$t_array, &$positionArray)
 {
     $conf =& \TYPO3\CMS\Cal\Utility\Registry::Registry('basic', 'conf');
     $gridLength = $conf['day.']['gridLength'];
     $cal_time_obj = new \TYPO3\CMS\Cal\Model\CalDate($this->Ymd . '000000');
     $cal_time_obj->setTZbyId('UTC');
     $eventCounter = 0;
     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($conf['view.'][$conf['view'] . '.']['timeFormatDay']);
         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]]];
                             $eventContent = $event->renderEventFor($conf['view']);
                             $colSpan = $positionArray[$val[$i][$keys[0]]];
                             // left
                             // 1 = 0
                             // 2 = 50
                             // 3 = 33.333
                             // 4 = 25
                             $left = 0;
                             if ($colSpan > 1) {
                                 $left = 100 / $colSpan * $i;
                             }
                             // width
                             // 1 = 100
                             // 2 = 85,50
                             // 3 = 56.666, 56.666, 33.333
                             // 4 = 42.5, 42.5, 42.5, 25
                             // 5 = 34,34,34,34,20
                             $width = 100;
                             if ($colSpan > 1) {
                                 $width = 135 / $colSpan;
                             }
                             // TODO: move this into a hook
                             $eventContent = str_replace(array('***LEFT***', '***WIDTH***'), array($left, $width), $eventContent);
                             $daydisplay .= $eventContent;
                             // End event drawing
                             break;
                     }
                 }
             }
         }
     }
     return $daydisplay;
 }
コード例 #24
0
 /**
  * Attempts to subscribe an email address to a particular event if the
  * subscription hash matches.
  * 
  * @param
  *        	string		Email address to subscribe.
  * @param
  *        	object		Event that email should be subscribed to.
  * @param
  *        	string		Unique Hash of email and event.
  * @return boolean whether subscribe was successful.
  * @todo Should we always try to subscribe as a frontend user first?
  */
 function subscribe($email, $event, $subscriptionHash)
 {
     $md5 = md5($event->getUid() . $email . $event->getCreationDate());
     $eventUID = $event->getUID();
     $eventPID = $event->getPID();
     $offset = $this->conf['view.']['event.']['remind.']['time'];
     /* If the subscription hash matches, subscribe */
     if ($md5 == $subscriptionHash) {
         $user_uid = $this->getFrontendUserUid($email);
         $user_table = 'fe_users';
         /* If we didn't find a matching frontend user, try unknown users */
         if (!$user_uid) {
             $user_uid = $this->getUnknownUserUid($email);
             $user_table = 'tx_cal_unknown_users';
         }
         /* Insert the user ID into the monitor table */
         $this->insertMMRow('tx_cal_fe_user_event_monitor_mm', $eventUID, $user_uid, $user_table, 1, $offset, $eventPID);
         $pageTSConf = \TYPO3\CMS\Backend\Utility\BackendUtility::getPagesTSconfig($eventPID);
         $offset = is_numeric($pageTSConf['options.']['tx_cal_controller.']['view.']['event.']['remind.']['time']) ? $pageTSConf['options.']['tx_cal_controller.']['view.']['event.']['remind.']['time'] * 60 : 0;
         $date = new \TYPO3\CMS\Cal\Model\CalDate($insertFields['start_date'] . '000000');
         $date->setTZbyId('UTC');
         $reminderTimestamp = $date->getTime() + $insertFields['start_time'] - $offset;
         $reminderService =& \TYPO3\CMS\Cal\Utility\Functions::getReminderService();
         $reminderService->scheduleReminder($eventUID);
         return true;
     }
     return false;
 }
コード例 #25
0
ファイル: ReminderView.php プロジェクト: ulrikkold/cal
 public function scheduleReminder($calEventUID)
 {
     // Get complete record
     $eventRecord = BackendUtility::getRecord('tx_cal_event', $calEventUID);
     // get the related monitoring records
     $taskId = null;
     $offset = 0;
     $select = '*';
     $table = 'tx_cal_fe_user_event_monitor_mm';
     $where = 'uid_local = ' . $calEventUID;
     $result = $GLOBALS['TYPO3_DB']->exec_SELECTquery($select, $table, $where);
     while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($result)) {
         $taskId = $row['schedulerId'];
         $offset = $row['offset'];
         // maybe there is a recurring instance
         // get the uids of recurring events from index
         $now = new \TYPO3\CMS\Cal\Model\CalDate();
         $now->setTZbyId('UTC');
         $now->addSeconds($offset * 60);
         $startDateTimeObject = new \TYPO3\CMS\Cal\Model\CalDate($eventRecord['start_date'] . '000000');
         $startDateTimeObject->setTZbyId('UTC');
         $startDateTimeObject->addSeconds($eventRecord['start_time']);
         $start_datetime = $startDateTimeObject->format('%Y%m%d%H%M%S');
         $select2 = '*';
         $table2 = 'tx_cal_index';
         $where2 = 'start_datetime >= ' . $now->format('%Y%m%d%H%M%S') . ' AND event_uid = ' . $calEventUID;
         $orderby2 = 'start_datetime asc';
         $result2 = $GLOBALS['TYPO3_DB']->exec_SELECTquery($select2, $table2, $where2, $orderby2);
         if ($result) {
             $tmp = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($result2);
             if (is_array($tmp)) {
                 $start_datetime = $tmp['start_datetime'];
                 $nextOccuranceTime = new \TYPO3\CMS\Cal\Model\CalDate($tmp['start_datetime']);
                 $nextOccuranceTime->setTZbyId('UTC');
                 $nextOccuranceEndTime = new \TYPO3\CMS\Cal\Model\CalDate($tmp['end_datetime']);
                 $nextOccuranceEndTime->setTZbyId('UTC');
                 $eventRecord['start_date'] = $nextOccuranceTime->format('%Y%m%d');
                 $eventRecord['start_time'] = $nextOccuranceTime->getHour() * 3600 + $nextOccuranceTime->getMinute() * 60 + $nextOccuranceTime->getSecond();
                 $eventRecord['end_date'] = $nextOccuranceEndTime->format('%Y%m%d');
                 $eventRecord['end_time'] = $nextOccuranceEndTime->getHour() * 3600 + $nextOccuranceEndTime->getMinute() * 60 + $nextOccuranceEndTime->getSecond();
             }
             $GLOBALS['TYPO3_DB']->sql_free_result($result2);
         }
         if (\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('scheduler')) {
             $scheduler = new \TYPO3\CMS\Scheduler\Scheduler();
             $date = new \TYPO3\CMS\Cal\Model\CalDate($start_datetime);
             $date->setTZbyId('UTC');
             $timestamp = $date->getTime();
             $offsetTime = new \TYPO3\CMS\Cal\Model\CalDate();
             $offsetTime->copy($date);
             $offsetTime->setTZbyId('UTC');
             $offsetTime->addSeconds(-1 * $offset * 60);
             if ($taskId > 0) {
                 if ($offsetTime->isFuture()) {
                     try {
                         $task = $scheduler->fetchTask($taskId);
                         $execution = new \TYPO3\CMS\Scheduler\Execution();
                         $execution->setStart($timestamp - $offset * 60);
                         $execution->setIsNewSingleExecution(true);
                         $execution->setMultiple(false);
                         $execution->setEnd(time() - 1);
                         $task->setExecution($execution);
                         $task->setDisabled(false);
                         $scheduler->saveTask($task);
                     } catch (OutOfBoundsException $e) {
                         $this->createSchedulerTask($scheduler, $date, $calEventUID, $timestamp, $offset, $row['uid']);
                     }
                 } else {
                     $this->deleteReminder($calEventUID);
                 }
             } else {
                 // taskId == 0 -> schedule task
                 $this->createSchedulerTask($scheduler, $date, $calEventUID, $timestamp, $offset, $row['uid']);
             }
         }
     }
 }
コード例 #26
0
 /**
  * Converts a date from the backend (m-d-Y or d-m-Y or in TYPO3 v.
  * >= 4.3 timestamp) into the Ymd format.
  *
  * @param
  *        	string		The date to convert.
  * @return string date in Ymd format.
  */
 function convertBackendDateToYMD($dateString)
 {
     $date = new \TYPO3\CMS\Cal\Model\CalDate($dateString);
     return $date->format('%Y%m%d');
 }