|
7 | 7 | namespace Magento\Setup\Model;
|
8 | 8 |
|
9 | 9 | use Magento\Framework\App\Filesystem\DirectoryList;
|
| 10 | +use Magento\Framework\Backup\Filesystem\Iterator\Filter; |
10 | 11 | use Magento\Framework\Filesystem;
|
11 | 12 |
|
12 | 13 | class FilePermissions
|
@@ -118,25 +119,32 @@ public function getInstallationCurrentWritableDirectories()
|
118 | 119 | }
|
119 | 120 |
|
120 | 121 | /**
|
121 |
| - * Check all sub-directories |
| 122 | + * Check all sub-directories and files except for var/generation and var/di |
122 | 123 | *
|
123 | 124 | * @param string $directory
|
124 | 125 | * @return bool
|
125 | 126 | */
|
126 | 127 | private function checkRecursiveDirectories($directory)
|
127 | 128 | {
|
128 |
| - $skipDirs = ['..', '.']; |
129 | 129 | $directoryIterator = new \RecursiveIteratorIterator(
|
130 |
| - new \RecursiveDirectoryIterator($directory), |
131 |
| - \RecursiveIteratorIterator::LEAVES_ONLY | \RecursiveIteratorIterator::CATCH_GET_CHILD |
| 130 | + new \RecursiveDirectoryIterator($directory, \RecursiveDirectoryIterator::SKIP_DOTS), |
| 131 | + \RecursiveIteratorIterator::CHILD_FIRST |
132 | 132 | );
|
133 |
| - foreach ($directoryIterator as $subDirectory) { |
134 |
| - if (in_array($subDirectory->getFilename(), $skipDirs)) { |
135 |
| - continue; |
136 |
| - } |
137 |
| - if ($subDirectory->isDir() && !$subDirectory->isWritable()) { |
138 |
| - return false; |
| 133 | + $noWritableFilesFolders = [ |
| 134 | + $this->directoryList->getPath(DirectoryList::GENERATION) . '/', |
| 135 | + $this->directoryList->getPath(DirectoryList::DI) .'/' |
| 136 | + ]; |
| 137 | + |
| 138 | + $directoryIterator = new Filter($directoryIterator, $noWritableFilesFolders); |
| 139 | + |
| 140 | + try { |
| 141 | + foreach ($directoryIterator as $subDirectory) { |
| 142 | + if (!$subDirectory->isWritable()) { |
| 143 | + return false; |
| 144 | + } |
139 | 145 | }
|
| 146 | + } catch (\UnexpectedValueException $e) { |
| 147 | + return false; |
140 | 148 | }
|
141 | 149 | return true;
|
142 | 150 | }
|
|
0 commit comments