diff --git a/admin/tools/settings_save.php b/admin/tools/settings_save.php
index 8596fb20..83be1de3 100644
--- a/admin/tools/settings_save.php
+++ b/admin/tools/settings_save.php
@@ -25,4 +25,10 @@ $settings = Settings::getInstance();
$settings->save($_REQUEST['plugin'], $_POST['settings']);
+$errors = $settings->getErrors();
+if (count($errors) > 0) {
+ http_response_code(500);
+ die(implode('
', $errors));
+}
+
echo 'Saved at ' . date('H:i');
diff --git a/system/libs/Settings.php b/system/libs/Settings.php
index aaddf72f..9638b617 100644
--- a/system/libs/Settings.php
+++ b/system/libs/Settings.php
@@ -15,6 +15,7 @@ class Settings implements ArrayAccess
private $settingsDatabase = [];
private $cache = [];
private $valuesAsked = [];
+ private $errors = [];
/**
* @return Settings
@@ -67,12 +68,19 @@ class Settings implements ArrayAccess
}
}
+ $this->errors = [];
$db->query('DELETE FROM `' . TABLE_PREFIX . 'settings` WHERE `name` = ' . $db->quote($pluginName) . ';');
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 {
$db->insert(TABLE_PREFIX . 'settings', ['name' => $pluginName, 'key' => $key, 'value' => $value]);
} catch (PDOException $error) {
- warning('Error while saving setting (' . $pluginName . ' - ' . $key . '): ' . $error->getMessage());
+ $this->errors[] = 'Error while saving setting (' . $pluginName . ' - ' . $key . '): ' . $error->getMessage();
}
}
@@ -587,4 +595,8 @@ class Settings implements ArrayAccess
return true;
}
+
+ public function getErrors() {
+ return $this->errors;
+ }
}
diff --git a/system/settings.php b/system/settings.php
index 04cea71f..8110fbd7 100644
--- a/system/settings.php
+++ b/system/settings.php
@@ -1301,6 +1301,16 @@ Sent by MyAAC,
'desc' => 'What to give to player after donation - what column in accounts table to use.',
'options' => ['premium_points' => 'Premium Points', 'coins' => 'Coins'],
'default' => 'premium_points',
+ 'callbacks' => [
+ 'beforeSave' => function($key, $value, &$errorMessage) {
+ global $db;
+ if ($value == 'coins' && !$db->hasColumn('accounts', 'coins')) {
+ $errorMessage = "Shop: Donate Column: Cannot set column to coins, because it doesn't exist in database.";
+ return false;
+ }
+ return true;
+ }
+ ]
],
'account_generate_new_reckey' => [
'name' => 'Allow Generate New Key',
diff --git a/system/templates/admin.settings.html.twig b/system/templates/admin.settings.html.twig
index 44480ceb..d06eadc1 100644
--- a/system/templates/admin.settings.html.twig
+++ b/system/templates/admin.settings.html.twig
@@ -80,11 +80,20 @@
Toastify({
position: 'center',
text: response,
- duration: 3000
+ duration: 3000,
+ escapeMarkup: false,
}).showToast();
},
error : function(response) {
- alert(response.responseText);
+ Toastify({
+ position: 'center',
+ text: response.responseText,
+ duration: 3000,
+ style: {
+ background: 'red',
+ },
+ escapeMarkup: false,
+ }).showToast();
}
});
});