Completed
Pull Request — master (#72)
by
unknown
02:19
created

CatalogElement::apiDelete()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 18

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 8
CRAP Score 2.0054

Importance

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