Bee-Lab/BeelabUserBundle

View on GitHub
Listener/LastLoginListener.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

namespace Beelab\UserBundle\Listener;

use Beelab\UserBundle\Manager\LightUserManager;
use Beelab\UserBundle\User\UserInterface;
use DateTime;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
use Symfony\Component\Security\Http\SecurityEvents;

/**
 * Set "last login" date when user login.
 */
class LastLoginListener implements EventSubscriberInterface
{
    protected $userManager;

    public function __construct(LightUserManager $userManager)
    {
        $this->userManager = $userManager;
    }

    public static function getSubscribedEvents(): array
    {
        return [
            SecurityEvents::INTERACTIVE_LOGIN => 'onSecurityInteractiveLogin',
        ];
    }

    public function onSecurityInteractiveLogin(InteractiveLoginEvent $event): void
    {
        $user = $event->getAuthenticationToken()->getUser();
        if ($user instanceof UserInterface) {
            $user->setLastLogin(new DateTime());
            $this->userManager->update($user);
        }
    }
}