Passed
Pull Request — master (#23)
by Nikolay
09:42 queued 03:08
created

CdrDb::LogEvent()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 2
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 2
nc 2
nop 1
1
<?php
2
/*
3
 * Copyright © MIKO LLC - All Rights Reserved
4
 * Unauthorized copying of this file, via any medium is strictly prohibited
5
 * Proprietary and confidential
6
 * Written by Alexey Portnov, 9 2020
7
 */
8
9
namespace MikoPBX\Core\Asterisk;
10
11
use MikoPBX\Common\Models\CallDetailRecordsTmp;
12
use MikoPBX\Core\System\{Storage, Util};
13
use MikoPBX\Common\Models\CallEventsLogs;
14
use Phalcon\Di;
15
16
/**
17
 * Вспомогательные методы.
18
 */
19
class CdrDb
20
{
21
    /**
22
     * Возвращает путь к базе данных истории звонков.
23
     * @return string
24
     */
25
    public static function getPathToDB(): string
26
    {
27
        $di = Di::getDefault();
28
        if ($di === null) {
29
            return '';
30
        }
31
        return $di->getShared('config')->path('cdrDatabase.dbfile');
32
    }
33
34
    /**
35
     * Проверка базы данных на наличие "Битых" строк
36
     */
37
    public static function checkDb(): void
38
    {
39
        $am          = Util::getAstManager('off');
40
        $channels_id = $am->GetChannels(true);
41
42
        /** @var CallDetailRecordsTmp $data_cdr */
43
        /** @var CallDetailRecordsTmp $row_cdr */
44
        $data_cdr = CallDetailRecordsTmp::find();
45
        foreach ($data_cdr as $row_cdr) {
46
            if (array_key_exists($row_cdr->linkedid, $channels_id)) {
47
                continue;
48
            }
49
            $date = CallEventsLogs::maximum(
50
                ['linkedid = "'.$row_cdr->linkedid.'"', 'column' => 'eventtime']
51
            );
52
            if ( ! $row_cdr->endtime) {
53
                if ($date) {
54
                    $row_cdr->endtime = $date;
55
                } elseif ($row_cdr->answer) {
56
                    $row_cdr->endtime = $row_cdr->answer;
57
                } else {
58
                    $row_cdr->endtime = $row_cdr->start;
59
                }
60
                $row_cdr->save();
61
            }
62
        }
63
    }
64
65
    /**
66
     * Формирует путь к файлу записи без расширения.
67
     *
68
     * @param $file_name
69
     *
70
     * @return string
71
     */
72
    public static function MeetMeSetRecFilename($file_name): string
73
    {
74
        $monitor_dir = Storage::getMonitorDir();
75
        $sub_dir     = date("Y/m/d/H/");
76
77
        return "{$monitor_dir}/{$sub_dir}{$file_name}";
78
    }
79
}