* @copyright 2020 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. */ class RetailcrmCatalogHelper { const ICML_INFO_NAME = 'RETAILCRM_ICML_INFO'; public static function getIcmlFileDate() { $date = null; $filePath = self::getIcmlFilePath(); if (!file_exists($filePath) || ($fileHandler = fopen($filePath, 'r')) === false) { return false; } while ($line = fgets($fileHandler)) { if (false !== strpos($line, 'yml_catalog date=')) { preg_match_all('/date="([\d\- :]+)"/', $line, $matches); if (2 == count($matches)) { $date = $matches[1][0]; } break; } } fclose($fileHandler); return DateTimeImmutable::createFromFormat('Y-m-d H:i:s', $date); } public static function getIcmlFileLink() { return _PS_BASE_URL_ . '/' . self::getIcmlFilename(); } public static function getIcmlFileName() { $isMultiStoreActive = Shop::isFeatureActive(); $shop = Context::getContext()->shop; if ($isMultiStoreActive) { $icmlFileName = 'simla_' . $shop->id . '.xml'; } else { $icmlFileName = 'simla.xml'; } return $icmlFileName; } public static function getIcmlFilePath() { return _PS_ROOT_DIR_ . '/' . self::getIcmlFileName(); } public static function getIcmlFileInfo() { $icmlInfo = json_decode((string) Configuration::get(self::ICML_INFO_NAME), true); if (null === $icmlInfo || JSON_ERROR_NONE !== json_last_error()) { $icmlInfo = []; } $lastGenerated = self::getIcmlFileDate(); if (false === $lastGenerated) { return $icmlInfo; } $icmlInfo['lastGenerated'] = $lastGenerated; $now = new DateTimeImmutable(); /** @var DateInterval $diff */ $diff = $lastGenerated->diff($now); $icmlInfo['lastGeneratedDiff'] = [ 'days' => $diff->days, 'hours' => $diff->h, 'minutes' => $diff->i, ]; $icmlInfo['isOutdated'] = ( 0 < $icmlInfo['lastGeneratedDiff']['days'] || 4 < $icmlInfo['lastGeneratedDiff']['hours'] ); $api = RetailcrmTools::getApiClient(); if (null !== $api) { $reference = new RetailcrmReferences($api); $site = $reference->getSite(); $icmlInfo['isUrlActual'] = !empty($site['ymlUrl']) && $site['ymlUrl'] === self::getIcmlFileLink(); if (!empty($site['catalogId'])) { $icmlInfo['siteId'] = $site['catalogId']; } } return $icmlInfo; } public static function getIcmlFileInfoMultistore() { return RetailcrmContextSwitcher::runInContext([self::class, 'getIcmlFileInfo']); } /** * @param int $productsCount * @param int $offersCount */ public static function setIcmlFileInfo($productsCount, $offersCount) { $icmlInfo = [ 'productsCount' => $productsCount, 'offersCount' => $offersCount, ]; Configuration::updateValue(self::ICML_INFO_NAME, (string) json_encode($icmlInfo)); } }