* @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, 'rb')) === false) { return false; } while ($line = fgets($fileHandler)) { if (strpos($line, 'yml_catalog date=') !== false) { preg_match_all('/date="([\d\- :]+)"/', $line, $matches); if (count($matches) == 2) { $date = $matches[1][0]; } break; } } fclose($fileHandler); return DateTime::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 ($icmlInfo === null || json_last_error() !== JSON_ERROR_NONE) { $icmlInfo = array(); } $lastGenerated = self::getIcmlFileDate(); if ($lastGenerated === false) { return $icmlInfo; } $icmlInfo['lastGenerated'] = $lastGenerated; $now = new DateTime(); /** @var DateInterval $diff */ $diff = $lastGenerated->diff($now); $icmlInfo['lastGeneratedDiff'] = array( 'days' => $diff->days, 'hours' => $diff->h, 'minutes' => $diff->i ); $icmlInfo['isOutdated'] = ( $icmlInfo['lastGeneratedDiff']['days'] > 0 || $icmlInfo['lastGeneratedDiff']['hours'] > 4 ); $api = RetailcrmTools::getApiClient(); if ($api !== null) { $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(array(self::class, 'getIcmlFileInfo')); } /** * @param int $productsCount * @param int $offersCount */ public static function setIcmlFileInfo($productsCount, $offersCount) { $icmlInfo = array( 'productsCount' => $productsCount, 'offersCount' => $offersCount ); Configuration::updateValue(self::ICML_INFO_NAME, (string)json_encode($icmlInfo)); } }