<?php declare(strict_types=1);
/**
* gb media
* All Rights Reserved.
*
* Unauthorized copying of this file, via any medium is strictly prohibited.
* The content of this file is proprietary and confidential.
*
* @category Shopware
* @package Shopware_Plugins
* @subpackage GbmedEnev
* @copyright Copyright (c) 2019, gb media
* @license proprietary
* @author Giuseppe Bottino
* @link http://www.gb-media.biz
*/
namespace Gbmed\Enev\Subscriber;
use Gbmed\Enev\Core\Content\Enev\EnevCollection;
use Gbmed\Enev\Core\Content\Enev\EnevDefinition;
use Gbmed\Enev\Core\Content\Enev\EnevEntity;
use Gbmed\Enev\Core\Content\Enev\EnevHydrator;
use Gbmed\Enev\Service\Product as ProductService;
use Shopware\Core\Checkout\Cart\LineItem\LineItem;
use Shopware\Core\Checkout\Order\Aggregate\OrderLineItem\OrderLineItemCollection;
use Shopware\Core\Content\Media\MediaEntity;
use Shopware\Storefront\Page\Checkout\Finish\CheckoutFinishPageLoadedEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Exception;
class CheckoutPage implements EventSubscriberInterface
{
public static function getSubscribedEvents(): array
{
return [
CheckoutFinishPageLoadedEvent::class => 'onCheckoutFinishPageLoadedEvent',
];
}
/**
* @param CheckoutFinishPageLoadedEvent $event
* @throws Exception
*/
public function onCheckoutFinishPageLoadedEvent(CheckoutFinishPageLoadedEvent $event): void
{
$lineItems = $event->getPage()->getOrder()->getLineItems();
if (!$lineItems) {
return;
}
$this->addExtension($lineItems);
}
/**
* helper to add extension
*
* @param OrderLineItemCollection $lineItems
* @throws Exception
*/
protected function addExtension(
OrderLineItemCollection $lineItems
): void {
/** @var LineItem $lineItem */
foreach ($lineItems as $lineItem) {
$payload = $lineItem->getPayload();
if (!isset($payload['extensions']) || !isset($payload['extensions'][EnevDefinition::propertyName()])) {
continue;
}
$collection = $payload['extensions'][EnevDefinition::propertyName()];
$enevCollection = null;
if (is_array($collection)) {
$enevCollection = new EnevCollection();
foreach ($collection as $item) {
$entity = (new EnevHydrator())->assign($item);
$enevCollection->set($item['id'], $entity);
}
}
$lineItem->addExtension(EnevDefinition::propertyName(), $enevCollection);
}
}
}