src/Base/EventSubscriber/UserActivationSubscriber.php line 32

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Base\EventSubscriber;
  4. use App\Base\Internal\Logger\Service\LoggerService;
  5. use App\Billing\Client\Client as BillingClient;
  6. use Pimcore\Event\Model\UserRoleEvent;
  7. use Pimcore\Event\UserRoleEvents;
  8. use Pimcore\Model\User;
  9. use Psr\Log\LoggerInterface;
  10. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  11. class UserActivationSubscriber implements EventSubscriberInterface
  12. {
  13.     private LoggerInterface $logger;
  14.     public function __construct(
  15.         private BillingClient $billingClient,
  16.     ) {
  17.         $this->logger LoggerService::create(__METHOD__'EventSubscriber/UserActivationSubscriber.log');
  18.     }
  19.     public static function getSubscribedEvents(): array
  20.     {
  21.         return [
  22.             UserRoleEvents::POST_UPDATE => 'onUserPostUpdate',
  23.         ];
  24.     }
  25.     public function onUserPostUpdate(UserRoleEvent $event): void
  26.     {
  27.         /** @var User $user */
  28.         $user $event->getUserRole();
  29.         if (!$user instanceof User) {
  30.             return;
  31.         }
  32.         // Активируем только если переключаем из неактивного в активный
  33.         if ($user->isActive() === true) {
  34.             $this->handleUserActivation($user);
  35.         }
  36.     }
  37.     private function handleUserActivation(User $user): void
  38.     {
  39.         $this->logger->info('Пользователь активирован в админке → создаём в биллинге', [
  40.             'user_id'  => $user->getId(),
  41.             'email'    => $user->getEmail(),
  42.             'username' => $user->getUsername(),
  43.         ]);
  44.         try {
  45.             $this->billingClient->createUser($user);
  46.         } catch (\Exception $e) {
  47.             $this->logger->error('Ошибка при создании пользователя в биллинге', [
  48.                 'user_id' => $user->getId(),
  49.                 'email'   => $user->getEmail(),
  50.                 'error'   => $e->getMessage(),
  51.             ]);
  52.         }
  53.     }
  54. }