[-] BO: Fix #PSCFV-5207 update of some fields on multishop with deleted property

This commit is contained in:
Rémi Gaillard
2012-11-22 19:02:55 +01:00
parent d7f988b264
commit a717e79a07
4 changed files with 75 additions and 23 deletions
+2
View File
@@ -842,6 +842,8 @@ class CarrierCore extends ObjectModel
SET `id_reference` = '.(int)$id_reference.'
WHERE `id_carrier` = '.(int)$this->id);
$this->id_reference = (int)$id_reference;
// Copy tax rules group
Db::getInstance()->execute('INSERT INTO `'._DB_PREFIX_.'carrier_tax_rules_group_shop` (`id_carrier`, `id_tax_rules_group`, `id_shop`)
(SELECT '.(int)$this->id.', `id_tax_rules_group`, `id_shop`
+48
View File
@@ -518,6 +518,54 @@ abstract class ObjectModelCore
return $result;
}
/**
* Duplicate current object to database
*
* @return new object
*/
public function duplicateObject()
{
$definition = ObjectModel::getDefinition($this);
$res = Db::getInstance()->getRow('
SELECT *
FROM `'._DB_PREFIX_.bqSQL($definition['table']).'`
WHERE `'.bqSQL($definition['primary']).'` = '.(int)$this->id
);
if (!$res)
return false;
unset($res[$definition['primary']]);
if (!Db::getInstance()->insert($definition['table'], $res))
return false;
$object_id = Db::getInstance()->Insert_ID();
if ($definition['multilang'])
{
$res = Db::getInstance()->executeS('
SELECT *
FROM `'._DB_PREFIX_.bqSQL($definition['table']).'_lang`
WHERE `'.bqSQL($definition['primary']).'` = '.(int)$this->id
);
if (!$res)
return false;
foreach ($res as $row)
{
$row[$definition['primary']] = (int)$object_id;
if (!Db::getInstance()->insert($definition['table'].'_lang', $row))
return false;
}
}
$object_duplicated = new $definition['classname']((int)$object_id);
$object_duplicated->duplicateShops((int)$this->id);
return $object_duplicated;
}
/**
* Update current object to database
+12 -13
View File
@@ -696,20 +696,19 @@ class AdminControllerCore extends Controller
if ($this->deleted && $this->beforeDelete($object))
{
// Create new one with old objet values
$object_new = new $this->className($object->id);
$object_new->id = null;
$object_new->date_add = '';
$object_new->date_upd = '';
// Update old object to deleted
$object->deleted = 1;
$object->update();
// Update new object with post values
$this->copyFromPost($object_new, $this->table);
$result = $object_new->add();
$object_new = $object->duplicateObject();
if (Validate::isLoadedObject($object_new))
$this->afterDelete($object_new, $object->id);
{
// Update old object to deleted
$object->deleted = 1;
$object->update();
// Update new object with post values
$this->copyFromPost($object_new, $this->table);
$result = $object_new->update();
if (Validate::isLoadedObject($object_new))
$this->afterDelete($object_new, $object->id);
}
}
else
{
+13 -10
View File
@@ -472,17 +472,20 @@ class AdminCarriersControllerCore extends AdminController
$current_carrier = new Carrier($id);
if (!Validate::isLoadedObject($current_carrier))
throw new PrestaShopException('Cannot load Carrier object');
// Set flag deteled to true for historization
$current_carrier->deleted = true;
$current_carrier->update();
// Create new carrier
$new_carrier = new Carrier();
// Fill the new carrier object
$this->copyFromPost($new_carrier, $this->table);
$new_carrier->position = $current_carrier->position;
if ($new_carrier->add())
// Duplicate current Carrier
$new_carrier = $current_carrier->duplicateObject();
if (Validate::isLoadedObject($new_carrier))
{
// Set flag deteled to true for historization
$current_carrier->deleted = true;
$current_carrier->update();
// Fill the new carrier object
$this->copyFromPost($new_carrier, $this->table);
$new_carrier->position = $current_carrier->position;
$new_carrier->update();
$this->updateAssoShop($new_carrier->id);
$new_carrier->copyCarrierData((int)$current_carrier->id);
$this->changeGroups($new_carrier->id);