Passed
Push — master ( 45d699...d5e463 )
by Julito
12:21
created

AbstractResourceController   A

Complexity

Total Complexity 13

Size/Duplication

Total Lines 76
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 30
c 1
b 0
f 0
dl 0
loc 76
rs 10
wmc 13

7 Methods

Rating   Name   Duplication   Size   Complexity  
A getRepository() 0 3 1
A getRepositoryFromRequest() 0 6 1
A getSubscribedServices() 0 7 1
A getParentResourceNode() 0 24 5
A denyAccessUnlessValidResource() 0 10 3
A getGlide() 0 3 1
A __construct() 0 3 1
1
<?php
2
3
/* For licensing terms, see /license.txt */
4
5
namespace Chamilo\CoreBundle\Controller;
6
7
use Chamilo\CoreBundle\Component\Utils\Glide;
8
use Chamilo\CoreBundle\Entity\Resource\AbstractResource;
9
use Chamilo\CoreBundle\Entity\Resource\ResourceNode;
10
use Chamilo\CoreBundle\Repository\ResourceFactory;
11
use Chamilo\CoreBundle\Repository\ResourceRepository;
12
use Chamilo\UserBundle\Entity\User;
13
use Symfony\Component\HttpFoundation\Request;
14
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
15
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
16
17
/**
18
 * Class AbstractResourceController.
19
 */
20
abstract class AbstractResourceController extends BaseController
21
{
22
    protected $resourceRepositoryFactory;
23
24
    public function __construct(ResourceFactory $resourceFactory)
25
    {
26
        $this->resourceRepositoryFactory = $resourceFactory;
27
    }
28
29
    public function getRepositoryFromRequest(Request $request): ResourceRepository
30
    {
31
        $tool = $request->get('tool');
32
        $type = $request->get('type');
33
34
        return $this->getRepository($tool, $type);
35
    }
36
37
    public function getRepository($tool, $type): ResourceRepository
38
    {
39
        return $this->resourceRepositoryFactory->createRepository($tool, $type);
40
    }
41
42
    public static function getSubscribedServices(): array
43
    {
44
        $services = parent::getSubscribedServices();
45
        $services['glide'] = Glide::class;
46
        //$services['storage'] = FlysystemStorage::class;
47
48
        return $services;
49
    }
50
51
    public function denyAccessUnlessValidResource(AbstractResource $resource)
52
    {
53
        if (null === $resource) {
54
            throw new NotFoundHttpException($this->trans('Resource doesn\'t exists.'));
55
        }
56
57
        $resourceNode = $resource->getResourceNode();
58
59
        if (null === $resourceNode) {
60
            throw new NotFoundHttpException($this->trans('Resource doesn\'t have a node.'));
61
        }
62
    }
63
64
    protected function getParentResourceNode(Request $request): ResourceNode
65
    {
66
        $parentNodeId = $request->get('id');
67
68
        $parentResourceNode = null;
69
        if (empty($parentNodeId)) {
70
            if ($this->hasCourse()) {
71
                $parentResourceNode = $this->getCourse()->getResourceNode();
72
            } else {
73
                if ($this->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
74
                    /** @var User $user */
75
                    $parentResourceNode = $this->getUser()->getResourceNode();
76
                }
77
            }
78
        } else {
79
            $repo = $this->getDoctrine()->getRepository('ChamiloCoreBundle:Resource\ResourceNode');
80
            $parentResourceNode = $repo->find($parentNodeId);
81
        }
82
83
        if (null === $parentResourceNode) {
84
            throw new AccessDeniedException();
85
        }
86
87
        return $parentResourceNode;
88
    }
89
90
    /**
91
     * @return Glide
92
     */
93
    public function getGlide()
94
    {
95
        return $this->container->get('glide');
96
    }
97
}
98