Passed
Push — develop ( a4bdef...471b02 )
by Портнов
12:12 queued 14s
created

ActionInsertCdr::execute()   B

Complexity

Conditions 7
Paths 14

Size

Total Lines 28
Code Lines 17

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
eloc 17
c 2
b 0
f 0
dl 0
loc 28
rs 8.8333
cc 7
nc 14
nop 2
1
<?php
2
3
4
namespace MikoPBX\Core\Workers\Libs\WorkerCallEvents;
5
6
use MikoPBX\Common\Models\CallDetailRecords;
7
use MikoPBX\Core\System\Util;
8
use MikoPBX\Core\Workers\WorkerCallEvents;
9
10
class ActionInsertCdr {
11
    /**
12
     * Обработка события начала телефонного звонка.
13
     * @param $worker
14
     * @param $cdr
15
     */
16
    public static function execute(WorkerCallEvents $worker, $cdr):void
17
    {
18
        foreach ($cdr['rows'] as $data){
19
            if (empty($data['UNIQUEID'])) {
20
                Util::sysLogMsg(__FUNCTION__, 'UNIQUEID is empty ' . json_encode($data), LOG_DEBUG);
21
                return;
22
            }
23
            $m_data = CallDetailRecords::findFirst(
24
                [
25
                    "UNIQUEID=:id:",
26
                    'bind' => [
27
                        'id'       => $data['UNIQUEID'],
28
                    ],
29
                ]
30
            );
31
            if(!$m_data){
32
                /** @var CallDetailRecords $m_data */
33
                $m_data = new CallDetailRecords();
34
            }
35
            $f_list = $m_data->toArray();
36
            foreach ($data as $attribute => $value) {
37
                if ( ! array_key_exists($attribute, $f_list)) {
38
                    continue;
39
                }
40
                $m_data->writeAttribute($attribute, $value);
41
            }
42
            if (!$m_data->save()) {
43
                Util::sysLogMsg(__FUNCTION__, implode(' ', $m_data->getMessages()), LOG_ERR);
44
            }
45
        }
46
    }
47
}