From 8a46edfde63567ce08002eaf17ceed2a9fa3cbc8 Mon Sep 17 00:00:00 2001 From: beu Date: Thu, 17 Mar 2022 21:19:31 +0100 Subject: [PATCH] add setting priority --- core/Settings/Setting.php | 5 ++++- core/Settings/SettingManager.php | 28 ++++++++++++++++++++-------- 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/core/Settings/Setting.php b/core/Settings/Setting.php index 9787bf97..d10b955c 100644 --- a/core/Settings/Setting.php +++ b/core/Settings/Setting.php @@ -39,6 +39,7 @@ class Setting implements UsageInformationAble { public $set = null; public $fetchTime = null; public $description = null; + public $priority = null; /** * Construct a new setting instance @@ -47,8 +48,9 @@ class Setting implements UsageInformationAble { * @param string $settingName * @param mixed $defaultValue * @param string|null $description + * @param int $priority */ - public function __construct($object, $settingName, $defaultValue, $description = null) { + public function __construct($object, $settingName, $defaultValue, $description = null, $priority = 100) { if ($object === false) { // Fetched from Database $this->value = $this->castValue($this->value); @@ -71,6 +73,7 @@ class Setting implements UsageInformationAble { } $this->default = $this->value; $this->description = $description; + $this->priority = $priority; } } diff --git a/core/Settings/SettingManager.php b/core/Settings/SettingManager.php index 186e80cb..07f258fe 100644 --- a/core/Settings/SettingManager.php +++ b/core/Settings/SettingManager.php @@ -87,6 +87,15 @@ class SettingManager implements CallbackListener, UsageInformationAble { trigger_error($mysqli->error, E_USER_ERROR); } } + + // Add priority value + $mysqli->query("ALTER TABLE `" . self::TABLE_SETTINGS . "` ADD `priority` INT(5) DEFAULT 100;"); + if ($mysqli->error) { + // If not Duplicate + if ($mysqli->errno !== 1060) { + trigger_error($mysqli->error, E_USER_ERROR); + } + } return $result; } @@ -290,8 +299,8 @@ class SettingManager implements CallbackListener, UsageInformationAble { * @param string|null $description * @return bool */ - public function initSetting($object, $settingName, $defaultValue, $description = null) { - $setting = new Setting($object, $settingName, $defaultValue, $description); + public function initSetting($object, $settingName, $defaultValue, $description = null, $priority = 100) { + $setting = new Setting($object, $settingName, $defaultValue, $description, $priority); return $this->saveSetting($setting, true); } @@ -318,9 +327,10 @@ class SettingManager implements CallbackListener, UsageInformationAble { `description`, `value`, `default`, - `set` + `set`, + `priority` ) VALUES ( - ?, ?, ?, ?, ?, ?, ? + ?, ?, ?, ?, ?, ?, ?, ? ) ON DUPLICATE KEY UPDATE `index` = LAST_INSERT_ID(`index`), `type` = VALUES(`type`), @@ -328,6 +338,7 @@ class SettingManager implements CallbackListener, UsageInformationAble { `default` = VALUES(`default`), `set` = VALUES(`set`), `description` = VALUES(`description`), + `priority` = VALUES(`priority`), `changed` = NOW();"; $settingStatement = $mysqli->prepare($settingQuery); if ($mysqli->error) { @@ -338,14 +349,15 @@ class SettingManager implements CallbackListener, UsageInformationAble { $formattedDefault = $setting->getFormattedDefault(); $formattedSet = $setting->getFormattedSet(); $settingStatement->bind_param( - 'sssssss', + 'sssssssi', $setting->class, $setting->setting, $setting->type, $setting->description, $formattedValue, $formattedDefault, - $formattedSet + $formattedSet, + $setting->priority ); $settingStatement->execute(); if ($settingStatement->error) { @@ -459,7 +471,7 @@ class SettingManager implements CallbackListener, UsageInformationAble { $mysqli = $this->maniaControl->getDatabase()->getMysqli(); $query = "SELECT * FROM `" . self::TABLE_SETTINGS . "` WHERE `class` = '" . $mysqli->escape_string($className) . "' - ORDER BY `setting` ASC;"; + ORDER BY `priority` ASC, `setting` ASC;"; $result = $mysqli->query($query); if ($mysqli->error) { trigger_error($mysqli->error); @@ -481,7 +493,7 @@ class SettingManager implements CallbackListener, UsageInformationAble { public function getSettings() { $mysqli = $this->maniaControl->getDatabase()->getMysqli(); $query = "SELECT * FROM `" . self::TABLE_SETTINGS . "` - ORDER BY `class` ASC, `setting` ASC;"; + ORDER BY `class` ASC, `priority` ASC, `setting` ASC;"; $result = $mysqli->query($query); if ($mysqli->error) { trigger_error($mysqli->error);