* @copyright 2022 ECSoft * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) * International Registered Trademark & Property of ECSoft */ /** * @property EcsGtmPro $module */ class EcsGtmProProduct { private static $instance = null; protected $module; private function __construct() { $this->module = Module::getInstanceByName('ecsgtmpro'); } public static function getInstance() { if (self::$instance === null) { self::$instance = new self(); } return self::$instance; } public function getProductId($product, $combination) { return $this->getProductIdentifier($product, $combination, $this->module->gtmConfig->dataConfig->product_id); } public function remarketingGetProductIdentifier($product) { $id_product_attribute = EcsGtmProTools::getProductAttributeId($product, $this->module->gtmConfig->dataConfig->display_variant_id); $combination = null; if ($id_product_attribute) { $combination = new Combination($id_product_attribute); } return $this->getProductIdentifier($product, $combination, $this->module->gtmConfig->remarketingConfig->product_id, $this->module->gtmConfig->remarketingConfig->product_prefix); } public function getProductIdentifier($product, $combination = null, $id_type = null, $product_id_prefix = null) { $product = is_object($product) ? $product : (object)$product; $product_identifier = null; if (empty($id_type) || !in_array($id_type, array('id', 'reference', 'ean13', 'upc'))) { $id_type = 'id'; } if (!is_null($combination) && Validate::isLoadedObject($combination)) { $id_product_attribute = $combination->id; } else { $combination = null; $id_product_attribute = null; } if (empty($product->id) && !empty($product->id_product)) { $product->id = $product->id_product; } switch ($id_type) { case 'id': $product_id = !empty($product->id) ? $product->id : 0; $product_identifier = null; if ($this->module->gtmConfig->dataConfig->display_variant_id != 'never') { if (!$id_product_attribute && !empty($product->id_product_attribute)) { $id_product_attribute = $product->id_product_attribute; } if ($id_product_attribute) { $product_identifier = $product_id.'-'.$id_product_attribute; } elseif ($this->module->gtmConfig->dataConfig->display_variant_id == 'always') { $product_identifier = $product_id.'-'.Product::getDefaultAttribute($product_id); } } $product_identifier = $product_identifier ? $product_identifier : ''.$product_id; break; case 'reference': case 'ean13': case 'upc': if ($combination && !empty($combination->$id_type)) { $product_identifier = $combination->$id_type; } elseif (!empty($product->$id_type)) { $product_identifier = $product->$id_type; } break; default: $product_identifier = 'ERROR'; break; } if (!empty($product_id_prefix)) { $product_id_prefix = (string) $product_id_prefix; $product_id_prefix = str_replace('{lang}', Context::getContext()->language->iso_code, $product_id_prefix); $product_id_prefix = str_replace('{LANG}', Tools::strtoupper(Context::getContext()->language->iso_code), $product_id_prefix); $product_identifier = $product_id_prefix.$product_identifier; } return $product_identifier; } public function getProductName($product, $product_name_field = null) { $base_product = new Product($product->id); $product_name_field = empty($product_name_field) ? $this->module->gtmConfig->dataConfig->product_name : $product_name_field; $id_lang = $this->module->dlManager->getDataLanguage(); switch ($product_name_field) { case 'link_rewrite': if (!empty($base_product->link_rewrite)) { if (is_array($base_product->link_rewrite)) { $product_name = !empty($base_product->link_rewrite[$id_lang]) ? $base_product->link_rewrite[$id_lang] : $base_product->link_rewrite[0]; } else { $product_name = $base_product->link_rewrite; } } break; case 'id': $product_name = $base_product->id; break; default: $product_name = EcsGtmProTools::cleanString(Product::getProductName($base_product->id, 0, $id_lang)); break; } $product_name = trim($product_name); if (empty($product_name)) { $product_name = 'Unknown product name'; } return $product_name; } }