/** * 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']; } }
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); } }