<?php
declare(strict_types=1);
namespace BitBag\OpenMarketplace\Component\Organization\EventListener;
use BitBag\OpenMarketplace\Component\Organization\Email\OrganizationEmailManagerInterface;
use BitBag\OpenMarketplace\Component\Vendor\Entity\ShopUserInterface;
use Sylius\Bundle\ResourceBundle\Event\ResourceControllerEvent;
final class ManageUserListener
{
private ?ShopUserInterface $originalUser = null;
public function __construct(
private OrganizationEmailManagerInterface $emailManager,
) {
}
public function setOriginalState(ResourceControllerEvent $event): void
{
$user = $event->getSubject();
if (!$user instanceof ShopUserInterface) {
return;
}
if (null === $this->originalUser) {
$this->originalUser = clone $user;
}
}
public function checkForChanges(ResourceControllerEvent $event): void
{
$user = $event->getSubject();
if (!$user instanceof ShopUserInterface || !$this->originalUser instanceof ShopUserInterface) {
return;
}
if (false === $user->isEnabled() && true === $this->originalUser->isEnabled()) {
$this->emailManager->sendUserAccountSuspendedEmail($user);
}
if ($user->getRoles() !== $this->originalUser->getRoles()) {
$this->emailManager->sendUserRoleChangedEmail($user);
}
}
}