92 if (!$this->installationWritableDirectories) {
103 $this->installationWritableDirectories[
$code] = $this->directoryList->getPath(
$code);
106 return array_values($this->installationWritableDirectories);
116 if (!$this->applicationNonWritableDirectories) {
121 $this->applicationNonWritableDirectories[
$code] = $this->directoryList->getPath(
$code);
124 return array_values($this->applicationNonWritableDirectories);
134 if (!$this->installationCurrentWritableDirectories) {
135 foreach ($this->installationWritableDirectories as
$code =>
$path) {
137 if ($this->checkRecursiveDirectories(
$path)) {
138 $this->installationCurrentWritableDirectories[] =
$path;
141 $this->nonWritablePathsInDirectories[
$path] = [
$path];
154 private function checkRecursiveDirectories($directory)
157 $directoryIterator = new \RecursiveIteratorIterator(
158 new \RecursiveDirectoryIterator($directory, \RecursiveDirectoryIterator::SKIP_DOTS),
159 \RecursiveIteratorIterator::CHILD_FIRST
161 $noWritableFilesFolders = [
166 $directoryIterator =
new Filter($directoryIterator, $noWritableFilesFolders);
175 $directoryIterator->setMaxDepth(1);
177 $foundNonWritable =
false;
180 foreach ($directoryIterator as $subDirectory) {
181 if (!$subDirectory->isWritable() && !$subDirectory->isLink()) {
182 $this->nonWritablePathsInDirectories[$directory][] = $subDirectory->getPathname();
183 $foundNonWritable =
true;
186 }
catch (\UnexpectedValueException $e) {
189 return !$foundNonWritable;
199 if (!$this->applicationCurrentNonWritableDirectories) {
200 foreach ($this->applicationNonWritableDirectories as
$code =>
$path) {
202 $this->applicationCurrentNonWritableDirectories[] =
$path;
217 $directory = $this->filesystem->getDirectoryWrite(
$code);
229 $directory = $this->filesystem->getDirectoryWrite(
$code);
241 if (!$directory->isExist() || !$directory->isDirectory() || !$directory->isReadable()) {
258 foreach (array_diff(
$required, $current) as $missingPath) {
259 if (isset($this->nonWritablePathsInDirectories[$missingPath])) {
261 $missingPaths[$missingPath] = $this->nonWritablePathsInDirectories[$missingPath];
263 $missingPaths = array_merge(
265 $this->nonWritablePathsInDirectories[$missingPath]
272 $missingPaths = array_merge(
$required, $missingPaths);
274 return $missingPaths;
284 $writableDirectories = [
289 $requireWritePermission = [];
290 foreach ($writableDirectories as
$code) {
293 if (!$this->checkRecursiveDirectories(
$path)) {
294 $requireWritePermission[] =
$path;
299 return $requireWritePermission;
getApplicationCurrentNonWritableDirectories()
$nonWritablePathsInDirectories
isReadableDirectory($directory)
$applicationCurrentNonWritableDirectories
$installationWritableDirectories
__construct(Filesystem $filesystem, DirectoryList $directoryList, State $state=null)
$applicationNonWritableDirectories
getUnnecessaryWritableDirectoriesForApplication()
getMissingWritablePathsForInstallation($associative=false)
getInstallationWritableDirectories()
getApplicationNonWritableDirectories()
getInstallationCurrentWritableDirectories()
$installationCurrentWritableDirectories
getMissingWritableDirectoriesForDbUpgrade()
getMissingWritableDirectoriesForInstallation()