<?php declare(strict_types=1);
namespace Neon\Configurator\Subscribers;
use Neon\Configurator\Neon6Configurator;
use Shopware\Core\Checkout\Cart\LineItem\LineItem;
use Shopware\Core\Checkout\Order\Aggregate\OrderLineItem\OrderLineItemEntity;
use Shopware\Storefront\Page\Checkout\Finish\CheckoutFinishPageLoadedEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Filesystem\Filesystem;
class OnCheckoutFinishPageLoaded implements EventSubscriberInterface
{
private $projectDir;
public function __construct($projectDir)
{
$this->projectDir = $projectDir . '/';
}
/**
* @inheritDoc
*/
public static function getSubscribedEvents()
{
return [
CheckoutFinishPageLoadedEvent::class => 'OnCheckoutFinishPageLoaded'
];
}
/**
* @param CheckoutFinishPageLoadedEvent $event
*/
public function OnCheckoutFinishPageLoaded(CheckoutFinishPageLoadedEvent $event): void
{
$page = $event->getPage();
$order = $page->getOrder();
$orderId = $order->getId();
$lineItems = $order->getLineItems()->getElements();
$filesystem = new Filesystem();
/** @var OrderLineItemEntity $lineItem */
foreach ($lineItems as $lineItem) {
$unitarticlePayloadValue = array_key_exists(Neon6Configurator::PAYLOAD_KEY, $lineItem->getPayload())
? $lineItem->getPayload()[Neon6Configurator::PAYLOAD_KEY]
: null;
if ($unitarticlePayloadValue != null) {
foreach ($unitarticlePayloadValue[Neon6Configurator::PAYLOAD_KEY_USER_CONFIGURATION] as $field) {
if ($field['field_type'] == 'upload' &&
$field['user_value_addon'] !== null &&
$field['user_value_addon'][0] !== null) {
if (!$filesystem->exists($this->projectDir . Neon6Configurator::FILE_FOLDER . 'uploads/orders/' . $orderId)) {
$filesystem->mkdir($this->projectDir . Neon6Configurator::FILE_FOLDER . 'uploads/orders/' . $orderId);
}
$fileName = $field['user_value']['uuid'] . '--' . $field['user_value_addon'][0]['name'];
if (!$filesystem->exists($this->projectDir . Neon6Configurator::FILE_FOLDER . 'uploads/orders/' . $orderId . '/' . $fileName)) {
$filesystem->copy($this->projectDir . Neon6Configurator::FILE_FOLDER . 'uploads/tmp/' . $fileName, $this->projectDir . Neon6Configurator::FILE_FOLDER . 'uploads/orders/' . $orderId . '/' . $fileName);
}
}
}
}
}
}
}