5709 lines
404 KiB
PHP
5709 lines
404 KiB
PHP
<?php
|
|
/**
|
|
* NOTICE OF LICENSE
|
|
*
|
|
* This source file is subject to a commercial license from MigrationPro MMC
|
|
* Use, copy, modification or distribution of this source file without written
|
|
* license agreement from the MigrationPro MMC is strictly forbidden.
|
|
* In order to obtain a license, please contact us: migrationprommc@gmail.com
|
|
*
|
|
* INFORMATION SUR LA LICENCE D'UTILISATION
|
|
*
|
|
* L'utilisation de ce fichier source est soumise a une licence commerciale
|
|
* concedee par la societe MigrationPro MMC
|
|
* Toute utilisation, reproduction, modification ou distribution du present
|
|
* fichier source sans contrat de licence ecrit de la part de la MigrationPro MMC est
|
|
* expressement interdite.
|
|
* Pour obtenir une licence, veuillez contacter la MigrationPro MMC a l'adresse: migrationprommc@gmail.com
|
|
*
|
|
* @author Edgar I.
|
|
* @copyright Copyright (c) 2012-2016 MigrationPro MMC
|
|
* @license Commercial license
|
|
* @package MigrationPro: Prestashop To PrestaShop
|
|
*/
|
|
|
|
require_once 'EDClient.php';
|
|
require_once "loggers/Logger.php";
|
|
class EDImport
|
|
{
|
|
const UNFRIENDLY_ERROR = false;
|
|
// --- Objects, Option & response vars:
|
|
|
|
protected $obj;
|
|
protected $module;
|
|
protected $process;
|
|
protected $client;
|
|
protected $query;
|
|
protected $url;
|
|
protected $force_ids;
|
|
protected $regenerate;
|
|
protected $image_path;
|
|
protected $image_supplier_path;
|
|
protected $version;
|
|
protected $shop_is_feature_active;
|
|
protected $mapping;
|
|
protected $ps_validation_errors = true;
|
|
protected $migrate_recent_data = false;
|
|
|
|
protected $error_msg;
|
|
protected $warning_msg;
|
|
protected $response;
|
|
private $logger;
|
|
|
|
// --- Constructor / destructor:
|
|
|
|
public function __construct(
|
|
MigrationProProcess $process,
|
|
$version,
|
|
$url_cart,
|
|
$force_ids,
|
|
Module $module,
|
|
EDClient $client = null,
|
|
EDQuery $query = null
|
|
) {
|
|
$this->regenerate = false; //@TODO dynamic from step two
|
|
$this->process = $process;
|
|
$this->version = $version;
|
|
$this->url = $url_cart;
|
|
$this->force_ids = $force_ids;
|
|
$this->module = $module;
|
|
$this->client = $client;
|
|
$this->query = $query;
|
|
$this->mapping = MigrationProMapping::listMapping(true, true);
|
|
$this->shop_is_feature_active = Shop::isFeatureActive();
|
|
$this->logger = new Logger();
|
|
}
|
|
|
|
// --- Configuration methods:
|
|
|
|
public function setImagePath($string)
|
|
{
|
|
$this->image_path = $string;
|
|
}
|
|
|
|
public function setImageSupplierPath($string)
|
|
{
|
|
$this->image_supplier_path = $string;
|
|
}
|
|
|
|
|
|
public function setRecentData($bool)
|
|
{
|
|
$this->migrate_recent_data = $bool;
|
|
}
|
|
|
|
public function setPsValidationErrors($bool)
|
|
{
|
|
$this->ps_validation_errors = $bool;
|
|
}
|
|
|
|
public function preserveOn()
|
|
{
|
|
$this->force_ids = true;
|
|
}
|
|
|
|
public function preserveOff()
|
|
{
|
|
$this->force_ids = false;
|
|
}
|
|
|
|
// --- After object methods:
|
|
|
|
public function getErrorMsg()
|
|
{
|
|
return $this->error_msg;
|
|
}
|
|
|
|
|
|
public function getWarningMsg()
|
|
{
|
|
return $this->warning_msg;
|
|
}
|
|
|
|
public function getResponse()
|
|
{
|
|
return $this->response;
|
|
}
|
|
|
|
// --- Import methods:
|
|
|
|
/**
|
|
* @param $taxRulesGroups
|
|
* @param $taxRules
|
|
* @param $taxLangCountryLangState
|
|
*/
|
|
public function taxes($taxRulesGroups, $taxRules, $taxLangCountryLangState)
|
|
{
|
|
// import country
|
|
foreach ($taxLangCountryLangState['country'] as $country) {
|
|
if ($countryObject = $this->createObjectModel('Country', $country['id_country'])) {
|
|
$countryObject->id_zone = $country['id_zone'];
|
|
$countryObject->id_currency = self::getCurrencyID($country['id_currency']);
|
|
$countryObject->call_prefix = $country['call_prefix'];
|
|
$countryObject->iso_code = $country['iso_code'];
|
|
$countryObject->active = $country['active'];
|
|
$countryObject->contains_states = $country['contains_states'];
|
|
$countryObject->need_identification_number = $country['need_identification_number'];
|
|
$countryObject->need_zip_code = $country['need_zip_code'];
|
|
$countryObject->zip_code_format = $country['zip_code_format'];
|
|
$countryObject->display_tax_label = (isset($country['display_tax_label'])) ? (bool)$country['display_tax_label'] : true;
|
|
//language fields
|
|
foreach ($taxLangCountryLangState['country_lang'] as $lang) {
|
|
if ($lang['id_country'] == $country['id_country']) {
|
|
$lang['id_lang'] = self::getLanguageID($lang['id_lang']);
|
|
$countryObject->name[$lang['id_lang']] = $lang['name'];
|
|
}
|
|
}
|
|
|
|
// Add to _shop relations
|
|
$countriesShopsRelations = $this->getChangedIdShop($taxLangCountryLangState['country_shop'], 'id_country');
|
|
if (array_key_exists($country['id_country'], $countriesShopsRelations)) {
|
|
$countryObject->id_shop_list = array_values($countriesShopsRelations[$country['id_country']]);
|
|
}
|
|
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $countryObject->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $countryObject->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($countryObject->id && Country::existsInDatabase($countryObject->id, 'country')) {
|
|
try {
|
|
$res = $countryObject->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
if (!$res) {
|
|
try {
|
|
$res = $countryObject->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Country (ID: %1$s) cannot be saved. %2$s')), (isset($country['id_country']) && !self::isEmpty($country['id_country'])) ? Tools::safeOutput($country['id_country']) : 'No ID', $err_tmp));
|
|
} else {
|
|
self::addLog('Country', $country['id_country'], $countryObject->id);
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Country (ID: %1$s) cannot be saved. %2$s')), (isset($country['id_country']) && !self::isEmpty($country['id_country'])) ? Tools::safeOutput($country['id_country']) : 'No ID', $error_tmp));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// import state
|
|
foreach ($taxLangCountryLangState['state'] as $state) {
|
|
if ($stateObject = $this->createObjectModel('State', $state['id_state'])) {
|
|
$stateObject->id_country = self::getLocalID('country', $state['id_country'], 'data');
|
|
$stateObject->id_zone = $state['id_zone'];
|
|
$stateObject->iso_code = $state['iso_code'];
|
|
$stateObject->active = $state['active'];
|
|
$stateObject->name = $state['name'];
|
|
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $stateObject->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $stateObject->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($stateObject->id && State::existsInDatabase($stateObject->id, 'state')) {
|
|
try {
|
|
$res = $stateObject->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
if (!$res) {
|
|
try {
|
|
$res = $stateObject->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('State (ID: %1$s) cannot be saved. %2$s')), (isset($state['id_state']) && !self::isEmpty($state['id_state'])) ? Tools::safeOutput($state['id_state']) : 'No ID', $err_tmp));
|
|
} else {
|
|
self::addLog('State', $state['id_state'], $stateObject->id);
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('State (ID: %1$s) cannot be saved. %2$s')), (isset($state['id_state']) && !self::isEmpty($state['id_state'])) ? Tools::safeOutput($state['id_state']) : 'No ID', $error_tmp));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// import tax
|
|
foreach ($taxLangCountryLangState['tax'] as $tax) {
|
|
if ($taxObject = $this->createObjectModel('Tax', $tax['id_tax'])) {
|
|
$taxObject->rate = $tax['rate'];
|
|
$taxObject->active = $tax['active'];
|
|
if ($this->version >= 1.5) {
|
|
$taxObject->deleted = $tax['deleted'];
|
|
}
|
|
foreach ($taxLangCountryLangState['tax_lang'] as $lang) {
|
|
if ($lang['id_tax'] == $tax['id_tax']) {
|
|
$lang['id_lang'] = self::getLanguageID($lang['id_lang']);
|
|
$taxObject->name[$lang['id_lang']] = $lang['name'];
|
|
}
|
|
}
|
|
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $taxObject->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $taxObject->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($taxObject->id && Tax::existsInDatabase($taxObject->id, 'tax')) {
|
|
try {
|
|
$res = $taxObject->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
if (!$res) {
|
|
try {
|
|
$res = $taxObject->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Tax (ID: %1$s) cannot be saved. %2$s')), (isset($tax['id_tax']) && !self::isEmpty($tax['id_tax'])) ? Tools::safeOutput($tax['id_tax']) : 'No ID', $err_tmp));
|
|
} else {
|
|
self::addLog('Tax', $tax['id_tax'], $taxObject->id);
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Tax (ID: %1$s) cannot be saved. %2$s')), (isset($tax['id_tax']) && !self::isEmpty($tax['id_tax'])) ? Tools::safeOutput($tax['id_tax']) : 'No ID', $error_tmp));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// import tax rules group
|
|
foreach ($taxRulesGroups['tax_rules_group'] as $taxRulesGroup) {
|
|
if ($taxRulesGroupModel = $this->createObjectModel('TaxRulesGroup', $taxRulesGroup['id_tax_rules_group'])) {
|
|
$taxRulesGroupModel->name = $taxRulesGroup['name'];
|
|
if (self::isEmpty($taxRulesGroupModel->date_add) || $taxRulesGroupModel->date_add == '0000-00-00 00:00:00') {
|
|
$taxRulesGroupModel->date_add = date('Y-m-d H:i:s');
|
|
}
|
|
if (self::isEmpty($taxRulesGroupModel->date_upd) || $taxRulesGroupModel->date_upd == '0000-00-00 00:00:00') {
|
|
$taxRulesGroupModel->date_upd = date('Y-m-d H:i:s');
|
|
}
|
|
$taxRulesGroupModel->active = $taxRulesGroup['active'];
|
|
|
|
// Add to _shop relations
|
|
$taxRulesShopsRelations = $this->getChangedIdShop($taxRulesGroups['tax_rules_group_shop'], 'id_tax_rules_group');
|
|
if (array_key_exists($taxRulesGroup['id_tax_rules_group'], $taxRulesShopsRelations)) {
|
|
$taxRulesGroupModel->id_shop_list = array_values($taxRulesShopsRelations[$taxRulesGroup['id_tax_rules_group']]);
|
|
}
|
|
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $taxRulesGroupModel->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $taxRulesGroupModel->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($taxRulesGroupModel->id && TaxRulesGroup::existsInDatabase($taxRulesGroupModel->id, 'tax_rules_group')) {
|
|
try {
|
|
$res = $taxRulesGroupModel->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
if (!$res) {
|
|
try {
|
|
$res = $taxRulesGroupModel->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Tax Rules Group (ID: %1$s) cannot be saved. %2$s')), (isset($taxRulesGroup['id_tax_rules_group']) && !self::isEmpty($taxRulesGroup['id_tax_rules_group'])) ? Tools::safeOutput($taxRulesGroup['id_tax_rules_group']) : 'No ID', $err_tmp));
|
|
} else {
|
|
// import tax rules for this group
|
|
foreach ($taxRules as $taxRule) {
|
|
if ($taxRuleModel = $this->createObjectModel('TaxRule', $taxRule['id_tax_rule'])) {
|
|
$taxRuleModel->id_tax_rules_group = $taxRule['id_tax_rules_group'];
|
|
$taxRuleModel->id_country = $taxRule['id_country'];
|
|
$taxRuleModel->id_state = $taxRule['id_state'];
|
|
$taxRuleModel->id_tax = $taxRule['id_tax'];
|
|
$taxRuleModel->zipcode_from = 0;
|
|
$taxRuleModel->zipcode_to = 0;
|
|
$taxRuleModel->behavior = 0;
|
|
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $taxRuleModel->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $taxRuleModel->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($taxRuleModel->id && TaxRule::existsInDatabase($taxRuleModel->id, 'tax_rule')) {
|
|
try {
|
|
$res = $taxRuleModel->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
if (!$res) {
|
|
try {
|
|
$res = $taxRuleModel->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Tax Rule (ID: %1$s) cannot be saved. %2$s')), (isset($taxRule['id_tax_rule']) && !self::isEmpty($taxRule['id_tax_rule'])) ? Tools::safeOutput($taxRule['id_tax_rule']) : 'No ID', $err_tmp));
|
|
} else {
|
|
self::addLog('TaxRule', $taxRule['id_tax_rule'], $taxRuleModel->id);
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Tax Rule (ID: %1$s) cannot be saved. %2$s')), (isset($taxRule['id_tax_rule']) && !self::isEmpty($taxRule['id_tax_rule'])) ? Tools::safeOutput($taxRule['id_tax_rule']) : 'No ID', $error_tmp));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (count($this->error_msg) == 0) {
|
|
self::addLog('TaxRulesGroup', $taxRulesGroup['id_tax_rules_group'], $taxRulesGroupModel->id);
|
|
}
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Tax Rules Group (ID: %1$s) cannot be saved. %2$s')), (isset($taxRulesGroup['id_tax_rules_group']) && !self::isEmpty($taxRulesGroup['id_tax_rules_group'])) ? Tools::safeOutput($taxRulesGroup['id_tax_rules_group']) : 'No ID', $error_tmp));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
$this->updateProcess(count($taxRulesGroups['tax_rules_group']));
|
|
}
|
|
|
|
/**
|
|
* @param $manufacturers
|
|
* @param $manufacturersAdditionalSecond
|
|
*/
|
|
public function manufacturers($manufacturers, $manufacturersAdditionalSecond)
|
|
{
|
|
foreach ($manufacturers as $manufacturer) {
|
|
if ($manufacturerObj = $this->createObjectModel('Manufacturer', $manufacturer['id_manufacturer'])) {
|
|
$manufacturerObj->name = $manufacturer['name'];
|
|
$manufacturerObj->date_add = $manufacturer['date_add'];
|
|
$manufacturerObj->date_upd = $manufacturer['date_upd'];
|
|
$manufacturerObj->active = $manufacturer['active'];
|
|
foreach ($manufacturersAdditionalSecond['manufactures_lang'] as $lang) {
|
|
if ($lang['id_manufacturer'] == $manufacturer['id_manufacturer']) {
|
|
$lang['id_lang'] = self::getLanguageID($lang['id_lang']);
|
|
$manufacturerObj->description[$lang['id_lang']] = $lang['description'];
|
|
$manufacturerObj->short_description[$lang['id_lang']] = $lang['short_description'];
|
|
$manufacturerObj->meta_title[$lang['id_lang']] = $lang['meta_title'];
|
|
$manufacturerObj->meta_description[$lang['id_lang']] = $lang['meta_description'];
|
|
$manufacturerObj->meta_keywords[$lang['id_lang']] = $lang['meta_keywords'];
|
|
}
|
|
}
|
|
|
|
// Add to _shop relations
|
|
$manufacturersShopsRelations = $this->getChangedIdShop($manufacturersAdditionalSecond['manufactures_shop'], 'id_manufacturer');
|
|
if (array_key_exists($manufacturer['id_manufacturer'], $manufacturersShopsRelations)) {
|
|
$manufacturerObj->id_shop_list = array_values($manufacturersShopsRelations[$manufacturer['id_manufacturer']]);
|
|
}
|
|
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $manufacturerObj->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $manufacturerObj->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($manufacturerObj->id && $manufacturerObj->manufacturerExists($manufacturerObj->id)) {
|
|
try {
|
|
$res = $manufacturerObj->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
try {
|
|
$res = $manufacturerObj->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
if (!$res) {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Manufacturer (ID: %1$s) cannot be saved. %2$s')), (isset($manufacturer['id_manufacturer']) && !self::isEmpty($manufacturer['id_manufacturer'])) ? Tools::safeOutput($manufacturer['id_manufacturer']) : 'No ID', $err_tmp));
|
|
} else {
|
|
$url = $this->url . $this->image_path . $manufacturer['id_manufacturer'] . '.jpg';
|
|
if (self::imageExits($url) && !(EDImport::copyImg($manufacturerObj->id, null, $url, 'manufacturers', $this->regenerate))) {
|
|
$this->warning_msg[] = $url . ' ' . self::displayError($this->module->l('cannot be copied.'));
|
|
}
|
|
|
|
//@TODO Associate manufacturers to shop
|
|
self::addLog('Manufacturer', $manufacturer['id_manufacturer'], $manufacturerObj->id);
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Manufacturer (ID: %1$s) cannot be saved. %2$s')), (isset($manufacturer['id_manufacturer']) && !self::isEmpty($manufacturer['id_manufacturer'])) ? Tools::safeOutput($manufacturer['id_manufacturer']) : 'No ID', $error_tmp));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
$this->updateProcess(count($manufacturers));
|
|
}
|
|
|
|
/**
|
|
* @param $categories
|
|
* @param $categoriesAdditionalSecond
|
|
* @param bool $innerMethodCall
|
|
*/
|
|
public function categories($categories, $categoriesAdditionalSecond, $innerMethodCall = false)
|
|
{
|
|
foreach ($categories as $category) {
|
|
$categories_home_root = array(
|
|
Configuration::get('migrationpro_source_root_cat'),
|
|
Configuration::get('migrationpro_source_home_cat')
|
|
);
|
|
|
|
if (version_compare($this->version, '1.5', '<')) {
|
|
if ($this->force_ids) {
|
|
if ($category['id_category'] == Configuration::get('PS_HOME_CATEGORY')) {
|
|
$cat_id = Configuration::get('migrationpro_source_max_cat') + 1;
|
|
$category['id_category'] = $cat_id;
|
|
}
|
|
|
|
if ($category['id_parent'] == Configuration::get('PS_HOME_CATEGORY')) {
|
|
$cat_id = Configuration::get('migrationpro_source_max_cat') + 1;
|
|
$category['id_parent'] = $cat_id;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (!empty(Configuration::get('migrationpro_last_migrated_cat_id'))) {
|
|
if ($category['id_parent'] == Configuration::get('migrationpro_last_migrated_cat_id') && $category['id_category'] == Configuration::get('migrationpro_last_migrated_parent_id')) {
|
|
$category['id_parent'] = Configuration::get('PS_HOME_CATEGORY');
|
|
}
|
|
}
|
|
|
|
Configuration::updateValue('migrationpro_last_migrated_cat_id', $category['id_category']);
|
|
Configuration::updateValue('migrationpro_last_migrated_parent_id', $category['id_parent']);
|
|
|
|
if (isset($category['id_category']) && in_array((int)$category['id_category'], $categories_home_root)) {
|
|
$this->showMigrationMessageAndLog(self::displayError($this->module->l('The category ID cannot be the same as the Root category ID or the Home category ID.')));
|
|
continue;
|
|
}
|
|
|
|
if ($categoryObj = $this->createObjectModel('Category', $category['id_category'])) {
|
|
$categoryObj->active = $category['active'];
|
|
|
|
if (isset($category['id_parent']) && !in_array((int)$category['id_parent'], $categories_home_root) && (int)$category['id_parent'] != 0) {
|
|
if (!Category::categoryExists(self::getLocalId('category', (int)$category['id_parent'], 'data'))) {
|
|
// -- if parent category not exist create it
|
|
$this->client->serializeOff();
|
|
$this->client->setPostData($this->query->singleCategory((int)$category['id_parent']));
|
|
if ($this->client->query()) {
|
|
$parentCategory = $this->client->getContent();
|
|
$this->client->serializeOn();
|
|
$this->client->setPostData($this->query->categorySqlSecond(AdminMigrationProController::getCleanIDs($parentCategory, 'id_category')));
|
|
if ($this->client->query()) {
|
|
$parentCategoryLang = $this->client->getContent();
|
|
$import = new EDImport($this->process, $this->version, $this->url, $this->force_ids, $this->module, $this->client, $this->query);
|
|
$import->setImagePath($this->image_path);
|
|
$import->setPsValidationErrors($this->ps_validation_errors);
|
|
$import->categories($parentCategory, $parentCategoryLang, true);
|
|
$this->error_msg = $import->getErrorMsg();
|
|
$this->warning_msg = $import->getWarningMsg();
|
|
$this->response = $import->getResponse();
|
|
}
|
|
} else {
|
|
$this->showMigrationMessageAndLog(self::displayError('Can\'t execute query to source Shop. ' . $this->client->getMessage()));
|
|
}
|
|
}
|
|
$categoryObj->id_parent = self::getLocalId('category', (int)$category['id_parent'], 'data');
|
|
} else {
|
|
$categoryObj->id_parent = Configuration::get('PS_HOME_CATEGORY');
|
|
}
|
|
|
|
$categoryObj->id_parent = $categoryObj->id_parent ? $categoryObj->id_parent : Configuration::get('PS_HOME_CATEGORY');
|
|
|
|
$categoryObj->position = $category['position'];
|
|
$categoryObj->date_add = $category['date_add'] == '0000-00-00 00:00:00' ? date('Y-m-d H:i:s') : $category['date_add'];
|
|
$categoryObj->date_upd = $category['date_upd'] == '0000-00-00 00:00:00' ? date('Y-m-d H:i:s') : $category['date_upd'];
|
|
|
|
foreach ($categoriesAdditionalSecond['category_lang'] as $lang) {
|
|
if (version_compare($this->version, '1.5', '<')) {
|
|
if ($this->force_ids) {
|
|
if ($lang['id_category'] == Configuration::get('PS_HOME_CATEGORY')) {
|
|
$cat_id = Configuration::get('migrationpro_source_max_cat') + 1;
|
|
$lang['id_category'] = $cat_id;
|
|
}
|
|
}
|
|
}
|
|
|
|
if ($lang['id_category'] == $category['id_category']) {
|
|
$lang['id_lang'] = self::getLanguageID($lang['id_lang']);
|
|
$categoryObj->name[$lang['id_lang']] = $lang['name'];
|
|
$categoryObj->link_rewrite[$lang['id_lang']] = $lang['link_rewrite'];
|
|
|
|
if (isset($categoryObj->link_rewrite[$lang['id_lang']]) && !self::isEmpty($categoryObj->link_rewrite[$lang['id_lang']])) {
|
|
$valid_link = Validate::isLinkRewrite($categoryObj->link_rewrite[$lang['id_lang']]);
|
|
} else {
|
|
$valid_link = false;
|
|
}
|
|
if (!$valid_link) {
|
|
$categoryObj->link_rewrite[$lang['id_lang']] = Tools::link_rewrite($categoryObj->name[$lang['id_lang']]);
|
|
|
|
if ($categoryObj->link_rewrite[$lang['id_lang']] == '') {
|
|
$categoryObj->link_rewrite[$lang['id_lang']] = 'friendly-url-autogeneration-failed';
|
|
$this->warning_msg[] = sprintf(self::displayError($this->module->l('URL rewriting failed to auto-generate a friendly URL for: %s')), $categoryObj->name[$lang['id_lang']]);
|
|
}
|
|
|
|
$this->warning_msg[] = sprintf(self::displayError($this->module->l('The link for %1$s (ID: %2$s) was re-written as %3$s.')), $lang['link_rewrite'], (isset($category['id_category']) && !self::isEmpty($category['id_category'])) ? $category['id_category'] : 'null', $categoryObj->link_rewrite[$lang['id_lang']]);
|
|
}
|
|
|
|
$categoryObj->description[$lang['id_lang']] = $lang['description'];
|
|
$categoryObj->meta_title[$lang['id_lang']] = $lang['meta_title'];
|
|
$categoryObj->meta_description[$lang['id_lang']] = $lang['meta_description'];
|
|
$categoryObj->meta_keywords[$lang['id_lang']] = $lang['meta_keywords'];
|
|
}
|
|
}
|
|
|
|
// Add to _shop relations
|
|
$categoriesShopsRelations = $this->getChangedIdShop($categoriesAdditionalSecond['category_shop'], 'id_category');
|
|
if (array_key_exists($category['id_category'], $categoriesShopsRelations)) {
|
|
$categoryObj->id_shop_list = array_values($categoriesShopsRelations[$category['id_category']]);
|
|
}
|
|
|
|
//@TODO get shop id from step-2
|
|
// if (!$this->shop_is_feature_active) {
|
|
// $categoryObj->id_shop_default = 1;
|
|
// } else {
|
|
// $categoryObj->id_shop_default = $category['id_category'];
|
|
// }
|
|
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $categoryObj->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $categoryObj->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true && self::isEmpty($this->error_msg)) {
|
|
if ($categoryObj->id && $categoryObj->id == $categoryObj->id_parent) {
|
|
$this->showMigrationMessageAndLog(self::displayError($this->module->l('A category cannot be its own parent category.')));
|
|
continue;
|
|
}
|
|
|
|
if ($categoryObj->id == Configuration::get('PS_ROOT_CATEGORY')) {
|
|
$this->showMigrationMessageAndLog(self::displayError($this->module->l('The root category cannot be modified.')));
|
|
continue;
|
|
}
|
|
|
|
/* No automatic nTree regeneration for import */
|
|
$categoryObj->doNotRegenerateNTree = true;
|
|
// If id category AND id category already in base, trying to update
|
|
if ($categoryObj->id && $categoryObj->categoryExists($categoryObj->id) && !in_array($categoryObj->id, $categories_home_root)) {
|
|
try {
|
|
$res = $categoryObj->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
// If no id_category or update failed
|
|
if (!$res) {
|
|
try {
|
|
$res = $categoryObj->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Category (ID: %1$s) cannot be saved. %2$s')), (isset($category['id_category']) && !self::isEmpty($category['id_category'])) ? Tools::safeOutput($category['id_category']) : 'No ID', $error_tmp));
|
|
}
|
|
}
|
|
|
|
// If both failed, mysql error
|
|
if (!$res) {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Category (ID: %1$s) cannot be saved. %2$s')), (isset($category['id_category']) && !self::isEmpty($category['id_category'])) ? Tools::safeOutput($category['id_category']) : 'No ID', $err_tmp));
|
|
} else {
|
|
$url = $this->url . $this->image_path . $category['id_category'] . '.jpg';
|
|
if (self::imageExits($url) && !(EDImport::copyImg($categoryObj->id, null, $url, 'categories', $this->regenerate))) {
|
|
$this->warning_msg[] = $url . ' ' . self::displayError($this->module->l('cannot be copied.'));
|
|
}
|
|
|
|
//import Category_Group
|
|
$sql_values = array();
|
|
foreach ($categoriesAdditionalSecond['category_group'] as $group) {
|
|
if ($group['id_category'] == $category['id_category']) {
|
|
if (self::getCustomerGroupID($group['id_group']) != "0") {
|
|
$sql_values[] = '(' . $categoryObj->id . ', ' . self::getCustomerGroupID($group['id_group']) . ')';
|
|
}
|
|
}
|
|
}
|
|
Db::getInstance()->execute('DELETE FROM `' . _DB_PREFIX_ . 'category_group` WHERE id_category = ' . $categoryObj->id);
|
|
if (!empty($sql_values)) {
|
|
$result = Db::getInstance()->execute('REPLACE INTO `' . _DB_PREFIX_ . 'category_group` (`id_category`, `id_group`) VALUES ' . implode(',', $sql_values));
|
|
if (!$result) {
|
|
if (!$this->ps_validation_errors) {
|
|
continue;
|
|
}
|
|
$this->error_msg[] = self::displayError('Can\'t add category_group. ' . Db::getInstance()->getMsgError());
|
|
}
|
|
}
|
|
|
|
//@TODO Associate category to shop
|
|
|
|
self::addLog('Category', $category['id_category'], $categoryObj->id);
|
|
|
|
//update multistore language fields
|
|
if (!version_compare($this->version, '1.5', '<')) {
|
|
if (MigrationProMapping::getMapTypeCount('multi_shops') > 1) {
|
|
foreach ($categoriesAdditionalSecond['category_lang'] as $lang) {
|
|
if ($lang['id_category'] == $category['id_category']) {
|
|
$lang['id_shop'] = self::getShopID($lang['id_shop']);
|
|
$lang['id_lang'] = self::getLanguageID($lang['id_lang']);
|
|
$lang['id_category'] = $categoryObj->id;
|
|
self::updateMultiStoreLang('category', $lang);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (self::isEmpty($categoriesShopsRelations[$category['id_category']])) {
|
|
continue;
|
|
}
|
|
if ($category['id_category'] != Configuration::get('PS_HOME_CATEGORY') && $category['id_category'] != Configuration::get('PS_ROOT_CATEGORY')) {
|
|
Db::getInstance()->execute('DELETE FROM ' . _DB_PREFIX_ . 'category_shop WHERE id_category = ' . (int)$category['id_category'] . ' AND id_shop NOT IN (' . implode(',', array_values($categoriesShopsRelations[$category['id_category']])) . ')');
|
|
}
|
|
}
|
|
}
|
|
|
|
if (!$innerMethodCall) {
|
|
$this->updateProcess(count($categories));
|
|
}
|
|
Category::regenerateEntireNtree();
|
|
}
|
|
|
|
/**
|
|
* @param $carriers
|
|
* @param $carriersAdditionalSecond
|
|
*/
|
|
public function carriers($carriers, $carriersAdditionalSecond)
|
|
{
|
|
foreach ($carriers as $carrier) {
|
|
if ($carrierObj = $this->createObjectModel('Carrier', $carrier['id_carrier'])) {
|
|
$carrierObj->id_tax_rules_group = self::getLocalID('taxRulesGroup', $carrier['id_tax_rules_group'], 'data');
|
|
$carrierObj->name = $carrier['name'];
|
|
$carrierObj->url = $carrier['url'];
|
|
$carrierObj->active = $carrier['active'];
|
|
$carrierObj->deleted = $carrier['deleted'];
|
|
$carrierObj->shipping_handling = $carrier['shipping_handling'];
|
|
$carrierObj->range_behavior = $carrier['range_behavior'];
|
|
$carrierObj->is_module = $carrier['is_module'];
|
|
$carrierObj->is_free = $carrier['is_free'];
|
|
$carrierObj->shipping_external = $carrier['shipping_external'];
|
|
$carrierObj->need_range = $carrier['need_range'];
|
|
$carrierObj->external_module_name = $carrier['external_module_name'];
|
|
$carrierObj->shipping_method = $carrier['shipping_method'];
|
|
$carrierObj->position = $carrier['position'];
|
|
$carrierObj->max_width = $carrier['max_width'];
|
|
$carrierObj->max_height = $carrier['max_height'];
|
|
$carrierObj->max_depth = $carrier['max_depth'];
|
|
$carrierObj->max_weight = $carrier['max_weight'];
|
|
$carrierObj->grade = $carrier['grade'];
|
|
foreach ($carriersAdditionalSecond['carrier_lang'] as $lang) {
|
|
if ($lang['id_carrier'] == $carrier['id_carrier']) {
|
|
$lang['id_lang'] = self::getLanguageID($lang['id_lang']);
|
|
$carrierObj->delay[$lang['id_lang']] = $lang['delay'];
|
|
if (self::isEmpty($carrierObj->delay[$lang['id_lang']])) {
|
|
$carrierObj->delay[$lang['id_lang']] = 'Empty';
|
|
}
|
|
}
|
|
}
|
|
|
|
// Add to _shop relations
|
|
$carriersShopsRelations = $this->getChangedIdShop($carriersAdditionalSecond['carrier_shop'], 'id_carrier');
|
|
if (array_key_exists($carrier['id_carrier'], $carriersShopsRelations)) {
|
|
$carrierObj->id_shop_list = array_values($carriersShopsRelations[$carrier['id_carrier']]);
|
|
}
|
|
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $carrierObj->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $carrierObj->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($carrierObj->id && Carrier::existsInDatabase($carrierObj->id, 'carrier')) {
|
|
try {
|
|
$res = $carrierObj->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
try {
|
|
$res = $carrierObj->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
if (!$res) {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Carrier (ID: %1$s) cannot be saved. %2$s')), (isset($carrier['id_carrier']) && !self::isEmpty($carrier['id_carrier'])) ? Tools::safeOutput($carrier['id_carrier']) : 'No ID', $err_tmp));
|
|
} else {
|
|
// Import Carrier Group
|
|
$sql_values = array();
|
|
foreach ($carriersAdditionalSecond['carrier_group'] as $carrierGroup) {
|
|
if ($carrierGroup['id_carrier'] == $carrier['id_carrier']) {
|
|
$sql_values[] = '(' . (int)$carrierObj->id . ', ' . self::getCustomerGroupID($carrierGroup['id_group']) . ')';
|
|
}
|
|
}
|
|
if (!self::isEmpty($sql_values)) {
|
|
$result = Db::getInstance()->execute('REPLACE INTO `' . _DB_PREFIX_ . 'carrier_group` (`id_carrier`, `id_group`) VALUES ' . implode(',', $sql_values));
|
|
if (!$result) {
|
|
$this->showMigrationMessageAndLog(self::displayError('Can\'t add carrier_group. ' . Db::getInstance()->getMsgError()));
|
|
}
|
|
}
|
|
|
|
// Add zones
|
|
foreach ($carriersAdditionalSecond['all_zones'] as $all_zone) {
|
|
if ($zoneObject = $this->createObjectModel('Zone', $all_zone['id_zone'])) {
|
|
$zoneObject->active = $all_zone['active'];
|
|
$zoneObject->name = $all_zone['name'];
|
|
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $zoneObject->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $zoneObject->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($zoneObject->id && Zone::existsInDatabase($zoneObject->id, 'zone')) {
|
|
try {
|
|
$res = $zoneObject->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
if (!$res) {
|
|
try {
|
|
$res = $zoneObject->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
if (!$this->ps_validation_errors) {
|
|
continue;
|
|
}
|
|
|
|
$this->error_msg[] = sprintf(self::displayError('Zone (ID: %1$s) cannot be saved. %2$s'), (isset($all_zone['id_zone']) && !empty($all_zone['id_zone'])) ? Tools::safeOutput($all_zone['id_zone']) : 'No ID', $err_tmp);
|
|
} else {
|
|
MigrationProData::import('Zone', $all_zone['id_zone'], $zoneObject->id);
|
|
MigrationProMigratedData::import('Zone', $all_zone['id_zone'], $zoneObject->id);
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
if (!$this->ps_validation_errors) {
|
|
continue;
|
|
}
|
|
|
|
$this->error_msg[] = sprintf(self::displayError('Zone (ID: %1$s) cannot be saved. %2$s'), (isset($all_zone['id_zone']) && !empty($all_zone['id_zone'])) ? Tools::safeOutput($all_zone['id_zone']) : 'No ID', $error_tmp);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Range_price
|
|
foreach ($carriersAdditionalSecond['range_price'] as $rangePrice) {
|
|
if ($rangePriceObject = $this->createObjectModel('RangePrice', $rangePrice['id_range_price'])) {
|
|
$rangePriceObject->id_carrier = self::getLocalID('carrier', $rangePrice['id_carrier'], 'data');
|
|
$rangePriceObject->delimiter1 = $rangePrice['delimiter1'];
|
|
$rangePriceObject->delimiter2 = $rangePrice['delimiter2'];
|
|
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $rangePriceObject->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $rangePriceObject->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($rangePriceObject->id && RangePrice::existsInDatabase($rangePriceObject->id, 'range_price')) {
|
|
try {
|
|
$res = $rangePriceObject->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
if (!$res) {
|
|
try {
|
|
$res = $rangePriceObject->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
if (!$this->ps_validation_errors) {
|
|
continue;
|
|
}
|
|
|
|
$this->error_msg[] = sprintf(self::displayError('Range price (ID: %1$s) cannot be saved. %2$s'), (isset($rangePrice['id_range_price']) && !empty($rangePrice['id_range_price'])) ? Tools::safeOutput($rangePrice['id_range_price']) : 'No ID', $err_tmp);
|
|
} else {
|
|
MigrationProData::import('RangePrice', $rangePrice['id_range_price'], $rangePriceObject->id);
|
|
MigrationProMigratedData::import('RangePrice', $rangePrice['id_range_price'], $rangePriceObject->id);
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
if (!$this->ps_validation_errors) {
|
|
continue;
|
|
}
|
|
|
|
$this->error_msg[] = sprintf(self::displayError('Range price (ID: %1$s) cannot be saved. %2$s'), (isset($rangePrice['id_range_price']) && !empty($rangePrice['id_range_price'])) ? Tools::safeOutput($rangePrice['id_range_price']) : 'No ID', $error_tmp);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// // Range_weight
|
|
foreach ($carriersAdditionalSecond['range_weight'] as $rangeWeight) {
|
|
if ($rangeWeightObject = $this->createObjectModel('RangeWeight', $rangeWeight['id_range_weight'])) {
|
|
$rangeWeightObject->id_carrier = self::getLocalID('carrier', $rangeWeight['id_carrier'], 'data');
|
|
$rangeWeightObject->delimiter1 = $rangeWeight['delimiter1'];
|
|
$rangeWeightObject->delimiter2 = $rangeWeight['delimiter2'];
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $rangeWeightObject->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $rangeWeightObject->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($rangeWeightObject->id && RangeWeight::existsInDatabase($rangeWeightObject->id, 'range_weight')) {
|
|
try {
|
|
$res = $rangeWeightObject->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
if (!$res) {
|
|
try {
|
|
$res = $rangeWeightObject->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
if (!$this->ps_validation_errors) {
|
|
continue;
|
|
}
|
|
|
|
$this->error_msg[] = sprintf(self::displayError('Range weight (ID: %1$s) cannot be saved. %2$s'), (isset($rangeWeight['id_range_weight']) && !empty($rangeWeight['id_range_weight'])) ? Tools::safeOutput($rangeWeight['id_range_weight']) : 'No ID', $err_tmp);
|
|
} else {
|
|
MigrationProData::import('RangeWeight', $rangeWeight['id_range_weight'], $rangeWeightObject->id);
|
|
MigrationProMigratedData::import('RangeWeight', $rangeWeight['id_range_weight'], $rangeWeightObject->id);
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
if (!$this->ps_validation_errors) {
|
|
continue;
|
|
}
|
|
|
|
$this->error_msg[] = sprintf(self::displayError('Range weight (ID: %1$s) cannot be saved. %2$s'), (isset($rangeWeight['id_range_weight']) && !empty($rangeWeight['id_range_weight'])) ? Tools::safeOutput($rangeWeight['id_range_weight']) : 'No ID', $error_tmp);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// // Delivery
|
|
foreach ($carriersAdditionalSecond['carrier_delivery'] as $delivery) {
|
|
if ($deliveryObject = $this->createObjectModel('Delivery', $delivery['id_delivery'])) {
|
|
$deliveryObject->id_carrier = self::getLocalID('carrier', $delivery['id_carrier'], 'data');
|
|
$deliveryObject->id_shop = 0;
|
|
$deliveryObject->id_shop_group = 0;
|
|
$deliveryObject->id_range_price = empty($delivery['id_range_price']) ? 0 : $delivery['id_range_price'];
|
|
$deliveryObject->id_range_weight = empty($delivery['id_range_weight']) ? 0 : $delivery['id_range_weight'];
|
|
$deliveryObject->id_zone = $delivery['id_zone'];
|
|
$deliveryObject->price = $delivery['price'];
|
|
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $deliveryObject->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $deliveryObject->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($deliveryObject->id && Delivery::existsInDatabase($deliveryObject->id, 'delivery')) {
|
|
try {
|
|
$res = $deliveryObject->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
if (!$res) {
|
|
try {
|
|
$res = $deliveryObject->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
if (!$this->ps_validation_errors) {
|
|
continue;
|
|
}
|
|
|
|
$this->error_msg[] = sprintf(self::displayError('Delivery (ID: %1$s) cannot be saved. %2$s'), (isset($delivery['id_delivery']) && !empty($delivery['id_delivery'])) ? Tools::safeOutput($delivery['id_delivery']) : 'No ID', $err_tmp);
|
|
} else {
|
|
if ($deliveryObject->id_range_price == 0) {
|
|
Db::getInstance()->execute('UPDATE `' . _DB_PREFIX_ . 'delivery` set id_shop_group = null, id_shop = null, id_range_price = null WHERE id_range_price = 0');
|
|
} else {
|
|
Db::getInstance()->execute('UPDATE `' . _DB_PREFIX_ . 'delivery` set id_shop_group = null, id_shop = null, id_range_weight = null WHERE id_range_weight = 0');
|
|
}
|
|
MigrationProData::import('Delivery', $delivery['id_delivery'], $deliveryObject->id);
|
|
MigrationProMigratedData::import('Delivery', $delivery['id_delivery'], $deliveryObject->id);
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
if (!$this->ps_validation_errors) {
|
|
continue;
|
|
}
|
|
|
|
$this->error_msg[] = sprintf(self::displayError('Delivery (ID: %1$s) cannot be saved. %2$s'), (isset($delivery['id_delivery']) && !empty($delivery['id_delivery'])) ? Tools::safeOutput($delivery['id_delivery']) : 'No ID', $error_tmp);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Import Carrier Tax Rules Group Shop
|
|
$sql_values = array();
|
|
foreach ($carriersAdditionalSecond['carrier_tax_rules_group_shop'] as $carrierTaxRulesGroupShop) {
|
|
if ($carrierTaxRulesGroupShop['id_carrier'] == $carrier['id_carrier']) {
|
|
$sql_values[] = '(' . (int)$carrierObj->id . ', ' . self::getLocalID('taxRulesGroup', ($carrierTaxRulesGroupShop['id_tax_rules_group']), 'data') . ', ' . self::getShopID($carrierTaxRulesGroupShop['id_shop']) . ')';
|
|
}
|
|
}
|
|
if (!self::isEmpty($sql_values)) {
|
|
$result = Db::getInstance()->execute('REPLACE INTO `' . _DB_PREFIX_ . 'carrier_tax_rules_group_shop` (`id_carrier`, `id_tax_rules_group`, `id_shop`) VALUES
|
|
' . implode(',', $sql_values));
|
|
if (!$result) {
|
|
$this->showMigrationMessageAndLog(self::displayError('Can\'t add carrier_tax_rules_group_shop. ' . Db::getInstance()->getMsgError()));
|
|
}
|
|
}
|
|
|
|
// Import Carrier Zone
|
|
$sql_values = array();
|
|
foreach ($carriersAdditionalSecond['carrier_zone'] as $carrierZone) {
|
|
if ($carrierZone['id_carrier'] == $carrier['id_carrier']) {
|
|
$sql_values[] = '(' . (int)$carrierObj->id . ', ' . (int)$carrierZone['id_zone'] . ')';
|
|
}
|
|
}
|
|
if (!self::isEmpty($sql_values)) {
|
|
$result = Db::getInstance()->execute('REPLACE INTO `' . _DB_PREFIX_ . 'carrier_zone` (`id_carrier`, `id_zone`) VALUES ' . implode(',', $sql_values));
|
|
if (!$result) {
|
|
$this->showMigrationMessageAndLog(self::displayError('Can\'t add carrier_zone. ' . Db::getInstance()->getMsgError()));
|
|
}
|
|
}
|
|
|
|
$url = $this->url . $this->image_path . $carrier['id_carrier'] . '.jpg';
|
|
if (self::imageExits($url) && !(EDImport::copyImg($carrierObj->id, null, $url, 'carriers', $this->regenerate))) {
|
|
$this->warning_msg[] = $url . ' ' . self::displayError($this->module->l('cannot be copied.'));
|
|
}
|
|
|
|
self::addLog('Carrier', $carrier['id_carrier'], $carrierObj->id);
|
|
|
|
//update multistore language fields
|
|
if (!version_compare($this->version, '1.5', '<')) {
|
|
if (MigrationProMapping::getMapTypeCount('multi_shops') > 1) {
|
|
foreach ($carriersAdditionalSecond['carrier_lang'] as $lang) {
|
|
if ($lang['id_carrier'] == $carrier['id_carrier']) {
|
|
$lang['id_shop'] = self::getShopID($lang['id_shop']);
|
|
$lang['id_lang'] = self::getLanguageID($lang['id_lang']);
|
|
$lang['id_carrier'] = $carrierObj->id;
|
|
self::updateMultiStoreLang('carrier', $lang);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Carrier (ID: %1$s) cannot be saved. %2$s')), (isset($carrier['id_carrier']) && !self::isEmpty($carrier['id_carrier'])) ? Tools::safeOutput($carrier['id_carrier']) : 'No ID', $error_tmp));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
$this->updateProcess(count($carriers));
|
|
}
|
|
|
|
|
|
// public function warehouses($warehouses, $warehousesAdditionalSecond, $countryState)
|
|
// {
|
|
// // Import Country
|
|
// foreach ($countryState['countries'] as $country) {
|
|
// if ($countryModel = $this->createObjectModel('Country', $country['id_country'])) {
|
|
// $countryModel->id_zone = $country['id_zone'];
|
|
// $countryModel->id_currency = self::getCurrencyID($country['id_currency']);
|
|
// $countryModel->call_prefix = $country['call_prefix'];
|
|
// $countryModel->iso_code = $country['iso_code'];
|
|
// $countryModel->active = $country['active'];
|
|
// $countryModel->contains_states = $country['contains_states'];
|
|
// $countryModel->need_identification_number = $country['need_identification_number'];
|
|
// $countryModel->need_zip_code = $country['need_zip_code'];
|
|
// $countryModel->zip_code_format = $country['zip_code_format'];
|
|
// $countryModel->display_tax_label = (isset($country['display_tax_label'])) ? (bool)$country['display_tax_label'] : true;
|
|
//
|
|
// // Add to _shop relations
|
|
// $countriesShopsRelations = $this->getChangedIdShop($countryState['country_shop'], 'id_country');
|
|
// if (array_key_exists($country['id_country'], $countriesShopsRelations)) {
|
|
// $countryModel->id_shop_list = array_values($countriesShopsRelations[$country['id_country']]);
|
|
// }
|
|
//
|
|
//
|
|
// // Language fields
|
|
// foreach ($countryState['country_lang'] as $lang) {
|
|
// if ($lang['id_country'] == $country['id_country']) {
|
|
// $lang['id_lang'] = self::getLanguageID($lang['id_lang']);
|
|
// $countryModel->name[$lang['id_lang']] = $lang['name'];
|
|
// }
|
|
// }
|
|
//
|
|
// $res = false;
|
|
// $err_tmp = '';
|
|
// if (($field_error = $countryModel->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $countryModel->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
// if ($countryModel->id && Country::existsInDatabase($countryModel->id, 'country')) {
|
|
// try {
|
|
// $res = $countryModel->update();
|
|
// } catch (PrestaShopException $e) {
|
|
// $err_tmp = $e->getMessage();
|
|
// }
|
|
// }
|
|
// if (!$res) {
|
|
// try {
|
|
// $res = $countryModel->add(false);
|
|
// } catch (PrestaShopException $e) {
|
|
// $err_tmp = $e->getMessage();
|
|
// }
|
|
// }
|
|
//
|
|
// if (!$res) {
|
|
// if (!$this->ps_validation_errors) {
|
|
// continue;
|
|
// }
|
|
//
|
|
// $this->error_msg[] = sprintf(self::displayError($this->module->l('Country (ID: %1$s) cannot be saved. %2$s')), (isset($country['id_country']) && !self::isEmpty($country['id_country'])) ? Tools::safeOutput($country['id_country']) : 'No ID', $err_tmp);
|
|
// } else {
|
|
// self::addLog('Country', $country['id_country'], $countryModel->id);
|
|
// }
|
|
// } else {
|
|
// $error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
// if ($error_tmp != '') {
|
|
// if (!$this->ps_validation_errors) {
|
|
// continue;
|
|
// }
|
|
//
|
|
// $this->error_msg[] = sprintf(self::displayError($this->module->l('Country (ID: %1$s) cannot be saved. %2$s')), (isset($country['id_country']) && !self::isEmpty($country['id_country'])) ? Tools::safeOutput($country['id_country']) : 'No ID', $error_tmp);
|
|
// }
|
|
// }
|
|
// }
|
|
// }
|
|
// // Import State
|
|
// foreach ($countryState['states'] as $state) {
|
|
//// if ($state['id_state'] == $address['id_state']) {
|
|
// if ($stateModel = $this->createObjectModel('State', $state['id_state'])) {
|
|
// $stateModel->id_country = self::getLocalId('country', $state['id_country'], 'data');
|
|
// $stateModel->id_zone = $state['id_zone'];
|
|
// $stateModel->iso_code = $state['iso_code'];
|
|
// $stateModel->active = $state['active'];
|
|
// $stateModel->name = $state['name'];
|
|
//
|
|
//
|
|
// $res = false;
|
|
// $err_tmp = '';
|
|
// if (($field_error = $stateModel->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $stateModel->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
// if ($stateModel->id && State::existsInDatabase($stateModel->id, 'state')) {
|
|
// try {
|
|
// $res = $stateModel->update();
|
|
// } catch (PrestaShopException $e) {
|
|
// $err_tmp = $e->getMessage();
|
|
// }
|
|
// }
|
|
// if (!$res) {
|
|
// try {
|
|
// $res = $stateModel->add(false);
|
|
// } catch (PrestaShopException $e) {
|
|
// $err_tmp = $e->getMessage();
|
|
// }
|
|
// }
|
|
//
|
|
// if (!$res) {
|
|
// if (!$this->ps_validation_errors) {
|
|
// continue;
|
|
// }
|
|
//
|
|
// $this->error_msg[] = sprintf(self::displayError($this->module->l('State (ID: %1$s) cannot be saved. %2$s')), (isset($state['id_state']) && !self::isEmpty($state['id_state'])) ? Tools::safeOutput($state['id_state']) : 'No ID', $err_tmp);
|
|
// } else {
|
|
// self::addLog('State', $state['id_state'], $stateModel->id);
|
|
// }
|
|
// } else {
|
|
// $error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
// if ($error_tmp != '') {
|
|
// if (!$this->ps_validation_errors) {
|
|
// continue;
|
|
// }
|
|
//
|
|
// $this->error_msg[] = sprintf(self::displayError($this->module->l('State (ID: %1$s) cannot be saved. %2$s')), (isset($state['id_state']) && !self::isEmpty($state['id_state'])) ? Tools::safeOutput($state['id_state']) : 'No ID', $error_tmp);
|
|
// }
|
|
// }
|
|
//// }
|
|
// }
|
|
// }
|
|
// // Import Address
|
|
// foreach ($warehousesAdditionalSecond['address'] as $address) {
|
|
// if ($addressObject = $this->createObjectModel('Address', $address['id_address'])) {
|
|
// $addressObject->id_customer = $address['id_customer'];
|
|
// $addressObject->id_manufacturer = self::getLocalId('manufacturer', $address['id_manufacturer'], 'data');
|
|
// $addressObject->id_supplier = self::getLocalId('supplier', $address['id_supplier'], 'data');
|
|
// $addressObject->id_country = self::getLocalId('country', $address['id_country'], 'data');
|
|
// $addressObject->id_state = self::getLocalId('state', $address['id_state'], 'data');
|
|
// $addressObject->alias = $address['alias'];
|
|
// $addressObject->company = $address['company'];
|
|
// $addressObject->lastname = $address['lastname'];
|
|
// $addressObject->firstname = $address['firstname'];
|
|
// $addressObject->vat_number = $address['vat_number'];
|
|
// $addressObject->address1 = $address['address1'];
|
|
// $addressObject->address2 = $address['address2'];
|
|
// $addressObject->postcode = $address['postcode'];
|
|
// $addressObject->city = $address['city'];
|
|
// $addressObject->other = $address['other'];
|
|
// $addressObject->phone = $address['phone'];
|
|
// $addressObject->phone_mobile = $address['phone_mobile'];
|
|
// $addressObject->dni = $address['dni'];
|
|
// $addressObject->deleted = $address['deleted'];
|
|
// $addressObject->date_add = $address['date_add'] == '0000-00-00 00:00:00' ? date('Y-m-d H:i:s') : $address['date_add'];
|
|
// $addressObject->date_upd = $address['date_upd'] == '0000-00-00 00:00:00' ? date('Y-m-d H:i:s') : $address['date_upd'];
|
|
//// if ($this->version >= 1.5) {
|
|
// $addressObject->id_warehouse = (isset($address['id_warehouse']) && !self::isEmpty($address['id_warehouse'])) ? $address['id_warehouse'] : null;
|
|
//// }
|
|
//
|
|
// $res = false;
|
|
// $err_tmp = '';
|
|
// if (($field_error = $addressObject->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $addressObject->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
// if ($addressObject->id && Address::existsInDatabase($addressObject->id, 'address')) {
|
|
// try {
|
|
// $res = $addressObject->update();
|
|
// } catch (PrestaShopException $e) {
|
|
// $err_tmp = $e->getMessage();
|
|
// }
|
|
// }
|
|
// if (!$res) {
|
|
// try {
|
|
// $res = $addressObject->add(false);
|
|
// } catch (PrestaShopException $e) {
|
|
// $err_tmp = $e->getMessage();
|
|
// }
|
|
// }
|
|
//
|
|
// if (!$res) {
|
|
// if (!$this->ps_validation_errors) {
|
|
// continue;
|
|
// }
|
|
//
|
|
// $this->error_msg[] = sprintf(self::displayError($this->module->l('Address (ID: %1$s) cannot be saved. %2$s')), (isset($address['id_address']) && !self::isEmpty($address['id_address'])) ? Tools::safeOutput($address['id_address']) : 'No ID', $err_tmp);
|
|
// } else {
|
|
// self::addLog('Address', $address['id_address'], $addressObject->id);
|
|
// }
|
|
// } else {
|
|
// $error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
// if ($error_tmp != '') {
|
|
// if (!$this->ps_validation_errors) {
|
|
// continue;
|
|
// }
|
|
//
|
|
// $this->error_msg[] = sprintf(self::displayError($this->module->l('Address (ID: %1$s) cannot be saved. %2$s')), (isset($address['id_address']) && !self::isEmpty($address['id_address'])) ? Tools::safeOutput($address['id_address']) : 'No ID', $error_tmp);
|
|
// }
|
|
// }
|
|
// }
|
|
// }
|
|
//
|
|
//
|
|
// foreach ($warehouses as $warehouse) {
|
|
// if ($warehouseObj = $this->createObjectModel('Warehouse', $warehouse['id_warehouse'])) {
|
|
// $warehouseObj->id_address = $warehouse['id_address'];
|
|
// $warehouseObj->reference = $warehouse['reference'];
|
|
// $warehouseObj->name = $warehouse['name'];
|
|
// $warehouseObj->id_employee = $warehouse['id_employee'];
|
|
// $warehouseObj->id_currency = $warehouse['id_currency'];
|
|
// $warehouseObj->deleted = $warehouse['deleted'];
|
|
// $warehouseObj->management_type = $warehouse['management_type'];
|
|
//
|
|
//
|
|
//
|
|
// // Add to _shop relations
|
|
// $warehouseShopsRelations = $this->getChangedIdShop($warehousesAdditionalSecond['warehouse_shop'], 'id_warehouse');
|
|
// if (array_key_exists($warehouse['id_warehouse'], $warehouseShopsRelations)) {
|
|
// $warehouseObj->id_shop_list = array_values($warehouseShopsRelations[$warehouse['id_warehouse']]);
|
|
// }
|
|
//
|
|
// $res = false;
|
|
// $err_tmp = '';
|
|
// if (($field_error = $warehouseObj->validateFields(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
// if ($warehouseObj->id && Warehouse::existsInDatabase($warehouseObj->id, 'warehouse')) {
|
|
// try {
|
|
// $res = $warehouseObj->update();
|
|
// } catch (PrestaShopException $e) {
|
|
// $err_tmp = $e->getMessage();
|
|
// }
|
|
// }
|
|
//
|
|
// if (!$res) {
|
|
// try {
|
|
// $res = $warehouseObj->add(false);
|
|
// } catch (PrestaShopException $e) {
|
|
// $err_tmp = $e->getMessage();
|
|
// }
|
|
// }
|
|
// if (!$res) {
|
|
// if (!$this->ps_validation_errors) {
|
|
// continue;
|
|
// }
|
|
//
|
|
// $this->error_msg[] = sprintf(self::displayError($this->module->l('Warehouse (ID: %1$s) cannot be saved. %2$s')), (isset($warehouse['id_warehouse']) && !self::isEmpty($warehouse['id_warehouse'])) ? Tools::safeOutput($warehouse['id_warehouse']) : 'No ID', $err_tmp);
|
|
// } else {
|
|
// // Import warehouse_carrier
|
|
// $sql_values = array();
|
|
// foreach ($warehousesAdditionalSecond['warehouse_carrier'] as $warehouseCarrier) {
|
|
// if ($warehouseCarrier['id_warehouse'] == $warehouse['id_warehouse']) {
|
|
// $sql_values[] = '(' . MigrationProData::getLocalID('Carrier', $warehouseCarrier['id_carrier']) . ', ' . (int)$warehouseObj->id . ')';
|
|
// }
|
|
// }
|
|
// if (!self::isEmpty($sql_values)) {
|
|
// $result = Db::getInstance()->execute('REPLACE INTO `' . _DB_PREFIX_ . 'warehouse_carrier` (`id_carrier`, `id_warehouse`) VALUES ' . implode(',', $sql_values));
|
|
// if (!$result) {
|
|
// if (!$this->ps_validation_errors) {
|
|
// continue;
|
|
// }
|
|
//
|
|
// $this->error_msg[] = self::displayError('Can\'t add warehouse_carrier. ' . Db::getInstance()->getMsgError());
|
|
// $this->error_msg[] = self::displayError('Can\'t add warehouse_carrier. ' . Db::getInstance()->getMsgError());
|
|
// }
|
|
// }
|
|
//
|
|
// self::addLog('Warehouse', $warehouse['id_warehouse'], $warehouseObj->id);
|
|
// }
|
|
// } else {
|
|
// $error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
// if ($error_tmp != '') {
|
|
// if (!$this->ps_validation_errors) {
|
|
// continue;
|
|
// }
|
|
//
|
|
// $this->error_msg[] = sprintf(self::displayError($this->module->l('Warehouse (ID: %1$s) cannot be saved. %2$s')), (isset($warehouse['id_warehouse']) && !self::isEmpty($warehouse['id_warehouse'])) ? Tools::safeOutput($warehouse['id_warehouse']) : 'No ID', $error_tmp);
|
|
// }
|
|
// }
|
|
// }
|
|
// }
|
|
//
|
|
// $this->updateProcess(count($warehouses));
|
|
// }
|
|
|
|
/**
|
|
* @param $products
|
|
* @param $product2AdditionalSecond
|
|
* @param $productAdditionalThird
|
|
* @param $productAdditionalFourth
|
|
*/
|
|
|
|
public function products($products, $productAdditionalSecond, $productAdditionalThird, $productAdditionalFourth, $innerMethodCall = false)
|
|
{
|
|
Module::setBatchMode(true);
|
|
|
|
//@TODO create import function for each data type
|
|
// import supplier
|
|
foreach ($productAdditionalThird['supplier'] as $supplier) {
|
|
if ($supplierObj = $this->createObjectModel('Supplier', $supplier['id_supplier'])) {
|
|
$supplierObj->name = $supplier['name'];
|
|
$supplierObj->active = $supplier['active'];
|
|
$supplierObj->date_add = $supplier['date_add'];
|
|
$supplierObj->date_upd = $supplier['date_upd'];
|
|
//language fields
|
|
foreach ($productAdditionalThird['supplier_lang'] as $lang) {
|
|
if ($lang['id_supplier'] == $supplier['id_supplier']) {
|
|
$lang['id_lang'] = self::getLanguageID($lang['id_lang']);
|
|
$supplierObj->description[$lang['id_lang']] = $lang['description'];
|
|
$supplierObj->meta_title[$lang['id_lang']] = $lang['meta_title'];
|
|
$supplierObj->meta_description[$lang['id_lang']] = $lang['meta_description'];
|
|
$supplierObj->meta_keywords[$lang['id_lang']] = $lang['meta_keywords'];
|
|
}
|
|
}
|
|
|
|
// Add to _shop relations
|
|
$suppliersShopsRelations = $this->getChangedIdShop($productAdditionalThird['supplier_shop'], 'id_supplier');
|
|
if (array_key_exists($supplier['id_supplier'], $suppliersShopsRelations)) {
|
|
$supplierObj->id_shop_list = array_values($suppliersShopsRelations[$supplier['id_supplier']]);
|
|
}
|
|
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $supplierObj->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $supplierObj->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($supplierObj->id && Supplier::existsInDatabase($supplierObj->id, 'supplier')) {
|
|
try {
|
|
$res = $supplierObj->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
try {
|
|
$res = $supplierObj->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Supplier (ID: %1$s) cannot be saved. %2$s')), (isset($supplier['id_supplier']) && !self::isEmpty($supplier['id_supplier'])) ? Tools::safeOutput($supplier['id_supplier']) : 'No ID', $err_tmp));
|
|
} else {
|
|
$url = $this->url . $this->image_supplier_path . $supplier['id_supplier'] . '.jpg';
|
|
if (self::imageExits($url) && !(EDImport::copyImg($supplierObj->id, null, $url, 'suppliers', $this->regenerate))) {
|
|
$this->warning_msg[] = $url . ' ' . self::displayError($this->module->l('cannot be copied.'));
|
|
}
|
|
|
|
self::addLog('Supplier', $supplier['id_supplier'], $supplierObj->id);
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Supplier (ID: %1$s) cannot be saved. %2$s')), (isset($supplier['id_supplier']) && !self::isEmpty($supplier['id_supplier'])) ? Tools::safeOutput($supplier['id_supplier']) : 'No ID', $error_tmp));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// import attribute group
|
|
foreach ($productAdditionalFourth['attribute_group'] as $attributeGroup) {
|
|
if ($attributeGroupObj = $this->createObjectModel('AttributeGroup', $attributeGroup['id_attribute_group'])) {
|
|
$attributeGroupObj->is_color_group = $attributeGroup['is_color_group'];
|
|
$attributeGroupObj->group_type = ($attributeGroup['is_color_group']) ? 'color' : 'select';
|
|
foreach ($productAdditionalFourth['attribute_group_lang'] as $lang) {
|
|
if ($attributeGroup['id_attribute_group'] == $lang['id_attribute_group']) {
|
|
$lang['id_lang'] = self::getLanguageID($lang['id_lang']);
|
|
$attributeGroupObj->name[$lang['id_lang']] = $lang['name'];
|
|
$attributeGroupObj->public_name[$lang['id_lang']] = $lang['public_name'];
|
|
}
|
|
}
|
|
|
|
// Add to _shop relations
|
|
$attributeGroupsShopsRelations = $this->getChangedIdShop($productAdditionalFourth['attribute_group_shop'], 'id_attribute_group');
|
|
if (array_key_exists($attributeGroup['id_attribute_group'], $attributeGroupsShopsRelations)) {
|
|
$attributeGroupObj->id_shop_list = array_values($attributeGroupsShopsRelations[$attributeGroup['id_attribute_group']]);
|
|
}
|
|
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $attributeGroupObj->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $attributeGroupObj->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($attributeGroupObj->id && AttributeGroup::existsInDatabase($attributeGroupObj->id, 'attribute_group')) {
|
|
try {
|
|
$res = $attributeGroupObj->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
try {
|
|
$res = $attributeGroupObj->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('AttributeGroup (ID: %1$s) cannot be saved. %2$s')), (isset($attributeGroup['id_attribute_group']) && !self::isEmpty($attributeGroup['id_attribute_group'])) ? Tools::safeOutput($attributeGroup['id_attribute_group']) : 'No ID', $err_tmp));
|
|
} else {
|
|
self::addLog('AttributeGroup', $attributeGroup['id_attribute_group'], $attributeGroupObj->id);
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('AttributeGroup (ID: %1$s) cannot be saved. %2$s')), (isset($attributeGroup['id_attribute_group']) && !self::isEmpty($attributeGroup['id_attribute_group'])) ? Tools::safeOutput($attributeGroup['id_attribute_group']) : 'No ID', $error_tmp));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// import attribute
|
|
foreach ($productAdditionalFourth['attribute'] as $attribute) {
|
|
if ($attributeObj = $this->createObjectModel('Attribute', $attribute['id_attribute'])) {
|
|
$attributeObj->id_attribute_group = self::getLocalID('attributegroup', (int)$attribute['id_attribute_group'], 'data');
|
|
$attributeObj->color = $attribute['color'];
|
|
foreach ($productAdditionalFourth['attribute_lang'] as $lang) {
|
|
if ($attribute['id_attribute'] == $lang['id_attribute']) {
|
|
$lang['id_lang'] = self::getLanguageID($lang['id_lang']);
|
|
$attributeObj->name[$lang['id_lang']] = $lang['name'];
|
|
}
|
|
}
|
|
|
|
// Add to _shop relations
|
|
$attributesShopsRelations = $this->getChangedIdShop($productAdditionalFourth['attribute_shop'], 'id_attribute');
|
|
if (array_key_exists($attribute['id_attribute'], $attributesShopsRelations)) {
|
|
$attributeObj->id_shop_list = array_values($attributesShopsRelations[$attribute['id_attribute']]);
|
|
}
|
|
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $attributeObj->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $attributeObj->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($attributeObj->id && Attribute::existsInDatabase($attributeObj->id, 'attribute')) {
|
|
try {
|
|
$res = $attributeObj->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
try {
|
|
$res = $attributeObj->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Attribute (ID: %1$s) cannot be saved. %2$s')), (isset($attribute['id_attribute']) && !self::isEmpty($attribute['id_attribute'])) ? Tools::safeOutput($attribute['id_attribute']) : 'No ID', $err_tmp));
|
|
} else {
|
|
self::addLog('Attribute', $attribute['id_attribute'], $attributeObj->id);
|
|
// import attribute texture image
|
|
if (self::imageExits($this->url . '/img/co/' . $attribute['id_attribute'] . '.jpg')) {
|
|
self::copyImg($attributeObj->id, null, $this->url . '/img/co/' . $attribute['id_attribute'] . '.jpg', 'attributes');
|
|
}
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Attribute (ID: %1$s) cannot be saved. %2$s')), (isset($attribute['id_attribute']) && !self::isEmpty($attribute['id_attribute'])) ? Tools::safeOutput($attribute['id_attribute']) : 'No ID', $error_tmp));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// import feature
|
|
foreach ($productAdditionalSecond['feature_product'] as $feature) {
|
|
if ($featureObj = $this->createObjectModel('Feature', $feature['id_feature'])) {
|
|
if (isset($feature['position']) && !self::isEmpty($feature['position'])) {
|
|
$featureObj->position = (int)$feature['position'];
|
|
} else {
|
|
$featureObj->position = Feature::getHigherPosition() + 1;
|
|
}
|
|
|
|
foreach ($productAdditionalThird['feature_lang'] as $lang) {
|
|
if ($lang['id_feature'] == $feature['id_feature']) {
|
|
$lang['id_lang'] = self::getLanguageID($lang['id_lang']);
|
|
$featureObj->name[$lang['id_lang']] = $lang['name'];
|
|
if (self::isEmpty($featureObj->name[$lang['id_lang']])) {
|
|
$featureObj->name[$lang['id_lang']] = 'empty';
|
|
}
|
|
}
|
|
}
|
|
|
|
// Add to _shop relations
|
|
$featuresShopsRelations = $this->getChangedIdShop($productAdditionalThird['feature_shop'], 'id_feature');
|
|
if (array_key_exists($feature['id_feature'], $featuresShopsRelations)) {
|
|
$featureObj->id_shop_list = array_values($featuresShopsRelations[$feature['id_feature']]);
|
|
}
|
|
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $featureObj->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $featureObj->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($featureObj->id && Feature::existsInDatabase($featureObj->id, 'feature')) {
|
|
try {
|
|
$res = $featureObj->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
try {
|
|
$res = $featureObj->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Feature (ID: %1$s) cannot be saved. %2$s')), (isset($feature['id_feature']) && !self::isEmpty($feature['id_feature'])) ? Tools::safeOutput($feature['id_feature']) : 'No ID', $err_tmp));
|
|
} else {
|
|
self::addLog('Feature', $feature['id_feature'], $featureObj->id);
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Feature (ID: %1$s) cannot be saved. %2$s')), (isset($feature['id_feature']) && !self::isEmpty($feature['id_feature'])) ? Tools::safeOutput($feature['id_feature']) : 'No ID', $error_tmp));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// import feature value
|
|
foreach ($productAdditionalThird['feature_value'] as $featureValue) {
|
|
if ($featureValueObj = $this->createObjectModel('FeatureValue', $featureValue['id_feature_value'])) {
|
|
$featureValueObj->id_feature = self::getLocalId('feature', $featureValue['id_feature'], 'data');
|
|
$featureValueObj->custom = $featureValue['custom'];
|
|
foreach ($productAdditionalThird['feature_value_lang'] as $lang) {
|
|
if ($lang['id_feature_value'] == $featureValue['id_feature_value']) {
|
|
$lang['id_lang'] = self::getLanguageID($lang['id_lang']);
|
|
$featureValueObj->value[$lang['id_lang']] = (!self::isEmpty($lang['value']) ? $lang['value'] : ' ');
|
|
}
|
|
}
|
|
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $featureValueObj->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $featureValueObj->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($featureValueObj->id && FeatureValue::existsInDatabase($featureValueObj->id, 'feature_value')) {
|
|
try {
|
|
$res = $featureValueObj->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
try {
|
|
$res = $featureValueObj->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('FeatureValue (ID: %1$s) cannot be saved. %2$s')), (isset($featureValue['id_feature_value']) && !self::isEmpty($featureValue['id_feature_value'])) ? Tools::safeOutput($featureValue['id_feature_value']) : 'No ID', $err_tmp));
|
|
} else {
|
|
self::addLog('FeatureValue', $featureValue['id_feature_value'], $featureValueObj->id);
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('FeatureValue (ID: %1$s) cannot be saved. %2$s')), (isset($featureValue['id_feature_value']) && !self::isEmpty($featureValue['id_feature_value'])) ? Tools::safeOutput($featureValue['id_feature_value']) : 'No ID', $error_tmp));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// import Tag
|
|
foreach ($productAdditionalThird['tag'] as $tag) {
|
|
//id-lang for version PS 1.4
|
|
$tagPS14 = '';
|
|
$tagPS14[$tag['id_tag']] = self::getLocalId('tag', $tag['id_lang'], 'data');
|
|
if ($tagObject = $this->createObjectModel('Tag', $tag['id_tag'])) {
|
|
$tagObject->id_lang = self::getLanguageID($tag['id_lang']);
|
|
$tagObject->name = $tag['name'];
|
|
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $tagObject->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $tagObject->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($tagObject->id && Tag::existsInDatabase($tagObject->id, 'tag')) {
|
|
try {
|
|
$res = $tagObject->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
try {
|
|
$res = $tagObject->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Tag (ID: %1$s) cannot be saved. %2$s')), (isset($tag['id_tag']) && !self::isEmpty($tag['id_tag'])) ? Tools::safeOutput($tag['id_tag']) : 'No ID', $err_tmp));
|
|
} else {
|
|
self::addLog('Tag', $tag['id_tag'], $tagObject->id);
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Tag (ID: %1$s) cannot be saved. %2$s')), (isset($tag['id_tag']) && !self::isEmpty($tag['id_tag'])) ? Tools::safeOutput($tag['id_tag']) : 'No ID', $error_tmp));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// import Products
|
|
foreach ($products as $product) {
|
|
if ($productObj = $this->createObjectModel('Product', $product['id_product'])) {
|
|
$productObj->id_manufacturer = self::getLocalId('manufacturer', $product['id_manufacturer'], 'data');
|
|
$productObj->id_supplier = self::getLocalId('supplier', $product['id_supplier'], 'data');
|
|
$productObj->reference = $product['reference'];
|
|
$productObj->supplier_reference = $product['supplier_reference'];
|
|
$productObj->location = $product['location'];
|
|
$productObj->width = $product['width'];
|
|
$productObj->height = $product['height'];
|
|
$productObj->depth = $product['depth'];
|
|
$productObj->weight = $product['weight'];
|
|
$productObj->quantity_discount = $product['quantity_discount'];
|
|
$productObj->ean13 = $product['ean13'];
|
|
$productObj->upc = $product['upc'];
|
|
$productObj->cache_is_pack = $product['cache_is_pack'];
|
|
$productObj->cache_has_attachments = $product['cache_has_attachments'];
|
|
if ($product['id_category_default'] == 1 || $product['id_category_default'] == 0 || $product['id_category_default'] == 2) {
|
|
$productObj->id_category_default = Configuration::get('PS_HOME_CATEGORY');
|
|
} else {
|
|
if (self::isEmpty(self::getLocalId('category', $product['id_category_default'], 'data'))) {
|
|
$productObj->id_category_default = Configuration::get('PS_HOME_CATEGORY');
|
|
} else {
|
|
$productObj->id_category_default = self::getLocalId('category', $product['id_category_default'], 'data');
|
|
}
|
|
}
|
|
$productObj->id_tax_rules_group = self::getLocalId('taxrulesgroup', $product['id_tax_rules_group'], 'data');
|
|
$productObj->on_sale = $product['on_sale'];
|
|
$productObj->online_only = $product['online_only'];
|
|
$productObj->ecotax = $product['ecotax'];
|
|
$productObj->minimal_quantity = $product['minimal_quantity'];
|
|
$productObj->price = $product['price'];
|
|
$productObj->wholesale_price = $product['wholesale_price'];
|
|
$productObj->unity = $product['unity'];
|
|
$productObj->unit_price_ratio = $product['unit_price_ratio'];
|
|
$productObj->additional_shipping_cost = $product['additional_shipping_cost'];
|
|
$productObj->customizable = $product['customizable'];
|
|
$productObj->text_fields = $product['text_fields'];
|
|
$productObj->uploadable_files = $product['uploadable_files'];
|
|
$productObj->active = $product['active'];
|
|
$productObj->available_for_order = $product['available_for_order'];
|
|
$productObj->condition = $product['condition'];
|
|
$productObj->show_price = $product['show_price'];
|
|
$productObj->indexed = 0; // always zero for new PS $product['indexed'];
|
|
$productObj->cache_default_attribute = $product['cache_default_attribute'];
|
|
$productObj->date_add = $product['date_add'] == '0000-00-00 00:00:00' ? date('Y-m-d H:i:s') : $product['date_add'];
|
|
$productObj->date_upd = $product['date_upd'] == '0000-00-00 00:00:00' ? date('Y-m-d H:i:s') : $product['date_upd'];
|
|
$productObj->out_of_stock = $product['out_of_stock'];
|
|
// $productObj->id_color_default = $product['id_color_default']; // @deprecated 1.5.0
|
|
$productObj->quantity = $product['quantity'];
|
|
if ($this->version >= 1.5) {
|
|
$productObj->id_shop_default = self::getShopID($product['id_shop_default']);
|
|
// $productObj->isbn = $product['isbn'];
|
|
$productObj->is_virtual = $product['is_virtual'];
|
|
$productObj->redirect_type = $product['redirect_type'];
|
|
$productObj->id_product_redirected = isset($product['id_product_redirected']) ? $product['id_product_redirected'] : 0;
|
|
$productObj->available_date = $product['available_date'];
|
|
// $productObj->show_condition = $product['show_condition'];
|
|
$productObj->visibility = $product['visibility'];
|
|
$productObj->advanced_stock_management = $product['advanced_stock_management'];
|
|
}
|
|
|
|
// Add to _shop relations
|
|
$productsShopsRelations = $this->getChangedIdShop($productAdditionalSecond['product_shop'], 'id_product');
|
|
if (array_key_exists($product['id_product'], $productsShopsRelations)) {
|
|
$productObj->id_shop_list = array_values($productsShopsRelations[$product['id_product']]);
|
|
}
|
|
|
|
//language fields
|
|
foreach ($productAdditionalSecond['product_lang'] as $lang) {
|
|
if ($lang['id_product'] == $product['id_product']) {
|
|
$lang['id_lang'] = self::getLanguageID($lang['id_lang']);
|
|
$productObj->meta_description[$lang['id_lang']] = $lang['meta_description'];
|
|
$productObj->meta_keywords[$lang['id_lang']] = $lang['meta_keywords'];
|
|
$productObj->meta_title[$lang['id_lang']] = $lang['meta_title'];
|
|
$productObj->name[$lang['id_lang']] = $lang['name'];
|
|
$productObj->link_rewrite[$lang['id_lang']] = $lang['link_rewrite'];
|
|
if (isset($productObj->link_rewrite[$lang['id_lang']]) && !self::isEmpty($productObj->link_rewrite[$lang['id_lang']])) {
|
|
$valid_link = Validate::isLinkRewrite($productObj->link_rewrite[$lang['id_lang']]);
|
|
} else {
|
|
$valid_link = false;
|
|
}
|
|
if (!$valid_link) {
|
|
$productObj->link_rewrite[$lang['id_lang']] = Tools::link_rewrite($productObj->name[$lang['id_lang']]);
|
|
|
|
if ($productObj->link_rewrite[$lang['id_lang']] == '') {
|
|
$productObj->link_rewrite[$lang['id_lang']] = 'friendly-url-autogeneration-failed';
|
|
$this->warning_msg[] = sprintf(self::displayError($this->module->l('URL rewriting failed to auto-generate a friendly URL for: %s')), $productObj->name[$lang['id_lang']]);
|
|
}
|
|
|
|
$this->warning_msg[] = sprintf(self::displayError($this->module->l('The link for %1$s (ID: %2$s) was re-written as %3$s.')), $lang['link_rewrite'], (isset($product['id_product']) && !self::isEmpty($product['id_product'])) ? $product['id_product'] : 'null', $productObj->link_rewrite[$lang['id_lang']]);
|
|
}
|
|
$productObj->description[$lang['id_lang']] = $lang['description'];
|
|
$productObj->description_short[$lang['id_lang']] = $lang['description_short'];
|
|
$productObj->available_now[$lang['id_lang']] = $lang['available_now'];
|
|
$productObj->available_later[$lang['id_lang']] = $lang['available_later'];
|
|
}
|
|
}
|
|
|
|
foreach ($productAdditionalSecond['product_carrier'] as $productCarrier) {
|
|
if ($productCarrier['id_product'] == $product['id_product']) {
|
|
$id_product = $productCarrier['id_product'];
|
|
$id_carrier_reference = self::getCarrierReference($productCarrier['id_carrier']);
|
|
$id_shop = (int)self::getShopID($productCarrier['id_shop']);
|
|
|
|
$result = Db::getInstance()->execute('INSERT IGNORE INTO ' . _DB_PREFIX_ . 'product_carrier (`id_product`, `id_carrier_reference`, `id_shop`) VALUES (' . $id_product . ', ' . $id_carrier_reference . ', ' . $id_shop . ')');
|
|
if (!$result) {
|
|
if (!$this->ps_validation_errors) {
|
|
continue;
|
|
}
|
|
|
|
$this->error_msg[] = self::displayError('Can\'t update product_carrier. ' . Db::getInstance()->getMsgError());
|
|
}
|
|
}
|
|
}
|
|
|
|
//@TODO get shop id from step-2
|
|
if (!$this->shop_is_feature_active) {
|
|
$productObj->id_shop_default = (int)Configuration::get('PS_SHOP_DEFAULT');
|
|
} else {
|
|
$productObj->id_shop_default = (int)Context::getContext()->shop->id;
|
|
}
|
|
|
|
$res = false;
|
|
$err_tmp = '';
|
|
|
|
if (($field_error = $productObj->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $productObj->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($productObj->id && Product::existsInDatabase((int)$productObj->id, 'product')) {
|
|
try {
|
|
$res = $productObj->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
try {
|
|
$res = $productObj->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
if (!$res) {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Product (ID: %1$s) cannot be saved. %2$s')), (isset($product['id_product']) && !self::isEmpty($product['id_product'])) ? Tools::safeOutput($product['id_product']) : 'No ID', $err_tmp));
|
|
} else {
|
|
// set quantity to StockAvailable
|
|
if ($this->version >= 1.5) {
|
|
foreach ($productAdditionalSecond['stock_available'] as $stock_available) {
|
|
if ($product['id_product'] == $stock_available['id_product'] && $stock_available['id_product_attribute'] == 0) {
|
|
StockAvailable::setQuantity($productObj->id, $stock_available['id_product_attribute'], $stock_available['quantity']);
|
|
StockAvailable::setProductDependsOnStock($productObj->id, $stock_available['depends_on_stock']);
|
|
StockAvailable::setProductOutOfStock($productObj->id, $stock_available['out_of_stock']);
|
|
}
|
|
}
|
|
} else {
|
|
StockAvailable::setQuantity($productObj->id, 0, $product['quantity']);
|
|
}
|
|
|
|
//update product activity for each shop
|
|
foreach ($productAdditionalSecond['product_shop'] as $productShop) {
|
|
if ($productShop['id_product'] == $product['id_product']) {
|
|
$result = Db::getInstance()->execute('UPDATE ' . _DB_PREFIX_ . 'product_shop SET active = ' . (int)$productShop['active'] . ' WHERE id_product = ' . (int)$productObj->id . ' AND id_shop = ' . (int)self::getShopID($productShop['id_shop']));
|
|
if (!$result) {
|
|
$this->showMigrationMessageAndLog(self::displayError('Can\'t update product_shop. ' . Db::getInstance()->getMsgError()));
|
|
}
|
|
}
|
|
}
|
|
|
|
//import Category_Product
|
|
$sql_values = array();
|
|
foreach ($productAdditionalSecond['category_product'] as $categoryProduct) {
|
|
if ($categoryProduct['id_product'] == $product['id_product']) {
|
|
if ((int)$categoryProduct['id_category'] == 2) {
|
|
if (version_compare($this->version, '1.5', '<')) {
|
|
$sql_values[] = '(' . self::getLocalID('category', (int)$categoryProduct['id_category'], 'data') . ', ' . (int)$productObj->id . ', ' . (int)$categoryProduct['position'] . ')';
|
|
} else {
|
|
$sql_values[] = '(' . (int)$categoryProduct['id_category'] . ', ' . (int)$productObj->id . ', ' . (int)$categoryProduct['position'] . ')';
|
|
}
|
|
} else {
|
|
$sql_values[] = '(' . self::getLocalID('category', (int)$categoryProduct['id_category'], 'data') . ', ' . (int)$productObj->id . ', ' . (int)$categoryProduct['position'] . ')';
|
|
}
|
|
}
|
|
}
|
|
if (!self::isEmpty($sql_values)) {
|
|
$result = Db::getInstance()->execute('REPLACE INTO `' . _DB_PREFIX_ . 'category_product` (`id_category`, `id_product`, `position`) VALUES ' . implode(',', $sql_values));
|
|
|
|
if (!$result) {
|
|
$this->showMigrationMessageAndLog(self::displayError('Can\'t add category_product. ' . Db::getInstance()->getMsgError()));
|
|
}
|
|
}
|
|
|
|
//import images
|
|
foreach ($productAdditionalSecond['image'] as $image) {
|
|
if ($product['id_product'] == $image['id_product']) {
|
|
if ($imageObject = $this->createObjectModel('Image', $image['id_image'])) {
|
|
$imageObject->id_product = $productObj->id;
|
|
$imageObject->position = $image['position'];
|
|
$imageObject->cover = $image['cover'];
|
|
//language fields
|
|
foreach ($productAdditionalThird['image_lang'] as $lang) {
|
|
if ($lang['id_image'] == $image['id_image']) {
|
|
$lang['id_lang'] = self::getLanguageID($lang['id_lang']);
|
|
$imageObject->legend[$lang['id_lang']] = $lang['legend'];
|
|
}
|
|
}
|
|
// Add to _shop relations
|
|
$imagesShopsRelations = $this->getChangedIdShop($productAdditionalThird['image_shop'], 'id_image');
|
|
if (array_key_exists($image['id_image'], $imagesShopsRelations)) {
|
|
$imageObject->id_shop_list = array_values($imagesShopsRelations[$image['id_image']]);
|
|
}
|
|
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $imageObject->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $imageObject->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($imageObject->id && Image::existsInDatabase($imageObject->id, 'image')) {
|
|
try {
|
|
$res = $imageObject->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
try {
|
|
$res = $imageObject->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
$this->warning_msg[] = sprintf(self::displayError('Image (ID: %1$s) cannot be saved. Product (ID:
|
|
%2$s). %3$s'), (isset($image['id_image']) && !self::isEmpty($image['id_image'])) ? Tools::safeOutput($image['id_image']) : 'No ID', $productObj->id, $err_tmp);
|
|
} else {
|
|
$url = $this->url . $this->image_path . Image::getImgFolderStatic($image['id_image']) . (int)$image['id_image'] . '.jpg';
|
|
|
|
if (!self::imageExits($url)) {
|
|
$url = $this->url . $this->image_path . $product['id_product'] . '-' . $image['id_image'] . '.jpg';
|
|
}
|
|
|
|
if (self::imageExits($url) && !(EDImport::copyImg($productObj->id, $imageObject->id, $url, 'products', $this->regenerate))) {
|
|
$this->warning_msg[] = $url . ' ' . self::displayError($this->module->l('cannot be copied.'));
|
|
}
|
|
|
|
self::addLog('Image', $image['id_image'], $imageObject->id);
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
$this->warning_msg[] = sprintf(self::displayError('Image (ID: %1$s) cannot be saved. Product (ID:
|
|
%2$s). %3$s'), (isset($image['id_image']) && !self::isEmpty($image['id_image'])) ? Tools::safeOutput($image['id_image']) : 'No ID', $productObj->id, $err_tmp);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//import Product Attribute
|
|
foreach ($productAdditionalSecond['product_attribute'] as $productAttribute) {
|
|
if ($productAttribute['id_product'] == $product['id_product']) {
|
|
if ($combinationModel = $this->createObjectModel('Combination', $productAttribute['id_product_attribute'])) {
|
|
$combinationModel->id_product = $productObj->id;
|
|
$combinationModel->location = $productAttribute['location'];
|
|
$combinationModel->ean13 = $productAttribute['ean13'];
|
|
$combinationModel->upc = $productAttribute['upc'];
|
|
$combinationModel->quantity = $productAttribute['quantity'];
|
|
$combinationModel->reference = $productAttribute['reference'];
|
|
$combinationModel->supplier_reference = $productAttribute['supplier_reference'];
|
|
$combinationModel->wholesale_price = $productAttribute['wholesale_price'];
|
|
$combinationModel->price = $productAttribute['price'];
|
|
$combinationModel->ecotax = $productAttribute['ecotax'];
|
|
$combinationModel->weight = $productAttribute['weight'];
|
|
$combinationModel->unit_price_impact = $productAttribute['unit_price_impact'];
|
|
$combinationModel->minimal_quantity = (isset($productAttribute['minimal_quantity']) && !self::isEmpty($productAttribute['minimal_quantity'])) ? $productAttribute['minimal_quantity'] : 1;
|
|
$combinationModel->default_on = $productAttribute['default_on'];
|
|
if ($this->version >= 1.5) {
|
|
// $combinationModel->isbn = $productAttribute['isbn'];
|
|
$combinationModel->available_date = $productAttribute['available_date'];
|
|
}
|
|
|
|
// Add to _shop relations
|
|
$productAttrShopsRelations = $this->getChangedIdShop($productAdditionalThird['product_attribute_shop'], 'id_product_attribute');
|
|
if (array_key_exists($productAttribute['id_product_attribute'], $productAttrShopsRelations)) {
|
|
$combinationModel->id_shop_list = array_values($productAttrShopsRelations[$productAttribute['id_product_attribute']]);
|
|
}
|
|
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $combinationModel->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $combinationModel->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($combinationModel->id && Combination::existsInDatabase($combinationModel->id, 'product_attribute')) {
|
|
try {
|
|
$res = $combinationModel->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
try {
|
|
$res = $combinationModel->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Product attribute (ID: %1$s) cannot be saved. %2$s')), (isset($productAttribute['id_product_attribute']) && !self::isEmpty($productAttribute['id_product_attribute'])) ? Tools::safeOutput($combinationModel->id) : 'No ID', $err_tmp));
|
|
} else {
|
|
self::addLog('Combination', $productAttribute['id_product_attribute'], $combinationModel->id);
|
|
// set quantity for Combination to StockAvailable
|
|
if ($this->version >= 1.5) {
|
|
foreach ($productAdditionalSecond['stock_available'] as $stock_available) {
|
|
if ($stock_available['id_product'] == $productAttribute['id_product'] && $stock_available['id_product_attribute'] == $productAttribute['id_product_attribute']) {
|
|
StockAvailable::setQuantity($combinationModel->id_product, $combinationModel->id, $stock_available['quantity']);
|
|
StockAvailable::setProductDependsOnStock($combinationModel->id_product, $stock_available['depends_on_stock'], null, $combinationModel->id);
|
|
StockAvailable::setProductOutOfStock($combinationModel->id_product, $stock_available['out_of_stock'], null, $combinationModel->id);
|
|
}
|
|
}
|
|
} else {
|
|
StockAvailable::setQuantity($combinationModel->id_product, $combinationModel->id, $productAttribute['quantity']);
|
|
}
|
|
//import product_attribute_combination
|
|
$sql_values = array();
|
|
foreach ($productAdditionalThird['product_attribute_combination'] as $productAttributeCombination) {
|
|
if ($productAttributeCombination['id_product_attribute'] == $productAttribute['id_product_attribute']) {
|
|
$sql_values[] = '(' . self::getLocalID('attribute', (int)$productAttributeCombination['id_attribute'], 'data') . ', ' . self::getLocalID('combination', $productAttributeCombination['id_product_attribute'], 'data') . ')';
|
|
}
|
|
}
|
|
if (!self::isEmpty($sql_values)) {
|
|
$result = Db::getInstance()->execute('REPLACE INTO `' . _DB_PREFIX_ . 'product_attribute_combination` (`id_attribute`, `id_product_attribute`) VALUES ' . implode(',', $sql_values));
|
|
if (!$result) {
|
|
$this->showMigrationMessageAndLog(self::displayError('Can\'t add product_attribute_combination. ' . Db::getInstance()->getMsgError()));
|
|
}
|
|
}
|
|
|
|
//import product_attribute_image
|
|
$sql_values = array();
|
|
foreach ($productAdditionalThird['product_attribute_image'] as $productAttributeImage) {
|
|
if ($productAttributeImage['id_product_attribute'] == $productAttribute['id_product_attribute']) {
|
|
$sql_values[] = '(' . (int)$combinationModel->id . ', ' . self::getLocalID('image', (int)$productAttributeImage['id_image'], 'data') . ')';
|
|
}
|
|
}
|
|
if (!self::isEmpty($sql_values)) {
|
|
$result = Db::getInstance()->execute('REPLACE INTO `' . _DB_PREFIX_ . 'product_attribute_image` (`id_product_attribute`, `id_image`) VALUES ' . implode(',', $sql_values));
|
|
if (!$result) {
|
|
$this->showMigrationMessageAndLog(self::displayError('Can\'t add product_attribute_image. ' . Db::getInstance()->getMsgError()));
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Product attribute (ID: %1$s) cannot be saved. %2$s')), (isset($productAttribute['id_product_attribute']) && !self::isEmpty($productAttribute['id_product_attribute'])) ? Tools::safeOutput($productAttribute['id_product_attribute']) : 'No ID', $error_tmp));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// if ($this->version >= 1.5) {
|
|
// foreach ($productAdditionalSecond['stock'] as $stock) {
|
|
// if ($stock['id_product'] == $product['id_product']) {
|
|
// $stockObj = new Stock();
|
|
// $stockObj->id_warehouse = MigrationProData::getLocalID('Warehouse', $stock['id_warehouse']);
|
|
// $stockObj->id_product = $productObj->id;
|
|
// $stockObj->id_product_attribute = self::getLocalID('combination', $stock['id_product_attribute'], 'data');
|
|
// $stockObj->reference = $stock['reference'];
|
|
// $stockObj->upc = $stock['upc'];
|
|
// $stockObj->physical_quantity = $stock['physical_quantity'];
|
|
// $stockObj->usable_quantity = $stock['usable_quantity'];
|
|
// $stockObj->price_te = $stock['price_te'];
|
|
// try {
|
|
// $res = $stockObj->add(false);
|
|
// } catch (PrestaShopException $e) {
|
|
// $err_tmp = $e->getMessage();
|
|
// }
|
|
// if (!$res) {
|
|
// if (!$this->ps_validation_errors) {
|
|
// continue;
|
|
// }
|
|
//
|
|
// $this->error_msg[] = sprintf(self::displayError($this->module->l('Stock (ID: %1$s) cannot be saved. %2$s')), (isset($stock['id_stock']) && !self::isEmpty($stock['id_stock'])) ? Tools::safeOutput($stock['id_stock']) : 'No ID', $err_tmp);
|
|
// } else {
|
|
// self::addLog('Stock', $stock['id_stock'], $stockObj->id);
|
|
// }
|
|
// }
|
|
// }
|
|
//
|
|
// foreach ($productAdditionalSecond['warehouse_product_location'] as $warehouseProductLocation) {
|
|
// if ($warehouseProductLocation['id_product'] == $product['id_product']) {
|
|
// $warehouseProductLocationObj = new WarehouseProductLocation();
|
|
// $warehouseProductLocationObj->id_warehouse = MigrationProData::getLocalID('Warehouse', $warehouseProductLocation['id_warehouse']);
|
|
// $warehouseProductLocationObj->id_product = $productObj->id;
|
|
// $warehouseProductLocationObj->id_product_attribute = self::getLocalID('combination', $warehouseProductLocation['id_product_attribute'], 'data');
|
|
// $warehouseProductLocationObj->location = $warehouseProductLocation['location'];
|
|
// try {
|
|
// $res = $warehouseProductLocationObj->add(false);
|
|
// } catch (PrestaShopException $e) {
|
|
// $err_tmp = $e->getMessage();
|
|
// }
|
|
// if (!$res) {
|
|
// if (!$this->ps_validation_errors) {
|
|
// continue;
|
|
// }
|
|
// $this->error_msg[] = sprintf(self::displayError($this->module->l('Stock (ID: %1$s) cannot be saved. %2$s')), (isset($warehouseProductLocation['id_warehouse_product_location']) && !self::isEmpty($warehouseProductLocation['id_warehouse_product_location'])) ? Tools::safeOutput($warehouseProductLocation['id_warehouse_product_location']) : 'No ID', $err_tmp);
|
|
// } else {
|
|
// self::addLog('warehouseproductlocation', $warehouseProductLocation['id_warehouse_product_location'], $warehouseProductLocationObj->id);
|
|
// }
|
|
// }
|
|
// }
|
|
// }
|
|
|
|
//import specific price
|
|
$second = 10;
|
|
foreach ($productAdditionalSecond['specific_price'] as $specificPrice) {
|
|
if ($product['id_product'] == $specificPrice['id_product']) {
|
|
if ($specificPriceObj = $this->createObjectModel('SpecificPrice', $specificPrice['id_specific_price'])) {
|
|
$specificPriceObj->id_shop = (int)self::getShopID($specificPrice['id_shop']);
|
|
$specificPriceObj->id_product = $productObj->id;
|
|
$specificPriceObj->id_currency = self::getCurrencyID($specificPrice['id_currency']);
|
|
$specificPriceObj->id_country = self::getLocalId('country', $specificPrice['id_country'], 'data');
|
|
$specificPriceObj->id_group = self::getCustomerGroupID($specificPrice['id_group']);
|
|
// $specificPriceObj->price = ((int)$specificPrice['price'] == 0) ? -1 : $specificPrice['price'];
|
|
$specificPriceObj->price = ($specificPrice['price'] <= 0) ? '-1' : (float)$specificPrice['price'];
|
|
$specificPriceObj->from_quantity = $specificPrice['from_quantity'];
|
|
$specificPriceObj->reduction = $specificPrice['reduction'];
|
|
$specificPriceObj->reduction_type = $specificPrice['reduction_type'];
|
|
$specificPriceObj->from = $specificPrice['from'];
|
|
$specificPriceObj->to = $specificPrice['to'];
|
|
// $specificPriceObj->id_customer = (isset($specificPrice['id_customer']) && !self::isEmpty($specificPrice['id_customer'])) ? self::getLocalId('customer', $specificPrice['id_customer'], 'data') : 0;
|
|
$specificPriceObj->id_customer = (isset($specificPrice['id_customer']) && !self::isEmpty($specificPrice['id_customer'])) ? $specificPrice['id_customer'] : 0;
|
|
if ($this->version >= 1.5) {
|
|
$specificPriceObj->id_shop = self::getShopID($specificPrice['id_shop']);
|
|
$specificPriceObj->id_shop_group = Shop::getGroupFromShop($specificPriceObj->id_shop);
|
|
|
|
$specificPriceObj->id_cart = $specificPrice['id_cart'];
|
|
$specificPriceObj->id_product_attribute = self::getLocalId('combination', $specificPrice['id_product_attribute'], 'data');
|
|
$specificPriceObj->id_specific_price_rule = $specificPrice['id_specific_price_rule'];
|
|
|
|
$specificPriceObj->reduction_tax = (isset($specificPrice['reduction_tax']) && !self::isEmpty($specificPrice['reduction_tax'])) ? $specificPrice['reduction_tax'] : 1;
|
|
}
|
|
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $specificPriceObj->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $specificPriceObj->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($specificPriceObj->id && SpecificPrice::existsInDatabase($specificPriceObj->id, 'specific_price')) {
|
|
try {
|
|
$res = $specificPriceObj->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
try {
|
|
$res = $specificPriceObj->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
// check duplicate entry
|
|
|
|
if (Db::getInstance()->getNumberError() == 1062) {
|
|
$second++;
|
|
if ($second > 59) {
|
|
$second = 10;
|
|
}
|
|
$specificPriceObj->from = substr_replace($specificPrice['from'], $second, Tools::strlen($specificPrice['from']) - 2, Tools::strlen($specificPrice['from']));
|
|
$res = $specificPriceObj->add(false);
|
|
}
|
|
|
|
if (!$res) {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError() . DB::getInstance()->getNumberError();
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('SpecificPrice (ID: %1$s) cannot be saved. %2$s')), (isset($specificPrice['id_specific_price']) && !self::isEmpty($specificPrice['id_specific_price'])) ? Tools::safeOutput($specificPrice['id_specific_price']) : 'No ID', $err_tmp . ' ' . $error_tmp));
|
|
} else {
|
|
self::addLog('SpecificPrice', $specificPrice['id_specific_price'], $specificPriceObj->id);
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('SpecificPrice (ID: %1$s) cannot be saved. %2$s')), (isset($specificPrice['id_specific_price']) && !self::isEmpty($specificPrice['id_specific_price'])) ? Tools::safeOutput($specificPrice['id_specific_price']) : 'No ID', $error_tmp));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// import product_download
|
|
foreach ($productAdditionalSecond['product_download'] as $productDownload) {
|
|
$changeDateExpiration = false;
|
|
if ($product['id_product'] == $productDownload['id_product']) {
|
|
if ($productDownloadObject = $this->createObjectModel('ProductDownload', $productDownload['id_product_download'])) {
|
|
$productDownloadObject->id_product = $productObj->id;
|
|
$productDownloadObject->display_filename = $productDownload['display_filename'];
|
|
$productDownloadObject->filename = $productDownload['filename'];
|
|
$productDownloadObject->date_add = $productDownload['date_add'];
|
|
if ($productDownload['date_expiration'] == '0000-00-00 00:00:00') {
|
|
$productDownloadObject->date_expiration = date('Y-m-d H:i:s');
|
|
$changeDateExpiration = true;
|
|
} else {
|
|
$productDownloadObject->date_expiration = $productDownload['date_expiration'];
|
|
}
|
|
$productDownloadObject->nb_days_accessible = $productDownload['nb_days_accessible'];
|
|
$productDownloadObject->nb_downloadable = $productDownload['nb_downloadable'];
|
|
$productDownloadObject->active = $productDownload['active'];
|
|
$productDownloadObject->is_shareable = $productDownload['is_shareable'];
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $productDownloadObject->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $productDownloadObject->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($productDownloadObject->id && ProductDownload::existsInDatabase($productDownloadObject->id, 'product_download')) {
|
|
try {
|
|
$res = $productDownloadObject->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
try {
|
|
$res = $productDownloadObject->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
$this->warning_msg[] = sprintf(self::displayError('ProductDownload (ID: %1$s) cannot be saved. Product (ID:
|
|
%2$s). %3$s'), (isset($productDownload['id_product_download']) && !self::isEmpty($productDownload['id_product_download'])) ? Tools::safeOutput($productDownload['id_product_download']) : 'No ID', $productObj->id, $err_tmp);
|
|
} else {
|
|
$client = new EDClient($this->url . '/migration_pro/server.php', Configuration::get('migrationpro_token'));
|
|
$client->setPostData('download/' . $productDownload['filename']);
|
|
$client->setTimeout(999);
|
|
$client->query('file');
|
|
file_put_contents(getcwd() . '/../download/' . $productDownload['filename'], $client->getContent());
|
|
|
|
if ($changeDateExpiration) {
|
|
Db::getInstance()->execute('UPDATE ' . _DB_PREFIX_ . 'product_download SET date_expiration = \'' . pSQL($productDownload['date_expiration']) . '\' WHERE id_product_download = ' . (int)$productDownloadObject->id);
|
|
}
|
|
|
|
self::addLog('ProductDownload', $productDownload['id_product_download'], $productDownloadObject->id);
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
$this->warning_msg[] = sprintf(self::displayError('ProductDownload (ID: %1$s) cannot be saved. Product (ID:
|
|
%2$s). %3$s'), (isset($productDownload['id_product_download']) && !self::isEmpty($productDownload['id_product_download'])) ? Tools::safeOutput($productDownload['id_product_download']) : 'No ID', $productObj->id, $err_tmp);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// import attachments
|
|
$sql_values = array();
|
|
foreach ($productAdditionalSecond['product_attachment'] as $productAttachment) {
|
|
if ($product['id_product'] == $productAttachment['id_product']) {
|
|
foreach ($productAdditionalThird['attachment'] as $attachment) {
|
|
if ($attachment['id_attachment'] == $productAttachment['id_attachment']) {
|
|
if ($attachmentObject = $this->createObjectModel('Attachment', $attachment['id_attachment'])) {
|
|
$attachmentObject->file = $attachment['file'];
|
|
$fileName = "";
|
|
if (isset($attachment['filename'])) {
|
|
$fileName = $attachment['filename'];
|
|
} elseif (isset($attachment['file_name'])) {
|
|
$fileName = $attachment['file_name'];
|
|
}
|
|
$attachmentObject->file_name = $fileName;
|
|
|
|
$fileSize = 0;
|
|
if (isset($attachment['filesize'])) {
|
|
$fileSize = $attachment['filesize'];
|
|
} elseif (isset($attachment['file_size'])) {
|
|
$fileSize = $attachment['file_size'];
|
|
}
|
|
$attachmentObject->file_size = $fileSize;
|
|
$attachmentObject->mime = $attachment['mime'];
|
|
//language fields
|
|
foreach ($productAdditionalThird['attachment_lang'] as $lang) {
|
|
if ($lang['id_attachment'] == $attachment['id_attachment']) {
|
|
$lang['id_lang'] = self::getLanguageID($lang['id_lang']);
|
|
$attachmentObject->name[$lang['id_lang']] = $lang['name'];
|
|
$attachmentObject->description[$lang['id_lang']] = $lang['description'];
|
|
}
|
|
}
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $attachmentObject->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $attachmentObject->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($attachmentObject->id && Attachment::existsInDatabase($attachmentObject->id, 'attachment')) {
|
|
try {
|
|
$res = $attachmentObject->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
try {
|
|
$res = $attachmentObject->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
$this->warning_msg[] = sprintf(self::displayError('Attachment (ID: %1$s) cannot be saved. Product (ID:
|
|
%2$s). %3$s'), (isset($attachment['id_attachment']) && !self::isEmpty($attachment['id_attachment'])) ? Tools::safeOutput($attachment['id_attachment']) : 'No ID', $productObj->id, $err_tmp);
|
|
} else {
|
|
$client = new EDClient($this->url . '/modules/migrationproserver/server.php', Configuration::get('migrationpro_token'));
|
|
$client->setPostData('download/' . $attachment['file']);
|
|
$client->setTimeout(999);
|
|
$client->query('file');
|
|
$fileName = getcwd() . '/../download/' . $attachment['file'];
|
|
file_put_contents($fileName, $client->getContent());
|
|
|
|
if ($attachmentObject->file_size == 0) {
|
|
$attachmentObject->file_size = empty(filesize($fileName)) ? 0 : filesize($fileName);
|
|
$attachmentObject->update();
|
|
}
|
|
|
|
self::addLog('Attachment', $attachment['id_attachment'], $attachmentObject->id);
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
$this->warning_msg[] = sprintf(self::displayError('Attachment (ID: %1$s) cannot be saved. Product (ID:
|
|
%2$s). %3$s'), (isset($attachment['id_attachment']) && !self::isEmpty($attachment['id_attachment'])) ? Tools::safeOutput($attachment['id_attachment']) : 'No ID', $productObj->id, $err_tmp);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
//import product_attachments
|
|
$sql_values[] = '(' . $productObj->id . ', ' . self::getLocalID('attachment', $productAttachment['id_attachment'], 'data') . ')';
|
|
|
|
if (!self::isEmpty($sql_values)) {
|
|
$result = Db::getInstance()->execute('REPLACE INTO `' . _DB_PREFIX_ . 'product_attachment` (`id_product`, `id_attachment`) VALUES ' . implode(',', $sql_values));
|
|
if (!$result) {
|
|
if (!$this->ps_validation_errors) {
|
|
continue;
|
|
}
|
|
|
|
$this->error_msg[] = self::displayError('Can\'t add product_attachment. ' . Db::getInstance()->getMsgError());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//import product_supplier
|
|
if (version_compare(Configuration::get('migrationpro_version'), '1.5', '<')) {
|
|
if ($productSupplierObject = $this->createObjectModel('ProductSupplier', $product['id_product'])) {
|
|
$productSupplierObject->id_product = $productObj->id;
|
|
$productSupplierObject->id_product_attribute = 0;
|
|
$productSupplierObject->id_supplier = self::getLocalID('supplier', $product['id_supplier'], 'data');
|
|
$productSupplierObject->product_supplier_price_te = 0;
|
|
$productSupplierObject->id_currency = 0;
|
|
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $productSupplierObject->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $productSupplierObject->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($productSupplierObject->id && ProductSupplier::existsInDatabase($productSupplierObject->id, 'product_supplier')) {
|
|
try {
|
|
$res = $productSupplierObject->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
if (!$res) {
|
|
try {
|
|
$res = $productSupplierObject->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Product_Supplier (ID: %1$s) cannot be saved. %2$s')), (isset($product['id_product']) && !self::isEmpty($product['id_product'])) ? Tools::safeOutput($product['id_product']) : 'No ID', $err_tmp));
|
|
} else {
|
|
self::addLog('ProductSupplier', $product['id_product'], $productSupplierObject->id);
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Product_Supplier (ID: %1$s) cannot be saved. %2$s')), (isset($product['id_product']) && !self::isEmpty($product['id_product'])) ? Tools::safeOutput($product['id_product']) : 'No ID', $error_tmp));
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
foreach ($productAdditionalSecond['product_supplier'] as $productSupplier) {
|
|
if ($productSupplier['id_product'] == $product['id_product']) {
|
|
if ($productSupplierObject = $this->createObjectModel('ProductSupplier', $productSupplier['id_product_supplier'])) {
|
|
$productSupplierObject->id_product = $productObj->id;
|
|
$productSupplierObject->id_product_attribute = self::getLocalID('combination', $productSupplier['id_product_attribute'], 'data');
|
|
$productSupplierObject->id_supplier = self::getLocalID('supplier', $productSupplier['id_supplier'], 'data');
|
|
$productSupplierObject->product_supplier_price_te = $productSupplier['product_supplier_price_te'];
|
|
$productSupplierObject->id_currency = self::getCurrencyID($productSupplier['id_currency']);
|
|
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $productSupplierObject->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $productSupplierObject->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($productSupplierObject->id && ProductSupplier::existsInDatabase($productSupplierObject->id, 'product_supplier')) {
|
|
try {
|
|
$res = $productSupplierObject->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
if (!$res) {
|
|
try {
|
|
$res = $productSupplierObject->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Product_Supplier (ID: %1$s) cannot be saved. %2$s')), (isset($productSupplier['id_product_supplier']) && !self::isEmpty($productSupplier['id_product_supplier'])) ? Tools::safeOutput($productSupplier['id_product_supplier']) : 'No ID', $err_tmp));
|
|
} else {
|
|
self::addLog('ProductSupplier', $productSupplier['id_product_supplier'], $productSupplierObject->id);
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Product_Supplier (ID: %1$s) cannot be saved. %2$s')), (isset($productSupplier['id_product_supplier']) && !self::isEmpty($productSupplier['id_product_supplier'])) ? Tools::safeOutput($productSupplier['id_product_supplier']) : 'No ID', $error_tmp));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
//import feature_product
|
|
$sql_values = array();
|
|
foreach ($productAdditionalSecond['feature_product'] as $featureProduct) {
|
|
if ($featureProduct['id_product'] == $product['id_product']) {
|
|
Product::addFeatureProductImport($productObj->id, self::getLocalId('feature', (int)$featureProduct['id_feature'], 'data'), self::getLocalId('featurevalue', (int)$featureProduct['id_feature_value'], 'data'));
|
|
}
|
|
}
|
|
//import customization_field
|
|
foreach ($productAdditionalSecond['customization_field'] as $customizationField) {
|
|
if ($customizationField['id_product'] == $product['id_product']) {
|
|
if ($customizationFieldModel = $this->createObjectModel('CustomizationField', $customizationField['id_customization_field'])) {
|
|
$customizationFieldModel->id_product = $productObj->id;
|
|
$customizationFieldModel->type = $customizationField['type'];
|
|
$customizationFieldModel->required = $customizationField['required'];
|
|
foreach ($productAdditionalThird['customization_field_lang'] as $lang) {
|
|
if ($lang['id_customization_field'] == $customizationField['id_customization_field']) {
|
|
$lang['id_lang'] = self::getLanguageID($lang['id_lang']);
|
|
$customizationFieldModel->name[$lang['id_lang']] = $lang['name'];
|
|
if (self::isEmpty($customizationFieldModel->name[$lang['id_lang']])) {
|
|
$customizationFieldModel->name[$lang['id_lang']] = 'Empty';
|
|
}
|
|
}
|
|
}
|
|
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $customizationFieldModel->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $customizationFieldModel->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($customizationFieldModel->id && CustomizationField::existsInDatabase($customizationFieldModel->id, 'customization_field')) {
|
|
try {
|
|
$res = $customizationFieldModel->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
if (!$res) {
|
|
try {
|
|
$res = $customizationFieldModel->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError('CustomizationField (ID: %1$s) from Product (ID: %2$s) cannot be saved. %3$s'), $productObj->id, (isset($customizationField['id_customization_field']) && !self::isEmpty($customizationField['id_customization_field'])) ? Tools::safeOutput($customizationField['id_customization_field']) : 'No ID', $err_tmp));
|
|
} else {
|
|
self::addLog('CustomizationField', $customizationField['id_customization_field'], $customizationFieldModel->id);
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError('CustomizationField (ID: %1$s) from Product (ID: %2$s) cannot be saved. %3$s'), $productObj->id, (isset($customizationField['id_customization_field']) && !self::isEmpty($customizationField['id_customization_field'])) ? Tools::safeOutput($customizationField['id_customization_field']) : 'No ID', $error_tmp));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
//import product_tag
|
|
// Tag::deleteTagsForProduct($productObj->id);
|
|
$sql_values = array();
|
|
foreach ($productAdditionalSecond['product_tag'] as $productTag) {
|
|
if ($productTag['id_product'] == $product['id_product']) {
|
|
// $idLangTag = (isset($tagPS14[$productTag['id_tag']]) && !self::isEmpty
|
|
// ($tagPS14[$productTag['id_tag']])) ? self::getLocalID('tag', (int)$tagPS14[$productTag['id_tag']], 'data') : 0; //@TODO not id lang field on PS 1.4
|
|
$sql_values[] = '(' . (int)$productObj->id . ', ' . self::getLocalID('tag', (int)$productTag['id_tag'], 'data') . ', ' . self::getLanguageID($productTag['id_lang']) . ')';
|
|
}
|
|
}
|
|
if (!self::isEmpty($sql_values)) {
|
|
$result = Db::getInstance()->execute('REPLACE INTO `' . _DB_PREFIX_ . 'product_tag` (`id_product`, `id_tag`, `id_lang`)
|
|
VALUES ' . implode(',', $sql_values));
|
|
if (!$result) {
|
|
$this->showMigrationMessageAndLog(self::displayError('Can\'t add product_tag. ' . Db::getInstance()->getMsgError()));
|
|
}
|
|
}
|
|
|
|
|
|
if (count($this->error_msg) == 0) {
|
|
self::addLog('Product', $product['id_product'], $productObj->id);
|
|
|
|
//update multistore language fields
|
|
if (!version_compare($this->version, '1.5', '<')) {
|
|
if (MigrationProMapping::getMapTypeCount('multi_shops') > 1) {
|
|
foreach ($productAdditionalSecond['product_lang'] as $lang) {
|
|
if ($lang['id_product'] == $product['id_product']) {
|
|
$lang['id_shop'] = self::getShopID($lang['id_shop']);
|
|
$lang['id_lang'] = self::getLanguageID($lang['id_lang']);
|
|
$lang['id_product'] = $productObj->id;
|
|
self::updateMultiStoreLang('product', $lang);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
Module::processDeferedFuncCall();
|
|
Module::processDeferedClearCache();
|
|
Tag::updateTagCount();
|
|
}
|
|
|
|
// import pack products
|
|
// foreach ($productAdditionalSecond['product_pack'] as $productPack) {
|
|
// if ($productPack['id_product_pack'] != $product['id_product']) {
|
|
// continue;
|
|
// }
|
|
// if (!self::isEmpty(self::getLocalID('product', $productPack['id_product_item'], 'data'))) {
|
|
// Pack::addItem($productObj->id, self::getLocalID('product', $productPack['id_product_item'], 'data'), $productPack['quantity'],
|
|
// self::getLocalID('combination', $productPack['id_product_attribute_item'], 'data'));
|
|
// } else {
|
|
// $this->client->serializeOff();
|
|
// $this->client->setPostData($this->query->singleProduct($productPack['id_product_item']));
|
|
// if ($this->client->query()) {
|
|
// $product2 = $this->client->getContent();
|
|
// $product2Id = AdminMigrationProController::getCleanIDs($product2, 'id_product');
|
|
// $this->client->serializeOn();
|
|
// $this->client->setPostData($this->query->productSqlSecond($product2Id));
|
|
// if ($this->client->query()) {
|
|
// $product2AdditionalSecond = $this->client->getContent();
|
|
// $id_product_attribute = AdminMigrationProController::getCleanIDs($product2AdditionalSecond['product_attribute'], 'id_product_attribute');
|
|
// $id_feature = AdminMigrationProController::getCleanIDs($product2AdditionalSecond['feature_product'], 'id_feature');
|
|
// $id_feature_value = AdminMigrationProController::getCleanIDs($product2AdditionalSecond['feature_product'], 'id_feature_value');
|
|
// $id_supplier = AdminMigrationProController::getCleanIDs($product2, 'id_supplier');
|
|
// $id_customization_field = AdminMigrationProController::getCleanIDs($product2AdditionalSecond['customization_field'], 'id_customization_field');
|
|
// $id_tag = AdminMigrationProController::getCleanIDs($product2AdditionalSecond['product_tag'], 'id_tag');
|
|
// $id_image = AdminMigrationProController::getCleanIDs($product2AdditionalSecond['image'], 'id_image');
|
|
// $id_attachment = AdminMigrationProController::getCleanIDs($product2AdditionalSecond['product_attachment'], 'id_attachment');
|
|
// $this->client->setPostData($this->query->productSqlThird($id_product_attribute, $id_feature, $id_feature_value, $id_supplier, $id_customization_field, $id_tag,
|
|
// $id_image, $id_attachment));
|
|
// if ($this->client->query()) {
|
|
// $product2AdditionalThird = $this->client->getContent();
|
|
// $id_attribute_group = AdminMigrationProController::getCleanIDs($product2AdditionalThird['product_attribute_combination'], 'id_attribute_group');
|
|
// $id_attribute = AdminMigrationProController::getCleanIDs($product2AdditionalThird['product_attribute_combination'], 'id_attribute');
|
|
// $this->client->setPostData($this->query->productSqlFourth($id_attribute_group, $id_attribute));
|
|
// if ($this->client->query()) {
|
|
// $product2AdditionalFourth = $this->client->getContent();
|
|
//
|
|
// $import = new EDImport($this->process, $this->version, $this->url, $this->force_ids, $this->client, $this->query);
|
|
// $import->setImagePath($this->image_path);
|
|
// $import->setImageSupplierPath($this->image_supplier_path);
|
|
//
|
|
// $import->products($product2, $product2AdditionalSecond, $product2AdditionalThird, $product2AdditionalFourth, true);
|
|
// $this->errors = $import->getErrorMsg();
|
|
// $this->warnings = $import->getWarningMsg();
|
|
// $this->response = $import->getResponse();
|
|
// } else {
|
|
// if (!$this->ps_validation_errors) {
|
|
// continue;
|
|
// }
|
|
// $this->errors[] = 'Can\'t execute query to source Shop.';
|
|
// }
|
|
// } else {
|
|
// if (!$this->ps_validation_errors) {
|
|
// continue;
|
|
// }
|
|
// $this->errors[] = 'Can\'t execute query to source Shop.';
|
|
// }
|
|
// } else {
|
|
// if (!$this->ps_validation_errors) {
|
|
// continue;
|
|
// }
|
|
// $this->errors[] = 'Can\'t execute query to source Shop.';
|
|
// }
|
|
// } else {
|
|
// if (!$this->ps_validation_errors) {
|
|
// continue;
|
|
// }
|
|
// $this->errors[] = 'Can\'t execute query to source Shop.';
|
|
// }
|
|
// Pack::addItem($productObj->id, self::getLocalID('product', $productPack['id_product_item'], 'data'), $productPack['quantity'],
|
|
// self::getLocalID('combination', $productPack['id_product_attribute_item'], 'data'));
|
|
// }
|
|
// }
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Product (ID: %1$s) cannot be saved. %2$s')), (isset($product['id_product']) && !self::isEmpty($product['id_product'])) ? Tools::safeOutput($product['id_product']) : 'No ID', $error_tmp));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (!$innerMethodCall) {
|
|
$this->updateProcess(count($products));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @param $accessories
|
|
*/
|
|
public function accessories($accessories)
|
|
{
|
|
foreach ($accessories as $accessory) {
|
|
$accessory_1 = self::getLocalID('product', $accessory['id_product_1'], 'data');
|
|
$accessory_2 = self::getLocalID('product', $accessory['id_product_2'], 'data');
|
|
|
|
|
|
if (!empty($accessory_1) && !empty($accessory_2)) {
|
|
$res = self::importAccessories($accessory);
|
|
|
|
if (!$res) {
|
|
$this->showMigrationMessageAndLog(self::displayError('Can\'t add accessory. ' . Db::getInstance()->getMsgError()));
|
|
}
|
|
} else {
|
|
if (empty($accessory_1)) {
|
|
$this->warning_msg[] = sprintf(self::displayError($this->module->l('Accessory (ID: %1$s) not found in source store')), (isset($accessory['id_product_1']) && !self::isEmpty($accessory['id_product_1'])) ? Tools::safeOutput($accessory['id_product_1']) : 'No ID');
|
|
}
|
|
if (empty($accessory_2)) {
|
|
$this->warning_msg[] = sprintf(self::displayError($this->module->l('Accessory (ID: %1$s) not found in source store')), (isset($accessory['id_product_2']) && !self::isEmpty($accessory['id_product_2'])) ? Tools::safeOutput($accessory['id_product_2']) : 'No ID');
|
|
}
|
|
}
|
|
}
|
|
$this->updateProcess(count($accessories));
|
|
}
|
|
|
|
/**
|
|
* @param $specificPriceRules
|
|
* @param $specificPriceRuleConditionGroups
|
|
* @param $specificPriceRuleConditions
|
|
*/
|
|
public function catalogPriceRules($specificPriceRules, $specificPriceRuleCountries, $specificPriceRuleConditionGroups, $specificPriceRuleConditions)
|
|
{
|
|
// Import Country
|
|
foreach ($specificPriceRuleCountries['country'] as $country) {
|
|
if ($countryModel = $this->createObjectModel('Country', $country['id_country'])) {
|
|
$countryModel->id_zone = $country['id_zone'];
|
|
$countryModel->id_currency = self::getCurrencyID($country['id_currency']);
|
|
$countryModel->call_prefix = $country['call_prefix'];
|
|
$countryModel->iso_code = $country['iso_code'];
|
|
$countryModel->active = $country['active'];
|
|
$countryModel->contains_states = $country['contains_states'];
|
|
$countryModel->need_identification_number = $country['need_identification_number'];
|
|
$countryModel->need_zip_code = $country['need_zip_code'];
|
|
$countryModel->zip_code_format = $country['zip_code_format'];
|
|
$countryModel->display_tax_label = (isset($country['display_tax_label'])) ? (bool)$country['display_tax_label'] : true;
|
|
|
|
// Add to _shop relations
|
|
$countriesShopsRelations = $this->getChangedIdShop($specificPriceRuleCountries['country_shop'], 'id_country');
|
|
if (array_key_exists($country['id_country'], $countriesShopsRelations)) {
|
|
$countryModel->id_shop_list = array_values($countriesShopsRelations[$country['id_country']]);
|
|
}
|
|
|
|
|
|
// Language fields
|
|
foreach ($specificPriceRuleCountries['country_lang'] as $lang) {
|
|
if ($lang['id_country'] == $country['id_country']) {
|
|
$lang['id_lang'] = self::getLanguageID($lang['id_lang']);
|
|
$countryModel->name[$lang['id_lang']] = $lang['name'];
|
|
}
|
|
}
|
|
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $countryModel->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $countryModel->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($countryModel->id && Country::existsInDatabase($countryModel->id, 'country')) {
|
|
try {
|
|
$res = $countryModel->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
if (!$res) {
|
|
try {
|
|
$res = $countryModel->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Country (ID: %1$s) cannot be saved. %2$s')), (isset($country['id_country']) && !self::isEmpty($country['id_country'])) ? Tools::safeOutput($country['id_country']) : 'No ID', $err_tmp));
|
|
} else {
|
|
self::addLog('Country', $country['id_country'], $countryModel->id);
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Country (ID: %1$s) cannot be saved. %2$s')), (isset($country['id_country']) && !self::isEmpty($country['id_country'])) ? Tools::safeOutput($country['id_country']) : 'No ID', $error_tmp));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
foreach ($specificPriceRules as $specificPriceRule) {
|
|
if ($specificPriceRuleObj = $this->createObjectModel('SpecificPriceRule', $specificPriceRule['id_specific_price_rule'])) {
|
|
$specificPriceRuleObj->name = $specificPriceRule['name'];
|
|
$specificPriceRuleObj->id_shop = self::getShopID($specificPriceRule['id_shop']);
|
|
$specificPriceRuleObj->id_currency = self::getCurrencyID($specificPriceRule['id_currency']);
|
|
$specificPriceRuleObj->id_country = self::getLocalID('country', $specificPriceRule['id_country'], 'data');
|
|
$specificPriceRuleObj->id_group = self::getCustomerGroupID($specificPriceRule['id_group']);
|
|
$specificPriceRuleObj->from_quantity = $specificPriceRule['from_quantity'];
|
|
$specificPriceRuleObj->price = $specificPriceRule['price'];
|
|
$specificPriceRuleObj->reduction = $specificPriceRule['reduction'];
|
|
if (self::isEmpty($specificPriceRule['reduction_tax'])) {
|
|
$specificPriceRuleObj->reduction_tax = 0;
|
|
} else {
|
|
$specificPriceRuleObj->reduction_tax = $specificPriceRule['reduction_tax'];
|
|
}
|
|
$specificPriceRuleObj->reduction_type = $specificPriceRule['reduction_type'];
|
|
$specificPriceRuleObj->from = $specificPriceRule['from'];
|
|
$specificPriceRuleObj->to = $specificPriceRule['to'];
|
|
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $specificPriceRuleObj->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $specificPriceRuleObj->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($specificPriceRuleObj->id && SpecificPriceRule::existsInDatabase($specificPriceRuleObj->id, 'specific_price_rule')) {
|
|
try {
|
|
$res = $specificPriceRuleObj->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
try {
|
|
$res = $specificPriceRuleObj->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
if (!$res) {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Specific price rule(ID: %1$s) cannot be saved. %2$s')), (isset($specificPriceRule['id_specific_price_rule']) && !self::isEmpty($specificPriceRule['id_specific_price_rule'])) ? Tools::safeOutput($specificPriceRule['id_specific_price_rule']) : 'No ID', $err_tmp));
|
|
} else {
|
|
// Import Specific Price Rule Condition Groups
|
|
foreach ($specificPriceRuleConditionGroups as $specificPriceRuleConditionGroup) {
|
|
$sql_value = '';
|
|
if ($specificPriceRuleConditionGroup['id_specific_price_rule'] == $specificPriceRule['id_specific_price_rule']) {
|
|
$sql_value = '(' . (int)$specificPriceRuleObj->id . ')';
|
|
}
|
|
if (!self::isEmpty($sql_value)) {
|
|
$result = Db::getInstance()->execute('REPLACE INTO `' . _DB_PREFIX_ . 'specific_price_rule_condition_group` (`id_specific_price_rule`)
|
|
VALUES ' . $sql_value);
|
|
if (!$result) {
|
|
$this->showMigrationMessageAndLog(self::displayError('Can\'t add specific_price_rule_condition_group. ' . Db::getInstance()->getMsgError()));
|
|
} else {
|
|
$id_specific_price_rule_condition_group = Db::getInstance()->Insert_ID();
|
|
|
|
// Import Specific Price Rule Conditions
|
|
foreach ($specificPriceRuleConditions as $specificPriceRuleCondition) {
|
|
$sql_value = '';
|
|
if ($specificPriceRuleCondition['id_specific_price_rule_condition_group'] == $specificPriceRuleConditionGroup['id_specific_price_rule_condition_group']) {
|
|
if (preg_match('|category|', $specificPriceRuleCondition['type'])) {
|
|
$value = self::getLocalID('category', $specificPriceRuleCondition['value'], 'data');
|
|
} elseif (preg_match('|manufacturer|', $specificPriceRuleCondition['type'])) {
|
|
$value = self::getLocalID('manufacturer', $specificPriceRuleCondition['value'], 'data');
|
|
} elseif (preg_match('|supplier|', $specificPriceRuleCondition['type'])) {
|
|
$value = self::getLocalID('supplier', $specificPriceRuleCondition['value'], 'data');
|
|
} elseif (preg_match('|attribute|', $specificPriceRuleCondition['type'])) {
|
|
$value = self::getLocalID('attribute', $specificPriceRuleCondition['value'], 'data');
|
|
} elseif (preg_match('|feature|', $specificPriceRuleCondition['type'])) {
|
|
$value = self::getLocalID('feature', $specificPriceRuleCondition['value'], 'data');
|
|
}
|
|
|
|
$sql_value = '(' . (int)$id_specific_price_rule_condition_group . ', \'' . pSQL($specificPriceRuleCondition['type']) . '\', ' . (int)$value . ')';
|
|
}
|
|
if (!self::isEmpty($sql_value)) {
|
|
$result = Db::getInstance()->execute('REPLACE INTO `' . _DB_PREFIX_ . 'specific_price_rule_condition` (`id_specific_price_rule_condition_group`, `type`, `value`)
|
|
VALUES ' . $sql_value);
|
|
if (!$result) {
|
|
$this->showMigrationMessageAndLog(self::displayError('Can\'t add specific_price_rule_condition. ' . Db::getInstance()->getMsgError()));
|
|
} else {
|
|
$d_specific_price_rule_condition = Db::getInstance()->Insert_ID();
|
|
self::addLog('specificPriceRuleCondition', $specificPriceRuleCondition['id_specific_price_rule_condition'], $d_specific_price_rule_condition);
|
|
}
|
|
}
|
|
}
|
|
self::addLog('specificPriceRuleConditionGroup', $specificPriceRuleConditionGroup['id_specific_price_rule_condition_group'], $id_specific_price_rule_condition_group);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (count($this->error_msg) == 0) {
|
|
self::addLog('SpecificPriceRule', $specificPriceRule['id_specific_price_rule'], $specificPriceRuleObj->id);
|
|
}
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Specific cart rule(ID: %1$s) cannot be saved. %2$s')), (isset($specificPriceRule['id_specific_price_rule']) && !self::isEmpty($specificPriceRule['id_specific_price_rule'])) ? Tools::safeOutput($specificPriceRule['id_specific_price_rule']) : 'No ID', $error_tmp));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
$this->updateProcess(count($specificPriceRules));
|
|
}
|
|
|
|
/**
|
|
* @param $employees
|
|
* @param $employeesShop
|
|
*/
|
|
public function employees($employees, $employeesShop)
|
|
{
|
|
foreach ($employees as $employee) {
|
|
if ($employeeObject = $this->createObjectModel('Employee', $employee['id_employee'])) {
|
|
$employeeObject->id_profile = $employee['id_profile'];
|
|
$employeeObject->id_lang = self::getLanguageID($employee['id_lang']);
|
|
$employeeObject->lastname = $employee['lastname'];
|
|
$employeeObject->firstname = $employee['firstname'];
|
|
$employeeObject->email = $employee['email'];
|
|
$employeeObject->passwd = $employee['passwd'];
|
|
$employeeObject->last_passwd_gen = $employee['last_passwd_gen'];
|
|
$employeeObject->stats_date_from = $employee['stats_date_from'];
|
|
$employeeObject->stats_date_to = $employee['stats_date_to'];
|
|
$employeeObject->bo_color = $employee['bo_color'];
|
|
$employeeObject->bo_theme = $employee['bo_theme'];
|
|
$employeeObject->default_tab = $employee['default_tab'];
|
|
$employeeObject->bo_width = $employee['bo_width'];
|
|
$employeeObject->active = $employee['active'];
|
|
$employeeObject->id_last_order = self::getLocalID('order', $employee['id_last_order'], 'data');
|
|
$employeeObject->id_last_customer_message = self::getLocalID('customerMessage', $employee['id_last_customer_message'], 'data');
|
|
$employeeObject->id_last_customer = self::getLocalID('customer', $employee['id_last_customer'], 'data');
|
|
$employeeObject->preselect_date_range = $employee['preselect_date_range'];
|
|
$employeeObject->bo_css = $employee['bo_css'];
|
|
$employeeObject->bo_menu = $employee['bo_menu'];
|
|
$employeeObject->optin = $employee['optin'];
|
|
$employeeObject->last_connection_date = $employee['last_connection_date'];
|
|
|
|
// Add to _shop relations
|
|
$employeesShopsRelations = $this->getChangedIdShop($employeesShop, 'id_employee');
|
|
if (array_key_exists($employee['id_employee'], $employeesShopsRelations)) {
|
|
$employeeObject->id_shop_list = array_values($employeesShopsRelations[$employee['id_employee']]);
|
|
}
|
|
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $employeeObject->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $employeeObject->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($employeeObject->id && Employee::existsInDatabase($employeeObject->id, 'employee')) {
|
|
try {
|
|
$res = $employeeObject->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
if (!$res) {
|
|
try {
|
|
$res = $employeeObject->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Employee (ID: %1$s) cannot be saved. %2$s')), (isset($employee['id_employee']) && !self::isEmpty($employee['id_employee'])) ? Tools::safeOutput($employee['id_employee']) : 'No ID', $err_tmp));
|
|
} else {
|
|
$url = $this->url . $this->image_path . $employee['id_employee'] . '.jpg';
|
|
if (self::imageExits($url) && !(EDImport::copyImg($employeeObject->id, null, $url, 'employees', $this->regenerate))) {
|
|
$this->warning_msg[] = $url . ' ' . self::displayError($this->module->l('cannot be copied.'));
|
|
}
|
|
|
|
self::addLog('Employee', $employee['id_employee'], $employeeObject->id);
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Employee (ID: %1$s) cannot be saved. %2$s')), (isset($employee['id_employee']) && !self::isEmpty($employee['id_employee'])) ? Tools::safeOutput($employee['id_employee']) : 'No ID', $error_tmp));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
$this->updateProcess(count($employees));
|
|
}
|
|
|
|
/**
|
|
* @param $customers
|
|
* @param $addresses
|
|
* @param $carts
|
|
* @param $cartProducts
|
|
* @param $countryState
|
|
*/
|
|
public function customers($customers, $addresses, $carts, $cartProductCartRules, $countryState, $cartRules, $cartRuleAdditionalSecond, $cartRuleCountries, $cartRuleProductRules, $cartRuleProductRuleValues, $importCartRules)
|
|
{
|
|
foreach ($customers as $customer) {
|
|
if ($customerObject = $this->createObjectModel('Customer', $customer['id_customer'])) {
|
|
$customerObject->secure_key = $customer['secure_key'];
|
|
$customerObject->lastname = $customer['lastname'];
|
|
$customerObject->firstname = $customer['firstname'];
|
|
$customerObject->email = $customer['email'];
|
|
$customerObject->passwd = $customer['passwd'];
|
|
if (empty($customerObject->passwd)) {
|
|
$customerObject->passwd = md5('123456');
|
|
$this->showMigrationMessageAndLog('Customer with ID ' . $customer['id_customer'] . ' has not a password. Module set \'123456\' as a default password for this customer.', true);
|
|
}
|
|
$customerObject->last_passwd_gen = $customer['last_passwd_gen'];
|
|
$customerObject->id_gender = $customer['id_gender'];
|
|
$customerObject->birthday = $customer['birthday'];
|
|
$customerObject->newsletter = $customer['newsletter'];
|
|
$customerObject->newsletter_date_add = $customer['newsletter_date_add'];
|
|
$customerObject->optin = $customer['optin'];
|
|
$customerObject->active = $customer['active'];
|
|
$customerObject->deleted = $customer['deleted'];
|
|
$customerObject->note = $customer['note'];
|
|
$customerObject->is_guest = $customer['is_guest'];
|
|
$customerObject->id_default_group = self::getCustomerGroupID($customer['id_default_group']);
|
|
$customerObject->date_add = $customer['date_add'];
|
|
$customerObject->date_upd = $customer['date_upd'];
|
|
if ($this->version >= 1.5) {
|
|
$customerObject->ip_registration_newsletter = $customer['ip_registration_newsletter'];
|
|
$customerObject->website = $customer['website'];
|
|
$customerObject->company = $customer['company'];
|
|
$customerObject->siret = $customer['siret'];
|
|
$customerObject->ape = $customer['ape'];
|
|
$customerObject->outstanding_allow_amount = $customer['outstanding_allow_amount'];
|
|
$customerObject->show_public_prices = $customer['show_public_prices'];
|
|
$customerObject->id_risk = $customer['id_risk'];
|
|
$customerObject->max_payment_days = $customer['max_payment_days'];
|
|
$customerObject->id_shop = self::getShopID($customer['id_shop']);
|
|
$customerObject->id_shop_group = $customer['id_shop_group'];
|
|
$customerObject->id_lang = self::getLanguageID($customer['id_lang']);
|
|
$customerObject->reset_password_token = $customer['reset_password_token'];
|
|
$customerObject->reset_password_validity = $customer['reset_password_validity'];
|
|
}
|
|
Configuration::updateValue('PS_GUEST_CHECKOUT_ENABLED', 1);
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $customerObject->validateFields(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($customerObject->id && Customer::existsInDatabase($customerObject->id, 'customer')) {
|
|
try {
|
|
$res = $customerObject->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
if (!$res) {
|
|
try {
|
|
$res = $customerObject->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Customer (ID: %1$s) cannot be saved. %2$s')), (isset($customer['id_customer']) && !self::isEmpty($customer['id_customer'])) ? Tools::safeOutput($customer['id_customer']) : 'No ID', $err_tmp));
|
|
} else {
|
|
// import customer_groups
|
|
$sql_values = array();
|
|
foreach ($addresses['customer_group'] as $customerGroup) {
|
|
if ($customer['id_customer'] == $customerGroup['id_customer']) {
|
|
$sql_values[] = '(' . (int)$customerObject->id . ', ' . self::getCustomerGroupID($customerGroup['id_group']) . ')';
|
|
}
|
|
}
|
|
if (!self::isEmpty($sql_values)) {
|
|
$result = Db::getInstance()->execute('REPLACE INTO `' . _DB_PREFIX_ . 'customer_group` (`id_customer`, `id_group`) VALUES ' . implode(',', $sql_values));
|
|
if (!$result) {
|
|
$this->showMigrationMessageAndLog(self::displayError('Can\'t add product_attribute_combination. ' . Db::getInstance()->getMsgError()));
|
|
}
|
|
}
|
|
// Import Country
|
|
foreach ($countryState['countries'] as $country) {
|
|
if ($countryModel = $this->createObjectModel('Country', $country['id_country'])) {
|
|
$countryModel->id_zone = $country['id_zone'];
|
|
$countryModel->id_currency = self::getCurrencyID($country['id_currency']);
|
|
$countryModel->call_prefix = $country['call_prefix'];
|
|
$countryModel->iso_code = $country['iso_code'];
|
|
$countryModel->active = $country['active'];
|
|
$countryModel->contains_states = $country['contains_states'];
|
|
$countryModel->need_identification_number = $country['need_identification_number'];
|
|
$countryModel->need_zip_code = $country['need_zip_code'];
|
|
$countryModel->zip_code_format = $country['zip_code_format'];
|
|
$countryModel->display_tax_label = (isset($country['display_tax_label'])) ? (bool)$country['display_tax_label'] : true;
|
|
|
|
// Add to _shop relations
|
|
$countriesShopsRelations = $this->getChangedIdShop($countryState['country_shop'], 'id_country');
|
|
if (array_key_exists($country['id_country'], $countriesShopsRelations)) {
|
|
$countryModel->id_shop_list = array_values($countriesShopsRelations[$country['id_country']]);
|
|
}
|
|
|
|
|
|
// Language fields
|
|
foreach ($countryState['country_lang'] as $lang) {
|
|
if ($lang['id_country'] == $country['id_country']) {
|
|
$lang['id_lang'] = self::getLanguageID($lang['id_lang']);
|
|
$countryModel->name[$lang['id_lang']] = $lang['name'];
|
|
}
|
|
}
|
|
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $countryModel->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $countryModel->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($countryModel->id && Country::existsInDatabase($countryModel->id, 'country')) {
|
|
try {
|
|
$res = $countryModel->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
if (!$res) {
|
|
try {
|
|
$res = $countryModel->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Country (ID: %1$s) cannot be saved. %2$s')), (isset($country['id_country']) && !self::isEmpty($country['id_country'])) ? Tools::safeOutput($country['id_country']) : 'No ID', $err_tmp));
|
|
} else {
|
|
self::addLog('Country', $country['id_country'], $countryModel->id);
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Country (ID: %1$s) cannot be saved. %2$s')), (isset($country['id_country']) && !self::isEmpty($country['id_country'])) ? Tools::safeOutput($country['id_country']) : 'No ID', $error_tmp));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// Import State
|
|
foreach ($countryState['states'] as $state) {
|
|
// if ($state['id_state'] == $address['id_state']) {
|
|
if ($stateModel = $this->createObjectModel('State', $state['id_state'])) {
|
|
$stateModel->id_country = self::getLocalId('country', $state['id_country'], 'data');
|
|
$stateModel->id_zone = $state['id_zone'];
|
|
$stateModel->iso_code = $state['iso_code'];
|
|
$stateModel->active = $state['active'];
|
|
$stateModel->name = $state['name'];
|
|
|
|
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $stateModel->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $stateModel->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($stateModel->id && State::existsInDatabase($stateModel->id, 'state')) {
|
|
try {
|
|
$res = $stateModel->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
if (!$res) {
|
|
try {
|
|
$res = $stateModel->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('State (ID: %1$s) cannot be saved. %2$s')), (isset($state['id_state']) && !self::isEmpty($state['id_state'])) ? Tools::safeOutput($state['id_state']) : 'No ID', $err_tmp));
|
|
} else {
|
|
self::addLog('State', $state['id_state'], $stateModel->id);
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('State (ID: %1$s) cannot be saved. %2$s')), (isset($state['id_state']) && !self::isEmpty($state['id_state'])) ? Tools::safeOutput($state['id_state']) : 'No ID', $error_tmp));
|
|
}
|
|
}
|
|
// }
|
|
}
|
|
}
|
|
// Import Address
|
|
foreach ($addresses['address'] as $address) {
|
|
if ($address['id_customer'] == $customer['id_customer']) {
|
|
if ($addressObject = $this->createObjectModel('Address', $address['id_address'])) {
|
|
$addressObject->id_customer = $customerObject->id;
|
|
$addressObject->id_manufacturer = self::getLocalId('manufacturer', $address['id_manufacturer'], 'data');
|
|
$addressObject->id_supplier = self::getLocalId('supplier', $address['id_supplier'], 'data');
|
|
$addressObject->id_country = self::getLocalId('country', $address['id_country'], 'data');
|
|
$addressObject->id_state = self::getLocalId('state', $address['id_state'], 'data');
|
|
$addressObject->alias = $address['alias'];
|
|
$addressObject->company = $address['company'];
|
|
$addressObject->lastname = $address['lastname'];
|
|
$addressObject->firstname = $address['firstname'];
|
|
$addressObject->vat_number = $address['vat_number'];
|
|
$addressObject->address1 = $address['address1'];
|
|
$addressObject->address2 = $address['address2'];
|
|
$addressObject->postcode = $address['postcode'];
|
|
$addressObject->city = $address['city'];
|
|
$addressObject->other = $address['other'];
|
|
$addressObject->phone = $address['phone'];
|
|
$addressObject->phone_mobile = $address['phone_mobile'];
|
|
$addressObject->dni = $address['dni'];
|
|
$addressObject->deleted = $address['deleted'];
|
|
$addressObject->date_add = $address['date_add'] == '0000-00-00 00:00:00' ? date('Y-m-d H:i:s') : $address['date_add'];
|
|
$addressObject->date_upd = $address['date_upd'] == '0000-00-00 00:00:00' ? date('Y-m-d H:i:s') : $address['date_upd'];
|
|
// if ($this->version >= 1.5) {
|
|
$addressObject->id_warehouse = (isset($address['id_warehouse']) && !self::isEmpty($address['id_warehouse'])) ? $address['id_warehouse'] : null;
|
|
// }
|
|
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $addressObject->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $addressObject->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($addressObject->id && Address::existsInDatabase($addressObject->id, 'address')) {
|
|
try {
|
|
$res = $addressObject->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
if (!$res) {
|
|
try {
|
|
$res = $addressObject->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Address (ID: %1$s) cannot be saved. %2$s')), (isset($address['id_address']) && !self::isEmpty($address['id_address'])) ? Tools::safeOutput($address['id_address']) : 'No ID', $err_tmp));
|
|
} else {
|
|
self::addLog('Address', $address['id_address'], $addressObject->id);
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Address (ID: %1$s) cannot be saved. %2$s')), (isset($address['id_address']) && !self::isEmpty($address['id_address'])) ? Tools::safeOutput($address['id_address']) : 'No ID', $error_tmp));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (count($this->error_msg) == 0) {
|
|
self::addLog('Customer', $customer['id_customer'], $customerObject->id);
|
|
MigrationProPassLog::storeCustomerPass($customerObject->id, $customer['email'], $customer['passwd']);
|
|
}
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Customer (ID: %1$s) cannot be validate. %2$s')), (isset($customer['id_customer']) && !self::isEmpty($customer['id_customer'])) ? Tools::safeOutput($customer['id_customer']) : 'No ID', $error_tmp));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// Import Cart Rule
|
|
if ($importCartRules) {
|
|
foreach ($cartRules as $cartRule) {
|
|
if (version_compare(Configuration::get('migrationpro_version'), '1.5', '<')) {
|
|
$cartRuleid = $cartRule['id_discount'];
|
|
} else {
|
|
$cartRuleid = $cartRule['id_cart_rule'];
|
|
}
|
|
if ($cartRuleObj = $this->createObjectModel('CartRule', $cartRuleid)) {
|
|
$cartRuleObj->id_customer = self::getLocalID('customer', $cartRule['id_customer'], 'data');
|
|
$cartRuleObj->date_from = $cartRule['date_from'];
|
|
$cartRuleObj->date_to = $cartRule['date_to'];
|
|
$cartRuleObj->description = isset($cartRule['description']) ? $cartRule['description'] : '';
|
|
$cartRuleObj->quantity = $cartRule['quantity'];
|
|
$cartRuleObj->quantity_per_user = $cartRule['quantity_per_user'];
|
|
$cartRuleObj->priority = isset($cartRule['priority']) ? $cartRule['priority'] : 1;
|
|
$cartRuleObj->partial_use = isset($cartRule['partial_use']) ? $cartRule['partial_use'] : 0;
|
|
$cartRuleObj->code = isset($cartRule['code']) ? $cartRule['code'] : 0;
|
|
$cartRuleObj->minimum_amount = isset($cartRule['minimum_amount']) ? $cartRule['minimum_amount'] : 0;
|
|
$cartRuleObj->minimum_amount_tax = isset($cartRule['minimum_amount_tax']) ? $cartRule['minimum_amount_tax'] : 0;
|
|
$cartRuleObj->minimum_amount_currency = isset($cartRule['minimum_amount_currency']) ? self::getCurrencyID($cartRule['minimum_amount_currency']) : 0;
|
|
$cartRuleObj->minimum_amount_shipping = isset($cartRule['minimum_amount_shipping']) ? $cartRule['minimum_amount_shipping'] : 0;
|
|
$cartRuleObj->country_restriction = isset($cartRule['country_restriction']) ? $cartRule['country_restriction'] : 0;
|
|
$cartRuleObj->carrier_restriction = isset($cartRule['carrier_restriction']) ? $cartRule['carrier_restriction'] : 0;
|
|
$cartRuleObj->group_restriction = isset($cartRule['group_restriction']) ? $cartRule['group_restriction'] : 0;
|
|
$cartRuleObj->cart_rule_restriction = isset($cartRule['cart_rule_restriction']) ? $cartRule['cart_rule_restriction'] : 0;
|
|
$cartRuleObj->product_restriction = isset($cartRule['product_restriction']) ? $cartRule['product_restriction'] : 0;
|
|
$cartRuleObj->shop_restriction = isset($cartRule['shop_restriction']) ? $cartRule['shop_restriction'] : 0;
|
|
$cartRuleObj->free_shipping = isset($cartRule['free_shipping']) ? $cartRule['free_shipping'] : 0;
|
|
$cartRuleObj->reduction_percent = isset($cartRule['reduction_percent']) ? $cartRule['reduction_percent'] : 0;
|
|
$cartRuleObj->reduction_amount = isset($cartRule['reduction_amount']) ? $cartRule['reduction_amount'] : 0;
|
|
$cartRuleObj->reduction_tax = isset($cartRule['reduction_tax']) ? $cartRule['reduction_tax'] : 0;
|
|
$cartRuleObj->reduction_currency = isset($cartRule['reduction_currency']) ? self::getCurrencyID($cartRule['reduction_currency']) : 0;
|
|
$cartRuleObj->reduction_product = isset($cartRule['reduction_product']) ? self::getLocalID('product', $cartRule['reduction_product'], 'data') : 0;
|
|
$cartRuleObj->gift_product = isset($cartRule['gift_product']) ? self::getLocalID('product', $cartRule['gift_product'], 'data') : 0;
|
|
$cartRuleObj->gift_product_attribute = isset($cartRule['gift_product_attribute']) ? self::getLocalID('combination', $cartRule['gift_product_attribute'], 'data') : 0;
|
|
$cartRuleObj->highlight = isset($cartRule['highlight']) ? $cartRule['highlight'] : 0;
|
|
$cartRuleObj->active = isset($cartRule['active']) ? $cartRule['active'] : 0;
|
|
$cartRuleObj->date_add = $cartRule['date_add'] == '0000-00-00 00:00:00' ? date('Y-m-d H:i:s') : $cartRule['date_add'];
|
|
$cartRuleObj->date_upd = $cartRule['date_upd'] == '0000-00-00 00:00:00' ? date('Y-m-d H:i:s') : $cartRule['date_upd'];
|
|
if (version_compare(Configuration::get('migrationpro_version'), '1.5', '<')) {
|
|
foreach ($cartRuleAdditionalSecond['cart_rule_langs'] as $lang) {
|
|
if ($lang['id_discount'] == $cartRule['id_discount']) {
|
|
$lang['id_lang'] = self::getLanguageID($lang['id_lang']);
|
|
$cartRuleObj->name[$lang['id_lang']] = $lang['description'];
|
|
}
|
|
}
|
|
} else {
|
|
foreach ($cartRuleAdditionalSecond['cart_rule_langs'] as $lang) {
|
|
if ($lang['id_cart_rule'] == $cartRule['id_cart_rule']) {
|
|
$lang['id_lang'] = self::getLanguageID($lang['id_lang']);
|
|
$cartRuleObj->name[$lang['id_lang']] = $lang['name'];
|
|
}
|
|
}
|
|
}
|
|
|
|
if (version_compare(Configuration::get('migrationpro_version'), '1.5', '<')) {
|
|
$cartRuleObj->priority = 1;
|
|
$cartRuleObj->partial_use = 1;
|
|
$cartRuleObj->code = $cartRule['name'];
|
|
$cartRuleObj->minimum_amount = $cartRule['minimal'];
|
|
$cartRuleObj->minimum_amount_tax = 0;
|
|
$cartRuleObj->minimum_amount_currency = Configuration::get('PS_CURRENCY_DEFAULT');
|
|
$cartRuleObj->minimum_amount_shipping = 0;
|
|
$cartRuleObj->country_restriction = 0;
|
|
$cartRuleObj->carrier_restriction = 0;
|
|
$cartRuleObj->group_restriction = 0;
|
|
$cartRuleObj->cart_rule_restriction = 0;
|
|
$cartRuleObj->product_restriction = 0;
|
|
$cartRuleObj->shop_restriction = 0;
|
|
$cartRuleObj->free_shipping = 0;
|
|
$cartRuleObj->reduction_percent = 0;
|
|
$cartRuleObj->reduction_amount = 0;
|
|
$cartRuleObj->reduction_tax = $cartRule['include_tax'];
|
|
if ($cartRule['id_discount_type'] == 3) {
|
|
$cartRuleObj->free_shipping = 1;
|
|
} elseif ($cartRule['id_discount_type'] == 1) {
|
|
$cartRuleObj->reduction_percent = $cartRule['value'];
|
|
} elseif ($cartRule['id_discount_type'] == 2) {
|
|
$cartRuleObj->reduction_amount = $cartRule['value'];
|
|
}
|
|
if ($cartRule['id_discount_type'] == 2 && $cartRule['include_tax'] != 0) {
|
|
} else {
|
|
$cartRuleObj->reduction_tax = 0;
|
|
}
|
|
$cartRuleObj->reduction_currency = self::getCurrencyID($cartRule['id_currency']);
|
|
$cartRuleObj->reduction_product = 0;
|
|
$cartRuleObj->gift_product = 0;
|
|
$cartRuleObj->gift_product_attribute = 0;
|
|
$cartRuleObj->highlight = 0;
|
|
}
|
|
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $cartRuleObj->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $cartRuleObj->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($cartRuleObj->id && CartRule::existsInDatabase($cartRuleObj->id, 'cart_rule')) {
|
|
try {
|
|
$res = $cartRuleObj->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
try {
|
|
$res = $cartRuleObj->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
if (!$res) {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Cart rule (ID: %1$s) cannot be saved. %2$s')), (isset($cartRuleid) && !self::isEmpty($cartRuleid)) ? Tools::safeOutput($cartRuleid) : 'No ID', $err_tmp));
|
|
} else {
|
|
// Import Cart Rule Carrier
|
|
$sql_values = array();
|
|
foreach ($cartRuleAdditionalSecond['cart_rule_carriers'] as $cartRuleCarrier) {
|
|
if ($cartRuleCarrier['id_cart_rule'] == $cartRuleid) {
|
|
$sql_values[] = '(' . (int)$cartRuleObj->id . ', ' . self::getLocalID('carrier', $cartRuleCarrier['id_carrier'], 'data') . ')';
|
|
}
|
|
}
|
|
if (!self::isEmpty($sql_values)) {
|
|
$result = Db::getInstance()->execute('REPLACE INTO `' . _DB_PREFIX_ . 'cart_rule_carrier` (`id_cart_rule`, `id_carrier`) VALUES ' . implode(',', $sql_values));
|
|
if (!$result) {
|
|
$this->showMigrationMessageAndLog(self::displayError('Can\'t add cart_rule_carrier. ' . Db::getInstance()->getMsgError()));
|
|
}
|
|
}
|
|
|
|
// Import Cart Rule Country
|
|
$sql_values = array();
|
|
foreach ($cartRuleAdditionalSecond['cart_rule_countries'] as $cartRuleCountry) {
|
|
if ($cartRuleCountry['id_cart_rule'] == $cartRuleid) {
|
|
// Import Country
|
|
foreach ($cartRuleCountries['country'] as $country) {
|
|
if ($country['id_country'] == $cartRuleCountry['id_country']) {
|
|
if ($countryModel = $this->createObjectModel('Country', $country['id_country'])) {
|
|
$countryModel->id_zone = $country['id_zone'];
|
|
$countryModel->id_currency = self::getCurrencyID($country['id_currency']);
|
|
$countryModel->call_prefix = $country['call_prefix'];
|
|
$countryModel->iso_code = $country['iso_code'];
|
|
$countryModel->active = $country['active'];
|
|
$countryModel->contains_states = $country['contains_states'];
|
|
$countryModel->need_identification_number = $country['need_identification_number'];
|
|
$countryModel->need_zip_code = $country['need_zip_code'];
|
|
$countryModel->zip_code_format = $country['zip_code_format'];
|
|
$countryModel->display_tax_label = (isset($country['display_tax_label'])) ? (bool)$country['display_tax_label'] : true;
|
|
|
|
// Add to _shop relations
|
|
$countriesShopsRelations = $this->getChangedIdShop($cartRuleCountries['country_shop'], 'id_country');
|
|
if (array_key_exists($country['id_country'], $countriesShopsRelations)) {
|
|
$countryModel->id_shop_list = array_values($countriesShopsRelations[$country['id_country']]);
|
|
}
|
|
|
|
|
|
//language fields
|
|
foreach ($cartRuleCountries['country_lang'] as $lang) {
|
|
if ($lang['id_country'] == $country['id_country']) {
|
|
$lang['id_lang'] = self::getLanguageID($lang['id_lang']);
|
|
$countryModel->name[$lang['id_lang']] = $lang['name'];
|
|
}
|
|
}
|
|
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $countryModel->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $countryModel->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($countryModel->id && Country::existsInDatabase($countryModel->id, 'country')) {
|
|
try {
|
|
$res = $countryModel->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
if (!$res) {
|
|
try {
|
|
$res = $countryModel->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Country (ID: %1$s) cannot be saved. %2$s')), (isset($country['id_country']) && !self::isEmpty($country['id_country'])) ? Tools::safeOutput($country['id_country']) : 'No ID', $err_tmp));
|
|
} else {
|
|
self::addLog('Country', $country['id_country'], $countryModel->id);
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Country (ID: %1$s) cannot be saved. %2$s')), (isset($country['id_country']) && !self::isEmpty($country['id_country'])) ? Tools::safeOutput($country['id_country']) : 'No ID', $error_tmp));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
$sql_values[] = '(' . (int)$cartRuleObj->id . ', ' . self::getLocalID('country', $cartRuleCountry['id_country'], 'data') . ')';
|
|
}
|
|
}
|
|
if (!self::isEmpty($sql_values)) {
|
|
$result = Db::getInstance()->execute('REPLACE INTO `' . _DB_PREFIX_ . 'cart_rule_country` (`id_cart_rule`, `id_country`) VALUES ' . implode(',', $sql_values));
|
|
if (!$result) {
|
|
$this->showMigrationMessageAndLog(self::displayError('Can\'t add cart_rule_country. ' . Db::getInstance()->getMsgError()));
|
|
}
|
|
}
|
|
|
|
// Import Cart Rule Group
|
|
$sql_values = array();
|
|
foreach ($cartRuleAdditionalSecond['cart_rule_groups'] as $cartRuleGroup) {
|
|
if ($cartRuleGroup['id_cart_rule'] == $cartRuleid) {
|
|
$sql_values[] = '(' . (int)$cartRuleObj->id . ', ' . self::getCustomerGroupID($cartRuleGroup['id_group']) . ')';
|
|
}
|
|
}
|
|
if (!self::isEmpty($sql_values)) {
|
|
$result = Db::getInstance()->execute('REPLACE INTO `' . _DB_PREFIX_ . 'cart_rule_group` (`id_cart_rule`, `id_group`) VALUES ' . implode(',', $sql_values));
|
|
if (!$result) {
|
|
$this->showMigrationMessageAndLog(self::displayError('Can\'t add cart_rule_group. ' . Db::getInstance()->getMsgError()));
|
|
}
|
|
}
|
|
|
|
// Import Cart Rule Product Rule Group
|
|
foreach ($cartRuleAdditionalSecond['cart_rule_product_rule_groups'] as $cartRuleProductRuleGroup) {
|
|
$sql_value = '';
|
|
if ($cartRuleProductRuleGroup['id_cart_rule'] == $cartRuleid) {
|
|
$sql_value = '(' . (int)$cartRuleObj->id . ', ' . (int)$cartRuleProductRuleGroup['quantity'] . ')';
|
|
}
|
|
if (!self::isEmpty($sql_value)) {
|
|
$result = Db::getInstance()->execute('REPLACE INTO `' . _DB_PREFIX_ . 'cart_rule_product_rule_group` (`id_cart_rule`,
|
|
`quantity`)
|
|
VALUES ' . $sql_value);
|
|
if (!$result) {
|
|
$this->showMigrationMessageAndLog(self::displayError('Can\'t add cart_rule_product_rule_group. ' . Db::getInstance()->getMsgError()));
|
|
} else {
|
|
$id_product_rule_group = Db::getInstance()->Insert_ID();
|
|
|
|
// Import Cart Rule Product Rule
|
|
foreach ($cartRuleProductRules as $cartRuleProductRule) {
|
|
$sql_value = '';
|
|
if ($cartRuleProductRule['id_product_rule_group'] == $cartRuleProductRuleGroup['id_product_rule_group']) {
|
|
$sql_value = '(' . (int)$id_product_rule_group . ', \'' . pSQL($cartRuleProductRule['type']) . '\')';
|
|
if (!self::isEmpty($sql_value)) {
|
|
$result = Db::getInstance()->execute('REPLACE INTO `' . _DB_PREFIX_ . 'cart_rule_product_rule` (`id_product_rule_group`, `type`)
|
|
VALUES ' . $sql_value);
|
|
if (!$result) {
|
|
$this->showMigrationMessageAndLog(self::displayError('Can\'t add cart_rule_product_rule. ' . Db::getInstance()->getMsgError()));
|
|
} else {
|
|
$id_product_rule = Db::getInstance()->Insert_ID();
|
|
|
|
// Import Cart Rule Product Rule Value
|
|
$sql_values = array();
|
|
foreach ($cartRuleProductRuleValues as $cartRuleProductRuleValue) {
|
|
if ($cartRuleProductRuleValue['id_product_rule'] == $cartRuleProductRule['id_product_rule']) {
|
|
$id_item = 0;
|
|
if (preg_match('|products|', $cartRuleProductRule['type'])) {
|
|
$id_item = self::getLocalID('product', $cartRuleProductRuleValue['id_item'], 'data');
|
|
} elseif (preg_match('|attributes|', $cartRuleProductRule['type'])) {
|
|
$id_item = self::getLocalID('attribute', $cartRuleProductRuleValue['id_item'], 'data');
|
|
} elseif (preg_match('|categories|', $cartRuleProductRule['type'])) {
|
|
$id_item = self::getLocalID('category', $cartRuleProductRuleValue['id_item'], 'data');
|
|
} elseif (preg_match('|manufacturers|', $cartRuleProductRule['type'])) {
|
|
$id_item = self::getLocalID('manufacturer', $cartRuleProductRuleValue['id_item'], 'data');
|
|
} elseif (preg_match('|suppliers|', $cartRuleProductRule['type'])) {
|
|
$id_item = self::getLocalID('supplier', $cartRuleProductRuleValue['id_item'], 'data');
|
|
}
|
|
$sql_values[] = '(' . (int)$id_product_rule . ', ' . (int)$id_item . ')';
|
|
}
|
|
if (!self::isEmpty($sql_values)) {
|
|
$result = Db::getInstance()->execute('REPLACE INTO `' . _DB_PREFIX_ . 'cart_rule_product_rule_value` (`id_product_rule`, `id_item`)
|
|
VALUES ' . implode(',', $sql_values));
|
|
if (!$result) {
|
|
$this->showMigrationMessageAndLog(self::displayError('Can\'t add cart_rule_product_rule_value. ' . Db::getInstance()->getMsgError()));
|
|
}
|
|
}
|
|
}
|
|
self::addLog('CARTRULEPRODUCTRULE', $cartRuleProductRule['id_product_rule'], $id_product_rule);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
self::addLog('CARTRULEPRODUCTRULEGROUP', $cartRuleProductRuleGroup['id_product_rule_group'], $id_product_rule_group);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Import Cart Rule Shop
|
|
$sql_values = array();
|
|
foreach ($cartRuleAdditionalSecond['cart_rule_shops'] as $cartRuleShop) {
|
|
if ($cartRuleShop['id_cart_rule'] == $cartRuleid) {
|
|
$sql_values[] = '(' . (int)$cartRuleObj->id . ', ' . self::getShopID($cartRuleShop['id_shop']) . ')';
|
|
}
|
|
}
|
|
if (!self::isEmpty($sql_values)) {
|
|
$result = Db::getInstance()->execute('REPLACE INTO `' . _DB_PREFIX_ . 'cart_rule_shop` (`id_cart_rule`, `id_shop`) VALUES ' . implode(',', $sql_values));
|
|
if (!$result) {
|
|
$this->showMigrationMessageAndLog(self::displayError('Can\'t add cart_rule_shop. ' . Db::getInstance()->getMsgError()));
|
|
}
|
|
}
|
|
|
|
if (count($this->error_msg) == 0) {
|
|
self::addLog('CartRule', $cartRuleid, $cartRuleObj->id);
|
|
}
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Cart rule (ID: %1$s) cannot be saved. %2$s')), (isset($cartRuleid) && !self::isEmpty($cartRuleid)) ? Tools::safeOutput($cartRuleid) : 'No ID', $error_tmp));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Import Cart Rule Combination
|
|
$sql_values = array();
|
|
foreach ($cartRuleAdditionalSecond['cart_rule_combinations'] as $cartRuleCombination) {
|
|
$sql_values[] = '(' . self::getLocalID('cartRule', $cartRuleCombination['id_cart_rule_1'], 'data') . ',
|
|
' . self::getLocalID('cartRule', $cartRuleCombination['id_cart_rule_2'], 'data') . ')';
|
|
}
|
|
if (!self::isEmpty($sql_values)) {
|
|
$result = Db::getInstance()->execute('REPLACE INTO `' . _DB_PREFIX_ . 'cart_rule_combination` (`id_cart_rule_1`, `id_cart_rule_2`) VALUES ' . implode(',', $sql_values));
|
|
if (!$result) {
|
|
$this->showMigrationMessageAndLog(self::displayError('Can\'t add cart_rule_combination. ' . Db::getInstance()->getMsgError()));
|
|
}
|
|
}
|
|
}
|
|
// Import Cart
|
|
foreach ($carts as $cart) {
|
|
if ($cartObject = $this->createObjectModel('Cart', $cart['id_cart'])) {
|
|
$cartObject->id_shop = self::getShopID($cart['id_shop']);
|
|
$cartObject->id_shop_group = Shop::getGroupFromShop($cartObject->id_shop);
|
|
$cartObject->id_carrier = $cart['id_carrier']; // fix it after carrier import
|
|
$cartObject->delivery_option = $cart['delivery_option'];
|
|
$cartObject->id_lang = self::getLanguageID($cart['id_lang']);
|
|
$cartObject->id_address_delivery = self::getLocalID('address', $cart['id_address_delivery'], 'data');
|
|
$cartObject->id_address_invoice = self::getLocalID('address', $cart['id_address_invoice'], 'data');
|
|
$cartObject->id_currency = self::getCurrencyID($cart['id_currency']);
|
|
$cartObject->id_customer = self::getLocalID('customer', $cart['id_customer'], 'data');
|
|
$cartObject->id_guest = $cart['id_guest'];
|
|
if (!empty($cartObject->id_customer)) {
|
|
$customerObj = new Customer($cartObject->id_customer);
|
|
$cartObject->secure_key = $customerObj->secure_key;
|
|
} else {
|
|
if (!empty($cart['secure_key'])) {
|
|
$cartObject->secure_key = $cart['secure_key'];
|
|
} else {
|
|
$cartObject->secure_key = md5(_COOKIE_KEY_ . Configuration::get('PS_SHOP_NAME'));
|
|
$this->showMigrationMessageAndLog('Secure key of cart with ID ' . $cart['id_cart'] ? $cart['id_cart'] : 'No ID' . ' is empty. For that reason, the module set default value as a secure key.', true);
|
|
}
|
|
}
|
|
$cartObject->recyclable = $cart['recyclable'];
|
|
$cartObject->gift = $cart['gift'];
|
|
$cartObject->gift_message = $cart['gift_message'];
|
|
$cartObject->mobile_theme = isset($cart['mobile_theme']) ? $cart['mobile_theme'] : null;
|
|
$cartObject->allow_seperated_package = isset($cart['allow_seperated_package ']) ? $cart['allow_seperated_package '] : null;
|
|
$cartObject->date_add = $cart['date_add'] == '0000-00-00 00:00:00' ? date('Y-m-d H:i:s') : $cart['date_add'];
|
|
$cartObject->date_upd = $cart['date_upd'] == '0000-00-00 00:00:00' ? date('Y-m-d H:i:s') : $cart['date_upd'];
|
|
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $cartObject->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $cartObject->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($cartObject->id && Cart::existsInDatabase($cartObject->id, 'cart')) {
|
|
try {
|
|
$res = $cartObject->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
if (!$res) {
|
|
try {
|
|
$res = $cartObject->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Cart (ID: %1$s) cannot be saved. %2$s')), (isset($cart['id_cart']) && !self::isEmpty($cart['id_cart'])) ? Tools::safeOutput($cart['id_cart']) : 'No ID', $err_tmp));
|
|
} else {
|
|
// Import Cart Product
|
|
$sql_values = array();
|
|
foreach ($cartProductCartRules['cart_product'] as $cartProduct) {
|
|
if ($cartProduct['id_cart'] == $cart['id_cart']) {
|
|
if (!self::isEmpty($cartProduct['id_shop'])) {
|
|
$shopIdOfCartProduct = self::getShopID($cartProduct['id_shop']);
|
|
} else {
|
|
$shopIdOfCartProduct = (int)Configuration::get('PS_SHOP_DEFAULT');
|
|
}
|
|
$sql_values[] = '(' . (int)$cartObject->id . ', ' . self::getLocalID('product', $cartProduct['id_product'], 'data') . ', ' . self::getLocalID('address', $cartProduct['id_address_delivery'], 'data') . ', ' . $shopIdOfCartProduct . ', ' . self::getLocalID('combination', $cartProduct['id_product_attribute'], 'data') . ' , ' . (int)$cartProduct['quantity'] . ', \'' . pSQL($cartProduct['date_add']) . '\')';
|
|
}
|
|
}
|
|
if (!self::isEmpty($sql_values)) {
|
|
$result = Db::getInstance()->execute('REPLACE INTO `' . _DB_PREFIX_ . 'cart_product` (`id_cart`, `id_product`,
|
|
`id_address_delivery`, `id_shop`, `id_product_attribute`,
|
|
`quantity`, `date_add`)
|
|
VALUES ' . implode(',', $sql_values));
|
|
if (!$result) {
|
|
$this->showMigrationMessageAndLog(self::displayError('Can\'t add cart_product. ' . Db::getInstance()->getMsgError()));
|
|
}
|
|
}
|
|
|
|
// Import Cart Cart_Rule
|
|
$sql_values = array();
|
|
foreach ($cartProductCartRules['cart_cart_rule'] as $cartCartRule) {
|
|
if ($cartCartRule['id_cart'] == $cart['id_cart']) {
|
|
$sql_values[] = '(' . (int)$cartObject->id . ', ' . self::getLocalID('cartRule', $cartCartRule['id_cart_rule'], 'data') . ')';
|
|
}
|
|
}
|
|
if (!self::isEmpty($sql_values)) {
|
|
$result = Db::getInstance()->execute('REPLACE INTO `' . _DB_PREFIX_ . 'cart_cart_rule` (`id_cart`, `id_cart_rule`)
|
|
VALUES ' . implode(',', $sql_values));
|
|
if (!$result) {
|
|
$this->showMigrationMessageAndLog(self::displayError('Can\'t add cart_cart_rule. ' . Db::getInstance()->getMsgError()));
|
|
}
|
|
}
|
|
if (count($this->error_msg) == 0) {
|
|
self::addLog('Cart', $cart['id_cart'], $cartObject->id);
|
|
}
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Cart (ID: %1$s) cannot be saved. %2$s')), (isset($cart['id_cart']) && !self::isEmpty($cart['id_cart'])) ? Tools::safeOutput($cart['id_cart']) : 'No ID', $error_tmp));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
$this->updateProcess(count($customers));
|
|
}
|
|
|
|
/**
|
|
* @param $orders
|
|
* @param $ordersAdditionalSecond
|
|
* @param $ordersAdditionalThird
|
|
*/
|
|
public function orders($orders, $ordersAdditionalSecond, $ordersAdditionalThird)
|
|
{
|
|
$isMigrateRecentData = (int)ConfigurationCore::get('_migrate_recent_data');
|
|
foreach ($orders as $order) {
|
|
if ($orderModel = $this->createObjectModel('Order', $order['id_order'], 'orders')) {
|
|
$orderModel->id_address_delivery = $order['id_address_delivery'];
|
|
$orderModel->id_address_invoice = $order['id_address_invoice'];
|
|
$orderModel->id_cart = $order['id_cart'];
|
|
$orderModel->id_currency = self::getCurrencyID($order['id_currency']);
|
|
$orderModel->id_lang = self::getLanguageID($order['id_lang']);
|
|
$orderModel->id_customer = self::getLocalId('customer', $order['id_customer'], 'data');
|
|
$orderModel->id_carrier = $order['id_carrier'];
|
|
if (!empty($orderModel->id_customer)) {
|
|
$customerObj = new Customer($orderModel->id_customer);
|
|
$orderModel->secure_key = $customerObj->secure_key;
|
|
} else {
|
|
if (!empty($order['secure_key'])) {
|
|
$orderModel->secure_key = $order['secure_key'];
|
|
} else {
|
|
$orderModel->secure_key = md5(_COOKIE_KEY_ . Configuration::get('PS_SHOP_NAME'));
|
|
$this->showMigrationMessageAndLog('Secure key of order with ID ' . $order['id_order'] ? $order['id_order'] : 'No ID' . ' is empty. For that reason, the module set default value as a secure key.', true);
|
|
}
|
|
}
|
|
$orderModel->payment = $order['payment'];
|
|
$orderModel->module = (self::isEmpty($order['module'])) || !Validate::isModuleName($order['module']) ? 'cheque' : $order['module'];
|
|
$orderModel->recyclable = $order['recyclable'];
|
|
$orderModel->gift = $order['gift'];
|
|
$orderModel->gift_message = $order['gift_message'];
|
|
$orderModel->total_discounts = $order['total_discounts'];
|
|
$orderModel->total_paid = $order['total_paid'];
|
|
$orderModel->total_paid_real = $order['total_paid_real'];
|
|
$orderModel->total_products = $order['total_products'];
|
|
$orderModel->total_products_wt = $order['total_products_wt'];
|
|
$orderModel->total_shipping = $order['total_shipping'];
|
|
$orderModel->carrier_tax_rate = $order['carrier_tax_rate'];
|
|
$orderModel->total_wrapping = $order['total_wrapping'];
|
|
$orderModel->shipping_number = Validate::isTrackingNumber($order['shipping_number']) ? $order['shipping_number'] : 0;
|
|
$orderModel->conversion_rate = self::defaultValue($order['conversion_rate'], 0);
|
|
$orderModel->invoice_number = $order['invoice_number'];
|
|
$orderModel->delivery_number = $order['delivery_number'];
|
|
$orderModel->invoice_date = $order['invoice_date'];
|
|
$orderModel->delivery_date = $order['delivery_date'];
|
|
$orderModel->valid = $order['valid'];
|
|
$orderModel->date_add = $order['date_add'];
|
|
$orderModel->date_upd = $order['date_upd'];
|
|
$orderTaxRate = 0;
|
|
$taxName = '';
|
|
foreach ($ordersAdditionalSecond['order_detail'] as $orderDetail) {
|
|
if ($orderDetail['id_order'] == $order['id_order']) {
|
|
$orderTaxRate = $orderDetail['tax_rate'];
|
|
$taxName = $orderDetail['tax_name'];
|
|
break;
|
|
}
|
|
}
|
|
if ($this->version >= 1.5) {
|
|
$orderModel->id_shop = self::getShopID($order['id_shop']);
|
|
$orderModel->id_shop_group = Shop::getGroupFromShop($orderModel->id_shop);
|
|
$orderModel->current_state = $order['current_state'];
|
|
$orderModel->mobile_theme = $order['mobile_theme'];
|
|
$orderModel->total_discounts_tax_incl = (float)Tools::ps_round($order['total_discounts_tax_incl'], _PS_PRICE_DISPLAY_PRECISION_);
|
|
$orderModel->total_discounts_tax_excl = (float)Tools::ps_round($order['total_discounts_tax_excl'], _PS_PRICE_DISPLAY_PRECISION_);
|
|
$orderModel->total_paid_tax_incl = (float)Tools::ps_round($order['total_paid_tax_incl'], _PS_PRICE_DISPLAY_PRECISION_);
|
|
$orderModel->total_paid_tax_excl = (float)Tools::ps_round($order['total_paid_tax_excl'], _PS_PRICE_DISPLAY_PRECISION_);
|
|
$orderModel->total_shipping_tax_incl = (float)Tools::ps_round($order['total_shipping_tax_incl'], _PS_PRICE_DISPLAY_PRECISION_);
|
|
$orderModel->total_shipping_tax_excl = (float)Tools::ps_round($order['total_shipping_tax_excl'], _PS_PRICE_DISPLAY_PRECISION_);
|
|
$orderModel->total_wrapping_tax_incl = (float)Tools::ps_round($order['total_wrapping_tax_incl'], _PS_PRICE_DISPLAY_PRECISION_);
|
|
$orderModel->total_wrapping_tax_excl = (float)Tools::ps_round($order['total_wrapping_tax_excl'], _PS_PRICE_DISPLAY_PRECISION_);
|
|
$orderModel->round_mode = $order['round_mode'];
|
|
$orderModel->round_type = $order['round_type'];
|
|
$orderModel->reference = $order['reference'];
|
|
} else {
|
|
$orderModel->total_discounts_tax_incl = $orderModel->total_discounts;
|
|
$orderModel->total_discounts_tax_excl = $orderModel->total_discounts - ($orderTaxRate * $orderModel->total_discounts)/100;
|
|
$orderModel->reference = Order::generateReference();
|
|
$orderModel->id_shop = (int)$this->mapping['multi_shops'];
|
|
$current_shop = Shop::getShop((int)$this->mapping['multi_shops']);
|
|
$orderModel->id_shop_group = $current_shop['id_shop_group'];
|
|
$orderModel->total_shipping_tax_incl = $order['total_shipping'];
|
|
$total_shipping_tax_excl = $order['total_shipping'] / (1 + $order['carrier_tax_rate']/100);
|
|
$orderModel->total_shipping_tax_excl = (float)Tools::ps_round($total_shipping_tax_excl, _PS_PRICE_COMPUTE_PRECISION_);
|
|
$orderModel->total_paid_tax_incl = $order['total_products_wt'] + $orderModel->total_shipping_tax_incl - $orderModel->total_discounts;
|
|
$orderModel->total_paid_tax_excl = $order['total_products'] + $orderModel->total_shipping_tax_excl - $orderModel->total_discounts_tax_excl;
|
|
}
|
|
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $orderModel->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $orderModel->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($orderModel->id && self::existsInDatabase($orderModel->id, 'orders', 'order')) {
|
|
try {
|
|
$res = $orderModel->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
if (!$res) {
|
|
try {
|
|
$res = $orderModel->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Order (ID: %1$s) cannot be saved. %2$s')), (isset($order['id_order']) && !self::isEmpty($order['id_order'])) ? Tools::safeOutput($order['id_order']) : 'No ID', $err_tmp));
|
|
} else {
|
|
// import Payment
|
|
$paymentIds = array();
|
|
|
|
if (version_compare(Configuration::get('migrationpro_version'), '1.5', '<')) {
|
|
if ($orderPaymentModel = $this->createObjectModel('OrderPayment', $order['id_order'])) {
|
|
$orderPaymentModel->order_reference = $orderModel->reference;
|
|
$orderPaymentModel->id_currency = $orderModel->id_currency;
|
|
$orderPaymentModel->amount = $orderModel->total_paid;
|
|
$orderPaymentModel->payment_method = $orderModel->payment;
|
|
$orderPaymentModel->conversion_rate = $orderModel->conversion_rate;
|
|
$orderPaymentModel->transaction_id = null;
|
|
$orderPaymentModel->card_number = null;
|
|
$orderPaymentModel->card_brand = null;
|
|
$orderPaymentModel->card_expiration = null;
|
|
$orderPaymentModel->card_holder = null;
|
|
$orderPaymentModel->date_add = $order['invoice_date'] == '0000-00-00 00:00:00' ? date('Y-m-d H:i:s') : $order['invoice_date'];
|
|
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $orderPaymentModel->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $orderPaymentModel->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($orderPaymentModel->id && OrderPayment::existsInDatabase($orderPaymentModel->id, 'order_payment')) {
|
|
try {
|
|
$res = $orderPaymentModel->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
if (!$res) {
|
|
try {
|
|
$res = $orderPaymentModel->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Order Payment (ID: %1$s) cannot be saved. %2$s')), (isset($order['id_order']) && !self::isEmpty($order['id_order'])) ? Tools::safeOutput($order['id_order']) : 'No ID', $err_tmp));
|
|
} else {
|
|
self::addLog('OrderPayment', $order['id_order'], $orderPaymentModel->id);
|
|
$paymentIds[] = $orderPaymentModel->id;
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Order Payment (ID: %1$s) cannot be saved. %2$s')), (isset($order['id_order']) && !self::isEmpty($order['id_order'])) ? Tools::safeOutput($order['id_order']) : 'No ID', $error_tmp));
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
foreach ($ordersAdditionalSecond['order_payment'] as $orderPayment) {
|
|
if ($orderPayment['order_reference'] == $order['reference']) {
|
|
if ($orderPaymentModel = $this->createObjectModel('OrderPayment', $orderPayment['id_order_payment'])) {
|
|
$orderPaymentModel->order_reference = isset($orderPayment['order_reference']) ? $orderPayment['order_reference'] : $order['payment'];
|
|
$orderPaymentModel->id_currency = self::getCurrencyID($orderPayment['id_currency']);
|
|
$orderPaymentModel->amount = $orderPayment['amount'];
|
|
$orderPaymentModel->payment_method = isset($orderPayment['payment_method']) ? $orderPayment['payment_method'] : $order['payment'];
|
|
$orderPaymentModel->conversion_rate = $orderModel->conversion_rate;
|
|
$orderPaymentModel->transaction_id = $orderPayment['transaction_id'];
|
|
$orderPaymentModel->card_number = $orderPayment['card_number'];
|
|
$orderPaymentModel->card_brand = $orderPayment['card_brand'];
|
|
$orderPaymentModel->card_expiration = $orderPayment['card_expiration'];
|
|
$orderPaymentModel->card_holder = $orderPayment['card_holder'];
|
|
$orderPaymentModel->date_add = $orderPayment['date_add'];
|
|
|
|
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $orderPaymentModel->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $orderPaymentModel->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($orderPaymentModel->id && OrderPayment::existsInDatabase($orderPaymentModel->id, 'order_payment')) {
|
|
try {
|
|
$res = $orderPaymentModel->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
if (!$res) {
|
|
try {
|
|
$res = $orderPaymentModel->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Order Payment (ID: %1$s) cannot be saved. %2$s')), (isset($orderPayment['id_order_payment']) && !self::isEmpty($orderPayment['id_order_payment'])) ? Tools::safeOutput($orderPayment['id_order_payment']) : 'No ID', $err_tmp));
|
|
} else {
|
|
self::addLog('OrderPayment', $orderPayment['id_order_payment'], $orderPaymentModel->id);
|
|
$paymentIds[] = $orderPaymentModel->id;
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Order Payment (ID: %1$s) cannot be saved. %2$s')), (isset($orderPayment['id_order_payment']) && !self::isEmpty($orderPayment['id_order_payment'])) ? Tools::safeOutput($orderPayment['id_order_payment']) : 'No ID', $error_tmp));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// import Invoice
|
|
if (version_compare(Configuration::get('migrationpro_version'), '1.5', '<')) {
|
|
if ($orderInvoiceModel = $this->createObjectModel('OrderInvoice', $order['id_order'])) {
|
|
$orderInvoiceModel->id_order = $orderModel->id;
|
|
$orderInvoiceModel->number = $order['invoice_number'];
|
|
$orderInvoiceModel->delivery_number = $order['delivery_number'];
|
|
$orderInvoiceModel->delivery_date = $order['delivery_date'];
|
|
$orderInvoiceModel->total_discount_tax_excl = $orderModel->total_discounts_tax_excl;
|
|
$orderInvoiceModel->total_discount_tax_incl = $orderModel->total_discounts_tax_incl;
|
|
$orderInvoiceModel->total_paid_tax_excl = $orderModel->total_paid_tax_excl;
|
|
$orderInvoiceModel->total_paid_tax_incl = $orderModel->total_paid_tax_incl;
|
|
$orderInvoiceModel->total_products = $orderModel->total_products;
|
|
$orderInvoiceModel->total_products_wt = $orderModel->total_products_wt;
|
|
$orderInvoiceModel->total_shipping_tax_excl = $orderModel->total_shipping_tax_excl;
|
|
$orderInvoiceModel->total_shipping_tax_incl = $orderModel->total_shipping_tax_incl;
|
|
$orderInvoiceModel->shipping_tax_computation_method = 0;
|
|
$orderInvoiceModel->total_wrapping_tax_excl = $orderModel->total_wrapping_tax_excl;
|
|
$orderInvoiceModel->total_wrapping_tax_incl = $orderModel->total_wrapping_tax_incl;
|
|
$orderInvoiceModel->invoice_date = $order['invoice_date'];
|
|
$orderInvoiceModel->invoice_address = $order['id_address_invoice'];
|
|
$orderInvoiceModel->delivery_address = $order['id_address_delivery'];
|
|
$orderInvoiceModel->note = '';
|
|
$orderInvoiceModel->date_add = date('Y-m-d H:i:s');
|
|
|
|
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $orderInvoiceModel->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $orderInvoiceModel->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($orderInvoiceModel->id && OrderInvoice::existsInDatabase($orderInvoiceModel->id, 'order_invoice')) {
|
|
try {
|
|
$res = $orderInvoiceModel->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
if (!$res) {
|
|
try {
|
|
$res = $orderInvoiceModel->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Order Invoice (ID: %1$s) cannot be saved. %2$s')), (isset($order['id_order']) && !self::isEmpty($order['id_order'])) ? Tools::safeOutput($order['id_order']) : 'No ID', $err_tmp));
|
|
} else {
|
|
self::addLog('OrderInvoice', $order['id_order'], $orderInvoiceModel->id);
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Order Invoice (ID: %1$s) cannot be saved. %2$s')), (isset($order['id_order']) && !self::isEmpty($order['id_order'])) ? Tools::safeOutput($order['id_order']) : 'No ID', $error_tmp));
|
|
}
|
|
}
|
|
//import Invoice_Tax
|
|
$invoice_taxsql_values = array();
|
|
$taxId = (int)Tax::getTaxIdByName($taxName);
|
|
$invoice_taxsql_values[] = '(' . (int)$orderInvoiceModel->id . ', \'' . 'tax' . '\', ' . (int)$taxId . ', ' . (float)($orderModel->total_paid_tax_incl - $orderModel->total_paid_tax_excl) . ')';
|
|
if (!self::isEmpty($invoice_taxsql_values)) {
|
|
$result = Db::getInstance()->execute('REPLACE INTO `' . _DB_PREFIX_ . 'order_invoice_tax` (`id_order_invoice`, `type`, `id_tax`, `amount`) VALUES ' . implode(',', $invoice_taxsql_values));
|
|
if (!$result) {
|
|
$this->showMigrationMessageAndLog(self::displayError('Can\'t add order_invoice_tax. ' . Db::getInstance()->getMsgError()));
|
|
}
|
|
}
|
|
//import Invoice_Payment
|
|
$sql_values = array();
|
|
foreach ($paymentIds as $invoicePaymentId) {
|
|
$sql_values[] = '(' . (int)$orderInvoiceModel->id . ', ' . (int)$invoicePaymentId . ', ' . (int)$orderModel->id . ')';
|
|
}
|
|
if (!self::isEmpty($sql_values)) {
|
|
$result = Db::getInstance()->execute('REPLACE INTO `' . _DB_PREFIX_ . 'order_invoice_payment` (`id_order_invoice`, `id_order_payment`, `id_order`) VALUES ' . implode(',', $sql_values));
|
|
|
|
if (!$result) {
|
|
$this->showMigrationMessageAndLog(self::displayError('Can\'t add order_invoice_payment. ' . Db::getInstance()->getMsgError()));
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
foreach ($ordersAdditionalSecond['order_invoice'] as $orderInvoice) {
|
|
if ($orderInvoice['id_order'] == $order['id_order']) {
|
|
if ($orderInvoiceModel = $this->createObjectModel('OrderInvoice', $orderInvoice['id_order_invoice'])) {
|
|
$orderInvoiceModel->id_order = $orderModel->id;
|
|
$orderInvoiceModel->number = $orderModel->invoice_number;
|
|
$orderInvoiceModel->delivery_number = $orderModel->delivery_number;
|
|
$orderInvoiceModel->delivery_date = $orderModel->delivery_date;
|
|
$orderInvoiceModel->total_discount_tax_excl = $orderModel->total_discounts_tax_excl;
|
|
$orderInvoiceModel->total_discount_tax_incl = $orderModel->total_discounts_tax_incl;
|
|
$orderInvoiceModel->total_paid_tax_excl = $orderModel->total_paid_tax_excl;
|
|
$orderInvoiceModel->total_paid_tax_incl = $orderModel->total_paid_tax_incl;
|
|
$orderInvoiceModel->total_products = $orderModel->total_products;
|
|
$orderInvoiceModel->total_products_wt = $orderModel->total_products_wt;
|
|
$orderInvoiceModel->total_shipping_tax_excl = $orderModel->total_shipping_tax_excl;
|
|
$orderInvoiceModel->total_shipping_tax_incl = $orderModel->total_shipping_tax_incl;
|
|
$orderInvoiceModel->shipping_tax_computation_method = $orderInvoice['shipping_tax_computation_method'];
|
|
$orderInvoiceModel->total_wrapping_tax_excl = $orderModel->total_wrapping_tax_excl;
|
|
$orderInvoiceModel->total_wrapping_tax_incl = $orderModel->total_wrapping_tax_incl;
|
|
$orderInvoiceModel->invoice_date = $orderInvoice['invoice_date'];
|
|
$orderInvoiceModel->invoice_address = $orderInvoice['invoice_address'];
|
|
$orderInvoiceModel->delivery_address = $orderInvoice['delivery_address'];
|
|
$orderInvoiceModel->note = $orderInvoice['note'];
|
|
$orderInvoiceModel->date_add = $orderInvoice['date_add'];
|
|
|
|
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $orderInvoiceModel->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $orderInvoiceModel->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($orderInvoiceModel->id && OrderInvoice::existsInDatabase($orderInvoiceModel->id, 'order_invoice')) {
|
|
try {
|
|
$res = $orderInvoiceModel->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
if (!$res) {
|
|
try {
|
|
$res = $orderInvoiceModel->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Order Invoice (ID: %1$s) cannot be saved. %2$s')), (isset($orderInvoice['id_order_invoice']) && !self::isEmpty($orderInvoice['id_order_invoice'])) ? Tools::safeOutput($orderInvoice['id_order_invoice']) : 'No ID', $err_tmp));
|
|
} else {
|
|
self::addLog('OrderInvoice', $orderInvoice['id_order_invoice'], $orderInvoiceModel->id);
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Order Invoice (ID: %1$s) cannot be saved. %2$s')), (isset($orderInvoice['id_order_invoice']) && !self::isEmpty($orderInvoice['id_order_invoice'])) ? Tools::safeOutput($orderInvoice['id_order_invoice']) : 'No ID', $error_tmp));
|
|
}
|
|
}
|
|
//import Invoice_Tax
|
|
$sql_values = array();
|
|
foreach ($ordersAdditionalThird['invoice_tax'] as $invoiceTax) {
|
|
if ($invoiceTax['id_order_invoice'] == $orderInvoice['id_order_invoice']) {
|
|
$sql_values[] = '(' . (int)$orderInvoiceModel->id . ', "' . pSQL($invoiceTax['type']) . '", ' . self::getLocalID('tax', $invoiceTax['id_tax'], 'data') . ',' . (float)$invoiceTax['amount'] . ')';
|
|
}
|
|
}
|
|
if (!self::isEmpty($sql_values)) {
|
|
$result = Db::getInstance()->execute('REPLACE INTO `' . _DB_PREFIX_ . 'order_invoice_tax` (`id_order_invoice`, `type`, `id_tax`, `amount`) VALUES ' . implode(',', $sql_values));
|
|
if (!$result) {
|
|
$this->showMigrationMessageAndLog(self::displayError('Can\'t add order_invoice_tax. ' . Db::getInstance()->getMsgError()));
|
|
}
|
|
}
|
|
//import Invoice_Payment
|
|
$sql_values = array();
|
|
foreach ($ordersAdditionalSecond['invoice_payment'] as $invoicePayment) {
|
|
if ($invoicePayment['id_order'] == $order['id_order']) {
|
|
$sql_values[] = '(' . (int)$orderInvoiceModel->id . ', ' . self::getLocalID('orderpayment', (int)$invoicePayment['id_order_payment'], 'data') . ', ' . (int)$orderModel->id . ')';
|
|
}
|
|
}
|
|
if (!self::isEmpty($sql_values)) {
|
|
$result = Db::getInstance()->execute('REPLACE INTO `' . _DB_PREFIX_ . 'order_invoice_payment` (`id_order_invoice`, `id_order_payment`, `id_order`) VALUES ' . implode(',', $sql_values));
|
|
|
|
if (!$result) {
|
|
$this->showMigrationMessageAndLog(self::displayError('Can\'t add order_invoice_payment. ' . Db::getInstance()->getMsgError()));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// import Order Detail
|
|
foreach ($ordersAdditionalSecond['order_detail'] as $orderDetail) {
|
|
if ($orderDetail['id_order'] == $order['id_order']) {
|
|
if ($orderDetailModel = $this->createObjectModel('OrderDetail', $orderDetail['id_order_detail'])) {
|
|
$orderDetailModel->id_order = $orderModel->id;
|
|
$orderDetailModel->product_id = self::getLocalID('product', $orderDetail['product_id'], 'data');
|
|
$orderDetailModel->product_attribute_id = self::getLocalID('combination', $orderDetail['product_attribute_id'], 'data');
|
|
$orderDetailModel->product_name = $orderDetail['product_name'];
|
|
$orderDetailModel->product_quantity = $orderDetail['product_quantity'];
|
|
$orderDetailModel->product_quantity_in_stock = $orderDetail['product_quantity_in_stock'];
|
|
$orderDetailModel->product_quantity_return = $orderDetail['product_quantity_return'];
|
|
$orderDetailModel->product_quantity_refunded = $orderDetail['product_quantity_refunded'];
|
|
$orderDetailModel->product_quantity_reinjected = $orderDetail['product_quantity_reinjected'];
|
|
$orderDetailModel->product_price = $orderDetail['product_price'];
|
|
$orderDetailModel->reduction_percent = $orderDetail['reduction_percent'];
|
|
$orderDetailModel->reduction_amount = $orderDetail['reduction_amount'];
|
|
$orderDetailModel->group_reduction = $orderDetail['group_reduction'];
|
|
$orderDetailModel->product_quantity_discount = $orderDetail['product_quantity_discount'];
|
|
$orderDetailModel->product_ean13 = $orderDetail['product_ean13'];
|
|
$orderDetailModel->product_upc = $orderDetail['product_upc'];
|
|
$orderDetailModel->product_reference = $orderDetail['product_reference'];
|
|
$orderDetailModel->product_supplier_reference = $orderDetail['product_supplier_reference'];
|
|
$orderDetailModel->product_weight = $orderDetail['product_weight'];
|
|
$orderDetailModel->tax_name = $orderDetail['tax_name'];
|
|
$orderDetailModel->tax_rate = $orderDetail['tax_rate'];
|
|
$orderDetailModel->ecotax = $orderDetail['ecotax'];
|
|
$orderDetailModel->ecotax_tax_rate = $orderDetail['ecotax_tax_rate'];
|
|
$orderDetailModel->discount_quantity_applied = $orderDetail['discount_quantity_applied'];
|
|
$orderDetailModel->download_hash = $orderDetail['download_hash'];
|
|
$orderDetailModel->download_nb = $orderDetail['download_nb'];
|
|
$orderDetailModel->download_deadline = $orderDetail['download_deadline'];
|
|
|
|
$orderDetailModel->id_warehouse = (isset($orderDetail['id_warehouse']) && !self::isEmpty($orderDetail['id_warehouse'])) ? $orderDetail['id_warehouse'] : 0;
|
|
|
|
$orderDetailModel->id_shop = (isset($orderDetail['id_shop']) && !self::isEmpty($orderDetail['id_shop'])) ? self::getShopID($orderDetail['id_shop']) : Context::getContext()->shop->id;
|
|
if (version_compare(Configuration::get('migrationpro_version'), '1.5', '<')) {
|
|
$orderDetailModel->id_order_invoice = self::getLocalID('orderinvoice', $order['id_order'], 'data');
|
|
$orderDetailModel->reduction_amount_tax_incl = (float)Tools::ps_round($orderDetail['reduction_amount'], _PS_PRICE_DISPLAY_PRECISION_);
|
|
$orderDetailModel->reduction_amount_tax_excl = (float)Tools::ps_round(($orderDetail['reduction_amount'] * 100 / (100 + $orderDetail['tax_rate'])), 6);
|
|
$orderDetailModel->product_isbn = $orderDetail['product_isbn'];
|
|
$orderDetailModel->tax_computation_method = $orderDetail['tax_computation_method'];
|
|
$orderDetailModel->id_tax_rules_group = self::getLocalId('taxrulesgroup', $orderDetail['id_tax_rules_group'], 'data');
|
|
$orderDetailModel->unit_price_tax_incl = (float)Tools::ps_round((($orderDetail['product_price'] * $orderDetail['tax_rate'])/100 + $orderDetail['product_price']) - $orderDetailModel->reduction_amount_tax_incl, _PS_PRICE_DISPLAY_PRECISION_);
|
|
$orderDetailModel->unit_price_tax_excl = $orderDetail['product_price'] - $orderDetailModel->reduction_amount_tax_excl;
|
|
$orderDetailModel->total_price_tax_incl = $orderDetailModel->unit_price_tax_incl * $orderDetail['product_quantity'];
|
|
$orderDetailModel->total_price_tax_excl = $orderDetailModel->unit_price_tax_excl * $orderDetail['product_quantity'];
|
|
$orderDetailModel->total_shipping_price_tax_excl = $orderDetail['total_shipping_price_tax_excl'];
|
|
$orderDetailModel->total_shipping_price_tax_incl = $orderDetail['total_shipping_price_tax_incl'];
|
|
$orderDetailModel->purchase_supplier_price = $orderDetail['purchase_supplier_price'];
|
|
$orderDetailModel->original_product_price = $orderDetail['product_price'];
|
|
$orderDetailModel->original_wholesale_price = $orderDetail['original_wholesale_price'];
|
|
} else {
|
|
$orderDetailModel->id_order_invoice = self::getLocalID('orderinvoice', $orderDetail['id_order_invoice'], 'data');
|
|
$orderDetailModel->reduction_amount_tax_incl = $orderDetail['reduction_amount_tax_incl'];
|
|
$orderDetailModel->reduction_amount_tax_excl = $orderDetail['reduction_amount_tax_excl'];
|
|
$orderDetailModel->product_isbn = $orderDetail['product_isbn'];
|
|
$orderDetailModel->tax_computation_method = $orderDetail['tax_computation_method'];
|
|
$orderDetailModel->id_tax_rules_group = self::getLocalId('taxrulesgroup', $orderDetail['id_tax_rules_group'], 'data');
|
|
$orderDetailModel->unit_price_tax_incl = $orderDetail['unit_price_tax_incl'];
|
|
$orderDetailModel->unit_price_tax_excl = $orderDetail['unit_price_tax_excl'];
|
|
$orderDetailModel->total_price_tax_incl = $orderDetail['total_price_tax_incl'];
|
|
$orderDetailModel->total_price_tax_excl = $orderDetail['total_price_tax_excl'];
|
|
$orderDetailModel->total_shipping_price_tax_excl = $orderDetail['total_shipping_price_tax_excl'];
|
|
$orderDetailModel->total_shipping_price_tax_incl = $orderDetail['total_shipping_price_tax_incl'];
|
|
$orderDetailModel->purchase_supplier_price = $orderDetail['purchase_supplier_price'];
|
|
$orderDetailModel->original_product_price = $orderDetail['original_product_price'];
|
|
$orderDetailModel->original_wholesale_price = $orderDetail['original_wholesale_price'];
|
|
}
|
|
|
|
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $orderDetailModel->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $orderDetailModel->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($orderDetailModel->id && OrderDetail::existsInDatabase($orderDetailModel->id, 'order_detail')) {
|
|
try {
|
|
$res = $orderDetailModel->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
if (!$res) {
|
|
try {
|
|
$res = $orderDetailModel->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Order Detail (ID: %1$s) cannot be saved. %2$s')), (isset($orderDetail['id_order_detail']) && !self::isEmpty($orderDetail['id_order_detail'])) ? Tools::safeOutput($orderDetail['id_order_detail']) : 'No ID', $err_tmp));
|
|
} else {
|
|
self::addLog('OrderDetail', $orderDetail['id_order_detail'], $orderDetailModel->id);
|
|
//import Order Detail tax
|
|
if (version_compare(Configuration::get('migrationpro_version'), '1.5', '<')) {
|
|
$sql_values = array();
|
|
$sql_values[] = '(' . (int)$orderDetailModel->id . ', ' . (int)Tax::getTaxIdByName($taxName) . ', ' . (float)($orderDetailModel->unit_price_tax_incl - $orderDetailModel->unit_price_tax_excl) . ', ' . (float)($orderDetailModel->total_price_tax_incl - $orderDetailModel->total_price_tax_excl) . ')';
|
|
} else {
|
|
$sql_values = array();
|
|
foreach ($ordersAdditionalThird['order_detail_tax'] as $orderDetailTax) {
|
|
if ($orderDetailTax['id_order_detail'] == $orderDetail['id_order_detail']) {
|
|
$sql_values[] = '(' . (int)$orderDetailModel->id . ', ' . (int)self::getLocalID('tax', $orderDetailTax['id_tax'], 'data') . ', ' . (float)$orderDetailTax['unit_amount'] . ', ' . (float)$orderDetailTax['total_amount'] . ')';
|
|
}
|
|
}
|
|
}
|
|
if (!self::isEmpty($sql_values)) {
|
|
$result = Db::getInstance()->execute('REPLACE INTO `' . _DB_PREFIX_ . 'order_detail_tax` (`id_order_detail`, `id_tax`, `unit_amount`, `total_amount`) VALUES ' . implode(',', $sql_values));
|
|
|
|
if (!$result) {
|
|
$this->showMigrationMessageAndLog(self::displayError('Can\'t add order_detail_tax. ' . Db::getInstance()->getMsgError()));
|
|
}
|
|
}
|
|
|
|
if ($isMigrateRecentData) {
|
|
$productsOldQuantity = Db::getInstance()->getValue('SELECT quantity FROM ' . _DB_PREFIX_ . 'stock_available WHERE id_product = ' . $orderDetailModel->product_id . ' AND id_product_attribute = ' . $orderDetailModel->product_attribute_id . ' AND id_shop = ' . $orderDetailModel->id_shop);
|
|
$productsNewQuantityAfterOrder = $productsOldQuantity - $orderDetail['product_quantity'];
|
|
Db::getInstance()->execute('UPDATE ' . _DB_PREFIX_ . 'stock_available SET quantity = ' . (int)$productsNewQuantityAfterOrder . ' WHERE id_product = ' . (int)$orderDetailModel->product_id . ' AND id_product_attribute = ' . (int)$orderDetailModel->product_attribute_id . ' AND id_shop = ' . (int)$orderDetailModel->id_shop);
|
|
Db::getInstance()->execute('UPDATE ' . _DB_PREFIX_ . 'product SET quantity = ' . (int)$productsNewQuantityAfterOrder . ' WHERE id_product = ' . (int)$orderDetailModel->product_id);
|
|
if ($orderDetailModel->product_attribute_id != 0) {
|
|
$mainProductsCount = (int)Db::getInstance()->getValue('SELECT quantity FROM ' . _DB_PREFIX_ . 'stock_available WHERE id_product = ' . (int)$orderDetailModel->product_id . ' AND id_product_attribute = 0 AND id_shop = ' . (int)$orderDetailModel->id_shop) - (int)$orderDetail['product_quantity'];
|
|
Db::getInstance()->execute('UPDATE ' . _DB_PREFIX_ . 'stock_available SET quantity = ' . (int)$mainProductsCount . ' WHERE id_product = ' . (int)$orderDetailModel->product_id . ' AND id_product_attribute = 0 AND id_shop = ' . (int)$orderDetailModel->id_shop);
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Order Detail (ID: %1$s) cannot be saved. %2$s')), (isset($orderDetail['id_order_detail']) && !self::isEmpty($orderDetail['id_order_detail'])) ? Tools::safeOutput($orderDetail['id_order_detail']) : 'No ID', $error_tmp));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// import Order Slip
|
|
$insertIdOrderSlipDetail = 1;
|
|
foreach ($ordersAdditionalSecond['order_slip'] as $orderSlip) {
|
|
if ($orderSlip['id_order'] == $order['id_order']) {
|
|
if ($orderSlipModel = $this->createObjectModel('OrderSlip', $orderSlip['id_order_slip'])) {
|
|
if (version_compare(Configuration::get('migrationpro_version'), '1.5', '<')) {
|
|
$orderSlipModel->conversion_rate = empty($orderSlip['conversion_rate']) ? 1 : $orderSlip['conversion_rate'];
|
|
$orderSlipModel->id_customer = self::getLocalID('customer', $orderSlip['id_customer'], 'data');
|
|
$orderSlipModel->id_order = $orderModel->id;
|
|
$orderSlipModel->shipping_cost = $orderSlip['shipping_cost'];
|
|
$importedOrderSlipDetails = array();
|
|
foreach ($ordersAdditionalThird['order_slip_detail'] as $orderSlipDetails) {
|
|
if ($orderSlipDetails['id_order_slip'] == $orderSlip['id_order_slip']) {
|
|
if (in_array($orderSlipDetails['id_order_detail'], $importedOrderSlipDetails)) {
|
|
continue;
|
|
}
|
|
$orderDetailOfSlip = new OrderDetail(self::getLocalID('orderdetail', (int)$orderSlipDetails['id_order_detail'], 'data'));
|
|
// if ($orderDetailOfSlip) {
|
|
$importedOrderSlipDetails[] = $orderSlipDetails['id_order_detail'];
|
|
// }
|
|
$orderSlipModel->amount = $orderDetailOfSlip->product_price * $orderSlipDetails['product_quantity'];
|
|
$orderSlipModel->total_products_tax_excl = $orderDetailOfSlip->unit_price_tax_excl;
|
|
$orderSlipModel->total_products_tax_incl = $orderDetailOfSlip->total_price_tax_incl;
|
|
$orderSlipModel->total_shipping_tax_excl = $orderDetailOfSlip->total_shipping_price_tax_excl;
|
|
$orderSlipModel->total_shipping_tax_incl = $orderDetailOfSlip->total_shipping_price_tax_incl;
|
|
$orderSlipModel->shipping_cost_amount = $orderDetailOfSlip->total_shipping_price_tax_incl;
|
|
$orderSlipModel->partial = 0;
|
|
$orderSlipModel->order_slip_type = 0;
|
|
}
|
|
}
|
|
if (empty($orderSlipModel->total_products_tax_excl) || empty($orderSlipModel->total_products_tax_incl)) {
|
|
continue;
|
|
}
|
|
$orderSlipModel->date_add = $orderSlip['date_add'];
|
|
$orderSlipModel->date_upd = $orderSlip['date_upd'];
|
|
} else {
|
|
$orderSlipModel->conversion_rate = $orderSlip['conversion_rate'];
|
|
$orderSlipModel->id_customer = self::getLocalID('customer', $orderSlip['id_customer'], 'data');
|
|
$orderSlipModel->id_order = $orderModel->id;
|
|
$orderSlipModel->shipping_cost = $orderSlip['shipping_cost'];
|
|
$orderSlipModel->amount = $orderSlip['amount'];
|
|
$orderSlipModel->total_products_tax_excl = $orderSlip['total_products_tax_excl'];
|
|
$orderSlipModel->total_products_tax_incl = $orderSlip['total_products_tax_incl'];
|
|
$orderSlipModel->total_shipping_tax_excl = $orderSlip['total_shipping_tax_excl'];
|
|
$orderSlipModel->total_shipping_tax_incl = $orderSlip['total_shipping_tax_incl'];
|
|
$orderSlipModel->shipping_cost_amount = $orderSlip['shipping_cost_amount'];
|
|
$orderSlipModel->partial = $orderSlip['partial'];
|
|
$orderSlipModel->order_slip_type = $orderSlip['order_slip_type'];
|
|
$orderSlipModel->date_add = $orderSlip['date_add'];
|
|
$orderSlipModel->date_upd = $orderSlip['date_upd'];
|
|
}
|
|
|
|
if (empty($orderSlipModel->total_products_tax_excl)) {
|
|
$orderSlipModel->total_products_tax_excl = $orderSlipModel->amount;
|
|
}
|
|
if (empty($orderSlipModel->total_products_tax_incl)) {
|
|
$orderSlipModel->total_products_tax_incl = $orderSlipModel->amount;
|
|
}
|
|
if (empty($orderSlipModel->total_shipping_tax_excl)) {
|
|
$orderSlipModel->total_shipping_tax_excl = $orderSlipModel->shipping_cost;
|
|
}
|
|
if (empty($orderSlipModel->total_shipping_tax_incl)) {
|
|
$orderSlipModel->total_shipping_tax_incl = $orderSlipModel->shipping_cost;
|
|
}
|
|
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $orderSlipModel->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $orderSlipModel->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($orderSlipModel->id && orderSlip::existsInDatabase($orderSlipModel->id, 'order_slip')) {
|
|
try {
|
|
$res = $orderSlipModel->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
if (!$res) {
|
|
try {
|
|
$res = $orderSlipModel->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Order Slip (ID: %1$s) cannot be saved. %2$s')), (isset($orderSlip['id_order_slip']) && !self::isEmpty($orderSlip['id_order_slip'])) ? Tools::safeOutput($orderSlip['id_order_slip']) : 'No ID', $err_tmp));
|
|
} else {
|
|
self::addLog('orderSlip', $orderSlip['id_order_slip'], $orderSlipModel->id);
|
|
//import Order Slip Detail
|
|
$sql_values = array();
|
|
$importedOrderSlipDetails = array();
|
|
if (version_compare(Configuration::get('migrationpro_version'), '1.5', '<')) {
|
|
foreach ($ordersAdditionalThird['order_slip_detail'] as $invoiceSlipDetail) {
|
|
if (in_array($invoiceSlipDetail['id_order_detail'], $importedOrderSlipDetails)) {
|
|
continue;
|
|
} else {
|
|
$importedOrderSlipDetails[] = $invoiceSlipDetail['id_order_detail'];
|
|
}
|
|
$slipIdOrderDetail = self::getLocalID('orderdetail', (int)$invoiceSlipDetail['id_order_detail'], 'data');
|
|
$slipOrderDetailObj = new OrderDetail($slipIdOrderDetail);
|
|
$sql_values = array();
|
|
if ($invoiceSlipDetail['id_order_slip'] == $orderSlip['id_order_slip']) {
|
|
$sql_values[] = '(' .
|
|
$orderSlipModel->id . ', ' .
|
|
$slipOrderDetailObj->id . ', ' .
|
|
$invoiceSlipDetail['product_quantity']. ', ' .
|
|
$slipOrderDetailObj->unit_price_tax_excl . ', ' .
|
|
$slipOrderDetailObj->unit_price_tax_incl . ', ' .
|
|
$slipOrderDetailObj->total_price_tax_excl . ', ' .
|
|
$slipOrderDetailObj->total_price_tax_incl . ', ' .
|
|
$slipOrderDetailObj->total_price_tax_excl . ', ' .
|
|
$slipOrderDetailObj->total_price_tax_incl . ')';
|
|
}
|
|
if (!self::isEmpty($sql_values)) {
|
|
$dbInstance = Db::getInstance();
|
|
$result = false;
|
|
$result = $dbInstance->execute('INSERT IGNORE INTO `' . _DB_PREFIX_ . 'order_slip_detail` (
|
|
`id_order_slip`,
|
|
`id_order_detail`,
|
|
`product_quantity`,
|
|
`unit_price_tax_excl`,
|
|
`unit_price_tax_incl`,
|
|
`total_price_tax_excl`,
|
|
`total_price_tax_incl`,
|
|
`amount_tax_excl`,
|
|
`amount_tax_incl`)
|
|
VALUES ' . implode(',', $sql_values));
|
|
if (!$result) {
|
|
$this->showMigrationMessageAndLog(self::displayError('Can\'t add order_slip_detail. ' . Db::getInstance()->getMsgError()));
|
|
} else {
|
|
Db::getInstance()->execute('INSERT IGNORE INTO `' . _DB_PREFIX_ . 'order_slip_detail_tax` (id_order_slip_detail, id_tax, unit_amount, total_amount) VALUES (' .
|
|
(int)$insertIdOrderSlipDetail++ . ', ' .
|
|
empty(Tax::getTaxIdByName($slipOrderDetailObj->tax_name)) ? Tax::getTaxIdByName($slipOrderDetailObj->tax_name) : 0 . ', ' . (float)$slipOrderDetailObj->unit_price_tax_incl . ', ' . (float)$slipOrderDetailObj->total_price_tax_incl . ')');
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
$sql_values = array();
|
|
foreach ($ordersAdditionalThird['order_slip_detail'] as $invoiceSlipDetail) {
|
|
if (empty($invoiceSlipDetail['product_quantity']) || empty($invoiceSlipDetail['unit_price_tax_excl']) || empty($invoiceSlipDetail['unit_price_tax_incl']) || empty($invoiceSlipDetail['total_price_tax_excl']) || $invoiceSlipDetail['total_price_tax_incl']) {
|
|
$slipIdOrderDetail = self::getLocalID('orderdetail', (int)$invoiceSlipDetail['id_order_detail'], 'data');
|
|
$slipOrderDetailObj = new OrderDetail($slipIdOrderDetail);
|
|
$sql_values[] = '(' .
|
|
$orderSlipModel->id . ', ' .
|
|
$slipOrderDetailObj->id . ', ' .
|
|
$invoiceSlipDetail['product_quantity']. ', ' .
|
|
$slipOrderDetailObj->unit_price_tax_excl . ', ' .
|
|
$slipOrderDetailObj->unit_price_tax_incl . ', ' .
|
|
$slipOrderDetailObj->total_price_tax_excl . ', ' .
|
|
$slipOrderDetailObj->total_price_tax_incl . ', ' .
|
|
$slipOrderDetailObj->total_price_tax_excl . ', ' .
|
|
$slipOrderDetailObj->total_price_tax_incl . ')';
|
|
} else {
|
|
$sql_values[] = '(' . (int)$orderSlipModel->id . ', ' . self::getLocalID('orderDetail', $invoiceSlipDetail['id_order_detail'], 'data') . ', ' . (int)$invoiceSlipDetail['product_quantity'] . ', ' . (float)$invoiceSlipDetail['unit_price_tax_excl'] . ', ' . (float)$invoiceSlipDetail['unit_price_tax_incl'] . ', ' . (float)$invoiceSlipDetail['total_price_tax_excl'] . ', ' . (float)$invoiceSlipDetail['total_price_tax_incl'] . ', ' .
|
|
(float)$invoiceSlipDetail['amount_tax_excl'] .
|
|
', ' . (float)$invoiceSlipDetail['amount_tax_incl'] . ')';
|
|
}
|
|
}
|
|
if (!self::isEmpty($sql_values)) {
|
|
$dbInstance = Db::getInstance();
|
|
$result = false;
|
|
$result = $dbInstance->execute('INSERT IGNORE INTO `' . _DB_PREFIX_ . 'order_slip_detail` (
|
|
`id_order_slip`,
|
|
`id_order_detail`,
|
|
`product_quantity`,
|
|
`unit_price_tax_excl`,
|
|
`unit_price_tax_incl`,
|
|
`total_price_tax_excl`,
|
|
`total_price_tax_incl`,
|
|
`amount_tax_excl`,
|
|
`amount_tax_incl`)
|
|
VALUES ' . implode(',', $sql_values));
|
|
if (!$result) {
|
|
$this->showMigrationMessageAndLog(self::displayError('Can\'t add order_slip_detail. ' . Db::getInstance()->getMsgError()));
|
|
} else {
|
|
$sql_values = array();
|
|
foreach ($ordersAdditionalThird['order_slip_detail_tax'] as $invoiceSlipDetailtax) {
|
|
$sql_values[] = '(' . (int)$invoiceSlipDetailtax['id_order_slip_detail'] . ', ' . self::getLocalID('tax', $invoiceSlipDetailtax['id_tax'], 'data') . ', ' . (float)$invoiceSlipDetailtax['unit_amount'] . ', ' . (float)$invoiceSlipDetailtax['total_amount'] . ') ';
|
|
}
|
|
|
|
if (!self::isEmpty($sql_values)) {
|
|
$dbInstance = Db::getInstance();
|
|
$result = false;
|
|
$result = $dbInstance->execute('INSERT IGNORE INTO `' . _DB_PREFIX_ . 'order_slip_detail_tax` (
|
|
`id_order_slip_detail`,
|
|
`id_tax`,
|
|
`unit_amount`,
|
|
`total_amount`)
|
|
VALUES ' . implode(',', $sql_values));
|
|
}
|
|
if (!$result) {
|
|
$this->showMigrationMessageAndLog(self::displayError('Can\'t add order_slip_detail_tax. ' . Db::getInstance()->getMsgError()));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Order Slip (ID: %1$s) cannot be saved. %2$s')), (isset($orderSlip['id_order_slip']) && !self::isEmpty($orderSlip['id_order_slip'])) ? Tools::safeOutput($orderSlip['id_order_slip']) : 'No ID', $error_tmp));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// import Order History
|
|
foreach ($ordersAdditionalSecond['order_history'] as $orderHistory) {
|
|
if ($orderHistory['id_order'] == $order['id_order']) {
|
|
if ($orderHistoryModel = $this->createObjectModel('OrderHistory', $orderHistory['id_order_history'])) {
|
|
$orderHistoryModel->id_order = $orderModel->id;
|
|
$orderHistoryModel->id_order_state = self::getOrderStateID($orderHistory['id_order_state']);
|
|
$orderHistoryModel->id_customer_thread = self::getLocalID('employee', $orderHistory['id_employee'], 'data');
|
|
$orderHistoryModel->date_add = $orderHistory['date_add'];
|
|
|
|
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $orderHistoryModel->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $orderHistoryModel->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($orderHistoryModel->id && OrderHistory::existsInDatabase($orderHistoryModel->id, 'order_history')) {
|
|
try {
|
|
$res = $orderHistoryModel->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
if (!$res) {
|
|
try {
|
|
$res = $orderHistoryModel->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Order History (ID: %1$s) cannot be saved. %2$s')), (isset($orderHistory['id_order_history']) && !self::isEmpty($orderHistory['id_order_history'])) ? Tools::safeOutput($orderHistory['id_order_history']) : 'No ID', $err_tmp));
|
|
} else {
|
|
self::addLog('OrderHistory', $orderHistory['id_order_history'], $orderHistoryModel->id);
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Order History (ID: %1$s) cannot be saved. %2$s')), (isset($orderHistory['id_order_history']) && !self::isEmpty($orderHistory['id_order_history'])) ? Tools::safeOutput($orderHistory['id_order_history']) : 'No ID', $error_tmp));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// import Order Return
|
|
foreach ($ordersAdditionalSecond['order_return'] as $orderReturn) {
|
|
if ($orderReturn['id_order'] == $order['id_order']) {
|
|
if ($orderReturnModel = $this->createObjectModel('OrderReturn', $orderReturn['id_order_return'])) {
|
|
$orderReturnModel->id_order = $orderModel->id;
|
|
$orderReturnModel->id_customer = self::getLocalID('customer', $orderReturn['id_customer'], 'data');
|
|
$orderReturnModel->date_add = $orderReturn['date_add'];
|
|
|
|
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $orderReturnModel->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $orderReturnModel->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($orderReturnModel->id && OrderReturn::existsInDatabase($orderReturnModel->id, 'order_history')) {
|
|
try {
|
|
$res = $orderReturnModel->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
if (!$res) {
|
|
try {
|
|
$res = $orderReturnModel->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Order Return (ID: %1$s) cannot be saved. %2$s')), (isset($orderReturn['id_order_return']) && !self::isEmpty($orderReturn['id_order_return'])) ? Tools::safeOutput($orderReturn['id_order_return']) : 'No ID', $err_tmp));
|
|
} else {
|
|
self::addLog('OrderReturn', $orderReturn['id_order_return'], $orderReturnModel->id);
|
|
$sql_values = array();
|
|
foreach ($ordersAdditionalThird['order_return_detail'] as $orderDetailReturn) {
|
|
if ($orderDetailReturn['id_order_return'] == $orderReturn['id_order_return']) {
|
|
$sql_values[] = '(' . (int)$orderReturnModel->id . ', ' . (int)self::getLocalID('orderDetail', $orderDetailReturn['id_order_detail'], 'data') . ', ' . (int)$orderDetailReturn['id_customization'] . ', ' . (int)$orderDetailReturn['product_quantity'] . ')';
|
|
}
|
|
}
|
|
}
|
|
if (!self::isEmpty($sql_values)) {
|
|
$result = Db::getInstance()->execute('REPLACE INTO `' . _DB_PREFIX_ . 'order_return_detail` (`id_order_return`, `id_order_detail`, `id_customization`, `product_quantity`) VALUES ' . implode(',', $sql_values));
|
|
|
|
if (!$result) {
|
|
$this->showMigrationMessageAndLog(self::displayError('Can\'t add order_return_detail. ' . Db::getInstance()->getMsgError()));
|
|
}
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Order Return (ID: %1$s) cannot be saved. %2$s')), (isset($orderReturn['id_order_return']) && !self::isEmpty($orderReturn['id_order_return'])) ? Tools::safeOutput($orderReturn['id_order_return']) : 'No ID', $error_tmp));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// import Order Carrier
|
|
if (version_compare(Configuration::get('migrationpro_version'), '1.5', '<')) {
|
|
if ($orderCarrierModel = $this->createObjectModel('OrderCarrier', $order['id_order'])) {
|
|
$orderCarrierModel->id_order = $orderModel->id;
|
|
$orderCarrierModel->id_carrier = self::getLocalID('carrier', $order['id_carrier'], 'data');
|
|
$orderCarrierModel->id_order_invoice = self::getLocalID('orderInvoice', $order['id_order'], 'data');
|
|
// $orderCarrierModel->weight = $orderCarrier['weight'];
|
|
$orderCarrierModel->shipping_cost_tax_excl = $orderModel->total_shipping_tax_excl;
|
|
$orderCarrierModel->shipping_cost_tax_incl = $orderModel->total_shipping_tax_incl;
|
|
$orderCarrierModel->tracking_number = $orderModel->shipping_number;
|
|
$orderCarrierModel->date_add = $order['date_add'];
|
|
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $orderCarrierModel->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $orderCarrierModel->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($orderCarrierModel->id && OrderCarrier::existsInDatabase($orderCarrierModel->id, 'order_carrier')) {
|
|
try {
|
|
$res = $orderCarrierModel->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
if (!$res) {
|
|
try {
|
|
$res = $orderCarrierModel->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Carrier of Order (ID: %1$s) cannot be saved. %2$s')), (isset($order['id_order']) && !self::isEmpty($order['id_order'])) ? Tools::safeOutput($order['id_order']) : 'No ID', $err_tmp));
|
|
} else {
|
|
self::addLog('OrderCarrier', $order['id_order'], $orderCarrierModel->id);
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Carrier of Order (ID: %1$s) cannot be saved. %2$s')), (isset($order['id_order']) && !self::isEmpty($order['id_order'])) ? Tools::safeOutput($order['id_order']) : 'No ID', $error_tmp));
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
foreach ($ordersAdditionalSecond['order_carrier'] as $orderCarrier) {
|
|
if ($orderCarrier['id_order'] == $order['id_order']) {
|
|
if ($orderCarrierModel = $this->createObjectModel('OrderCarrier', $orderCarrier['id_order_carrier'])) {
|
|
$orderCarrierModel->id_order = $orderModel->id;
|
|
$orderCarrierModel->id_carrier = self::getLocalID('carrier', $orderCarrier['id_carrier'], 'data');
|
|
$orderCarrierModel->id_order_invoice = self::getLocalID('orderInvoice', $orderCarrier['id_order_invoice'], 'data');
|
|
$orderCarrierModel->weight = $orderCarrier['weight'];
|
|
$orderCarrierModel->shipping_cost_tax_excl = $orderCarrier['shipping_cost_tax_excl'];
|
|
$orderCarrierModel->shipping_cost_tax_incl = $orderCarrier['shipping_cost_tax_incl'];
|
|
$orderCarrierModel->tracking_number = $orderCarrier['tracking_number'];
|
|
$orderCarrierModel->date_add = $orderCarrier['date_add'];
|
|
|
|
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $orderCarrierModel->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $orderCarrierModel->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($orderCarrierModel->id && OrderCarrier::existsInDatabase($orderCarrierModel->id, 'order_carrier')) {
|
|
try {
|
|
$res = $orderCarrierModel->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
if (!$res) {
|
|
try {
|
|
$res = $orderCarrierModel->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Order Carrier (ID: %1$s) cannot be saved. %2$s')), (isset($orderCarrier['id_order_carrier']) && !self::isEmpty($orderCarrier['id_order_carrier'])) ? Tools::safeOutput($orderCarrier['id_order_carrier']) : 'No ID', $err_tmp));
|
|
} else {
|
|
self::addLog('OrderCarrier', $orderCarrier['id_order_carrier'], $orderCarrierModel->id);
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Order Carrier (ID: %1$s) cannot be saved. %2$s')), (isset($orderCarrier['id_order_carrier']) && !self::isEmpty($orderCarrier['id_order_carrier'])) ? Tools::safeOutput($orderCarrier['id_order_carrier']) : 'No ID', $error_tmp));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// import Order Cart Rule
|
|
foreach ($ordersAdditionalSecond['order_cart_rule'] as $orderCartRule) {
|
|
if ($orderCartRule['id_order'] == $order['id_order']) {
|
|
if (version_compare(Configuration::get('migrationpro_version'), '1.5', '<')) {
|
|
$orderCartRuleId = 'id_order_discount';
|
|
} else {
|
|
$orderCartRuleId = 'id_order_cart_rule';
|
|
}
|
|
if ($orderCartRuleModel = $this->createObjectModel('OrderCartRule', $orderCartRule[$orderCartRuleId])) {
|
|
$orderCartRuleModel->id_order = $orderModel->id;
|
|
$orderCartRuleModel->name = $orderCartRule['name'];
|
|
if (version_compare(Configuration::get('migrationpro_version'), '1.5', '<')) {
|
|
$orderCartRuleModel->id_cart_rule = self::getLocalID('cartRule', $orderCartRule['id_discount'], 'data');
|
|
$orderCartRuleModel->id_order_invoice = self::getLocalID('orderInvoice', $orderCartRule['id_order'], 'data');
|
|
$orderCartRuleModel->free_shipping = 0;
|
|
$orderCartRuleModel->value = $orderModel->total_discounts_tax_incl;
|
|
$orderCartRuleModel->value_tax_excl = $orderModel->total_discounts_tax_excl;
|
|
} else {
|
|
$orderCartRuleModel->id_cart_rule = self::getLocalID('cartRule', $orderCartRule['id_cart_rule'], 'data');
|
|
$orderCartRuleModel->id_order_invoice = self::getLocalID('orderInvoice', $orderCartRule['id_order_invoice'], 'data');
|
|
$orderCartRuleModel->free_shipping = $orderCartRule['free_shipping'];
|
|
$orderCartRuleModel->value = $orderCartRule['value'];
|
|
$orderCartRuleModel->value_tax_excl = $orderCartRule['value_tax_excl'];
|
|
}
|
|
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $orderCartRuleModel->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $orderCartRuleModel->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($orderCartRuleModel->id && OrderCartRule::existsInDatabase($orderCartRuleModel->id, 'order_cart_rule')) {
|
|
try {
|
|
$res = $orderCartRuleModel->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
if (!$res) {
|
|
try {
|
|
$res = $orderCartRuleModel->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Order Cart Rule (ID: %1$s) cannot be saved. %2$s')), (isset($orderCartRule[$orderCartRuleId]) && !self::isEmpty($orderCartRule[$orderCartRuleId])) ? Tools::safeOutput($orderCartRule[$orderCartRuleId]) : 'No ID', $err_tmp));
|
|
} else {
|
|
self::addLog('OrderCartRule', $orderCartRule[$orderCartRuleId], $orderCartRuleModel->id);
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Order Cart Rule (ID: %1$s) cannot be saved. %2$s')), (isset($orderCartRule[$orderCartRuleId]) && !self::isEmpty($orderCartRule[$orderCartRuleId])) ? Tools::safeOutput($orderCartRule[$orderCartRuleId]) : 'No ID', $error_tmp));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// import Address
|
|
foreach ($ordersAdditionalSecond['address'] as $address) {
|
|
if ($address['id_address'] == $order['id_address_delivery']) {
|
|
if ($addressModel = $this->createObjectModel('Address', $address['id_address'])) {
|
|
$addressModel->id_customer = self::getLocalId('customer', $address['id_customer'], 'data');
|
|
$addressModel->id_manufacturer = self::getLocalId('manufacturer', $address['id_manufacturer'], 'data');
|
|
$addressModel->id_supplier = self::getLocalId('supplier', $address['id_supplier'], 'data');
|
|
$addressModel->id_country = self::getLocalId('country', $address['id_country'], 'data');
|
|
$addressModel->id_state = self::getLocalId('state', $address['id_state'], 'data');
|
|
$addressModel->alias = $address['alias'];
|
|
$addressModel->company = $address['company'];
|
|
$addressModel->lastname = $address['lastname'];
|
|
$addressModel->firstname = $address['firstname'];
|
|
$addressModel->vat_number = $address['vat_number'];
|
|
$addressModel->address1 = $address['address1'];
|
|
$addressModel->address2 = $address['address2'];
|
|
$addressModel->postcode = $address['postcode'];
|
|
$addressModel->city = $address['city'];
|
|
$addressModel->other = $address['other'];
|
|
$addressModel->phone = $address['phone'];
|
|
$addressModel->phone_mobile = $address['phone_mobile'];
|
|
$addressModel->dni = $address['dni'];
|
|
$addressModel->deleted = $address['deleted'];
|
|
$addressModel->date_add = $address['date_add'] == '0000-00-00 00:00:00' ? date('Y-m-d H:i:s') : $address['date_add'];
|
|
$addressModel->date_upd = $address['date_upd'] == '0000-00-00 00:00:00' ? date('Y-m-d H:i:s') : $address['date_upd'];
|
|
$addressModel->id_warehouse = $address['id_warehouse'];
|
|
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $addressModel->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $addressModel->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($addressModel->id && Address::existsInDatabase($addressModel->id, 'address')) {
|
|
try {
|
|
$res = $addressModel->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
if (!$res) {
|
|
try {
|
|
$res = $addressModel->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Address (ID: %1$s) cannot be saved. %2$s')), (isset($address['id_address']) && !self::isEmpty($address['id_address'])) ? Tools::safeOutput($address['id_address']) : 'No ID', $err_tmp));
|
|
} else {
|
|
// import country
|
|
foreach ($ordersAdditionalThird['country'] as $country) {
|
|
if ($country['id_country'] == $address['id_country']) {
|
|
if ($countryModel = $this->createObjectModel('Country', $country['id_country'])) {
|
|
$countryModel->id_zone = $country['id_zone'];
|
|
$countryModel->id_currency = self::getCurrencyID($country['id_currency']);
|
|
$countryModel->call_prefix = $country['call_prefix'];
|
|
$countryModel->iso_code = $country['iso_code'];
|
|
$countryModel->active = $country['active'];
|
|
$countryModel->contains_states = $country['contains_states'];
|
|
$countryModel->need_identification_number = $country['need_identification_number'];
|
|
$countryModel->need_zip_code = $country['need_zip_code'];
|
|
$countryModel->zip_code_format = $country['zip_code_format'];
|
|
$countryModel->display_tax_label = (isset($country['display_tax_label'])) ? (bool)$country['display_tax_label'] : true;
|
|
|
|
// Add to _shop relations
|
|
$countriesShopsRelations = $this->getChangedIdShop($ordersAdditionalThird['country_shop'], 'id_country');
|
|
if (array_key_exists($country['id_country'], $countriesShopsRelations)) {
|
|
$countryModel->id_shop_list = array_values($countriesShopsRelations[$country['id_country']]);
|
|
}
|
|
|
|
|
|
//language fields
|
|
foreach ($ordersAdditionalThird['country_lang'] as $lang) {
|
|
if ($lang['id_country'] == $country['id_country']) {
|
|
$lang['id_lang'] = self::getLanguageID($lang['id_lang']);
|
|
$countryModel->name[$lang['id_lang']] = $lang['name'];
|
|
}
|
|
}
|
|
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $countryModel->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $countryModel->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($countryModel->id && Country::existsInDatabase($countryModel->id, 'country')) {
|
|
try {
|
|
$res = $countryModel->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
if (!$res) {
|
|
try {
|
|
$res = $countryModel->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Country (ID: %1$s) cannot be saved. %2$s')), (isset($country['id_country']) && !self::isEmpty($country['id_country'])) ? Tools::safeOutput($country['id_country']) : 'No ID', $err_tmp));
|
|
} else {
|
|
self::addLog('Country', $country['id_country'], $countryModel->id);
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Country (ID: %1$s) cannot be saved. %2$s')), (isset($country['id_country']) && !self::isEmpty($country['id_country'])) ? Tools::safeOutput($country['id_country']) : 'No ID', $error_tmp));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// import State
|
|
foreach ($ordersAdditionalThird['state'] as $state) {
|
|
if ($state['id_state'] == $address['id_state']) {
|
|
if ($stateModel = $this->createObjectModel('State', $state['id_state'])) {
|
|
$stateModel->id_country = self::getLocalId('country', $state['id_country'], 'data');
|
|
$stateModel->id_zone = $state['id_zone'];
|
|
$stateModel->iso_code = $state['iso_code'];
|
|
$stateModel->active = $state['active'];
|
|
$stateModel->name = $state['name'];
|
|
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $stateModel->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $stateModel->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($stateModel->id && State::existsInDatabase($stateModel->id, 'state')) {
|
|
try {
|
|
$res = $stateModel->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
if (!$res) {
|
|
try {
|
|
$res = $stateModel->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('State (ID: %1$s) cannot be saved. %2$s')), (isset($state['id_state']) && !self::isEmpty($state['id_state'])) ? Tools::safeOutput($state['id_state']) : 'No ID', $err_tmp));
|
|
} else {
|
|
self::addLog('State', $state['id_state'], $stateModel->id);
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('State (ID: %1$s) cannot be saved. %2$s')), (isset($state['id_state']) && !self::isEmpty($state['id_state'])) ? Tools::safeOutput($state['id_state']) : 'No ID', $error_tmp));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (count($this->error_msg) == 0) {
|
|
self::addLog('Address', $address['id_address'], $addressModel->id);
|
|
}
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Address (ID: %1$s) cannot be saved. %2$s')), (isset($address['id_address']) && !self::isEmpty($address['id_address'])) ? Tools::safeOutput($address['id_address']) : 'No ID', $error_tmp));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
foreach ($ordersAdditionalSecond['message'] as $message) {
|
|
if ($message['id_order'] == $order['id_order']) {
|
|
if ($messageObject = $this->createObjectModel('Message', $message['id_message'])) {
|
|
$messageObject->id_cart = self::getLocalID('cart', $message['id_cart'], 'data');
|
|
$messageObject->id_customer = self::getLocalID('customer', $message['id_customer'], 'data');
|
|
$messageObject->id_employee = self::getLocalID('employee', $message['id_employee'], 'data');
|
|
$messageObject->id_order = $orderModel->id;
|
|
$messageObject->message = $message['message'];
|
|
$messageObject->private = $message['private'];
|
|
$messageObject->date_add = $message['date_add'];
|
|
if (self::isEmpty($message['date_add']) || $message['date_add'] == '0000-00-00 00:00:00') {
|
|
$messageObject->date_add = date('Y-m-d H:i:s');
|
|
}
|
|
|
|
if (empty($messageObject->message)) {
|
|
$this->showMigrationMessageAndLog('Message with ID ' . $message['id_message'] . ' has not a message text and it is not allowed in PrestaShop. For that reason, the module skipped this unvalid message.', true);
|
|
continue;
|
|
}
|
|
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $messageObject->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $messageObject->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($messageObject->id && Address::existsInDatabase($messageObject->id, 'message')) {
|
|
try {
|
|
$res = $messageObject->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
if (!$res) {
|
|
try {
|
|
$res = $messageObject->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Message (ID: %1$s) cannot be saved. %2$s')), (isset($message['id_address']) && !self::isEmpty($message['id_address'])) ? Tools::safeOutput($message['id_address']) : 'No ID', $err_tmp));
|
|
} else {
|
|
//import Message Readed
|
|
$sql_values = array();
|
|
foreach ($ordersAdditionalThird as $messageReaded) {
|
|
if ($messageReaded['id_message'] == $message['id_message']) {
|
|
$sql_values[] = '(' . (int)$messageObject->id . ', ' . (int)self::getLocalID('employee', $messageReaded['id_employee'], 'data') . ', ' . pSQL($messageReaded['date_add']) . ')';
|
|
}
|
|
}
|
|
if (!self::isEmpty($sql_values)) {
|
|
$result = Db::getInstance()->execute('REPLACE INTO `' . _DB_PREFIX_ . 'ps_message_readed` (`id_message`, `id_employee`, `date_add`) VALUES ' . implode(',', $sql_values));
|
|
|
|
if (!$result) {
|
|
$this->showMigrationMessageAndLog(self::displayError('Can\'t add message_readed. ' . Db::getInstance()->getMsgError()));
|
|
}
|
|
}
|
|
self::addLog('Message', $message['id_message'], $messageObject->id);
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Message (ID: %1$s) cannot be saved. %2$s')), (isset($message['id_address']) && !self::isEmpty($message['id_address'])) ? Tools::safeOutput($message['id_address']) : 'No ID', $error_tmp));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (count($this->error_msg) == 0) {
|
|
self::addLog('Order', $order['id_order'], $orderModel->id);
|
|
}
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Order (ID: %1$s) cannot be saved. %2$s')), (isset($order['id_order']) && !self::isEmpty($order['id_order'])) ? Tools::safeOutput($order['id_order']) : 'No ID', $error_tmp));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Import Order Messages
|
|
foreach ($ordersAdditionalSecond['order_message'] as $orderMessage) {
|
|
if ($orderMessageModel = $this->createObjectModel('OrderMessage', $orderMessage['id_order_message'])) {
|
|
$orderMessageModel->date_add = $orderMessage['date_add'];
|
|
foreach ($ordersAdditionalThird['order_message_lang'] as $lang) {
|
|
if ($lang['id_order_message'] == $orderMessage['id_order_message']) {
|
|
$lang['id_lang'] = self::getLanguageID($lang['id_lang']);
|
|
$orderMessageModel->name[$lang['id_lang']] = $lang['name'];
|
|
$orderMessageModel->message[$lang['id_lang']] = $lang['message'];
|
|
}
|
|
}
|
|
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $orderMessageModel->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $orderMessageModel->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($orderMessageModel->id && OrderMessage::existsInDatabase($orderMessageModel->id, 'order_message')) {
|
|
try {
|
|
$res = $orderMessageModel->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
if (!$res) {
|
|
try {
|
|
$res = $orderMessageModel->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Order Message (ID: %1$s) cannot be saved. %2$s')), (isset($orderMessage['id_order_message']) && !self::isEmpty($orderMessage['id_order_message'])) ? Tools::safeOutput($orderMessage['id_order_message']) : 'No ID', $err_tmp));
|
|
} else {
|
|
self::addLog('OrderMessage', $orderMessage['id_order_message'], $orderMessageModel->id);
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Order Message (ID: %1$s) cannot be saved. %2$s')), (isset($orderMessage['id_order_message']) && !self::isEmpty($orderMessage['id_order_message'])) ? Tools::safeOutput($orderMessage['id_order_message']) : 'No ID', $error_tmp));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
$this->updateProcess(count($orders));
|
|
}
|
|
|
|
/**
|
|
* @param $customerMessages
|
|
* @param $customerThreads
|
|
*/
|
|
public function customerMessages($customerThreads, $customerMessages)
|
|
{
|
|
// Import Customer Threads
|
|
foreach ($customerThreads as $customerThread) {
|
|
// if ($order['id_order'] == $customerThread['id_order']) {
|
|
// if (version_compare($this->version, '1.6', '<')) {
|
|
// $objId = $customerThread['id_order'];
|
|
// } else {
|
|
$objId = $customerThread['id_customer_thread'];
|
|
// }
|
|
$id_customer= self::getLocalID('customer', $customerThread['id_customer'], 'data');
|
|
// $customer= new Customer($id_customer);
|
|
if ($customerThreadObject = $this->createObjectModel('CustomerThread', $objId)) {
|
|
if (version_compare($this->version, '1.6', '<')) {
|
|
$customerThreadObject->id_shop = Configuration::get('PS_SHOP_DEFAULT');
|
|
$customerThreadObject->id_lang = Configuration::get('PS_LANG_DEFAULT');
|
|
$customerThreadObject->id_contact = 0;
|
|
$customerThreadObject->id_customer = $id_customer;
|
|
$customerThreadObject->id_order = self::getLocalID('order', $customerThread['id_order'], 'data');
|
|
$customerThreadObject->id_product = self::getLocalID('product', $customerThread['id_product'], 'data');
|
|
// $customerThreadObject->status = $customer->active;
|
|
$customerThreadObject->status = $customerThread['status'];
|
|
// $customerThreadObject->email = $customer->email;
|
|
$customerThreadObject->email = $customerThread['email'];
|
|
// $customerThreadObject->token = md5($customerThread['id_message']);
|
|
$customerThreadObject->token = $customerThread['token'];
|
|
$customerThreadObject->date_add = $customerThread['date_add'];
|
|
$customerThreadObject->date_upd = $customerThread['date_upd'];
|
|
} else {
|
|
$customerThreadObject->id_shop = self::getShopID($customerThread['id_shop']);
|
|
$customerThreadObject->id_lang = self::getLanguageID($customerThread['id_lang']);
|
|
$customerThreadObject->id_contact = $customerThread['id_contact'];
|
|
$customerThreadObject->id_customer = $id_customer;
|
|
$customerThreadObject->id_order = self::getLocalID('order', $customerThread['id_order'], 'data');
|
|
$customerThreadObject->id_product = self::getLocalID('product', $customerThread['id_product'], 'data');
|
|
$customerThreadObject->status = $customerThread['status'];
|
|
$customerThreadObject->email = $customerThread['email'];
|
|
$customerThreadObject->token = $customerThread['token'];
|
|
$customerThreadObject->date_add = $customerThread['date_add'];
|
|
$customerThreadObject->date_upd = $customerThread['date_upd'];
|
|
}
|
|
|
|
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $customerThreadObject->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $customerThreadObject->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($customerThreadObject->id && CustomerThread::existsInDatabase($customerThreadObject->id, 'customer_thread')) {
|
|
try {
|
|
$res = $customerThreadObject->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
if (!$res) {
|
|
try {
|
|
$res = $customerThreadObject->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Customer Thread (ID: %1$s) cannot be saved. %2$s')), (isset($objId) && !self::isEmpty($objId)) ? Tools::safeOutput($objId) : 'No ID', $err_tmp));
|
|
} else {
|
|
foreach ($customerMessages as $customerMessage) {
|
|
// if (version_compare($this->version, '1.6', '<')) {
|
|
// $key = 'id_order';
|
|
// $objId= $customerMessage['id_message'];
|
|
// } else {
|
|
$key = 'id_customer_thread';
|
|
$msgObjId = $customerMessage['id_customer_message'];
|
|
// }
|
|
if ($customerMessage[$key] == $customerThread[$key]) {
|
|
if ($customerMessageObject = $this->createObjectModel('CustomerMessage', $msgObjId)) {
|
|
if (version_compare($this->version, '1.6', '<')) {
|
|
$customerMessageObject->id_customer_thread = $customerThreadObject->id;
|
|
$customerMessageObject->id_employee = self::getLocalID('employee', $customerMessage['id_employee'], 'data');
|
|
$customerMessageObject->message = html_entity_decode($customerMessage['message']) ?: Tools::htmlentitiesDecodeUTF8($customerMessage['message']);
|
|
$customerMessageObject->file_name = $customerMessage['file_name'];
|
|
$customerMessageObject->ip_address = $customerMessage['ip_address'];
|
|
$customerMessageObject->user_agent = $customerMessage['user_agent'];
|
|
$customerMessageObject->date_add = $customerMessage['date_add'];
|
|
if (self::isEmpty($customerMessage['date_upd']) || $customerMessage['date_upd'] == '0000-00-00 00:00:00') {
|
|
$customerMessageObject->date_upd = date('Y-m-d H:i:s');
|
|
} else {
|
|
$customerMessageObject->date_upd = $customerMessage['date_upd'];
|
|
}
|
|
$customerMessageObject->private = $customerMessage['private'];
|
|
} else {
|
|
$customerMessageObject->id_customer_thread = $customerThreadObject->id;
|
|
$customerMessageObject->id_employee = self::getLocalID('employee', $customerMessage['id_employee'], 'data');
|
|
$customerMessageObject->message = $customerMessage['message'];
|
|
$customerMessageObject->file_name = $customerMessage['file_name'];
|
|
$customerMessageObject->ip_address = $customerMessage['ip_address'];
|
|
$customerMessageObject->user_agent = $customerMessage['user_agent'];
|
|
$customerMessageObject->date_add = $customerMessage['date_add'];
|
|
if (self::isEmpty($customerMessage['date_upd']) || $customerMessage['date_upd'] == '0000-00-00 00:00:00') {
|
|
$customerMessageObject->date_upd = date('Y-m-d H:i:s');
|
|
} else {
|
|
$customerMessageObject->date_upd = $customerMessage['date_upd'];
|
|
}
|
|
}
|
|
|
|
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $customerMessageObject->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $customerMessageObject->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($customerMessageObject->id && Address::existsInDatabase($customerMessageObject->id, 'customer_message')) {
|
|
try {
|
|
$res = $customerMessageObject->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
if (!$res) {
|
|
try {
|
|
$res = $customerMessageObject->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Customer message (ID: %1$s) cannot be saved. %2$s')), (isset($objId) && !self::isEmpty($objId)) ? Tools::safeOutput($objId) : 'No ID', $err_tmp));
|
|
} else {
|
|
self::addLog('CustomerMessage', $msgObjId, $customerMessageObject->id);
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Customer message (ID: %1$s) cannot be saved. %2$s')), (isset($objId) && !self::isEmpty($objId)) ? Tools::safeOutput($objId) : 'No ID', $error_tmp));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (count($this->error_msg) == 0) {
|
|
self::addLog('CustomerThread', $objId, $customerThreadObject->id);
|
|
}
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Customer Thread (ID: %1$s) cannot be saved. %2$s')), (isset($objId) && !self::isEmpty($objId)) ? Tools::safeOutput($objId) : 'No ID', $error_tmp));
|
|
}
|
|
}
|
|
}
|
|
// }
|
|
}
|
|
|
|
$this->updateProcess(count($customerThreads));
|
|
}
|
|
|
|
/**
|
|
* @param $cmses
|
|
* @param $cmsAdditionalSecond
|
|
* @param $cmsAdditionalThird
|
|
*/
|
|
public function cmses($cmses, $cmsAdditionalSecond, $cmsAdditionalThird)
|
|
{
|
|
// Import CMS Category
|
|
foreach ($cmsAdditionalSecond['cms_category'] as $cmsCategory) {
|
|
if ($cmsCategoryModel = $this->createObjectModel('CMSCategory', $cmsCategory['id_cms_category'])) {
|
|
$cmsCategoryModel->id_parent = self::getLocalID('cmscategory', $cmsCategory['id_parent'], 'data');
|
|
if (self::isEmpty($cmsCategoryModel->id_parent)) {
|
|
$cmsCategoryModel->id_parent = 0;
|
|
}
|
|
$cmsCategoryModel->active = $cmsCategory['active'];
|
|
$cmsCategoryModel->date_add = $cmsCategory['date_add'];
|
|
$cmsCategoryModel->date_upd = $cmsCategory['date_upd'];
|
|
|
|
|
|
foreach ($cmsAdditionalThird['cms_category_lang'] as $lang) {
|
|
if ($lang['id_cms_category'] == $cmsCategory['id_cms_category']) {
|
|
$lang['id_lang'] = self::getLanguageID($lang['id_lang']);
|
|
$cmsCategoryModel->name[$lang['id_lang']] = $lang['name'];
|
|
$cmsCategoryModel->description[$lang['id_lang']] = $lang['description'];
|
|
$cmsCategoryModel->meta_title[$lang['id_lang']] = $lang['meta_title'];
|
|
$cmsCategoryModel->meta_keywords[$lang['id_lang']] = $lang['meta_keywords'];
|
|
$cmsCategoryModel->meta_description[$lang['id_lang']] = $lang['meta_description'];
|
|
$cmsCategoryModel->link_rewrite[$lang['id_lang']] = $lang['link_rewrite'];
|
|
|
|
if (isset($cmsCategoryModel->link_rewrite[$lang['id_lang']]) && !self::isEmpty($cmsCategoryModel->link_rewrite[$lang['id_lang']])) {
|
|
$valid_link = Validate::isLinkRewrite($cmsCategoryModel->link_rewrite[$lang['id_lang']]);
|
|
} else {
|
|
$valid_link = false;
|
|
}
|
|
if (!$valid_link) {
|
|
$cmsCategoryModel->link_rewrite[$lang['id_lang']] = Tools::link_rewrite($cmsCategoryModel->name[$lang['id_lang']]);
|
|
|
|
if ($cmsCategoryModel->link_rewrite[$lang['id_lang']] == '') {
|
|
$cmsCategoryModel->link_rewrite[$lang['id_lang']] = 'friendly-url-autogeneration-failed';
|
|
$this->warning_msg[] = sprintf(self::displayError($this->module->l('URL rewriting failed to auto-generate a friendly URL for: %s')), $cmsCategoryModel->name[$lang['id_lang']]);
|
|
}
|
|
|
|
$this->warning_msg[] = sprintf(self::displayError($this->module->l('The link for %1$s (ID: %2$s) was re-written as %3$s.')), $lang['link_rewrite'], (isset($cmsCategory['id_cms_category']) && !self::isEmpty($cmsCategory['id_cms_category'])) ? $cmsCategory['id_cms_category'] : 'null', $cmsCategoryModel->link_rewrite[$lang['id_lang']]);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Add to _shop relations
|
|
if (self::isEmpty($cmsAdditionalThird['cms_category_shop'])) {
|
|
$cmsCategoryModel->id_shop_list = array((int)Configuration::get('PS_SHOP_DEFAULT'));
|
|
} else {
|
|
$cmsCategorysShopsRelations = $this->getChangedIdShop($cmsAdditionalThird['cms_category_shop'], 'id_cms_category');
|
|
if (array_key_exists($cmsCategory['id_cms_category'], $cmsCategorysShopsRelations)) {
|
|
$cmsCategoryModel->id_shop_list = array_values($cmsCategorysShopsRelations[$cmsCategory['id_cms_category']]);
|
|
}
|
|
}
|
|
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $cmsCategoryModel->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $cmsCategoryModel->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($cmsCategoryModel->id && CMSCategory::existsInDatabase($cmsCategoryModel->id, 'cms_category')) {
|
|
try {
|
|
$res = $cmsCategoryModel->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
if (!$res) {
|
|
try {
|
|
$res = $cmsCategoryModel->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('CMS Category(ID: %1$s) cannot be saved. %2$s')), (isset($cmsCategory['id_cms_category']) && !self::isEmpty($cmsCategory['id_cms_category'])) ? Tools::safeOutput($cmsCategory['id_cms_category']) : 'No ID', $err_tmp));
|
|
} else {
|
|
// Import CMS Block
|
|
if (version_compare(_PS_VERSION_, '1.7.0.0', '<')) {
|
|
foreach ($cmsAdditionalSecond['cms_block'] as $cmsBlock) {
|
|
$sql_value = '';
|
|
if ($cmsBlock['id_cms_category'] == $cmsCategory['id_cms_category']) {
|
|
$sql_value = '(' . (int)$cmsCategoryModel->id . ', ' . pSQL($cmsBlock['location']) . ', ' . (int)$cmsBlock['position'] . ', ' . pSQL($cmsBlock['display_store']) . ')';
|
|
}
|
|
if (!self::isEmpty($sql_value)) {
|
|
$result = Db::getInstance()->execute('REPLACE INTO `' . _DB_PREFIX_ . 'cms_block` (`id_cms_category`, `location`,
|
|
`position`, `display_store`)
|
|
VALUES ' . $sql_value);
|
|
if (!$result) {
|
|
$this->showMigrationMessageAndLog(self::displayError('Can\'t add cms_block. ' . Db::getInstance()->getMsgError()));
|
|
} else {
|
|
$id_cms_block = Db::getInstance()->Insert_ID();
|
|
|
|
// Import CMS Block Lang
|
|
foreach ($cmsAdditionalThird['cms_block_lang'] as $cmsBlockLang) {
|
|
$sql_value = '';
|
|
if ($cmsBlockLang['id_cms_block'] == $cmsBlock['id_cms_block']) {
|
|
$sql_value = '(' . (int)$id_cms_block . ', ' . self::getLanguageID($cmsBlockLang['id_lang']) . ', \'' . pSQL($cmsBlockLang['name']) . '\')';
|
|
}
|
|
if (!self::isEmpty($sql_value)) {
|
|
$result = Db::getInstance()->execute('REPLACE INTO `' . _DB_PREFIX_ . 'cms_block_lang` (`id_cms_block`, `id_lang`, `name`)
|
|
VALUES ' . $sql_value);
|
|
if (!$result) {
|
|
$this->showMigrationMessageAndLog(self::displayError('Can\'t add cms_block_lang. ' . Db::getInstance()->getMsgError()));
|
|
}
|
|
}
|
|
}
|
|
|
|
// Import CMS Block Shop
|
|
foreach ($cmsAdditionalThird['cms_block_shop'] as $cmsBlockShop) {
|
|
$sql_value = '';
|
|
if ($cmsBlockShop['id_cms_block'] == $cmsBlock['id_cms_block']) {
|
|
$sql_value = '(' . (int)$id_cms_block . ', ' . self::getShopID($cmsBlockShop['id_shop']) . ')';
|
|
}
|
|
if (!self::isEmpty($sql_value)) {
|
|
$result = Db::getInstance()->execute('REPLACE INTO `' . _DB_PREFIX_ . 'cms_block_shop` (`id_cms_block`, `id_shop`)
|
|
VALUES ' . $sql_value);
|
|
if (!$result) {
|
|
$this->showMigrationMessageAndLog(self::displayError('Can\'t add cms_block_shop. ' . Db::getInstance()->getMsgError()));
|
|
}
|
|
}
|
|
}
|
|
self::addLog('CMSBLOCK', $cmsBlock['id_cms_block'], $id_cms_block);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (count($this->error_msg) == 0) {
|
|
self::addLog('CMSCategory', $cmsCategory['id_cms_category'], $cmsCategoryModel->id);
|
|
|
|
//update multistore language fields
|
|
if (!version_compare($this->version, '1.6', '<')) {
|
|
if (MigrationProMapping::getMapTypeCount('multi_shops') > 1) {
|
|
foreach ($cmsAdditionalThird['cms_category_lang'] as $lang) {
|
|
if ($lang['id_cms_category'] == $cmsCategory['id_cms_category']) {
|
|
$lang['id_shop'] = self::getShopID($lang['id_shop']);
|
|
$lang['id_lang'] = self::getLanguageID($lang['id_lang']);
|
|
$lang['id_cms_category'] = $cmsCategoryModel->id;
|
|
self::updateMultiStoreLang('cms_category', $lang);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('CMS Category(ID: %1$s) cannot be saved. %2$s')), (isset($cmsCategory['id_cms_category']) && !self::isEmpty($cmsCategory['id_cms_category'])) ? Tools::safeOutput($cmsCategory['id_cms_category']) : 'No ID', $error_tmp));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
foreach ($cmses as $cms) {
|
|
if ($cmsObj = $this->createObjectModel('CMS', $cms['id_cms'])) {
|
|
$cmsObj->id_cms_category = self::getLocalID('CMSCategory', $cms['id_cms_category'], 'data');
|
|
if (self::isEmpty($cmsObj->id_cms_category)) {
|
|
$cmsObj->id_cms_category = 1;
|
|
}
|
|
$cmsObj->position = $cms['position'];
|
|
$cmsObj->active = $cms['active'];
|
|
$cmsObj->indexation = $cms['indexation'];
|
|
foreach ($cmsAdditionalSecond['cms_lang'] as $lang) {
|
|
if ($lang['id_cms'] == $cms['id_cms']) {
|
|
$lang['id_lang'] = self::getLanguageID($lang['id_lang']);
|
|
$cmsObj->meta_title[$lang['id_lang']] = $lang['meta_title'];
|
|
$cmsObj->meta_description[$lang['id_lang']] = $lang['meta_description'];
|
|
$cmsObj->meta_keywords[$lang['id_lang']] = $lang['meta_title'];
|
|
$cmsObj->content[$lang['id_lang']] = $lang['content'];
|
|
$cmsObj->link_rewrite[$lang['id_lang']] = $lang['link_rewrite'];
|
|
|
|
if (isset($cmsObj->link_rewrite[$lang['id_lang']]) && !self::isEmpty($cmsObj->link_rewrite[$lang['id_lang']])) {
|
|
$valid_link = Validate::isLinkRewrite($cmsObj->link_rewrite[$lang['id_lang']]);
|
|
} else {
|
|
$valid_link = false;
|
|
}
|
|
if (!$valid_link) {
|
|
$cmsObj->link_rewrite[$lang['id_lang']] = Tools::link_rewrite($cmsObj->name[$lang['id_lang']]);
|
|
|
|
if ($cmsObj->link_rewrite[$lang['id_lang']] == '') {
|
|
$cmsObj->link_rewrite[$lang['id_lang']] = 'friendly-url-autogeneration-failed';
|
|
$this->warning_msg[] = sprintf(self::displayError($this->module->l('URL rewriting failed to auto-generate a friendly URL for: %s')), $cmsObj->name[$lang['id_lang']]);
|
|
}
|
|
|
|
$this->warning_msg[] = sprintf(self::displayError($this->module->l('The link for %1$s (ID: %2$s) was re-written as %3$s.')), $lang['link_rewrite'], (isset($cms['id_cms']) && !self::isEmpty($cms['id_cms'])) ? $cms['id_cms'] : 'null', $cmsObj->link_rewrite[$lang['id_lang']]);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Add to _shop relations
|
|
$cmsShopsRelations = $this->getChangedIdShop($cmsAdditionalSecond['cms_shop'], 'id_cms');
|
|
if (array_key_exists($cms['id_cms'], $cmsShopsRelations)) {
|
|
$cmsObj->id_shop_list = array_values($cmsShopsRelations[$cms['id_cms']]);
|
|
}
|
|
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $cmsObj->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $cmsObj->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($cmsObj->id && CMS::existsInDatabase($cmsObj->id, 'cms')) {
|
|
try {
|
|
$res = $cmsObj->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
try {
|
|
$res = $cmsObj->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
if (!$res) {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('CMS (ID: %1$s) cannot be saved. %2$s')), (isset($cms['id_cms']) && !self::isEmpty($cms['id_cms'])) ? Tools::safeOutput($cms['id_cms']) : 'No ID', $err_tmp));
|
|
} else {
|
|
// Import CMS Role
|
|
if (!($this->version < 1.6)) {
|
|
foreach ($cmsAdditionalSecond['cms_role'] as $cmsRole) {
|
|
if ($cmsRole['id_cms'] == $cms['id_cms']) {
|
|
if ($cmsRoleModel = $this->createObjectModel('CMSRole', $cmsRole['id_cms_role'])) {
|
|
foreach ($cmsAdditionalThird['cms_role_lang'] as $lang) {
|
|
if ($lang['id_cms_role'] == $cmsRole['id_cms_role']) {
|
|
$lang['id_lang'] = self::getLanguageID($lang['id_lang']);
|
|
$cmsObj->name[$lang['id_lang']] = $lang['name'];
|
|
$cmsObj->id_cms = $cmsObj->id;
|
|
}
|
|
}
|
|
$cmsRoleModel->name = $cmsRole['name'];
|
|
$cmsRoleModel->id_cms = $cmsObj->id;
|
|
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $cmsRoleModel->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $cmsRoleModel->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if ($cmsRoleModel->id && CMSRole::existsInDatabase($cmsRoleModel->id, 'cms_role')) {
|
|
try {
|
|
$res = $cmsRoleModel->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
if (!$res) {
|
|
try {
|
|
$res = $cmsRoleModel->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('CMS Role(ID: %1$s) cannot be saved. %2$s')), (isset($cmsRole['id_cms_role']) && !self::isEmpty($cmsRole['id_cms_role'])) ? Tools::safeOutput($cmsRole['id_cms_role']) : 'No ID', $err_tmp));
|
|
} else {
|
|
self::addLog('CMSRole', $cmsRole['id_cms_role'], $cmsRoleModel->id);
|
|
//update multistore language fields
|
|
if (!version_compare($this->version, '1.6', '<')) {
|
|
if (MigrationProMapping::getMapTypeCount('multi_shops') > 1) {
|
|
foreach ($cmsAdditionalThird['cms_role_lang'] as $lang) {
|
|
if ($lang['id_cms_role'] == $cmsRole['id_cms_role']) {
|
|
$lang['id_shop'] = self::getShopID($lang['id_shop']);
|
|
$lang['id_lang'] = self::getLanguageID($lang['id_lang']);
|
|
$lang['id_cms_role'] = $cmsRoleModel->id;
|
|
self::updateMultiStoreLang('cms_role', $lang);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('CMS Role(ID: %1$s) cannot be saved. %2$s')), (isset($cmsRole['id_cms_role']) && !self::isEmpty($cmsRole['id_cms_role'])) ? Tools::safeOutput($cmsRole['id_cms_role']) : 'No ID', $error_tmp));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
self::addLog('CMSRole', $cms['id_cms'], $cmsObj->id);
|
|
}
|
|
}
|
|
|
|
if (version_compare(_PS_VERSION_, '1.7.0.0', '<')) {
|
|
// Import CMS Block Page
|
|
$sql_values = array();
|
|
foreach ($cmsAdditionalThird['cms_block_page'] as $cmsBlockPage) {
|
|
if ($cmsBlockPage['id_cms'] == $cms['id_cms']) {
|
|
$sql_values[] = '(' . self::getLocalID('cmsBlock', $cmsBlockPage['id_cms_block'], 'data') . ', ' . (int)$cmsObj->id . ', ' . $cmsBlockPage['is_category'] . ')';
|
|
}
|
|
}
|
|
if (!self::isEmpty($sql_values)) {
|
|
$result = Db::getInstance()->execute('REPLACE INTO `' . _DB_PREFIX_ . 'cms_block_page` (`id_cms_block`, `id_cms`,
|
|
`is_category`)
|
|
VALUES ' . implode(',', $sql_values));
|
|
if (!$result) {
|
|
$this->showMigrationMessageAndLog(self::displayError('Can\'t add cms_block_page. ' . Db::getInstance()->getMsgError()));
|
|
}
|
|
}
|
|
}
|
|
|
|
if (count($this->error_msg) == 0) {
|
|
self::addLog('CMS', $cms['id_cms'], $cmsObj->id);
|
|
//update multistore language fields
|
|
if (!version_compare($this->version, '1.6', '<')) {
|
|
if (MigrationProMapping::getMapTypeCount('multi_shops') > 1) {
|
|
foreach ($cmsAdditionalSecond['cms_lang'] as $lang) {
|
|
if ($lang['id_cms'] == $cms['id_cms']) {
|
|
$lang['id_shop'] = self::getShopID($lang['id_shop']);
|
|
$lang['id_lang'] = self::getLanguageID($lang['id_lang']);
|
|
$lang['id_cms'] = $cmsObj->id;
|
|
self::updateMultiStoreLang('cms', $lang);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('CMS (ID: %1$s) cannot be saved. %2$s')), (isset($cms['id_cms']) && !self::isEmpty($cms['id_cms'])) ? Tools::safeOutput($cms['id_cms']) : 'No ID', $error_tmp));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
$this->updateProcess(count($cmses));
|
|
}
|
|
|
|
/**
|
|
* @param $metas
|
|
* @param $metaLang
|
|
*/
|
|
public function metas($metas, $metaLang)
|
|
{
|
|
foreach ($metas as $meta) {
|
|
if (in_array($meta['page'], Meta::getpages())) {
|
|
if ($metaObj = $this->createObjectModel('Meta', $meta['id_meta'])) {
|
|
$metaObj->page = $meta['page'];
|
|
$metaObj->configurable = $meta['configurable'];
|
|
if (self::isEmpty($metaObj->configurable)) {
|
|
$metaObj->configurable = 1;
|
|
}
|
|
foreach ($metaLang as $lang) {
|
|
if ($lang['id_meta'] == $meta['id_meta']) {
|
|
$lang['id_lang'] = self::getLanguageID($lang['id_lang']);
|
|
$metaObj->title[$lang['id_lang']] = $lang['title'];
|
|
$metaObj->description[$lang['id_lang']] = $lang['description'];
|
|
$metaObj->keywords[$lang['id_lang']] = $lang['keywords'];
|
|
$metaObj->url_rewrite[$lang['id_lang']] = $lang['url_rewrite'];
|
|
|
|
if (!ValidateCore::isLinkRewrite($metaObj->url_rewrite[$lang['id_lang']])) {
|
|
$metaObj->url_rewrite[$lang['id_lang']] = Tools::link_rewrite($lang['title']);
|
|
}
|
|
}
|
|
}
|
|
|
|
$res = false;
|
|
$err_tmp = '';
|
|
if (($field_error = $metaObj->validateFields(self::UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $metaObj->validateFieldsLang(self::UNFRIENDLY_ERROR, true)) === true) {
|
|
if (Db::getInstance()->getValue('SELECT * FROM ' . _DB_PREFIX_ . 'meta WHERE page = \'' . $meta['page'] . '\'') != 0) {
|
|
try {
|
|
$res = $metaObj->update();
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
|
|
if (!$res) {
|
|
try {
|
|
$res = $metaObj->add(false);
|
|
} catch (PrestaShopException $e) {
|
|
$err_tmp = $e->getMessage();
|
|
}
|
|
}
|
|
if (!$res) {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Meta (ID: %1$s) cannot be saved. %2$s')), (isset($meta['id_meta']) && !self::isEmpty($meta['id_meta'])) ? Tools::safeOutput($meta['id_meta']) : 'No ID', $err_tmp));
|
|
} else {
|
|
$url = $this->url . $this->image_path . $meta['id_meta'] . '.jpg';
|
|
if (self::imageExits($url) && !(EDImport::copyImg($metaObj->id, null, $url, 'metas', $this->regenerate))) {
|
|
$this->warning_msg[] = $url . ' ' . self::displayError($this->module->l('cannot be copied.'));
|
|
}
|
|
self::addLog('meta', $meta['id_meta'], $metaObj->id);
|
|
|
|
//update multistore language fields
|
|
if (!version_compare($this->version, '1.5', '<')) {
|
|
if (MigrationProMapping::getMapTypeCount('multi_shops') > 1) {
|
|
foreach ($metaLang as $lang) {
|
|
if ($lang['id_meta'] == $meta['id_meta']) {
|
|
$lang['id_shop'] = self::getShopID($lang['id_shop']);
|
|
$lang['id_lang'] = self::getLanguageID($lang['id_lang']);
|
|
$lang['id_meta'] = $metaObj->id;
|
|
self::updateMultiStoreLang('meta', $lang);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
$error_tmp = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
|
|
if ($error_tmp != '') {
|
|
$this->showMigrationMessageAndLog(sprintf(self::displayError($this->module->l('Meta (ID: %1$s) cannot be saved. %2$s')), (isset($meta['id_meta']) && !self::isEmpty($meta['id_meta'])) ? Tools::safeOutput($meta['id_meta']) : 'No ID', $error_tmp));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
$this->updateProcess(count($metas));
|
|
}
|
|
|
|
// --- Internal helper methods:
|
|
|
|
private function createObjectModel($className, $objectID, $table_name = '')
|
|
{
|
|
if (!MigrationProData::exist($className, $objectID)) {
|
|
// -- if keep old IDs and if exists in DataBase
|
|
// -- else isset($objectID) 1&& (int)$objectID
|
|
|
|
if (!self::isEmpty($table_name)) {
|
|
$existInDataBase = self::existsInDatabase((int)$objectID, Tools::strtolower($table_name), Tools::strtolower($className));
|
|
} else {
|
|
$existInDataBase = $className::existsInDatabase((int)$objectID, $className::$definition['table']);
|
|
// [For PrestaShop Team] - This code call class definition attribute extended from ObjectModel class
|
|
// like Order::$definition
|
|
}
|
|
|
|
if ($existInDataBase && $this->force_ids) {
|
|
$this->obj = new $className((int)$objectID);
|
|
} else {
|
|
$this->obj = new $className();
|
|
}
|
|
|
|
if ($this->force_ids) {
|
|
$this->obj->force_id = true;
|
|
$this->obj->id = $objectID;
|
|
}
|
|
|
|
// if ($this->force_ids) {
|
|
// if (!$existInDataBase) {
|
|
// $this->obj = new $className();
|
|
// $this->obj->force_id = true;
|
|
// $this->obj->id = $objectID;
|
|
// } else {
|
|
// $this->obj = new $className((int)$objectID);
|
|
// /*if (Validate::isLoadedObject($this->obj) && (method_exists($this->obj, 'isUsed') && $this->obj->isUsed())
|
|
// ) {
|
|
// $this->obj->delete();
|
|
// $this->obj->force_id = true;
|
|
// $this->obj->id = $objectID;
|
|
// }*/
|
|
// }
|
|
//
|
|
// } else {
|
|
// $this->obj = new $className();
|
|
// }
|
|
|
|
return $this->obj;
|
|
}
|
|
// return false;
|
|
}
|
|
|
|
private function updateProcess($count)
|
|
{
|
|
if (!count($this->error_msg) && $count > 0) {
|
|
$this->process->imported += $count;//@TODO count of item
|
|
// $this->process->id_source = $source_id;
|
|
if ($this->process->total <= $this->process->imported) {
|
|
$this->process->finish = 1;
|
|
$this->response['execute_time'] = number_format((time() - strtotime($this->process->time_start)), 3, '.', '');
|
|
}
|
|
$this->response['type'] = $this->process->type;
|
|
$this->response['total'] = (int)$this->process->total;
|
|
$this->response['imported'] = (int)$this->process->imported;
|
|
$this->response['process'] = ($this->process->finish == 1) ? 'finish' : 'continue';
|
|
$this->process->save();
|
|
} else {
|
|
if (!$this->ps_validation_errors) {
|
|
$this->error_msg[] = self::displayError($this->module->l('Something went wrong. Source server return with null'));
|
|
}
|
|
}
|
|
}
|
|
|
|
private static function existsInDatabase($id_entity, $table, $entity_name)
|
|
{
|
|
$row = Db::getInstance()->getRow('
|
|
SELECT `id_' . bqSQL($entity_name) . '` as id
|
|
FROM `' . _DB_PREFIX_ . bqSQL($table) . '` e
|
|
WHERE e.`id_' . bqSQL($entity_name) . '` = ' . (int)$id_entity, false);
|
|
|
|
return isset($row['id']);
|
|
}
|
|
|
|
private static function copyImg($id_entity, $id_image, $url, $entity = 'products', $regenerate = false)
|
|
{
|
|
$tmpfile = tempnam(_PS_TMP_IMG_DIR_, 'ps_import');
|
|
$watermark_types = explode(',', Configuration::get('WATERMARK_TYPES'));
|
|
if (self::isEmpty($id_image)) {
|
|
$id_image = null;
|
|
}
|
|
switch ($entity) {
|
|
default:
|
|
case 'carriers':
|
|
$path = _PS_SHIP_IMG_DIR_ . (int)$id_entity;
|
|
break;
|
|
case 'products':
|
|
$image_obj = new Image($id_image);
|
|
$path = $image_obj->getPathForCreation();
|
|
break;
|
|
case 'categories':
|
|
$path = _PS_CAT_IMG_DIR_ . (int)$id_entity;
|
|
break;
|
|
case 'manufacturers':
|
|
$path = _PS_MANU_IMG_DIR_ . (int)$id_entity;
|
|
break;
|
|
case 'suppliers':
|
|
$path = _PS_SUPP_IMG_DIR_ . (int)$id_entity;
|
|
break;
|
|
case 'employees':
|
|
$path = _PS_EMPLOYEE_IMG_DIR_ . (int)$id_entity;
|
|
break;
|
|
case 'attributes':
|
|
$path = _PS_COL_IMG_DIR_ . (int)$id_entity;
|
|
break;
|
|
}
|
|
|
|
$url = urldecode(trim($url));
|
|
$parced_url = parse_url($url);
|
|
|
|
if (isset($parced_url['path'])) {
|
|
$uri = ltrim($parced_url['path'], '/');
|
|
$parts = explode('/', $uri);
|
|
foreach ($parts as &$part) {
|
|
$part = rawurlencode($part);
|
|
}
|
|
unset($part);
|
|
$parced_url['path'] = '/' . implode('/', $parts);
|
|
}
|
|
|
|
if (isset($parced_url['query'])) {
|
|
$query_parts = array();
|
|
parse_str($parced_url['query'], $query_parts);
|
|
$parced_url['query'] = http_build_query($query_parts);
|
|
}
|
|
|
|
if (!function_exists('http_build_url')) {
|
|
require_once(_PS_TOOL_DIR_ . 'http_build_url/http_build_url.php');
|
|
}
|
|
|
|
$url = http_build_url('', $parced_url);
|
|
// [For PrestaShop Team] Before called require_once(_PS_TOOL_DIR_ . 'http_build_url/http_build_url.php');
|
|
|
|
$orig_tmpfile = $tmpfile;
|
|
|
|
$opts = array(
|
|
"http" => array(
|
|
"header" => "User-Agent: Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.102011-10-16 20:23:10\r\n"
|
|
)
|
|
);
|
|
|
|
$context = stream_context_create($opts);
|
|
|
|
if (self::copy($url, $tmpfile, $context)) {
|
|
// Evaluate the memory required to resize the image: if it's too much, you can't resize it.
|
|
if (!ImageManager::checkImageMemoryLimit($tmpfile)) {
|
|
@unlink($tmpfile);
|
|
|
|
return false;
|
|
}
|
|
|
|
$tgt_width = $tgt_height = 0;
|
|
$src_width = $src_height = 0;
|
|
$error = 0;
|
|
ImageManager::resize($tmpfile, $path . '.jpg', null, null, 'jpg', false, $error, $tgt_width, $tgt_height, 5, $src_width, $src_height);
|
|
if ($regenerate) { //@TODO add to step-2 regenerate images after import
|
|
$images_types = ImageType::getImagesTypes($entity, true);
|
|
// $previous_path = null;
|
|
$path_infos = array();
|
|
$path_infos[] = array($tgt_width, $tgt_height, $path . '.jpg');
|
|
foreach ($images_types as $image_type) {
|
|
$tmpfile = self::getBestPath($image_type['width'], $image_type['height'], $path_infos);
|
|
|
|
if (ImageManager::resize($tmpfile, $path . '-' . Tools::stripslashes($image_type['name']) . '.jpg', $image_type['width'], $image_type['height'], 'jpg', false, $error, $tgt_width, $tgt_height, 5, $src_width, $src_height)) {
|
|
// the last image should not be added in the candidate list if it's bigger than the original image
|
|
if ($tgt_width <= $src_width && $tgt_height <= $src_height) {
|
|
$path_infos[] = array(
|
|
$tgt_width,
|
|
$tgt_height,
|
|
$path . '-' . Tools::stripslashes($image_type['name']) . '.jpg'
|
|
);
|
|
}
|
|
if ($entity == 'products') {
|
|
if (is_file(_PS_TMP_IMG_DIR_ . 'product_mini_' . (int)$id_entity . '.jpg')) {
|
|
unlink(_PS_TMP_IMG_DIR_ . 'product_mini_' . (int)$id_entity . '.jpg');
|
|
}
|
|
if (is_file(_PS_TMP_IMG_DIR_ . 'product_mini_' . (int)$id_entity . '_' . (int)Context::getContext()->shop->id . '.jpg')) {
|
|
unlink(_PS_TMP_IMG_DIR_ . 'product_mini_' . (int)$id_entity . '_' . (int)Context::getContext()->shop->id . '.jpg');
|
|
}
|
|
}
|
|
}
|
|
if (in_array($image_type['id_image_type'], $watermark_types)) {
|
|
Hook::exec('actionWatermark', array('id_image' => $id_image, 'id_product' => $id_entity));
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
@unlink($orig_tmpfile);
|
|
|
|
return false;
|
|
}
|
|
unlink($orig_tmpfile);
|
|
|
|
return true;
|
|
}
|
|
|
|
private static function getBestPath($tgt_width, $tgt_height, $path_infos)
|
|
{
|
|
$path_infos = array_reverse($path_infos);
|
|
$path = '';
|
|
foreach ($path_infos as $path_info) {
|
|
list($width, $height, $path) = $path_info;
|
|
if ($width >= $tgt_width && $height >= $tgt_height) {
|
|
return $path;
|
|
}
|
|
}
|
|
|
|
return $path;
|
|
}
|
|
|
|
private static function imageExits($url)
|
|
{
|
|
$ch = curl_init($url);
|
|
curl_setopt($ch, CURLOPT_NOBODY, true);
|
|
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
|
|
"User-Agent: Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.102011-10-16 20:23:10\r\n"
|
|
));
|
|
curl_exec($ch);
|
|
$response_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
|
curl_close($ch);
|
|
|
|
if ($response_code === 200) {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public static function copy($source, $destination, $stream_context = null)
|
|
{
|
|
if (is_null($stream_context) && !preg_match('/^https?:\/\//', $source)) {
|
|
return @copy($source, $destination);
|
|
}
|
|
if (version_compare(_PS_VERSION_, '1.7.0.0', '<')) {
|
|
return @file_put_contents($destination, Tools::file_get_contents($source, false, $stream_context));
|
|
} else {
|
|
return @file_put_contents($destination, self::fileGetContentsCurl($source, 5, $stream_context));
|
|
}
|
|
}
|
|
|
|
private static function fileGetContentsCurl(
|
|
$url,
|
|
$curl_timeout,
|
|
$opts
|
|
) {
|
|
$content = false;
|
|
|
|
if (function_exists('curl_init')) {
|
|
Tools::refreshCACertFile();
|
|
$curl = curl_init();
|
|
|
|
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
|
|
curl_setopt($curl, CURLOPT_URL, $url);
|
|
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 5);
|
|
curl_setopt($curl, CURLOPT_TIMEOUT, $curl_timeout);
|
|
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
|
|
curl_setopt($curl, CURLOPT_CAINFO, _PS_CACHE_CA_CERT_FILE_);
|
|
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
|
|
curl_setopt($curl, CURLOPT_MAXREDIRS, 5);
|
|
|
|
if ($opts != null) {
|
|
if (isset($opts['http']['method']) && Tools::strtolower($opts['http']['method']) == 'post') {
|
|
curl_setopt($curl, CURLOPT_POST, true);
|
|
if (isset($opts['http']['content'])) {
|
|
parse_str($opts['http']['content'], $post_data);
|
|
curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
|
|
}
|
|
}
|
|
}
|
|
$content = curl_exec($curl);
|
|
curl_close($curl);
|
|
}
|
|
|
|
return $content;
|
|
}
|
|
|
|
private function getLocalID($map_type, $sourceID, $table_type = 'map')
|
|
{
|
|
if ($table_type === "map") {
|
|
$result = (isset($this->mapping[$map_type][$sourceID]) && !self::isEmpty($this->mapping[$map_type][$sourceID])) ? $this->mapping[$map_type][$sourceID] : 0;
|
|
} else {
|
|
$result = MigrationProData::getLocalID($map_type, $sourceID);
|
|
if (self::isEmpty($result)) {
|
|
$result = MigrationProMigratedData::getLocalID($map_type, $sourceID);
|
|
}
|
|
}
|
|
|
|
return (int)$result;
|
|
}
|
|
|
|
private function getCarrierReference($id_carrier)
|
|
{
|
|
return Db::getInstance()->getValue('SELECT id_reference FROM ' . _DB_PREFIX_ . 'carrier WHERE id_carrier = ' . (int)$id_carrier . '');
|
|
}
|
|
|
|
private function getLanguageID($source_lang_id)
|
|
{
|
|
return $this->getLocalID('languages', $source_lang_id);
|
|
}
|
|
|
|
private function getShopID($source_shop_id)
|
|
{
|
|
return $this->getLocalID('multi_shops', $source_shop_id);
|
|
}
|
|
|
|
private function getCurrencyID($source_currency_id)
|
|
{
|
|
return $this->getLocalID('currencies', $source_currency_id);
|
|
}
|
|
|
|
private function getOrderStateID($source_order_state_id)
|
|
{
|
|
return $this->getLocalID('order_states', $source_order_state_id);
|
|
}
|
|
|
|
private function getCustomerGroupID($source_customer_group_id)
|
|
{
|
|
return $this->getLocalID('customer_groups', $source_customer_group_id);
|
|
}
|
|
|
|
private static function defaultValue($input, $default)
|
|
{
|
|
if (isset($input) && !self::isEmpty($input)) {
|
|
return $input;
|
|
} else {
|
|
return $default;
|
|
}
|
|
}
|
|
|
|
private function getChangedIdShop($dataFromSourceCart, $idKeyName)
|
|
{
|
|
$result = array();
|
|
|
|
foreach ($dataFromSourceCart as $data) {
|
|
if (self::getShopID($data['id_shop']) != 0) {
|
|
$result[$data[$idKeyName]][] = self::getShopID($data['id_shop']);
|
|
}
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
|
|
public static function displayError($string = 'Fatal error', $htmlentities = false)
|
|
{
|
|
return $htmlentities ? Tools::htmlentitiesUTF8(Tools::stripslashes($string)) : $string;
|
|
}
|
|
|
|
public static function addLog($entity_type, $source_id, $local_id)
|
|
{
|
|
MigrationProData::import((string)$entity_type, (int)$source_id, (int)$local_id);
|
|
MigrationProMigratedData::import((string)$entity_type, (int)$source_id, (int)$local_id);
|
|
}
|
|
|
|
public static function isEmpty($field)
|
|
{
|
|
if (version_compare(PHP_VERSION, '5.5.0', '<')) {
|
|
return ($field === '' || $field === null || $field === array() || $field === 0 || $field === '0');
|
|
} else {
|
|
return empty($field);
|
|
}
|
|
}
|
|
|
|
public function updateMultiStoreLang($entity, $properties)
|
|
{
|
|
$keys = self::quotaToProperty(array_keys($properties));
|
|
$values = self::quotaToProperty(array_values($properties));
|
|
$result = Db::getInstance()->execute("REPLACE INTO " . _DB_PREFIX_ . $entity . "_lang (" . implode(', ', $keys) . ") VALUES ('" . implode("','", $values) . "')");
|
|
return $result;
|
|
}
|
|
|
|
public function quotaToProperty($properties)
|
|
{
|
|
$result = array();
|
|
|
|
foreach ($properties as $value) {
|
|
$result[] = pSQL($value, true);
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
|
|
public static function importAccessories($accessory)
|
|
{
|
|
$result = Db::getInstance()->execute('INSERT INTO ' . _DB_PREFIX_ . 'accessory (id_product_1, id_product_2) VALUES (' . (int)$accessory["id_product_1"] . ', ' . (int)$accessory["id_product_2"] . ')');
|
|
return $result;
|
|
}
|
|
|
|
private function showMigrationMessageAndLog($logText, $showOnlyWarning = false)
|
|
{
|
|
if ($this->ps_validation_errors) {
|
|
if ($showOnlyWarning) {
|
|
$this->logger->addWarningLog($logText);
|
|
$this->warning_msg[] = $logText;
|
|
} else {
|
|
$this->logger->addErrorLog($logText);
|
|
$this->error_msg[] = $logText;
|
|
}
|
|
} else {
|
|
$this->logger->addWarningLog($logText);
|
|
$this->warning_msg[] = $logText;
|
|
}
|
|
}
|
|
}
|