Passed
Pull Request — master (#5659)
by
unknown
07:29
created

PermissionsController::isAllowedToEdit()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 17
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 12
c 0
b 0
f 0
nc 1
nop 1
dl 0
loc 17
rs 9.8666
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\Repository\PermissionRelRoleRepository;
12
use Chamilo\CoreBundle\Repository\PermissionRepository;
13
use Chamilo\CoreBundle\ServiceHelper\PermissionServiceHelper;
14
use Doctrine\ORM\EntityManagerInterface;
15
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
16
use Symfony\Component\HttpFoundation\Request;
17
use Symfony\Component\HttpFoundation\Response;
18
use Symfony\Component\Routing\Annotation\Route;
19
use Symfony\Component\Security\Http\Attribute\IsGranted;
20
21
#[Route('/permissions')]
22
class PermissionsController extends AbstractController
23
{
24
    public function __construct(
25
        private PermissionServiceHelper $permissionServiceHelper
26
    ) {}
27
28
    #[IsGranted('ROLE_ADMIN')]
29
    #[Route('', name: 'permissions')]
30
    public function index(
31
        PermissionRepository $permissionRepo,
32
        PermissionRelRoleRepository $permissionRelRoleRepo,
33
        Request $request,
34
        EntityManagerInterface $em
35
    ): Response {
36
        $permissions = $permissionRepo->findAll();
37
        $roles = $this->permissionServiceHelper->getUserRoles();
38
39
        if ($request->isMethod('POST')) {
40
            $data = $request->request->all('permissions');
41
            foreach ($permissions as $permission) {
42
                foreach ($roles as $role) {
43
                    $checkboxValue = isset($data[$permission->getSlug()][$role]);
44
                    $permRelRole = $permissionRelRoleRepo->findOneBy(['permission' => $permission, 'roleCode' => $role]);
45
46
                    if ($checkboxValue) {
47
                        if (!$permRelRole) {
48
                            $permRelRole = new PermissionRelRole();
49
                            $permRelRole->setPermission($permission);
50
                            $permRelRole->setRoleCode($role);
51
                        }
52
                        $permRelRole->setChangeable(true);
53
                        $permRelRole->setUpdatedAt(new \DateTime());
54
                        $em->persist($permRelRole);
55
                    } else {
56
                        if ($permRelRole) {
57
                            $em->remove($permRelRole);
58
                        }
59
                    }
60
                }
61
            }
62
            $em->flush();
63
64
            return $this->redirectToRoute('permissions');
65
        }
66
67
        $forms = [];
68
        foreach ($permissions as $permission) {
69
            $defaultData = [];
70
            foreach ($roles as $role) {
71
                $permRelRole = $permissionRelRoleRepo->findOneBy(['permission' => $permission, 'roleCode' => $role]);
72
                $defaultData[$role] = $permRelRole ? $permRelRole->isChangeable() : false;
73
            }
74
75
            $form = $this->createForm(PermissionType::class, $defaultData, ['roles' => $roles]);
76
            $forms[$permission->getSlug()] = $form->createView();
77
        }
78
79
        return $this->render('@ChamiloCore/Permission/index.html.twig', [
80
            'permissions' => $permissions,
81
            'forms' => $forms,
82
            'roles' => $roles
83
        ]);
84
    }
85
86
    #[Route('/is_allowed_to_edit', name: 'is_allowed_to_edit')]
87
    public function isAllowedToEdit(Request $request): Response
88
    {
89
        $tutor = $request->query->getBoolean('tutor');
90
        $coach = $request->query->getBoolean('coach');
91
        $sessionCoach = $request->query->getBoolean('sessioncoach');
92
        $checkStudentView = $request->query->getBoolean('checkstudentview');
93
94
        $isAllowed = api_is_allowed_to_edit(
95
            $tutor,
96
            $coach,
97
            $sessionCoach,
98
            $checkStudentView
99
        );
100
101
        return $this->json([
102
            'isAllowedToEdit' => $isAllowed,
103
        ]);
104
    }
105
}
106