Passed
Push — master ( 8b1102...ea5665 )
by Yannick
08:48 queued 15s
created

PermissionsController::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 0

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 0
c 0
b 0
f 0
nc 1
nop 1
dl 0
loc 3
rs 10
1
<?php
2
3
/* For licensing terms, see /license.txt */
4
5
declare(strict_types=1);
6
7
namespace Chamilo\CoreBundle\Controller;
8
9
use Chamilo\CoreBundle\Entity\PermissionRelRole;
10
use Chamilo\CoreBundle\Form\PermissionType;
11
use Chamilo\CoreBundle\Helpers\PermissionHelper;
12
use Chamilo\CoreBundle\Repository\PermissionRelRoleRepository;
13
use Chamilo\CoreBundle\Repository\PermissionRepository;
14
use Chamilo\CoreBundle\Repository\RoleRepository;
15
use DateTime;
16
use Doctrine\ORM\EntityManagerInterface;
17
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
18
use Symfony\Component\HttpFoundation\Request;
19
use Symfony\Component\HttpFoundation\Response;
20
use Symfony\Component\Routing\Annotation\Route;
21
use Symfony\Component\Security\Http\Attribute\IsGranted;
22
23
#[Route('/permissions')]
24
class PermissionsController extends AbstractController
25
{
26
    #[IsGranted('ROLE_ADMIN')]
27
    #[Route('', name: 'permissions')]
28
    public function index(
29
        PermissionRepository $permissionRepo,
30
        PermissionRelRoleRepository $permissionRelRoleRepo,
31
        EntityManagerInterface $em,
32
        RoleRepository $roleRepo,
33
        Request $request
34
    ): Response {
35
        $permissions = $permissionRepo->findAll();
36
37
        $roles = $roleRepo->findAll();
38
39
        if ($request->isMethod('POST')) {
40
            $data = $request->request->all('permissions');
41
42
            foreach ($permissions as $permission) {
43
                foreach ($roles as $role) {
44
                    $roleCode = $role->getCode();
45
                    $checkboxValue = isset($data[$permission->getSlug()][$roleCode]);
46
47
                    $permRelRole = $permissionRelRoleRepo->findOneBy([
48
                        'permission' => $permission,
49
                        'role' => $role,
50
                    ]);
51
52
                    if ($checkboxValue) {
53
                        if (!$permRelRole) {
54
                            $permRelRole = new PermissionRelRole();
55
                            $permRelRole->setPermission($permission);
56
                            $permRelRole->setRole($role);
57
                        }
58
                        $permRelRole->setChangeable(true);
59
                        $permRelRole->setUpdatedAt(new DateTime());
60
                        $em->persist($permRelRole);
61
                    } else {
62
                        if ($permRelRole) {
63
                            $em->remove($permRelRole);
64
                        }
65
                    }
66
                }
67
            }
68
            $em->flush();
69
70
            return $this->redirectToRoute('permissions');
71
        }
72
73
        $forms = [];
74
        foreach ($permissions as $permission) {
75
            $defaultData = [];
76
77
            foreach ($roles as $role) {
78
                $roleCode = $role->getCode();
79
80
                $permRelRole = $permissionRelRoleRepo->findOneBy([
81
                    'permission' => $permission,
82
                    'role' => $role,
83
                ]);
84
85
                $defaultData[$roleCode] = $permRelRole ? $permRelRole->isChangeable() : false;
86
            }
87
88
            $form = $this->createForm(PermissionType::class, $defaultData, [
89
                'roles' => array_map(fn($r) => $r->getCode(), $roles),
90
            ]);
91
92
            $forms[$permission->getSlug()] = $form->createView();
93
        }
94
95
        return $this->render('@ChamiloCore/Permission/index.html.twig', [
96
            'permissions' => $permissions,
97
            'forms' => $forms,
98
            'roles' => $roles,
99
        ]);
100
    }
101
102
    #[Route('/is_allowed_to_edit', name: 'is_allowed_to_edit')]
103
    public function isAllowedToEdit(Request $request): Response
104
    {
105
        $tutor = $request->query->getBoolean('tutor');
106
        $coach = $request->query->getBoolean('coach');
107
        $sessionCoach = $request->query->getBoolean('sessioncoach');
108
        $checkStudentView = $request->query->getBoolean('checkstudentview');
109
110
        $isAllowed = api_is_allowed_to_edit(
111
            $tutor,
112
            $coach,
113
            $sessionCoach,
114
            $checkStudentView
115
        );
116
117
        return $this->json([
118
            'isAllowedToEdit' => $isAllowed,
119
        ]);
120
    }
121
}
122