Passed
Pull Request — master (#16)
by Nikolay
13:10 queued 02:12
created

AssetProvider::makeCustomFilesAssets()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 15
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 13
c 0
b 0
f 0
dl 0
loc 15
rs 9.8333
cc 3
nc 3
nop 1
1
<?php
2
/**
3
 * Copyright © MIKO LLC - All Rights Reserved
4
 * Unauthorized copying of this file, via any medium is strictly prohibited
5
 * Proprietary and confidential
6
 * Written by Alexey Portnov, 8 2020
7
 */
8
9
declare(strict_types=1);
10
/**
11
 * Copyright (C) MIKO LLC - All Rights Reserved
12
 * Unauthorized copying of this file, via any medium is strictly prohibited
13
 * Proprietary and confidential
14
 * Written by Nikolay Beketov, 4 2020
15
 *
16
 */
17
namespace MikoPBX\AdminCabinet\Providers;
18
19
use Phalcon\Assets\Collection;
20
use Phalcon\Assets\Manager;
21
use Phalcon\Di\DiInterface;
22
use Phalcon\Di\ServiceProviderInterface;
23
use Phalcon\Text;
24
25
use function MikoPBX\Common\Config\appPath;
26
27
class AssetProvider implements ServiceProviderInterface
28
{
29
    public const SERVICE_NAME = 'assets';
30
31
    private Collection $headerCollectionJSForExtensions;
32
    private Collection $footerCollectionJSForExtensions;
33
    private Collection $headerCollectionJS;
34
    private Collection $headerCollectionCSS;
35
    private Collection $footerCollectionJS;
36
    private Collection $semanticCollectionCSS;
37
    private Collection $semanticCollectionJS;
38
    private Collection $footerCollectionACE;
39
    private Collection $footerCollectionLoc;
40
    private Collection $headerCollectionSentryJS;
41
    private string $cssCacheDir;
42
    private string $jsCacheDir;
43
    private Manager $manager;
44
45
    /**
46
     * Registers assets service provider
47
     *
48
     * @param \Phalcon\Di\DiInterface $di
49
     */
50
    public function register(DiInterface $di): void
51
    {
52
        $di->set(
53
            self::SERVICE_NAME,
54
            function () use ($di) {
55
                $assets = new AssetProvider();
56
                $assets->initializeClassVariables();
57
                $dispatcher = $di->get('dispatcher');
58
                $session    = $di->get('session');
59
                $controller = $dispatcher->getControllerName();
60
                $action     = $dispatcher->getActionName();
61
                $moduleName = $dispatcher->getModuleName();
62
63
                if ($action === null) {
64
                    $action = 'index';
65
                }
66
                if ($session !== null && $session->has('versionHash')) {
67
                    $version = (string)$session->get('versionHash');
68
                } else {
69
                    $version = str_replace(PHP_EOL, '', file_get_contents('/etc/version'));
70
                }
71
72
                $assets->makeSentryAssets($version);
73
                $assets->makeHeaderAssets($session, $moduleName);
74
75
                // Generates Controllers assets
76
                $method_name = "make{$controller}Assets";
77
                if (method_exists($assets, $method_name)) {
78
                    $assets->$method_name($action);
79
                }
80
81
                $assets->makeFooterAssets();
82
                $assets->makeLocalizationAssets($di, $version);
83
                $assets->generateFilesAndLinks($controller, $action, $version);
84
85
                return $assets->manager;
86
            }
87
        );
88
    }
89
90
    /**
91
     * Initialize class variables
92
     */
93
    public function initializeClassVariables()
94
    {
95
        $this->manager = new Manager();
96
97
        $this->cssCacheDir = appPath('sites/admin-cabinet/assets/css/cache');
98
        $this->jsCacheDir  = appPath('sites/admin-cabinet/assets/js/cache');
99
100
        $this->headerCollectionJSForExtensions = $this->manager->collection('headerJS');
101
        $this->headerCollectionJSForExtensions->setPrefix('assets/');
102
        $this->footerCollectionJSForExtensions = $this->manager->collection('footerJS');
103
        $this->footerCollectionJSForExtensions->setPrefix('assets/');
104
        $this->headerCollectionJS = $this->manager->collection('headerPBXJS');
105
        $this->headerCollectionJS->setPrefix('assets/');
106
        $this->headerCollectionCSS = $this->manager->collection('headerCSS');
107
        $this->headerCollectionCSS->setPrefix('assets/');
108
        $this->footerCollectionJS = $this->manager->collection('footerPBXJS');
109
        $this->footerCollectionJS->setPrefix('assets/');
110
        $this->headerCollectionSentryJS = $this->manager->collection('headerSentryJS');
111
        $this->semanticCollectionCSS    = $this->manager->collection('SemanticUICSS');
112
        $this->semanticCollectionCSS->setPrefix('assets/');
113
        $this->semanticCollectionJS = $this->manager->collection('SemanticUIJS');
114
        $this->semanticCollectionJS->setPrefix('assets/');
115
        $this->footerCollectionACE = $this->manager->collection('footerACE');
116
        $this->footerCollectionACE->setPrefix('assets/');
117
        $this->footerCollectionLoc = $this->manager->collection('footerLoc');
118
        $this->footerCollectionLoc->setPrefix('assets/');
119
    }
120
121
    /**
122
     * Makes assets for the Sentry error logger
123
     *
124
     * @param string $version
125
     */
126
    private function makeSentryAssets(string $version): void
127
    {
128
        if (file_exists('/tmp/sendmetrics')) {
129
            $this->headerCollectionSentryJS->addjs(
130
                '//browser.sentry-cdn.com/5.27.0/bundle.min.js',
131
                false,
132
                false,
133
                [
134
                    'crossorigin' => 'anonymous',
135
                    'integrity'   => 'sha384-odt6g+qg66eR/WbXcAHMweT2Ab+eHnyzmeJOodbqYhP2rQdeJbPgDM/xbi5jj2tx',
136
                ]
137
            );
138
            $this->headerCollectionSentryJS->addJs(
139
                "assets/js/pbx/main/sentry-error-logger.js?v={$version}",
140
                true
141
            );
142
        }
143
    }
144
145
    /**
146
     * Makes assets for all controllers. Base set of scripts and styles
147
     *
148
     * @param $session
149
     * @param $moduleName
150
     */
151
    private function makeHeaderAssets($session, $moduleName): void
152
    {
153
        $this->semanticCollectionCSS
154
            ->addCss('css/vendor/semantic/grid.min.css', true)
155
            ->addCss('css/vendor/semantic/divider.min.css', true)
156
            ->addCss('css/vendor/semantic/container.min.css', true)
157
            ->addCss('css/vendor/semantic/header.min.css', true)
158
            ->addCss('css/vendor/semantic/button.min.css', true)
159
            ->addCss('css/vendor/semantic/form.min.css', true)
160
            ->addCss('css/vendor/semantic/icon.min.css', true)
161
            ->addCss('css/vendor/semantic/flag.min.css', true)
162
            ->addCss('css/vendor/semantic/image.min.css', true)
163
            ->addCss('css/vendor/semantic/input.min.css', true)
164
            ->addCss('css/vendor/semantic/message.min.css', true)
165
            ->addCss('css/vendor/semantic/segment.min.css', true)
166
            ->addCss('css/vendor/semantic/site.min.css', true)
167
            ->addCss('css/vendor/semantic/reset.min.css', true)
168
            ->addCss('css/vendor/semantic/transition.min.css', true)
169
            ->addCss('css/vendor/semantic/dropdown.min.css', true);
170
171
        $this->headerCollectionJS
172
            ->addJs('js/pbx/main/header.js', true)
173
            ->addJs('js/vendor/jquery.min.js', true);
174
175
        $this->footerCollectionJS
176
            ->addJs('js/pbx/main/language-select.js', true);
177
178
        $this->semanticCollectionJS
179
            ->addJs('js/vendor/semantic/form.min.js', true)
180
            ->addJs('js/vendor/semantic/api.min.js', true)
181
            ->addJs('js/vendor/semantic/site.min.js', true)
182
            ->addJs('js/vendor/semantic/popup.min.js', true)
183
            ->addJs('js/vendor/semantic/dropdown.min.js', true)
184
            ->addJs('js/vendor/semantic/transition.min.js', true);
185
186
        // Если пользователь залогинился, сформируем необходимые CSS кеши
187
        if ($session && $session->has('auth')) {
188
            $this->semanticCollectionCSS
189
                ->addCss('css/vendor/semantic/menu.min.css', true)
190
                ->addCss('css/vendor/semantic/sidebar.min.css', true)
191
                ->addCss('css/vendor/semantic/table.min.css', true)
192
                ->addCss('css/vendor/semantic/loader.min.css', true)
193
                ->addCss('css/vendor/semantic/label.min.css', true)
194
                ->addCss('css/vendor/semantic/dimmer.min.css', true)
195
                ->addCss('css/vendor/semantic/accordion.min.css', true)
196
                ->addCss('css/vendor/semantic/placeholder.min.css', true)
197
                ->addCss('css/vendor/semantic/item.min.css', true)
198
                ->addCss('css/vendor/semantic/tab.min.css', true)
199
                ->addCss('css/vendor/semantic/checkbox.min.css', true)
200
                ->addCss('css/vendor/semantic/popup.min.css', true)
201
                ->addCss('css/vendor/semantic/toast.min.css', true);
202
203
            $this->semanticCollectionJS
204
                ->addJs('js/vendor/semantic/accordion.min.js', true)
205
                ->addJs('js/vendor/semantic/dimmer.min.js', true)
206
                ->addJs('js/vendor/semantic/sidebar.min.js', true)
207
                ->addJs('js/vendor/semantic/checkbox.min.js', true)
208
                ->addJs('js/vendor/semantic/toast.min.js', true)
209
                ->addJs('js/vendor/semantic/tab.min.js', true);
210
211
            $this->footerCollectionJS
212
                ->addJs(
213
                    'js/pbx/main/config.js',
214
                    true
215
                )
216
                ->addJs(
217
                    'js/pbx/main/pbxapi.js',
218
                    true
219
                )
220
                ->addJs(
221
                    'js/pbx/main/connection-check-worker.js',
222
                    true
223
                )
224
                ->addJs(
225
                    'js/pbx/main/semantic-localization.js',
226
                    true
227
                )
228
                ->addJs(
229
                    'js/pbx/Advices/advices-worker.js',
230
                    true
231
                )
232
                ->addJs(
233
                    'js/pbx/SendMetrics/send-metrics-index.js',
234
                    true
235
                )
236
                ->addJs(
237
                    'js/pbx/main/ssh-console.js',
238
                    true
239
                )
240
                ->addJs(
241
                    'js/pbx/main/delete-something.js',
242
                    true
243
                )
244
                ->addJs(
245
                    'js/pbx/main/user-message.js',
246
                    true
247
                )
248
                ->addJs(
249
                    'js/pbx/Extensions/extensions.js',
250
                    true
251
                )
252
                ->addJs(
253
                    'js/pbx/PbxExtensionModules/pbx-extension-menu-addition.js',
254
                    true
255
                )
256
                ->addJs(
257
                    'js/pbx/TopMenuSearch/top-menu-search.js',
258
                    true
259
                );
260
261
            if ($moduleName === 'PBXExtension') {
262
                $this->footerCollectionJS->addJs(
263
                    'js/pbx/PbxExtensionModules/pbx-extension-module-status.js',
264
                    true
265
                );
266
            }
267
        }
268
    }
269
270
    /**
271
     * Makes footer assets
272
     */
273
    private function makeFooterAssets(): void
274
    {
275
        $this->headerCollectionCSS
276
            ->addCss('css/custom.css', true);
277
278
        $this->footerCollectionJS->addJs(
279
            'js/pbx/main/footer.js',
280
            true
281
        );
282
    }
283
284
    /**
285
     * Makes Language cache for browser JS scripts
286
     *
287
     * @param \Phalcon\Di\DiInterface $di
288
     * @param string                  $version
289
     */
290
    private function makeLocalizationAssets(DiInterface $di, string $version): void
291
    {
292
        $language   = $di->getShared('language');
293
        $langJSFile = "js/cache/localization-{$language}-{$version}.min.js";
294
        if ( ! file_exists($langJSFile)) {
295
            $arrStr = [];
296
            foreach ($di->getShared('messages') as $key => $value) {
297
                $arrStr[$key] = str_replace(
298
                    "'",
299
                    "\\'",
300
                    str_replace(["\n", '  '], '', $value)
301
                );
302
            }
303
304
            $fileName    = "{$this->jsCacheDir}/localization-{$language}-{$version}.min.js";
305
            $scriptArray = json_encode($arrStr);
306
            file_put_contents($fileName, "globalTranslate = {$scriptArray}");
307
        }
308
309
310
        $this->footerCollectionLoc->addJs($langJSFile, true);
311
    }
312
313
    /**
314
     * Makes caches and versioned links for scripts and styles
315
     *
316
     * @param        $controller
317
     * @param string $action
318
     * @param string $version
319
     */
320
    private function generateFilesAndLinks($controller, string $action, string $version): void
321
    {
322
        $resultCombinedName = Text::uncamelize(ucfirst($controller) . ucfirst($action), '-');
323
        $resultCombinedName = strlen($resultCombinedName) !== '' ? $resultCombinedName . '-' : '';
324
325
326
        foreach ($this->headerCollectionJS as $resource) {
327
            $resource->setPath($resource->getPath() . '?v=' . $version);
328
        }
329
        foreach ($this->footerCollectionJS as $resource) {
330
            $resource->setPath($resource->getPath() . '?v=' . $version);
331
        }
332
        foreach ($this->semanticCollectionJS as $resource) {
333
            $resource->setPath($resource->getPath() . '?v=' . $version);
334
        }
335
        foreach ($this->semanticCollectionCSS as $resource) {
336
            $resource->setPath($resource->getPath() . '?v=' . $version);
337
        }
338
        foreach ($this->footerCollectionACE as $resource) {
339
            $resource->setPath($resource->getPath() . '?v=' . $version);
340
        }
341
342
343
        $this->headerCollectionCSS->join(true);
344
        $this->headerCollectionCSS->setTargetPath("{$this->cssCacheDir}/{$resultCombinedName}header.min.css");
345
        $this->headerCollectionCSS->setTargetUri("css/cache/{$resultCombinedName}header.min.css?v={$version}");
346
347
348
        $this->headerCollectionJSForExtensions->join(true);
349
        $this->headerCollectionJSForExtensions->setTargetPath("{$this->jsCacheDir}/{$resultCombinedName}header.min.js");
350
        $this->headerCollectionJSForExtensions->setTargetUri(
351
            "js/cache/{$resultCombinedName}header.min.js?v={$version}"
352
        );
353
354
355
        $this->footerCollectionJSForExtensions->join(true);
356
        $this->footerCollectionJSForExtensions->setTargetPath("{$this->jsCacheDir}/{$resultCombinedName}footer.min.js");
357
        $this->footerCollectionJSForExtensions->setTargetUri(
358
            "js/cache/{$resultCombinedName}footer.min.js?v={$version}"
359
        );
360
    }
361
362
    /**
363
     * Makes assets for the CallQueues controller
364
     *
365
     * @param string $action
366
     */
367
    private function makeCallQueuesAssets(string $action)
368
    {
369
        if ($action === 'index') {
370
            $this->headerCollectionCSS
371
                ->addCss('css/vendor/datatable/dataTables.semanticui.css', true);
372
            $this->footerCollectionJS
373
                ->addJs('js/vendor/datatable/dataTables.semanticui.js', true)
374
                ->addJs('js/pbx/CallQueues/callqueues-index.js', true);
375
        } elseif ($action === 'modify') {
376
            $this->footerCollectionJS
377
                ->addJs('js/vendor/jquery.debounce-1.0.5.js', true)
378
                ->addJs('js/vendor/jquery.tablednd.js', true)
379
                ->addJs('js/pbx/main/form.js', true)
380
                ->addJs('js/pbx/CallQueues/callqueue-modify.js', true)
381
                ->addJs('js/pbx/SoundFiles/one-button-sound-player.js', true);
382
        }
383
    }
384
385
    /**
386
     * Makes assets for the ConferenceRooms controller
387
     *
388
     * @param string $action
389
     */
390
    private function makeConferenceRoomsAssets(string $action)
391
    {
392
        if ($action === 'index') {
393
            $this->footerCollectionJS
394
                ->addJs('js/pbx/ConferenceRooms/conference-rooms-index.js', true);
395
        } elseif ($action === 'modify') {
396
            $this->footerCollectionJS
397
                ->addJs('js/pbx/main/form.js', true)
398
                ->addJs('js/pbx/ConferenceRooms/conference-room-modify.js', true);
399
        }
400
    }
401
402
    /**
403
     * Makes assets for the SystemDiagnostic controller
404
     *
405
     * @param string $action
406
     */
407
    private function makeSystemDiagnosticAssets(string $action): void
408
    {
409
        if ($action === 'index') {
410
            $this->footerCollectionJS
411
                ->addJs('js/vendor/semantic/popup.min.js', true)
412
                ->addJs('js/vendor/semantic/dropdown.min.js', true)
413
                ->addJs('js/pbx/main/form.js', true)
414
                ->addJs('js/pbx/SystemDiagnostic/system-diagnostic-index.js', true)
415
                ->addJs('js/pbx/SystemDiagnostic/system-diagnostic-index-showlogs.js', true)
416
                ->addJs('js/pbx/SystemDiagnostic/system-diagnostic-index-sysinfo.js', true)
417
                ->addJs('js/pbx/SystemDiagnostic/system-diagnostic-index-logcapture.js', true);
418
            $this->footerCollectionACE
419
                ->addJs('js/vendor/ace/ace.js', true)
420
                ->addJs('js/vendor/ace/mode-julia.js', true);
421
        }
422
    }
423
424
    /**
425
     * Makes assets for the SoundFiles controller
426
     *
427
     * @param string $action
428
     */
429
    private function makeSoundFilesAssets(string $action): void
430
    {
431
        if ($action === 'index') {
432
            $this->headerCollectionCSS
433
                ->addCss('css/vendor/range/range.css')
434
                ->addCss(
435
                    'css/vendor/datatable/dataTables.semanticui.css',
436
                    true
437
                );
438
            $this->footerCollectionJS->addJs('js/vendor/datatable/dataTables.semanticui.js', true)
439
                ->addJs('js/vendor/range/range.min.js', true)
440
                ->addJs('js/vendor/jquery.address.min.js', true)
441
                ->addJs('js/pbx/SoundFiles/sound-files-index-player.js', true)
442
                ->addJs('js/pbx/SoundFiles/sound-files-index.js', true);
443
        } elseif ($action === 'modify') {
444
            $this->headerCollectionCSS->addCss('css/vendor/range/range.css');
445
446
            $this->headerCollectionJS
447
                ->addJs(
448
                    'js/vendor/webrtc/MediaStreamRecorder.min.js',
449
                    true
450
                )
451
                ->addJs('js/vendor/webrtc/adapter-latest.min.js', true);
452
453
            $this->footerCollectionJS
454
                ->addJs('js/vendor/range/range.min.js', true)
455
                ->addJs('js/pbx/main/form.js', true)
456
                ->addJs('js/vendor/resumable.js', true)
457
                ->addJs('js/pbx/SoundFiles/sound-file-modify-player.js', true)
458
                ->addJs('js/pbx/SoundFiles/sound-file-modify-upload-worker.js', true)
459
                ->addJs('js/pbx/SoundFiles/sound-file-modify-webkit-recorder.js', true)
460
                ->addJs('js/pbx/SoundFiles/sound-file-modify.js', true);
461
        }
462
    }
463
464
    /**
465
     * Makes assets for the TimeSettings controller
466
     *
467
     * @param string $action
468
     */
469
    private function makeTimeSettingsAssets(string $action): void
470
    {
471
        if ($action === 'modify') {
472
            $this->footerCollectionJS
473
                ->addJs('js/pbx/main/form.js', true)
474
                ->addJs('js/pbx/TimeSettings/time-settings-worker.js', true)
475
                ->addJs('js/pbx/TimeSettings/time-settings-modify.js', true);
476
        }
477
    }
478
479
    /**
480
     * Makes assets for the Update controller
481
     *
482
     * @param string $action
483
     */
484
    private function makeUpdateAssets(string $action): void
485
    {
486
        if ($action === 'index') {
487
            $this->footerCollectionJS
488
                ->addJs('js/pbx/main/form.js', true)
489
                ->addJs('js/vendor/resumable.js', true)
490
                ->addJs('js/vendor/showdown/showdown.min.js', true)
491
                ->addJs('js/pbx/Update/update-index.js', true);
492
            $this->semanticCollectionCSS
493
                ->addCss('css/vendor/semantic/progress.min.css', true)
494
                ->addCss('css/vendor/semantic/modal.min.css', true);
495
496
            $this->semanticCollectionJS
497
                ->addJs('js/vendor/semantic/progress.min.js', true)
498
                ->addJs('js/vendor/semantic/modal.min.js', true);
499
        }
500
    }
501
502
    /**
503
     * Makes assets for the Session controller
504
     *
505
     * @param string $action
506
     */
507
    private function makeSessionAssets(string $action): void
508
    {
509
        if ($action === 'index') {
510
            $this->footerCollectionJS
511
                ->addJs('js/pbx/main/form.js', true)
512
                ->addJs('js/pbx/Session/login-form.js', true);
513
        }
514
    }
515
516
    /**
517
     * Makes assets for the Restart controller
518
     *
519
     * @param string $action
520
     */
521
    private function makeRestartAssets(string $action): void
522
    {
523
        if ($action === 'index') {
524
            $this->footerCollectionJS
525
                ->addJs('js/pbx/Restart/restart-index.js', true);
526
        }
527
    }
528
529
    /**
530
     * Makes assets for the Providers controller
531
     *
532
     * @param string $action
533
     */
534
    private function makeProvidersAssets(string $action): void
535
    {
536
        if ($action === 'index') {
537
            $this->semanticCollectionCSS
538
                ->addCss('css/vendor/datatable/dataTables.semanticui.css', true)
539
                ->addCss('css/vendor/semantic/modal.min.css', true);
540
541
            $this->semanticCollectionJS
542
                ->addJs('js/vendor/semantic/modal.min.js', true);
543
            $this->footerCollectionJS
544
                ->addJs('js/pbx/main/debugger-info.js', true)
545
                ->addJs('js/vendor/datatable/dataTables.semanticui.js', true)
546
                ->addJs('js/pbx/Providers/providers-index.js', true);
547
        } elseif ($action === 'modifysip' || $action === 'modifyiax') {
548
            $this->footerCollectionJS
549
                ->addJs('js/pbx/main/form.js', true)
550
                ->addJs('js/pbx/main/debugger-info.js', true)
551
                ->addJs('js/pbx/Providers/provider-modify.js', true);
552
        }
553
    }
554
555
    /**
556
     *  Makes assets for the PbxExtensionModules controller
557
     *
558
     * @param string $action
559
     */
560
    private function makePbxExtensionModulesAssets(string $action): void
561
    {
562
        if ($action === 'index') {
563
            $this->semanticCollectionJS->addJs('js/vendor/semantic/modal.min.js', true);
564
            $this->footerCollectionJS
565
                ->addJs('js/pbx/Update/update-api.js', true)
566
                ->addJs('js/vendor/datatable/dataTables.semanticui.js', true)
567
                ->addJs('js/vendor/resumable.js', true)
568
                ->addJs(
569
                    'js/pbx/PbxExtensionModules/pbx-extension-module-upgrade-status-worker.js',
570
                    true
571
                )
572
                ->addJs('js/pbx/PbxExtensionModules/pbx-extension-module-status.js', true)
573
                ->addJs('js/pbx/PbxExtensionModules/pbx-extension-modules-index.js', true)
574
                ->addJs('js/vendor/semantic/progress.min.js', true)
575
                ->addJs('js/pbx/PbxExtensionModules/pbx-extension-module-add-new.js', true);
576
            $this->semanticCollectionCSS
577
                ->addCss('css/vendor/datatable/dataTables.semanticui.min.css', true)
578
                ->addCss('css/vendor/semantic/modal.min.css', true)
579
                ->addCss('css/vendor/semantic/progress.min.css', true);
580
        } elseif ($action === 'modify') {
581
            $this->footerCollectionJS
582
                ->addJs('js/pbx/main/form.js', true)
583
                ->addJs('js/pbx/PbxExtensionModules/pbx-extension-module-modify.js', true);
584
        }
585
    }
586
587
    /**
588
     * Makes assets for the OutOffWorkTime controller
589
     *
590
     * @param string $action
591
     */
592
    private function makeOutOffWorkTimeAssets(string $action): void
593
    {
594
        if ($action === 'index') {
595
            $this->footerCollectionJS
596
                ->addJs('js/pbx/OutOffWorkTime/out-of-work-times-index.js', true);
597
        } elseif ($action === 'modify') {
598
            $this->semanticCollectionCSS->addCss('css/vendor/semantic/calendar.min.css', true);
599
            $this->semanticCollectionJS->addJs('js/vendor/semantic/calendar.min.js', true);
600
            $this->footerCollectionJS
601
                ->addJs('js/pbx/main/form.js', true)
602
                ->addJs('js/pbx/OutOffWorkTime/out-of-work-time-modify.js', true)
603
                ->addJs('js/pbx/SoundFiles/one-button-sound-player.js', true);
604
        }
605
    }
606
607
    /**
608
     * Makes assets for the OutboundRoutes controller
609
     *
610
     * @param string $action
611
     */
612
    private function makeOutboundRoutesAssets(string $action): void
613
    {
614
        if ($action === 'index') {
615
            $this->footerCollectionJS
616
                ->addJs('js/vendor/jquery.tablednd.min.js', true)
617
                ->addJs('js/pbx/OutboundRoutes/outbound-routes-index.js', true);
618
        } elseif ($action === 'modify') {
619
            $this->footerCollectionJS->addJs('js/pbx/main/form.js', true)
620
                ->addJs('js/pbx/OutboundRoutes/outbound-route-modify.js', true);
621
        }
622
    }
623
624
    /**
625
     * Makes assets for the Network controller
626
     *
627
     * @param string $action
628
     */
629
    private function makeNetworkAssets(string $action): void
630
    {
631
        if ($action === 'modify') {
632
            $this->footerCollectionJS
633
                ->addJs('js/pbx/main/form.js', true)
634
                ->addJs('js/pbx/Network/network-modify.js', true);
635
        }
636
    }
637
638
    /**
639
     * Makes assets for the MailSettings controller
640
     *
641
     * @param string $action
642
     */
643
    private function makeMailSettingsAssets(string $action): void
644
    {
645
        if ($action === 'modify') {
646
            $this->footerCollectionJS
647
                ->addJs('js/pbx/main/form.js', true)
648
                ->addJs('js/pbx/MailSettings/mail-settings-modify.js', true);
649
        }
650
    }
651
652
    /**
653
     * Makes assets for the Licensing controller
654
     *
655
     * @param string $action
656
     */
657
    private function makeLicensingAssets(string $action): void
658
    {
659
        if ($action === 'modify') {
660
            $this->footerCollectionJS
661
                ->addJs('js/vendor/inputmask/inputmask.js', true)
662
                ->addJs('js/vendor/inputmask/jquery.inputmask.js', true)
663
                ->addJs('js/vendor/inputmask/bindings/inputmask.binding.js', true)
664
                ->addJs('js/vendor/inputmask/init.js', true)
665
                ->addJs('js/pbx/main/form.js', true)
666
                ->addJs('js/pbx/Licensing/licensing-modify.js', true);
667
        }
668
    }
669
670
    /**
671
     * Makes assets for the IvrMenu controller
672
     *
673
     * @param string $action
674
     */
675
    private function makeIvrMenuAssets(string $action): void
676
    {
677
        if ($action === 'index') {
678
            $this->headerCollectionCSS
679
                ->addCss('css/vendor/datatable/dataTables.semanticui.css', true);
680
            $this->footerCollectionJS
681
                ->addJs('js/vendor/datatable/dataTables.semanticui.js', true)
682
                ->addJs('js/pbx/IvrMenu/ivrmenu-index.js', true);
683
        } elseif ($action === 'modify') {
684
            $this->footerCollectionJS->addJs('js/pbx/main/form.js', true)
685
                ->addJs('js/pbx/SoundFiles/one-button-sound-player.js', true)
686
                ->addJs('js/pbx/IvrMenu/ivrmenu-modify.js', true);
687
        }
688
    }
689
690
    /**
691
     * Makes assets for the IncomingRoutes controller
692
     *
693
     * @param string $action
694
     */
695
    private function makeIncomingRoutesAssets(string $action): void
696
    {
697
        if ($action === 'index') {
698
            $this->footerCollectionJS->addJs('js/vendor/jquery.tablednd.js', true)
699
                ->addJs('js/pbx/main/form.js', true)
700
                ->addJs('js/pbx/IncomingRoutes/incoming-route-index.js', true);
701
        } elseif ($action === 'modify') {
702
            $this->footerCollectionJS->addJs('js/pbx/main/form.js', true)
703
                ->addJs('js/pbx/IncomingRoutes/incoming-route-modify.js', true);
704
        }
705
    }
706
707
    /**
708
     * Makes assets for the GeneralSettings controller
709
     *
710
     * @param string $action
711
     */
712
    private function makeGeneralSettingsAssets(string $action): void
713
    {
714
        if ($action === 'modify') {
715
            $this->semanticCollectionCSS->addCss('css/vendor/semantic/progress.min.css', true);
716
            $this->semanticCollectionJS->addJs('js/vendor/semantic/progress.min.js', true);
717
            $this->footerCollectionJS
718
                ->addJs('js/vendor/jquery.address.min.js', true)
719
                ->addJs('js/vendor/jquery.tablednd.js', true)
720
                ->addJs('js/pbx/main/form.js', true)
721
                ->addJs('js/pbx/main/password-score.js', true)
722
                ->addJs(
723
                    'js/pbx/GeneralSettings/general-settings-modify.js',
724
                    true
725
                );
726
        }
727
    }
728
729
    /**
730
     * Makes assets for the Firewall controller
731
     *
732
     * @param string $action
733
     */
734
    private function makeFirewallAssets(string $action): void
735
    {
736
        if ($action === 'index') {
737
            $this->footerCollectionJS
738
                ->addJs('js/pbx/Firewall/firewall-index.js', true);
739
        } elseif ($action === 'modify') {
740
            $this->footerCollectionJS
741
                ->addJs('js/pbx/main/form.js', true)
742
                ->addJs('js/pbx/Firewall/firewall-modify.js', true);
743
        }
744
    }
745
746
    /**
747
     * Makes assets for the Fail2Ban controller
748
     *
749
     * @param string $action
750
     */
751
    private function makeFail2BanAssets(string $action): void
752
    {
753
        if ($action === 'index') {
754
            $this->footerCollectionJS
755
                ->addJs('js/pbx/main/form.js', true)
756
                ->addJs('js/pbx/Fail2Ban/fail-to-ban-index.js', true);
757
        }
758
    }
759
760
    /**
761
     * Makes assets for the Extensions controller
762
     *
763
     * @param string $action
764
     */
765
    private function makeExtensionsAssets(string $action): void
766
    {
767
        if ($action === 'index') {
768
            $this->headerCollectionCSS->addCss('css/vendor/datatable/dataTables.semanticui.min.css', true);
769
770
            $this->footerCollectionJS
771
                ->addJs('js/vendor/datatable/dataTables.semanticui.js', true)
772
                ->addJs('js/vendor/inputmask/inputmask.js', true)
773
                ->addJs('js/vendor/inputmask/jquery.inputmask.js', true)
774
                ->addJs('js/vendor/inputmask/jquery.inputmask-multi.js', true)
775
                ->addJs('js/vendor/inputmask/bindings/inputmask.binding.js', true)
776
                ->addJs('js/vendor/inputmask/init.js', true)
777
                ->addJs('js/pbx/Extensions/input-mask-patterns.js', true)
778
                ->addJs('js/pbx/Extensions/extensions-index.js', true)
779
                ->addJs('js/pbx/main/debugger-info.js', true)
780
                ->addJs('js/vendor/clipboard/clipboard.js', true);
781
        } elseif ($action === 'modify') {
782
            $this->semanticCollectionCSS->addCss('css/vendor/semantic/card.min.css', true);
783
            $this->footerCollectionJS
784
                ->addJs('js/vendor/inputmask/inputmask.js', true)
785
                ->addJs('js/vendor/inputmask/jquery.inputmask.js', true)
786
                ->addJs('js/vendor/inputmask/jquery.inputmask-multi.js', true)
787
                ->addJs('js/vendor/inputmask/bindings/inputmask.binding.js', true)
788
                ->addJs('js/vendor/inputmask/init.js', true)
789
                ->addJs('js/pbx/Extensions/input-mask-patterns.js', true)
790
                ->addJs('js/pbx/main/form.js', true)
791
                ->addJs('js/pbx/main/debugger-info.js', true)
792
                ->addJs('js/pbx/Extensions/extension-modify.js', true);
793
        }
794
    }
795
796
    /**
797
     *  Makes assets for the DialplanApplications controller
798
     *
799
     * @param string $action
800
     */
801
    private function makeDialplanApplicationsAssets(string $action): void
802
    {
803
        if ($action === 'index') {
804
            $this->headerCollectionCSS
805
                ->addCss('css/vendor/datatable/dataTables.semanticui.css', true);
806
            $this->footerCollectionJS
807
                ->addJs('js/vendor/datatable/dataTables.semanticui.js', true)
808
                ->addJs('js/pbx/DialplanApplications/dialplan-applications-index.js', true);
809
        } elseif ($action === 'modify') {
810
            $this->footerCollectionACE
811
                ->addJs('js/vendor/ace/ace.js', true)
812
                ->addJs('js/vendor/ace/mode-php.js', true)
813
                ->addJs('js/vendor/ace/mode-julia.js', true);
814
            $this->footerCollectionJS
815
                ->addJs('js/pbx/main/form.js', true)
816
                ->addJs('js/pbx/DialplanApplications/dialplan-applications-modify.js', true);
817
        }
818
    }
819
820
    /**
821
     * Makes assets for the CustomFiles controller
822
     *
823
     * @param string $action
824
     */
825
    private function makeCustomFilesAssets(string $action): void
826
    {
827
        if ($action === 'index') {
828
            $this->headerCollectionCSS
829
                ->addCss('css/vendor/datatable/dataTables.semanticui.css', true);
830
            $this->footerCollectionJS
831
                ->addJs('js/vendor/datatable/dataTables.semanticui.js', true)
832
                ->addJs('js/pbx/CustomFiles/custom-files-index.js', true);
833
        } elseif ($action === 'modify') {
834
            $this->footerCollectionJS
835
                ->addJs('js/pbx/main/form.js', true)
836
                ->addJs('js/pbx/CustomFiles/custom-files-modify.js', true);
837
            $this->footerCollectionACE
838
                ->addJs('js/vendor/ace/ace.js', true)
839
                ->addJs('js/vendor/ace/mode-julia.js', true);
840
        }
841
    }
842
843
    /**
844
     * Makes assets for the CallDetailRecords controller
845
     *
846
     * @param string $action
847
     */
848
    private function makeCallDetailRecordsAssets(string $action): void
849
    {
850
        if ($action === 'index') {
851
            $this->semanticCollectionJS->addJs('js/vendor/semantic/progress.min.js', true);
852
853
            $this->semanticCollectionCSS
854
                ->addCss('css/vendor/range/range.min.css', true)
855
                ->addCss('css/vendor/datatable/scroller.dataTables.min.css', true)
856
                ->addCss('css/vendor/datepicker/daterangepicker.css', true)
857
                ->addCss('css/vendor/datatable/dataTables.semanticui.min.css', true);
858
859
            $this->semanticCollectionJS
860
                ->addJs('js/vendor/datatable/dataTables.semanticui.js', true)
861
                ->addJs('js/vendor/datatable/dataTables.scroller.min.js', true)
862
                ->addJs('js/vendor/datatable/scroller.semanticui.js', true)
863
                //->addJs('js/vendor/datatable/dataTables.pageResize.min.js', TRUE)
864
                ->addJs('js/vendor/range/range.min.js', true)
865
                ->addJS('js/vendor/datepicker/moment.min.js', true)
866
                ->addJS('js/vendor/datepicker/daterangepicker.js', true);
867
868
            $this->footerCollectionJS
869
                ->addJs(
870
                    'js/pbx/CallDetailRecords/call-detail-records-index.js',
871
                    true
872
                );
873
        }
874
    }
875
876
    /**
877
     * Makes assets for the AsteriskManagers controller
878
     *
879
     * @param string $action
880
     */
881
    private function makeAsteriskManagersAssets(string $action): void
882
    {
883
        if ($action === 'index') {
884
            $this->footerCollectionJS->addJs('js/pbx/AsteriskManagers/managers-index.js', true);
885
        } elseif ($action === 'modify') {
886
            $this->footerCollectionJS
887
                ->addJs('js/pbx/main/form.js', true)
888
                ->addJs('js/pbx/AsteriskManagers/manager-modify.js', true);
889
        }
890
    }
891
892
893
}