Passed
Push — master ( 6ca194...4db669 )
by Yannick
12:38
created

CoursesController   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 41
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 19
c 1
b 0
f 0
dl 0
loc 41
rs 10
wmc 6

2 Methods

Rating   Name   Duplication   Size   Complexity  
A documentRedirect() 0 24 5
A homeRedirect() 0 5 1
1
<?php
2
3
declare(strict_types=1);
4
5
/* For licensing terms, see /license.txt */
6
7
namespace Chamilo\CoreBundle\Controller;
8
9
use Chamilo\CoreBundle\Entity\Course;
10
use Chamilo\CourseBundle\Entity\CDocument;
11
use Chamilo\CourseBundle\Repository\CDocumentRepository;
12
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
13
use Symfony\Component\HttpFoundation\Response;
14
use Symfony\Component\Routing\Annotation\Route;
15
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
16
17
#[Route('/courses')]
18
class CoursesController extends AbstractController
19
{
20
    /**
21
     * Redirects legacy /courses/ABC/index.php to /courses/1/ (where 1 is the course id) see CourseHomeController.
22
     */
23
    #[Route('/{code}/index.php', name: 'chamilo_core_course_home_redirect')]
24
    public function homeRedirect(Course $course): Response
25
    {
26
        return $this->redirectToRoute('chamilo_core_course_home', [
27
            'cid' => $course->getId(),
28
        ]);
29
    }
30
31
    /**
32
     * Redirects legacy /courses/ABC/document/images/file.jpg.
33
     */
34
    #[Route('/{code}/document/{path}', name: 'chamilo_core_course_document_redirect', requirements: ['path' => '.*'])]
35
    public function documentRedirect(Course $course, string $path, CDocumentRepository $documentRepository): Response
36
    {
37
        $pathList = explode('/', $path);
38
39
        /** @var CDocument|null $document */
40
        $document = null;
41
        $parent = $course;
42
        foreach ($pathList as $part) {
43
            $document = $documentRepository->findCourseResourceByTitle($part, $parent->getResourceNode(), $course);
44
            if (null !== $document) {
45
                $parent = $document;
46
            }
47
        }
48
49
        if (null !== $document && $document->getResourceNode()->hasResourceFile()) {
50
            return $this->redirectToRoute('chamilo_core_resource_view', [
51
                'tool' => 'document',
52
                'type' => 'file',
53
                'id' => $document->getResourceNode()->getId(),
54
            ]);
55
        }
56
57
        throw new AccessDeniedException('File not found');
58
    }
59
}
60