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

CatalogElement::apiAdd()   C

Complexity

Conditions 7
Paths 12

Size

Total Lines 33
Code Lines 21

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 17
CRAP Score 7.3387

Importance

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