<?php
declare(strict_types=1);
namespace K3n\Merchant\Subscriber\Checkout;
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\Filter\MultiFilter;
use Shopware\Core\System\User\UserCollection;
use Shopware\Core\System\User\UserEntity;
use Shopware\Storefront\Page\Checkout\Confirm\CheckoutConfirmPageLoadedEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class CheckoutConfirmPageLoaded implements EventSubscriberInterface
{
/**
* @var EntityRepositoryInterface
*/
private $userRepository;
/**
* @param EntityRepositoryInterface $userRepository
*/
public function __construct(EntityRepositoryInterface $userRepository)
{
$this->userRepository = $userRepository;
}
/**
* @return array
*/
public static function getSubscribedEvents(): array
{
return [
CheckoutConfirmPageLoadedEvent::class => 'onCheckoutConfirmPageLoaded'
];
}
/**
* @param CheckoutConfirmPageLoadedEvent $event
* @return void
*/
public function onCheckoutConfirmPageLoaded(CheckoutConfirmPageLoadedEvent $event): void
{
$page = $event->getPage();
$page->assign([
'merchantArray' => $this->getUsersByRole('Händler', $event),
'retailerArray' => $this->getUsersByRole('Retailer', $event),
]);
}
public function getUsersByRole(string $roleName, CheckoutConfirmPageLoadedEvent $event): array
{
$criteria = new Criteria();
$criteria->addAssociation('aclRoles');
$criteria->addFilter(
new MultiFilter(
MultiFilter::CONNECTION_OR,
[
new EqualsFilter('aclRoles.name', $roleName),
]
)
);
/** @var UserCollection $merchants */
$users = $this->userRepository->search($criteria, $event->getContext())->getElements();
$userArray = array();
/** @var UserEntity $merchant */
foreach ($users as $user) {
$userArray[$user->getId()] = $user->getFirstName().', '.$user->getLastName().', '.$user->getEmail();
}
return $userArray;
}
}