Add userLocaleListener

ofaj
jmontoyaa 10 years ago
parent eef81dce65
commit 8e97fcbaed
  1. 9
      src/Chamilo/CoreBundle/EventListener/LegacyLoginListener.php
  2. 66
      src/Chamilo/CoreBundle/EventListener/UserLocaleListener.php
  3. 12
      src/Chamilo/CoreBundle/Resources/config/services.yml

@ -51,17 +51,18 @@ class LegacyLoginListener implements EventSubscriberInterface
if (!$isGranted) { if (!$isGranted) {
if (isset($_SESSION) && isset($_SESSION['_user'])) { if (isset($_SESSION) && isset($_SESSION['_user'])) {
if ($_SESSION['_user']['active'] == 1) { if ($_SESSION['_user']['active'] == 1) {
$userManager = $this->container->get('fos_user.user_manager');
$username = $_SESSION['_user']['username']; $username = $_SESSION['_user']['username'];
$criteria = ['username' => $username];
/** @var User $user */ /** @var User $user */
$user = $userManager->findUserByUsername($username); $user = $this->container->get('sonata.user.user_manager')->findOneBy($criteria);
if ($user) { if ($user) {
/** @var User $completeUser */
$completeUser = $this->container->get('doctrine')->getRepository('ChamiloUserBundle:User')->findOneBy($criteria);
$user->setLanguage($completeUser->getLanguage());
$token = new UsernamePasswordToken($user, null, "main", $user->getRoles()); $token = new UsernamePasswordToken($user, null, "main", $user->getRoles());
$this->tokenStorage->setToken($token); //now the user is logged in $this->tokenStorage->setToken($token); //now the user is logged in
//now dispatch the login event //now dispatch the login event
$event = new InteractiveLoginEvent($request, $token); $event = new InteractiveLoginEvent($request, $token);
$this->container->get("event_dispatcher")->dispatch("security.interactive_login", $event); $this->container->get("event_dispatcher")->dispatch("security.interactive_login", $event);

@ -0,0 +1,66 @@
<?php
/* For licensing terms, see /license.txt */
namespace Chamilo\CoreBundle\EventListener;
use Chamilo\CoreBundle\Entity\Course;
use Chamilo\SettingsBundle\Manager\SettingsManager;
use Chamilo\UserBundle\Entity\User;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\HttpKernelInterface;
use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
/**
* Class UserLocaleListener
*
* Stores the locale of the user in the session after the
* login. This can be used by the LocaleListener afterwards.
*
* Priority order: platform -> user
* Priority order: platform -> user -> course
*
* @package Chamilo\CoreBundle\EventListener
*/
class UserLocaleListener
{
/**
* @var Session
*/
private $session;
/**
* UserLocaleListener constructor.
* @param Session $session
*/
public function __construct(Session $session)
{
$this->session = $session;
}
/**
* Set locale when user enters the platform
* @param InteractiveLoginEvent $event
*/
public function onInteractiveLogin(InteractiveLoginEvent $event)
{
$languages = ['english' => 'en', 'spanish' => 'es', 'french' => 'fr'];
/** @var User $user */
$token = $event->getAuthenticationToken();
if ($token) {
$user = $token->getUser();
if ($user && isset($languages[$user->getLanguage()])) {
$user->setLocale($languages[$user->getLanguage()]);
$this->session->set('_locale', $user->getLocale());
$this->session->set('_locale_user', $user->getLocale());
}
}
/*if (null !== $user->getLocale()) {
$this->session->set('_locale', $user->getLocale());
$this->session->set('_locale_user', $user->getLocale());
}*/
}
}

@ -140,12 +140,12 @@ services:
- { name: kernel.event_listener, event: kernel.request, method: onKernelRequest } - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }
# Setting user and platform locale # Setting user and platform locale
# chamilo_core.listener.user_locale_listener: chamilo_core.listener.user_locale_listener:
# class: Chamilo\CoreBundle\EventListener\UserLocaleListener class: Chamilo\CoreBundle\EventListener\UserLocaleListener
# arguments: ["@session", "@chamilo.settings.manager"] arguments: ["@session"]
# tags: tags:
# - { name: kernel.event_listener, event: security.interactive_login, method: onInteractiveLogin } - { name: kernel.event_listener, event: security.interactive_login, method: onInteractiveLogin }
## - { name: kernel.event_listener, event: kernel.request, method: setLocaleForUnauthenticatedUser} # - { name: kernel.event_listener, event: kernel.request, method: setLocaleForUnauthenticatedUser}
# #
# # Settings listener # # Settings listener
# chamilo_core.listener.settings: # chamilo_core.listener.settings:

Loading…
Cancel
Save