Add new possibility: to deny saving setting if condition is not met

This commit is contained in:
slawkens
2023-07-22 14:37:57 +02:00
parent 3236f1aebb
commit 20dd49b1c5
4 changed files with 40 additions and 3 deletions

View File

@@ -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;
}
}