Minor - Fix course access

pull/2487/merge
Julio Montoya 7 years ago
parent a4976f6523
commit 74fcbb017f
  1. 2
      config/packages/dev/web_profiler.yaml
  2. 12
      main/inc/global.inc.php
  3. 4
      main/inc/lib/api.lib.php
  4. 1
      main/inc/lib/login.lib.php
  5. 2
      main/inc/lib/security.lib.php
  6. 2
      main/inc/local.inc.php
  7. 12
      src/CoreBundle/EventListener/LegacyListener.php
  8. 2
      src/CoreBundle/EventListener/LegacyLoginListener.php
  9. 17
      src/CoreBundle/EventListener/LoginSuccessHandler.php
  10. 12
      src/CoreBundle/Framework/Container.php
  11. 5
      src/CoreBundle/Resources/config/services.yml
  12. 4
      src/CourseBundle/Controller/ToolBaseController.php
  13. 48
      src/CourseBundle/EventListener/CourseListener.php
  14. 2
      src/CourseBundle/Resources/config/services.yml

@ -1,6 +1,6 @@
web_profiler: web_profiler:
toolbar: true toolbar: true
intercept_redirects: false intercept_redirects: true
framework: framework:
profiler: profiler:
only_exceptions: false only_exceptions: false

@ -46,9 +46,7 @@ try {
$env = $_SERVER['APP_ENV'] ?? 'dev'; $env = $_SERVER['APP_ENV'] ?? 'dev';
$kernel = new Chamilo\Kernel($env, true); $kernel = new Chamilo\Kernel($env, true);
$request = Sonata\PageBundle\Request\RequestFactory::createFromGlobals( $request = Sonata\PageBundle\Request\RequestFactory::createFromGlobals('host_with_path_by_locale');
'host_with_path_by_locale'
);
// This 'load_legacy' variable is needed to know that symfony is loaded using old style legacy mode, // This 'load_legacy' variable is needed to know that symfony is loaded using old style legacy mode,
// and not called from a symfony controller from public/ // and not called from a symfony controller from public/
@ -255,7 +253,7 @@ try {
} }
// Error reporting settings. // Error reporting settings.
if (api_get_setting('server_type') == 'test') { if (api_get_setting('server_type') === 'test') {
ini_set('display_errors', '1'); ini_set('display_errors', '1');
ini_set('html_errors', '1'); ini_set('html_errors', '1');
error_reporting(-1); error_reporting(-1);
@ -517,7 +515,7 @@ try {
} }
// include the local (contextual) parameters of this course or section // include the local (contextual) parameters of this course or section
require __DIR__.'/local.inc.php'; //require_once __DIR__.'/local.inc.php';
$_user = api_get_user_info(); $_user = api_get_user_info();
// The global variable $text_dir has been defined in the language file trad4all.inc.php. // The global variable $text_dir has been defined in the language file trad4all.inc.php.
@ -599,9 +597,9 @@ try {
// Forcing PclZip library to use a custom temporary folder. // Forcing PclZip library to use a custom temporary folder.
define('PCLZIP_TEMPORARY_DIR', api_get_path(SYS_ARCHIVE_PATH)); define('PCLZIP_TEMPORARY_DIR', api_get_path(SYS_ARCHIVE_PATH));
} catch (Exception $e) { } catch (Exception $e) {
var_dump($e->getMessage()); /*var_dump($e->getMessage());
var_dump($e->getCode()); var_dump($e->getCode());
var_dump($e->getLine()); var_dump($e->getLine());
echo $e->getTraceAsString(); echo $e->getTraceAsString();
exit; exit;*/
} }

@ -1979,7 +1979,7 @@ function api_get_cidreq($addSessionId = true, $addGroupId = true, $origin = '')
} }
if (!empty($url)) { if (!empty($url)) {
$url .= '&gradebook='.intval(api_is_in_gradebook()); $url .= '&gradebook='.(int) api_is_in_gradebook();
$url .= '&origin='.$origin; $url .= '&origin='.$origin;
} }
@ -2054,7 +2054,7 @@ function api_get_course_info($course_code = null, $strict = false)
return $courseInfo; return $courseInfo;
} }
global $_course; $_course = Session::read('_course');
if ($_course == '-1') { if ($_course == '-1') {
$_course = []; $_course = [];
} }

@ -392,6 +392,7 @@ class Login
*/ */
public static function init_course($course_id, $reset) public static function init_course($course_id, $reset)
{ {
return;
global $is_platformAdmin; global $is_platformAdmin;
global $_user; global $_user;

@ -309,7 +309,7 @@ class Security
} }
} }
if ($user_status == COURSEMANAGERLOWSECURITY) { if ($user_status === COURSEMANAGERLOWSECURITY) {
return $var; // No filtering. return $var; // No filtering.
} }

@ -1,6 +1,6 @@
<?php <?php
/* For licensing terms, see /license.txt */ /* For licensing terms, see /license.txt */
return;
use Chamilo\CoreBundle\Component\Utils\ChamiloApi; use Chamilo\CoreBundle\Component\Utils\ChamiloApi;
use ChamiloSession as Session; use ChamiloSession as Session;

@ -100,6 +100,14 @@ class LegacyListener
$twig->addGlobal($index, $value); $twig->addGlobal($index, $value);
} }
$userId = $session->get('_uid');
$userInfo = api_get_user_info($userId);
$userInfo['is_anonymous'] = false;
$session->set('_user', $userInfo);
$session->set('is_platformAdmin', \UserManager::is_admin($userId));
$session->set('is_allowedCreateCourse', $userInfo['status'] === 1);
$_admin = [ $_admin = [
'email' => api_get_setting('emailAdministrator'), 'email' => api_get_setting('emailAdministrator'),
'surname' => api_get_setting('administratorSurname'), 'surname' => api_get_setting('administratorSurname'),
@ -154,9 +162,7 @@ class LegacyListener
</div>'; </div>';
} }
if (api_get_setting('show_link_ticket_notification') == 'true' && if (api_get_setting('show_link_ticket_notification') === 'true' && $allow) {
$allow
) {
// by default is project_id = 1 // by default is project_id = 1
$defaultProjectId = 1; $defaultProjectId = 1;
$allow = \TicketManager::userIsAllowInProject(api_get_user_info(), $defaultProjectId); $allow = \TicketManager::userIsAllowInProject(api_get_user_info(), $defaultProjectId);

@ -18,7 +18,7 @@ use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
* Class LegacyLoginListener. * Class LegacyLoginListener.
* File not needed the real listener is LegacyListener. * File not needed the real listener is LegacyListener.
* *
* @deprecated * @deprecated use LegacyListener
* *
* @package Chamilo\CoreBundle\EventListener * @package Chamilo\CoreBundle\EventListener
*/ */

@ -46,14 +46,15 @@ class LoginSuccessHandler implements AuthenticationSuccessHandlerInterface
$user = $token->getUser(); $user = $token->getUser();
$userId = $user->getId(); $userId = $user->getId();
$session = $request->getSession(); $session = $request->getSession();
$userInfo = api_get_user_info($user->getId());
$userInfo['is_anonymous'] = false; //$userInfo = api_get_user_info($user->getId());
//$userInfo['is_anonymous'] = false;
// Backward compatibility. // Backward compatibility.
//$ip = $request->getClientIp(); //$ip = $request->getClientIp();
// Setting user info. // Setting user info.
$session->set('_user', $userInfo); //$session->set('_user', $user);
// Setting admin permissions for. // Setting admin permissions for.
if ($this->checker->isGranted('ROLE_ADMIN')) { if ($this->checker->isGranted('ROLE_ADMIN')) {
@ -91,13 +92,13 @@ class LoginSuccessHandler implements AuthenticationSuccessHandlerInterface
} }
} }
Session::write('_uid', $user->getId()); $session->set('_uid', $user->getId());
Session::write('_user', $userInfo); //$session->set('_user', $userInfo);
Session::write('is_platformAdmin', (bool) \UserManager::is_admin($userId)); //$session->set('is_platformAdmin', \UserManager::is_admin($userId));
Session::write('is_allowedCreateCourse', (bool) ($userInfo['status'] == 1)); //$session->set('is_allowedCreateCourse', $userInfo['status'] === 1);
// Redirecting to a course or a session. // Redirecting to a course or a session.
if (api_get_setting('course.go_to_course_after_login') == 'true') { if (api_get_setting('course.go_to_course_after_login') === 'true') {
// Get the courses list // Get the courses list
$personal_course_list = \UserManager::get_personal_session_course_list($userId); $personal_course_list = \UserManager::get_personal_session_course_list($userId);
$my_session_list = []; $my_session_list = [];

@ -399,9 +399,9 @@ class Container
\Database::setManager($em); \Database::setManager($em);
\CourseManager::setEntityManager($em); \CourseManager::setEntityManager($em);
Container::setSettingsManager($container->get('chamilo.settings.manager')); self::setSettingsManager($container->get('chamilo.settings.manager'));
Container::setUserManager($container->get('fos_user.user_manager')); self::setUserManager($container->get('fos_user.user_manager'));
Container::setSiteManager($container->get('sonata.page.manager.site')); self::setSiteManager($container->get('sonata.page.manager.site'));
\CourseManager::setCourseSettingsManager($container->get('chamilo_course.settings.manager')); \CourseManager::setCourseSettingsManager($container->get('chamilo_course.settings.manager'));
\CourseManager::setCourseManager($container->get('chamilo_core.entity.manager.course_manager')); \CourseManager::setCourseManager($container->get('chamilo_core.entity.manager.course_manager'));
@ -409,10 +409,10 @@ class Container
// Setting course tool chain (in order to create tools to a course) // Setting course tool chain (in order to create tools to a course)
\CourseManager::setToolList($container->get('chamilo_course.tool_chain')); \CourseManager::setToolList($container->get('chamilo_course.tool_chain'));
Container::$session = $container->get('session'); self::$session = $container->get('session');
// Setting legacy properties. // Setting legacy properties.
Container::$dataDir = $container->get('kernel')->getDataDir(); self::$dataDir = $container->get('kernel')->getDataDir();
Container::$courseDir = $container->get('kernel')->getDataDir(); self::$courseDir = $container->get('kernel')->getDataDir();
} }
} }

@ -133,7 +133,7 @@ services:
calls: calls:
- [setContainer, ['@service_container']] - [setContainer, ['@service_container']]
tags: tags:
- {name: kernel.event_listener, event: kernel.request, method: onKernelRequest, priority: 10} - {name: kernel.event_listener, event: kernel.request, method: onKernelRequest, priority: 7}
- {name: kernel.event_listener, event: kernel.response, method: onKernelResponse} - {name: kernel.event_listener, event: kernel.response, method: onKernelResponse}
- {name: kernel.event_listener, event: kernel.controller, method: onKernelController} - {name: kernel.event_listener, event: kernel.controller, method: onKernelController}
@ -144,8 +144,9 @@ services:
- [setContainer, ['@service_container']] - [setContainer, ['@service_container']]
tags: tags:
- {name: kernel.event_listener, event: kernel.request, method: onKernelRequest} - {name: kernel.event_listener, event: kernel.request, method: onKernelRequest}
- {name: kernel.event_listener, event: kernel.controller, method: onKernelController, priority: 11} - {name: kernel.event_listener, event: kernel.controller, method: onKernelController, priority: 4}
# deprecated use
# chamilo_core.listener.legacy_login_listener: # chamilo_core.listener.legacy_login_listener:
# class: Chamilo\CoreBundle\EventListener\LegacyLoginListener # class: Chamilo\CoreBundle\EventListener\LegacyLoginListener
# arguments: ["@service_container", '@security.token_storage'] # arguments: ["@service_container", '@security.token_storage']

@ -171,14 +171,14 @@ abstract class ToolBaseController extends BaseController implements ToolInterfac
$sessionHandler->set('_real_cid', $courseId); $sessionHandler->set('_real_cid', $courseId);
$sessionHandler->set('_cid', $courseCode); $sessionHandler->set('_cid', $courseCode);
$sessionHandler->set('_course', $courseInfo); //$sessionHandler->set('_course', $courseInfo);
} else { } else {
$this->abort(404, $this->trans('Course not available')); $this->abort(404, $this->trans('Course not available'));
} }
} else { } else {
$sessionHandler->remove('_real_cid'); $sessionHandler->remove('_real_cid');
$sessionHandler->remove('_cid'); $sessionHandler->remove('_cid');
$sessionHandler->remove('_course'); //$sessionHandler->remove('_course');
} }
} }

@ -6,6 +6,8 @@ namespace Chamilo\CourseBundle\EventListener;
use Chamilo\CoreBundle\Controller\LegacyController; use Chamilo\CoreBundle\Controller\LegacyController;
use Chamilo\CoreBundle\Entity\Course; use Chamilo\CoreBundle\Entity\Course;
use Chamilo\CoreBundle\Entity\Session; use Chamilo\CoreBundle\Entity\Session;
use Chamilo\CoreBundle\Framework\Container;
use Chamilo\CoreBundle\Security\Authorization\Voter\CourseVoter; use Chamilo\CoreBundle\Security\Authorization\Voter\CourseVoter;
use Chamilo\CoreBundle\Security\Authorization\Voter\GroupVoter; use Chamilo\CoreBundle\Security\Authorization\Voter\GroupVoter;
use Chamilo\CoreBundle\Security\Authorization\Voter\SessionVoter; use Chamilo\CoreBundle\Security\Authorization\Voter\SessionVoter;
@ -48,7 +50,7 @@ class CourseListener
return; return;
} }
$sessionHandler = $event->getRequest()->getSession(); $sessionHandler = $request->getSession();
$container = $this->container; $container = $this->container;
$translator = $container->get('translator'); $translator = $container->get('translator');
@ -60,33 +62,39 @@ class CourseListener
$courseCode = $courseCodeFromRequest; $courseCode = $courseCodeFromRequest;
} }
if (empty($courseCode)) {
if (!empty($request->get('cDir'))) {
$courseCode = $request->get('cDir');
}
}
/** @var EntityManager $em */ /** @var EntityManager $em */
$em = $container->get('doctrine')->getManager(); $em = $container->get('doctrine')->getManager();
$checker = $container->get('security.authorization_checker'); $checker = $container->get('security.authorization_checker');
$user = $request->getUser();
var_dump(get_class($user));
var_dump(get_class($sessionHandler));
var_dump(get_class($event));
/*$user = $this->container->get('security.token_storage')->getToken()->getUser();
var_dump(get_class($user));*/
var_dump($courseCode);
$alreadyVisited = $sessionHandler->get('course_already_visited'); $alreadyVisited = $sessionHandler->get('course_already_visited');
if (!empty($courseCode)) { if (!empty($courseCode)) {
/** @var Course $course */ /** @var Course $course */
$course = $em->getRepository('ChamiloCoreBundle:Course')->findOneByCode($courseCode); $course = $em->getRepository('ChamiloCoreBundle:Course')->findOneByCode($courseCode);
if ($course) { if ($course) {
$sessionHandler->set('courseObj', $course); $sessionHandler->set('courseObj', $course);
$courseInfo = api_get_course_info($courseCode);
$container->get('twig')->addGlobal('course', $course);
$sessionHandler->set('_real_cid', $course->getId());
$sessionHandler->set('_cid', $course->getCode());
$sessionHandler->set('_course', $courseInfo);
// Session // Session
$sessionId = intval($request->get('id_session')); $sessionId = (int) $request->get('id_session');
$session = null; $session = null;
// Group // Group
$groupId = intval($request->get('gidReq')); $groupId = (int) $request->get('gidReq');
if (empty($sessionId)) { if (empty($sessionId)) {
// Check if user is allowed to this course // Check if user is allowed to this course
// See CourseVoter.php // See CourseVoter.php
@ -156,7 +164,7 @@ class CourseListener
} }
} }
if (!$alreadyVisited || /*if (!$alreadyVisited ||
isset($alreadyVisited) && $alreadyVisited != $courseCode isset($alreadyVisited) && $alreadyVisited != $courseCode
) { ) {
// Course access events // Course access events
@ -171,12 +179,14 @@ class CourseListener
} }
$coursesAlreadyVisited[$course->getCode()] = 1; $coursesAlreadyVisited[$course->getCode()] = 1;
$sessionHandler->set('course_already_visited', $courseCode); $sessionHandler->set('course_already_visited', $courseCode);
} }*/
} else { } else {
throw new NotFoundHttpException( throw new NotFoundHttpException($translator->trans('CourseDoesNotExist'));
$translator->trans('CourseDoesNotExist')
);
} }
Container::setRequest($request);
Container::setContainer($container);
Container::setLegacyServices($container);
} }
} }
@ -227,8 +237,8 @@ class CourseListener
} }
}*/ }*/
$groupId = intval($request->get('gidReq')); $groupId = (int) $request->get('gidReq');
$sessionId = intval($request->get('id_session')); $sessionId = (int) $request->get('id_session');
$cidReset = $sessionHandler->get('cid_reset', false); $cidReset = $sessionHandler->get('cid_reset', false);
// This controller implements ToolInterface? Then set the course/session // This controller implements ToolInterface? Then set the course/session
@ -295,7 +305,7 @@ class CourseListener
$controllerAction = $request->get('_controller'); $controllerAction = $request->get('_controller');
if (!in_array($controllerAction, $ignore)) { if (!in_array($controllerAction, $ignore)) {
//error_log('remove'); //error_log('remove');
$this->removeCourseFromSession($request); //$this->removeCourseFromSession($request);
} }
} }
} }

@ -19,7 +19,7 @@ services:
calls: calls:
- [setContainer, ['@service_container']] - [setContainer, ['@service_container']]
tags: tags:
- {name: kernel.event_listener, event: kernel.request, method: onKernelRequest, priority: 200} - {name: kernel.event_listener, event: kernel.request, method: onKernelRequest, priority: 6}
- {name: kernel.event_listener, event: kernel.response, method: onKernelResponse} - {name: kernel.event_listener, event: kernel.response, method: onKernelResponse}
- {name: kernel.event_listener, event: kernel.controller, method: onKernelController} - {name: kernel.event_listener, event: kernel.controller, method: onKernelController}

Loading…
Cancel
Save