2 namespace TYPO3\CMS\Core\TypoScript;
371 $this->whereClause =
'AND deleted=0 ';
373 $this->whereClause .=
'AND hidden=0 ';
377 $this->simulationHiddenOrTime = 1;
379 $this->whereClause .=
'AND (starttime<=' .
$GLOBALS[
'SIM_ACCESS_TIME'] .
') AND (endtime=0 OR endtime>' .
$GLOBALS[
'SIM_ACCESS_TIME'] .
')';
381 $this->allowedPaths = array(
382 $GLOBALS[
'TYPO3_CONF_VARS'][
'BE'][
'fileadminDir'],
386 TYPO3_mainDir .
'ext/',
387 TYPO3_mainDir .
'sysext/',
390 if (
$GLOBALS[
'TYPO3_CONF_VARS'][
'FE'][
'addAllowedPaths']) {
392 foreach ($pathArr as $p) {
394 $this->allowedPaths[] = $p;
426 public function matching($cc)
428 if (is_array($cc[
'all'])) {
431 $matchObj->setRootline((array)$cc[
'rootLine']);
433 foreach ($cc[
'all'] as $key => $pre) {
434 if ($matchObj->match($pre)) {
452 public function start($theRootLine)
454 if (is_array($theRootLine)) {
466 if (serialize($this->rowSum) !== serialize($cc[
'rowSum'])) {
470 if (serialize($this->rootLine) === serialize($cc[
'rootLine'])) {
474 unset($cc[
'rootLine']);
479 if (isset($cc) && is_array($cc)) {
483 $cc = $this->matching($cc);
486 $hash = md5(serialize($cc));
489 $rowSumHash = md5(
'ROWSUM:' . serialize($this->rowSum));
490 $result = PageRepository::getHash($rowSumHash);
491 if (is_array($result)) {
493 $cc[
'all'] = $result;
495 $cc = $this->matching($cc);
497 $hash = md5(serialize($cc));
502 $setupData = PageRepository::getHash($hash);
504 if (is_array($setupData) && !$this->forceTemplateParsing) {
506 $this->setup = $setupData;
507 if ($this->tt_track) {
508 $this->
getTimeTracker()->setTSLogMessage(
'Using cached TS template data');
511 if ($this->tt_track) {
512 $this->
getTimeTracker()->setTSLogMessage(
'Not using any cached TS data');
516 $this->generateConfig();
523 $cc = $this->matching($cc);
525 $hash = md5(serialize($cc));
528 if ($this->tt_track) {
529 $this->
getTimeTracker()->setTSlogMessage(
'TS template size, serialized: ' . strlen(serialize($this->setup)) .
' bytes');
531 $rowSumHash = md5(
'ROWSUM:' . serialize($this->rowSum));
548 'mpvarHash_' . $mpvarHash
552 if ($this->rootId && $this->rootLine && $this->setup) {
553 $this->loaded =
true;
575 $this->constants = array();
576 $this->config = array();
577 $this->rowSum = array();
578 $this->hierarchyInfoToRoot = array();
579 $this->absoluteRootLine = $theRootLine;
580 $this->isDefaultTypoScriptAdded =
false;
582 reset($this->absoluteRootLine);
583 $c = count($this->absoluteRootLine);
584 for ($a = 0; $a < $c; $a++) {
586 if ($this->nextLevel) {
587 $res = $this->
getDatabaseConnection()->exec_SELECTquery(
'*',
'sys_template',
'uid=' . (
int)$this->nextLevel .
' ' . $this->whereClause);
588 $this->nextLevel = 0;
591 if (is_array($row)) {
592 $this->
processTemplate($row,
'sys_' . $row[
'uid'], $this->absoluteRootLine[$a][
'uid'],
'sys_' . $row[
'uid']);
593 $this->outermostRootlineIndexWithTemplate = $a;
600 if ($a == $c - 1 && $start_template_uid) {
601 $addC =
' AND uid=' . (int)$start_template_uid;
603 $res = $this->
getDatabaseConnection()->exec_SELECTquery(
'*',
'sys_template',
'pid=' . (
int)$this->absoluteRootLine[$a][
'uid'] . $addC .
' ' . $this->whereClause,
'',
'root DESC, sorting', 1);
606 if (is_array($row)) {
607 $this->
processTemplate($row,
'sys_' . $row[
'uid'], $this->absoluteRootLine[$a][
'uid'],
'sys_' . $row[
'uid']);
608 $this->outermostRootlineIndexWithTemplate = $a;
612 $this->rootLine[] = $this->absoluteRootLine[$a];
616 if (!$this->extensionStaticsProcessed && $this->processExtensionStatics) {
639 public function processTemplate($row, $idList, $pid, $templateID =
'', $templateParent =
'', $includePath =
'')
642 $this->rowSum[] = array($row[
'uid'], $row[
'title'], $row[
'tstamp']);
647 $clConst = $row[
'clear'] & 1;
648 $clConf = $row[
'clear'] & 2;
651 foreach ($this->constants as &$constantConfiguration) {
652 $constantConfiguration =
'';
654 unset($constantConfiguration);
655 $this->clearList_const = array();
659 foreach ($this->config as &$configConfiguration) {
660 $configConfiguration =
'';
662 unset($configConfiguration);
663 $this->hierarchyInfoToRoot = array();
664 $this->clearList_setup = array();
669 if (!$row[
'includeStaticAfterBasedOn']) {
674 if (trim($row[
'basedOn'])) {
679 foreach ($basedOnIds as $key => $basedOnId) {
681 unset($basedOnIds[$key]);
684 if (!empty($basedOnIds)) {
685 $subTemplates = $this->
getDatabaseConnection()->exec_SELECTgetRows(
'*',
'sys_template',
'uid IN (' . implode(
',', $basedOnIds) .
') ' . $this->whereClause,
'',
'',
'',
'uid');
687 foreach ($basedOnIds as $id) {
688 if (is_array($subTemplates[$id])) {
690 $this->
processTemplate($subTemplates[$id], $idList .
',sys_' . $id, $pid,
'sys_' . $id, $templateID);
696 if ($row[
'includeStaticAfterBasedOn']) {
700 $this->hierarchyInfo[] = ($this->hierarchyInfoToRoot[] = array(
701 'root' => trim($row[
'root']),
702 'next' => $row[
'nextLevel'],
703 'clConst' => $clConst,
705 'templateID' => $templateID,
706 'templateParent' => $templateParent,
707 'title' => $row[
'title'],
708 'uid' => $row[
'uid'],
709 'pid' => $row[
'pid'],
710 'configLines' => substr_count($row[
'config'], LF) + 1
713 $this->constants[] = $row[
'constants'];
714 $this->config[] = $row[
'config'];
715 $this->templateIncludePaths[] = $includePath;
717 $this->clearList_const[] = $templateID;
718 $this->clearList_setup[] = $templateID;
719 if (trim($row[
'sitetitle'])) {
720 $this->sitetitle = $row[
'sitetitle'];
723 if (trim($row[
'root'])) {
724 $this->rootId = $pid;
725 $this->rootLine = array();
728 if ($row[
'nextLevel']) {
729 $this->nextLevel = $row[
'nextLevel'];
731 $this->nextLevel = 0;
748 if (!is_array($this->rootLine) || empty($this->rootLine)) {
752 $fullRootLineByUid = array();
753 foreach ($fullRootLine as $rootLineData) {
754 $fullRootLineByUid[$rootLineData[
'uid']] = $rootLineData;
757 foreach ($this->rootLine as $level => $dataArray) {
758 $currentUid = $dataArray[
'uid'];
760 if (!array_key_exists($currentUid, $fullRootLineByUid)) {
761 throw new \RuntimeException(sprintf(
'The full rootLine does not contain data for the page with the uid %d that is contained in the template rootline.', $currentUid), 1370419654);
764 $this->rootLine[$level] = $fullRootLineByUid[$currentUid];
782 if (is_array(
$GLOBALS[
'TYPO3_CONF_VARS'][
'SC_OPTIONS'][
't3lib/class.t3lib_tstemplate.php'][
'includeStaticTypoScriptSources'])) {
784 'idList' => &$idList,
785 'templateId' => &$templateID,
789 foreach (
$GLOBALS[
'TYPO3_CONF_VARS'][
'SC_OPTIONS'][
't3lib/class.t3lib_tstemplate.php'][
'includeStaticTypoScriptSources'] as $_funcRef) {
794 if ($row[
'static_file_mode'] == 3 && substr($templateID, 0, 4) ==
'sys_' && $row[
'root']) {
798 if (trim($row[
'include_static_file'])) {
801 foreach ($include_static_fileArr as $ISF_file) {
802 if (substr($ISF_file, 0, 4) ==
'EXT:') {
803 list($ISF_extKey, $ISF_localPath) = explode(
'/', substr($ISF_file, 4), 2);
805 $ISF_localPath = rtrim($ISF_localPath,
'/') .
'/';
807 if (@is_dir($ISF_filePath)) {
808 $mExtKey = str_replace(
'_',
'', $ISF_extKey .
'/' . $ISF_localPath);
813 'include_static_file' => @file_exists(($ISF_filePath .
'include_static_file.txt')) ? implode(
',', array_unique(explode(
',',
GeneralUtility::getUrl($ISF_filePath .
'include_static_file.txt')))) :
'',
814 'title' => $ISF_file,
818 $this->
processTemplate($subrow, $idList .
',ext_' . $mExtKey, $pid,
'ext_' . $mExtKey, $templateID, $ISF_filePath);
826 if ($row[
'static_file_mode'] == 1 || $row[
'static_file_mode'] == 0 && substr($templateID, 0, 4) ==
'sys_' && $row[
'root']) {
830 if (is_array(
$GLOBALS[
'TYPO3_CONF_VARS'][
'SC_OPTIONS'][
't3lib/class.t3lib_tstemplate.php'][
'includeStaticTypoScriptSourcesAtEnd'])) {
832 'idList' => &$idList,
833 'templateId' => &$templateID,
837 foreach (
$GLOBALS[
'TYPO3_CONF_VARS'][
'SC_OPTIONS'][
't3lib/class.t3lib_tstemplate.php'][
'includeStaticTypoScriptSourcesAtEnd'] as $_funcRef) {
853 $extensions = array(
'.ts',
'.txt');
854 foreach ($extensions as $extension) {
855 $fileName = $filePath . $baseName . $extension;
856 if (@file_exists($fileName)) {
876 $this->extensionStaticsProcessed =
true;
879 foreach (
$GLOBALS[
'TYPO3_LOADED_EXT'] as $extKey => $files) {
880 if ((is_array($files) || $files instanceof \ArrayAccess) && ($files[
'ext_typoscript_constants.txt'] || $files[
'ext_typoscript_setup.txt'])) {
881 $mExtKey = str_replace(
'_',
'', $extKey);
883 'constants' => $files[
'ext_typoscript_constants.txt'] ?
GeneralUtility::getUrl($files[
'ext_typoscript_constants.txt']) :
'',
884 'config' => $files[
'ext_typoscript_setup.txt'] ?
GeneralUtility::getUrl($files[
'ext_typoscript_setup.txt']) :
'',
890 $this->
processTemplate($subrow, $idList .
',ext_' . $mExtKey, $pid,
'ext_' . $mExtKey, $templateID, $extPath);
908 $identifier = $subrow[
'uid'];
909 $subrow[
'config'] .=
$GLOBALS[
'TYPO3_CONF_VARS'][
'FE'][
'defaultTypoScript_setup.'][$identifier];
910 $subrow[
'constants'] .=
$GLOBALS[
'TYPO3_CONF_VARS'][
'FE'][
'defaultTypoScript_constants.'][$identifier];
912 if (in_array($identifier,
$GLOBALS[
'TYPO3_CONF_VARS'][
'FE'][
'contentRenderingTemplates'],
true)) {
913 $subrow[
'config'] .=
$GLOBALS[
'TYPO3_CONF_VARS'][
'FE'][
'defaultTypoScript_setup.'][
'defaultContentRendering'];
914 $subrow[
'constants'] .=
$GLOBALS[
'TYPO3_CONF_VARS'][
'FE'][
'defaultTypoScript_constants.'][
'defaultContentRendering'];
953 public function generateConfig()
968 $constants->breakPointLN = (int)$this->ext_constants_BRP;
969 $constants->setup = $this->mergeConstantsFromPageTSconfig(array());
972 $matchObj->setSimulateMatchConditions($this->matchAlternative);
973 $matchObj->setSimulateMatchResult((
bool)$this->matchAll);
975 foreach ($this->constants as $str) {
979 $this->parserErrors[
'constants'] =
$constants->errors;
981 $this->flatSetup = array();
989 $config->breakPointLN = (int)$this->ext_config_BRP;
998 foreach ($this->config as $str) {
1004 if ($this->tt_track) {
1005 $this->
getTimeTracker()->push(
'Substitute Constants (' . count($this->flatSetup) .
')');
1008 if ($this->tt_track) {
1013 if ($this->verbose) {
1014 if (strstr($all,
'{$')) {
1015 $theConstList = array();
1016 $findConst = explode(
'{$', $all);
1017 array_shift($findConst);
1018 foreach ($findConst as $constVal) {
1020 $theConstList[] =
'{$' . substr($constVal, 0, ($constLen + 1));
1022 if ($this->tt_track) {
1023 $this->
getTimeTracker()->setTSlogMessage(implode(
', ', $theConstList) .
': Constants may remain un-substituted!!', 2);
1029 if ($this->tt_track) {
1030 $this->
getTimeTracker()->setTSlogMessage(
'TypoScript template size as textfile: ' . strlen($all) .
' bytes');
1033 $config->parse($all, $matchObj);
1035 $this->parserErrors[
'config'] =
$config->errors;
1037 $this->setup =
$config->setup;
1038 if ($this->backend_info) {
1047 unset($this->setup[
'sitetitle']);
1048 unset($this->setup[
'sitetitle.']);
1051 unset($this->setup[
'types.']);
1052 unset($this->setup[
'types']);
1053 if (is_array($this->setup)) {
1054 foreach ($this->setup as $key => $value) {
1055 if ($value ==
'PAGE') {
1057 if (isset($this->setup[$key .
'.'][
'typeNum'])) {
1058 $typeNum = $this->setup[$key .
'.'][
'typeNum'];
1059 $this->setup[
'types.'][$typeNum] = $key;
1060 }
elseif (!isset($this->setup[
'types.'][0]) || !$this->setup[
'types.'][0]) {
1061 $this->setup[
'types.'][0] = $key;
1066 unset($this->setup[
'temp.']);
1069 $this->sections =
$config->sections;
1070 $this->sectionsMatch =
$config->sectionsMatch;
1083 if ($this->processIncludesHasBeenRun) {
1089 foreach ($this->constants as &$value) {
1090 $includeData = Parser\TypoScriptParser::checkIncludeLines($value, 1,
true, array_shift($paths));
1091 $files = array_merge($files, $includeData[
'files']);
1092 $value = $includeData[
'typoscript'];
1096 foreach ($this->config as &$value) {
1097 $includeData = Parser\TypoScriptParser::checkIncludeLines($value, 1,
true, array_shift($paths));
1098 $files = array_merge($files, $includeData[
'files']);
1099 $value = $includeData[
'typoscript'];
1103 if (!empty($files)) {
1104 $files = array_unique($files);
1105 foreach ($files as $file) {
1106 $this->rowSum[] = array($file, filemtime($file));
1110 $this->processIncludesHasBeenRun =
true;
1120 public function mergeConstantsFromPageTSconfig($constArray)
1122 $TSdataArray = array();
1124 $TSdataArray[] =
$GLOBALS[
'TYPO3_CONF_VARS'][
'BE'][
'defaultPageTSconfig'];
1126 $TSdataArray[] = $this->absoluteRootLine[$a][
'TSconfig'];
1129 $TSdataArray = Parser\TypoScriptParser::checkIncludeLines_array($TSdataArray);
1130 $userTS = implode(LF .
'[GLOBAL]' . LF, $TSdataArray);
1133 $parseObj->parse($userTS);
1134 if (is_array($parseObj->setup[
'TSFE.'][
'constants.'])) {
1150 if (is_array($setupArray)) {
1151 foreach ($setupArray as $key => $val) {
1154 if (is_array($val)) {
1157 $this->flatSetup[$prefix . $key] = $val;
1173 if ($this->tt_track) {
1174 $this->
getTimeTracker()->setTSlogMessage(
'Constants to substitute: ' . count($this->flatSetup));
1178 for ($i = 0; $i < 10 && !$noChange; $i++) {
1180 $all = preg_replace_callback(
'/\\{\\$(.[^}]*)\\}/', array($this,
'substituteConstantsCallBack'), $all);
1181 if ($old_all == $all) {
1198 return isset($this->flatSetup[$matches[1]]) && !is_array($this->flatSetup[$matches[1]]) ? $this->flatSetup[$matches[1]] : $matches[0];
1219 $splitCount = (int)$splitCount;
1221 if ($splitCount && is_array($conf)) {
1223 for ($aKey = 0; $aKey < $splitCount; $aKey++) {
1224 $conf2[$aKey] = array();
1227 foreach ($conf as $cKey => $val) {
1228 if (is_array($val)) {
1230 foreach ($tempConf as $aKey => $val2) {
1231 $conf2[$aKey][$cKey] = $val2;
1235 if ($cKey ===
'noTrimWrap' || (!strstr($val,
'|*|') && !strstr($val,
'||'))) {
1236 for ($aKey = 0; $aKey < $splitCount; $aKey++) {
1237 $conf2[$aKey][$cKey] = $val;
1240 $main = explode(
'|*|', $val);
1245 $first = explode(
'||', $main[0]);
1246 $firstC = count($first);
1250 $middle = explode(
'||', $main[1]);
1251 $middleC = count($middle);
1256 $last = explode(
'||', $main[2]);
1257 $lastC = count($last);
1260 for ($aKey = 0; $aKey < $splitCount; $aKey++) {
1261 if ($firstC && isset($first[$aKey])) {
1262 $value = $first[$aKey];
1264 $value = $middle[($aKey - $firstC) % $middleC];
1266 if ($lastC && $lastC >= $splitCount - $aKey) {
1267 $value = $last[$lastC - ($splitCount - $aKey)];
1269 $conf2[$aKey][$cKey] = trim($value);
1286 $file = trim($fileFromSetup);
1289 }
elseif (strpos($file,
'../') !==
false) {
1290 if ($this->tt_track) {
1291 $this->
getTimeTracker()->setTSlogMessage(
'File path "' . $file .
'" contained illegal string "../"!', 3);
1297 if (isset($this->fileCache[$hash])) {
1298 return $this->fileCache[$hash];
1302 $urlScheme = parse_url($file, PHP_URL_SCHEME);
1303 if ($urlScheme ===
'https' || $urlScheme ===
'http' || is_file(PATH_site . $file)) {
1310 if ($this->tt_track) {
1311 $this->
getTimeTracker()->setTSlogMessage(
'File "' . $fileFromSetup .
'" was not found!', 3);
1319 foreach ($this->allowedPaths as $val) {
1321 $this->fileCache[$hash] = $file;
1326 if ($this->tt_track) {
1327 $this->
getTimeTracker()->setTSlogMessage(
'"' . $file .
'" was not located in the allowed paths: (' . implode(
',', $this->allowedPaths) .
')', 3);
1342 public function printTitle($pageTitle, $noTitle =
false, $showTitleFirst =
false, $pageTitleSeparator =
'')
1344 $siteTitle = trim($this->setup[
'sitetitle']);
1345 $pageTitle = $noTitle ?
'' : $pageTitle;
1346 if ($showTitleFirst) {
1348 $siteTitle = $pageTitle;
1352 if ($pageTitle ===
'' || $siteTitle ===
'') {
1353 $pageTitleSeparator =
'';
1355 }
elseif (empty($pageTitleSeparator)) {
1356 $pageTitleSeparator =
': ';
1358 return $siteTitle . $pageTitleSeparator . $pageTitle;
1387 public function wrap($content, $wrap)
1391 $wrapArr = explode(
'|', $wrap);
1392 return trim($wrapArr[0]) . $content . trim($wrapArr[1]);
1407 if (substr(
$url, -1) ==
'?') {
1408 return substr(
$url, 0, -1);
1426 $setupArrKeys = array_keys($setupArr);
1427 foreach ($setupArrKeys as $key) {
1429 $keyArr[] = (int)$key;
1432 $keyArr = array_unique($keyArr);
1446 foreach ($this->rootLine as $page) {
1477 public function linkData($page, $oTarget, $no_cache, $script, $overrideArray = null, $addParams =
'', $typeOverride =
'', $targetDomain =
'')
1481 if (is_array($overrideArray)) {
1482 foreach ($overrideArray as $theKey => $theNewVal) {
1483 $addParams .=
'&real_' . $theKey .
'=' . rawurlencode($page[$theKey]);
1484 $page[$theKey] = $theNewVal;
1488 if (!strstr($addParams,
'&MP=')) {
1496 $addParams .=
'&MP=' . rawurlencode($m);
1504 if ($page[
'alias']) {
1505 $LD[
'url'] = $script .
'?id=' . rawurlencode($page[
'alias']);
1507 $LD[
'url'] = $script .
'?id=' . $page[
'uid'];
1510 $LD[
'target'] = trim($page[
'target']) ?: $oTarget;
1512 $typeNum = $this->setup[$LD[
'target'] .
'.'][
'typeNum'];
1516 if ((
string)$typeOverride !==
'') {
1517 $typeNum = $typeOverride;
1521 $LD[
'type'] =
'&type=' . (int)$typeNum;
1526 $LD[
'orig_type'] = $LD[
'type'];
1528 $LD[
'no_cache'] = trim($page[
'no_cache']) || $no_cache ?
'&no_cache=1' :
'';
1538 $LD[
'sectionIndex'] = $page[
'sectionIndex_uid'] ?
'#c' . $page[
'sectionIndex_uid'] :
'';
1542 if (is_array(
$GLOBALS[
'TYPO3_CONF_VARS'][
'SC_OPTIONS'][
't3lib/class.t3lib_tstemplate.php'][
'linkData-PostProc'])) {
1545 'args' => array(
'page' => $page,
'oTarget' => $oTarget,
'no_cache' => $no_cache,
'script' => $script,
'overrideArray' => $overrideArray,
'addParams' => $addParams,
'typeOverride' => $typeOverride,
'targetDomain' => $targetDomain),
1546 'typeNum' => $typeNum
1548 foreach (
$GLOBALS[
'TYPO3_CONF_VARS'][
'SC_OPTIONS'][
't3lib/class.t3lib_tstemplate.php'][
'linkData-PostProc'] as $_funcRef) {
1568 if (!is_array($this->MPmap)) {
1569 $this->MPmap = array();
1572 foreach ($rootPoints as $p) {
1573 $initMParray = array();
1575 $p = $this->rootLine[0][
'uid'];
1576 if ($this->rootLine[0][
'_MOUNT_OL'] && $this->rootLine[0][
'_MP_PARAM']) {
1577 $initMParray[] = $this->rootLine[0][
'_MP_PARAM'];
1585 if (is_array($this->MPmap[$pageId]) && !empty($this->MPmap[$pageId])) {
1586 return implode(
',', $this->MPmap[$pageId]);
1612 if (is_array($mount_info) && $mount_info[
'overlay']) {
1613 $MP_array[] = $mount_info[
'MPvar'];
1614 $id = $mount_info[
'mount_pid'];
1617 $this->MPmap[$id] = $MP_array;
1619 if (is_array($mount_info) && !$mount_info[
'overlay']) {
1620 $MP_array[] = $mount_info[
'MPvar'];
1621 $id = $mount_info[
'mount_pid'];
1624 if ($id && $level < 20) {
1625 $nextLevelAcc = array();
1630 $next_id = $row[
'uid'];
1631 $next_MP_array = $MP_array;
1634 if (is_array($mount_info) && $mount_info[
'overlay']) {
1635 $next_MP_array[] = $mount_info[
'MPvar'];
1636 $next_id = $mount_info[
'mount_pid'];
1638 if (!isset($this->MPmap[$next_id])) {
1640 $this->MPmap[$next_id] = $next_MP_array;
1642 if (is_array($mount_info) && !$mount_info[
'overlay']) {
1643 $next_MP_array[] = $mount_info[
'MPvar'];
1644 $next_id = $mount_info[
'mount_pid'];
1648 $nextLevelAcc[] = array($next_id, $next_MP_array);
1653 foreach ($nextLevelAcc as $pSet) {
1670 if (!$this->isDefaultTypoScriptAdded) {
1674 array_unshift($this->constants, (
string)
$GLOBALS[
'TYPO3_CONF_VARS'][
'FE'][
'defaultTypoScript_constants']);
1675 array_unshift($this->config, (
string)$GLOBALS[
'TYPO3_CONF_VARS'][
'FE'][
'defaultTypoScript_setup']);
1676 array_unshift($this->templateIncludePaths,
'');
1678 $rootTemplateId = $this->hierarchyInfo[count($this->hierarchyInfo)-1][
'templateID'];
1679 $defaultTemplateInfo = array(
1684 'templateID' =>
'_defaultTypoScript_',
1685 'templateParent' => $rootTemplateId,
1686 'title' =>
'SYS:TYPO3_CONF_VARS:FE:defaultTypoScript',
1687 'uid' =>
'_defaultTypoScript_',
1689 'configLines' => substr_count((
string)$GLOBALS[
'TYPO3_CONF_VARS'][
'FE'][
'defaultTypoScript_setup'], LF) + 1
1692 array_unshift($this->clearList_const, $defaultTemplateInfo[
'uid']);
1693 array_unshift($this->clearList_setup, $defaultTemplateInfo[
'uid']);
1694 array_unshift($this->hierarchyInfo, $defaultTemplateInfo);
1695 $this->isDefaultTypoScriptAdded =
true;