ENHANCEMENT Ensure that non-writable assets files are notified during install

Fixes #7580
This commit is contained in:
Damian Mooyman 2017-11-15 13:30:19 +13:00
parent 5077eb8125
commit 8b063026f0
No known key found for this signature in database
GPG Key ID: 78B823A10DE27D1A

View File

@ -5,7 +5,10 @@ namespace SilverStripe\Dev\Install;
use BadMethodCallException;
use Exception;
use InvalidArgumentException;
use RecursiveDirectoryIterator;
use RecursiveIteratorIterator;
use SilverStripe\Core\TempFolder;
use SplFileInfo;
/**
* This class checks requirements
@ -292,8 +295,24 @@ class InstallRequirements
null
));
}
// Ensure root assets dir is writable
$this->requireWriteable('assets', array("File permissions", "Is the assets/ directory writeable?", null));
// Ensure all assets files are writable
$assetsDir = $this->getBaseDir() . 'assets';
$innerIterator = new RecursiveDirectoryIterator($assetsDir, RecursiveDirectoryIterator::SKIP_DOTS);
$iterator = new RecursiveIteratorIterator($innerIterator, RecursiveIteratorIterator::SELF_FIRST);
/** @var SplFileInfo $file */
foreach ($iterator as $file) {
$relativePath = substr($file->getPathname(), strlen($this->getBaseDir()));
$message = $file->isDir()
? "Is the {$relativePath} directory writeable?"
: "Is the {$relativePath} file writeable?";
$this->requireWriteable($relativePath, array("File permissions", $message, null));
}
try {
$tempFolder = TempFolder::getTempFolder($this->getBaseDir());
} catch (Exception $e) {