From de01efe9dec19079bb3d02ff4e9498e3cfafc509 Mon Sep 17 00:00:00 2001 From: Lucas Date: Thu, 14 Nov 2024 15:25:50 +0100 Subject: [PATCH] Add Setting type many2one that can save an integer or NULL and refers to an object_class --- .../core/classes/setting/Setting.class.php | 25 ++++++++++++++++--- packages/core/i18n/en/setting/Setting.json | 3 ++- packages/core/i18n/fr/setting/Setting.json | 3 ++- .../views/setting/Setting.form.default.json | 5 ++++ 4 files changed, 30 insertions(+), 6 deletions(-) diff --git a/packages/core/classes/setting/Setting.class.php b/packages/core/classes/setting/Setting.class.php index 61b81fdfe..5f5ea9504 100644 --- a/packages/core/classes/setting/Setting.class.php +++ b/packages/core/classes/setting/Setting.class.php @@ -96,13 +96,20 @@ public static function getColumns() { 'boolean', 'integer', 'float', - 'string' + 'string', + 'many2one' ], 'description' => 'The format of data stored by the param.', 'default' => 'string', 'visible' => ['is_sequence', '=', false] ], + 'object_class' => [ + 'type' => 'string', + 'description' => "Full name of the entity the Setting refers to.", + 'visible' => ['type', '=', 'many2one'] + ], + 'is_multilang' => [ 'type' => 'boolean', 'description' => "Marks the setting as translatable.", @@ -230,7 +237,7 @@ public static function get_value(string $package, string $section, string $code, } $setting_values = $om->read(SettingValue::getType(), $setting['setting_values_ids'], ['user_id', 'value'], $values_lang); - if($setting_values > 0) { + if($setting_values > 0 && count($setting_values)) { $value = null; // #memo - by default settings values are sorted on user_id (which can be null), so first value is the default one foreach($setting_values as $setting_value) { @@ -241,7 +248,17 @@ public static function get_value(string $package, string $section, string $code, } if(!is_null($value)) { $result = $value; - settype($result, $setting['type']); + + $map_extra_types = [ + 'many2one' => 'integer' + ]; + + $type = $map_extra_types[$setting['type']] ?? $setting['type']; + + settype($result, $type); + } + elseif($setting['type'] == 'many2one') { + $result = null; } } } @@ -324,7 +341,7 @@ public static function fetch_and_add(string $package, string $section, string $c $result = null; $providers = \eQual::inject(['orm']); - /** @var \equal\orm\ObjectManager */ + /** @var \equal\orm\ObjectManager $orm */ $orm = $providers['orm']; $settings_ids = $orm->search(self::getType(), [ diff --git a/packages/core/i18n/en/setting/Setting.json b/packages/core/i18n/en/setting/Setting.json index a6338a57d..c38b03538 100644 --- a/packages/core/i18n/en/setting/Setting.json +++ b/packages/core/i18n/en/setting/Setting.json @@ -44,7 +44,8 @@ "boolean": "booléen", "integer": "entier", "float": "nombre flottant", - "string": "chaîne de caractères" + "string": "chaîne de caractères", + "many2one": "many2one relationship" }, "description": "Setting type.", "help": "" diff --git a/packages/core/i18n/fr/setting/Setting.json b/packages/core/i18n/fr/setting/Setting.json index 7ffbf5998..79e5195d4 100644 --- a/packages/core/i18n/fr/setting/Setting.json +++ b/packages/core/i18n/fr/setting/Setting.json @@ -51,7 +51,8 @@ "boolean": "booléen", "integer": "entier", "float": "nombre flottant", - "string": "chaîne de caractère" + "string": "chaîne de caractère", + "many2one": "relation many2one" } } }, diff --git a/packages/core/views/setting/Setting.form.default.json b/packages/core/views/setting/Setting.form.default.json index b3057fdb8..884d623d8 100644 --- a/packages/core/views/setting/Setting.form.default.json +++ b/packages/core/views/setting/Setting.form.default.json @@ -64,6 +64,11 @@ "value": "form_control", "width": "50%" }, + { + "type": "field", + "value": "object_class", + "width": "100%" + }, { "type": "field", "value": "is_multilang",