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:
toolbar: true
intercept_redirects: false
intercept_redirects: true
framework:
profiler:
only_exceptions: false

@ -46,9 +46,7 @@ try {
$env = $_SERVER['APP_ENV'] ?? 'dev';
$kernel = new Chamilo\Kernel($env, true);
$request = Sonata\PageBundle\Request\RequestFactory::createFromGlobals(
'host_with_path_by_locale'
);
$request = Sonata\PageBundle\Request\RequestFactory::createFromGlobals('host_with_path_by_locale');
// 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/
@ -255,7 +253,7 @@ try {
}
// Error reporting settings.
if (api_get_setting('server_type') == 'test') {
if (api_get_setting('server_type') === 'test') {
ini_set('display_errors', '1');
ini_set('html_errors', '1');
error_reporting(-1);
@ -517,7 +515,7 @@ try {
}
// 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();
// 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.
define('PCLZIP_TEMPORARY_DIR', api_get_path(SYS_ARCHIVE_PATH));
} catch (Exception $e) {
var_dump($e->getMessage());
/*var_dump($e->getMessage());
var_dump($e->getCode());
var_dump($e->getLine());
echo $e->getTraceAsString();
exit;
exit;*/
}

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

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

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

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

@ -100,6 +100,14 @@ class LegacyListener
$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 = [
'email' => api_get_setting('emailAdministrator'),
'surname' => api_get_setting('administratorSurname'),
@ -154,9 +162,7 @@ class LegacyListener
</div>';
}
if (api_get_setting('show_link_ticket_notification') == 'true' &&
$allow
) {
if (api_get_setting('show_link_ticket_notification') === 'true' && $allow) {
// by default is project_id = 1
$defaultProjectId = 1;
$allow = \TicketManager::userIsAllowInProject(api_get_user_info(), $defaultProjectId);

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

@ -46,14 +46,15 @@ class LoginSuccessHandler implements AuthenticationSuccessHandlerInterface
$user = $token->getUser();
$userId = $user->getId();
$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.
//$ip = $request->getClientIp();
// Setting user info.
$session->set('_user', $userInfo);
//$session->set('_user', $user);
// Setting admin permissions for.
if ($this->checker->isGranted('ROLE_ADMIN')) {
@ -91,13 +92,13 @@ class LoginSuccessHandler implements AuthenticationSuccessHandlerInterface
}
}
Session::write('_uid', $user->getId());
Session::write('_user', $userInfo);
Session::write('is_platformAdmin', (bool) \UserManager::is_admin($userId));
Session::write('is_allowedCreateCourse', (bool) ($userInfo['status'] == 1));
$session->set('_uid', $user->getId());
//$session->set('_user', $userInfo);
//$session->set('is_platformAdmin', \UserManager::is_admin($userId));
//$session->set('is_allowedCreateCourse', $userInfo['status'] === 1);
// 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
$personal_course_list = \UserManager::get_personal_session_course_list($userId);
$my_session_list = [];

@ -399,9 +399,9 @@ class Container
\Database::setManager($em);
\CourseManager::setEntityManager($em);
Container::setSettingsManager($container->get('chamilo.settings.manager'));
Container::setUserManager($container->get('fos_user.user_manager'));
Container::setSiteManager($container->get('sonata.page.manager.site'));
self::setSettingsManager($container->get('chamilo.settings.manager'));
self::setUserManager($container->get('fos_user.user_manager'));
self::setSiteManager($container->get('sonata.page.manager.site'));
\CourseManager::setCourseSettingsManager($container->get('chamilo_course.settings.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)
\CourseManager::setToolList($container->get('chamilo_course.tool_chain'));
Container::$session = $container->get('session');
self::$session = $container->get('session');
// Setting legacy properties.
Container::$dataDir = $container->get('kernel')->getDataDir();
Container::$courseDir = $container->get('kernel')->getDataDir();
self::$dataDir = $container->get('kernel')->getDataDir();
self::$courseDir = $container->get('kernel')->getDataDir();
}
}

@ -133,7 +133,7 @@ services:
calls:
- [setContainer, ['@service_container']]
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.controller, method: onKernelController}
@ -144,8 +144,9 @@ services:
- [setContainer, ['@service_container']]
tags:
- {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:
# class: Chamilo\CoreBundle\EventListener\LegacyLoginListener
# arguments: ["@service_container", '@security.token_storage']

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

@ -19,7 +19,7 @@ services:
calls:
- [setContainer, ['@service_container']]
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.controller, method: onKernelController}

Loading…
Cancel
Save