From 677c177bd3c06e8f9c8966d4f8da5fd558c264e1 Mon Sep 17 00:00:00 2001 From: Lucas Date: Wed, 13 Nov 2024 16:39:45 +0100 Subject: [PATCH 1/3] Handle default value set by setting value --- lib/equal/orm/Model.class.php | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/lib/equal/orm/Model.class.php b/lib/equal/orm/Model.class.php index fddeed5ce..30abeb335 100644 --- a/lib/equal/orm/Model.class.php +++ b/lib/equal/orm/Model.class.php @@ -6,6 +6,7 @@ */ namespace equal\orm; +use core\setting\Setting; use equal\services\Container; /** @@ -141,6 +142,7 @@ private function setDefaults($values=[]) { $container = Container::getInstance(); $orm = $container->get('orm'); $defaults = $this->getDefaults(); + $setting_defaults = $this->getSettingDefaults(); // reset fields values $this->values = []; $fields = array_keys($this->schema); @@ -166,6 +168,22 @@ private function setDefaults($values=[]) { // default is a method of the class (or parents') $this->values[$field] = $orm->callonce($this->getType(), $defaults[$field]); } + elseif($defaults[$field] == 'defaultSetting') { + $class_name = get_called_class(); + $entity = new Entity($class_name); + $package_name = $entity->getPackageName(); + + $class_name = explode('\\', $class_name); + array_shift($class_name); + $class_name = implode('.', $class_name); + + $pattern = '/(?<=\\w)(?=[A-Z])|(?<=[a-z])(?=[0-9])/'; + $class_snake_case = strtolower(preg_replace($pattern, '_', $class_name)); + + $default = $setting_defaults[$field] ?? null; + + $this->values[$field] = Setting::get_value($package_name, 'default', "$class_snake_case.$field", $default); + } else { // default is a scalar value $this->values[$field] = $defaults[$field]; @@ -513,6 +531,16 @@ public function getDefaults() { return $defaults; } + public function getSettingDefaults() { + $setting_defaults = []; + foreach($this->schema as $field => $definition) { + if(isset($definition['setting_default'])) { + $setting_defaults[$field] = $definition['setting_default']; + } + } + return $setting_defaults; + } + /** * Provide the list of unique rules (array of combinations of fields). * This method can be overridden to define a more precise set of unique constraints (i.e when keys are formed of several fields). From 49aebcadde546f1e05e45b3a8f16c89c4dc99b8d Mon Sep 17 00:00:00 2001 From: Lucas Date: Thu, 14 Nov 2024 11:06:34 +0100 Subject: [PATCH 2/3] Add comments + modify method name from defaultSetting to defaultFromSetting --- lib/equal/orm/Model.class.php | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/lib/equal/orm/Model.class.php b/lib/equal/orm/Model.class.php index 30abeb335..ffbfa7067 100644 --- a/lib/equal/orm/Model.class.php +++ b/lib/equal/orm/Model.class.php @@ -168,21 +168,29 @@ private function setDefaults($values=[]) { // default is a method of the class (or parents') $this->values[$field] = $orm->callonce($this->getType(), $defaults[$field]); } - elseif($defaults[$field] == 'defaultSetting') { + elseif($defaults[$field] == 'defaultFromSetting') { $class_name = get_called_class(); $entity = new Entity($class_name); - $package_name = $entity->getPackageName(); + // create setting code prefix, example: "\core\alert\MessageModel" --> alert.message_model + + // remove package name from class $class_name = explode('\\', $class_name); array_shift($class_name); - $class_name = implode('.', $class_name); + // use dots instead of backslashes + $class_name = implode('.', $class_name); $pattern = '/(?<=\\w)(?=[A-Z])|(?<=[a-z])(?=[0-9])/'; - $class_snake_case = strtolower(preg_replace($pattern, '_', $class_name)); - $default = $setting_defaults[$field] ?? null; + // use snake case instead of camel case + $setting_code_prefix = strtolower(preg_replace($pattern, '_', $class_name)); - $this->values[$field] = Setting::get_value($package_name, 'default', "$class_snake_case.$field", $default); + $this->values[$field] = Setting::get_value( + $entity->getPackageName(), + 'default', + "$setting_code_prefix.$field", + $setting_defaults[$field] ?? null + ); } else { // default is a scalar value From 95e00f6ff049fa988e0ed431c305170d949bd704 Mon Sep 17 00:00:00 2001 From: Lucas Date: Thu, 14 Nov 2024 11:08:53 +0100 Subject: [PATCH 3/3] Refacto simplify --- lib/equal/orm/Model.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/equal/orm/Model.class.php b/lib/equal/orm/Model.class.php index ffbfa7067..dfa1f3c82 100644 --- a/lib/equal/orm/Model.class.php +++ b/lib/equal/orm/Model.class.php @@ -180,9 +180,9 @@ private function setDefaults($values=[]) { // use dots instead of backslashes $class_name = implode('.', $class_name); - $pattern = '/(?<=\\w)(?=[A-Z])|(?<=[a-z])(?=[0-9])/'; // use snake case instead of camel case + $pattern = '/(?<=\\w)(?=[A-Z])|(?<=[a-z])(?=[0-9])/'; $setting_code_prefix = strtolower(preg_replace($pattern, '_', $class_name)); $this->values[$field] = Setting::get_value(