Passed
Push — develop ( d5179e...bede24 )
by Портнов
05:56 queued 11s
created

UpdateDataInDB::execute()   B

Complexity

Conditions 9
Paths 18

Size

Total Lines 35
Code Lines 22

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 22
c 1
b 0
f 0
dl 0
loc 35
rs 8.0555
cc 9
nc 18
nop 1
1
<?php
2
3
4
namespace MikoPBX\Core\Workers\Libs\WorkerCallEvents;
5
6
7
use MikoPBX\Common\Models\CallDetailRecordsTmp;
8
use MikoPBX\Core\System\Util;
9
10
class UpdateDataInDB {
11
12
    public static function execute($data):void
13
    {
14
        if (empty($data['UNIQUEID'])) {
15
            Util::sysLogMsg(__FUNCTION__, 'UNIQUEID is empty ' . json_encode($data), LOG_DEBUG);
16
            return;
17
        }
18
        $filter = [
19
            "UNIQUEID=:id:",
20
            'bind' => ['id' => $data['UNIQUEID'],],
21
        ];
22
        /** @var CallDetailRecordsTmp $m_data */
23
        $m_data = CallDetailRecordsTmp::findFirst($filter);
24
        if ($m_data === null) {
25
            return;
26
        }
27
        $f_list = $m_data->toArray();
28
        foreach ($data as $attribute => $value) {
29
            if ( ! array_key_exists($attribute, $f_list)) {
30
                continue;
31
            }
32
            if ('UNIQUEID' === $attribute) {
33
                continue;
34
            }
35
            $m_data->writeAttribute($attribute, $value);
36
        }
37
        $res = $m_data->save();
38
        if ( ! $res) {
39
            Util::sysLogMsg(__FUNCTION__, implode(' ', $m_data->getMessages()), LOG_ERR);
40
        }
41
42
        self::sendUserEventData($m_data, $data);
43
44
        if($res && $m_data->work_completed === "1"){
45
            // Удаляем данные из временной таблицы, они уже перемещены в постоянную.
46
            $m_data->delete();
47
        }
48
49
    }
50
51
    /**
52
     * @param CallDetailRecordsTmp $m_data
53
     * @param                      $data
54
     */
55
    private static function sendUserEventData(CallDetailRecordsTmp $m_data, $data): void{
56
        /**
57
         * Отправка UserEvent
58
         */
59
        $insert_data = $m_data->toArray();
60
        if ($insert_data['work_completed'] === "1") {
61
            $insert_data['action'] = "hangup_update_cdr";
62
            $insert_data['GLOBAL_STATUS'] = $data['GLOBAL_STATUS'] ?? $data['disposition'];
63
            unset(
64
                $insert_data['src_chan'],
65
                $insert_data['dst_chan'],
66
                $insert_data['work_completed'],
67
                $insert_data['did'],
68
                $insert_data['id'],
69
                $insert_data['from_account'],
70
                $insert_data['to_account'],
71
                $insert_data['appname'],
72
                $insert_data['is_app'],
73
                $insert_data['transfer']
74
            );
75
            $am = Util::getAstManager('off');
76
            $am->UserEvent('CdrConnector', ['AgiData' => base64_encode(json_encode($insert_data))]);
77
        }
78
    }
79
}