* @copyright 2021 DIGITAL RETAIL TECHNOLOGIES SL * @license https://opensource.org/licenses/MIT The MIT License * * Don't forget to prefix your containers with your own identifier * to avoid any conflicts with others containers. */ if (!defined('_PS_VERSION_')) { exit; } /** * Upgrade module to version 3.3.2 * * @param \RetailCRM $module * * @return bool */ function upgrade_module_3_3_2($module) { if ('retailcrm' != $module->name) { return false; } $isMultiStoreActive = Shop::isFeatureActive(); if ($isMultiStoreActive) { $shops = Shop::getShops(); } else { $shops[] = Shop::getContext(); } foreach ($shops as $shop) { RetailcrmContextSwitcher::setShopContext((int) $shop['id_shop']); $api = RetailcrmTools::getApiClient(); if (empty($api)) { continue; } if ($isMultiStoreActive) { $oldFile = _PS_ROOT_DIR_ . '/retailcrm_' . $shop['id_shop'] . '.xml'; $newFile = _PS_ROOT_DIR_ . '/simla_' . $shop['id_shop'] . '.xml'; } else { $oldFile = _PS_ROOT_DIR_ . '/retailcrm.xml'; $newFile = _PS_ROOT_DIR_ . '/simla.xml'; } if (file_exists($oldFile) && !file_exists($newFile)) { rename($oldFile, $newFile); } else { if (!file_exists($oldFile)) { RetailcrmLogger::writeDebug( __METHOD__, sprintf( 'Old ICML file [%s] not exist', $oldFile ) ); } if (file_exists($newFile)) { RetailcrmLogger::writeDebug( __METHOD__, sprintf( 'New ICML file [%s] already exists', $newFile ) ); } } try { $response = $api->credentials(); } catch (\RetailCrm\Exception\CurlException $e) { RetailcrmLogger::writeCaller( __METHOD__, sprintf( 'Connection error: %s', $e->getMessage() ) ); } if (!$response->isSuccessful() || 'access_selective' !== $response['siteAccess'] || 1 !== count($response['sitesAvailable']) || !in_array('/api/reference/sites', $response['credentials']) || !in_array('/api/reference/sites/{code}/edit', $response['credentials']) ) { RetailcrmLogger::writeCaller( __METHOD__, sprintf( 'ShopID=%s: Error with CRM credentials: need an valid apiKey assigned to one certain site', $shop['id_shop'] ) ); continue; } try { $response = $api->sitesList(); } catch (\RetailCrm\Exception\CurlException $e) { RetailcrmLogger::writeCaller( __METHOD__, sprintf( 'Connection error: %s', $e->getMessage() ) ); } if ($response->isSuccessful() && $response['sites']) { $crmSite = current($response['sites']); $site = $crmSite['code']; $oldYmlUrl = $crmSite['ymlUrl']; $newYmlUrl = str_replace('/retailcrm', '/simla', $oldYmlUrl); try { $response = $api->sitesEdit([ 'code' => $site, 'ymlUrl' => $newYmlUrl, ]); } catch (\RetailCrm\Exception\CurlException $e) { RetailcrmLogger::writeCaller( __METHOD__, sprintf( 'Connection error: %s', $e->getMessage() ) ); } } } return true; }