Current File : /var/www/vinorea/modules/klaviyopsautomation/controllers/front/addToCart.php |
<?php
/**
* Klaviyo
*
* NOTICE OF LICENSE
*
* This source file is subject to the Commercial License
* you can't distribute, modify or sell this code
*
* DISCLAIMER
*
* Do not edit or add to this file
* If you need help please contact extensions@klaviyo.com
*
* @author Klaviyo
* @copyright Klaviyo
* @license commercial
*/
if (!defined('_PS_VERSION_')) {
exit;
}
use KlaviyoPs\Classes\BusinessLogicServices\ProductPayloadService;
use KlaviyoPs\Classes\KlaviyoUtils;
use KlaviyoPs\Classes\KlaviyoValue;
use KlaviyoPs\KlaviyoPsAjaxModuleFrontController;
class KlaviyoPsAddToCartModuleFrontController extends KlaviyoPsAjaxModuleFrontController
{
/**
* @inheritDoc
*/
protected function ajaxProcess()
{
$payload = $this->buildAddedToCartPayload();
// If we cannot build a cart because we don't have a cart in context or if the cart is actually empty.
if (!isset($payload['ItemCount']) || $payload['ItemCount'] == 0) {
$this->errors[] = 'Invalid or empty cart.';
} else {
$this->returnData = $payload;
}
}
/**
* Build payload for Added to Cart event.
*
* @return array
*/
private function buildAddedToCartPayload()
{
$cartId = $this->context->cart->id;
$cartObject = new Cart($cartId);
$cartLineItemsArray = KlaviyoUtils::buildCartLineItemsArray($cartObject);
return array_merge(
$this->getAddedItem(),
array(
'$value' => $cartObject->getOrderTotal(),
'ItemNames' => $cartLineItemsArray['itemNames'],
'Items' => $cartLineItemsArray['lineItems'],
'ItemCount' => $cartLineItemsArray['itemCount'],
'Categories' => $cartLineItemsArray['uniqueCategories'],
'Tags' => $cartLineItemsArray['uniqueTags'],
'ReclaimCartUrl' => KlaviyoUtils::buildReclaimCartUrl($cartObject),
'external_catalog_id' => KlaviyoUtils::formatKlaviyoCatalogIdentifier($this->context->shop->id, $this->context->language->id),
'integration_key' => KlaviyoValue::SERVICE,
)
);
}
/**
* Get details of most recently added item to a cart.
*
* @return array
* @throws PrestaShopDatabaseException
* @throws PrestaShopException
*/
private function getAddedItem()
{
// Cart does not have getLastProduct method if no context.
try {
$itemDetails = $this->context->cart->getLastProduct();
} catch (Exception $e) {
return array();
}
// getLastProduct() can return false if item is not found.
if (!$itemDetails) {
return array();
}
$productId = $itemDetails['id_product'];
$langId = $this->context->language->id;
$shopId = $this->context->shop->id;
$product = new Product($itemDetails['id_product'], $full = false, $id_lang = $langId, $id_shop = $shopId);
return array(
'AddedItemCategories' => ProductPayloadService::getCategoryNamesForProduct($productId, $langId),
'AddedItemDescription' => strip_tags($itemDetails['description_short']),
'AddedItemImageURL' => KlaviyoUtils::getProductImageLink($productId, $itemDetails['id_product_attribute'], $shopId, $langId),
'AddedItemPrice' => (float) $itemDetails['price'],
'AddedItemPriceInclTax' => $product->getPrice(),
'AddedItemProductID' => (int) $productId,
'AddedItemProductName' => $itemDetails['name'],
'AddedItemSKU' => $itemDetails['reference'],
'AddedItemTags' => ProductPayloadService::getProductTagsArray($productId, $langId),
'AddedItemURL' => ProductPayloadService::getProductUrl($product, $langId, $shopId),
'AddedItemConstructedVariantID' => KlaviyoUtils::formatKlaviyoVariantIdentifier($itemDetails['id_product'], $itemDetails['id_product_attribute']),
);
}
}
class KlaviyoPsAutomationAddToCartModuleFrontController extends KlaviyoPsAddToCartModuleFrontController
{
}