Passed
Push — master ( 82acb1...d4517f )
by Yannick
08:45
created

IndexBlocksController::getItemsSecurity()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 4
nc 1
nop 0
dl 0
loc 7
rs 10
c 0
b 0
f 0
1
<?php
2
3
/* For licensing terms, see /license.txt */
4
5
declare(strict_types=1);
6
7
namespace Chamilo\CoreBundle\Controller\Admin;
8
9
use Chamilo\CoreBundle\Controller\BaseController;
10
use Chamilo\CoreBundle\Entity\Page;
11
use Chamilo\CoreBundle\Entity\PageCategory;
12
use Chamilo\CoreBundle\Entity\SequenceResource;
13
use Chamilo\CoreBundle\Event\AbstractEvent;
14
use Chamilo\CoreBundle\Event\AdminBlockDisplayedEvent;
15
use Chamilo\CoreBundle\Event\Events;
16
use Chamilo\CoreBundle\Repository\PageCategoryRepository;
17
use Chamilo\CoreBundle\Repository\PageRepository;
18
use Chamilo\CoreBundle\Settings\SettingsManager;
19
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
20
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
21
use Symfony\Component\HttpFoundation\JsonResponse;
22
use Symfony\Component\Routing\Attribute\Route;
23
use Symfony\Component\Serializer\SerializerInterface;
24
use Symfony\Contracts\Translation\TranslatorInterface;
25
26
#[Security("is_granted('ROLE_ADMIN') or is_granted('ROLE_SESSION_MANAGER')")]
27
#[Route('/admin/index', name: 'admin_index_blocks')]
28
class IndexBlocksController extends BaseController
29
{
30
    private bool $isAdmin = false;
31
    private bool $isSessionAdmin = false;
32
    private array $extAuthSource = [];
33
34
    public function __construct(
35
        private readonly TranslatorInterface $translator,
36
        private readonly SettingsManager $settingsManager,
37
        private readonly PageRepository $pageRepository,
38
        private readonly PageCategoryRepository $pageCategoryRepository,
39
        private readonly SerializerInterface $serializer,
40
        private readonly EventDispatcherInterface $eventDispatcher,
41
    ) {
42
        $this->extAuthSource = [
43
            'extldap' => [],
44
            'ldap' => [],
45
        ];
46
    }
47
48
    public function __invoke(): JsonResponse
49
    {
50
        $this->isAdmin = $this->isGranted('ROLE_ADMIN');
51
        $this->isSessionAdmin = $this->isGranted('ROLE_SESSION_MANAGER');
52
53
        $json = [];
54
55
        $adminBlockEvent = new AdminBlockDisplayedEvent($json, AbstractEvent::TYPE_PRE);
56
57
        $this->eventDispatcher->dispatch($adminBlockEvent, Events::ADMIN_BLOCK_DISPLAYED);
58
59
        $json = $adminBlockEvent->getData();
60
61
        $json['users'] = [
62
            'id' => 'block-admin-users',
63
            'searchUrl' => $this->generateUrl('legacy_main', ['name' => 'admin/user_list.php']),
64
            'editable' => $this->isAdmin,
65
            'items' => $this->getItemsUsers(),
66
            'extraContent' => $this->getExtraContent('block-admin-users'),
67
        ];
68
69
        if ($this->isAdmin) {
70
            $json['courses'] = [
71
                'id' => 'block-admin-courses',
72
                'searchUrl' => $this->generateUrl('legacy_main', ['name' => 'admin/course_list.php']),
73
                'editable' => true,
74
                'items' => $this->getItemsCourses(),
75
                'extraContent' => $this->getExtraContent('block-admin-courses'),
76
            ];
77
78
            $json['platform'] = [
79
                'id' => 'block-admin-platform',
80
                'searchUrl' => $this->generateUrl('chamilo_platform_settings_search'),
81
                'editable' => true,
82
                'items' => $this->getItemsPlatform(),
83
                'extraContent' => $this->getExtraContent('block-admin-platform'),
84
            ];
85
86
            /* Settings */
87
            $json['settings'] = [
88
                'id' => 'block-admin-settings',
89
                'editable' => false,
90
                'items' => $this->getItemsSettings(),
91
                'extraContent' => $this->getExtraContent('block-admin-settings'),
92
            ];
93
94
            // Skills
95
            if ('true' === $this->settingsManager->getSetting('skill.allow_skills_tool')) {
96
                $json['skills'] = [
97
                    'id' => 'block-admin-skills',
98
                    'editable' => false,
99
                    'items' => $this->getItemsSkills(),
100
                    'extraContent' => $this->getExtraContent('block-admin-skills'),
101
                ];
102
            }
103
104
            if ('true' === $this->settingsManager->getSetting('gradebook.gradebook_dependency')) {
105
                $json['gradebook'] = [
106
                    'id' => 'block-admin-gradebook',
107
                    'editable' => false,
108
                    'items' => $this->getItemsGradebook(),
109
                    'extraContent' => $this->getExtraContent('block-admin-gradebook'),
110
                ];
111
            }
112
113
            // Data protection
114
            if ('true' !== $this->settingsManager->getSetting('profile.disable_gdpr')) {
115
                $json['data_privacy'] = [
116
                    'id' => 'block-admin-privacy',
117
                    'editable' => false,
118
                    'items' => $this->getItemsPrivacy(),
119
                    'extraContent' => $this->getExtraContent('block-admin-privacy'),
120
                ];
121
            }
122
123
            $json['security'] = [
124
                'id' => 'block-admin-security',
125
                'editable' => false,
126
                'items' => $this->getItemsSecurity(),
127
                'extraContent' => $this->getExtraContent('block-admin-security'),
128
            ];
129
130
            /* Chamilo.org */
131
            $json['chamilo'] = [
132
                'id' => 'block-admin-chamilo',
133
                'editable' => false,
134
                'items' => $this->getItemsChamilo(),
135
                'extraContent' => $this->getExtraContent('block-admin-chamilo'),
136
            ];
137
        }
138
139
        /* Sessions */
140
        $json['sessions'] = [
141
            'id' => 'block-admin-sessions',
142
            'searchUrl' => $this->generateUrl('legacy_main', ['name' => 'session/session_list.php']),
143
            'editable' => $this->isAdmin,
144
            'items' => $this->getItemsSessions(),
145
            'extraContent' => $this->getExtraContent('block-admin-sessions'),
146
        ];
147
148
        $adminBlockEvent = new AdminBlockDisplayedEvent($json, AbstractEvent::TYPE_POST);
149
150
        $this->eventDispatcher->dispatch($adminBlockEvent, Events::ADMIN_BLOCK_DISPLAYED);
151
152
        $json = $adminBlockEvent->getData();
153
154
        return $this->json($json);
155
    }
156
157
    private function getItemsSecurity(): array
158
    {
159
        return [
160
            [
161
                'class' => 'item-security-login-attempts',
162
                'url'   => $this->generateUrl('admin_security_login_attempts'),
163
                'label' => $this->translator->trans('Login attempts'),
164
            ],
165
        ];
166
    }
167
168
    private function getItemsUsers(): array
169
    {
170
        $items = [];
171
        $items[] = [
172
            'class' => 'item-user-list',
173
            'url' => $this->generateUrl('legacy_main', ['name' => 'admin/user_list.php']),
174
            'label' => $this->translator->trans('User list'),
175
        ];
176
        $items[] = [
177
            'class' => 'item-user-add',
178
            'url' => $this->generateUrl('legacy_main', ['name' => 'admin/user_add.php']),
179
            'label' => $this->translator->trans('Add a user'),
180
        ];
181
182
        if ($this->isAdmin) {
183
            $items[] = [
184
                'class' => 'item-user-export',
185
                'url' => $this->generateUrl('legacy_main', ['name' => 'admin/user_export.php']),
186
                'label' => $this->translator->trans('Export users list'),
187
            ];
188
            $items[] = [
189
                'class' => 'item-user-import',
190
                'url' => $this->generateUrl('legacy_main', ['name' => 'admin/user_import.php']),
191
                'label' => $this->translator->trans('Import users list'),
192
            ];
193
            $items[] = [
194
                'class' => 'item-user-import-update',
195
                'url' => $this->generateUrl('legacy_main', ['name' => 'admin/user_update_import.php']),
196
                'label' => $this->translator->trans('Edit users list'),
197
            ];
198
            $items[] = [
199
                'class' => 'item-user-import-anonymize',
200
                'url' => $this->generateUrl('legacy_main', ['name' => 'admin/user_anonymize_import.php']),
201
                'label' => $this->translator->trans('Anonymise users list'),
202
            ];
203
204
            if (\count($this->extAuthSource['extldap']) > 0) {
205
                $items[] = [
206
                    'class' => 'item-user-ldap-list',
207
                    'url' => $this->generateUrl('legacy_main', ['name' => 'admin/ldap_users_list.php']),
208
                    'label' => $this->translator->trans('Import LDAP users into the platform'),
209
                ];
210
            }
211
212
            $items[] = [
213
                'class' => 'item-user-field',
214
                'url' => $this->generateUrl('legacy_main', ['name' => 'admin/extra_fields.php', 'type' => 'user']),
215
                'label' => $this->translator->trans('Profiling'),
216
            ];
217
            $items[] = [
218
                'class' => 'item-user-groups',
219
                'url' => $this->generateUrl('legacy_main', ['name' => 'admin/usergroups.php']),
220
                'label' => $this->translator->trans('Classes'),
221
            ];
222
223
            if ('true' === $this->settingsManager->getSetting('admin.show_link_request_hrm_user')) {
224
                $items[] = [
225
                    'class' => 'item-user-linking-requests',
226
                    'url' => $this->generateUrl('legacy_main', ['name' => 'admin/user_linking_requests.php']),
227
                    'label' => $this->translator->trans('Student linking requests'),
228
                ];
229
            }
230
        } else {
231
            $items[] = [
232
                'class' => 'item-user-import',
233
                'url' => $this->generateUrl('legacy_main', ['name' => 'admin/user_import.php']),
234
                'label' => $this->translator->trans('Import users list'),
235
            ];
236
            $items[] = [
237
                'class' => 'item-user-groups',
238
                'url' => $this->generateUrl('legacy_main', ['name' => 'admin/usergroups.php']),
239
                'label' => $this->translator->trans('Classes'),
240
            ];
241
242
            if ('true' === $this->settingsManager->getSetting('session.limit_session_admin_role')) {
243
                $items = array_filter($items, function (array $item) {
244
                    $urls = [
245
                        $this->generateUrl('legacy_main', ['name' => 'admin/user_list.php']),
246
                        $this->generateUrl('legacy_main', ['name' => 'admin/user_add.php']),
247
                    ];
248
249
                    return \in_array($item['url'], $urls, true);
250
                });
251
            }
252
253
            if ('true' === $this->settingsManager->getSetting('session.limit_session_admin_list_users')) {
254
                $items = array_filter($items, function (array $item): bool {
255
                    $urls = [
256
                        $this->generateUrl('legacy_main', ['name' => 'admin/user_list.php']),
257
                    ];
258
259
                    return !\in_array($item['url'], $urls, true);
260
                });
261
            }
262
263
            if ('true' === $this->settingsManager->getSetting('session.allow_session_admin_extra_access')) {
264
                $items[] = [
265
                    'class' => 'item-user-import-update',
266
                    'url' => $this->generateUrl('legacy_main', ['name' => 'admin/user_update_import.php']),
267
                    'label' => $this->translator->trans('Edit users list'),
268
                ];
269
                $items[] = [
270
                    'class' => 'item-user-export',
271
                    'url' => $this->generateUrl('legacy_main', ['name' => 'admin/user_export.php']),
272
                    'label' => $this->translator->trans('Export users list'),
273
                ];
274
            }
275
        }
276
277
        return array_values($items);
278
    }
279
280
    private function getExtraContent(string $title): ?array
281
    {
282
        /** @var Page|null $page */
283
        $page = $this->pageRepository->findOneBy(['title' => $title]);
284
285
        $pageJsonld = $this->serializer->serialize($page, 'jsonld', ['groups' => ['adminblock:read']]);
286
        $pageArray = json_decode($pageJsonld, true);
287
288
        if ($page) {
289
            return $pageArray;
290
        }
291
292
        /** @var PageCategory $category */
293
        $category = $this->pageCategoryRepository->findOneBy(['title' => $title]);
294
        $categoryJsonld = $this->serializer->serialize($category, 'jsonld', ['groups' => ['page:read']]);
295
        $categoryArray = json_decode($categoryJsonld, true);
296
297
        if (empty($categoryArray)) {
298
            return [];
299
        }
300
301
        return [
302
            'category' => $categoryArray['@id'],
303
        ];
304
    }
305
306
    private function getItemsCourses(): array
307
    {
308
        $items = [];
309
        $items[] = [
310
            'class' => 'item-course-list',
311
            'url' => $this->generateUrl('legacy_main', ['name' => 'admin/course_list.php']),
312
            'label' => $this->translator->trans('Course list'),
313
        ];
314
        $items[] = [
315
            'class' => 'item-course-add',
316
            'url' => $this->generateUrl('legacy_main', ['name' => 'admin/course_add.php']),
317
            'label' => $this->translator->trans('Add course'),
318
        ];
319
320
        if ('true' === $this->settingsManager->getSetting('course.course_validation')) {
321
            $items[] = [
322
                'class' => 'item-course-request',
323
                'url' => $this->generateUrl('legacy_main', ['name' => 'admin/course_request_review.php']),
324
                'label' => $this->translator->trans('Review incoming course requests'),
325
            ];
326
            $items[] = [
327
                'class' => 'item-course-request-accepted',
328
                'url' => $this->generateUrl('legacy_main', ['name' => 'admin/course_request_accepted.php']),
329
                'label' => $this->translator->trans('Accepted course requests'),
330
            ];
331
            $items[] = [
332
                'class' => 'item-course-request-rejected',
333
                'url' => $this->generateUrl('legacy_main', ['name' => 'admin/course_request_rejected.php']),
334
                'label' => $this->translator->trans('Rejected course requests'),
335
            ];
336
        }
337
338
        $items[] = [
339
            'class' => 'item-course-export',
340
            'url' => $this->generateUrl('legacy_main', ['name' => 'admin/course_export.php']),
341
            'label' => $this->translator->trans('Export courses'),
342
        ];
343
        $items[] = [
344
            'class' => 'item-course-import',
345
            'url' => $this->generateUrl('legacy_main', ['name' => 'admin/course_import.php']),
346
            'label' => $this->translator->trans('Import courses list'),
347
        ];
348
        $items[] = [
349
            'class' => 'item-course-category',
350
            'url' => $this->generateUrl('legacy_main', ['name' => 'admin/course_category.php']),
351
            'label' => $this->translator->trans('Course categories'),
352
        ];
353
        $items[] = [
354
            'class' => 'item-course-subscription',
355
            'url' => $this->generateUrl('legacy_main', ['name' => 'admin/subscribe_user2course.php']),
356
            'label' => $this->translator->trans('Add a user to a course'),
357
        ];
358
        $items[] = [
359
            'class' => 'item-course-subscription-import',
360
            'url' => $this->generateUrl('legacy_main', ['name' => 'admin/course_user_import.php']),
361
            'label' => $this->translator->trans('Import users list'),
362
        ];
363
        // $items[] = [
364
        //    'url'=>'course_intro_pdf_import.php',
365
        //    'label' => $this->translator->$this->trans('Import PDF introductions into courses'),
366
        // ];
367
368
        if ('true' === $this->settingsManager->getSetting('gradebook.gradebook_enable_grade_model')) {
369
            $items[] = [
370
                'class' => 'item-grade-model',
371
                'url' => $this->generateUrl('legacy_main', ['name' => 'admin/grade_models.php']),
372
                'label' => $this->translator->trans('Grading model'),
373
            ];
374
        }
375
376
        if (\count($this->extAuthSource['ldap']) > 0) {
377
            $items[] = [
378
                'class' => 'item-course-subscription-ldap',
379
                'url' => $this->generateUrl('legacy_main', ['name' => 'admin/ldap_import_students.php']),
380
                'label' => $this->translator->trans('Import LDAP users into a course'),
381
            ];
382
        }
383
384
        $items[] = [
385
            'class' => 'item-course-field',
386
            'url' => $this->generateUrl('legacy_main', ['name' => 'admin/extra_fields.php', 'type' => 'course']),
387
            'label' => $this->translator->trans('Manage extra fields for courses'),
388
        ];
389
        $items[] = [
390
            'class' => 'item-question-bank',
391
            'url' => $this->generateUrl('legacy_main', ['name' => 'admin/questions.php']),
392
            'label' => $this->translator->trans('Questions'),
393
        ];
394
        $items[] = [
395
            'class' => 'item-resource-sequence',
396
            'url' => $this->generateUrl('legacy_main', ['name' => 'admin/resource_sequence.php', 'type' => SequenceResource::COURSE_TYPE]),
397
            'label' => $this->translator->trans('Resources sequencing'),
398
        ];
399
400
        return $items;
401
    }
402
403
    private function getItemsPlatform(): array
404
    {
405
        $items = [];
406
        $items[] = [
407
            'class' => 'item-setting-list',
408
            'url' => $this->generateUrl('admin_settings'),
409
            'label' => $this->translator->trans('Configuration settings'),
410
        ];
411
        $items[] = [
412
            'class' => 'item-language-list',
413
            'url' => $this->generateUrl('legacy_main', ['name' => 'admin/languages.php']),
414
            'label' => $this->translator->trans('Languages'),
415
        ];
416
        $items[] = [
417
            'class' => 'item-plugin-list',
418
            'url' => $this->generateUrl(
419
                'legacy_main',
420
                ['name' => 'admin/settings.php', 'category' => 'Plugins']
421
            ),
422
            'label' => $this->translator->trans('Plugins'),
423
        ];
424
        $items[] = [
425
            'class' => 'item-region-list',
426
            'url' => $this->generateUrl('legacy_main', ['name' => 'admin/settings.php', 'category' => 'Regions']),
427
            'label' => $this->translator->trans('Regions'),
428
        ];
429
        $items[] = [
430
            'class' => 'item-global-announcement',
431
            'url' => $this->generateUrl('legacy_main', ['name' => 'admin/system_announcements.php']),
432
            'label' => $this->translator->trans('Portal news'),
433
        ];
434
        $items[] = [
435
            'class' => 'item-global-agenda',
436
            'route' => ['name' => 'CCalendarEventList', 'query' => ['type' => 'global']],
437
            'label' => $this->translator->trans('Global agenda'),
438
        ];
439
        $items[] = [
440
            'class' => 'item-agenda-reminders',
441
            'url' => $this->generateUrl('legacy_main', ['name' => 'admin/import_course_agenda_reminders.php']),
442
            'label' => $this->translator->trans('Import course events'),
443
        ];
444
        $items[] = [
445
            'class' => 'item-pages-list',
446
            'route' => ['name' => 'PageList'],
447
            'label' => $this->translator->trans('Pages'),
448
        ];
449
        $items[] = [
450
            'class' => 'item-page-layouts',
451
            'route' => ['name' => 'PageLayoutList'],
452
            'label' => $this->translator->trans('Page layouts'),
453
        ];
454
        $items[] = [
455
            'class' => 'item-registration-page',
456
            'url' => $this->generateUrl('legacy_main', ['name' => 'auth/registration.php', 'create_intro_page' => 1]),
457
            'label' => $this->translator->trans('Setting the registration page'),
458
        ];
459
        $items[] = [
460
            'class' => 'item-stats',
461
            'url' => $this->generateUrl('legacy_main', ['name' => 'admin/statistics/index.php']),
462
            'label' => $this->translator->trans('Statistics'),
463
        ];
464
        $items[] = [
465
            'class' => 'item-stats-report',
466
            'url' => $this->generateUrl('legacy_main', ['name' => 'my_space/company_reports.php']),
467
            'label' => $this->translator->trans('Reports'),
468
        ];
469
        $items[] = [
470
            'class' => 'item-teacher-time-report',
471
            'url' => $this->generateUrl('legacy_main', ['name' => 'admin/teacher_time_report.php']),
472
            'label' => $this->translator->trans('Teachers time report'),
473
        ];
474
475
        if (api_get_configuration_value('chamilo_cms')) {
476
            $items[] = [
477
                'class' => 'item-cms',
478
                'url' => api_get_path(WEB_PATH).'web/app_dev.php/administration/dashboard',
479
                'label' => $this->translator->trans('CMS'),
480
            ];
481
        }
482
483
        /* Event settings */
484
485
        $items[] = [
486
            'class' => 'item-field',
487
            'url' => $this->generateUrl('legacy_main', ['name' => 'admin/extra_field_list.php']),
488
            'label' => $this->translator->trans('Extra fields'),
489
        ];
490
491
        if (api_is_global_platform_admin()) {
492
            $items[] = [
493
                'class' => 'item-access-url',
494
                'url' => $this->generateUrl('legacy_main', ['name' => 'admin/access_urls.php']),
495
                'label' => $this->translator->trans('Configure multiple access URL'),
496
            ];
497
        }
498
499
        if ('true' === api_get_plugin_setting('dictionary', 'enable_plugin_dictionary')) {
500
            $items[] = [
501
                'class' => 'item-dictionary',
502
                'url' => api_get_path(WEB_PLUGIN_PATH).'Dictionary/terms.php',
503
                'label' => $this->translator->trans('Dictionary'),
504
            ];
505
        }
506
507
        if ('true' === $this->settingsManager->getSetting('registration.allow_terms_conditions', true)) {
508
            $items[] = [
509
                'class' => 'item-terms-and-conditions',
510
                'route' => ['name' => 'TermsConditionsList'],
511
                'label' => $this->translator->trans('Terms and Conditions'),
512
            ];
513
        }
514
515
        $items[] = [
516
            'class' => 'item-mail-template',
517
            'url' => $this->generateUrl('legacy_main', ['name' => 'mail_template/list.php']),
518
            'label' => $this->translator->trans('Mail templates'),
519
        ];
520
521
        if ('true' === api_get_setting('platform.notification_event')) {
522
            $items[] = [
523
                'class' => 'item-notification-list',
524
                'url' => $this->generateUrl('legacy_main', ['name' => 'notification_event/list.php']),
525
                'label' => $this->translator->trans('Notifications'),
526
            ];
527
        }
528
529
        $allowJustification = 'true' === api_get_plugin_setting('justification', 'tool_enable');
530
531
        if ($allowJustification) {
532
            $items[] = [
533
                'class' => 'item-justification-list',
534
                'url' => api_get_path(WEB_PLUGIN_PATH).'Justification/list.php',
535
                'label' => $this->translator->trans('Justification'),
536
            ];
537
        }
538
539
        $items[] = [
540
            'class' => 'item-lti-admin',
541
            'url' => $this->generateUrl('chamilo_lti_admin'),
542
            'label' => $this->translator->trans('External tools (LTI)'),
543
        ];
544
545
        $items[] = [
546
            'class' => 'item-contact-category-admin',
547
            'url' => $this->generateUrl('chamilo_contact_category_index'),
548
            'label' => $this->translator->trans('Contact form categories'),
549
        ];
550
551
        $items[] = [
552
            'class' => 'item-system-template-admin',
553
            'url' => $this->generateUrl('legacy_main', ['name' => 'admin/settings.php', 'category' => 'Templates']),
554
            'label' => $this->translator->trans('System templates'),
555
        ];
556
557
        return $items;
558
    }
559
560
    private function getItemsSettings(): array
561
    {
562
        $items = [];
563
        $items[] = [
564
            'class' => 'item-clean-cache',
565
            'url' => $this->generateUrl('legacy_main', ['name' => 'admin/archive_cleanup.php']),
566
            'label' => $this->translator->trans('Cleanup of cache and temporary files'),
567
        ];
568
569
        $items[] = [
570
            'class' => 'item-special-export',
571
            'url' => $this->generateUrl('legacy_main', ['name' => 'admin/special_exports.php']),
572
            'label' => $this->translator->trans('Special exports'),
573
        ];
574
        /*$items[] = [
575
            'url' => $this->>$this->generateUrl('legacy_main), ['name' => 'admin/periodic_export.php',
576
            'label' => $this->translator->$this->trans('Periodic export'),
577
        ];*/
578
        $items[] = [
579
            'class' => 'item-system-status',
580
            'url' => $this->generateUrl('legacy_main', ['name' => 'admin/system_status.php']),
581
            'label' => $this->translator->trans('System status'),
582
        ];
583
        if (is_dir(api_get_path(SYS_TEST_PATH).'datafiller/')) {
584
            $items[] = [
585
                'class' => 'item-data-filler',
586
                'url' => $this->generateUrl('legacy_main', ['name' => 'admin/filler.php']),
587
                'label' => $this->translator->trans('Data filler'),
588
            ];
589
        }
590
591
        if (is_dir(api_get_path(SYS_TEST_PATH))) {
592
            $items[] = [
593
                'class' => 'item-email-tester',
594
                'url' => $this->generateUrl('legacy_main', ['name' => 'admin/email_tester.php']),
595
                'label' => $this->translator->trans('E-mail tester'),
596
            ];
597
        }
598
599
        $items[] = [
600
            'class' => 'item-ticket-system',
601
            'url' => $this->generateUrl('legacy_main', ['name' => 'ticket/tickets.php']),
602
            'label' => $this->translator->trans('Tickets'),
603
        ];
604
605
        $items[] = [
606
            'url' => $this->generateUrl('legacy_main', ['name' => 'session/cron_status.php']),
607
            'label' => $this->translator->trans('Update session status'),
608
        ];
609
610
        $items[] = [
611
            'class' => 'item-colors',
612
            'route' => ['name' => 'AdminConfigurationColors'],
613
            'label' => $this->translator->trans('Colors'),
614
        ];
615
616
        $items[] = [
617
            'class' => 'item-file-info',
618
            'url' => '/admin/files_info',
619
            'label' => $this->translator->trans('File info'),
620
        ];
621
622
        $items[] = [
623
            'class' => 'item-resources-info',
624
            'url' => '/admin/resources_info',
625
            'label' => $this->translator->trans('Resources by type'),
626
        ];
627
628
        $items[] = [
629
            'class' => 'item-cleanup-temp-uploads',
630
            'url' => '/admin/cleanup-temp-uploads',
631
            'label' => $this->translator->trans('Clean uploaded temp files'),
632
        ];
633
634
        return $items;
635
    }
636
637
    private function getItemsSkills(): array
638
    {
639
        $items = [];
640
        $items[] = [
641
            'class' => 'item-skill-wheel',
642
            'route' => ['name' => 'SkillWheel'],
643
            'label' => $this->translator->trans('Skills wheel'),
644
        ];
645
        $items[] = [
646
            'class' => 'item-skill-import',
647
            'url' => $this->generateUrl('legacy_main', ['name' => 'skills/skills_import.php']),
648
            'label' => $this->translator->trans('Skills import'),
649
        ];
650
        $items[] = [
651
            'class' => 'item-skill-list',
652
            'url' => $this->generateUrl('legacy_main', ['name' => 'skills/skill_list.php']),
653
            'label' => $this->translator->trans('Manage skills'),
654
        ];
655
        $items[] = [
656
            'class' => 'item-skill-level',
657
            'url' => $this->generateUrl('legacy_main', ['name' => 'skills/skill.php']),
658
            'label' => $this->translator->trans('Manage skills levels'),
659
        ];
660
661
        $items[] = [
662
            'class' => 'item-skill-ranking',
663
            'url' => $this->generateUrl('legacy_main', ['name' => 'social/skills_ranking.php']),
664
            'label' => $this->translator->trans('Skills ranking'),
665
        ];
666
        $items[] = [
667
            'class' => 'item-skill-gradebook',
668
            'url' => $this->generateUrl('legacy_main', ['name' => 'skills/skills_gradebook.php']),
669
            'label' => $this->translator->trans('Skills and assessments'),
670
        ];
671
672
        /*$items[] = [
673
            'url' => $this->$this->generateUrl('legacy_main', ['name' => 'admin/skill_badge.php'),
674
            'label' => $this->translator->trans('Badges'),
675
        ];*/
676
677
        return $items;
678
    }
679
680
    private function getItemsGradebook(): array
681
    {
682
        $items = [];
683
        $items[] = [
684
            'class' => 'item-gradebook-list',
685
            'url' => $this->generateUrl('legacy_main', ['name' => 'gradebook_list.php']),
686
            'label' => $this->translator->trans('List'),
687
        ];
688
689
        return $items;
690
    }
691
692
    private function getItemsPrivacy(): array
693
    {
694
        $items = [];
695
        $items[] = [
696
            'class' => 'item-privacy-consent',
697
            'url' => $this->generateUrl('legacy_main', ['name' => 'admin/user_list_consent.php']),
698
            'label' => $this->translator->trans('User list'),
699
        ];
700
        $items[] = [
701
            'class' => 'item-gdpr-parties',
702
            'route' => ['name' => 'ThirdPartyManager'],
703
            'label' => $this->translator->trans('Third parties (GDPR)'),
704
        ];
705
706
        return $items;
707
    }
708
709
    private function getItemsChamilo(): array
710
    {
711
        $languageInterface = api_get_language_isocode();
712
713
        $items = [];
714
        $items[] = [
715
            'class' => 'item-software-homepage',
716
            'url' => 'https://chamilo.org/',
717
            'label' => $this->translator->trans('Chamilo homepage'),
718
        ];
719
720
        // Custom linking to user guides in the existing languages
721
        /*$guideLinks = [
722
            'french' => 'v/1.11.x-fr/',
723
            'spanish' => 'v/1.11.x-es/',
724
            'dutch' => 'v/1.11.x-nl/',
725
            'galician' => 'v/1.11.x-ga/',
726
        ];*/
727
728
        $guideLink = 'https://docs.chamilo.org/';
729
730
        /*if (!empty($guideLinks[$languageInterface])) {
731
            $guideLink .= $guideLinks[$languageInterface];
732
        }*/
733
734
        $items[] = [
735
            'class' => 'item-user-guides',
736
            'url' => $guideLink,
737
            'label' => $this->translator->trans('User guides'),
738
        ];
739
        $items[] = [
740
            'class' => 'item-forum',
741
            'url' => 'https://github.com/chamilo/chamilo-lms/discussions/',
742
            'label' => $this->translator->trans('Chamilo forum'),
743
        ];
744
        $items[] = [
745
            'class' => 'item-installation-guide',
746
            'url' => $this->generateUrl('legacy_main', ['name' => '../documentation/installation_guide.html']),
747
            'label' => $this->translator->trans('Installation guide'),
748
        ];
749
        $items[] = [
750
            'class' => 'item-changelog',
751
            'url' => $this->generateUrl('legacy_main', ['name' => '../documentation/changelog.html']),
752
            'label' => $this->translator->trans('Changes in last version'),
753
        ];
754
        $items[] = [
755
            'class' => 'item-credits',
756
            'url' => $this->generateUrl('legacy_main', ['name' => '../documentation/credits.html']),
757
            'label' => $this->translator->trans('Contributors list'),
758
        ];
759
        $items[] = [
760
            'class' => 'item-security',
761
            'url' => $this->generateUrl('legacy_main', ['name' => '../documentation/security.html']),
762
            'label' => $this->translator->trans('Security guide'),
763
        ];
764
        $items[] = [
765
            'class' => 'item-optimization',
766
            'url' => $this->generateUrl('legacy_main', ['name' => '../documentation/optimization.html']),
767
            'label' => $this->translator->trans('Optimization guide'),
768
        ];
769
        $items[] = [
770
            'class' => 'item-extensions',
771
            'url' => 'https://chamilo.org/extensions',
772
            'label' => $this->translator->trans('Chamilo extensions'),
773
        ];
774
        $items[] = [
775
            'class' => 'item-providers',
776
            'url' => 'https://chamilo.org/providers',
777
            'label' => $this->translator->trans('Chamilo official services providers'),
778
        ];
779
780
        return $items;
781
    }
782
783
    private function getItemsSessions(): array
784
    {
785
        $items = [];
786
        $items[] = [
787
            'class' => 'item-session-list',
788
            'url' => $this->generateUrl('legacy_main', ['name' => 'session/session_list.php']),
789
            'label' => $this->translator->trans('Training sessions list'),
790
        ];
791
        $items[] = [
792
            'class' => 'item-session-add',
793
            'url' => $this->generateUrl('legacy_main', ['name' => 'session/session_add.php']),
794
            'label' => $this->translator->trans('Add a training session'),
795
        ];
796
        $items[] = [
797
            'class' => 'item-session-category',
798
            'url' => $this->generateUrl('legacy_main', ['name' => 'session/session_category_list.php']),
799
            'label' => $this->translator->trans('Sessions categories list'),
800
        ];
801
        $items[] = [
802
            'class' => 'item-session-import',
803
            'url' => $this->generateUrl('legacy_main', ['name' => 'session/session_import.php']),
804
            'label' => $this->translator->trans('Import sessions list'),
805
        ];
806
        $items[] = [
807
            'class' => 'item-session-import-hr',
808
            'url' => $this->generateUrl('legacy_main', ['name' => 'session/session_import_drh.php']),
809
            'label' => $this->translator->trans('Import list of HR directors into sessions'),
810
        ];
811
        if (\count($this->extAuthSource['ldap']) > 0) {
812
            $items[] = [
813
                'class' => 'item-session-subscription-ldap-import',
814
                'url' => $this->generateUrl('legacy_main', ['name' => 'admin/ldap_import_students_to_session.php']),
815
                'label' => $this->translator->trans('Import LDAP users into a session'),
816
            ];
817
        }
818
        $items[] = [
819
            'class' => 'item-session-export',
820
            'url' => $this->generateUrl('legacy_main', ['name' => 'session/session_export.php']),
821
            'label' => $this->translator->trans('Export sessions list'),
822
        ];
823
824
        $items[] = [
825
            'class' => 'item-session-course-copy',
826
            'url' => $this->generateUrl('legacy_main', ['name' => 'coursecopy/copy_course_session.php']),
827
            'label' => $this->translator->trans('Copy from course in session to another session'),
828
        ];
829
830
        $allowCareer = $this->settingsManager->getSetting('session.allow_session_admin_read_careers');
831
832
        if ($this->isAdmin || ('true' === $allowCareer && $this->isSessionAdmin)) {
833
            // Disabled until it is reemplemented to work with Chamilo 2
834
            /*                $items[] = [
835
                                'class' => 'item-session-user-move-stats',
836
                                'url' => $this->generateUrl('legacy_main', ['name' => 'admin/user_move_stats.php']),
837
                                'label' => $this->translator->trans('Move users results from/to a session'),
838
                            ];
839
             */
840
            $items[] = [
841
                'class' => 'item-session-user-move',
842
                'url' => $this->generateUrl(
843
                    'legacy_main',
844
                    ['name' => 'coursecopy/move_users_from_course_to_session.php']
845
                ),
846
                'label' => $this->translator->trans('Move users results from base course to a session'),
847
            ];
848
849
            $items[] = [
850
                'class' => 'item-career-dashboard',
851
                'url' => $this->generateUrl('legacy_main', ['name' => 'admin/career_dashboard.php']),
852
                'label' => $this->translator->trans('Careers and promotions'),
853
            ];
854
            $items[] = [
855
                'class' => 'item-session-field',
856
                'url' => $this->generateUrl('legacy_main', ['name' => 'admin/extra_fields.php', 'type' => 'session']),
857
                'label' => $this->translator->trans('Manage session fields'),
858
            ];
859
            $items[] = [
860
                'class' => 'item-resource-sequence',
861
                'url' => $this->generateUrl('legacy_main', ['name' => 'admin/resource_sequence.php', 'type' => SequenceResource::SESSION_TYPE]),
862
                'label' => $this->translator->trans('Resources sequencing'),
863
            ];
864
            $items[] = [
865
                'class' => 'item-export-exercise-results',
866
                'url' => $this->generateUrl('legacy_main', ['name' => 'admin/export_exercise_results.php']),
867
                'label' => $this->translator->trans('Export all results from an exercise'),
868
            ];
869
        }
870
871
        return $items;
872
    }
873
}
874