Passed
Pull Request — master (#5296)
by Angel Fernando Quiroz
08:31
created

IndexBlocksController::getExtraContent()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 19
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

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