Adding listeners.

1.10.x
Julio Montoya 12 years ago
parent a94aa694ba
commit 2c710512cb
  1. 101
      src/ChamiloLMS/CoreBundle/EventListener/LegacyListener.php
  2. 3
      src/ChamiloLMS/CoreBundle/EventListener/LocaleListener.php
  3. 140
      src/ChamiloLMS/CoreBundle/EventListener/LoginSuccessHandler.php
  4. 48
      src/ChamiloLMS/CoreBundle/EventListener/LogoutSuccessHandler.php
  5. 44
      src/ChamiloLMS/CoreBundle/EventListener/MessageListener.php
  6. 34
      src/ChamiloLMS/CoreBundle/EventListener/ShowUserListener.php

@ -0,0 +1,101 @@
<?php
/* For licensing terms, see /license.txt */
namespace ChamiloLMS\CoreBundle\EventListener;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
use Symfony\Component\HttpFoundation\Cookie;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
use \ChamiloSession as Session;
class LegacyListener
{
protected $container;
public function __construct(ContainerInterface $container)
{
$this->container = $container;
}
public function onKernelRequest(GetResponseEvent $event)
{
$kernel = $event->getKernel();
$request = $event->getRequest();
$container = $this->container;
// Loading legacy variables
Session::setSession($request->getSession());
$dbConnection = $this->container->get('database_connection');
$database = new \Database($dbConnection, array());
\Database::setManager($this->container->get('doctrine')->getManager());
Session::$urlGenerator = $this->container->get('router');
Session::$security = $this->container->get('security.context');
Session::$translator = $this->container->get('translator');
Session::$rootDir = $this->container->get('kernel')->getRealRootDir();
Session::$logDir = $this->container->get('kernel')->getLogDir();
Session::$dataDir = $this->container->get('kernel')->getDataDir();
Session::$tempDir = $this->container->get('kernel')->getCacheDir();
Session::$courseDir = $this->container->get('kernel')->getDataDir();
Session::$configDir = $this->container->get('kernel')->getConfigDir();
// Injecting course in twig
$courseCode = $request->get('code');
if (empty($courseCode)) {
$courseCodeFromRequest = $request->get('cidReq');
$courseCode = $courseCodeFromRequest;
}
if (!empty($courseCode)) {
$em = $this->container->get('doctrine')->getManager();
$course = $em->getRepository('ChamiloLMSCoreBundle:Course')->findOneByCode($courseCode);
if ($course) {
$this->container->get('twig')->addGlobal('course', $course);
$request->getSession()->set('_real_cid', $course->getId());
$request->getSession()->set('_cid', $course->getCode());
$courseInfo = api_get_course_info($course->getCode());
$request->getSession()->set('_course', $courseInfo);
}
}
// Loading portal settings from DB.
$settingsRefreshInfo = api_get_settings_params_simple(array('variable = ?' => 'settings_latest_update'));
$settingsLatestUpdate = $settingsRefreshInfo ? $settingsRefreshInfo['selected_value'] : null;
$settings = Session::read('_setting');
if (empty($settings)) {
api_set_settings_and_plugins();
} else {
if (isset($settings['settings_latest_update']) && $settings['settings_latest_update'] != $settingsLatestUpdate) {
api_set_settings_and_plugins();
}
}
}
public function onKernelResponse(FilterResponseEvent $event)
{
$response = $event->getResponse();
$request = $event->getRequest();
$kernel = $event->getKernel();
$container = $this->container;
/*switch ($request->query->get('option')) {
case 2:
$response->setContent('Blah');
break;
case 3:
$response->headers->setCookie(new Cookie('test', 1));
break;
}*/
}
public function onKernelController(FilterControllerEvent $event)
{
}
}

@ -1,5 +1,6 @@
<?php
namespace ChamiloLMS\CoreBundle\Listener;
namespace ChamiloLMS\CoreBundle\EventListener;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;

@ -0,0 +1,140 @@
<?php
/* For licensing terms, see /license.txt */
namespace ChamiloLMS\CoreBundle\EventListener;
use Symfony\Component\Security\Http\Authentication\AuthenticationSuccessHandlerInterface;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Core\SecurityContext;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\Routing\Router;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use ChamiloLMS\UserBundle\Entity\User;
/**
* Class LoginSuccessHandler
*/
class LoginSuccessHandler implements AuthenticationSuccessHandlerInterface
{
protected $router;
protected $security;
/**
* @param Router $urlGenerator
* @param SecurityContext $security
*/
public function __construct($dbConnection, UrlGeneratorInterface $urlGenerator, SecurityContext $security)
{
//$dbConnection = $this->container->get('database_connection');
$database = new \Database($dbConnection, array());
$this->router = $urlGenerator;
$this->security = $security;
}
/**
* @param Request $request
* @param TokenInterface $token
* @return null|RedirectResponse|\Symfony\Component\Security\Http\Authentication\Response
*/
public function onAuthenticationSuccess(Request $request, TokenInterface $token)
{
/** @var User $user */
$user = $token->getUser();
$userId = $user->getId();
$session = $request->getSession();
\ChamiloSession::setSession($session);
\ChamiloSession::$urlGenerator = $this->router;
//event_login($user);
$userInfo = api_get_user_info($user->getId());
$userInfo['is_anonymous'] = false;
$request->getSession()->set('_user', $userInfo);
// Setting admin permissions.
if ($this->security->isGranted('ROLE_ADMIN')) {
$request->getSession()->set('is_platformAdmin', true);
}
// Setting teachers permissions.
if ($this->security->isGranted('ROLE_TEACHER')) {
$request->getSession()->set('is_allowedCreateCourse', true);
}
// Setting last login datetime
$session->set('user_last_login_datetime', api_get_utc_datetime());
$response = null;
/* Possible values: index.php, user_portal.php, main/auth/courses.php */
$pageAfterLogin = api_get_setting('page_after_login');
$url = null;
if ($this->security->isGranted('ROLE_STUDENT') && !empty($pageAfterLogin)) {
switch ($pageAfterLogin) {
case 'index.php':
$url = $this->router->generate('index');
break;
case 'user_portal.php':
$url = $this->router->generate('userportal');
break;
case 'main/auth/courses.php':
$url = api_get_path(WEB_PUBLIC_PATH).$pageAfterLogin;
break;
}
}
// Redirecting to a course or a session
if (api_get_setting('go_to_course_after_login') == 'true') {
// Get the courses list
$personal_course_list = \UserManager::get_personal_session_course_list($userId);
$my_session_list = array();
$count_of_courses_no_sessions = 0;
$count_of_courses_with_sessions = 0;
foreach ($personal_course_list as $course) {
if (!empty($course['session_id'])) {
$my_session_list[$course['session_id']] = true;
$count_of_courses_with_sessions++;
} else {
$count_of_courses_no_sessions++;
}
}
$count_of_sessions = count($my_session_list);
if ($count_of_sessions == 1 && $count_of_courses_no_sessions == 0) {
$key = array_keys($personal_course_list);
$course_info = $personal_course_list[$key[0]]['course_info'];
$id_session = isset($course_info['session_id']) ? $course_info['session_id'] : 0;
$url = api_get_path(WEB_COURSE_PATH).$course_info['directory'].'/index.php?id_session='.$id_session;
}
if ($count_of_sessions == 0 && $count_of_courses_no_sessions == 1) {
$key = array_keys($personal_course_list);
$course_info = $personal_course_list[$key[0]]['course_info'];
$url = api_get_path(WEB_COURSE_PATH).$course_info['directory'].'/index.php?id_session=0';
}
}
if (!empty($url)) {
$response = new RedirectResponse($url);
}
// Redirect the user to where they were before the login process begun.
if (empty($response)) {
$refererUrl = $request->headers->get('referer');
$response = new RedirectResponse($refererUrl);
}
return $response;
}
}

@ -0,0 +1,48 @@
<?php
/* For licensing terms, see /license.txt */
namespace ChamiloLMS\CoreBundle\EventListener;
use Symfony\Component\Security\Http\Logout\LogoutSuccessHandlerInterface;
use Symfony\Component\Security\Core\SecurityContext;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
/**
* Class LogoutSuccessHandler
*/
class LogoutSuccessHandler implements LogoutSuccessHandlerInterface
{
protected $router;
protected $security;
/**
* @param Router $urlGenerator
* @param SecurityContext $security
*/
public function __construct($dbConnection, UrlGeneratorInterface $urlGenerator, SecurityContext $security)
{
$database = new \Database($dbConnection, array());
$this->router = $urlGenerator;
$this->security = $security;
}
/**
* @param Request $request
* @return null|RedirectResponse
*/
public function onLogoutSuccess(Request $request)
{
$session = $request->getSession();
\ChamiloSession::setSession($session);
// Chamilo logout
//$userId = api_get_user_id();
//\Online::logout($userId, false);
$login = $this->router->generate('index');
$response = new RedirectResponse($login);
return $response;
}
}

@ -0,0 +1,44 @@
<?php
/* For licensing terms, see /license.txt */
namespace ChamiloLMS\CoreBundle\EventListener;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Avanzu\AdminThemeBundle\Event\MessageListEvent;
class MessageListener
{
protected $container;
public function __construct(ContainerInterface $container)
{
$this->container = $container;
}
public function onListMessages(MessageListEvent $event)
{
foreach ($this->getMessages() as $message) {
$event->addMessage($message);
}
}
protected function getMessages()
{
$threads = $this->container->get('fos_message.provider')->getInboxThreads();
$security = $this->container->get('security.context');
$token = $security->getToken();
$user = $token->getUser();
$messages = array();
/** @var \ChamiloLMS\CoreBundle\Entity\Thread $thread*/
foreach ($threads as $thread) {
if ($thread->isReadByParticipant($user)) {
foreach($thread->getMessages() as $message) {
$messages[] = $message;
}
}
}
return $messages;
}
}

@ -0,0 +1,34 @@
<?php
/* For licensing terms, see /license.txt */
namespace ChamiloLMS\CoreBundle\EventListener;
use Avanzu\AdminThemeBundle\Event\ShowUserEvent;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
class ShowUserListener
{
protected $container;
public function __construct(ContainerInterface $container)
{
$this->container = $container;
}
public function onShowUser(ShowUserEvent $event)
{
$user = $this->getUser();
$event->setUser($user);
}
public function getUser()
{
$security = $this->container->get('security.context');
$token = $security->getToken();
// $user = $this->getUser();
return $token->getUser();
}
}
Loading…
Cancel
Save