diff --git a/typo3/sysext/install/Classes/FolderStructure/DefaultFactory.php b/typo3/sysext/install/Classes/FolderStructure/DefaultFactory.php index 97e9417065207666a32ecc25a96952380168e07a..e682cddbbc0216e52782b6a243c61918037636af 100644 --- a/typo3/sysext/install/Classes/FolderStructure/DefaultFactory.php +++ b/typo3/sysext/install/Classes/FolderStructure/DefaultFactory.php @@ -98,33 +98,6 @@ class DefaultFactory ], ], ], - [ - 'name' => 'typo3conf', - 'type' => DirectoryNode::class, - 'targetPermission' => $directoryPermission, - 'children' => [ - [ - 'name' => 'ext', - 'type' => DirectoryNode::class, - 'targetPermission' => $directoryPermission, - ], - [ - 'name' => 'l10n', - 'type' => DirectoryNode::class, - 'targetPermission' => $directoryPermission, - ], - [ - 'name' => 'sites', - 'type' => DirectoryNode::class, - 'targetPermission' => $directoryPermission, - ], - [ - 'name' => 'system', - 'type' => DirectoryNode::class, - 'targetPermission' => $directoryPermission, - ], - ], - ], $this->getFileadminStructure(), ], ]; @@ -145,6 +118,36 @@ class DefaultFactory 'targetContentFile' => self::TEMPLATE_PATH . '/root-web-config', ]; } + + if (!Environment::isComposerMode()) { + $structure['children'][] = [ + 'name' => 'typo3conf', + 'type' => DirectoryNode::class, + 'targetPermission' => $directoryPermission, + 'children' => [ + [ + 'name' => 'ext', + 'type' => DirectoryNode::class, + 'targetPermission' => $directoryPermission, + ], + [ + 'name' => 'l10n', + 'type' => DirectoryNode::class, + 'targetPermission' => $directoryPermission, + ], + [ + 'name' => 'sites', + 'type' => DirectoryNode::class, + 'targetPermission' => $directoryPermission, + ], + [ + 'name' => 'system', + 'type' => DirectoryNode::class, + 'targetPermission' => $directoryPermission, + ], + ], + ]; + } } else { // This is when the public path is a subfolder (e.g. public/ or web/) $publicPath = substr(Environment::getPublicPath(), strlen(Environment::getProjectPath()) + 1); @@ -164,11 +167,6 @@ class DefaultFactory $this->getTemporaryAssetsFolderStructure(), ], ], - [ - 'name' => 'typo3conf', - 'type' => DirectoryNode::class, - 'targetPermission' => $directoryPermission, - ], $this->getFileadminStructure(), ]; @@ -189,6 +187,14 @@ class DefaultFactory ]; } + if (!Environment::isComposerMode()) { + $publicPathSubStructure[] = [ + 'name' => 'typo3conf', + 'type' => DirectoryNode::class, + 'targetPermission' => $directoryPermission, + ]; + } + $structure = [ // Note that root node has no trailing slash like all others 'name' => Environment::getProjectPath(), diff --git a/typo3/sysext/install/Classes/Report/InstallStatusReport.php b/typo3/sysext/install/Classes/Report/InstallStatusReport.php index c44c3c263269a6eed1ac1873b3f195929d2dc2c9..94117ce5ca2074bc735db6f0ac88b14c9a617762 100644 --- a/typo3/sysext/install/Classes/Report/InstallStatusReport.php +++ b/typo3/sysext/install/Classes/Report/InstallStatusReport.php @@ -91,7 +91,6 @@ final class InstallStatusReport implements StatusProviderInterface $varPath . '/transient/' => 2, $varPath . '/charset/' => 2, $varPath . '/lock/' => 2, - $sitePath . '/typo3conf/' => 2, Environment::getLabelsPath() => 0, $sitePath . '/' . $GLOBALS['TYPO3_CONF_VARS']['BE']['fileadminDir'] => -1, $sitePath . '/' . $GLOBALS['TYPO3_CONF_VARS']['BE']['fileadminDir'] . '_temp_/' => 0, @@ -100,6 +99,8 @@ final class InstallStatusReport implements StatusProviderInterface // Check for writable extension folder files in non-composer mode only if (!Environment::isComposerMode()) { $checkWritable[Environment::getExtensionsPath()] = 0; + $checkWritable[$sitePath . '/typo3conf/'] = 2; + } foreach ($checkWritable as $path => $requirementLevel) {