<?php declare(strict_types=1);
namespace fourtwosix\PreOrder\Subscriber;
use Shopware\Core\Content\Product\ProductEvents;
use Shopware\Core\Framework\DataAbstractionLayer\Event\EntityLoadedEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Shopware\Core\System\SystemConfig\SystemConfigService;
use Shopware\Storefront\Page\Product;
use Shopware\Storefront\Page\Checkout\Cart\CheckoutCartPageLoadedEvent;
class ProductDetails implements EventSubscriberInterface
{
/**
* @var SystemConfigService
*/
private $systemConfigService;
public function __construct(SystemConfigService $systemConfigService)
{
$this->systemConfigService = $systemConfigService;
}
public static function getSubscribedEvents(): array
{
return[
ProductEvents::PRODUCT_LOADED_EVENT => 'onProductDetails',
CheckoutCartPageLoadedEvent::class => 'onCartPage'
];
}
public function onProductDetails(EntityLoadedEvent $event)
{
$buttonColor = $this->systemConfigService->get('fourtwosixPreOrderProduct.config.preOrderButtonColor');
if ($buttonColor == null) $buttonColor = "";
$matches = array();
preg_match('/#([a-f0-9]{3}){1,2}\b/i', $buttonColor, $matches);
if(count($matches) > 0){
$buttonColor = $matches[0];
$entities = $event->getEntities();
foreach( $entities as $entity ){
$extensions = $entity->getExtensions();
$extensions['preorder_button_color'] = $buttonColor;
$entity->setExtensions($extensions);
}
}
}
public function onCartPage(CheckoutCartPageLoadedEvent $event) {
/* add to lineItems extensions the release date indicator */
$cart_release_dates = [];
$lineItems = $event->getPage()->getCart()->getLineItems();
foreach ($lineItems as $lineItem) {
foreach ($event->getPage()->getCart()->getData() as $originalProduct) {
if(!$originalProduct instanceof \Shopware\Core\Content\Product\SalesChannel\SalesChannelProductEntity) {
continue;
}
if (!is_array($originalProduct) && get_class($originalProduct) == "Shopware\Core\Content\Product\SalesChannel\SalesChannelProductEntity"
&& $lineItem->getId() == $originalProduct->getId()) {
if (isset($originalProduct->getCustomFields()["preorder_enabled"]) && $originalProduct->getCustomFields()["preorder_enabled"])
if ($originalProduct->getReleaseDate())
$cart_release_dates[$lineItem->getId()] = $originalProduct->getReleaseDate()->format("Y-m-d H:i:s");
break;
}
}
}
$event->getPage()->setExtensions([
"fourtwosixPreorderCartReleaseDates" => $cart_release_dates
]);
}
}