From 336dfb091c6f5e298c6db2d5290ebbf4fa817d01 Mon Sep 17 00:00:00 2001 From: Sami Mokaddem Date: Mon, 7 Feb 2022 11:11:25 +0100 Subject: [PATCH] chg: [settingTable] Gracefully handle if file not writeable --- src/Model/Table/SettingsTable.php | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/Model/Table/SettingsTable.php b/src/Model/Table/SettingsTable.php index 7fe18ac..cbd14c2 100644 --- a/src/Model/Table/SettingsTable.php +++ b/src/Model/Table/SettingsTable.php @@ -3,6 +3,7 @@ namespace App\Model\Table; use App\Model\Table\AppTable; use Cake\ORM\Table; +use Cake\Filesystem\File; use Cake\Core\Configure; use Cake\Error\Debugger; @@ -85,6 +86,8 @@ class SettingsTable extends AppTable if (!empty($setting['afterSave'])) { $this->SettingsProvider->evaluateFunctionForSetting($setting['afterSave'], $setting); } + } else { + $errors[] = __('Could not save settings on disk'); } } return $errors; @@ -129,8 +132,16 @@ class SettingsTable extends AppTable $settings = $this->readSettings(); $settings[$name] = $value; $settings = json_encode($settings, JSON_PRETTY_PRINT); - file_put_contents(CONFIG . 'config.json', $settings); - $this->loadSettings(); - return true; + $path = CONFIG . 'config.json'; + $file = new File($path); + if ($file->writable()) { + $success = file_put_contents($path, $settings); + if ($success) { + $this->loadSettings(); + } + } else { + $success = false; + } + return $success; } }