From 8b063026f0c393117c95306412bbabf35fa14335 Mon Sep 17 00:00:00 2001 From: Damian Mooyman Date: Wed, 15 Nov 2017 13:30:19 +1300 Subject: [PATCH] ENHANCEMENT Ensure that non-writable assets files are notified during install Fixes #7580 --- src/Dev/Install/InstallRequirements.php | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/Dev/Install/InstallRequirements.php b/src/Dev/Install/InstallRequirements.php index fce65e1cb..736603b95 100644 --- a/src/Dev/Install/InstallRequirements.php +++ b/src/Dev/Install/InstallRequirements.php @@ -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) {