Passed
Push — develop ( cfa396...74c300 )
by Nikolay
06:43 queued 11s
created

UpdateConfigsUpToVer2020162   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 74
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 10
eloc 46
c 1
b 0
f 0
dl 0
loc 74
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
B processUpdate() 0 58 9
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, 10 2020
7
 *
8
 */
9
10
namespace MikoPBX\Core\System\Upgrade\Releases;
11
12
use MikoPBX\Common\Models\DialplanApplications;
13
use MikoPBX\Common\Models\Extensions;
14
use MikoPBX\Common\Models\FirewallRules;
15
use MikoPBX\Common\Models\NetworkFilters;
16
use MikoPBX\Core\System\MikoPBXConfig;
17
use MikoPBX\Core\System\PBX;
18
use MikoPBX\Core\System\Upgrade\UpgradeSystemConfigInterface;
19
use MikoPBX\Core\System\Util;
20
use Phalcon\Config as ConfigAlias;
21
use Phalcon\Di\Injectable;
22
23
class UpdateConfigsUpToVer2020162 extends Injectable implements UpgradeSystemConfigInterface
24
{
25
  	public const PBX_VERSION = '2020.1.62';
26
27
    private ConfigAlias $config;
28
    private MikoPBXConfig $mikoPBXConfig;
29
30
    /**
31
     * Class constructor.
32
     */
33
    public function __construct()
34
    {
35
        $this->config = $this->getDI()->getShared('config');
36
        $this->mikoPBXConfig = new MikoPBXConfig();
37
    }
38
39
    public function processUpdate():void
40
    {
41
        $sqlite3Path = Util::which('sqlite3');
42
43
        /** @var \MikoPBX\Common\Models\FirewallRules $rule */
44
        $result = FirewallRules::find();
45
        foreach ($result as $rule) {
46
            /** @var \MikoPBX\Common\Models\NetworkFilters $network_filter */
47
            $network_filter = NetworkFilters::findFirst($rule->networkfilterid);
48
            if ($network_filter === null) {
49
                // Это "битая" роль, необходимо ее удалить. Нет ссылки на подсеть.
50
                $rule->delete();
51
            }
52
        }
53
54
        // Корректировка AstDB
55
        $astdb_file = $this->config->path('astDatabase.dbfile');
56
        if (file_exists($astdb_file)) {
57
            // С переходом на PJSIP удалим статусы SIP.
58
            Util::mwExec("{$sqlite3Path}  {$astdb_file} 'DELETE FROM astdb WHERE key LIKE \"/UserBuddyStatus/SIP%\"'");
59
        }
60
61
        PBX::checkCodec('ilbc', 'iLBC', 'audio');
62
        PBX::checkCodec('opus', 'Opus Codec', 'audio');
63
64
        $PrivateKey = $this->mikoPBXConfig->getGeneralSettings('WEBHTTPSPrivateKey');
65
        $PublicKey  = $this->mikoPBXConfig->getGeneralSettings('WEBHTTPSPublicKey');
66
        if (empty($PrivateKey) || empty($PublicKey)) {
67
            $certs = Util::generateSslCert();
68
            $this->mikoPBXConfig->setGeneralSettings('WEBHTTPSPrivateKey', $certs['PrivateKey']);
69
            $this->mikoPBXConfig->setGeneralSettings('WEBHTTPSPublicKey', $certs['PublicKey']);
70
        }
71
72
73
        $app_number = '10003246';
74
        $d_app      = DialplanApplications::findFirst('extension="' . $app_number . '"');
75
        if ($d_app === null) {
76
            $app_text                = '1,Answer()' . "\n" .
77
                'n,AGI(cdr_connector.php,${ISTRANSFER}dial_answer)' . "\n" .
78
                'n,Echo()' . "\n" .
79
                'n,Hangup()' . "\n";
80
            $d_app                   = new DialplanApplications();
81
            $d_app->applicationlogic = base64_encode($app_text);
82
            $d_app->extension        = $app_number;
83
            $d_app->description      = 'Echos audio and video back to the caller as soon as it is received. Used to test connection delay.';
84
            $d_app->name             = 'Echo test';
85
            $d_app->type             = 'plaintext';
86
            $d_app->uniqid           = 'DIALPLAN-APPLICATION-' . md5(time());
87
88
            if ($d_app->save()) {
89
                $extension = Extensions::findFirst("number = '{$app_number}'");
90
                if ($extension === null) {
91
                    $extension                    = new Extensions();
92
                    $extension->number            = $app_number;
93
                    $extension->type              = Extensions::TYPE_DIALPLAN_APPLICATION;
94
                    $extension->callerid          = $d_app->name;
95
                    $extension->show_in_phonebook = '1';
96
                    $extension->save();
97
                }
98
            }
99
        }
100
    }
101
}