Fix course home using cid/sid/gid

pull/3064/head
Julio 5 years ago
parent 805611d766
commit 3990be24f2
  1. 2
      src/CoreBundle/Controller/BaseController.php
  2. 29
      src/CoreBundle/Controller/CourseController.php
  3. 23
      src/CoreBundle/Controller/CourseHomeController.php
  4. 22
      src/CoreBundle/Form/Type/CourseType.php
  5. 11
      src/CourseBundle/EventListener/CourseListener.php
  6. 15
      src/ThemeBundle/Resources/views/Course/add.html.twig

@ -56,7 +56,7 @@ abstract class BaseController extends AbstractController
{
$request = $this->getRequest();
if ($request) {
$courseId = $request->getSession()->get('_real_cid', 0);
$courseId = $request->getSession()->get('cid', 0);
}
if (empty($courseId)) {

@ -29,16 +29,16 @@ class CourseController extends AbstractController
*/
public function addAction(Request $request)
{
$form = $this->createForm(new CourseType());
exit;
$form = $this->createForm(CourseType::class);
$form->handleRequest($request);
if ($form->isValid()) {
if ($form->isSubmitted() && $form->isValid()) {
$em = $this->getDoctrine()->getManager();
$course = $form->getData();
$em->persist($course);
$em->flush();
/*$em->persist($course);
$em->flush();*/
$this->addFlash('sonata_flash_success', 'Course created');
return $this->redirectToRoute(
@ -47,14 +47,11 @@ class CourseController extends AbstractController
);
}
/*return [
'form' => $form->createView(),
];*/
//return $this->render('ChamiloThemeBundle:Default:index.html.twig');
return $this->render('ChamiloThemeBundle:Course:add.html.twig', ['form' => $form->createView()]);
}
/**
* Redirects legacy /courses/ABC/index.php to /courses/1/ (where 1 is the course id).
* Redirects legacy /courses/ABC/index.php to /courses/1/ (where 1 is the course id) see CourseHomeController
*
* @Route("/{courseCode}/index.php", name="chamilo_core_course_home_redirect")
*
@ -66,17 +63,7 @@ class CourseController extends AbstractController
}
/**
* @Route("/{cid}", name="chamilo_core_course_home")
*
* @Entity("course", expr="repository.find(cid)")
*/
public function homeAction(Course $course): Response
{
return $this->render('@ChamiloTheme/Course/welcome.html.twig', ['course' => $course]);
}
/**
* @Route("{courseCode}/welcome/", name="chamilo_core_course_welcome")
* @Route("/{cid}/welcome", name="chamilo_core_course_welcome")
*
* @Entity("course", expr="repository.find(cid)")
*/

@ -13,6 +13,7 @@ use Display;
use Event;
use ExtraFieldValue;
use Security;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Entity;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
@ -22,15 +23,14 @@ use Symfony\Component\Routing\Annotation\Route;
*
* @author Julio Montoya <gugli100@gmail.com>
*
* @Route("/sad")
* @Route("/courses")
*/
class CourseHomeController extends ToolBaseController
{
/**
* Route("/", name="course_home")
* Route("/index.php", methods={"GET"})
* @Route("/{cid}/home", name="chamilo_core_course_home")
*
* @return Response
* @Entity("course", expr="repository.find(cid)")
*/
public function indexAction(Request $request)
{
@ -39,16 +39,17 @@ class CourseHomeController extends ToolBaseController
$js = '<script>'.api_get_language_translate_html().'</script>';
$htmlHeadXtra[] = $js;
$user_id = api_get_user_id();
$userId = $this->getUser()->getId();
$courseCode = $course->getCode();
$courseId = $course->getId();
$sessionId = $this->getSessionId();
$show_message = '';
$showMessage = '';
if (api_is_invitee()) {
$isInASession = $sessionId > 0;
$isSubscribed = CourseManager::is_user_subscribed_in_course(
$user_id,
$userId,
$courseCode,
$isInASession,
$sessionId
@ -67,7 +68,7 @@ class CourseHomeController extends ToolBaseController
if ($isSpecialCourse) {
if (isset($_GET['autoreg']) && $_GET['autoreg'] == 1) {
if (CourseManager::subscribeUser($user_id, $courseCode, STUDENT)) {
if (CourseManager::subscribeUser($userId, $courseCode, STUDENT)) {
Session::write('is_allowed_in_course', true);
}
}
@ -80,7 +81,7 @@ class CourseHomeController extends ToolBaseController
Security::clear_token();
$result = CourseManager::autoSubscribeToCourse($courseCode);
if ($result) {
if (CourseManager::is_user_subscribed_in_course($user_id, $courseCode)) {
if (CourseManager::is_user_subscribed_in_course($userId, $courseCode)) {
Session::write('is_allowed_in_course', true);
}
}
@ -270,7 +271,7 @@ class CourseHomeController extends ToolBaseController
the setting homepage_view is adjustable through
the platform administration section */
if (!empty($autoLaunchWarning)) {
$show_message .= Display::return_message(
$showMessage .= Display::return_message(
$autoLaunchWarning,
'warning'
);
@ -569,7 +570,7 @@ class CourseHomeController extends ToolBaseController
$form->handleRequest($this->getRequest());
if ($form->isValid()) {
if ($form->isSubmitted() && $form->isValid()) {
$query = $this->getDoctrine()->getManager()->createQueryBuilder('a');
$query->select('MAX(s.id) as id');
$query->from('Chamilo\CourseBundle\Entity\CTool', 's');

@ -4,7 +4,14 @@
namespace Chamilo\CoreBundle\Form\Type;
use Chamilo\CoreBundle\Entity\Course;
use Sonata\Form\Type\DatePickerType;
use Sonata\Form\Type\DateTimePickerType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\LocaleType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\UrlType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
@ -20,24 +27,24 @@ class CourseType extends AbstractType
{
// @todo as a service to load the preferred_choices
$builder
->add('title', 'text')
->add('title', TextType::class)
//->add('code', 'text')
->add(
'course_language',
'locale',
LocaleType::class,
['preferred_choices' => ['en', 'fr', 'es']]
)
->add(
'visibility',
'choice',
ChoiceType::class,
['choices' => Course::getStatusList()]
)
->add('department_name', 'text', ['required' => false])
->add('department_url', 'url', ['required' => false])
->add('department_name', TextType::class, ['required' => false])
->add('department_url', UrlType::class, ['required' => false])
//->add('disk_quota', 'text')
->add(
'expiration_date',
'sonata_type_datetime_picker',
DatePickerType::class,
['required' => false]
)
/* ->add('general_coach', 'entity', array(
@ -61,8 +68,7 @@ class CourseType extends AbstractType
))*/
/*
->add('coach_access_end_date', 'sonata_type_datetime_picker')*/
->add('save', 'submit', ['label' => 'Update']);
->add('save', SubmitType::class, ['label' => 'Add']);
}
public function configureOptions(OptionsResolver $resolver)

@ -63,6 +63,7 @@ class CourseListener
$course = null;
// Check if URL has cid value. Using Symfony request.
$courseId = $request->get('cid');
if (!empty($courseId)) {
/** @var EntityManager $em */
$em = $container->get('doctrine')->getManager();
@ -84,6 +85,7 @@ class CourseListener
if (null !== $course) {
// Setting variables in the session.
$sessionHandler->set('course', $course);
$sessionHandler->set('_real_cid', $course->getId());
$sessionHandler->set('cid', $course->getId());
$sessionHandler->set('_cid', $course->getCode());
@ -188,7 +190,7 @@ class CourseListener
}
/**
* Once the onKernelRequest was fired, we check if the session object were set and we inject them in the controller.
* Once the onKernelRequest was fired, we check if the course/session object were set and we inject them in the controller.
*/
public function onKernelController(ControllerEvent $event)
{
@ -231,9 +233,8 @@ class CourseListener
)
) {
$controller = $controllerList[0];
$session = $sessionHandler->get('sessionObj');
$course = $sessionHandler->get('courseObj');
$session = $sessionHandler->get('session');
$course = $sessionHandler->get('course');
// Sets the controller course/session in order to use:
// $this->getCourse() $this->getSession() in controllers
@ -242,10 +243,8 @@ class CourseListener
// Legacy code
$courseCode = $course->getCode();
//$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);

@ -0,0 +1,15 @@
{% extends "@ChamiloTheme/Layout/layout_one_col.html.twig" %}
{% block content %}
{% autoescape false %}
<form class="form-inline"
action="{{ path('chamilo_core_course_add', {'keyword': keyword}) }}"
method="post"
>
{{ form_widget(form) }}
</form>
{% endautoescape %}
{% endblock %}
Loading…
Cancel
Save