Completed
Pull Request — master (#72)
by
unknown
04:20
created

Catalog   A

Complexity

Total Complexity 14

Size/Duplication

Total Lines 138
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 1

Test Coverage

Coverage 88%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 14
c 1
b 0
f 0
lcom 1
cbo 1
dl 0
loc 138
ccs 44
cts 50
cp 0.88
rs 10

4 Methods

Rating   Name   Duplication   Size   Complexity  
A apiList() 0 12 3
C apiAdd() 0 33 7
A apiUpdate() 0 23 2
A apiDelete() 0 18 2
1
<?php
2
3
namespace AmoCRM\Models;
4
5
/**
6
 * Class Catalog
7
 *
8
 * Класс модель для работы с Каталогами
9
 *
10
 * @package AmoCRM\Models
11
 * @author [email protected]
12
 * @author dotzero <[email protected]>
13
 * @link https://github.com/dotzero/amocrm-php
14
 *
15
 * For the full copyright and license information, please view the LICENSE
16
 * file that was distributed with this source code.
17
 */
18
class Catalog extends AbstractModel
19
{
20
    /**
21
     * @var array Список доступный полей для модели (исключая кастомные поля)
22
     */
23
    protected $fields = [
24
        'name',
25
        'request_id',
26
    ];
27
28
    /**
29
     * Список каталогов
30
     *
31
     * Метод для получения списка каталогов аккаунта.
32
     *
33
     * @link https://developers.amocrm.ru/rest_api/catalogs/list.php
34
     * @param null|int $id Выбрать элемент с заданным ID
35
     * @return array Ответ amoCRM API
36
     */
37 1
    public function apiList($id = null)
38
    {
39 1
        $parameters = [];
40
41 1
        if ($id !== null) {
42 1
            $parameters['id'] = $id;
43 1
        }
44
45 1
        $response = $this->getRequest('/private/api/v2/json/catalogs/list', $parameters);
46
47 1
        return isset($response['catalogs']) ? $response['catalogs'] : [];
48
    }
49
50
    /**
51
     * Добавление каталогов
52
     *
53
     * Метод позволяет добавлять каталоги по одному или пакетно
54
     *
55
     * @link https://developers.amocrm.ru/rest_api/catalogs/set.php
56
     * @param array $catalogs Массив каталогов для пакетного добавления
57
     * @return int|array Уникальный идентификатор каталога или массив при пакетном добавлении
58
     */
59 1
    public function apiAdd($catalogs = [])
60
    {
61 1
        if (empty($catalogs)) {
62 1
            $catalogs = [$this];
63 1
        }
64
65
        $parameters = [
66
            'catalogs' => [
67 1
                'add' => [],
68 1
            ],
69 1
        ];
70
71 1
        foreach ($catalogs AS $catalog) {
72 1
            $parameters['catalogs']['add'][] = $catalog->getValues();
73 1
        }
74
75 1
        $response = $this->postRequest('/private/api/v2/json/catalogs/set', $parameters);
76
77 1
        if (isset($response['catalogs']['add']['catalogs'])) {
78 1
            $result = array_map(function ($item) {
79 1
				if(!empty($item['id']))
80 1
					return $item['id'];
81
				elseif(!empty($item['error']))
82
					throw new Exception($item['error'],filter_var(mb_strstr($item['error'],".",true), FILTER_SANITIZE_NUMBER_INT));
83
				else
84
					return [];
85 1
            }, $response['catalogs']['add']['catalogs']);
86 1
        } else {
87
            return [];
88
        }
89
90 1
        return count($catalogs) == 1 ? array_shift($result) : $result;
91
    }
92
93
    /**
94
     * Обновление каталогов
95
     *
96
     * Метод позволяет обновлять данные по уже существующим каталогам
97
     *
98
     * @link https://developers.amocrm.ru/rest_api/catalogs/set.php
99
     * @param int $id Уникальный идентификатор каталога
100
     * @return bool Флаг успешности выполнения запроса
101
     * @throws \AmoCRM\Exception
102
     */
103 1
    public function apiUpdate($id)
104
    {
105 1
        $this->checkId($id);
106
107
        $parameters = [
108
            'catalogs' => [
109 1
                'update' => [],
110 1
            ],
111 1
        ];
112
113 1
        $catalog = $this->getValues();
114 1
        $catalog['id'] = $id;
115
116 1
        $parameters['catalogs']['update'][] = $catalog;
117
118 1
        $response = $this->postRequest('/private/api/v2/json/catalogs/set', $parameters);
119
120 1
        if (!isset($response['catalogs']['update']['errors'])) {
121
            return false;
122
        }
123
124 1
        return empty($response['catalogs']['update']['errors']);
125
    }
126
127
    /**
128
     * Удаление каталогов
129
     *
130
     * Метод позволяет удалять данные по уже существующим каталогам
131
     *
132
     * @link https://developers.amocrm.ru/rest_api/catalogs/set.php
133
     * @param int $id Уникальный идентификатор каталога
134
     * @return bool Флаг успешности выполнения запроса
135
     * @throws \AmoCRM\Exception
136
     */
137 1
    public function apiDelete($id)
138
    {
139 1
        $this->checkId($id);
140
141
        $parameters = [
142
            'catalogs' => [
143 1
                'delete' => [$id],
144 1
            ],
145 1
        ];
146
147 1
        $response = $this->postRequest('/private/api/v2/json/catalogs/set', $parameters);
148
149 1
        if (!isset($response['catalogs']['delete']['errors'])) {
150
            return false;
151
        }
152
153 1
        return empty($response['catalogs']['delete']['errors']);
154
    }
155
}
156