Passed
Push — master ( 8276d9...eeb046 )
by Julito
11:16
created

getResourceRepositoryFactory()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 1
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 3
rs 10
1
<?php
2
3
/* For licensing terms, see /license.txt */
4
5
namespace Chamilo\CoreBundle\Controller;
6
7
use Chamilo\CoreBundle\Block\BreadcrumbBlockService;
8
use Chamilo\CoreBundle\Component\Utils\Glide;
9
use Chamilo\CoreBundle\Entity\Resource\AbstractResource;
10
use Chamilo\CoreBundle\Repository\ResourceFactory;
11
use Chamilo\CoreBundle\Security\Authorization\Voter\ResourceNodeVoter;
12
use Chamilo\CoreBundle\Traits\ControllerTrait;
13
use Chamilo\CoreBundle\Traits\CourseControllerTrait;
14
use Chamilo\CoreBundle\Traits\ResourceControllerTrait;
15
use Chamilo\CourseBundle\Controller\CourseControllerInterface;
16
use Doctrine\ORM\QueryBuilder;
17
use FOS\RestBundle\Controller\AbstractFOSRestController;
18
use FOS\RestBundle\Controller\Annotations as Rest;
19
use Symfony\Component\HttpFoundation\Request;
20
use Symfony\Component\Routing\Annotation\Route;
21
use Symfony\Contracts\Translation\TranslatorInterface;
22
23
/**
24
 * Class ResourceApiController.
25
 *
26
 * @Route("/api/resources")
27
 */
28
class ResourceApiController extends AbstractFOSRestController implements CourseControllerInterface
29
{
30
    use CourseControllerTrait;
31
    use ResourceControllerTrait;
32
    use ControllerTrait;
33
34
    public static function getSubscribedServices(): array
35
    {
36
        $services = parent::getSubscribedServices();
37
        $services['translator'] = TranslatorInterface::class;
38
        $services['breadcrumb'] = BreadcrumbBlockService::class;
39
        $services['resource_factory'] = ResourceFactory::class;
40
        $services['glide'] = Glide::class;
41
42
        return $services;
43
    }
44
45
    public function getResourceRepositoryFactory(): ResourceFactory
46
    {
47
        return $this->container->get('resource_factory');
48
    }
49
50
    /**
51
     * Route("/{tool}/{type}/{id}/list", name="chamilo_core_api_resource_list").
52
     *
53
     * @Rest\Get("/{tool}/{type}/{id}/list")
54
     *
55
     * If node has children show it
56
     */
57
    public function getResourcesAction(Request $request)
58
    {
59
        $repository = $this->getRepositoryFromRequest($request);
60
61
        $resourceNodeId = $request->get('id');
62
        $parentNode = $repository->getResourceNodeRepository()->find($resourceNodeId);
63
64
        $course = $this->getCourse();
65
        $session = $this->getSession();
66
67
        $this->denyAccessUnlessGranted(
68
            ResourceNodeVoter::VIEW,
69
            $parentNode,
70
            'Unauthorised access to resource'
71
        );
72
73
        /** @var QueryBuilder $qb */
74
        $qb = $repository->getResources($this->getUser(), $parentNode, $course, $session, null);
75
76
        $resources = $qb->getQuery()->getResult();
77
78
        return $this->handleView($this->view($resources));
79
    }
80
81
    /**
82
     * Route("/{tool}/{type}/{id}", name="chamilo_core_api_resource").
83
     *
84
     * @Rest\Get("/{tool}/{type}/{id}")
85
     *
86
     */
87
    public function getResourceAction(Request $request)
88
    {
89
        $repository = $this->getRepositoryFromRequest($request);
90
        $nodeId = $request->get('id');
91
92
        /** @var AbstractResource $resource */
93
        $resource = $repository->getResourceFromResourceNode($nodeId);
94
        $this->denyAccessUnlessValidResource($resource);
95
96
97
        return $this->handleView($this->view($resource));
98
    }
99
}
100