[-] BO: Fix #PSCFV-5207 update of some fields on multishop with deleted property
This commit is contained in:
@@ -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`
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user