From 30f56bdc417f7e4d3408bcbfed77104cdcd41b9f Mon Sep 17 00:00:00 2001 From: gBrunier Date: Tue, 19 Apr 2011 16:44:15 +0000 Subject: [PATCH] [-] FO : Fixed bug #PSCFI-1373 - Bug with the update function when an id_lang was passed to the construct function. --- classes/ObjectModel.php | 54 ++++++++++++++++++++++++++--------------- 1 file changed, 34 insertions(+), 20 deletions(-) diff --git a/classes/ObjectModel.php b/classes/ObjectModel.php index b7daf1f4d..3306d1e6b 100644 --- a/classes/ObjectModel.php +++ b/classes/ObjectModel.php @@ -30,6 +30,9 @@ abstract class ObjectModelCore /** @var integer Object id */ public $id; + /** @var integer lang id */ + protected $id_lang = NULL; + /** @var string SQL Table name */ protected $table = NULL; @@ -99,6 +102,11 @@ abstract class ObjectModelCore */ public function __construct($id = NULL, $id_lang = NULL) { + if ($id_lang != NULL && Validate::isLoadedObject(new Language($id_lang))) + $this->id_lang = $id_lang; + elseif ($id_lang != NULL) + die(Tools::displayError()); + /* Connect to database and check SQL table/identifier */ if (!Validate::isTableOrIdentifier($this->identifier) OR !Validate::isTableOrIdentifier($this->table)) die(Tools::displayError()); @@ -329,31 +337,37 @@ abstract class ObjectModelCore die(Tools::displayError()); $fields = array(); - $languages = Language::getLanguages(); - $defaultLanguage = Configuration::get('PS_LANG_DEFAULT'); - foreach ($languages as $language) - { - $fields[$language['id_lang']]['id_lang'] = $language['id_lang']; - $fields[$language['id_lang']][$this->identifier] = (int)($this->id); - foreach ($fieldsArray as $field) - { - /* Check fields validity */ - if (!Validate::isTableOrIdentifier($field)) - die(Tools::displayError()); - /* Copy the field, or the default language field if it's both required and empty */ - if (isset($this->{$field}[$language['id_lang']]) AND !empty($this->{$field}[$language['id_lang']])) - $fields[$language['id_lang']][$field] = pSQL($this->{$field}[$language['id_lang']]); - elseif (in_array($field, $this->fieldsRequiredLang)) - $fields[$language['id_lang']][$field] = pSQL($this->{$field}[$defaultLanguage]); - else - $fields[$language['id_lang']][$field] = ''; - } - } + if($this->id_lang == NULL) + foreach (Language::getLanguages() as $language) + $this->makeTranslationFields($fields, $fieldsArray, $language['id_lang']); + else + $this->makeTranslationFields($fields, $fieldsArray, $this->id_lang); return $fields; } + protected function makeTranslationFields(&$fields, &$fieldsArray, $id_language) + { + $fields[$id_language]['id_lang'] = $id_language; + $fields[$id_language][$this->identifier] = (int)($this->id); + foreach ($fieldsArray as $field) + { + /* Check fields validity */ + if (!Validate::isTableOrIdentifier($field)) + die(Tools::displayError()); + + /* Copy the field, or the default language field if it's both required and empty */ + if ((!$this->id_lang AND isset($this->{$field}[$id_language]) AND !empty($this->{$field}[$id_language])) + OR ($this->id_lang AND isset($this->$field) AND !empty($this->$field))) + $fields[$id_language][$field] = $this->id_lang ? pSQL($this->$field) : pSQL($this->{$field}[$id_language]); + elseif (in_array($field, $this->fieldsRequiredLang)) + $fields[$id_language][$field] = $this->id_lang ? pSQL($this->$field) : pSQL($this->{$field}[Configuration::get('PS_LANG_DEFAULT')]); + else + $fields[$id_language][$field] = ''; + } + } + /** * Check for fields validity before database interaction */