232 $this->mconf =
$conf[$this->menuNumber . $objSuffix .
'.'];
235 switch (
$GLOBALS[
'TSFE']->xhtmlDoctype) {
243 $this->nameAttribute =
'id';
246 $this->nameAttribute =
'name';
249 if ($this->conf[$this->menuNumber . $objSuffix] && is_object(
$tmpl) && is_object(
$sys_page)) {
253 if (trim($this->conf[
'alwaysActivePIDlist']) || isset($this->conf[
'alwaysActivePIDlist.'])) {
254 if (isset($this->conf[
'alwaysActivePIDlist.'])) {
255 $this->conf[
'alwaysActivePIDlist'] = $this->parent_cObj->stdWrap($this->conf[
'alwaysActivePIDlist'], $this->conf[
'alwaysActivePIDlist.']);
260 if ($this->conf[
'excludeDoktypes']) {
261 $this->doktypeExcludeList =
$GLOBALS[
'TYPO3_DB']->cleanIntList($this->conf[
'excludeDoktypes']);
264 $this->entryLevel = $this->parent_cObj->getKey(isset(
$conf[
'entryLevel.']) ? $this->parent_cObj->stdWrap(
$conf[
'entryLevel'],
$conf[
'entryLevel.']) :
$conf[
'entryLevel'], $this->tmpl->rootLine);
268 $this->
id = (int)
$id;
271 $this->
id = (int)$this->tmpl->rootLine[$this->entryLevel][
'uid'];
274 foreach ($this->tmpl->rootLine as
$entryLevel => $levelRec) {
276 if ($levelRec[
'_MP_PARAM'] && $levelRec[
'_MOUNT_OL']) {
277 $this->MP_array[] = $levelRec[
'_MP_PARAM'];
284 if ($levelRec[
'_MP_PARAM'] && !$levelRec[
'_MOUNT_OL']) {
285 $this->MP_array[] = $levelRec[
'_MP_PARAM'];
290 if ($this->
id <= 0) {
295 $mount_info = $this->sys_page->getMountPointInfo($this->
id);
296 if (is_array($mount_info)) {
297 $this->MP_array[] = $mount_info[
'MPvar'];
298 $this->
id = $mount_info[
'mount_pid'];
302 if (!is_array($this->rL_uidRegister)) {
303 $rl_MParray = array();
304 foreach ($this->tmpl->rootLine as $v_rl) {
306 if ($v_rl[
'_MP_PARAM'] && $v_rl[
'_MOUNT_OL']) {
307 $rl_MParray[] = $v_rl[
'_MP_PARAM'];
310 $this->rL_uidRegister[] =
'ITEM:' . $v_rl[
'uid'] . (count($rl_MParray) ?
':' . implode(
',', $rl_MParray) :
'');
312 if ($v_rl[
'_MP_PARAM'] && !$v_rl[
'_MOUNT_OL']) {
313 $rl_MParray[] = $v_rl[
'_MP_PARAM'];
320 if ($this->conf[
'special'] ==
'directory') {
321 $value = isset($this->conf[
'special.'][
'value.']) ? $this->parent_cObj->stdWrap($this->conf[
'special.'][
'value'], $this->conf[
'special.'][
'value.']) : $this->conf[
'special.'][
'value'];
323 $value =
$GLOBALS[
'TSFE']->page[
'uid'];
325 $directoryLevel = (int)
$GLOBALS[
'TSFE']->tmpl->getRootlineLevel($value);
331 if (is_array($this->tmpl->rootLine[$currentLevel])) {
333 if (!count($nextMParray) && !$this->tmpl->rootLine[$currentLevel][
'_MOUNT_OL'] && $currentLevel > 0) {
336 $parentRecord = $this->tmpl->rootLine[$currentLevel - 1];
337 if (isset($parentRecord[
'_MP_PARAM'])) {
338 $nextMParray[] = $parentRecord[
'_MP_PARAM'];
342 if ($this->tmpl->rootLine[$currentLevel][
'_MOUNT_OL']) {
343 $nextMParray[] = $this->tmpl->rootLine[$currentLevel][
'_MP_PARAM'];
345 $this->nextActive = $this->tmpl->rootLine[$currentLevel][
'uid'] . (count($nextMParray) ?
':' . implode(
',', $nextMParray) :
'');
347 $this->nextActive =
'';
350 if ($this->mconf[
'imgNamePrefix']) {
351 $this->imgNamePrefix = $this->mconf[
'imgNamePrefix'];
353 $this->imgNameNotRandom = $this->mconf[
'imgNameNotRandom'];
356 $GLOBALS[
'TT']->setTSlogMessage(
'ERROR in menu', 3);
370 public function makeMenu() {
372 $this->useCacheHash = FALSE;
375 if ($this->mconf[
'showAccessRestrictedPages']) {
377 $SAVED_where_groupAccess = $this->sys_page->where_groupAccess;
379 $this->sys_page->where_groupAccess =
'';
383 $altSortFieldValue = trim($this->mconf[
'alternativeSortingField']);
384 $altSortField = $altSortFieldValue ?:
'sorting';
386 if ($this->menuNumber == 1 && $this->conf[
'special']) {
387 $value = isset($this->conf[
'special.'][
'value.']) ? $this->parent_cObj->stdWrap($this->conf[
'special.'][
'value'], $this->conf[
'special.'][
'value.']) : $this->conf[
'special.'][
'value'];
388 switch ($this->conf[
'special']) {
390 $temp = $this->parent_cObj->callUserFunction($this->conf[
'special.'][
'userFunc'], array_merge($this->conf[
'special.'], array(
'_altSortField' => $altSortField)),
'');
391 if (!is_array($temp)) {
398 $currentPageWithNoOverlay = $this->sys_page->getRawRecord(
'pages',
$GLOBALS[
'TSFE']->page[
'uid']);
404 $lRecs = $this->sys_page->getPageOverlay(
$GLOBALS[
'TSFE']->page[
'uid'], $sUid);
410 $iState =
$GLOBALS[
'TSFE']->sys_language_uid == $sUid ?
'USERDEF2' :
'USERDEF1';
412 $iState =
$GLOBALS[
'TSFE']->sys_language_uid == $sUid ?
'ACT' :
'NO';
414 if ($this->conf[
'addQueryString']) {
415 $getVars = $this->parent_cObj->getQueryArguments($this->conf[
'addQueryString.'], array(
'L' => $sUid), TRUE);
416 $this->analyzeCacheHashRequirements($getVars);
418 $getVars =
'&L=' . $sUid;
421 $temp[] = array_merge(array_merge($currentPageWithNoOverlay, $lRecs), array(
422 'ITEM_STATE' => $iState,
423 '_ADD_GETVARS' => $getVars,
430 $value =
$GLOBALS[
'TSFE']->page[
'uid'];
433 foreach ($items as
$id) {
434 $MP = $this->tmpl->getFromMPmap($id);
436 $mount_info = $this->sys_page->getMountPointInfo($id);
437 if (is_array($mount_info)) {
438 if ($mount_info[
'overlay']) {
440 $MP = $this->tmpl->getFromMPmap($mount_info[
'mount_pid']);
441 $MP = $MP ? $MP : $mount_info[
'MPvar'];
443 $MP = ($MP ? $MP .
',' :
'') . $mount_info[
'MPvar'];
445 $id = $mount_info[
'mount_pid'];
448 $res = $this->parent_cObj->exec_getQuery(
'pages', array(
'pidInList' => $id,
'orderBy' => $altSortField));
449 while ($row =
$GLOBALS[
'TYPO3_DB']->sql_fetch_assoc($res)) {
450 $GLOBALS[
'TSFE']->sys_page->versionOL(
'pages', $row, TRUE);
451 if (is_array($row)) {
453 $mount_info = $this->sys_page->getMountPointInfo($row[
'uid'], $row);
455 if (is_array($mount_info) && $mount_info[
'overlay']) {
458 $mp_row = $this->sys_page->getPage($mount_info[
'mount_pid']);
459 if (count($mp_row)) {
461 $row[
'_MP_PARAM'] = $mount_info[
'MPvar'];
469 if (is_array($row)) {
471 $row[
'_MP_PARAM'] = $MP . ($row[
'_MP_PARAM'] ?
',' . $row[
'_MP_PARAM'] :
'');
473 $temp[$row[
'uid']] = $this->sys_page->getPageOverlay($row);
483 $skippedEnableFields = array();
484 if (!empty($this->mconf[
'showAccessRestrictedPages'])) {
485 $skippedEnableFields = array(
'fe_group' => 1);
489 $loadDB->setFetchAllFields(TRUE);
490 $loadDB->start($value,
'pages');
491 $loadDB->additionalWhere[
'pages'] = $this->parent_cObj->enableFields(
'pages', FALSE, $skippedEnableFields);
492 $loadDB->getFromDB();
493 foreach ($loadDB->itemArray as $val) {
494 $MP = $this->tmpl->getFromMPmap($val[
'id']);
496 $mount_info = $this->sys_page->getMountPointInfo($val[
'id']);
498 if (is_array($mount_info) && $mount_info[
'overlay']) {
501 $mp_row = $this->sys_page->getPage($mount_info[
'mount_pid']);
502 if (count($mp_row)) {
504 $row[
'_MP_PARAM'] = $mount_info[
'MPvar'];
506 if ($mount_info[
'overlay']) {
507 $MP = $this->tmpl->getFromMPmap($mount_info[
'mount_pid']);
509 unset($row[
'_MP_PARAM']);
518 $row = $loadDB->results[
'pages'][$val[
'id']];
521 if (is_array($row)) {
522 $this->sys_page->versionOL(
'pages', $row, TRUE);
525 if (is_array($row)) {
527 $row[
'_MP_PARAM'] = $MP . ($row[
'_MP_PARAM'] ?
',' . $row[
'_MP_PARAM'] :
'');
529 $temp[] = $this->sys_page->getPageOverlay($row);
535 $value =
$GLOBALS[
'TSFE']->page[
'uid'];
545 $maxAge = (int)$this->parent_cObj->calc($this->conf[
'special.'][
'maxAge']);
550 $mode = $this->conf[
'special.'][
'mode'];
552 $id_list_arr = array();
553 foreach ($items as $id) {
555 $id_list_arr[] = $this->parent_cObj->getTreeList(-1 * $id, $depth - 1 + $bA, $bA - 1);
557 $id_list = implode(
',', $id_list_arr);
561 $sortField =
'starttime';
566 $sortField =
'lastUpdated';
569 $sortField =
'tstamp';
572 $sortField =
'crdate';
575 $sortField =
'SYS_LASTCHANGED';
578 $extraWhere = ($this->conf[
'includeNotInMenu'] ?
'' :
' AND pages.nav_hide=0') . $this->
getDoktypeExcludeWhere();
579 if ($this->conf[
'special.'][
'excludeNoSearchPages']) {
580 $extraWhere .=
' AND pages.no_search=0';
583 $extraWhere .=
' AND ' . $sortField .
'>' . (
$GLOBALS[
'SIM_ACCESS_TIME'] - $maxAge);
585 $res = $this->parent_cObj->exec_getQuery(
'pages', array(
587 'uidInList' => $id_list,
588 'where' => $sortField .
'>=0' . $extraWhere,
589 'orderBy' => $altSortFieldValue ? $altSortFieldValue : $sortField .
' desc',
592 while ($row =
$GLOBALS[
'TYPO3_DB']->sql_fetch_assoc($res)) {
593 $GLOBALS[
'TSFE']->sys_page->versionOL(
'pages', $row, TRUE);
594 if (is_array($row)) {
595 $temp[$row[
'uid']] = $this->sys_page->getPageOverlay($row);
602 $value =
$GLOBALS[
'TSFE']->page[
'uid'];
604 if ($this->conf[
'special.'][
'setKeywords'] || $this->conf[
'special.'][
'setKeywords.']) {
605 $kw = isset($this->conf[
'special.'][
'setKeywords.']) ? $this->parent_cObj->stdWrap($this->conf[
'special.'][
'setKeywords'], $this->conf[
'special.'][
'setKeywords.']) : $this->conf[
'special.'][
'setKeywords'];
608 $value_rec = $this->sys_page->getPage($value);
609 $kfieldSrc = $this->conf[
'special.'][
'keywordsField.'][
'sourceField'] ? $this->conf[
'special.'][
'keywordsField.'][
'sourceField'] :
'keywords';
611 $kw = trim($this->parent_cObj->keywords($value_rec[$kfieldSrc]));
614 $mode = $this->conf[
'special.'][
'mode'];
617 $sortField =
'starttime';
622 $sortField =
'lastUpdated';
625 $sortField =
'tstamp';
628 $sortField =
'crdate';
631 $sortField =
'SYS_LASTCHANGED';
641 $extraWhere =
' AND pages.uid<>' . $value . ($this->conf[
'includeNotInMenu'] ?
'' :
' AND pages.nav_hide=0') . $this->
getDoktypeExcludeWhere();
642 if ($this->conf[
'special.'][
'excludeNoSearchPages']) {
643 $extraWhere .=
' AND pages.no_search=0';
646 $eLevel = $this->parent_cObj->getKey(isset($this->conf[
'special.'][
'entryLevel.']) ? $this->parent_cObj->stdWrap($this->conf[
'special.'][
'entryLevel'], $this->conf[
'special.'][
'entryLevel.']) : $this->conf[
'special.'][
'entryLevel'], $this->tmpl->rootLine);
647 $startUid = (int)$this->tmpl->rootLine[$eLevel][
'uid'];
649 $kfield =
'keywords';
650 if ($this->conf[
'special.'][
'keywordsField']) {
651 list($kfield) = explode(
' ', trim($this->conf[
'special.'][
'keywordsField']));
654 if ($kw && $startUid) {
656 $id_list = $this->parent_cObj->getTreeList(-1 * $startUid, $depth - 1 + $bA, $bA - 1);
657 $kwArr = explode(
',', $kw);
658 foreach ($kwArr as $word) {
661 $keyWordsWhereArr[] = $kfield .
' LIKE \'%' .
$GLOBALS[
'TYPO3_DB']->quoteStr($word,
'pages') .
'%\'';
664 $res = $this->parent_cObj->exec_getQuery(
'pages', array(
'pidInList' =>
'0',
'uidInList' => $id_list,
'where' =>
'(' . implode(
' OR ', $keyWordsWhereArr) .
')' . $extraWhere,
'orderBy' => $altSortFieldValue ? $altSortFieldValue : $sortField .
' desc',
'max' => $limit));
665 while ($row =
$GLOBALS[
'TYPO3_DB']->sql_fetch_assoc($res)) {
666 $GLOBALS[
'TSFE']->sys_page->versionOL(
'pages', $row, TRUE);
667 if (is_array($row)) {
668 $temp[$row[
'uid']] = $this->sys_page->getPageOverlay($row);
676 $temp = $categoryMenuUtility->collectPages($value, $this->conf[
'special.'], $this);
679 $range = isset($this->conf[
'special.'][
'range.']) ? $this->parent_cObj->stdWrap($this->conf[
'special.'][
'range'], $this->conf[
'special.'][
'range.']) : $this->conf[
'special.'][
'range'];
680 $begin_end = explode(
'|', $range);
681 $begin_end[0] = (int)$begin_end[0];
685 $beginKey = $this->parent_cObj->getKey($begin_end[0], $this->tmpl->rootLine);
686 $endKey = $this->parent_cObj->getKey($begin_end[1], $this->tmpl->rootLine);
687 if ($endKey < $beginKey) {
690 $rl_MParray = array();
691 foreach ($this->tmpl->rootLine as $k_rl => $v_rl) {
693 if ($v_rl[
'_MP_PARAM'] && $v_rl[
'_MOUNT_OL']) {
694 $rl_MParray[] = $v_rl[
'_MP_PARAM'];
697 if ($k_rl >= $beginKey && $k_rl <= $endKey) {
699 $temp[$temp_key] = $this->sys_page->getPage($v_rl[
'uid']);
700 if (count($temp[$temp_key])) {
702 if (!$temp[$temp_key][
'target']) {
703 $temp[$temp_key][
'target'] = $this->conf[
'special.'][
'targets.'][$k_rl];
704 $temp[$temp_key][
'_MP_PARAM'] = implode(
',', $rl_MParray);
707 unset($temp[$temp_key]);
711 if ($v_rl[
'_MP_PARAM'] && !$v_rl[
'_MOUNT_OL']) {
712 $rl_MParray[] = $v_rl[
'_MP_PARAM'];
716 if (isset($this->conf[
'special.'][
'reverseOrder']) && $this->conf[
'special.'][
'reverseOrder']) {
717 $temp = array_reverse($temp);
718 $rl_MParray = array_reverse($rl_MParray);
724 $value =
$GLOBALS[
'TSFE']->page[
'uid'];
727 if ($value != $this->tmpl->rootLine[0][
'uid']) {
730 $value_rec = $this->sys_page->getPage($value);
732 if ($value_rec[
'pid']) {
734 $recArr[
'up'] = $this->sys_page->getPage($value_rec[
'pid']);
737 if ($recArr[
'up'][
'pid'] && $value_rec[
'pid'] != $this->tmpl->rootLine[0][
'uid']) {
739 $recArr[
'index'] = $this->sys_page->getPage($recArr[
'up'][
'pid']);
742 $prevnext_menu = $this->
removeInaccessiblePages($this->sys_page->getMenu($value_rec[
'pid'],
'*', $altSortField));
745 foreach ($prevnext_menu as $k_b => $v_b) {
747 $recArr[
'next'] = $v_b;
750 if ($v_b[
'uid'] == $value) {
752 $recArr[
'prev'] = $prevnext_menu[$lastKey];
758 reset($prevnext_menu);
759 $recArr[
'first'] = pos($prevnext_menu);
761 $recArr[
'last'] = pos($prevnext_menu);
764 if (is_array($recArr[
'index'])) {
765 $prevnextsection_menu = $this->
removeInaccessiblePages($this->sys_page->getMenu($recArr[
'index'][
'uid'],
'*', $altSortField));
768 foreach ($prevnextsection_menu as $k_b => $v_b) {
771 if (count($sectionRec_temp)) {
772 reset($sectionRec_temp);
773 $recArr[
'nextsection'] = pos($sectionRec_temp);
774 end($sectionRec_temp);
775 $recArr[
'nextsection_last'] = pos($sectionRec_temp);
779 if ($v_b[
'uid'] == $value_rec[
'pid']) {
781 $sectionRec_temp = $this->
removeInaccessiblePages($this->sys_page->getMenu($prevnextsection_menu[$lastKey][
'uid'],
'*', $altSortField));
782 if (count($sectionRec_temp)) {
783 reset($sectionRec_temp);
784 $recArr[
'prevsection'] = pos($sectionRec_temp);
785 end($sectionRec_temp);
786 $recArr[
'prevsection_last'] = pos($sectionRec_temp);
794 if ($this->conf[
'special.'][
'items.'][
'prevnextToSection']) {
795 if (!is_array($recArr[
'prev']) && is_array($recArr[
'prevsection_last'])) {
796 $recArr[
'prev'] = $recArr[
'prevsection_last'];
798 if (!is_array($recArr[
'next']) && is_array($recArr[
'nextsection'])) {
799 $recArr[
'next'] = $recArr[
'nextsection'];
802 $items = explode(
'|', $this->conf[
'special.'][
'items']);
804 foreach ($items as $k_b => $v_b) {
805 $v_b = strtolower(trim($v_b));
806 if ((
int)$this->conf[
'special.'][$v_b .
'.'][
'uid']) {
807 $recArr[$v_b] = $this->sys_page->getPage((
int)$this->conf[
'special.'][$v_b .
'.'][
'uid']);
809 if (is_array($recArr[$v_b])) {
810 $temp[$c] = $recArr[$v_b];
811 if ($this->conf[
'special.'][$v_b .
'.'][
'target']) {
812 $temp[$c][
'target'] = $this->conf[
'special.'][$v_b .
'.'][
'target'];
814 $tmpSpecialFields = $this->conf[
'special.'][$v_b .
'.'][
'fields.'];
815 if (is_array($tmpSpecialFields)) {
816 foreach ($tmpSpecialFields as $fk => $val) {
817 $temp[$c][$fk] = $val;
826 if ($this->mconf[
'sectionIndex']) {
827 $sectionIndexes = array();
828 foreach ($temp as $page) {
829 $sectionIndexes = $sectionIndexes + $this->
sectionIndex($altSortField, $page[
'uid']);
831 $temp = $sectionIndexes;
833 } elseif (is_array($this->alternativeMenuTempArray)) {
836 } elseif ($this->mconf[
'sectionIndex']) {
841 $temp = $this->sys_page->getMenu($this->
id,
'*', $altSortField);
845 $minItems = (int)($this->mconf[
'minItems'] ?: $this->conf[
'minItems']);
846 $maxItems = (int)($this->mconf[
'maxItems'] ?: $this->conf[
'maxItems']);
847 $begin = $this->parent_cObj->calc($this->mconf[
'begin'] ? $this->mconf[
'begin'] : $this->conf[
'begin']);
848 $minItemsConf = isset($this->mconf[
'minItems.']) ? $this->mconf[
'minItems.'] : (isset($this->conf[
'minItems.']) ? $this->conf[
'minItems.'] : NULL);
849 $minItems = is_array($minItemsConf) ? $this->parent_cObj->stdWrap($minItems, $minItemsConf) : $minItems;
850 $maxItemsConf = isset($this->mconf[
'maxItems.']) ? $this->mconf[
'maxItems.'] : (isset($this->conf[
'maxItems.']) ? $this->conf[
'maxItems.'] : NULL);
851 $maxItems = is_array($maxItemsConf) ? $this->parent_cObj->stdWrap($maxItems, $maxItemsConf) : $maxItems;
852 $beginConf = isset($this->mconf[
'begin.']) ? $this->mconf[
'begin.'] : (isset($this->conf[
'begin.']) ? $this->conf[
'begin.'] : NULL);
853 $begin = is_array($beginConf) ? $this->parent_cObj->stdWrap($begin, $beginConf) : $begin;
856 $this->menuArr = array();
857 foreach ($temp as $data) {
858 $spacer =
GeneralUtility::inList($this->spacerIDList, $data[
'doktype']) || $data[
'ITEM_STATE'] ===
'SPC' ? 1 : 0;
863 if ($begin <= $c_b) {
864 $this->menuArr[$c] = $data;
865 $this->menuArr[$c][
'isSpacer'] = $spacer;
867 if ($maxItems && $c >= $maxItems) {
875 while ($c < $minItems) {
876 $this->menuArr[$c] = array(
884 if ($this->mconf[
'itemArrayProcFunc']) {
885 if (!is_array($this->parentMenuArr)) {
886 $this->parentMenuArr = array();
888 $this->menuArr = $this->
userProcess(
'itemArrayProcFunc', $this->menuArr);
891 $GLOBALS[
'TSFE']->register[
'count_menuItems'] = count($this->menuArr);
892 $this->hash = md5(serialize($this->menuArr) . serialize($this->mconf) . serialize($this->tmpl->rootLine) . serialize($this->MP_array));
894 if ($this->conf[
'cache_period']) {
895 $cacheTimeout = $this->conf[
'cache_period'];
897 $cacheTimeout =
$GLOBALS[
'TSFE']->get_cache_timeout();
900 $cachedData = $cache->get($this->hash);
901 if (!is_array($cachedData)) {
903 $cache->set($this->hash, $this->result, array(
'ident_MENUDATA'), (
int)$cacheTimeout);
905 $this->result = $cachedData;
908 if ($this->mconf[
'showAccessRestrictedPages']) {
910 $this->sys_page->where_groupAccess = $SAVED_where_groupAccess;
923 $filteredPages = array();
924 foreach ($pages as $aPage) {
926 $filteredPages[$aPage[
'uid']] = $aPage;
929 return $filteredPages;
938 protected function analyzeCacheHashRequirements($queryString) {
942 $queryString .=
'&id=' .
$GLOBALS[
'TSFE']->id;
946 $cHashParameters = $cacheHashCalculator->getRelevantParameters($queryString);
947 if (count($cHashParameters) > 1) {
948 $this->useCacheHash = (
949 $GLOBALS[
'TYPO3_CONF_VARS'][
'FE'][
'disableNoCacheParameter'] ||
968 if (is_array(
$GLOBALS[
'TYPO3_CONF_VARS'][
'SC_OPTIONS'][
'cms/tslib/class.tslib_menu.php'][
'filterMenuPages'])) {
969 foreach (
$GLOBALS[
'TYPO3_CONF_VARS'][
'SC_OPTIONS'][
'cms/tslib/class.tslib_menu.php'][
'filterMenuPages'] as $classRef) {
972 throw new \UnexpectedValueException(
'$hookObject must implement interface TYPO3\\CMS\\Frontend\\ContentObject\\Menu\\AbstractMenuFilterPagesHookInterface', 1269877402);
974 $includePage = $includePage && $hookObject->processFilter($data, $banUidArray, $spacer, $this);
980 if ($data[
'_SAFE']) {
985 if ($this->mconf[
'SPC'] || !$spacer) {
989 if (!$data[
'nav_hide'] || $this->conf[
'includeNotInMenu']) {
1000 if (!$data[
'_PAGES_OVERLAY']) {
1007 if ($this->conf[
'protectLvar']) {
1008 $languageUid = (int)
$GLOBALS[
'TSFE']->config[
'config'][
'sys_language_uid'];
1010 $olRec =
$GLOBALS[
'TSFE']->sys_page->getPageOverlay($data[
'uid'], $languageUid);
1011 if (!count($olRec)) {
1013 $data[
'_ADD_GETVARS'] .=
'&L=0';
1038 if (!is_array($this->mconf[
'NO.']) && $this->mconf[
'NO']) {
1040 $this->mconf[
'NO.'] = array();
1042 $NOconf = $this->tmpl->splitConfArray($this->mconf[
'NO.'], $splitCount);
1045 if ($this->mconf[
'RO']) {
1046 $ROconf = $this->tmpl->splitConfArray($this->mconf[
'RO.'], $splitCount);
1050 if ($this->mconf[
'IFSUB']) {
1053 foreach ($NOconf as $key => $val) {
1057 $IFSUBconf = $this->tmpl->splitConfArray($this->mconf[
'IFSUB.'], $splitCount);
1058 if ($this->mconf[
'IFSUBRO']) {
1059 $IFSUBROconf = $this->tmpl->splitConfArray($this->mconf[
'IFSUBRO.'], $splitCount);
1064 $NOconf[$key] = $IFSUBconf[$key];
1068 $ROconf[$key] = $IFSUBROconf[$key] ?: $IFSUBconf[$key];
1074 if ($this->mconf[
'ACT']) {
1078 foreach ($NOconf as $key => $val) {
1082 $ACTconf = $this->tmpl->splitConfArray($this->mconf[
'ACT.'], $splitCount);
1084 if ($this->mconf[
'ACTRO']) {
1085 $ACTROconf = $this->tmpl->splitConfArray($this->mconf[
'ACTRO.'], $splitCount);
1090 $NOconf[$key] = $ACTconf[$key];
1094 $ROconf[$key] = $ACTROconf[$key] ?: $ACTconf[$key];
1101 if ($this->mconf[
'ACTIFSUB']) {
1105 foreach ($NOconf as $key => $val) {
1108 if (!$ACTIFSUBinit) {
1109 $ACTIFSUBconf = $this->tmpl->splitConfArray($this->mconf[
'ACTIFSUB.'], $splitCount);
1111 if ($this->mconf[
'ACTIFSUBRO']) {
1112 $ACTIFSUBROconf = $this->tmpl->splitConfArray($this->mconf[
'ACTIFSUBRO.'], $splitCount);
1117 $NOconf[$key] = $ACTIFSUBconf[$key];
1121 $ROconf[$key] = $ACTIFSUBROconf[$key] ?: $ACTIFSUBconf[$key];
1128 if ($this->mconf[
'CUR']) {
1131 foreach ($NOconf as $key => $val) {
1137 $CURconf = $this->tmpl->splitConfArray($this->mconf[
'CUR.'], $splitCount);
1138 if ($this->mconf[
'CURRO']) {
1139 $CURROconf = $this->tmpl->splitConfArray($this->mconf[
'CURRO.'], $splitCount);
1144 $NOconf[$key] = $CURconf[$key];
1148 $ROconf[$key] = $CURROconf[$key] ?: $CURconf[$key];
1155 if ($this->mconf[
'CURIFSUB']) {
1158 foreach ($NOconf as $key => $val) {
1161 if (!$CURIFSUBinit) {
1162 $CURIFSUBconf = $this->tmpl->splitConfArray($this->mconf[
'CURIFSUB.'], $splitCount);
1164 if ($this->mconf[
'CURIFSUBRO']) {
1165 $CURIFSUBROconf = $this->tmpl->splitConfArray($this->mconf[
'CURIFSUBRO.'], $splitCount);
1170 $NOconf[$key] = $CURIFSUBconf[$key];
1174 $ROconf[$key] = $CURIFSUBROconf[$key] ?: $CURIFSUBconf[$key];
1180 if ($this->mconf[
'USR']) {
1184 foreach ($NOconf as $key => $val) {
1188 $USRconf = $this->tmpl->splitConfArray($this->mconf[
'USR.'], $splitCount);
1190 if ($this->mconf[
'USRRO']) {
1191 $USRROconf = $this->tmpl->splitConfArray($this->mconf[
'USRRO.'], $splitCount);
1196 $NOconf[$key] = $USRconf[$key];
1200 $ROconf[$key] = $USRROconf[$key] ?: $USRconf[$key];
1206 if ($this->mconf[
'SPC']) {
1210 foreach ($NOconf as $key => $val) {
1214 $SPCconf = $this->tmpl->splitConfArray($this->mconf[
'SPC.'], $splitCount);
1218 $NOconf[$key] = $SPCconf[$key];
1223 if ($this->mconf[
'USERDEF1']) {
1227 foreach ($NOconf as $key => $val) {
1230 if (!$USERDEF1init) {
1231 $USERDEF1conf = $this->tmpl->splitConfArray($this->mconf[
'USERDEF1.'], $splitCount);
1233 if ($this->mconf[
'USERDEF1RO']) {
1234 $USERDEF1ROconf = $this->tmpl->splitConfArray($this->mconf[
'USERDEF1RO.'], $splitCount);
1239 $NOconf[$key] = $USERDEF1conf[$key];
1243 $ROconf[$key] = $USERDEF1ROconf[$key] ?: $USERDEF1conf[$key];
1249 if ($this->mconf[
'USERDEF2']) {
1253 foreach ($NOconf as $key => $val) {
1256 if (!$USERDEF2init) {
1257 $USERDEF2conf = $this->tmpl->splitConfArray($this->mconf[
'USERDEF2.'], $splitCount);
1259 if ($this->mconf[
'USERDEF2RO']) {
1260 $USERDEF2ROconf = $this->tmpl->splitConfArray($this->mconf[
'USERDEF2RO.'], $splitCount);
1265 $NOconf[$key] = $USERDEF2conf[$key];
1269 $ROconf[$key] = $USERDEF2ROconf[$key] ?: $USERDEF2conf[$key];
1274 return array($NOconf, $ROconf);
1288 public function link($key, $altTarget =
'', $typeOverride =
'') {
1291 $MP_params = $MP_var ?
'&MP=' . rawurlencode($MP_var) :
'';
1293 if ($this->mconf[
'overrideId'] || $this->menuArr[$key][
'overrideId']) {
1294 $overrideArray = array();
1296 $overrideArray[
'uid'] = $this->mconf[
'overrideId'] ?: $this->menuArr[$key][
'overrideId'];
1297 $overrideArray[
'alias'] =
'';
1301 $overrideArray =
'';
1305 $mainTarget = $altTarget;
1306 } elseif ($this->mconf[
'target.']) {
1307 $mainTarget = $this->parent_cObj->stdWrap($this->mconf[
'target'], $this->mconf[
'target.']);
1309 $mainTarget = $this->mconf[
'target'];
1312 if ($this->mconf[
'collapse'] && $this->
isActive($this->menuArr[$key][
'uid'], $this->
getMPvar($key))) {
1313 $thePage = $this->sys_page->getPage($this->menuArr[$key][
'pid']);
1314 $LD = $this->
menuTypoLink($thePage, $mainTarget,
'',
'', $overrideArray, $this->mconf[
'addParams'] . $MP_params . $this->menuArr[$key][
'_ADD_GETVARS'], $typeOverride);
1316 $LD = $this->
menuTypoLink($this->menuArr[$key], $mainTarget,
'',
'', $overrideArray, $this->mconf[
'addParams'] . $MP_params . $this->I[
'val'][
'additionalParams'] . $this->menuArr[$key][
'_ADD_GETVARS'], $typeOverride);
1321 $LD[
'totalURL'] = $this->parent_cObj->typoLink_URL(array(
'parameter' => $this->menuArr[$key][
'url']));
1332 $shortcut =
$GLOBALS[
'TSFE']->getPageShortcut(
1333 $menuItem[
'shortcut'],
1334 $menuItem[
'shortcut_mode'],
1343 if (!is_array($shortcut)) {
1347 $LD[
'totalURL'] = $this->parent_cObj->typoLink_URL(array(
1348 'parameter' => $shortcut[
'uid'],
1349 'additionalParams' => $this->mconf[
'addParams'] . $MP_params . $this->I[
'val'][
'additionalParams'] . $menuItem[
'_ADD_GETVARS'],
1350 'linkAccessRestrictedPages' => $this->mconf[
'showAccessRestrictedPages'] && $this->mconf[
'showAccessRestrictedPages'] !==
'NONE' 1354 $pageData = $shortcut;
1355 $pageData[
'_SHORTCUT_PAGE_UID'] = $this->menuArr[$key][
'uid'];
1357 $pageData = $this->menuArr[$key];
1362 if ($this->menuArr[$key][
'_OVERRIDE_HREF']) {
1363 $LD[
'totalURL'] = $this->menuArr[$key][
'_OVERRIDE_HREF'];
1364 if ($this->menuArr[$key][
'_OVERRIDE_TARGET']) {
1365 $LD[
'target'] = $this->menuArr[$key][
'_OVERRIDE_TARGET'];
1370 if ($this->mconf[
'JSWindow']) {
1371 $conf = $this->mconf[
'JSWindow.'];
1372 $url = $LD[
'totalURL'];
1373 $LD[
'totalURL'] =
'#';
1374 $onClick =
'openPic(\'' .
$GLOBALS[
'TSFE']->baseUrlWrap($url) .
'\',\
'' . (
$conf[
'newWindow'] ? md5($url) :
'theNewPage') .
'\',\
'' .
$conf[
'params'] .
'\');
return false;
'; 1375 $GLOBALS['TSFE
']->setJS('openPic
'); 1377 // look for type and popup 1378 // following settings are valid in field target: 1379 // 230 will add type=230 to the link 1380 // 230 500x600 will add type=230 to the link and open in popup window with 500x600 pixels 1381 // 230 _blank will add type=230 to the link and open with target "_blank" 1382 // 230x450:resizable=0,location=1 will open in popup window with 500x600 pixels with settings "resizable=0,location=1" 1384 $targetIsType = $LD['target
'] && MathUtility::canBeInterpretedAsInteger($LD['target
']) ? (int)$LD['target
'] : FALSE; 1385 if (preg_match('/([0-9]+[\\s])?(([0-9]+)x([0-9]+))?(:.+)?/s
', $LD['target
'], $matches) || $targetIsType) { 1387 if ((int)$matches[1] || $targetIsType) { 1388 $LD['totalURL
'] = $this->parent_cObj->URLqMark($LD['totalURL
'], '&type=
' . ($targetIsType ?: (int)$matches[1])); 1389 $LD['target
'] = $targetIsType ? '' : trim(substr($LD['target
'], strlen($matches[1]) + 1)); 1391 // Open in popup window? 1392 if ($matches[3] && $matches[4]) { 1393 $JSparamWH = 'width=
' . $matches[3] . ',height=
' . $matches[4] . ($matches[5] ? ',
' . substr($matches[5], 1) : ''); 1394 $onClick = 'vHWin=window.open(
' 1395 . GeneralUtility::quoteJSvalue($GLOBALS['TSFE
']->baseUrlWrap($LD['totalURL
'])) 1396 . ',\
'FEopenLink\',\'' . $JSparamWH .
'\');vHWin.focus();
return false;
'; 1402 // Added this check: What it does is to enter the baseUrl (if set, which it should for "realurl" based sites) 1403 // as URL if the calculated value is empty. The problem is that no link is generated with a blank URL 1404 // and blank URLs might appear when the realurl encoding is used and a link to the frontpage is generated. 1405 $list['HREF
'] = strlen($LD['totalURL
']) ? $LD['totalURL
'] : $GLOBALS['TSFE
']->baseUrl; 1406 $list['TARGET
'] = $LD['target
']; 1407 $list['onClick
'] = $onClick; 1423 protected function determineOriginalShortcutPage(array $page) { 1424 // Check if modification is required 1426 $GLOBALS['TSFE
']->sys_language_uid > 0 1427 && empty($page['shortcut
']) 1428 && !empty($page['uid
']) 1429 && !empty($page['_PAGES_OVERLAY
']) 1430 && !empty($page['_PAGES_OVERLAY_UID
']) 1432 // Using raw record since the record was overlaid and is correct already: 1433 $originalPage = $this->sys_page->getRawRecord('pages
', $page['uid
']); 1435 if ($originalPage['shortcut_mode
'] === $page['shortcut_mode
'] && !empty($originalPage['shortcut
'])) { 1436 $page['shortcut
'] = $originalPage['shortcut
']; 1453 public function changeLinksForAccessRestrictedPages(&$LD, $page, $mainTarget, $typeOverride) { 1454 // If access restricted pages should be shown in menus, change the link of such pages to link to a redirection page: 1455 if ($this->mconf['showAccessRestrictedPages
'] && $this->mconf['showAccessRestrictedPages
'] !== 'NONE
' && !$GLOBALS['TSFE
']->checkPageGroupAccess($page)) { 1456 $thePage = $this->sys_page->getPage($this->mconf['showAccessRestrictedPages
']); 1457 $addParams = str_replace( 1463 rawurlencode($LD['totalURL
']), 1464 isset($page['_SHORTCUT_PAGE_UID
']) ? $page['_SHORTCUT_PAGE_UID
'] : $page['uid
'] 1466 $this->mconf['showAccessRestrictedPages.
']['addParams
'] 1468 $LD = $this->menuTypoLink($thePage, $mainTarget, '', '', '', $addParams, $typeOverride); 1481 public function subMenu($uid, $objSuffix = '') { 1482 // Setting alternative menu item array if _SUB_MENU has been defined in the current ->menuArr 1484 if (is_array($this->menuArr[$this->I['key
']]['_SUB_MENU
']) && count($this->menuArr[$this->I['key
']]['_SUB_MENU
'])) { 1485 $altArray = $this->menuArr[$this->I['key
']]['_SUB_MENU
']; 1487 // Make submenu if the page is the next active 1488 $menuType = $this->conf[($this->menuNumber + 1) . $objSuffix]; 1489 // stdWrap for expAll 1490 if (isset($this->mconf['expAll.
'])) { 1491 $this->mconf['expAll
'] = $this->parent_cObj->stdWrap($this->mconf['expAll
'], $this->mconf['expAll.
']); 1493 if (($this->mconf['expAll
'] || $this->isNext($uid, $this->getMPvar($this->I['key
'])) || is_array($altArray)) && !$this->mconf['sectionIndex']) { 1496 $submenu = $menuObjectFactory->getMenuObjectByType($menuType); 1497 $submenu->entryLevel = $this->entryLevel + 1; 1498 $submenu->rL_uidRegister = $this->rL_uidRegister; 1499 $submenu->MP_array = $this->MP_array; 1500 if ($this->menuArr[$this->I['key
']]['_MP_PARAM
']) { 1501 $submenu->MP_array[] = $this->menuArr[$this->I['key
']]['_MP_PARAM
']; 1503 // Especially scripts that build the submenu needs the parent data 1504 $submenu->parent_cObj = $this->parent_cObj; 1505 $submenu->parentMenuArr = $this->menuArr; 1506 // Setting alternativeMenuTempArray (will be effective only if an array) 1507 if (is_array($altArray)) { 1508 $submenu->alternativeMenuTempArray = $altArray; 1510 if ($submenu->start($this->tmpl, $this->sys_page, $uid, $this->conf, $this->menuNumber + 1, $objSuffix)) { 1511 $submenu->makeMenu(); 1512 // Memorize the current menu item count 1513 $tempCountMenuObj = $GLOBALS['TSFE
']->register['count_MENUOBJ
']; 1514 // Reset the menu item count for the submenu 1515 $GLOBALS['TSFE
']->register['count_MENUOBJ
'] = 0; 1516 $content = $submenu->writeMenu(); 1517 // Restore the item count now that the submenu has been handled 1518 $GLOBALS['TSFE
']->register['count_MENUOBJ
'] = $tempCountMenuObj; 1519 $GLOBALS['TSFE
']->register['count_menuItems
'] = count($this->menuArr); 1522 } catch (\TYPO3\CMS\Frontend\ContentObject\Menu\Exception\NoSuchMenuTypeException $e) { 1537 public function isNext($uid, $MPvar = '') { 1538 // Check for always active PIDs: 1539 if (count($this->alwaysActivePIDlist) && in_array($uid, $this->alwaysActivePIDlist)) { 1542 $testUid = $uid . ($MPvar ? ':
' . $MPvar : ''); 1543 if ($uid && $testUid == $this->nextActive) { 1557 public function isActive($uid, $MPvar = '') { 1558 // Check for always active PIDs: 1559 if (count($this->alwaysActivePIDlist) && in_array($uid, $this->alwaysActivePIDlist)) { 1562 $testUid = $uid . ($MPvar ? ':
' . $MPvar : ''); 1563 if ($uid && in_array('ITEM:
' . $testUid, $this->rL_uidRegister)) { 1577 public function isCurrent($uid, $MPvar = '') { 1578 $testUid = $uid . ($MPvar ? ':
' . $MPvar : ''); 1579 if ($uid && end($this->rL_uidRegister) === 'ITEM:
' . $testUid) { 1593 public function isSubMenu($uid) { 1594 // Looking for a mount-pid for this UID since if that 1595 // exists we should look for a subpages THERE and not in the input $uid; 1596 $mount_info = $this->sys_page->getMountPointInfo($uid); 1597 if (is_array($mount_info)) { 1598 $uid = $mount_info['mount_pid
']; 1600 $recs = $this->sys_page->getMenu($uid, 'uid,pid,doktype,mount_pid,mount_pid_ol,nav_hide,shortcut,shortcut_mode,l18n_cfg
'); 1601 $hasSubPages = FALSE; 1602 $bannedUids = $this->getBannedUids(); 1603 foreach ($recs as $theRec) { 1604 // no valid subpage if the document type is excluded from the menu 1605 if (GeneralUtility::inList($this->doktypeExcludeList, $theRec['doktype
'])) { 1608 // No valid subpage if the page is hidden inside menus and 1609 // it wasn't forced to show such entries
1610 if ($theRec[
'nav_hide'] && !$this->conf[
'includeNotInMenu']) {
1621 if (
$GLOBALS[
'TSFE']->sys_language_uid && $hideIfNotTranslated && !$theRec[
'_PAGES_OVERLAY']) {
1625 if (in_array($theRec[
'uid'], $bannedUids)) {
1628 $hasSubPages = TRUE;
1631 return $hasSubPages;
1647 if ($this->menuArr[$key][
'ITEM_STATE']) {
1648 if ((
string)$this->menuArr[$key][
'ITEM_STATE'] === (
string)$kind) {
1654 $natVal = $this->menuArr[$key][
'isSpacer'];
1657 $natVal = $this->
isSubMenu($this->menuArr[$key][
'uid']);
1660 $natVal = $this->
isActive($this->menuArr[$key][
'uid'], $this->
getMPvar($key));
1663 $natVal = $this->
isActive($this->menuArr[$key][
'uid'], $this->
getMPvar($key)) && $this->
isSubMenu($this->menuArr[$key][
'uid']);
1669 $natVal = $this->
isCurrent($this->menuArr[$key][
'uid'], $this->
getMPvar($key)) && $this->
isSubMenu($this->menuArr[$key][
'uid']);
1672 $natVal = $this->menuArr[$key][
'fe_group'];
1690 $title = trim(strip_tags($title));
1691 $titleLen = strlen($title);
1692 for ($a = 0; $a < $titleLen; $a++) {
1693 $key = strtoupper(substr($title, $a, 1));
1695 $GLOBALS[
'TSFE']->accessKey[$key] = 1;
1696 $result[
'code'] =
' accesskey="' . $key .
'"';
1697 $result[
'alt'] =
' (ALT+' . $key .
')';
1716 if ($this->mconf[$mConfKey]) {
1717 $funcConf = $this->mconf[$mConfKey .
'.'];
1718 $funcConf[
'parentObj'] = $this;
1719 $passVar = $this->parent_cObj->callUserFunction($this->mconf[$mConfKey], $funcConf, $passVar);
1732 $params = trim($this->I[
'val'][
'ATagParams']) . $this->I[
'accessKey'][
'code'];
1733 $params = $params !==
'' ?
' ' . $params :
'';
1735 $this->I[
'A2'] =
'</a>';
1748 return trim($nav_title) !==
'' ? $nav_title : $title;
1760 if (
$GLOBALS[
'TYPO3_CONF_VARS'][
'FE'][
'enable_mount_pids']) {
1763 if ($this->menuArr[$key][
'_MP_PARAM']) {
1764 $localMP_array[] = $this->menuArr[$key][
'_MP_PARAM'];
1766 $MP_params = count($localMP_array) ? implode(
',', $localMP_array) :
'';
1779 return $this->doktypeExcludeList ?
' AND pages.doktype NOT IN (' . $this->doktypeExcludeList .
')' :
'';
1790 $excludeUidList = isset($this->conf[
'excludeUidList.'])
1791 ? $this->parent_cObj->stdWrap($this->conf[
'excludeUidList'], $this->conf[
'excludeUidList.'])
1792 : $this->conf[
'excludeUidList'];
1794 if (!trim($excludeUidList)) {
1798 $banUidList = str_replace(
'current',
$GLOBALS[
'TSFE']->page[
'uid'], $excludeUidList);
1815 public function menuTypoLink($page, $oTarget, $no_cache, $script, $overrideArray =
'', $addParams =
'', $typeOverride =
'') {
1817 'parameter' => is_array($overrideArray) && $overrideArray[
'uid'] ? $overrideArray[
'uid'] : $page[
'uid']
1820 $conf[
'parameter'] .=
',' . (int)$typeOverride;
1823 $conf[
'additionalParams'] = $addParams;
1826 $conf[
'no_cache'] = TRUE;
1827 } elseif ($this->useCacheHash) {
1828 $conf[
'useCacheHash'] = TRUE;
1831 $conf[
'target'] = $oTarget;
1833 if ($page[
'sectionIndex_uid']) {
1834 $conf[
'section'] = $page[
'sectionIndex_uid'];
1836 $conf[
'linkAccessRestrictedPages'] = $this->mconf[
'showAccessRestrictedPages'] && $this->mconf[
'showAccessRestrictedPages'] !==
'NONE';
1837 $this->parent_cObj->typoLink(
'|',
$conf);
1838 $LD = $this->parent_cObj->lastTypoLinkLD;
1839 $LD[
'totalURL'] = $this->parent_cObj->lastTypoLinkUrl;
1855 $pid = (int)($pid ?: $this->
id);
1856 $basePageRow = $this->sys_page->getPage($pid);
1857 if (!is_array($basePageRow)) {
1860 $configuration = $this->mconf[
'sectionIndex.'];
1862 if (trim($configuration[
'useColPos']) !==
'' || is_array($configuration[
'useColPos.'])) {
1863 $useColPos =
$GLOBALS[
'TSFE']->cObj->stdWrap($configuration[
'useColPos'], $configuration[
'useColPos.']);
1864 $useColPos = (int)$useColPos;
1866 $selectSetup = array(
1867 'pidInList' => $pid,
1868 'orderBy' => $altSortField,
1869 'languageField' =>
'sys_language_uid',
1870 'where' => $useColPos >= 0 ?
'colPos=' . $useColPos :
'' 1872 if ($basePageRow[
'content_from_pid']) {
1875 $selectSetup[
'pidInList'] = $basePageRow[
'content_from_pid'];
1877 $resource = $this->parent_cObj->exec_getQuery(
'tt_content', $selectSetup);
1879 $message =
'SectionIndex: Query to fetch the content elements failed!';
1880 throw new \UnexpectedValueException($message, 1337334849);
1883 while ($row =
$GLOBALS[
'TYPO3_DB']->sql_fetch_assoc($resource)) {
1884 $this->sys_page->versionOL(
'tt_content', $row);
1885 if (
$GLOBALS[
'TSFE']->sys_language_contentOL && $basePageRow[
'_PAGES_OVERLAY_LANGUAGE']) {
1886 $row = $this->sys_page->getRecordOverlay(
'tt_content', $row, $basePageRow[
'_PAGES_OVERLAY_LANGUAGE'],
$GLOBALS[
'TSFE']->sys_language_contentOL);
1888 if ($this->mconf[
'sectionIndex.'][
'type'] !==
'all') {
1889 $doIncludeInSectionIndex = $row[
'sectionIndex'] >= 1;
1890 $doHeaderCheck = $this->mconf[
'sectionIndex.'][
'type'] ===
'header';
1891 $isValidHeader = ((int)$row[
'header_layout'] !== 100 || !empty($this->mconf[
'sectionIndex.'][
'includeHiddenHeaders'])) && trim($row[
'header']) !==
'';
1892 if (!$doIncludeInSectionIndex || $doHeaderCheck && !$isValidHeader) {
1896 if (is_array($row)) {
1906 $result[
$uid][
'header_layout'] = $row[
'header_layout'];
1912 $GLOBALS[
'TYPO3_DB']->sql_free_result($resource);
static implodeAttributes(array $arr, $xhtmlSafe=FALSE, $dontOmitBlankAttribs=FALSE)
static explodeUrl2Array($string, $multidim=FALSE)
static forceIntegerInRange($theInt, $min, $max=2000000000, $defaultValue=0)
static validEmail($email)
static intExplode($delimiter, $string, $removeEmptyValues=FALSE, $limit=0)
static canBeInterpretedAsInteger($var)
static getUserObj($classRef, $checkPrefix='', $silent=FALSE)
static makeInstance($className)
static hideIfDefaultLanguage($localizationConfiguration)
static hideIfNotTranslated($l18n_cfg_fieldValue)
const SHORTCUT_MODE_RANDOM_SUBPAGE
static inArray(array $in_array, $item)
debug($variable='', $name=' *variable *', $line=' *line *', $file=' *file *', $recursiveDepth=3, $debugLevel=E_DEBUG)
if(isset($ajaxID)) if(in_array( $ajaxID, $noUserAjaxIDs))
Re-apply pairs of single-quotes to the text.
if(!defined('TYPO3_MODE')) $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_userauth.php']['logoff_pre_processing'][]
static inList($list, $item)