<?php
declare(strict_types=1);
namespace App\Base\EventSubscriber;
use App\Base\Internal\Logger\Service\LoggerService;
use App\Billing\Client\Client as BillingClient;
use Pimcore\Event\Model\UserRoleEvent;
use Pimcore\Event\UserRoleEvents;
use Pimcore\Model\User;
use Psr\Log\LoggerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class UserActivationSubscriber implements EventSubscriberInterface
{
private LoggerInterface $logger;
public function __construct(
private BillingClient $billingClient,
) {
$this->logger = LoggerService::create(__METHOD__, 'EventSubscriber/UserActivationSubscriber.log');
}
public static function getSubscribedEvents(): array
{
return [
UserRoleEvents::POST_UPDATE => 'onUserPostUpdate',
];
}
public function onUserPostUpdate(UserRoleEvent $event): void
{
/** @var User $user */
$user = $event->getUserRole();
if (!$user instanceof User) {
return;
}
// Активируем только если переключаем из неактивного в активный
if ($user->isActive() === true) {
$this->handleUserActivation($user);
}
}
private function handleUserActivation(User $user): void
{
$this->logger->info('Пользователь активирован в админке → создаём в биллинге', [
'user_id' => $user->getId(),
'email' => $user->getEmail(),
'username' => $user->getUsername(),
]);
try {
$this->billingClient->createUser($user);
} catch (\Exception $e) {
$this->logger->error('Ошибка при создании пользователя в биллинге', [
'user_id' => $user->getId(),
'email' => $user->getEmail(),
'error' => $e->getMessage(),
]);
}
}
}