[TASK] Migrate PATH_site usages to Environment API - Part 1 63/57163/4
authorBenni Mack <benni@typo3.org>
Sat, 9 Jun 2018 19:04:22 +0000 (21:04 +0200)
committerGeorg Ringer <georg.ringer@gmail.com>
Thu, 14 Jun 2018 17:08:09 +0000 (19:08 +0200)
Use Environment::getPublicPath() and Environment::getProjectPath()
respectively, depending on the use-case instead of PATH_site.

Resolves: #85259
Releases: master
Change-Id: I7debc10332232f3b8a29c9b8def268f389d71b88
Reviewed-on: https://review.typo3.org/57163
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
Reviewed-by: Georg Ringer <georg.ringer@gmail.com>
Tested-by: Georg Ringer <georg.ringer@gmail.com>
typo3/sysext/core/Classes/Compatibility/LoadedExtensionArrayElement.php
typo3/sysext/core/Classes/DataHandling/DataHandler.php
typo3/sysext/core/Classes/Database/QueryGenerator.php
typo3/sysext/core/Classes/Database/QueryView.php
typo3/sysext/core/Classes/Database/ReferenceIndex.php
typo3/sysext/core/Classes/Database/SoftReferenceIndex.php
typo3/sysext/core/Classes/Http/MiddlewareStackResolver.php
typo3/sysext/core/Classes/Imaging/IconRegistry.php
typo3/sysext/core/Classes/Integrity/DatabaseIntegrityCheck.php
typo3/sysext/core/Classes/LinkHandling/LegacyLinkNotationConverter.php
typo3/sysext/core/Classes/Page/PageRenderer.php

index 6920a96..84e9361 100644 (file)
@@ -14,6 +14,7 @@ namespace TYPO3\CMS\Core\Compatibility;
  * The TYPO3 project - inspiring people to share!
  */
 
+use TYPO3\CMS\Core\Core\Environment;
 use TYPO3\CMS\Core\Package\PackageInterface;
 
 /**
@@ -65,7 +66,7 @@ class LoadedExtensionArrayElement implements \IteratorAggregate, \ArrayAccess, \
      */
     protected function initializeBasicExtensionInformation()
     {
-        $pathSite = PATH_site;
+        $pathSite = Environment::getPublicPath() . '/';
         $pathSiteLength = strlen($pathSite);
         $absolutePackagePath = $this->package->getPackagePath();
         if (substr($absolutePackagePath, 0, $pathSiteLength) === $pathSite) {
index b172163..458faa1 100644 (file)
@@ -34,6 +34,7 @@ use TYPO3\CMS\Core\Configuration\FlexForm\Exception\InvalidParentRowRootExceptio
 use TYPO3\CMS\Core\Configuration\FlexForm\Exception\InvalidPointerFieldValueException;
 use TYPO3\CMS\Core\Configuration\FlexForm\FlexFormTools;
 use TYPO3\CMS\Core\Configuration\Richtext;
+use TYPO3\CMS\Core\Core\Environment;
 use TYPO3\CMS\Core\Database\Connection;
 use TYPO3\CMS\Core\Database\ConnectionPool;
 use TYPO3\CMS\Core\Database\Query\QueryHelper;
@@ -2193,7 +2194,7 @@ class DataHandler implements LoggerAwareInterface
                 // For logging..
                 $propArr = $this->getRecordProperties($table, $id);
                 // Get destination path:
-                $dest = PATH_site . $tcaFieldConf['uploadfolder'];
+                $dest = Environment::getPublicPath() . '/' . $tcaFieldConf['uploadfolder'];
                 // If we are updating:
                 if ($status === 'update') {
                     // Traverse the input values and convert to absolute filenames in case the update happens to an autoVersionized record.
@@ -2209,7 +2210,7 @@ class DataHandler implements LoggerAwareInterface
                         foreach ($valueArray as $key => $theFile) {
                             // If it is an already attached file...
                             if ($theFile === PathUtility::basename($theFile)) {
-                                $valueArray[$key] = PATH_site . $tcaFieldConf['uploadfolder'] . '/' . $theFile;
+                                $valueArray[$key] = Environment::getPublicPath() . '/' . $tcaFieldConf['uploadfolder'] . '/' . $theFile;
                             }
                         }
                     }
@@ -2361,10 +2362,10 @@ class DataHandler implements LoggerAwareInterface
                         if ($this->alternativeFilePath[$theFile]) {
                             // If alternative File Path is set for the file, then it was an import
                             // don't import the file if it already exists
-                            if (@is_file(PATH_site . $this->alternativeFilePath[$theFile])) {
-                                $theFile = PATH_site . $this->alternativeFilePath[$theFile];
+                            if (@is_file(Environment::getPublicPath() . '/' . $this->alternativeFilePath[$theFile])) {
+                                $theFile = Environment::getPublicPath() . '/' . $this->alternativeFilePath[$theFile];
                             } elseif (@is_file($theFile)) {
-                                $dest = PathUtility::dirname(PATH_site . $this->alternativeFilePath[$theFile]);
+                                $dest = PathUtility::dirname(Environment::getPublicPath() . '/' . $this->alternativeFilePath[$theFile]);
                                 if (!@is_dir($dest)) {
                                     GeneralUtility::mkdir_deep($dest);
                                 }
@@ -2380,7 +2381,7 @@ class DataHandler implements LoggerAwareInterface
                                     $fI = GeneralUtility::split_fileref($theEndFileName);
                                     // Check for allowed extension:
                                     if ($this->fileFunc->checkIfAllowed($fI['fileext'], $dest, $theEndFileName)) {
-                                        $theDestFile = PATH_site . $this->alternativeFilePath[$theFile];
+                                        $theDestFile = Environment::getPublicPath() . '/' . $this->alternativeFilePath[$theFile];
                                         // Write the file:
                                         if ($theDestFile) {
                                             GeneralUtility::upload_copy_move($theFile, $theDestFile);
@@ -2410,7 +2411,7 @@ class DataHandler implements LoggerAwareInterface
                         }
                         if (!empty($theFile)) {
                             $theFile = GeneralUtility::fixWindowsFilePath($theFile);
-                            if (GeneralUtility::isFirstPartOfStr($theFile, PATH_site)) {
+                            if (GeneralUtility::isFirstPartOfStr($theFile, Environment::getPublicPath())) {
                                 $theFile = PathUtility::stripPathSitePrefix($theFile);
                             }
                         }
@@ -4103,7 +4104,7 @@ class DataHandler implements LoggerAwareInterface
         // Traverse this array of files:
         $uploadFolder = $conf['internal_type'] === 'file' ? $conf['uploadfolder'] : '';
         // Prepend absolute paths to files
-        $dest = PATH_site . $uploadFolder;
+        $dest = Environment::getPublicPath() . '/' . $uploadFolder;
         $newValue = [];
         foreach ($theFileValues as $file) {
             if (trim($file)) {
@@ -4175,9 +4176,9 @@ class DataHandler implements LoggerAwareInterface
                 continue;
             }
             $fileInfo = [];
-            $fileInfo['exists'] = @is_file(PATH_site . $rteFileRecord['ref_string']);
+            $fileInfo['exists'] = @is_file(Environment::getPublicPath() . '/' . $rteFileRecord['ref_string']);
             $fileInfo['original'] = mb_substr($rteFileRecord['ref_string'], 0, -mb_strlen($filename)) . 'RTEmagicP_' . preg_replace('/\\.[[:alnum:]]+$/', '', mb_substr($filename, 10));
-            $fileInfo['original_exists'] = @is_file(PATH_site . $fileInfo['original']);
+            $fileInfo['original_exists'] = @is_file(Environment::getPublicPath() . '/' . $fileInfo['original']);
             // CODE from tx_impexp and class.rte_images.php adapted for use here:
             if (!$fileInfo['exists'] || !$fileInfo['original_exists']) {
                 $this->newlog('Trying to copy RTEmagic files (' . $rteFileRecord['ref_string'] . ' / ' . $fileInfo['original'] . ') but one or both were missing', 1);
@@ -4187,17 +4188,17 @@ class DataHandler implements LoggerAwareInterface
             $dirPrefix = PathUtility::dirname($rteFileRecord['ref_string']) . '/';
             $rteOrigName = PathUtility::basename($fileInfo['original']);
             // If filename looks like an RTE file, and the directory is in "uploads/", then process as a RTE file!
-            if ($rteOrigName && GeneralUtility::isFirstPartOfStr($dirPrefix, 'uploads/') && @is_dir(PATH_site . $dirPrefix)) {
+            if ($rteOrigName && GeneralUtility::isFirstPartOfStr($dirPrefix, 'uploads/') && @is_dir(Environment::getPublicPath() . '/' . $dirPrefix)) {
                 // RTE:
                 // From the "original" RTE filename, produce a new "original" destination filename which is unused.
-                $origDestName = $this->fileFunc->getUniqueName($rteOrigName, PATH_site . $dirPrefix);
+                $origDestName = $this->fileFunc->getUniqueName($rteOrigName, Environment::getPublicPath() . '/' . $dirPrefix);
                 // Create copy file name:
                 $pI = pathinfo($rteFileRecord['ref_string']);
                 $copyDestName = PathUtility::dirname($origDestName) . '/RTEmagicC_' . mb_substr(PathUtility::basename($origDestName), 10) . '.' . $pI['extension'];
                 if (!@is_file($copyDestName) && !@is_file($origDestName) && $origDestName === GeneralUtility::getFileAbsFileName($origDestName) && $copyDestName === GeneralUtility::getFileAbsFileName($copyDestName)) {
                     // Making copies:
-                    GeneralUtility::upload_copy_move(PATH_site . $fileInfo['original'], $origDestName);
-                    GeneralUtility::upload_copy_move(PATH_site . $rteFileRecord['ref_string'], $copyDestName);
+                    GeneralUtility::upload_copy_move(Environment::getPublicPath() . '/' . $fileInfo['original'], $origDestName);
+                    GeneralUtility::upload_copy_move(Environment::getPublicPath() . '/' . $rteFileRecord['ref_string'], $copyDestName);
                     clearstatcache();
                     // Register this:
                     $this->RTEmagic_copyIndex[$rteFileRecord['tablename']][$rteFileRecord['recuid']][$rteFileRecord['field']][$rteFileRecord['ref_string']] = PathUtility::stripPathSitePrefix($copyDestName);
@@ -8293,7 +8294,7 @@ class DataHandler implements LoggerAwareInterface
     {
         $uploadFolder = $GLOBALS['TCA'][$table]['columns'][$field]['config']['uploadfolder'];
         if ($uploadFolder && trim($filelist) && $GLOBALS['TCA'][$table]['columns'][$field]['config']['internal_type'] === 'file') {
-            $uploadPath = PATH_site . $uploadFolder;
+            $uploadPath = Environment::getPublicPath() . '/' . $uploadFolder;
             $fileArray = GeneralUtility::trimExplode(',', $filelist, true);
             foreach ($fileArray as $theFile) {
                 $theFileFullPath = $uploadPath . '/' . $theFile;
index 2bc52c4..5116720 100644 (file)
@@ -17,6 +17,7 @@ namespace TYPO3\CMS\Core\Database;
 use TYPO3\CMS\Backend\Module\BaseScriptClass;
 use TYPO3\CMS\Backend\Utility\BackendUtility;
 use TYPO3\CMS\Core\Authentication\BackendUserAuthentication;
+use TYPO3\CMS\Core\Core\Environment;
 use TYPO3\CMS\Core\Database\Query\QueryHelper;
 use TYPO3\CMS\Core\Database\Query\Restriction\DeletedRestriction;
 use TYPO3\CMS\Core\Localization\LanguageService;
@@ -791,7 +792,7 @@ class QueryGenerator
                     }
                 }
             }
-            $d = dir(PATH_site . $fieldSetup['uploadfolder']);
+            $d = dir(Environment::getPublicPath() . '/' . $fieldSetup['uploadfolder']);
             while (false !== ($entry = $d->read())) {
                 if ($entry === '.' || $entry === '..') {
                     continue;
index 2765910..87d66ac 100644 (file)
@@ -17,6 +17,7 @@ namespace TYPO3\CMS\Core\Database;
 use Doctrine\DBAL\DBALException;
 use TYPO3\CMS\Backend\Utility\BackendUtility;
 use TYPO3\CMS\Core\Authentication\BackendUserAuthentication;
+use TYPO3\CMS\Core\Core\Environment;
 use TYPO3\CMS\Core\Database\Query\QueryHelper;
 use TYPO3\CMS\Core\Database\Query\Restriction\DeletedRestriction;
 use TYPO3\CMS\Core\Imaging\Icon;
@@ -936,7 +937,7 @@ class QueryView
         $fieldSetup = $conf;
         $out = '';
         if ($fieldSetup['type'] === 'files') {
-            $d = dir(PATH_site . $fieldSetup['uploadfolder']);
+            $d = dir(Environment::getPublicPath() . '/' . $fieldSetup['uploadfolder']);
             while (false !== ($entry = $d->read())) {
                 if ($entry === '.' || $entry === '..') {
                     continue;
index 8b7b960..6b1118e 100644 (file)
@@ -20,6 +20,7 @@ use Psr\Log\LoggerAwareTrait;
 use TYPO3\CMS\Backend\Utility\BackendUtility;
 use TYPO3\CMS\Core\Cache\CacheManager;
 use TYPO3\CMS\Core\Configuration\FlexForm\FlexFormTools;
+use TYPO3\CMS\Core\Core\Environment;
 use TYPO3\CMS\Core\DataHandling\DataHandler;
 use TYPO3\CMS\Core\Messaging\FlashMessage;
 use TYPO3\CMS\Core\Messaging\FlashMessageService;
@@ -435,9 +436,9 @@ class ReferenceIndex implements LoggerAwareInterface
      * @param string $field Fieldname of source record (where reference is located)
      * @param string $flexPointer Pointer to location inside FlexForm structure where reference is located in [field]
      * @param int $deleted Whether record is deleted-flagged or not
-     * @param string $ref_table For database references; the tablename the reference points to. Special keyword "_FILE" indicates that "ref_string" is a file reference either absolute or relative to PATH_site. Special keyword "_STRING" indicates some special usage (typ. softreference) where "ref_string" is used for the value.
+     * @param string $ref_table For database references; the tablename the reference points to. Special keyword "_FILE" indicates that "ref_string" is a file reference either absolute or relative to Environment::getPublicPath(). Special keyword "_STRING" indicates some special usage (typ. softreference) where "ref_string" is used for the value.
      * @param int $ref_uid For database references; The UID of the record (zero "ref_table" is "_FILE" or "_STRING")
-     * @param string $ref_string For "_FILE" or "_STRING" references: The filepath (relative to PATH_site or absolute) or other string.
+     * @param string $ref_string For "_FILE" or "_STRING" references: The filepath (relative to Environment::getPublicPath() or absolute) or other string.
      * @param int $sort The sorting order of references if many (the "group" or "select" TCA types). -1 if no sorting order is specified.
      * @param string $softref_key If the reference is a soft reference, this is the soft reference parser key. Otherwise empty.
      * @param string $softref_id Soft reference ID for key. Might be useful for replace operations.
@@ -474,7 +475,7 @@ class ReferenceIndex implements LoggerAwareInterface
      * @param int $deleted Whether record is deleted-flagged or not
      * @param string $referencedTable In database references the tablename the reference points to. Keyword "_FILE" indicates that $referenceString is a file reference, keyword "_STRING" indicates special usage (typ. SoftReference) in $referenceString
      * @param int $referencedUid In database references the UID of the record (zero $referencedTable is "_FILE" or "_STRING")
-     * @param string $referenceString For "_FILE" or "_STRING" references: The filepath (relative to PATH_site or absolute) or other string.
+     * @param string $referenceString For "_FILE" or "_STRING" references: The filepath (relative to Environment::getPublicPath() or absolute) or other string.
      * @param int $sort The sorting order of references if many (the "group" or "select" TCA types). -1 if no sorting order is specified.
      * @param string $softReferenceKey If the reference is a soft reference, this is the soft reference parser key. Otherwise empty.
      * @param string $softReferenceId Soft reference ID for key. Might be useful for replace operations.
@@ -589,7 +590,7 @@ class ReferenceIndex implements LoggerAwareInterface
     {
         foreach ($items as $sort => $i) {
             $filePath = $i['ID_absFile'];
-            if (GeneralUtility::isFirstPartOfStr($filePath, PATH_site)) {
+            if (GeneralUtility::isFirstPartOfStr($filePath, Environment::getPublicPath())) {
                 $filePath = PathUtility::stripPathSitePrefix($filePath);
             }
             $this->relations[] = $this->createEntryDataUsingRecord(
@@ -1181,7 +1182,7 @@ class ReferenceIndex implements LoggerAwareInterface
                 $dataArray[$refRec['tablename']][$refRec['recuid']][$refRec['field']] = implode(',', $saveValue);
             }
         } else {
-            return 'ERROR: either "' . $refRec['ref_table'] . '" was not "_FILE" or file PATH_site+"' . $refRec['ref_string'] . '" did not match that of the record ("' . $itemArray[$refRec['sorting']]['ID_absFile'] . '") in sorting index "' . $refRec['sorting'] . '"';
+            return 'ERROR: either "' . $refRec['ref_table'] . '" was not "_FILE" or file Environment::getPublicPath()+"' . $refRec['ref_string'] . '" did not match that of the record ("' . $itemArray[$refRec['sorting']]['ID_absFile'] . '") in sorting index "' . $refRec['sorting'] . '"';
         }
 
         return false;
@@ -1306,15 +1307,12 @@ class ReferenceIndex implements LoggerAwareInterface
     /**
      * Returns destination path to an upload folder given by $folder
      *
-     * @param string $folder Folder relative to PATH_site
-     * @return string Input folder prefixed with PATH_site. No checking for existence is done. Output must be a folder without trailing slash.
+     * @param string $folder Folder relative to TYPO3's public folder ("site path")
+     * @return string Input folder prefixed with Environment::getPublicPath(). No checking for existence is done. Output must be a folder without trailing slash.
      */
     public function destPathFromUploadFolder($folder)
     {
-        if (!$folder) {
-            return substr(PATH_site, 0, -1);
-        }
-        return PATH_site . $folder;
+        return Environment::getPublicPath() . ($folder ? '/' . $folder : '');
     }
 
     /**
index 994cb5b..5c8762e 100644 (file)
@@ -14,6 +14,7 @@ namespace TYPO3\CMS\Core\Database;
  * The TYPO3 project - inspiring people to share!
  */
 
+use TYPO3\CMS\Core\Core\Environment;
 use TYPO3\CMS\Core\Database\Query\Restriction\BackendWorkspaceRestriction;
 use TYPO3\CMS\Core\Database\Query\Restriction\DeletedRestriction;
 use TYPO3\CMS\Core\LinkHandling\LinkService;
@@ -170,7 +171,7 @@ class SoftReferenceIndex
                 $srcRef = htmlspecialchars_decode($attribs[0]['src']);
                 $pI = pathinfo($srcRef);
                 // If it looks like a local image, continue. Otherwise ignore it.
-                $absPath = GeneralUtility::getFileAbsFileName(PATH_site . $srcRef);
+                $absPath = GeneralUtility::getFileAbsFileName(Environment::getPublicPath() . '/' . $srcRef);
                 if (!$pI['scheme'] && !$pI['query'] && $absPath && $srcRef !== 'clear.gif') {
                     // Initialize the element entry with info text here:
                     $tokenID = $this->makeTokenID($k);
@@ -485,7 +486,7 @@ class SoftReferenceIndex
         $containsSlash = strstr($rootFileDat, '/');
         $rFD_fI = pathinfo($rootFileDat);
         $fileExtension = strtolower($rFD_fI['extension']);
-        if (!$containsSlash && trim($rootFileDat) && (@is_file(PATH_site . $rootFileDat) || $fileExtension === 'php' || $fileExtension === 'html' || $fileExtension === 'htm')) {
+        if (!$containsSlash && trim($rootFileDat) && (@is_file(Environment::getPublicPath() . '/' . $rootFileDat) || $fileExtension === 'php' || $fileExtension === 'html' || $fileExtension === 'htm')) {
             $isLocalFile = 1;
         } elseif ($containsSlash) {
             // Adding this so realurl directories are linked right (non-existing).
index 107d7ee..8d33e41 100644 (file)
@@ -16,6 +16,7 @@ namespace TYPO3\CMS\Core\Http;
  */
 
 use TYPO3\CMS\Core\Cache\Frontend\PhpFrontend as PhpFrontendCache;
+use TYPO3\CMS\Core\Core\Environment;
 use TYPO3\CMS\Core\Package\PackageManager;
 use TYPO3\CMS\Core\Service\DependencyOrderingService;
 
@@ -138,6 +139,6 @@ class MiddlewareStackResolver
      */
     protected function getCacheIdentifier(string $stackName): string
     {
-        return 'middlewares_' . $stackName . '_' . sha1(TYPO3_version . PATH_site);
+        return 'middlewares_' . $stackName . '_' . sha1(TYPO3_version . Environment::getProjectPath());
     }
 }
index 625bbf2..36dc239 100644 (file)
@@ -16,6 +16,7 @@ namespace TYPO3\CMS\Core\Imaging;
 
 use Symfony\Component\Finder\Finder;
 use TYPO3\CMS\Core\Cache\CacheManager;
+use TYPO3\CMS\Core\Core\Environment;
 use TYPO3\CMS\Core\Exception;
 use TYPO3\CMS\Core\Imaging\IconProvider\BitmapIconProvider;
 use TYPO3\CMS\Core\Imaging\IconProvider\FontawesomeIconProvider;
@@ -554,7 +555,7 @@ class IconRegistry implements SingletonInterface
      */
     protected function getCachedBackendIcons()
     {
-        $cacheIdentifier = 'BackendIcons_' . sha1(TYPO3_version . PATH_site . 'BackendIcons');
+        $cacheIdentifier = 'BackendIcons_' . sha1(TYPO3_version . Environment::getProjectPath() . 'BackendIcons');
         /** @var \TYPO3\CMS\Core\Cache\Frontend\VariableFrontend $assetsCache */
         $assetsCache = GeneralUtility::makeInstance(CacheManager::class)->getCache('assets');
         $cacheEntry = $assetsCache->get($cacheIdentifier);
index ace5a16..d636670 100644 (file)
@@ -16,6 +16,7 @@ namespace TYPO3\CMS\Core\Integrity;
 
 use Doctrine\DBAL\Types\Type;
 use TYPO3\CMS\Backend\Utility\BackendUtility;
+use TYPO3\CMS\Core\Core\Environment;
 use TYPO3\CMS\Core\Database\Connection;
 use TYPO3\CMS\Core\Database\ConnectionPool;
 use TYPO3\CMS\Core\Database\Query\Expression\ExpressionBuilder;
@@ -588,7 +589,7 @@ class DatabaseIntegrityCheck
         }
         $this->checkFileRefs = $newCheckFileRefs;
         foreach ($this->checkFileRefs as $folder => $fileArr) {
-            $path = PATH_site . $folder;
+            $path = Environment::getPublicPath() . '/' . $folder;
             if (@is_dir($path) && @is_readable($path)) {
                 $d = dir($path);
                 while ($entry = $d->read()) {
@@ -618,7 +619,7 @@ class DatabaseIntegrityCheck
                     if (preg_match('/^' . preg_quote($GLOBALS['TYPO3_CONF_VARS']['BE']['fileadminDir'], '/') . '/', $folder)) {
                         $file = $folder . '/' . $file;
                         $folder = '';
-                        $path = substr(PATH_site, 0, -1);
+                        $path = Environment::getPublicPath();
                     }
                     $temp = $this->whereIsFileReferenced($folder, $file);
                     $tempList = '';
index 537a481..8ce1064 100644 (file)
@@ -15,6 +15,7 @@ namespace TYPO3\CMS\Core\LinkHandling;
  * The TYPO3 project - inspiring people to share!
  */
 
+use TYPO3\CMS\Core\Core\Environment;
 use TYPO3\CMS\Core\Resource\Exception\ResourceDoesNotExistException;
 use TYPO3\CMS\Core\Resource\File;
 use TYPO3\CMS\Core\Resource\Folder;
@@ -98,7 +99,7 @@ class LegacyLinkNotationConverter
                 if (!$containsSlash
                     && trim($rootFileDat)
                     && (
-                        @is_file(PATH_site . $rootFileDat)
+                        @is_file(Environment::getPublicPath() . '/' . $rootFileDat)
                         || $fileExtension === 'php'
                         || $fileExtension === 'html'
                         || $fileExtension === 'htm'
index e258847..2923c03 100644 (file)
@@ -18,6 +18,7 @@ use TYPO3\CMS\Backend\Routing\Router;
 use TYPO3\CMS\Backend\Routing\UriBuilder;
 use TYPO3\CMS\Core\Cache\CacheManager;
 use TYPO3\CMS\Core\Cache\Frontend\FrontendInterface;
+use TYPO3\CMS\Core\Core\Environment;
 use TYPO3\CMS\Core\Localization\LocalizationFactory;
 use TYPO3\CMS\Core\MetaTag\MetaTagManagerRegistry;
 use TYPO3\CMS\Core\Service\MarkerBasedTemplateService;
@@ -1400,7 +1401,7 @@ class PageRenderer implements \TYPO3\CMS\Core\SingletonInterface
         if ($isDevelopment) {
             $requireJsConfig['urlArgs'] = 'bust=' . $GLOBALS['EXEC_TIME'];
         } else {
-            $requireJsConfig['urlArgs'] = 'bust=' . GeneralUtility::hmac(TYPO3_version . PATH_site);
+            $requireJsConfig['urlArgs'] = 'bust=' . GeneralUtility::hmac(TYPO3_version . Environment::getProjectPath());
         }
         $corePath = ExtensionManagementUtility::extPath('core', 'Resources/Public/JavaScript/Contrib/');
         $corePath = PathUtility::getAbsoluteWebPath($corePath);