Passed
Pull Request — master (#5651)
by Yannick
07:56
created

PermissionFixtures::load()   A

Complexity

Conditions 5
Paths 5

Size

Total Lines 33
Code Lines 22

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 5
eloc 22
c 1
b 0
f 0
nc 5
nop 1
dl 0
loc 33
rs 9.2568
1
<?php
2
3
/* For licensing terms, see /license.txt */
4
5
declare(strict_types=1);
6
7
namespace Chamilo\CoreBundle\DataFixtures;
8
9
use Chamilo\CoreBundle\Entity\Permission;
10
use Chamilo\CoreBundle\Entity\PermissionRelRole;
11
use Doctrine\Bundle\FixturesBundle\Fixture;
12
use Doctrine\Bundle\FixturesBundle\FixtureGroupInterface;
13
use Doctrine\Persistence\ObjectManager;
14
15
class PermissionFixtures extends Fixture implements FixtureGroupInterface
16
{
17
    public static function getGroups(): array
18
    {
19
        return ['permissions'];
20
    }
21
22
    public function load(ObjectManager $manager): void
23
    {
24
        $permissions = self::getPermissions();
25
        $roles = self::getRoles();
26
        $permissionsMapping = self::getPermissionsMapping();
27
28
        foreach ($permissions as $permData) {
29
            $existingPermission = $manager->getRepository(Permission::class)->findOneBy(['slug' => $permData['slug']]);
30
            if ($existingPermission) {
31
                continue;
32
            }
33
34
            $permission = new Permission();
35
            $permission->setTitle($permData['title']);
36
            $permission->setSlug($permData['slug']);
37
            $permission->setDescription($permData['description']);
38
            $manager->persist($permission);
39
40
            $manager->flush();
41
42
            foreach ($roles as $roleName => $roleCode) {
43
                if (in_array($roleCode, $permissionsMapping[$permData['slug']])) {
44
                    $permRelRole = new PermissionRelRole();
45
                    $permRelRole->setPermission($permission);
46
                    $permRelRole->setRoleCode($roleName);
47
                    $permRelRole->setChangeable(true);
48
                    $permRelRole->setUpdatedAt(new \DateTime());
49
                    $manager->persist($permRelRole);
50
                }
51
            }
52
        }
53
54
        $manager->flush();
55
    }
56
57
    public static function getPermissions(): array
58
    {
59
        return [
60
            ['title' => 'View Analytics', 'slug' => 'analytics:view', 'description' => 'View analytics data'],
61
            ['title' => 'View Assigned Analytics', 'slug' => 'analytics:viewassigned', 'description' => 'View results of users assigned to me'],
62
            ['title' => 'View All Analytics', 'slug' => 'analytics:viewall', 'description' => 'View results of all users'],
63
            ['title' => 'Create Assignment', 'slug' => 'assignment:create', 'description' => 'Create assignments'],
64
            ['title' => 'Delete Assignment', 'slug' => 'assignment:delete', 'description' => 'Delete assignments'],
65
            ['title' => 'Edit Assignment', 'slug' => 'assignment:edit', 'description' => 'Edit assignments'],
66
            ['title' => 'Grade Assignment', 'slug' => 'assignment:grade', 'description' => 'Grade assignments'],
67
            ['title' => 'Submit Assignment', 'slug' => 'assignment:submit', 'description' => 'Submit assignments'],
68
            ['title' => 'View Assignment', 'slug' => 'assignment:view', 'description' => 'View assignments'],
69
            ['title' => 'Backup', 'slug' => 'backup:backup', 'description' => 'Backup'],
70
            ['title' => 'Copy Backup', 'slug' => 'backup:copy', 'description' => 'Copy backup'],
71
            ['title' => 'Restore Backup', 'slug' => 'backup:restore', 'description' => 'Restore backup'],
72
            ['title' => 'Configure Badge Criteria', 'slug' => 'badge:configurecriteria', 'description' => 'Configure badge criteria'],
73
            ['title' => 'Create Badge', 'slug' => 'badge:create', 'description' => 'Create badges'],
74
            ['title' => 'Edit Badge', 'slug' => 'badge:edit', 'description' => 'Edit badges'],
75
            ['title' => 'Delete Badge', 'slug' => 'badge:delete', 'description' => 'Delete badges'],
76
            ['title' => 'View Badge', 'slug' => 'badge:view', 'description' => 'View badges'],
77
            ['title' => 'Create Calendar Event', 'slug' => 'calendar:create', 'description' => 'Create calendar events'],
78
            ['title' => 'Edit Calendar Event', 'slug' => 'calendar:edit', 'description' => 'Edit calendar events'],
79
            ['title' => 'Delete Calendar Event', 'slug' => 'calendar:delete', 'description' => 'Delete calendar events'],
80
            ['title' => 'View Courses Catalogue', 'slug' => 'catalogue:view', 'description' => 'View courses catalogue'],
81
            ['title' => 'Create Certificate Template', 'slug' => 'certificate:create', 'description' => 'Create certificate templates'],
82
            ['title' => 'Delete Certificate Template', 'slug' => 'certificate:delete', 'description' => 'Delete certificate templates'],
83
            ['title' => 'Edit Certificate Template', 'slug' => 'certificate:edit', 'description' => 'Edit certificate templates'],
84
            ['title' => 'Generate Certificate', 'slug' => 'certificate:generate', 'description' => 'Generate certificates'],
85
            ['title' => 'Generate All Certificates', 'slug' => 'certificate:generateall', 'description' => 'Generate all certificates in a gradebook'],
86
            ['title' => 'View All Certificates', 'slug' => 'certificate:viewall', 'description' => 'View all instances of one certificate issued to all users'],
87
            ['title' => 'Assign Course to Class', 'slug' => 'class:assigncourse', 'description' => 'Assign a course to a class'],
88
            ['title' => 'Assign Session to Class', 'slug' => 'class:assignsession', 'description' => 'Assign a session to a class'],
89
            ['title' => 'Assign User to Class', 'slug' => 'class:assignuser', 'description' => 'Assign a user to a class'],
90
            ['title' => 'Create Class', 'slug' => 'class:create', 'description' => 'Manage global classes of users'],
91
            ['title' => 'Delete Class', 'slug' => 'class:delete', 'description' => 'Delete classes'],
92
            ['title' => 'Edit Class', 'slug' => 'class:edit', 'description' => 'Edit classes'],
93
            ['title' => 'View Class', 'slug' => 'class:view', 'description' => 'View classes'],
94
            ['title' => 'Create CMS Page', 'slug' => 'cms:create', 'description' => 'Create CMS pages'],
95
            ['title' => 'Delete CMS Page', 'slug' => 'cms:delete', 'description' => 'Delete CMS pages'],
96
            ['title' => 'Edit CMS Page', 'slug' => 'cms:edit', 'description' => 'Edit CMS pages'],
97
            ['title' => 'Create Course Space', 'slug' => 'course:create', 'description' => 'Create course spaces'],
98
            ['title' => 'Delete Course Space', 'slug' => 'course:delete', 'description' => 'Delete course spaces'],
99
            ['title' => 'Download Course Content', 'slug' => 'course:downloadcoursecontent', 'description' => 'Download all course content'],
100
            ['title' => 'Edit Own Course Properties', 'slug' => 'course:edit', 'description' => 'Edit own course\'s properties'],
101
            ['title' => 'Edit All Course Properties', 'slug' => 'course:editall', 'description' => 'Edit all course\'s properties'],
102
            ['title' => 'Manage Plugins', 'slug' => 'plugin:manage', 'description' => 'Enable/disable/configure plugins'],
103
            ['title' => 'Create Quiz', 'slug' => 'quiz:create', 'description' => 'Create quizzes'],
104
            ['title' => 'Delete Quiz', 'slug' => 'quiz:delete', 'description' => 'Delete quizzes'],
105
            ['title' => 'Edit Quiz', 'slug' => 'quiz:edit', 'description' => 'Edit quizzes'],
106
            ['title' => 'Grade Quiz', 'slug' => 'quiz:grade', 'description' => 'Grade quizzes'],
107
            ['title' => 'View Live Quiz Results', 'slug' => 'quiz:viewliveresults', 'description' => 'View live quiz results'],
108
            ['title' => 'Manage Question Bank', 'slug' => 'quiz:managequestionbank', 'description' => 'Manage question bank'],
109
            ['title' => 'Create Role', 'slug' => 'role:create', 'description' => 'Create roles'],
110
            ['title' => 'Manage Role Permissions', 'slug' => 'role:managepermissions', 'description' => 'Assign or remove permissions from roles'],
111
            ['title' => 'Create Session', 'slug' => 'session:create', 'description' => 'Create sessions'],
112
            ['title' => 'Delete Session', 'slug' => 'session:delete', 'description' => 'Delete sessions'],
113
            ['title' => 'Edit Own Session Properties', 'slug' => 'session:edit', 'description' => 'Edit own session\'s properties'],
114
            ['title' => 'Edit All Session Properties', 'slug' => 'session:editall', 'description' => 'Edit all session\'s properties'],
115
            ['title' => 'Assign Course to Session', 'slug' => 'session:assigncourse', 'description' => 'Assign a course to a session'],
116
            ['title' => 'Edit Site Settings', 'slug' => 'site:editsettings', 'description' => 'Manage settings of the platform'],
117
            ['title' => 'Access Site Maintenance', 'slug' => 'site:maintenanceaccess', 'description' => 'Access site maintenance'],
118
            ['title' => 'Manage Course Competency', 'slug' => 'skill:coursecompetencymanage', 'description' => 'Assign skills through course gradebooks'],
119
            ['title' => 'Review User Competency', 'slug' => 'skill:usercompetencyreview', 'description' => 'Add comments on other user\'s acquired skills'],
120
            ['title' => 'Assign Skill', 'slug' => 'skill:assign', 'description' => 'Assign a skill to a user'],
121
            ['title' => 'Create Skill', 'slug' => 'skill:create', 'description' => 'Create skills'],
122
            ['title' => 'Delete Skill', 'slug' => 'skill:delete', 'description' => 'Delete skills'],
123
            ['title' => 'Edit Skill', 'slug' => 'skill:edit', 'description' => 'Edit skills'],
124
            ['title' => 'View Skill', 'slug' => 'skill:view', 'description' => 'View all skills acquired by users in my context'],
125
            ['title' => 'View All Skills', 'slug' => 'skill:viewall', 'description' => 'View all skills acquired by users of the platform'],
126
            ['title' => 'Create Survey', 'slug' => 'survey:create', 'description' => 'Add a survey (global or inside own course)'],
127
            ['title' => 'Delete Survey', 'slug' => 'survey:delete', 'description' => 'Delete surveys'],
128
            ['title' => 'Edit Survey', 'slug' => 'survey:edit', 'description' => 'Edit surveys'],
129
            ['title' => 'Submit Survey', 'slug' => 'survey:submit', 'description' => 'Submit surveys'],
130
            ['title' => 'View Survey Results', 'slug' => 'survey:viewresults', 'description' => 'View survey results'],
131
            ['title' => 'Comment on Ticket', 'slug' => 'ticket:comment', 'description' => 'Comment on tickets'],
132
            ['title' => 'Manage Tickets', 'slug' => 'ticket:manage', 'description' => 'Manage the tickets system'],
133
            ['title' => 'Report Ticket', 'slug' => 'ticket:report', 'description' => 'Report tickets'],
134
            ['title' => 'See Ticket Issues', 'slug' => 'ticket:seeissues', 'description' => 'See issue details for issues where they are involved'],
135
            ['title' => 'View All Ticket Issues', 'slug' => 'ticket:viewallissues', 'description' => 'View all issues'],
136
            ['title' => 'Edit Tool Visibility', 'slug' => 'tool:editvisibility', 'description' => 'Allow setting the visibility of a tool in a course'],
137
            ['title' => 'Manage URL', 'slug' => 'url:manage', 'description' => 'Manage Multi-URL configuration'],
138
            ['title' => 'Assign Classes to URL', 'slug' => 'url:assignclass', 'description' => 'Assign classes to URL'],
139
            ['title' => 'Assign Courses to URL', 'slug' => 'url:assigncourse', 'description' => 'Assign courses to URL'],
140
            ['title' => 'Assign Users to URL', 'slug' => 'url:assignuser', 'description' => 'Assign users to URL'],
141
            ['title' => 'Assign User to Class', 'slug' => 'user:assignclass', 'description' => 'Assign a user to a class'],
142
            ['title' => 'Assign User to Course', 'slug' => 'user:assigncourse', 'description' => 'Assign a user to a course'],
143
            ['title' => 'Assign User to Session', 'slug' => 'user:assignsession', 'description' => 'Assign a user to a session'],
144
            ['title' => 'Create User', 'slug' => 'user:create', 'description' => 'Create users'],
145
            ['title' => 'Delete User', 'slug' => 'user:delete', 'description' => 'Delete users'],
146
            ['title' => 'Edit User', 'slug' => 'user:edit', 'description' => 'Edit users'],
147
            ['title' => 'Edit User Role', 'slug' => 'user:editrole', 'description' => 'Edit user roles'],
148
            ['title' => 'Login As User', 'slug' => 'user:loginas', 'description' => 'Login as another user'],
149
        ];
150
    }
151
152
    public static function getRoles(): array
153
    {
154
        return [
155
            'ROLE_INVITEE' => 'INV',
156
            'ROLE_STUDENT' => 'STU',
157
            'ROLE_TEACHER' => 'TEA',
158
            'ROLE_ADMIN' => 'ADM',
159
            'ROLE_SUPER_ADMIN' => 'SUA',
160
            'ROLE_GLOBAL_ADMIN' => 'GLO',
161
            'ROLE_RRHH' => 'HRM',
162
            'ROLE_QUESTION_MANAGER' => 'QBM',
163
            'ROLE_SESSION_MANAGER' => 'SSM',
164
            'ROLE_STUDENT_BOSS' => 'STB',
165
        ];
166
    }
167
168
    public static function getPermissionsMapping(): array
169
    {
170
        return [
171
            'analytics:view' => ['INV', 'STU', 'TEA', 'ADM', 'SUA', 'GLO', 'HRM', 'QBM', 'SSM', 'STB'],
172
            'analytics:viewassigned' => ['TEA', 'ADM', 'SUA', 'GLO', 'HRM', 'SSM', 'STB'],
173
            'analytics:viewall' => ['ADM', 'SUA', 'GLO', 'SSM', 'STB'],
174
            'assignment:create' => ['TEA'],
175
            'assignment:delete' => ['TEA', 'ADM', 'SUA', 'GLO'],
176
            'assignment:edit' => ['TEA', 'ADM', 'SUA', 'GLO'],
177
            'assignment:grade' => ['TEA'],
178
            'assignment:submit' => ['STU'],
179
            'assignment:view' => ['INV', 'STU', 'TEA', 'ADM', 'SUA', 'GLO', 'HRM', 'SSM', 'STB'],
180
            'backup:backup' => ['TEA', 'ADM', 'SUA', 'GLO', 'SSM'],
181
            'backup:copy' => ['TEA', 'ADM', 'SUA', 'GLO', 'SSM'],
182
            'backup:restore' => ['TEA', 'ADM', 'SUA', 'GLO', 'SSM'],
183
            'badge:configurecriteria' => ['ADM', 'SUA', 'GLO', 'SSM'],
184
            'badge:create' => ['ADM', 'SUA', 'GLO', 'SSM'],
185
            'badge:edit' => ['ADM', 'SUA', 'GLO', 'SSM'],
186
            'badge:delete' => ['ADM', 'SUA', 'GLO', 'SSM'],
187
            'badge:view' => ['INV', 'STU', 'TEA', 'ADM', 'SUA', 'GLO', 'SSM', 'STB'],
188
            'calendar:create' => ['ADM', 'SUA', 'GLO'],
189
            'calendar:edit' => ['ADM', 'SUA', 'GLO'],
190
            'calendar:delete' => ['ADM', 'SUA', 'GLO'],
191
            'catalogue:view' => ['INV', 'STU', 'TEA', 'ADM', 'SUA', 'GLO', 'HRM', 'QBM', 'SSM', 'STB'],
192
            'certificate:create' => ['TEA', 'SSM'],
193
            'certificate:delete' => ['TEA', 'SSM'],
194
            'certificate:edit' => ['TEA', 'SSM'],
195
            'certificate:generate' => ['STU', 'TEA', 'SSM'],
196
            'certificate:generateall' => ['TEA', 'HRM', 'SSM'],
197
            'certificate:viewall' => ['TEA', 'HRM', 'SSM', 'STB'],
198
            'class:assigncourse' => ['TEA', 'ADM', 'SUA', 'GLO'],
199
            'class:assignsession' => ['ADM', 'SUA', 'GLO', 'SSM'],
200
            'class:assignuser' => ['ADM', 'SUA', 'GLO', 'SSM'],
201
            'class:create' => ['ADM', 'SUA', 'GLO', 'SSM'],
202
            'class:delete' => ['ADM', 'SUA', 'GLO', 'SSM'],
203
            'class:edit' => ['ADM', 'SUA', 'GLO', 'SSM'],
204
            'class:view' => ['STU', 'TEA', 'ADM', 'SUA', 'GLO', 'SSM'],
205
            'cms:create' => ['ADM', 'SUA', 'GLO'],
206
            'cms:delete' => ['ADM', 'SUA', 'GLO'],
207
            'cms:edit' => ['ADM', 'SUA', 'GLO'],
208
            'course:create' => ['TEA', 'ADM', 'SUA', 'GLO', 'SSM'],
209
            'course:delete' => ['TEA', 'ADM', 'SUA', 'GLO'],
210
            'course:downloadcoursecontent' => ['TEA', 'ADM', 'SUA', 'GLO', 'SSM'],
211
            'course:edit' => ['TEA', 'SSM'],
212
            'course:editall' => ['ADM', 'SUA', 'GLO'],
213
            'plugin:manage' => ['ADM', 'SUA', 'GLO'],
214
            'quiz:create' => ['TEA', 'QBM'],
215
            'quiz:delete' => ['TEA', 'QBM'],
216
            'quiz:edit' => ['TEA', 'QBM'],
217
            'quiz:grade' => ['TEA'],
218
            'quiz:viewliveresults' => ['TEA', 'SSM'],
219
            'quiz:managequestionbank' => ['ADM', 'SUA', 'GLO', 'QBM'],
220
            'role:create' => ['ADM', 'SUA', 'GLO'],
221
            'role:managepermissions' => ['ADM', 'SUA', 'GLO'],
222
            'session:create' => ['ADM', 'SUA', 'GLO', 'SSM'],
223
            'session:delete' => ['ADM', 'SUA', 'GLO', 'SSM'],
224
            'session:edit' => ['ADM', 'SUA', 'GLO', 'SSM'],
225
            'session:editall' => ['ADM', 'SUA', 'GLO', 'SSM'],
226
            'session:assigncourse' => ['ADM', 'SUA', 'GLO', 'SSM'],
227
            'site:editsettings' => ['ADM', 'SUA', 'GLO'],
228
            'site:maintenanceaccess' => ['ADM', 'SUA', 'GLO'],
229
            'skill:coursecompetencymanage' => ['TEA', 'ADM', 'SUA', 'GLO', 'HRM'],
230
            'skill:usercompetencyreview' => ['STU', 'TEA', 'ADM', 'SUA', 'GLO'],
231
            'skill:assign' => ['ADM', 'SUA', 'GLO'],
232
            'skill:create' => ['GLO'],
233
            'skill:delete' => ['GLO'],
234
            'skill:edit' => ['GLO'],
235
            'skill:view' => ['ADM', 'SUA', 'GLO', 'SSM', 'STB'],
236
            'skill:viewall' => ['ADM', 'SUA', 'GLO', 'SSM', 'STB'],
237
            'survey:create' => ['TEA'],
238
            'survey:delete' => ['TEA'],
239
            'survey:edit' => ['TEA'],
240
            'survey:submit' => ['INV', 'STU', 'TEA', 'ADM', 'SUA', 'GLO', 'SSM', 'STB'],
241
            'survey:viewresults' => ['TEA', 'HRM', 'SSM', 'STB'],
242
            'ticket:comment' => ['STU', 'TEA', 'ADM', 'SUA', 'GLO', 'HRM', 'QBM', 'SSM', 'STB'],
243
            'ticket:manage' => ['ADM', 'SUA', 'GLO'],
244
            'ticket:report' => ['STU', 'TEA', 'ADM', 'SUA', 'GLO', 'HRM', 'QBM', 'SSM', 'STB'],
245
            'ticket:seeissues' => ['STU', 'TEA', 'ADM', 'SUA', 'GLO', 'SSM', 'STB'],
246
            'ticket:viewallissues' => ['ADM', 'SUA', 'GLO', 'SSM', 'STB'],
247
            'tool:editvisibility' => ['TEA', 'ADM', 'SUA', 'GLO', 'SSM'],
248
            'url:manage' => ['GLO'],
249
            'url:assignclass' => ['GLO'],
250
            'url:assigncourse' => ['GLO'],
251
            'url:assignuser' => ['GLO'],
252
            'user:assignclass' => ['ADM', 'SUA', 'GLO', 'SSM'],
253
            'user:assigncourse' => ['TEA', 'ADM', 'SUA', 'GLO'],
254
            'user:assignsession' => ['ADM', 'SUA', 'GLO', 'SSM'],
255
            'user:create' => ['ADM', 'SUA', 'GLO'],
256
            'user:delete' => ['ADM', 'SUA', 'GLO'],
257
            'user:edit' => ['ADM', 'SUA', 'GLO'],
258
            'user:editrole' => ['ADM', 'SUA', 'GLO'],
259
            'user:loginas' => ['SUA', 'GLO'],
260
        ];
261
    }
262
}
263