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; } } }