From 4b6024dc451accadb6c469fa282a9a764c1c0a81 Mon Sep 17 00:00:00 2001 From: slawkens Date: Sun, 2 Feb 2025 22:28:27 +0100 Subject: [PATCH] Save settings in a transaction --- system/src/Settings.php | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/system/src/Settings.php b/system/src/Settings.php index a02ff43c..e243687e 100644 --- a/system/src/Settings.php +++ b/system/src/Settings.php @@ -72,24 +72,32 @@ class Settings implements \ArrayAccess } } - $this->errors = []; - ModelsSettings::where('name', $pluginName)->delete(); - foreach ($values as $key => $value) { - $errorMessage = ''; - if (isset($settings['settings'][$key]['callbacks']['beforeSave']) && !$settings['settings'][$key]['callbacks']['beforeSave']($key, $value, $errorMessage)) { - $this->errors[] = $errorMessage; - continue; - } + global $db; + + try { + $db->beginTransaction(); + + $this->errors = []; + ModelsSettings::where('name', $pluginName)->delete(); + foreach ($values as $key => $value) { + $errorMessage = ''; + if (isset($settings['settings'][$key]['callbacks']['beforeSave']) && !$settings['settings'][$key]['callbacks']['beforeSave']($key, $value, $errorMessage)) { + $this->errors[] = $errorMessage; + continue; + } - try { ModelsSettings::create([ 'name' => $pluginName, 'key' => $key, 'value' => $value ]); - } catch (\PDOException $error) { - $this->errors[] = 'Error while saving setting (' . $pluginName . ' - ' . $key . '): ' . $error->getMessage(); } + + $db->commit(); + } catch (\Exception $error) { + $db->rollBack(); + $this->errors[] = 'Error while saving settings (' . $pluginName . ')
' . $error->getMessage(); + return false; } $this->clearCache();