Passed
Push — develop ( 48ed7a...f087ba )
by Nikolay
05:31
created

PbxExtensionUtils::createAssetsSymlinks()   B

Complexity

Conditions 7
Paths 64

Size

Total Lines 33
Code Lines 22

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 22
c 0
b 0
f 0
dl 0
loc 33
rs 8.6346
cc 7
nc 64
nop 1
1
<?php
2
/**
3
 * Copyright (C) MIKO LLC - All Rights Reserved
4
 * Unauthorized copying of this file, via any medium is strictly prohibited
5
 * Proprietary and confidential
6
 * Written by Nikolay Beketov, 6 2020
7
 *
8
 */
9
10
namespace MikoPBX\Modules;
11
12
13
use MikoPBX\Common\Models\PbxExtensionModules;
14
use MikoPBX\Core\System\Util;
15
use Phalcon\Di;
16
17
use function MikoPBX\Common\Config\appPath;
18
19
class PbxExtensionUtils
20
{
21
    /**
22
     * Checks module state by UniqueID
23
     * @param string $moduleUniqueID
24
     *
25
     * @return bool
26
     */
27
    public static function isEnabled(string $moduleUniqueID):bool
28
    {
29
        $result        = PbxExtensionModules::findFirstByUniqid($moduleUniqueID);
30
        return ($result!==false && $result->disabled !== '1');
31
    }
32
33
    /**
34
     * Returns module dir by UniqueID
35
     * @param string $moduleUniqueID
36
     *
37
     * @return string
38
     *
39
     */
40
    public static function getModuleDir(string $moduleUniqueID):string
41
    {
42
        $di      = Di::getDefault();
43
        if ($di === null){
44
            return "/tmp/{$moduleUniqueID}";
45
        }
46
        $config  = $di->getShared('config');
47
        $modulesDir    = $config->path('core.modulesDir');
48
49
        return"{$modulesDir}/{$moduleUniqueID}";
50
    }
51
52
    /**
53
     * Creates JS, CSS, IMG cache folders and links for module by UniqueID
54
     *
55
     * @param string $moduleUniqueID
56
     */
57
    public static function  createAssetsSymlinks (string $moduleUniqueID):void
58
    {
59
        $moduleDir = self::getModuleDir($moduleUniqueID);
60
61
        // IMG
62
        $moduleImageDir      = "{$moduleDir}/public/assets/img";
63
        $imgCacheDir = appPath('sites/admin-cabinet/assets/img/cache');
64
        $moduleImageCacheDir = "{$imgCacheDir}/{$moduleUniqueID}";
65
        if (file_exists($moduleImageCacheDir)){
66
            unlink($moduleImageCacheDir);
67
        }
68
        if (file_exists($moduleImageDir)) {
69
            symlink($moduleImageDir, $moduleImageCacheDir);
70
        }
71
        // CSS
72
        $moduleCSSDir      = "{$moduleDir}/public/assets/css";
73
        $cssCacheDir = appPath('sites/admin-cabinet/assets/css/cache');
74
        $moduleCSSCacheDir = "{$cssCacheDir}/{$moduleUniqueID}";
75
        if (file_exists($moduleCSSCacheDir)){
76
            unlink($moduleCSSCacheDir);
77
        }
78
        if (file_exists($moduleCSSDir)) {
79
            symlink($moduleCSSDir, $moduleCSSCacheDir);
80
        }
81
        // JS
82
        $moduleJSDir      = "{$moduleDir}/public/assets/js";
83
        $jsCacheDir = appPath('sites/admin-cabinet/assets/js/cache');
84
        $moduleJSCacheDir = "{$jsCacheDir}/{$moduleUniqueID}";
85
        if (file_exists($moduleJSCacheDir)){
86
            unlink($moduleJSCacheDir);
87
        }
88
        if (file_exists($moduleJSDir)) {
89
            symlink($moduleJSDir, $moduleJSCacheDir);
90
        }
91
    }
92
93
    /**
94
     * Creates links to agi-bin files for module by UniqueID
95
     *
96
     * @param string $moduleUniqueID
97
     */
98
    public static function createAgiBinSymlinks(string $moduleUniqueID):void
99
    {
100
        $moduleDir = self::getModuleDir($moduleUniqueID);
101
102
        $di = Di::getDefault();
103
        if ($di === null) {
104
            return;
105
        }
106
        $config = $di->getShared('config');
107
108
        // Create symlinks to AGI-BIN
109
        $agiBinDir       = $config->path('asterisk.astagidir');
110
        $moduleAgiBinDir = "{$moduleDir}/agi-bin";
111
        $files           = glob("$moduleAgiBinDir/*.{php}", GLOB_BRACE);
112
        foreach ($files as $file) {
113
            $newFilename = $agiBinDir . '/' . pathinfo($file)['filename'];
114
            Util::createUpdateSymlink($file, $newFilename);
115
        }
116
    }
117
118
}