Passed
Push — develop ( b86a3f...c69fdf )
by Портнов
04:48 queued 13s
created

ActionCelAnswer::execute()   B

Complexity

Conditions 9
Paths 8

Size

Total Lines 50
Code Lines 38

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 38
c 1
b 0
f 0
dl 0
loc 50
rs 7.7564
cc 9
nc 8
nop 2
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
use MikoPBX\Core\Workers\WorkerCallEvents;
10
11
class ActionCelAnswer {
12
    public static function execute(WorkerCallEvents $worker, $data):void
13
    {
14
        $channel = $data['Channel']??'';
15
        if(empty($channel) || stripos($channel, 'local') === 0 || $worker->existsActiveChan($channel)){
16
            return;
17
        }
18
        $worker->addActiveChan($channel);
19
        usleep(100000);
20
        $linkedId = Util::getAstManager('off')->GetVar($channel, 'CHANNEL(linkedid)','',false);
21
        if($linkedId === $data['LinkedID']){
22
            return;
23
        }
24
        // Это возврат вызова после консультативной переадресации.
25
        $filter         = [
26
            'linkedid=:linkedid: AND a_transfer = "1"',
27
            'bind' => [
28
                'linkedid' => $linkedId,
29
            ],
30
        ];
31
        /** @var CallDetailRecordsTmp $m_data */
32
        /** @var CallDetailRecordsTmp $row */
33
        $m_data = CallDetailRecordsTmp::find($filter);
34
        foreach ($m_data as $row){
35
            $row->a_transfer = '0';
36
            $row->save();
37
            if($worker->existsActiveChan($row->src_chan)){
38
                $chan   = $row->src_chan;
39
                $number = $row->src_num;
40
            }elseif ($worker->existsActiveChan($row->dst_chan)){
41
                $chan = $row->dst_chan;
42
                $number = $row->dst_num;
43
            }else{
44
                continue;
45
            }
46
            $insert_data['action']        = "ret_after_trasfer";
47
            $insert_data['start']         = date('Y-m-d H:i:s.v', str_replace('mikopbx-', '', $data['LinkedID']));
48
            $insert_data['answer']        = $data['EventTime'];
49
            $insert_data['src_chan']      = $chan;
50
            $insert_data['src_num']       = $number;
51
            $insert_data['dst_chan']      = $channel;
52
            $insert_data['dst_num']       = $data['CallerIDnum'];
53
            $insert_data['linkedid']      = $linkedId;
54
            $insert_data['UNIQUEID']      = $data['UniqueID']."_".Util::generateRandomString();
55
            $insert_data['did']           = $row->did;
56
            $insert_data['transfer']      = '0';
57
58
            if($worker->enableMonitor($insert_data['src_num']??'', $insert_data['dst_num']??'')){
59
                $insert_data['recordingfile'] = $worker->MixMonitor($insert_data['dst_chan'], $insert_data['UNIQUEID'], null, null, 'ret_after_trasfer');
60
            }
61
            InsertDataToDB::execute($insert_data);
62
        }
63
    }
64
}