<?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\EnevDefinition;
use Gbmed\Enev\Service\ImportExport as ImportExportService;
use Shopware\Core\Content\ImportExport\Event\ImportExportBeforeExportRecordEvent;
use Shopware\Core\Content\ImportExport\Event\ImportExportBeforeImportRecordEvent;
use Shopware\Core\Framework\Context;
use Shopware\Core\Framework\Uuid\Uuid;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class ImportExport implements EventSubscriberInterface
{
private ImportExportService $productService;
/**
* @param ImportExportService $productService
*/
public function __construct(
ImportExportService $productService
) {
$this->productService = $productService;
}
public static function getSubscribedEvents(): array
{
return [
ImportExportBeforeExportRecordEvent::class => 'onExportRecord',
ImportExportBeforeImportRecordEvent::class => 'onImportRecord',
];
}
/**
* @param ImportExportBeforeExportRecordEvent $event
*/
public function onExportRecord(ImportExportBeforeExportRecordEvent $event): void
{
if($event->getConfig()->get('sourceEntity') !== EnevDefinition::ENTITY_NAME){
return;
}
$record = $event->getRecord();
$context = Context::createDefaultContext();
$product = $this->productService->findProductById($record['product'], $context);
if ($product) {
$record['product'] = $product->getProductNumber();
}
$event->setRecord($record);
}
/**
* @param ImportExportBeforeImportRecordEvent $event
*/
public function onImportRecord(ImportExportBeforeImportRecordEvent $event): void
{
if($event->getConfig()->get('sourceEntity') !== EnevDefinition::ENTITY_NAME){
return;
}
$context = $event->getContext();
$row = $event->getRow();
$record = array_merge(
$event->getRecord(),
[
'productId' => $row['product'],
'mediaId' => $row['media'],
'datasheetId' => $row['datasheet'],
'iconId' => $row['icon'],
]
);
$record = $this->productService->getMedias($record, $context);
$product = $this->productService->findProductByNumber($record['productId'], $context);
if ($product) {
$record['productId'] = $product->getId();
}
$event->setRecord($this->productService->prepareData($record));
}
}