[-] FO : Fixed bug #PSCFI-1373 - Bug with the update function when an id_lang was passed to the construct function.

This commit is contained in:
gBrunier
2011-04-19 16:44:15 +00:00
parent 5286dc7e50
commit 30f56bdc41
+34 -20
View File
@@ -30,6 +30,9 @@ abstract class ObjectModelCore
/** @var integer Object id */ /** @var integer Object id */
public $id; public $id;
/** @var integer lang id */
protected $id_lang = NULL;
/** @var string SQL Table name */ /** @var string SQL Table name */
protected $table = NULL; protected $table = NULL;
@@ -99,6 +102,11 @@ abstract class ObjectModelCore
*/ */
public function __construct($id = NULL, $id_lang = NULL) 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 */ /* Connect to database and check SQL table/identifier */
if (!Validate::isTableOrIdentifier($this->identifier) OR !Validate::isTableOrIdentifier($this->table)) if (!Validate::isTableOrIdentifier($this->identifier) OR !Validate::isTableOrIdentifier($this->table))
die(Tools::displayError()); die(Tools::displayError());
@@ -329,31 +337,37 @@ abstract class ObjectModelCore
die(Tools::displayError()); die(Tools::displayError());
$fields = array(); $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($this->id_lang == NULL)
if (isset($this->{$field}[$language['id_lang']]) AND !empty($this->{$field}[$language['id_lang']])) foreach (Language::getLanguages() as $language)
$fields[$language['id_lang']][$field] = pSQL($this->{$field}[$language['id_lang']]); $this->makeTranslationFields($fields, $fieldsArray, $language['id_lang']);
elseif (in_array($field, $this->fieldsRequiredLang)) else
$fields[$language['id_lang']][$field] = pSQL($this->{$field}[$defaultLanguage]); $this->makeTranslationFields($fields, $fieldsArray, $this->id_lang);
else
$fields[$language['id_lang']][$field] = '';
}
}
return $fields; 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 * Check for fields validity before database interaction
*/ */