Passed
Pull Request — master (#6447)
by
unknown
10:28
created

PermissionFixtures   A

Complexity

Total Complexity 11

Size/Duplication

Total Lines 261
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 221
dl 0
loc 261
rs 10
c 0
b 0
f 0
wmc 11

6 Methods

Rating   Name   Duplication   Size   Complexity  
A getGroups() 0 3 1
B getPermissions() 0 92 1
A getDependencies() 0 4 1
B getPermissionsMapping() 0 92 1
B load() 0 42 6
A getRoles() 0 13 1
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 Chamilo\CoreBundle\Entity\Role;
12
use DateTime;
13
use Doctrine\Bundle\FixturesBundle\Fixture;
14
use Doctrine\Bundle\FixturesBundle\FixtureGroupInterface;
15
use Doctrine\Common\DataFixtures\DependentFixtureInterface;
16
use Doctrine\Persistence\ObjectManager;
17
18
class PermissionFixtures extends Fixture implements FixtureGroupInterface, DependentFixtureInterface
19
{
20
    public function getDependencies(): array
21
    {
22
        return [
23
            RoleFixtures::class,
24
        ];
25
    }
26
27
    public static function getGroups(): array
28
    {
29
        return ['permissions'];
30
    }
31
32
    public function load(ObjectManager $manager): void
33
    {
34
        $permissions = self::getPermissions();
35
        $roles = self::getRoles();
36
        $permissionsMapping = self::getPermissionsMapping();
37
38
        foreach ($permissions as $permData) {
39
            $existingPermission = $manager->getRepository(Permission::class)->findOneBy(['slug' => $permData['slug']]);
40
            if ($existingPermission) {
41
                continue;
42
            }
43
44
            $permission = new Permission();
45
            $permission->setTitle($permData['title']);
46
            $permission->setSlug($permData['slug']);
47
            $permission->setDescription($permData['description']);
48
            $manager->persist($permission);
49
50
            $manager->flush();
51
52
            foreach ($roles as $roleName => $roleCode) {
53
                if (\in_array($roleCode, $permissionsMapping[$permData['slug']])) {
54
55
                    $roleEntity = $manager->getRepository(Role::class)->findOneBy([
56
                        'code' => substr($roleName, 5),
57
                    ]);
58
59
                    if (!$roleEntity) {
60
                        throw new \RuntimeException("Role entity not found for code: " . $roleName);
61
                    }
62
63
                    $permRelRole = new PermissionRelRole();
64
                    $permRelRole->setPermission($permission);
65
                    $permRelRole->setRole($roleEntity);
66
                    $permRelRole->setChangeable(true);
67
                    $permRelRole->setUpdatedAt(new DateTime());
68
                    $manager->persist($permRelRole);
69
                }
70
            }
71
        }
72
73
        $manager->flush();
74
    }
75
76
    public static function getPermissions(): array
77
    {
78
        return [
79
            ['title' => 'View analytics', 'slug' => 'analytics:view', 'description' => 'View analytics data'],
80
            ['title' => 'View assigned analytics', 'slug' => 'analytics:viewassigned', 'description' => 'View results of users assigned to me'],
81
            ['title' => 'View all analytics', 'slug' => 'analytics:viewall', 'description' => 'View results of all users'],
82
            ['title' => 'Create assignment', 'slug' => 'assignment:create', 'description' => 'Create assignments'],
83
            ['title' => 'Delete assignment', 'slug' => 'assignment:delete', 'description' => 'Delete assignments'],
84
            ['title' => 'Edit assignment', 'slug' => 'assignment:edit', 'description' => 'Edit assignments'],
85
            ['title' => 'Grade assignment', 'slug' => 'assignment:grade', 'description' => 'Grade assignments'],
86
            ['title' => 'Submit assignment', 'slug' => 'assignment:submit', 'description' => 'Submit assignments'],
87
            ['title' => 'View assignment', 'slug' => 'assignment:view', 'description' => 'View assignments'],
88
            ['title' => 'Backup', 'slug' => 'backup:backup', 'description' => 'Backup'],
89
            ['title' => 'Copy backup', 'slug' => 'backup:copy', 'description' => 'Copy course content to another course'],
90
            ['title' => 'Restore backup', 'slug' => 'backup:restore', 'description' => 'Restore backup'],
91
            ['title' => 'Configure badge criteria', 'slug' => 'badge:configurecriteria', 'description' => 'Configure badge criteria'],
92
            ['title' => 'Create badge', 'slug' => 'badge:create', 'description' => 'Create badges'],
93
            ['title' => 'Delete badge', 'slug' => 'badge:delete', 'description' => 'Delete badges'],
94
            ['title' => 'Edit badge', 'slug' => 'badge:edit', 'description' => 'Edit badges'],
95
            ['title' => 'View badge', 'slug' => 'badge:view', 'description' => 'View badges'],
96
            ['title' => 'Create calendar event', 'slug' => 'calendar:create', 'description' => 'Create calendar events'],
97
            ['title' => 'Delete calendar event', 'slug' => 'calendar:delete', 'description' => 'Delete calendar events'],
98
            ['title' => 'Edit calendar event', 'slug' => 'calendar:edit', 'description' => 'Edit calendar events'],
99
            ['title' => 'View courses catalogue', 'slug' => 'catalogue:view', 'description' => 'View courses catalogue'],
100
            ['title' => 'Create certificate template', 'slug' => 'certificate:create', 'description' => 'Create certificate templates'],
101
            ['title' => 'Delete certificate template', 'slug' => 'certificate:delete', 'description' => 'Delete certificate templates'],
102
            ['title' => 'Edit certificate template', 'slug' => 'certificate:edit', 'description' => 'Edit certificate templates'],
103
            ['title' => 'Generate certificate', 'slug' => 'certificate:generate', 'description' => 'Generate certificates'],
104
            ['title' => 'Generate all certificates', 'slug' => 'certificate:generateall', 'description' => 'Generate all certificates in a gradebook'],
105
            ['title' => 'View all certificates', 'slug' => 'certificate:viewall', 'description' => 'View all instances of one certificate issued to all users'],
106
            ['title' => 'Assign course to class', 'slug' => 'class:assigncourse', 'description' => 'Assign a class to a course'],
107
            ['title' => 'Assign cession to class', 'slug' => 'class:assignsession', 'description' => 'Assign a class to a session'],
108
            ['title' => 'Assign user to class', 'slug' => 'class:assignuser', 'description' => 'Assign a user to a class'],
109
            ['title' => 'Create class', 'slug' => 'class:create', 'description' => 'Create global classes of users'],
110
            ['title' => 'Delete class', 'slug' => 'class:delete', 'description' => 'Delete global classes'],
111
            ['title' => 'Edit class', 'slug' => 'class:edit', 'description' => 'Edit global classes'],
112
            ['title' => 'View class', 'slug' => 'class:view', 'description' => 'View global classes details'],
113
            ['title' => 'Create CMS page', 'slug' => 'cms:create', 'description' => 'Create CMS pages'],
114
            ['title' => 'Delete CMS page', 'slug' => 'cms:delete', 'description' => 'Delete CMS pages'],
115
            ['title' => 'Edit CMS page', 'slug' => 'cms:edit', 'description' => 'Edit CMS pages'],
116
            ['title' => 'Create course space', 'slug' => 'course:create', 'description' => 'Create courses'],
117
            ['title' => 'Delete course space', 'slug' => 'course:delete', 'description' => 'Delete courses'],
118
            ['title' => 'Download course content', 'slug' => 'course:downloadcoursecontent', 'description' => 'Download all course content'],
119
            ['title' => 'Edit own course properties', 'slug' => 'course:edit', 'description' => 'Edit own course\'s properties'],
120
            ['title' => 'Edit all course properties', 'slug' => 'course:editall', 'description' => 'Edit all course\'s properties'],
121
            ['title' => 'Manage plugins', 'slug' => 'plugin:manage', 'description' => 'Enable/disable/configure plugins'],
122
            ['title' => 'Create quiz', 'slug' => 'quiz:create', 'description' => 'Create quizzes'],
123
            ['title' => 'Delete quiz', 'slug' => 'quiz:delete', 'description' => 'Delete quizzes'],
124
            ['title' => 'Edit quiz', 'slug' => 'quiz:edit', 'description' => 'Edit quizzes'],
125
            ['title' => 'Grade quiz', 'slug' => 'quiz:grade', 'description' => 'Grade quizzes'],
126
            ['title' => 'View live quiz results', 'slug' => 'quiz:viewliveresults', 'description' => 'View live quiz results'],
127
            ['title' => 'Manage question bank', 'slug' => 'quiz:managequestionbank', 'description' => 'Manage question bank'],
128
            ['title' => 'Create role', 'slug' => 'role:create', 'description' => 'Create roles'],
129
            ['title' => 'Manage role permissions', 'slug' => 'role:managepermissions', 'description' => 'Assign or remove permissions from roles'],
130
            ['title' => 'Create session', 'slug' => 'session:create', 'description' => 'Create sessions'],
131
            ['title' => 'Delete session', 'slug' => 'session:delete', 'description' => 'Delete sessions'],
132
            ['title' => 'Edit own session properties', 'slug' => 'session:edit', 'description' => 'Edit properties of user\'s own sessions'],
133
            ['title' => 'Edit all session properties', 'slug' => 'session:editall', 'description' => 'Edit properties of all sessions'],
134
            ['title' => 'Assign course to session', 'slug' => 'session:assigncourse', 'description' => 'Assign a course to a session'],
135
            ['title' => 'Edit site settings', 'slug' => 'site:editsettings', 'description' => 'Manage settings of the platform'],
136
            ['title' => 'Access site maintenance', 'slug' => 'site:maintenanceaccess', 'description' => 'Access site maintenance'],
137
            ['title' => 'Manage course competency', 'slug' => 'skill:coursecompetencymanage', 'description' => 'Assign skills through course grade books'],
138
            ['title' => 'Review user competency', 'slug' => 'skill:usercompetencyreview', 'description' => 'Add comments on other user\'s acquired skills'],
139
            ['title' => 'Assign skill', 'slug' => 'skill:assign', 'description' => 'Assign a skill to a user'],
140
            ['title' => 'Create skill', 'slug' => 'skill:create', 'description' => 'Create skills'],
141
            ['title' => 'Delete skill', 'slug' => 'skill:delete', 'description' => 'Delete skills'],
142
            ['title' => 'Edit skill', 'slug' => 'skill:edit', 'description' => 'Edit skills'],
143
            ['title' => 'View skill', 'slug' => 'skill:view', 'description' => 'View all skills acquired by users in manager\'s context'],
144
            ['title' => 'View all skills', 'slug' => 'skill:viewall', 'description' => 'View all skills acquired by users of the platform'],
145
            ['title' => 'Create survey', 'slug' => 'survey:create', 'description' => 'Create surveys (global or inside own course)'],
146
            ['title' => 'Delete survey', 'slug' => 'survey:delete', 'description' => 'Delete surveys'],
147
            ['title' => 'Edit survey', 'slug' => 'survey:edit', 'description' => 'Edit surveys'],
148
            ['title' => 'Submit survey', 'slug' => 'survey:submit', 'description' => 'Submit surveys'],
149
            ['title' => 'View survey results', 'slug' => 'survey:viewresults', 'description' => 'View survey results'],
150
            ['title' => 'Comment on ticket', 'slug' => 'ticket:comment', 'description' => 'Comment on tickets'],
151
            ['title' => 'Manage tickets', 'slug' => 'ticket:manage', 'description' => 'Manage the tickets system'],
152
            ['title' => 'Report ticket', 'slug' => 'ticket:report', 'description' => 'Create tickets (most users should be able to report issues)'],
153
            ['title' => 'See ticket issues', 'slug' => 'ticket:seeissues', 'description' => 'See issue details for issues where user\'s involved'],
154
            ['title' => 'View all ticket issues', 'slug' => 'ticket:viewallissues', 'description' => 'View all issues'],
155
            ['title' => 'Edit tool visibility', 'slug' => 'tool:editvisibility', 'description' => 'Allow setting the visibility of a tool in a course'],
156
            ['title' => 'Manage URL', 'slug' => 'url:manage', 'description' => 'Manage Multi-URL configuration'],
157
            ['title' => 'Assign classes to URL', 'slug' => 'url:assignclass', 'description' => 'Assign classes to URL'],
158
            ['title' => 'Assign courses to URL', 'slug' => 'url:assigncourse', 'description' => 'Assign courses to URL'],
159
            ['title' => 'Assign users to URL', 'slug' => 'url:assignuser', 'description' => 'Assign users to URL'],
160
            ['title' => 'Assign user to course', 'slug' => 'user:assigncourse', 'description' => 'Assign a user to a course'],
161
            ['title' => 'Assign user to session', 'slug' => 'user:assignsession', 'description' => 'Assign a user to a session'],
162
            ['title' => 'Create user', 'slug' => 'user:create', 'description' => 'Create users'],
163
            ['title' => 'Delete user', 'slug' => 'user:delete', 'description' => 'Delete users'],
164
            ['title' => 'Edit user', 'slug' => 'user:edit', 'description' => 'Edit users'],
165
            ['title' => 'Edit user Role', 'slug' => 'user:editrole', 'description' => 'Edit user roles'],
166
            ['title' => 'Login as user', 'slug' => 'user:loginas', 'description' => 'Login as another user'],
167
            ['title' => 'Edit Course Settings', 'slug' => 'course:editsettings', 'description' => 'Edit settings of a course'],
168
        ];
169
    }
170
171
    public static function getRoles(): array
172
    {
173
        return [
174
            'ROLE_INVITEE' => 'INV',
175
            'ROLE_STUDENT' => 'STU',
176
            'ROLE_TEACHER' => 'TEA',
177
            'ROLE_ADMIN' => 'ADM',
178
            'ROLE_SUPER_ADMIN' => 'SUA',
179
            'ROLE_GLOBAL_ADMIN' => 'GLO',
180
            'ROLE_HR' => 'HRM',
181
            'ROLE_QUESTION_MANAGER' => 'QBM',
182
            'ROLE_SESSION_MANAGER' => 'SSM',
183
            'ROLE_STUDENT_BOSS' => 'STB',
184
        ];
185
    }
186
187
    public static function getPermissionsMapping(): array
188
    {
189
        return [
190
            'analytics:view' => ['INV', 'STU', 'TEA', 'ADM', 'SUA', 'GLO', 'HRM', 'QBM', 'SSM', 'STB'],
191
            'analytics:viewassigned' => ['TEA', 'ADM', 'SUA', 'GLO', 'HRM', 'SSM', 'STB'],
192
            'analytics:viewall' => ['ADM', 'SUA', 'GLO', 'SSM', 'STB'],
193
            'assignment:create' => ['TEA'],
194
            'assignment:delete' => ['TEA', 'ADM', 'SUA', 'GLO'],
195
            'assignment:edit' => ['TEA', 'ADM', 'SUA', 'GLO'],
196
            'assignment:grade' => ['TEA'],
197
            'assignment:submit' => ['STU'],
198
            'assignment:view' => ['INV', 'STU', 'TEA', 'ADM', 'SUA', 'GLO', 'HRM', 'SSM', 'STB'],
199
            'backup:backup' => ['TEA', 'ADM', 'SUA', 'GLO', 'SSM'],
200
            'backup:copy' => ['TEA', 'ADM', 'SUA', 'GLO', 'SSM'],
201
            'backup:restore' => ['TEA', 'ADM', 'SUA', 'GLO', 'SSM'],
202
            'badge:configurecriteria' => ['ADM', 'SUA', 'GLO', 'SSM'],
203
            'badge:create' => ['ADM', 'SUA', 'GLO', 'SSM'],
204
            'badge:edit' => ['ADM', 'SUA', 'GLO', 'SSM'],
205
            'badge:delete' => ['ADM', 'SUA', 'GLO', 'SSM'],
206
            'badge:view' => ['INV', 'STU', 'TEA', 'ADM', 'SUA', 'GLO', 'SSM', 'STB'],
207
            'calendar:create' => ['ADM', 'SUA', 'GLO'],
208
            'calendar:edit' => ['ADM', 'SUA', 'GLO'],
209
            'calendar:delete' => ['ADM', 'SUA', 'GLO'],
210
            'catalogue:view' => ['INV', 'STU', 'TEA', 'ADM', 'SUA', 'GLO', 'HRM', 'QBM', 'SSM', 'STB'],
211
            'certificate:create' => ['TEA', 'SSM'],
212
            'certificate:delete' => ['TEA', 'SSM'],
213
            'certificate:edit' => ['TEA', 'SSM'],
214
            'certificate:generate' => ['STU', 'TEA', 'SSM'],
215
            'certificate:generateall' => ['TEA', 'HRM', 'SSM'],
216
            'certificate:viewall' => ['TEA', 'HRM', 'SSM', 'STB'],
217
            'class:assigncourse' => ['TEA', 'ADM', 'SUA', 'GLO'],
218
            'class:assignsession' => ['ADM', 'SUA', 'GLO', 'SSM'],
219
            'class:assignuser' => ['ADM', 'SUA', 'GLO', 'SSM'],
220
            'class:create' => ['ADM', 'SUA', 'GLO', 'SSM'],
221
            'class:delete' => ['ADM', 'SUA', 'GLO', 'SSM'],
222
            'class:edit' => ['ADM', 'SUA', 'GLO', 'SSM'],
223
            'class:view' => ['STU', 'TEA', 'ADM', 'SUA', 'GLO', 'SSM'],
224
            'cms:create' => ['ADM', 'SUA', 'GLO'],
225
            'cms:delete' => ['ADM', 'SUA', 'GLO'],
226
            'cms:edit' => ['ADM', 'SUA', 'GLO'],
227
            'course:create' => ['TEA', 'ADM', 'SUA', 'GLO', 'SSM'],
228
            'course:delete' => ['TEA', 'ADM', 'SUA', 'GLO'],
229
            'course:downloadcoursecontent' => ['TEA', 'ADM', 'SUA', 'GLO', 'SSM'],
230
            'course:edit' => ['TEA', 'SSM'],
231
            'course:editall' => ['ADM', 'SUA', 'GLO'],
232
            'plugin:manage' => ['ADM', 'SUA', 'GLO'],
233
            'quiz:create' => ['TEA', 'QBM'],
234
            'quiz:delete' => ['TEA', 'QBM'],
235
            'quiz:edit' => ['TEA', 'QBM'],
236
            'quiz:grade' => ['TEA'],
237
            'quiz:viewliveresults' => ['TEA', 'SSM'],
238
            'quiz:managequestionbank' => ['ADM', 'SUA', 'GLO', 'QBM'],
239
            'role:create' => ['ADM', 'SUA', 'GLO'],
240
            'role:managepermissions' => ['ADM', 'SUA', 'GLO'],
241
            'session:create' => ['ADM', 'SUA', 'GLO', 'SSM'],
242
            'session:delete' => ['ADM', 'SUA', 'GLO', 'SSM'],
243
            'session:edit' => ['ADM', 'SUA', 'GLO', 'SSM'],
244
            'session:editall' => ['ADM', 'SUA', 'GLO', 'SSM'],
245
            'session:assigncourse' => ['ADM', 'SUA', 'GLO', 'SSM'],
246
            'site:editsettings' => ['ADM', 'SUA', 'GLO'],
247
            'site:maintenanceaccess' => ['ADM', 'SUA', 'GLO'],
248
            'skill:coursecompetencymanage' => ['TEA', 'ADM', 'SUA', 'GLO', 'HRM'],
249
            'skill:usercompetencyreview' => ['STU', 'TEA', 'ADM', 'SUA', 'GLO'],
250
            'skill:assign' => ['ADM', 'SUA', 'GLO'],
251
            'skill:create' => ['GLO'],
252
            'skill:delete' => ['GLO'],
253
            'skill:edit' => ['GLO'],
254
            'skill:view' => ['ADM', 'SUA', 'GLO', 'SSM', 'STB'],
255
            'skill:viewall' => ['ADM', 'SUA', 'GLO', 'SSM', 'STB'],
256
            'survey:create' => ['TEA'],
257
            'survey:delete' => ['TEA'],
258
            'survey:edit' => ['TEA'],
259
            'survey:submit' => ['INV', 'STU', 'TEA', 'ADM', 'SUA', 'GLO', 'SSM', 'STB'],
260
            'survey:viewresults' => ['TEA', 'HRM', 'SSM', 'STB'],
261
            'ticket:comment' => ['STU', 'TEA', 'ADM', 'SUA', 'GLO', 'HRM', 'QBM', 'SSM', 'STB'],
262
            'ticket:manage' => ['ADM', 'SUA', 'GLO'],
263
            'ticket:report' => ['STU', 'TEA', 'ADM', 'SUA', 'GLO', 'HRM', 'QBM', 'SSM', 'STB'],
264
            'ticket:seeissues' => ['STU', 'TEA', 'ADM', 'SUA', 'GLO', 'SSM', 'STB'],
265
            'ticket:viewallissues' => ['ADM', 'SUA', 'GLO', 'SSM', 'STB'],
266
            'tool:editvisibility' => ['TEA', 'ADM', 'SUA', 'GLO', 'SSM'],
267
            'url:manage' => ['GLO'],
268
            'url:assignclass' => ['GLO'],
269
            'url:assigncourse' => ['GLO'],
270
            'url:assignuser' => ['GLO'],
271
            'user:assigncourse' => ['TEA', 'ADM', 'SUA', 'GLO'],
272
            'user:assignsession' => ['ADM', 'SUA', 'GLO', 'SSM'],
273
            'user:create' => ['ADM', 'SUA', 'GLO'],
274
            'user:delete' => ['ADM', 'SUA', 'GLO'],
275
            'user:edit' => ['ADM', 'SUA', 'GLO'],
276
            'user:editrole' => ['ADM', 'SUA', 'GLO'],
277
            'user:loginas' => ['SUA', 'GLO'],
278
            'course:editsettings' => ['TEA', 'ADM', 'SUA', 'GLO'],
279
        ];
280
    }
281
}
282