Passed
Push — master ( cfc93d...628f6a )
by Yannick
08:02 queued 15s
created

IndexBlocksController::getItemsPlatform()   B

Complexity

Conditions 7
Paths 64

Size

Total Lines 150
Code Lines 103

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 7
eloc 103
nc 64
nop 0
dl 0
loc 150
rs 7.0666
c 0
b 0
f 0

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

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\Attribute\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 getItemsUsers(): array
132
    {
133
        $items = [];
134
        $items[] = [
135
            'class' => 'item-user-list',
136
            'url' => $this->generateUrl('legacy_main', ['name' => 'admin/user_list.php']),
137
            'label' => $this->translator->trans('User list'),
138
        ];
139
        $items[] = [
140
            'class' => 'item-user-add',
141
            'url' => $this->generateUrl('legacy_main', ['name' => 'admin/user_add.php']),
142
            'label' => $this->translator->trans('Add a user'),
143
        ];
144
145
        if ($this->isAdmin) {
146
            $items[] = [
147
                'class' => 'item-user-export',
148
                'url' => $this->generateUrl('legacy_main', ['name' => 'admin/user_export.php']),
149
                'label' => $this->translator->trans('Export users list'),
150
            ];
151
            $items[] = [
152
                'class' => 'item-user-import',
153
                'url' => $this->generateUrl('legacy_main', ['name' => 'admin/user_import.php']),
154
                'label' => $this->translator->trans('Import users list'),
155
            ];
156
            $items[] = [
157
                'class' => 'item-user-import-update',
158
                'url' => $this->generateUrl('legacy_main', ['name' => 'admin/user_update_import.php']),
159
                'label' => $this->translator->trans('Edit users list'),
160
            ];
161
            $items[] = [
162
                'class' => 'item-user-import-anonymize',
163
                'url' => $this->generateUrl('legacy_main', ['name' => 'admin/user_anonymize_import.php']),
164
                'label' => $this->translator->trans('Anonymise users list'),
165
            ];
166
167
            if (\count($this->extAuthSource['extldap']) > 0) {
168
                $items[] = [
169
                    'class' => 'item-user-ldap-list',
170
                    'url' => $this->generateUrl('legacy_main', ['name' => 'admin/ldap_users_list.php']),
171
                    'label' => $this->translator->trans('Import LDAP users into the platform'),
172
                ];
173
            }
174
175
            $items[] = [
176
                'class' => 'item-user-field',
177
                'url' => $this->generateUrl('legacy_main', ['name' => 'admin/extra_fields.php', 'type' => 'user']),
178
                'label' => $this->translator->trans('Profiling'),
179
            ];
180
            $items[] = [
181
                'class' => 'item-user-groups',
182
                'url' => $this->generateUrl('legacy_main', ['name' => 'admin/usergroups.php']),
183
                'label' => $this->translator->trans('Classes'),
184
            ];
185
186
            if ('true' === $this->settingsManager->getSetting('admin.show_link_request_hrm_user')) {
187
                $items[] = [
188
                    'class' => 'item-user-linking-requests',
189
                    'url' => $this->generateUrl('legacy_main', ['name' => 'admin/user_linking_requests.php']),
190
                    'label' => $this->translator->trans('Student linking requests'),
191
                ];
192
            }
193
        } else {
194
            $items[] = [
195
                'class' => 'item-user-import',
196
                'url' => $this->generateUrl('legacy_main', ['name' => 'admin/user_import.php']),
197
                'label' => $this->translator->trans('Import users list'),
198
            ];
199
            $items[] = [
200
                'class' => 'item-user-groups',
201
                'url' => $this->generateUrl('legacy_main', ['name' => 'admin/usergroups.php']),
202
                'label' => $this->translator->trans('Classes'),
203
            ];
204
205
            if ('true' === $this->settingsManager->getSetting('session.limit_session_admin_role')) {
206
                $items = array_filter($items, function (array $item) {
207
                    $urls = [
208
                        $this->generateUrl('legacy_main', ['name' => 'admin/user_list.php']),
209
                        $this->generateUrl('legacy_main', ['name' => 'admin/user_add.php']),
210
                    ];
211
212
                    return \in_array($item['url'], $urls, true);
213
                });
214
            }
215
216
            if ('true' === $this->settingsManager->getSetting('session.limit_session_admin_list_users')) {
217
                $items = array_filter($items, function (array $item): bool {
218
                    $urls = [
219
                        $this->generateUrl('legacy_main', ['name' => 'admin/user_list.php']),
220
                    ];
221
222
                    return !\in_array($item['url'], $urls, true);
223
                });
224
            }
225
226
            if ('true' === $this->settingsManager->getSetting('session.allow_session_admin_extra_access')) {
227
                $items[] = [
228
                    'class' => 'item-user-import-update',
229
                    'url' => $this->generateUrl('legacy_main', ['name' => 'admin/user_update_import.php']),
230
                    'label' => $this->translator->trans('Edit users list'),
231
                ];
232
                $items[] = [
233
                    'class' => 'item-user-export',
234
                    'url' => $this->generateUrl('legacy_main', ['name' => 'admin/user_export.php']),
235
                    'label' => $this->translator->trans('Export users list'),
236
                ];
237
            }
238
        }
239
240
        return array_values($items);
241
    }
242
243
    private function getExtraContent(string $title): ?array
244
    {
245
        /** @var Page|null $page */
246
        $page = $this->pageRepository->findOneBy(['title' => $title]);
247
248
        $pageJsonld = $this->serializer->serialize($page, 'jsonld', ['groups' => ['adminblock:read']]);
249
        $pageArray = json_decode($pageJsonld, true);
250
251
        if ($page) {
252
            return $pageArray;
253
        }
254
255
        /** @var PageCategory $category */
256
        $category = $this->pageCategoryRepository->findOneBy(['title' => $title]);
257
        $categoryJsonld = $this->serializer->serialize($category, 'jsonld', ['groups' => ['page:read']]);
258
        $categoryArray = json_decode($categoryJsonld, true);
259
260
        if (empty($categoryArray)) {
261
            return [];
262
        }
263
264
        return [
265
            'category' => $categoryArray['@id'],
266
        ];
267
    }
268
269
    private function getItemsCourses(): array
270
    {
271
        $items = [];
272
        $items[] = [
273
            'class' => 'item-course-list',
274
            'url' => $this->generateUrl('legacy_main', ['name' => 'admin/course_list.php']),
275
            'label' => $this->translator->trans('Course list'),
276
        ];
277
        $items[] = [
278
            'class' => 'item-course-add',
279
            'url' => $this->generateUrl('legacy_main', ['name' => 'admin/course_add.php']),
280
            'label' => $this->translator->trans('Add course'),
281
        ];
282
283
        if ('true' === $this->settingsManager->getSetting('course.course_validation')) {
284
            $items[] = [
285
                'class' => 'item-course-request',
286
                'url' => $this->generateUrl('legacy_main', ['name' => 'admin/course_request_review.php']),
287
                'label' => $this->translator->trans('Review incoming course requests'),
288
            ];
289
            $items[] = [
290
                'class' => 'item-course-request-accepted',
291
                'url' => $this->generateUrl('legacy_main', ['name' => 'admin/course_request_accepted.php']),
292
                'label' => $this->translator->trans('Accepted course requests'),
293
            ];
294
            $items[] = [
295
                'class' => 'item-course-request-rejected',
296
                'url' => $this->generateUrl('legacy_main', ['name' => 'admin/course_request_rejected.php']),
297
                'label' => $this->translator->trans('Rejected course requests'),
298
            ];
299
        }
300
301
        $items[] = [
302
            'class' => 'item-course-export',
303
            'url' => $this->generateUrl('legacy_main', ['name' => 'admin/course_export.php']),
304
            'label' => $this->translator->trans('Export courses'),
305
        ];
306
        $items[] = [
307
            'class' => 'item-course-import',
308
            'url' => $this->generateUrl('legacy_main', ['name' => 'admin/course_import.php']),
309
            'label' => $this->translator->trans('Import courses list'),
310
        ];
311
        $items[] = [
312
            'class' => 'item-course-category',
313
            'url' => $this->generateUrl('legacy_main', ['name' => 'admin/course_category.php']),
314
            'label' => $this->translator->trans('Courses categories'),
315
        ];
316
        $items[] = [
317
            'class' => 'item-course-subscription',
318
            'url' => $this->generateUrl('legacy_main', ['name' => 'admin/subscribe_user2course.php']),
319
            'label' => $this->translator->trans('Add a user to a course'),
320
        ];
321
        $items[] = [
322
            'class' => 'item-course-subscription-import',
323
            'url' => $this->generateUrl('legacy_main', ['name' => 'admin/course_user_import.php']),
324
            'label' => $this->translator->trans('Import users list'),
325
        ];
326
        // $items[] = [
327
        //    'url'=>'course_intro_pdf_import.php',
328
        //    'label' => $this->translator->$this->trans('ImportPDFIntroToCourses'),
329
        // ];
330
331
        if ('true' === $this->settingsManager->getSetting('gradebook.gradebook_enable_grade_model')) {
332
            $items[] = [
333
                'class' => 'item-grade-model',
334
                'url' => $this->generateUrl('legacy_main', ['name' => 'admin/grade_models.php']),
335
                'label' => $this->translator->trans('Grading model'),
336
            ];
337
        }
338
339
        if (\count($this->extAuthSource['ldap']) > 0) {
340
            $items[] = [
341
                'class' => 'item-course-subscription-ldap',
342
                'url' => $this->generateUrl('legacy_main', ['name' => 'admin/ldap_import_students.php']),
343
                'label' => $this->translator->trans('Import LDAP users into a course'),
344
            ];
345
        }
346
347
        $items[] = [
348
            'class' => 'item-course-field',
349
            'url' => $this->generateUrl('legacy_main', ['name' => 'admin/extra_fields.php', 'type' => 'course']),
350
            'label' => $this->translator->trans('Manage extra fields for courses'),
351
        ];
352
        $items[] = [
353
            'class' => 'item-question-bank',
354
            'url' => $this->generateUrl('legacy_main', ['name' => 'admin/questions.php']),
355
            'label' => $this->translator->trans('Questions'),
356
        ];
357
358
        return $items;
359
    }
360
361
    private function getItemsPlatform(): array
362
    {
363
        $items = [];
364
        $items[] = [
365
            'class' => 'item-setting-list',
366
            'url' => $this->generateUrl('admin_settings'),
367
            'label' => $this->translator->trans('Configuration settings'),
368
        ];
369
        $items[] = [
370
            'class' => 'item-language-list',
371
            'url' => $this->generateUrl('legacy_main', ['name' => 'admin/languages.php']),
372
            'label' => $this->translator->trans('Languages'),
373
        ];
374
        $items[] = [
375
            'class' => 'item-plugin-list',
376
            'url' => $this->generateUrl(
377
                'legacy_main',
378
                ['name' => 'admin/settings.php', 'category' => 'Plugins']
379
            ),
380
            'label' => $this->translator->trans('Plugins'),
381
        ];
382
        $items[] = [
383
            'class' => 'item-region-list',
384
            'url' => $this->generateUrl('legacy_main', ['name' => 'admin/settings.php', 'category' => 'Regions']),
385
            'label' => $this->translator->trans('Regions'),
386
        ];
387
        $items[] = [
388
            'class' => 'item-global-announcement',
389
            'url' => $this->generateUrl('legacy_main', ['name' => 'admin/system_announcements.php']),
390
            'label' => $this->translator->trans('Portal news'),
391
        ];
392
        $items[] = [
393
            'class' => 'item-global-agenda',
394
            'route' => ['name' => 'CCalendarEventList', 'query' => ['type' => 'global']],
395
            'label' => $this->translator->trans('Global agenda'),
396
        ];
397
        $items[] = [
398
            'class' => 'item-agenda-reminders',
399
            'url' => $this->generateUrl('legacy_main', ['name' => 'admin/import_course_agenda_reminders.php']),
400
            'label' => $this->translator->trans('Import course events'),
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 (api_is_global_platform_admin()) {
445
            $items[] = [
446
                'class' => 'item-access-url',
447
                'url' => $this->generateUrl('legacy_main', ['name' => 'admin/access_urls.php']),
448
                'label' => $this->translator->trans('Configure multiple access URL'),
449
            ];
450
        }
451
452
        if ('true' === api_get_plugin_setting('dictionary', 'enable_plugin_dictionary')) {
453
            $items[] = [
454
                'class' => 'item-dictionary',
455
                'url' => api_get_path(WEB_PLUGIN_PATH).'dictionary/terms.php',
456
                'label' => $this->translator->trans('Dictionary'),
457
            ];
458
        }
459
460
        if ('true' === $this->settingsManager->getSetting('registration.allow_terms_conditions')) {
461
            $items[] = [
462
                'class' => 'item-terms-and-conditions',
463
                'route' => ['name' => 'TermsConditions'],
464
                'label' => $this->translator->trans('Terms and Conditions'),
465
            ];
466
        }
467
468
        $items[] = [
469
            'class' => 'item-mail-template',
470
            'url' => $this->generateUrl('legacy_main', ['name' => 'mail_template/list.php']),
471
            'label' => $this->translator->trans('Mail templates'),
472
        ];
473
474
        if ('true' === api_get_setting('platform.notification_event')) {
475
            $items[] = [
476
                'class' => 'item-notification-list',
477
                'url' => $this->generateUrl('legacy_main', ['name' => 'notification_event/list.php']),
478
                'label' => $this->translator->trans('Notifications'),
479
            ];
480
        }
481
482
        $allowJustification = 'true' === api_get_plugin_setting('justification', 'tool_enable');
483
484
        if ($allowJustification) {
485
            $items[] = [
486
                'class' => 'item-justification-list',
487
                'url' => api_get_path(WEB_PLUGIN_PATH).'justification/list.php',
488
                'label' => $this->translator->trans('Justification'),
489
            ];
490
        }
491
492
        $items[] = [
493
            'class' => 'item-lti-admin',
494
            'url' => $this->generateUrl('chamilo_lti_admin'),
495
            'label' => $this->translator->trans('External tools (LTI)'),
496
        ];
497
498
        $items[] = [
499
            'class' => 'item-contact-category-admin',
500
            'url' => $this->generateUrl('chamilo_contact_category_index'),
501
            'label' => $this->translator->trans('Contact form categories'),
502
        ];
503
504
        $items[] = [
505
            'class' => 'item-system-template-admin',
506
            'url' => $this->generateUrl('legacy_main', ['name' => 'admin/settings.php', 'category' => 'Templates']),
507
            'label' => $this->translator->trans('System templates'),
508
        ];
509
510
        return $items;
511
    }
512
513
    private function getItemsSettings(): array
514
    {
515
        $items = [];
516
        $items[] = [
517
            'class' => 'item-clean-cache',
518
            'url' => $this->generateUrl('legacy_main', ['name' => 'admin/archive_cleanup.php']),
519
            'label' => $this->translator->trans('Cleanup of cache and temporary files'),
520
        ];
521
522
        $items[] = [
523
            'class' => 'item-special-export',
524
            'url' => $this->generateUrl('legacy_main', ['name' => 'admin/special_exports.php']),
525
            'label' => $this->translator->trans('Special exports'),
526
        ];
527
        /*$items[] = [
528
            'url' => $this->>$this->generateUrl('legacy_main), ['name' => 'admin/periodic_export.php',
529
            'label' => $this->translator->$this->trans('Periodic export'),
530
        ];*/
531
        $items[] = [
532
            'class' => 'item-system-status',
533
            'url' => $this->generateUrl('legacy_main', ['name' => 'admin/system_status.php']),
534
            'label' => $this->translator->trans('System status'),
535
        ];
536
        if (is_dir(api_get_path(SYS_TEST_PATH).'datafiller/')) {
537
            $items[] = [
538
                'class' => 'item-data-filler',
539
                'url' => $this->generateUrl('legacy_main', ['name' => 'admin/filler.php']),
540
                'label' => $this->translator->trans('Data filler'),
541
            ];
542
        }
543
544
        if (is_dir(api_get_path(SYS_TEST_PATH))) {
545
            $items[] = [
546
                'class' => 'item-email-tester',
547
                'url' => $this->generateUrl('legacy_main', ['name' => 'admin/email_tester.php']),
548
                'label' => $this->translator->trans('E-mail tester'),
549
            ];
550
        }
551
552
        $items[] = [
553
            'class' => 'item-ticket-system',
554
            'url' => $this->generateUrl('legacy_main', ['name' => 'ticket/tickets.php']),
555
            'label' => $this->translator->trans('Tickets'),
556
        ];
557
558
        $items[] = [
559
            'url' => $this->generateUrl('legacy_main', ['name' => 'session/cron_status.php']),
560
            'label' => $this->translator->trans('Update session status'),
561
        ];
562
563
        $items[] = [
564
            'class' => 'item-colors',
565
            'route' => ['name' => 'AdminConfigurationColors'],
566
            'label' => $this->translator->trans('Colors'),
567
        ];
568
569
        return $items;
570
    }
571
572
    private function getItemsSkills(): array
573
    {
574
        $items = [];
575
        $items[] = [
576
            'class' => 'item-skill-wheel',
577
            'url' => $this->generateUrl('legacy_main', ['name' => 'skills/skills_wheel.php']),
578
            'label' => $this->translator->trans('Skills wheel'),
579
        ];
580
        $items[] = [
581
            'class' => 'item-skill-import',
582
            'url' => $this->generateUrl('legacy_main', ['name' => 'skills/skills_import.php']),
583
            'label' => $this->translator->trans('Skills import'),
584
        ];
585
        $items[] = [
586
            'class' => 'item-skill-list',
587
            'url' => $this->generateUrl('legacy_main', ['name' => 'skills/skill_list.php']),
588
            'label' => $this->translator->trans('Manage skills'),
589
        ];
590
        $items[] = [
591
            'class' => 'item-skill-level',
592
            'url' => $this->generateUrl('legacy_main', ['name' => 'skills/skill.php']),
593
            'label' => $this->translator->trans('Manage skills levels'),
594
        ];
595
596
        $items[] = [
597
            'class' => 'item-skill-ranking',
598
            'url' => $this->generateUrl('legacy_main', ['name' => 'social/skills_ranking.php']),
599
            'label' => $this->translator->trans('Skills ranking'),
600
        ];
601
        $items[] = [
602
            'class' => 'item-skill-gradebook',
603
            'url' => $this->generateUrl('legacy_main', ['name' => 'skills/skills_gradebook.php']),
604
            'label' => $this->translator->trans('Skills and assessments'),
605
        ];
606
607
        /*$items[] = [
608
            'url' => $this->$this->generateUrl('legacy_main', ['name' => 'admin/skill_badge.php'),
609
            'label' => $this->translator->trans('Badges'),
610
        ];*/
611
612
        return $items;
613
    }
614
615
    private function getItemsGradebook(): array
616
    {
617
        $items = [];
618
        $items[] = [
619
            'class' => 'item-gradebook-list',
620
            'url' => $this->generateUrl('legacy_main', ['name' => 'gradebook_list.php']),
621
            'label' => $this->translator->trans('List'),
622
        ];
623
624
        return $items;
625
    }
626
627
    private function getItemsPrivacy(): array
628
    {
629
        $items = [];
630
        $items[] = [
631
            'class' => 'item-privacy-consent',
632
            'url' => $this->generateUrl('legacy_main', ['name' => 'admin/user_list_consent.php']),
633
            'label' => $this->translator->trans('User list'),
634
        ];
635
636
        return $items;
637
    }
638
639
    private function getItemsChamilo(): array
640
    {
641
        $languageInterface = api_get_language_isocode();
642
643
        $items = [];
644
        $items[] = [
645
            'class' => 'item-software-homepage',
646
            'url' => 'https://chamilo.org/',
647
            'label' => $this->translator->trans('Chamilo homepage'),
648
        ];
649
650
        // Custom linking to user guides in the existing languages
651
        /*$guideLinks = [
652
            'french' => 'v/1.11.x-fr/',
653
            'spanish' => 'v/1.11.x-es/',
654
            'dutch' => 'v/1.11.x-nl/',
655
            'galician' => 'v/1.11.x-ga/',
656
        ];*/
657
658
        $guideLink = 'https://docs.chamilo.org/';
659
660
        /*if (!empty($guideLinks[$languageInterface])) {
661
            $guideLink .= $guideLinks[$languageInterface];
662
        }*/
663
664
        $items[] = [
665
            'class' => 'item-user-guides',
666
            'url' => $guideLink,
667
            'label' => $this->translator->trans('User guides'),
668
        ];
669
        $items[] = [
670
            'class' => 'item-forum',
671
            'url' => 'https://github.com/chamilo/chamilo-lms/discussions/',
672
            'label' => $this->translator->trans('Chamilo forum'),
673
        ];
674
        $items[] = [
675
            'class' => 'item-installation-guide',
676
            'url' => $this->generateUrl('legacy_main', ['name' => '../documentation/installation_guide.html']),
677
            'label' => $this->translator->trans('Installation guide'),
678
        ];
679
        $items[] = [
680
            'class' => 'item-changelog',
681
            'url' => $this->generateUrl('legacy_main', ['name' => '../documentation/changelog.html']),
682
            'label' => $this->translator->trans('Changes in last version'),
683
        ];
684
        $items[] = [
685
            'class' => 'item-credits',
686
            'url' => $this->generateUrl('legacy_main', ['name' => '../documentation/credits.html']),
687
            'label' => $this->translator->trans('Contributors list'),
688
        ];
689
        $items[] = [
690
            'class' => 'item-security',
691
            'url' => $this->generateUrl('legacy_main', ['name' => '../documentation/security.html']),
692
            'label' => $this->translator->trans('Security guide'),
693
        ];
694
        $items[] = [
695
            'class' => 'item-optimization',
696
            'url' => $this->generateUrl('legacy_main', ['name' => '../documentation/optimization.html']),
697
            'label' => $this->translator->trans('Optimization guide'),
698
        ];
699
        $items[] = [
700
            'class' => 'item-extensions',
701
            'url' => 'https://chamilo.org/extensions',
702
            'label' => $this->translator->trans('Chamilo extensions'),
703
        ];
704
        $items[] = [
705
            'class' => 'item-providers',
706
            'url' => 'https://chamilo.org/providers',
707
            'label' => $this->translator->trans('Chamilo official services providers'),
708
        ];
709
710
        return $items;
711
    }
712
713
    private function getItemsSessions(): array
714
    {
715
        $items = [];
716
        $items[] = [
717
            'class' => 'item-session-list',
718
            'url' => $this->generateUrl('legacy_main', ['name' => 'session/session_list.php']),
719
            'label' => $this->translator->trans('Training sessions list'),
720
        ];
721
        $items[] = [
722
            'class' => 'item-session-add',
723
            'url' => $this->generateUrl('legacy_main', ['name' => 'session/session_add.php']),
724
            'label' => $this->translator->trans('Add a training session'),
725
        ];
726
        $items[] = [
727
            'class' => 'item-session-category',
728
            'url' => $this->generateUrl('legacy_main', ['name' => 'session/session_category_list.php']),
729
            'label' => $this->translator->trans('Sessions categories list'),
730
        ];
731
        $items[] = [
732
            'class' => 'item-session-import',
733
            'url' => $this->generateUrl('legacy_main', ['name' => 'session/session_import.php']),
734
            'label' => $this->translator->trans('Import sessions list'),
735
        ];
736
        $items[] = [
737
            'class' => 'item-session-import-hr',
738
            'url' => $this->generateUrl('legacy_main', ['name' => 'session/session_import_drh.php']),
739
            'label' => $this->translator->trans('Import list of HR directors into sessions'),
740
        ];
741
        if (\count($this->extAuthSource['ldap']) > 0) {
742
            $items[] = [
743
                'class' => 'item-session-subscription-ldap-import',
744
                'url' => $this->generateUrl('legacy_main', ['name' => 'admin/ldap_import_students_to_session.php']),
745
                'label' => $this->translator->trans('Import LDAP users into a session'),
746
            ];
747
        }
748
        $items[] = [
749
            'class' => 'item-session-export',
750
            'url' => $this->generateUrl('legacy_main', ['name' => 'session/session_export.php']),
751
            'label' => $this->translator->trans('Export sessions list'),
752
        ];
753
754
        $items[] = [
755
            'class' => 'item-session-course-copy',
756
            'url' => $this->generateUrl('legacy_main', ['name' => 'coursecopy/copy_course_session.php']),
757
            'label' => $this->translator->trans('Copy from course in session to another session'),
758
        ];
759
760
        $allowCareer = $this->settingsManager->getSetting('session.allow_session_admin_read_careers');
761
762
        if ($this->isAdmin || ('true' === $allowCareer && $this->isSessionAdmin)) {
763
            // option only visible in development mode. Enable through code if required
764
            if (is_dir(api_get_path(SYS_TEST_PATH).'datafiller/')) {
765
                $items[] = [
766
                    'class' => 'item-session-user-move-stats',
767
                    'url' => $this->generateUrl('legacy_main', ['name' => 'admin/user_move_stats.php']),
768
                    'label' => $this->translator->trans('Move users results from/to a session'),
769
                ];
770
            }
771
772
            $items[] = [
773
                'class' => 'item-session-user-move',
774
                'url' => $this->generateUrl(
775
                    'legacy_main',
776
                    ['name' => 'coursecopy/move_users_from_course_to_session.php']
777
                ),
778
                'label' => $this->translator->trans('Move users results from base course to a session'),
779
            ];
780
781
            $items[] = [
782
                'class' => 'item-career-dashboard',
783
                'url' => $this->generateUrl('legacy_main', ['name' => 'admin/career_dashboard.php']),
784
                'label' => $this->translator->trans('Careers and promotions'),
785
            ];
786
            $items[] = [
787
                'class' => 'item-session-field',
788
                'url' => $this->generateUrl('legacy_main', ['name' => 'admin/extra_fields.php', 'type' => 'session']),
789
                'label' => $this->translator->trans('Manage session fields'),
790
            ];
791
            $items[] = [
792
                'class' => 'item-resource-sequence',
793
                'url' => $this->generateUrl('legacy_main', ['name' => 'admin/resource_sequence.php']),
794
                'label' => $this->translator->trans('Resources sequencing'),
795
            ];
796
            $items[] = [
797
                'class' => 'item-export-exercise-results',
798
                'url' => $this->generateUrl('legacy_main', ['name' => 'admin/export_exercise_results.php']),
799
                'label' => $this->translator->trans('Export all results from an exercise'),
800
            ];
801
        }
802
803
        return $items;
804
    }
805
}
806