parent
a94aa694ba
commit
2c710512cb
@ -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…
Reference in new issue