<?php declare(strict_types=1);
namespace Okeonline\KejeSearchOrdersInStorefront\Storefront\Subscribers;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\ContainsFilter;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\MultiFilter;
use Shopware\Storefront\Event\RouteRequest\OrderRouteRequestEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\RequestStack;
class OrderRouteRequestEventSubscriber implements EventSubscriberInterface
{
/**
* @var OrderRouteRequestEvent
*/
private $event;
/**
* @var RequestStack
*/
private $requestStack;
public function __construct(
RequestStack $requestStack
)
{
$this->requestStack = $requestStack;
}
public static function getSubscribedEvents(): array
{
return [
OrderRouteRequestEvent::class => ['filterOrderQuery', 0]
];
}
public function filterOrderQuery(OrderRouteRequestEvent $event)
{
$this->event = $event;
if(!$this->requestStack->getCurrentRequest()->query->has('searchterm'))
{
return;
}
$searchQuery = $this->requestStack->getCurrentRequest()->query->get('searchterm') ?? null;
if(empty($searchQuery)){
return;
}
$criteria = $this->event->getCriteria();
$criteria->addFilter(
new MultiFilter(
MultiFilter::CONNECTION_OR,
[
new EqualsFilter('orderNumber', $searchQuery),
new ContainsFilter('customFields', sprintf('"oo_checkout_extra_data_reference":"%s', $searchQuery))
]
)
);
}
}