Passed
Push — master ( eeb046...442ea1 )
by Julito
09:25 queued 26s
created

ResourceApiController::getResourceCommentsAction()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 10
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 5
nc 1
nop 1
dl 0
loc 10
rs 10
c 0
b 0
f 0
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 FOS\RestBundle\Controller\Annotations\RouteResource;
20
use Symfony\Component\HttpFoundation\Request;
21
use Symfony\Component\Routing\Annotation\Route;
22
use Symfony\Contracts\Translation\TranslatorInterface;
23
24
/**
25
 * Class ResourceApiController.
26
 *
27
 * @RouteResource("resources/{tool}/{type}/{id}")
28
 */
29
class ResourceApiController extends AbstractFOSRestController implements CourseControllerInterface
30
{
31
    use CourseControllerTrait;
32
    use ResourceControllerTrait;
33
    use ControllerTrait;
34
35
    public static function getSubscribedServices(): array
36
    {
37
        $services = parent::getSubscribedServices();
38
        $services['translator'] = TranslatorInterface::class;
39
        $services['breadcrumb'] = BreadcrumbBlockService::class;
40
        $services['resource_factory'] = ResourceFactory::class;
41
        $services['glide'] = Glide::class;
42
43
        return $services;
44
    }
45
46
    /**
47
     * Route("/{tool}/{type}/{id}/list", name="chamilo_core_api_resource_list").
48
     *
49
     * @Rest\View(serializerGroups={"list"})
50
     */
51
    public function getResourcesAction(Request $request)
52
    {
53
        $repository = $this->getRepositoryFromRequest($request);
54
55
        $resourceNodeId = $request->get('id');
56
        $parentNode = $repository->getResourceNodeRepository()->find($resourceNodeId);
57
58
        $course = $this->getCourse();
59
        $session = $this->getSession();
60
61
        $this->denyAccessUnlessGranted(
62
            ResourceNodeVoter::VIEW,
63
            $parentNode,
64
            'Unauthorised access to resource'
65
        );
66
67
        /** @var QueryBuilder $qb */
68
        $qb = $repository->getResources($this->getUser(), $parentNode, $course, $session, null);
69
70
        return $qb->getQuery()->getResult();
71
    }
72
73
    /**
74
     * Rest\Get("/{tool}/{type}/{id}").
75
     *
76
     * @Rest\View(serializerGroups={"list"})
77
     */
78
    public function getResourceAction(Request $request)
79
    {
80
        $repository = $this->getRepositoryFromRequest($request);
81
        $nodeId = $request->get('id');
82
83
        /** @var AbstractResource $resource */
84
        $resource = $repository->getResourceFromResourceNode($nodeId);
85
        $this->denyAccessUnlessValidResource($resource);
86
87
        return $resource;
88
    }
89
90
    /**
91
     * @Rest\View(serializerGroups={"list"})
92
     */
93
    public function getResourceCommentsAction(Request $request)
94
    {
95
        $repository = $this->getRepositoryFromRequest($request);
96
        $nodeId = $request->get('id');
97
98
        /** @var AbstractResource $resource */
99
        $resource = $repository->getResourceFromResourceNode($nodeId);
100
        $this->denyAccessUnlessValidResource($resource);
101
102
        return $resource->getResourceNode()->getComments();
103
    }
104
}
105