<?php declare(strict_types=1);
namespace Kalif_Feeria_Employees\Storefront\Subscriber;
use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Sorting\FieldSorting;
use Shopware\Storefront\Page\Navigation\NavigationPageLoadedEvent;
use Shopware\Storefront\Page\Product\ProductPageLoadedEvent;
use Shopware\Storefront\Page\Checkout\Cart\CheckoutCartPageLoadedEvent;
use Shopware\Storefront\Page\Checkout\Register\CheckoutRegisterPageLoadedEvent;
use Shopware\Storefront\Page\Checkout\Confirm\CheckoutConfirmPageLoadedEvent;
use Shopware\Storefront\Page\Checkout\Finish\CheckoutFinishPageLoadedEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class PagesSubscriber implements EventSubscriberInterface
{
/**
* @var EntityRepositoryInterface
*/
private $employeesRepository;
public function __construct(EntityRepositoryInterface $employeesRepository)
{
$this->employeesRepository = $employeesRepository;
}
public static function getSubscribedEvents(): array
{
return [
NavigationPageLoadedEvent::class => 'addEmployeesToNavigationPageExtention',
ProductPageLoadedEvent::class => 'addEmployeesToProductPageExtention',
CheckoutCartPageLoadedEvent::class => 'addEmployeesToCheckoutCartPageExtention',
CheckoutRegisterPageLoadedEvent::class => 'addEmployeesToCheckoutRegisterPagePageExtention',
CheckoutConfirmPageLoadedEvent::class => 'addEmployeesToCheckoutConfirmPagePageExtention',
CheckoutFinishPageLoadedEvent::class => 'addEmployeesToCheckoutFinishPagePageExtention',
];
}
// basic static page event, category page, cms page
public function addEmployeesToNavigationPageExtention(NavigationPageLoadedEvent $event): void
{
$this->getEmployees($event);
}
// product page
public function addEmployeesToProductPageExtention(ProductPageLoadedEvent $event): void
{
$this->getEmployees($event);
}
// cart page
public function addEmployeesToCheckoutCartPageExtention(CheckoutCartPageLoadedEvent $event): void
{
$this->getEmployees($event);
}
// checkout registration page
public function addEmployeesToCheckoutRegisterPagePageExtention(CheckoutRegisterPageLoadedEvent $event): void
{
$this->getEmployees($event);
}
// checkout confirm page
public function addEmployeesToCheckoutConfirmPagePageExtention(CheckoutConfirmPageLoadedEvent $event): void
{
$this->getEmployees($event);
}
// checkout finish page
public function addEmployeesToCheckoutFinishPagePageExtention(CheckoutFinishPageLoadedEvent $event): void
{
$this->getEmployees($event);
}
public function getEmployees($event)
{
$criteria = new Criteria();
$criteria->addFilter(new EqualsFilter('active', true));
$criteria->addSorting(new FieldSorting('order', 'ASC'));
// Get all employees with Criteria to footer extention
$employeesQueryResult = $this->employeesRepository
->search(
$criteria,
$event->getContext()
);
$event->getPage()->addExtension('employees', $employeesQueryResult);
}
}