Observer/ViewContent.php (56 lines of code) (raw):
<?php
/**
* Copyright (c) Meta Platforms, Inc. and affiliates. All Rights Reserved
*/
namespace Facebook\BusinessExtension\Observer;
use Facebook\BusinessExtension\Helper\FBEHelper;
use Facebook\BusinessExtension\Helper\MagentoDataHelper;
use Facebook\BusinessExtension\Helper\ServerSideHelper;
use Magento\ConfigurableProduct\Model\Product\Type\Configurable;
use Magento\Framework\Event\Observer;
use Magento\Framework\Event\ObserverInterface;
use Facebook\BusinessExtension\Helper\ServerEventFactory;
class ViewContent implements ObserverInterface
{
/**
* @var FBEHelper
*/
protected $fbeHelper;
/**
* @var ServerSideHelper
*/
protected $serverSideHelper;
/**
* \Magento\Framework\Registry
*/
protected $registry;
/**
* @var MagentoDataHelper
*/
protected $_magentoDataHelper;
public function __construct(
FBEHelper $fbeHelper,
ServerSideHelper $serverSideHelper,
MagentoDataHelper $magentoDataHelper,
\Magento\Framework\Registry $registry
) {
$this->fbeHelper = $fbeHelper;
$this->registry = $registry;
$this->serverSideHelper = $serverSideHelper;
$this->_magentoDataHelper = $magentoDataHelper;
}
public function execute(Observer $observer)
{
try {
$eventId = $observer->getData('eventId');
$customData = [
'currency' => $this->_magentoDataHelper->getCurrency()
];
$product = $this->registry->registry('current_product');
if ($product && $product->getId()) {
$customData['value'] = $this->_magentoDataHelper->getValueForProduct($product);
$customData['content_ids'] = [$product->getId()];
$customData['content_category'] = $this->_magentoDataHelper->getCategoriesForProduct($product);
$customData['content_name'] = $product->getName();
$customData['contents'] = [
[
'product_id' => $product->getId(),
'item_price' => $this->_magentoDataHelper->getValueForProduct($product)
]
];
$customData['content_type'] = ($product->getTypeId() == Configurable::TYPE_CODE) ?
'product_group' : 'product';
}
$event = ServerEventFactory::createEvent('ViewContent', array_filter($customData), $eventId);
$this->serverSideHelper->sendEvent($event);
} catch (\Exception $e) {
$this->fbeHelper->log(json_encode($e));
}
return $this;
}
}