Skip to content

Commit 4b6024d

Browse files
committed
Save settings in a transaction
1 parent 28fef95 commit 4b6024d

File tree

1 file changed

+19
-11
lines changed

1 file changed

+19
-11
lines changed

system/src/Settings.php

+19-11
Original file line numberDiff line numberDiff line change
@@ -72,24 +72,32 @@ public function save($pluginName, $values)
7272
}
7373
}
7474

75-
$this->errors = [];
76-
ModelsSettings::where('name', $pluginName)->delete();
77-
foreach ($values as $key => $value) {
78-
$errorMessage = '';
79-
if (isset($settings['settings'][$key]['callbacks']['beforeSave']) && !$settings['settings'][$key]['callbacks']['beforeSave']($key, $value, $errorMessage)) {
80-
$this->errors[] = $errorMessage;
81-
continue;
82-
}
75+
global $db;
76+
77+
try {
78+
$db->beginTransaction();
79+
80+
$this->errors = [];
81+
ModelsSettings::where('name', $pluginName)->delete();
82+
foreach ($values as $key => $value) {
83+
$errorMessage = '';
84+
if (isset($settings['settings'][$key]['callbacks']['beforeSave']) && !$settings['settings'][$key]['callbacks']['beforeSave']($key, $value, $errorMessage)) {
85+
$this->errors[] = $errorMessage;
86+
continue;
87+
}
8388

84-
try {
8589
ModelsSettings::create([
8690
'name' => $pluginName,
8791
'key' => $key,
8892
'value' => $value
8993
]);
90-
} catch (\PDOException $error) {
91-
$this->errors[] = 'Error while saving setting (' . $pluginName . ' - ' . $key . '): ' . $error->getMessage();
9294
}
95+
96+
$db->commit();
97+
} catch (\Exception $error) {
98+
$db->rollBack();
99+
$this->errors[] = 'Error while saving settings (' . $pluginName . ')<br/>' . $error->getMessage();
100+
return false;
93101
}
94102

95103
$this->clearCache();

0 commit comments

Comments
 (0)