Passed
Push — master ( 92d87b...b3073b )
by Julito
08:24
created

SettingsManager::setUrl()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 1
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
<?php
2
3
/* For licensing terms, see /license.txt */
4
5
namespace Chamilo\CoreBundle\Settings;
6
7
use Chamilo\CoreBundle\Entity\AccessUrl;
8
use Chamilo\CoreBundle\Entity\Course;
9
use Chamilo\CoreBundle\Entity\SettingsCurrent;
10
use Doctrine\ORM\EntityManager;
11
use Doctrine\ORM\EntityRepository;
12
use Sylius\Bundle\SettingsBundle\Event\SettingsEvent;
13
use Sylius\Bundle\SettingsBundle\Manager\SettingsManagerInterface;
14
use Sylius\Bundle\SettingsBundle\Model\Settings;
15
use Sylius\Bundle\SettingsBundle\Model\SettingsInterface;
16
use Sylius\Bundle\SettingsBundle\Registry\ServiceRegistryInterface;
17
use Sylius\Bundle\SettingsBundle\Schema\SchemaInterface;
18
use Sylius\Bundle\SettingsBundle\Schema\SettingsBuilder;
19
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
20
use Symfony\Component\HttpFoundation\RequestStack;
21
use Symfony\Component\Validator\ConstraintViolationListInterface;
22
use Symfony\Component\Validator\Exception\ValidatorException;
23
24
/**
25
 * Handles the platform settings.
26
 */
27
class SettingsManager implements SettingsManagerInterface
28
{
29
    protected $url;
30
31
    /**
32
     * @var ServiceRegistryInterface
33
     */
34
    protected $schemaRegistry;
35
36
    /**
37
     * @var EntityManager
38
     */
39
    protected $manager;
40
41
    /**
42
     * @var EntityRepository
43
     */
44
    protected $repository;
45
46
    /**
47
     * @var EventDispatcherInterface
48
     */
49
    protected $eventDispatcher;
50
51
    /**
52
     * Runtime cache for resolved parameters.
53
     *
54
     * @var Settings[]
55
     */
56
    protected $resolvedSettings = [];
57
    protected $settings;
58
    protected $schemaList;
59
    protected $request;
60
61
    public function __construct(
62
        ServiceRegistryInterface $schemaRegistry,
63
        EntityManager $manager,
64
        EntityRepository $repository,
65
        EventDispatcherInterface $eventDispatcher,
66
        RequestStack $request
67
    ) {
68
        $this->schemaRegistry = $schemaRegistry;
69
        $this->manager = $manager;
70
        $this->repository = $repository;
71
        $this->eventDispatcher = $eventDispatcher;
72
        $this->request = $request;
73
        $this->schemaList = [];
74
    }
75
76
    /**
77
     * @return AccessUrl
78
     */
79
    public function getUrl()
80
    {
81
        return $this->url;
82
    }
83
84
    public function setUrl(AccessUrl $url)
85
    {
86
        $this->url = $url;
87
    }
88
89
    public function updateSchemas(AccessUrl $url)
90
    {
91
        $this->url = $url;
92
        $schemas = array_keys($this->getSchemas());
93
94
        /**
95
         * @var SchemaInterface $schema
96
         */
97
        foreach ($schemas as $schema) {
98
            $settings = $this->load($this->convertServiceToNameSpace($schema));
99
            $this->update($settings);
100
        }
101
    }
102
103
    public function installSchemas(AccessUrl $url)
104
    {
105
        $this->url = $url;
106
        $schemas = array_keys($this->getSchemas());
107
        /** @var SchemaInterface $schema */
108
        foreach ($schemas as $schema) {
109
            $settings = $this->load($this->convertServiceToNameSpace($schema));
110
            $this->save($settings);
111
        }
112
    }
113
114
    /**
115
     * @return array
116
     */
117
    public function getSchemas()
118
    {
119
        return $this->schemaRegistry->all();
120
    }
121
122
    /**
123
     * @param string $category
124
     *
125
     * @return string
126
     */
127
    public function convertNameSpaceToService($category)
128
    {
129
        return 'chamilo_core.settings.'.$category;
130
    }
131
132
    /**
133
     * @param string $category
134
     *
135
     * @return string
136
     */
137
    public function convertServiceToNameSpace($category)
138
    {
139
        return str_replace('chamilo_core.settings.', '', $category);
140
    }
141
142
    /**
143
     * @param string $name
144
     *
145
     * @throws \InvalidArgumentException
146
     */
147
    public function getSetting($name)
148
    {
149
        if (false === strpos($name, '.')) {
150
            //throw new \InvalidArgumentException(sprintf('Parameter must be in format "namespace.name", "%s" given.', $name));
151
152
            // This code allows the possibility of calling
153
            // api_get_setting('allow_skills_tool') instead of
154
            // the "correct" way api_get_setting('platform.allow_skills_tool')
155
            $items = $this->getVariablesAndCategories();
156
157
            if (isset($items[$name])) {
158
                $originalName = $name;
159
                $name = $this->renameVariable($name);
160
                $category = $this->fixCategory(
161
                    strtolower($name),
162
                    strtolower($items[$originalName])
163
                );
164
                $name = $category.'.'.$name;
165
            } else {
166
                throw new \InvalidArgumentException(sprintf('Parameter must be in format "category.name", "%s" given.', $name));
167
            }
168
        }
169
170
        list($category, $name) = explode('.', $name);
171
        $this->loadAll();
172
173
        if (!empty($this->schemaList)) {
174
            $settings = $this->schemaList[$category];
175
176
            return $settings->get($name);
177
        }
178
179
        throw new \InvalidArgumentException(sprintf('Catregory %s not found', $category));
180
        /*exit;
181
182
        $settings = $this->load($category, $name);
183
184
        if (!$settings) {
185
            throw new \InvalidArgumentException(sprintf("Parameter '$name' not found in category '$category'"));
186
        }
187
188
        $this->settings = $settings;
189
190
        return $settings->get($name);*/
191
    }
192
193
    public function loadAll()
194
    {
195
        //$loadFromSession = true;
196
        $session = null;
197
        if ($this->request->getCurrentRequest()) {
198
            $session = $this->request->getCurrentRequest()->getSession();
199
            $schemaList = $session->get('schemas');
200
            $this->schemaList = $schemaList;
201
        }
202
203
        if (empty($this->schemaList)) {
204
            $schemas = array_keys($this->getSchemas());
205
            $schemaList = [];
206
            $settingsBuilder = new SettingsBuilder();
207
            $all = $this->getAllParametersByCategory();
208
            /** @var SchemaInterface $schema */
209
            foreach ($schemas as $schema) {
210
                $schemaRegister = $this->schemaRegistry->get($schema);
211
                $schemaRegister->buildSettings($settingsBuilder);
212
                $name = $this->convertServiceToNameSpace($schema);
213
                $settings = new Settings();
214
                $parameters = isset($all[$name]) ? $all[$name] : [];
215
                foreach ($settingsBuilder->getTransformers() as $parameter => $transformer) {
216
                    if (array_key_exists($parameter, $parameters)) {
217
                        if ('course_creation_use_template' === $parameter) {
218
                            if (empty($parameters[$parameter])) {
219
                                $parameters[$parameter] = null;
220
                            }
221
                        } else {
222
                            $parameters[$parameter] = $transformer->reverseTransform($parameters[$parameter]);
223
                        }
224
                    }
225
                }
226
                $parameters = $settingsBuilder->resolve($parameters);
227
                $settings->setParameters($parameters);
228
                $schemaList[$name] = $settings;
229
            }
230
            $this->schemaList = $schemaList;
231
            if ($session && $this->request->getCurrentRequest()) {
232
                $session->set('schemas', $schemaList);
233
            }
234
        }
235
    }
236
237
    public function load($schemaAlias, $namespace = null, $ignoreUnknown = true)
238
    {
239
        $settings = new Settings();
240
        $schemaAliasNoPrefix = $schemaAlias;
241
        $schemaAlias = 'chamilo_core.settings.'.$schemaAlias;
242
        if ($this->schemaRegistry->has($schemaAlias)) {
243
            /** @var SchemaInterface $schema */
244
            $schema = $this->schemaRegistry->get($schemaAlias);
245
        } else {
246
            return $settings;
247
        }
248
249
        $settings->setSchemaAlias($schemaAlias);
250
251
        // We need to get a plain parameters array since we use the options resolver on it
252
        $parameters = $this->getParameters($schemaAliasNoPrefix);
253
        $settingsBuilder = new SettingsBuilder();
254
        $schema->buildSettings($settingsBuilder);
255
256
        // Remove unknown settings' parameters (e.g. From a previous version of the settings schema)
257
        if (true === $ignoreUnknown) {
258
            foreach ($parameters as $name => $value) {
259
                if (!$settingsBuilder->isDefined($name)) {
260
                    unset($parameters[$name]);
261
                }
262
            }
263
        }
264
265
        foreach ($settingsBuilder->getTransformers() as $parameter => $transformer) {
266
            if (array_key_exists($parameter, $parameters)) {
267
                if ('course_creation_use_template' === $parameter) {
268
                    if (empty($parameters[$parameter])) {
269
                        $parameters[$parameter] = null;
270
                    }
271
                } else {
272
                    $parameters[$parameter] = $transformer->reverseTransform($parameters[$parameter]);
273
                }
274
            }
275
        }
276
277
        $parameters = $settingsBuilder->resolve($parameters);
278
        $settings->setParameters($parameters);
279
280
        return $settings;
281
    }
282
283
    /**
284
     * @throws \Doctrine\ORM\ORMException
285
     * @throws \Doctrine\ORM\OptimisticLockException
286
     */
287
    public function update(SettingsInterface $settings)
288
    {
289
        $namespace = $settings->getSchemaAlias();
290
291
        /** @var SchemaInterface $schema */
292
        $schema = $this->schemaRegistry->get($settings->getSchemaAlias());
293
294
        $settingsBuilder = new SettingsBuilder();
295
        $schema->buildSettings($settingsBuilder);
296
        $parameters = $settingsBuilder->resolve($settings->getParameters());
297
        // Transform value. Example array to string using transformer. Example:
298
        // 1. Setting "tool_visible_by_default_at_creation" it's a multiple select
299
        // 2. Is defined as an array in class DocumentSettingsSchema
300
        // 3. Add transformer for that variable "ArrayToIdentifierTransformer"
301
        // 4. Here we recover the transformer and convert the array to string
302
        foreach ($settingsBuilder->getTransformers() as $parameter => $transformer) {
303
            if (array_key_exists($parameter, $parameters)) {
304
                $parameters[$parameter] = $transformer->transform($parameters[$parameter]);
305
            }
306
        }
307
        $settings->setParameters($parameters);
308
        $category = $this->convertServiceToNameSpace($settings->getSchemaAlias());
309
        $persistedParameters = $this->repository->findBy(['category' => $category]);
310
311
        $persistedParametersMap = [];
312
        /** @var SettingsCurrent $parameter */
313
        foreach ($persistedParameters as $parameter) {
314
            $persistedParametersMap[$parameter->getVariable()] = $parameter;
315
        }
316
317
        /** @var SettingsCurrent $url */
318
        $url = $this->getUrl();
319
        $simpleCategoryName = str_replace('chamilo_core.settings.', '', $namespace);
320
321
        foreach ($parameters as $name => $value) {
322
            if (isset($persistedParametersMap[$name])) {
323
                $parameter = $persistedParametersMap[$name];
324
                $parameter->setSelectedValue($value);
325
                $parameter->setCategory($simpleCategoryName);
326
                $this->manager->persist($parameter);
327
            } else {
328
                $parameter = new SettingsCurrent();
329
                $parameter
330
                    ->setVariable($name)
331
                    ->setCategory($simpleCategoryName)
332
                    ->setTitle($name)
333
                    ->setSelectedValue($value)
334
                    ->setUrl($url)
335
                    ->setAccessUrlChangeable(1)
336
                    ->setAccessUrlLocked(1)
337
                ;
338
339
                // @var ConstraintViolationListInterface $errors
340
                /*$errors = $this->validator->validate($parameter);
341
                if (0 < $errors->count()) {
342
                    throw new ValidatorException($errors->get(0)->getMessage());
343
                }*/
344
                $this->manager->persist($parameter);
345
            }
346
        }
347
348
        $this->manager->flush();
349
    }
350
351
    /**
352
     * @throws ValidatorException
353
     */
354
    public function save(SettingsInterface $settings)
355
    {
356
        $namespace = $settings->getSchemaAlias();
357
358
        /** @var SchemaInterface $schema */
359
        $schema = $this->schemaRegistry->get($settings->getSchemaAlias());
360
361
        $settingsBuilder = new SettingsBuilder();
362
        $schema->buildSettings($settingsBuilder);
363
        $parameters = $settingsBuilder->resolve($settings->getParameters());
364
        // Transform value. Example array to string using transformer. Example:
365
        // 1. Setting "tool_visible_by_default_at_creation" it's a multiple select
366
        // 2. Is defined as an array in class DocumentSettingsSchema
367
        // 3. Add transformer for that variable "ArrayToIdentifierTransformer"
368
        // 4. Here we recover the transformer and convert the array to string
369
        foreach ($settingsBuilder->getTransformers() as $parameter => $transformer) {
370
            if (array_key_exists($parameter, $parameters)) {
371
                $parameters[$parameter] = $transformer->transform($parameters[$parameter]);
372
            }
373
        }
374
        $settings->setParameters($parameters);
375
        $persistedParameters = $this->repository->findBy(
376
            ['category' => $this->convertServiceToNameSpace($settings->getSchemaAlias())]
377
        );
378
        $persistedParametersMap = [];
379
        foreach ($persistedParameters as $parameter) {
380
            $persistedParametersMap[$parameter->getTitle()] = $parameter;
381
        }
382
383
        // @var SettingsEvent $event
384
        /*$event = $this->eventDispatcher->dispatch(
385
            SettingsEvent::PRE_SAVE,
386
            new SettingsEvent($settings, $parameters)
387
        );*/
388
389
        /** @var SettingsCurrent $url */
390
        $url = $this->getUrl();
391
        $simpleCategoryName = str_replace('chamilo_core.settings.', '', $namespace);
392
393
        foreach ($parameters as $name => $value) {
394
            if (isset($persistedParametersMap[$name])) {
395
                $parameter = $persistedParametersMap[$name];
396
                $parameter->setSelectedValue($value);
397
            } else {
398
                $parameter = new SettingsCurrent();
399
                $parameter
400
                    ->setVariable($name)
401
                    ->setCategory($simpleCategoryName)
402
                    ->setTitle($name)
403
                    ->setSelectedValue($value)
404
                    ->setUrl($url)
405
                    ->setAccessUrlChangeable(1)
406
                    ->setAccessUrlLocked(1)
407
                ;
408
409
                // @var ConstraintViolationListInterface $errors
410
                /*$errors = $this->validator->validate($parameter);
411
                if (0 < $errors->count()) {
412
                    throw new ValidatorException($errors->get(0)->getMessage());
413
                }*/
414
                $this->manager->persist($parameter);
415
            }
416
            $this->manager->persist($parameter);
417
        }
418
419
        $this->manager->flush();
420
421
        return;
422
423
//        $schemaAlias = $settings->getSchemaAlias();
424
//        $schemaAliasChamilo = str_replace('chamilo_core.settings.', '', $schemaAlias);
425
//
426
//        $schema = $this->schemaRegistry->get($schemaAlias);
427
//
428
//        $settingsBuilder = new SettingsBuilder();
429
//        $schema->buildSettings($settingsBuilder);
430
//
431
//        $parameters = $settingsBuilder->resolve($settings->getParameters());
432
//
433
//        foreach ($settingsBuilder->getTransformers() as $parameter => $transformer) {
434
//            if (array_key_exists($parameter, $parameters)) {
435
//                $parameters[$parameter] = $transformer->transform($parameters[$parameter]);
436
//            }
437
//        }
438
//
439
//        /** @var \Sylius\Bundle\SettingsBundle\Event\SettingsEvent $event */
440
//        $event = $this->eventDispatcher->dispatch(
441
//            SettingsEvent::PRE_SAVE,
442
//            new SettingsEvent($settings)
443
//        );
444
//
445
//        /** @var SettingsCurrent $url */
446
//        $url = $event->getSettings()->getAccessUrl();
447
//
448
//        foreach ($parameters as $name => $value) {
449
//            if (isset($persistedParametersMap[$name])) {
450
//                if ($value instanceof Course) {
451
//                    $value = $value->getId();
452
//                }
453
//                $persistedParametersMap[$name]->setValue($value);
454
//            } else {
455
//                $setting = new Settings();
456
//                $setting->setSchemaAlias($schemaAlias);
457
//
458
//                $setting
459
//                    ->setNamespace($schemaAliasChamilo)
460
//                    ->setName($name)
461
//                    ->setValue($value)
462
//                    ->setUrl($url)
463
//                    ->setAccessUrlLocked(0)
464
//                    ->setAccessUrlChangeable(1)
465
//                ;
466
//
467
//                /** @var ConstraintViolationListInterface $errors */
468
//                /*$errors = $this->->validate($parameter);
469
//                if (0 < $errors->count()) {
470
//                    throw new ValidatorException($errors->get(0)->getMessage());
471
//                }*/
472
//                $this->manager->persist($setting);
473
//                $this->manager->flush();
474
//            }
475
//        }
476
        /*$parameters = $settingsBuilder->resolve($settings->getParameters());
477
        $settings->setParameters($parameters);
478
479
        $this->eventDispatcher->dispatch(SettingsEvent::PRE_SAVE, new SettingsEvent($settings));
480
481
        $this->manager->persist($settings);
482
        $this->manager->flush();
483
484
        $this->eventDispatcher->dispatch(SettingsEvent::POST_SAVE, new SettingsEvent($settings));*/
485
    }
486
487
    /**
488
     * @param string $keyword
489
     *
490
     * @return array
491
     */
492
    public function getParametersFromKeywordOrderedByCategory($keyword)
493
    {
494
        $query = $this->repository->createQueryBuilder('s')
495
            ->where('s.variable LIKE :keyword')
496
            ->setParameter('keyword', "%$keyword%")
497
        ;
498
        $parametersFromDb = $query->getQuery()->getResult();
499
        $parameters = [];
500
        /** @var SettingsCurrent $parameter */
501
        foreach ($parametersFromDb as $parameter) {
502
            $parameters[$parameter->getCategory()][] = $parameter;
503
        }
504
505
        return $parameters;
506
    }
507
508
    /**
509
     * @param string $namespace
510
     * @param string $keyword
511
     * @param bool   $returnObjects
512
     *
513
     * @return array
514
     */
515
    public function getParametersFromKeyword($namespace, $keyword = '', $returnObjects = false)
516
    {
517
        if (empty($keyword)) {
518
            $criteria = ['category' => $namespace];
519
            $parametersFromDb = $this->repository->findBy($criteria);
520
        } else {
521
            $query = $this->repository->createQueryBuilder('s')
522
                ->where('s.variable LIKE :keyword')
523
                ->setParameter('keyword', "%$keyword%")
524
            ;
525
            $parametersFromDb = $query->getQuery()->getResult();
526
        }
527
528
        if ($returnObjects) {
529
            return $parametersFromDb;
530
        }
531
        $parameters = [];
532
        /** @var SettingsCurrent $parameter */
533
        foreach ($parametersFromDb as $parameter) {
534
            $parameters[$parameter->getVariable()] = $parameter->getSelectedValue();
535
        }
536
537
        return $parameters;
538
    }
539
540
    /**
541
     * Load parameter from database.
542
     *
543
     * @param string $namespace
544
     *
545
     * @return array
546
     */
547
    private function getParameters($namespace)
548
    {
549
        $parameters = [];
550
        /** @var SettingsCurrent $parameter */
551
        foreach ($this->repository->findBy(['category' => $namespace]) as $parameter) {
552
            $parameters[$parameter->getVariable()] = $parameter->getSelectedValue();
553
        }
554
555
        return $parameters;
556
    }
557
558
    private function getAllParametersByCategory()
559
    {
560
        $parameters = [];
561
        $all = $this->repository->findAll();
562
        /** @var SettingsCurrent $parameter */
563
        foreach ($all as $parameter) {
564
            $parameters[$parameter->getCategory()][$parameter->getVariable()] = $parameter->getSelectedValue();
565
        }
566
567
        return $parameters;
568
    }
569
570
    /*private function transformParameters(SettingsBuilder $settingsBuilder, array $parameters)
571
    {
572
        $transformedParameters = $parameters;
573
574
        foreach ($settingsBuilder->getTransformers() as $parameter => $transformer) {
575
            if (array_key_exists($parameter, $parameters)) {
576
                $transformedParameters[$parameter] = $transformer->reverseTransform($parameters[$parameter]);
577
            }
578
        }
579
580
        return $transformedParameters;
581
    }*/
582
583
    /**
584
     * Get variables and categories as in 1.11.x.
585
     *
586
     * @return array
587
     */
588
    private function getVariablesAndCategories()
589
    {
590
        return [
591
            'Institution' => 'Platform',
592
            'InstitutionUrl' => 'Platform',
593
            'siteName' => 'Platform',
594
            'emailAdministrator' => 'admin', //'emailAdministrator' => 'Platform',
595
            'administratorSurname' => 'admin',
596
            'administratorTelephone' => 'admin',
597
            'administratorName' => 'admin',
598
            'show_administrator_data' => 'Platform',
599
            'show_tutor_data' => 'Session',
600
            'show_teacher_data' => 'Platform',
601
            'homepage_view' => 'Course',
602
            'show_toolshortcuts' => 'Course',
603
            'allow_group_categories' => 'Course',
604
            'server_type' => 'Platform',
605
            'platformLanguage' => 'Language',
606
            'showonline' => 'Platform',
607
            'profile' => 'User',
608
            'default_document_quotum' => 'Course',
609
            'registration' => 'User',
610
            'default_group_quotum' => 'Course',
611
            'allow_registration' => 'Platform',
612
            'allow_registration_as_teacher' => 'Platform',
613
            'allow_lostpassword' => 'Platform',
614
            'allow_user_headings' => 'Course',
615
            'allow_personal_agenda' => 'agenda',
616
            'display_coursecode_in_courselist' => 'Platform',
617
            'display_teacher_in_courselist' => 'Platform',
618
            'permanently_remove_deleted_files' => 'Tools',
619
            'dropbox_allow_overwrite' => 'Tools',
620
            'dropbox_max_filesize' => 'Tools',
621
            'dropbox_allow_just_upload' => 'Tools',
622
            'dropbox_allow_student_to_student' => 'Tools',
623
            'dropbox_allow_group' => 'Tools',
624
            'dropbox_allow_mailing' => 'Tools',
625
            'extended_profile' => 'User',
626
            'student_view_enabled' => 'Platform',
627
            'show_navigation_menu' => 'Course',
628
            'enable_tool_introduction' => 'course',
629
            'page_after_login' => 'Platform',
630
            'time_limit_whosonline' => 'Platform',
631
            'breadcrumbs_course_homepage' => 'Course',
632
            'example_material_course_creation' => 'Platform',
633
            'account_valid_duration' => 'Platform',
634
            'use_session_mode' => 'Session',
635
            'allow_email_editor' => 'Tools',
636
            //'registered' => null',
637
            //'donotlistcampus' =>'null',
638
            'show_email_addresses' => 'Platform',
639
            'service_ppt2lp' => 'NULL',
640
            'stylesheets' => 'stylesheets',
641
            'upload_extensions_list_type' => 'Security',
642
            'upload_extensions_blacklist' => 'Security',
643
            'upload_extensions_whitelist' => 'Security',
644
            'upload_extensions_skip' => 'Security',
645
            'upload_extensions_replace_by' => 'Security',
646
            'show_number_of_courses' => 'Platform',
647
            'show_empty_course_categories' => 'Platform',
648
            'show_back_link_on_top_of_tree' => 'Platform',
649
            'show_different_course_language' => 'Platform',
650
            'split_users_upload_directory' => 'Tuning',
651
            'hide_dltt_markup' => 'Languages',
652
            'display_categories_on_homepage' => 'Platform',
653
            'permissions_for_new_directories' => 'Security',
654
            'permissions_for_new_files' => 'Security',
655
            'show_tabs' => 'Platform',
656
            'default_forum_view' => 'Course',
657
            'platform_charset' => 'Languages',
658
            'noreply_email_address' => 'Platform',
659
            'survey_email_sender_noreply' => 'Course',
660
            'gradebook_enable' => 'Gradebook',
661
            'gradebook_score_display_coloring' => 'Gradebook',
662
            'gradebook_score_display_custom' => 'Gradebook',
663
            'gradebook_score_display_colorsplit' => 'Gradebook',
664
            'gradebook_score_display_upperlimit' => 'Gradebook',
665
            'gradebook_number_decimals' => 'Gradebook',
666
            'user_selected_theme' => 'Platform',
667
            'allow_course_theme' => 'Course',
668
            'show_closed_courses' => 'Platform',
669
            'extendedprofile_registration' => 'User',
670
            'extendedprofile_registrationrequired' => 'User',
671
            'add_users_by_coach' => 'Session',
672
            'extend_rights_for_coach' => 'Security',
673
            'extend_rights_for_coach_on_survey' => 'Security',
674
            'course_create_active_tools' => 'Tools',
675
            'show_session_coach' => 'Session',
676
            'allow_users_to_create_courses' => 'Platform',
677
            'allow_message_tool' => 'Tools',
678
            'allow_social_tool' => 'Tools',
679
            'allow_students_to_browse_courses' => 'Platform',
680
            'show_session_data' => 'Session',
681
            'allow_use_sub_language' => 'language',
682
            'show_glossary_in_documents' => 'Course',
683
            'allow_terms_conditions' => 'Platform',
684
            'search_enabled' => 'Search',
685
            'search_prefilter_prefix' => 'Search',
686
            'search_show_unlinked_results' => 'Search',
687
            'show_courses_descriptions_in_catalog' => 'Course',
688
            'allow_coach_to_edit_course_session' => 'Session',
689
            'show_glossary_in_extra_tools' => 'Course',
690
            'send_email_to_admin_when_create_course' => 'Platform',
691
            'go_to_course_after_login' => 'Course',
692
            'math_asciimathML' => 'Editor',
693
            'enabled_asciisvg' => 'Editor',
694
            'include_asciimathml_script' => 'Editor',
695
            'youtube_for_students' => 'Editor',
696
            'block_copy_paste_for_students' => 'Editor',
697
            'more_buttons_maximized_mode' => 'Editor',
698
            'students_download_folders' => 'Document',
699
            'users_copy_files' => 'Tools',
700
            'allow_students_to_create_groups_in_social' => 'Tools',
701
            'allow_send_message_to_all_platform_users' => 'Message',
702
            'message_max_upload_filesize' => 'Tools',
703
            'use_users_timezone' => 'profile', //'use_users_timezone' => 'Timezones',
704
            'timezone_value' => 'platform', //'timezone_value' => 'Timezones',
705
            'allow_user_course_subscription_by_course_admin' => 'Security',
706
            'show_link_bug_notification' => 'Platform',
707
            'show_link_ticket_notification' => 'Platform',
708
            'course_validation' => 'course', //'course_validation' => 'Platform',
709
            'course_validation_terms_and_conditions_url' => 'Platform',
710
            'enabled_wiris' => 'Editor',
711
            'allow_spellcheck' => 'Editor',
712
            'force_wiki_paste_as_plain_text' => 'Editor',
713
            'enabled_googlemaps' => 'Editor',
714
            'enabled_imgmap' => 'Editor',
715
            'enabled_support_svg' => 'Tools',
716
            'pdf_export_watermark_enable' => 'Platform',
717
            'pdf_export_watermark_by_course' => 'Platform',
718
            'pdf_export_watermark_text' => 'Platform',
719
            'enabled_insertHtml' => 'Editor',
720
            'students_export2pdf' => 'Document',
721
            'exercise_min_score' => 'Course',
722
            'exercise_max_score' => 'Course',
723
            'show_users_folders' => 'Tools',
724
            'show_default_folders' => 'Tools',
725
            'show_chat_folder' => 'Tools',
726
            'enabled_text2audio' => 'Tools',
727
            'course_hide_tools' => 'Course',
728
            'enabled_support_pixlr' => 'Tools',
729
            'show_groups_to_users' => 'Session',
730
            'accessibility_font_resize' => 'Platform',
731
            'hide_courses_in_sessions' => 'Session',
732
            'enable_quiz_scenario' => 'Course',
733
            'filter_terms' => 'Security',
734
            'header_extra_content' => 'Tracking',
735
            'footer_extra_content' => 'Tracking',
736
            'show_documents_preview' => 'Tools',
737
            'htmlpurifier_wiki' => 'Editor',
738
            'cas_activate' => 'CAS',
739
            'cas_server' => 'CAS',
740
            'cas_server_uri' => 'CAS',
741
            'cas_port' => 'CAS',
742
            'cas_protocol' => 'CAS',
743
            'cas_add_user_activate' => 'CAS',
744
            'update_user_info_cas_with_ldap' => 'CAS',
745
            'student_page_after_login' => 'Platform',
746
            'teacher_page_after_login' => 'Platform',
747
            'drh_page_after_login' => 'Platform',
748
            'sessionadmin_page_after_login' => 'Session',
749
            'student_autosubscribe' => 'Platform',
750
            'teacher_autosubscribe' => 'Platform',
751
            'drh_autosubscribe' => 'Platform',
752
            'sessionadmin_autosubscribe' => 'Session',
753
            'scorm_cumulative_session_time' => 'Course',
754
            'allow_hr_skills_management' => 'Gradebook',
755
            'enable_help_link' => 'Platform',
756
            'teachers_can_change_score_settings' => 'Gradebook',
757
            'allow_users_to_change_email_with_no_password' => 'User',
758
            'show_admin_toolbar' => 'display',
759
            'allow_global_chat' => 'Platform',
760
            'languagePriority1' => 'language',
761
            'languagePriority2' => 'language',
762
            'languagePriority3' => 'language',
763
            'languagePriority4' => 'language',
764
            'login_is_email' => 'Platform',
765
            'courses_default_creation_visibility' => 'Course',
766
            'gradebook_enable_grade_model' => 'Gradebook',
767
            'teachers_can_change_grade_model_settings' => 'Gradebook',
768
            'gradebook_default_weight' => 'Gradebook',
769
            'ldap_description' => 'LDAP',
770
            'shibboleth_description' => 'Shibboleth',
771
            'facebook_description' => 'Facebook',
772
            'gradebook_locking_enabled' => 'Gradebook',
773
            'gradebook_default_grade_model_id' => 'Gradebook',
774
            'allow_session_admins_to_manage_all_sessions' => 'Session',
775
            'allow_skills_tool' => 'Platform',
776
            'allow_public_certificates' => 'Course',
777
            'platform_unsubscribe_allowed' => 'Platform',
778
            'enable_iframe_inclusion' => 'Editor',
779
            'show_hot_courses' => 'Platform',
780
            'enable_webcam_clip' => 'Tools',
781
            'use_custom_pages' => 'Platform',
782
            'tool_visible_by_default_at_creation' => 'Tools',
783
            'prevent_session_admins_to_manage_all_users' => 'Session',
784
            'documents_default_visibility_defined_in_course' => 'Tools',
785
            'enabled_mathjax' => 'Editor',
786
            'meta_twitter_site' => 'Tracking',
787
            'meta_twitter_creator' => 'Tracking',
788
            'meta_title' => 'Tracking',
789
            'meta_description' => 'Tracking',
790
            'meta_image_path' => 'Tracking',
791
            'allow_teachers_to_create_sessions' => 'Session',
792
            'institution_address' => 'Platform',
793
            'chamilo_database_version' => 'null',
794
            'cron_remind_course_finished_activate' => 'Crons',
795
            'cron_remind_course_expiration_frequency' => 'Crons',
796
            'cron_remind_course_expiration_activate' => 'Crons',
797
            'allow_coach_feedback_exercises' => 'Session',
798
            'allow_my_files' => 'Platform',
799
            'ticket_allow_student_add' => 'Ticket',
800
            'ticket_send_warning_to_all_admins' => 'Ticket',
801
            'ticket_warn_admin_no_user_in_category' => 'Ticket',
802
            'ticket_allow_category_edition' => 'Ticket',
803
            'load_term_conditions_section' => 'Platform',
804
            'show_terms_if_profile_completed' => 'Ticket',
805
            'hide_home_top_when_connected' => 'Platform',
806
            'hide_global_announcements_when_not_connected' => 'Platform',
807
            'course_creation_use_template' => 'Course',
808
            'allow_strength_pass_checker' => 'Security',
809
            'allow_captcha' => 'Security',
810
            'captcha_number_mistakes_to_block_account' => 'Security',
811
            'captcha_time_to_block' => 'Security',
812
            'drh_can_access_all_session_content' => 'Session',
813
            'display_groups_forum_in_general_tool' => 'Tools',
814
            'allow_tutors_to_assign_students_to_session' => 'Session',
815
            'allow_lp_return_link' => 'Course',
816
            'hide_scorm_export_link' => 'Course',
817
            'hide_scorm_copy_link' => 'Course',
818
            'hide_scorm_pdf_link' => 'Course',
819
            'session_days_before_coach_access' => 'Session',
820
            'session_days_after_coach_access' => 'Session',
821
            'pdf_logo_header' => 'Course',
822
            'order_user_list_by_official_code' => 'Platform',
823
            'email_alert_manager_on_new_quiz' => 'exercise',
824
            'show_official_code_exercise_result_list' => 'Tools',
825
            'course_catalog_hide_private' => 'Platform',
826
            'catalog_show_courses_sessions' => 'Platform',
827
            'auto_detect_language_custom_pages' => 'Platform',
828
            'lp_show_reduced_report' => 'Course',
829
            'allow_session_course_copy_for_teachers' => 'Session',
830
            'hide_logout_button' => 'Platform',
831
            'redirect_admin_to_courses_list' => 'Platform',
832
            'course_images_in_courses_list' => 'Course',
833
            'student_publication_to_take_in_gradebook' => 'Gradebook',
834
            'certificate_filter_by_official_code' => 'Gradebook',
835
            'exercise_max_ckeditors_in_page' => 'Tools',
836
            'document_if_file_exists_option' => 'Tools',
837
            'add_gradebook_certificates_cron_task_enabled' => 'Gradebook',
838
            'openbadges_backpack' => 'Gradebook',
839
            'cookie_warning' => 'Tools',
840
            'hide_course_group_if_no_tools_available' => 'Tools',
841
            'catalog_allow_session_auto_subscription' => 'Session',
842
            'registration.soap.php.decode_utf8' => 'Platform',
843
            'allow_delete_attendance' => 'Tools',
844
            'gravatar_enabled' => 'Platform',
845
            'gravatar_type' => 'Platform',
846
            'limit_session_admin_role' => 'Session',
847
            'show_session_description' => 'Session',
848
            'hide_certificate_export_link_students' => 'Gradebook',
849
            'hide_certificate_export_link' => 'Gradebook',
850
            'dropbox_hide_course_coach' => 'Tools',
851
            'dropbox_hide_general_coach' => 'Tools',
852
            'session_course_ordering' => 'Session',
853
            'gamification_mode' => 'Platform',
854
            'prevent_multiple_simultaneous_login' => 'Security',
855
            'gradebook_detailed_admin_view' => 'Gradebook',
856
            'course_catalog_published' => 'Course',
857
            'user_reset_password' => 'Security',
858
            'user_reset_password_token_limit' => 'Security',
859
            'my_courses_view_by_session' => 'Session',
860
            'show_full_skill_name_on_skill_wheel' => 'Platform',
861
            'messaging_allow_send_push_notification' => 'WebServices',
862
            'messaging_gdc_project_number' => 'WebServices',
863
            'messaging_gdc_api_key' => 'WebServices',
864
            'teacher_can_select_course_template' => 'Course',
865
            'enable_record_audio' => 'Tools',
866
            'allow_show_skype_account' => 'Platform',
867
            'allow_show_linkedin_url' => 'Platform',
868
            'enable_profile_user_address_geolocalization' => 'User',
869
            'show_official_code_whoisonline' => 'Profile',
870
            'icons_mode_svg' => 'display',
871
            'user_name_order' => 'display',
872
            'user_name_sort_by' => 'display',
873
            'default_calendar_view' => 'agenda',
874
            'exercise_invisible_in_session' => 'exercise',
875
            'configure_exercise_visibility_in_course' => 'exercise',
876
            'allow_download_documents_by_api_key' => 'Webservices',
877
            'ProfilingFilterAddingUsers' => 'profile',
878
            'donotlistcampus' => 'platform',
879
            'gradebook_show_percentage_in_reports' => 'gradebook',
880
            'course_creation_splash_screen' => 'Course',
881
        ];
882
    }
883
884
    /**
885
     * Rename old variable with variable used in Chamilo 2.0.
886
     *
887
     * @param string $variable
888
     */
889
    private function renameVariable($variable)
890
    {
891
        $list = [
892
            'timezone_value' => 'timezone',
893
            'Institution' => 'institution',
894
            'SiteName' => 'site_name',
895
            'siteName' => 'site_name',
896
            'InstitutionUrl' => 'institution_url',
897
            'registration' => 'required_profile_fields',
898
            'stylesheets' => 'theme',
899
            'platformLanguage' => 'platform_language',
900
            'languagePriority1' => 'language_priority_1',
901
            'languagePriority2' => 'language_priority_2',
902
            'languagePriority3' => 'language_priority_3',
903
            'languagePriority4' => 'language_priority_4',
904
            'gradebook_score_display_coloring' => 'my_display_coloring',
905
            'document_if_file_exists_option' => 'if_file_exists_option',
906
            'ProfilingFilterAddingUsers' => 'profiling_filter_adding_users',
907
            'course_create_active_tools' => 'active_tools_on_create',
908
            'emailAdministrator' => 'administrator_email',
909
            'administratorSurname' => 'administrator_surname',
910
            'administratorName' => 'administrator_name',
911
            'administratorTelephone' => 'administrator_phone',
912
            'registration.soap.php.decode_utf8' => 'decode_utf8',
913
            'profile' => 'changeable_options',
914
        ];
915
916
        return $list[$variable] ?? $variable;
917
    }
918
919
    /**
920
     * Replace old Chamilo 1.x category with 2.0 version.
921
     *
922
     * @param string $variable
923
     * @param string $defaultCategory
924
     */
925
    private function fixCategory($variable, $defaultCategory)
926
    {
927
        $settings = [
928
            'cookie_warning' => 'platform',
929
            'donotlistcampus' => 'platform',
930
            'administrator_email' => 'admin',
931
            'administrator_surname' => 'admin',
932
            'administrator_name' => 'admin',
933
            'administrator_phone' => 'admin',
934
            'exercise_max_ckeditors_in_page' => 'exercise',
935
            'allow_hr_skills_management' => 'skill',
936
            'accessibility_font_resize' => 'display',
937
            'account_valid_duration' => 'profile',
938
            'allow_global_chat' => 'chat',
939
            'allow_lostpassword' => 'registration',
940
            'allow_registration' => 'registration',
941
            'allow_registration_as_teacher' => 'registration',
942
            'required_profile_fields' => 'registration',
943
            'allow_skills_tool' => 'skill',
944
            'allow_students_to_browse_courses' => 'display',
945
            'allow_terms_conditions' => 'registration',
946
            'allow_users_to_create_courses' => 'course',
947
            'auto_detect_language_custom_pages' => 'language',
948
            'platform_language' => 'language',
949
            'course_validation' => 'course',
950
            'course_validation_terms_and_conditions_url' => 'course',
951
            'display_categories_on_homepage' => 'display',
952
            'display_coursecode_in_courselist' => 'course',
953
            'display_teacher_in_courselist' => 'course',
954
            'drh_autosubscribe' => 'registration',
955
            'drh_page_after_login' => 'registration',
956
            'enable_help_link' => 'display',
957
            'example_material_course_creation' => 'course',
958
            'login_is_email' => 'profile',
959
            'noreply_email_address' => 'mail',
960
            'page_after_login' => 'registration',
961
            'pdf_export_watermark_by_course' => 'document',
962
            'pdf_export_watermark_enable' => 'document',
963
            'pdf_export_watermark_text' => 'document',
964
            'platform_unsubscribe_allowed' => 'registration',
965
            'send_email_to_admin_when_create_course' => 'course',
966
            'show_admin_toolbar' => 'display',
967
            'show_administrator_data' => 'display',
968
            'show_back_link_on_top_of_tree' => 'display',
969
            'show_closed_courses' => 'display',
970
            'show_different_course_language' => 'display',
971
            'show_email_addresses' => 'display',
972
            'show_empty_course_categories' => 'display',
973
            'show_full_skill_name_on_skill_wheel' => 'skill',
974
            'show_hot_courses' => 'display',
975
            'show_link_bug_notification' => 'display',
976
            'show_number_of_courses' => 'display',
977
            'show_teacher_data' => 'display',
978
            'showonline' => 'display',
979
            'student_autosubscribe' => 'registration',
980
            'student_page_after_login' => 'registration',
981
            'student_view_enabled' => 'course',
982
            'teacher_autosubscribe' => 'registration',
983
            'teacher_page_after_login' => 'registration',
984
            'time_limit_whosonline' => 'display',
985
            'user_selected_theme' => 'profile',
986
            'hide_global_announcements_when_not_connected' => 'announcement',
987
            'hide_home_top_when_connected' => 'display',
988
            'hide_logout_button' => 'display',
989
            'institution_address' => 'platform',
990
            'redirect_admin_to_courses_list' => 'admin',
991
            'use_custom_pages' => 'platform',
992
            'allow_group_categories' => 'group',
993
            'allow_user_headings' => 'display',
994
            'default_document_quotum' => 'document',
995
            'default_forum_view' => 'forum',
996
            'default_group_quotum' => 'document',
997
            'enable_quiz_scenario' => 'exercise',
998
            'exercise_max_score' => 'exercise',
999
            'exercise_min_score' => 'exercise',
1000
            'pdf_logo_header' => 'platform',
1001
            'show_glossary_in_documents' => 'document',
1002
            'show_glossary_in_extra_tools' => 'glossary',
1003
            'survey_email_sender_noreply' => 'survey',
1004
            'allow_coach_feedback_exercises' => 'exercise',
1005
            'sessionadmin_autosubscribe' => 'registration',
1006
            'sessionadmin_page_after_login' => 'registration',
1007
            'show_tutor_data' => 'display',
1008
            'allow_social_tool' => 'social',
1009
            'allow_message_tool' => 'message',
1010
            'allow_email_editor' => 'editor',
1011
            'show_link_ticket_notification' => 'display',
1012
            'permissions_for_new_directories' => 'document',
1013
            'enable_profile_user_address_geolocalization' => 'profile',
1014
            'allow_show_skype_account' => 'profile',
1015
            'allow_show_linkedin_url' => 'profile',
1016
            'allow_students_to_create_groups_in_social' => 'social',
1017
            'default_calendar_view' => 'agenda',
1018
            'documents_default_visibility_defined_in_course' => 'document',
1019
            'message_max_upload_filesize' => 'message',
1020
            'course_create_active_tools' => 'course',
1021
            'tool_visible_by_default_at_creation' => 'document',
1022
            'show_users_folders' => 'document',
1023
            'show_default_folders' => 'document',
1024
            'show_chat_folder' => 'chat',
1025
            'enabled_support_svg' => 'editor',
1026
            'enabled_support_pixlr' => 'editor',
1027
            'enable_webcam_clip' => 'document',
1028
            'enable_record_audio' => 'course',
1029
            'enabled_text2audio' => 'document',
1030
            'permanently_remove_deleted_files' => 'document',
1031
            'allow_delete_attendance' => 'attendance',
1032
            'display_groups_forum_in_general_tool' => 'forum',
1033
            'dropbox_allow_overwrite' => 'dropbox',
1034
            'allow_user_course_subscription_by_course_admin' => 'course',
1035
            'hide_course_group_if_no_tools_available' => 'group',
1036
            'extend_rights_for_coach_on_survey' => 'survey',
1037
            'show_official_code_exercise_result_list' => 'exercise',
1038
            'dropbox_max_filesize' => 'dropbox',
1039
            'dropbox_allow_just_upload' => 'dropbox',
1040
            'dropbox_allow_student_to_student' => 'dropbox',
1041
            'dropbox_allow_group' => 'dropbox',
1042
            'dropbox_allow_mailing' => 'dropbox',
1043
            'upload_extensions_list_type' => 'document',
1044
            'upload_extensions_blacklist' => 'document',
1045
            'upload_extensions_skip' => 'document',
1046
            'changeable_options' => 'profile',
1047
            'users_copy_files' => 'document',
1048
            'if_file_exists_option' => 'document',
1049
            'permissions_for_new_files' => 'document',
1050
            'extended_profile' => 'profile',
1051
            'split_users_upload_directory' => 'profile',
1052
            'show_documents_preview' => 'document',
1053
            'decode_utf8' => 'webservice',
1054
            'messaging_allow_send_push_notification' => 'webservice',
1055
            'messaging_gdc_project_number' => 'webservice',
1056
            'messaging_gdc_api_key' => 'webservice',
1057
            'allow_download_documents_by_api_key' => 'webservice',
1058
            'profiling_filter_adding_users' => 'profile',
1059
            'hide_dltt_markup' => 'language',
1060
            'active_tools_on_create' => 'course',
1061
        ];
1062
1063
        return isset($settings[$variable]) ? $settings[$variable] : $defaultCategory;
1064
    }
1065
}
1066