From 82418bf0cb03f46c6a8b2bb1438938acedfc27c3 Mon Sep 17 00:00:00 2001 From: benjamin Date: Fri, 9 Feb 2024 18:31:30 +0000 Subject: [PATCH] check upload directory writable for standalone install --- .../StandaloneCivicrmFilesPath.civi-setup.php | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 setup/plugins/installFiles/StandaloneCivicrmFilesPath.civi-setup.php diff --git a/setup/plugins/installFiles/StandaloneCivicrmFilesPath.civi-setup.php b/setup/plugins/installFiles/StandaloneCivicrmFilesPath.civi-setup.php new file mode 100644 index 000000000000..c7f4007ef3dd --- /dev/null +++ b/setup/plugins/installFiles/StandaloneCivicrmFilesPath.civi-setup.php @@ -0,0 +1,48 @@ +addListener('civi.setup.checkRequirements', function (\Civi\Setup\Event\CheckRequirementsEvent $e) { + \Civi\Setup::log()->info(sprintf('[%s] Handle %s', basename(__FILE__), 'checkRequirements')); + $m = $e->getModel(); + + $civicrmFilesDirectory = $m->paths['civicrm.files']['path'] ?? ''; + + if (!$civicrmFilesDirectory) { + $e->addError('system', 'civicrmFilesPath', 'The civicrm.files directory path is undefined.'); + } + else { + $e->addInfo('system', 'civicrmFilesPath', sprintf('The civicrm.files directory path is defined ("%s").', $civicrmFilesDirectory)); + } + + if ($civicrmFilesDirectory && !file_exists($civicrmFilesDirectory) && !\Civi\Setup\FileUtil::isCreateable($civicrmFilesDirectory)) { + $e->addError('system', 'civicrmFilesPathWritable', sprintf('The civicrm files dir "%s" does not exist and cannot be created. Ensure it exists or the parent folder is writable.', $civicrmFilesDirectory)); + } + elseif ($civicrmFilesDirectory && !file_exists($civicrmFilesDirectory)) { + $e->addInfo('system', 'civicrmFilesPathWritable', sprintf('The civicrm files dir "%s" can be created.', $civicrmFilesDirectory)); + } + }); + +\Civi\Setup::dispatcher() + ->addListener('civi.setup.installFiles', function (\Civi\Setup\Event\InstallFilesEvent $e) { + \Civi\Setup::log()->info(sprintf('[%s] Handle %s', basename(__FILE__), 'installFiles')); + $m = $e->getModel(); + + $civicrmFilesDirectory = $m->paths['civicrm.files']['path'] ?? ''; + + if ($civicrmFilesDirectory && !file_exists($civicrmFilesDirectory)) { + Civi\Setup::log()->info('[StandaloneCivicrmFilesPath.civi-setup.php] mkdir "{path}"', [ + 'path' => $civicrmFilesDirectory, + ]); + mkdir($civicrmFilesDirectory, 0777, TRUE); + \Civi\Setup\FileUtil::makeWebWriteable($civicrmFilesDirectory); + } + });