Merge pull request #7601 from open-sausages/pulls/4.0/ensure-assets-writable

ENHANCEMENT Ensure that non-writable assets files are notified during install
This commit is contained in:
Chris Joe 2017-11-15 16:37:03 +13:00 committed by GitHub
commit e78fe401e6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

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) {