Files
wyczarujprezent.pl/modules/zakeke/classes/ZakekeEditUrl.php
2024-10-28 22:14:22 +01:00

137 lines
3.9 KiB
PHP

<?php
/**
* Copyright (C) 2020 Futurenext srl
*
* This file is part of Zakeke.
*
* Zakeke Interactive Product Designer can not be copied and/or distributed
* without the express permission of Futurenext srl
*
* @author Futurenext srl <help@zakeke.com>
* @copyright 2019 Futurenext srl
* @license https://www.zakeke.com/privacy/#general_conditions
*/
class ZakekeEditUrl
{
/** @var array */
private $product;
/** @var string */
private $customization_data;
/** @var Context */
private $context;
/**
* ZakekeEditLink constructor.
*
* @param array $product
* @param string $customization_data
* @param Context|null $context
*/
public function __construct($product, $customization_data, Context $context = null)
{
if (!$context) {
$context = Context::getContext();
}
$this->product = $product;
$this->customization_data = $customization_data;
$this->context = $context;
}
/**
* Get the configuration from the PrestaShop customization data
*
* @param string $customization_data
* @return string|false
*/
private static function getConfiguration($customization_data)
{
if (_PS_VERSION_ < 1.7) {
$id_zakeke_configuration_item = ZakekeConfiguratorItem::zakekeConfiguratorItemId($customization_data);
if ($id_zakeke_configuration_item === false) {
return false;
}
return $customization_data;
} else {
try {
$zakekeData = json_decode($customization_data, true);
if (!isset($zakekeData['c'])) {
return false;
}
return $zakekeData['c'];
} catch (Exception $e) {
return false;
}
}
}
/**
* Get the configuration from the PrestaShop customization data
*
* @param string $customization_data
* @return string|false
*/
private static function getDesign($customization_data)
{
if (_PS_VERSION_ < 1.7) {
$zakeke_item_id = ZakekeItem::zakekeItemId($customization_data);
if ($zakeke_item_id === false) {
return false;
}
return $customization_data;
} else {
try {
$zakekeData = json_decode($customization_data, true);
if (!isset($zakekeData['d'])) {
return false;
}
return $zakekeData['d'];
} catch (Exception $e) {
return false;
}
}
}
/**
* Get the edit url for a cart item
*
* @return string|false
*/
public function getEditUrl()
{
$design = self::getDesign($this->customization_data);
$configuration = self::getConfiguration($this->customization_data);
if ($design === false && $configuration === false) {
return false;
}
$inputArray = array(
'id_product' => $this->product['id_product'],
'token' => Tools::getToken(false),
'qty' => $this->product['cart_quantity'],
'remove_from_cart_url' => $this->product['remove_from_cart_url']
);
if ($design) {
$inputArray['design'] = $design;
return $this->context->link->getModuleLink('zakeke', 'customizer', $inputArray);
} else {
$id_product_attribute = $this->product['id_product_attribute'];
$combination = new Combination($id_product_attribute);
foreach ($combination->getWsProductOptionValues() as $idx => $value) {
$inputArray['group[' . ($idx + 1) . ']'] = $value['id'];
}
$inputArray['configuration'] = $configuration;
return $this->context->link->getModuleLink('zakeke', 'configurator', $inputArray);
}
}
}