Passed
Pull Request — master (#5651)
by Yannick
12:12 queued 04:20
created

PermissionController   A

Complexity

Total Complexity 14

Size/Duplication

Total Lines 78
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 47
c 1
b 0
f 0
dl 0
loc 78
rs 10
wmc 14

2 Methods

Rating   Name   Duplication   Size   Complexity  
B index() 0 59 11
A testPermissions() 0 14 3
1
<?php
2
3
declare(strict_types=1);
4
5
/* For licensing terms, see /license.txt */
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 Doctrine\ORM\EntityManagerInterface;
14
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
15
use Symfony\Component\HttpFoundation\Request;
16
use Symfony\Component\HttpFoundation\Response;
17
use Symfony\Component\Routing\Annotation\Route;
18
use Symfony\Component\Security\Http\Attribute\IsGranted;
19
20
class PermissionController extends AbstractController
21
{
22
23
    #[IsGranted('ROLE_ADMIN')]
24
    #[Route('/permissions/test', name: 'permissions_test')]
25
    public function testPermissions(): Response
26
    {
27
        // Test roles and permission slug
28
        $roles = ['ROLE_STUDENT', 'ROLE_TEACHER'];
29
        $permissionSlug = 'analytics:view';
30
31
        // Call the api_get_permission function and log the result
32
        $hasPermission = api_get_permission($permissionSlug, $roles);
33
        error_log('Permission check for ' . $permissionSlug . ' with roles ' . implode(', ', $roles) . ': ' . ($hasPermission ? 'true' : 'false'));
34
35
        // Return a simple response for testing purposes
36
        return new Response('<html><body>Permission check result: ' . ($hasPermission ? 'true' : 'false') . '</body></html>');
37
    }
38
39
    #[IsGranted('ROLE_ADMIN')]
40
    #[Route('/permissions', name: 'permissions')]
41
    public function index(
42
        PermissionRepository $permissionRepo,
43
        PermissionRelRoleRepository $permissionRelRoleRepo,
44
        Request $request,
45
        EntityManagerInterface $em
46
    ): Response {
47
        $permissions = $permissionRepo->findAll();
48
        $roles = ['ROLE_INVITEE', 'ROLE_STUDENT', 'ROLE_TEACHER', 'ROLE_ADMIN', 'ROLE_SUPER_ADMIN', 'ROLE_GLOBAL_ADMIN', 'ROLE_RRHH', 'ROLE_QUESTION_MANAGER', 'ROLE_SESSION_MANAGER', 'ROLE_STUDENT_BOSS'];
49
50
        if ($request->isMethod('POST')) {
51
            $data = $request->request->all('permissions');
52
            foreach ($permissions as $permission) {
53
                foreach ($roles as $role) {
54
                    $checkboxValue = isset($data[$permission->getSlug()][$role]);
55
                    error_log('Processing role: ' . $role . ' with value: ' . ($checkboxValue ? 'true' : 'false'));
56
                    $permRelRole = $permissionRelRoleRepo->findOneBy(['permission' => $permission, 'roleCode' => $role]);
57
58
                    if ($checkboxValue) {
59
                        if (!$permRelRole) {
60
                            $permRelRole = new PermissionRelRole();
61
                            $permRelRole->setPermission($permission);
62
                            $permRelRole->setRoleCode($role);
63
                        }
64
                        $permRelRole->setChangeable(true);
65
                        $permRelRole->setUpdatedAt(new \DateTime());
66
                        $em->persist($permRelRole);
67
                        error_log('Persisting PermissionRelRole for permission: ' . $permission->getSlug() . ' and role: ' . $role);
68
                    } else {
69
                        if ($permRelRole) {
70
                            $em->remove($permRelRole);
71
                            error_log('Removing PermissionRelRole for permission: ' . $permission->getSlug() . ' and role: ' . $role);
72
                        }
73
                    }
74
                }
75
            }
76
            $em->flush();
77
            error_log('Flush complete');
78
79
            return $this->redirectToRoute('permissions');
80
        }
81
82
        $forms = [];
83
        foreach ($permissions as $permission) {
84
            $defaultData = [];
85
            foreach ($roles as $role) {
86
                $permRelRole = $permissionRelRoleRepo->findOneBy(['permission' => $permission, 'roleCode' => $role]);
87
                $defaultData[$role] = $permRelRole ? $permRelRole->isChangeable() : false;
88
            }
89
90
            $form = $this->createForm(PermissionType::class, $defaultData, ['roles' => $roles]);
91
            $forms[$permission->getSlug()] = $form->createView();
92
        }
93
94
        return $this->render('@ChamiloCore/Permission/index.html.twig', [
95
            'permissions' => $permissions,
96
            'forms' => $forms,
97
            'roles' => $roles
98
        ]);
99
    }
100
}
101