Completed
Push — master ( 2230fc...29a699 )
by dotzero
02:02
created

CatalogElement::apiList()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 6
ccs 3
cts 3
cp 1
rs 9.4285
cc 2
eloc 3
nc 2
nop 1
crap 2
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 1
            $result = array_map(function ($item) {
75 1
                return $item['id'];
76 1
            }, $response['catalog_elements']['add']['catalog_elements']);
77 1
        } else {
78
            return [];
79
        }
80
81 1
        return count($elements) == 1 ? array_shift($result) : $result;
82
    }
83
84
    /**
85
     * Обновление элементов каталога
86
     *
87
     * Метод позволяет обновлять данные по уже существующим элементам каталога
88
     *
89
     * @link https://developers.amocrm.ru/rest_api/catalog_elements/set.php
90
     * @param int $id Уникальный идентификатор элемента элемента каталога
91
     * @return bool Флаг успешности выполнения запроса
92
     * @throws \AmoCRM\Exception
93
     */
94 1
    public function apiUpdate($id)
95
    {
96 1
        $this->checkId($id);
97
98
        $parameters = [
99
            'catalog_elements' => [
100 1
                'update' => [],
101 1
            ],
102 1
        ];
103
104 1
        $catalog = $this->getValues();
105 1
        $catalog['id'] = $id;
106
107 1
        $parameters['catalog_elements']['update'][] = $catalog;
108
109 1
        $response = $this->postRequest('/private/api/v2/json/catalog_elements/set', $parameters);
110
111 1
        if (!isset($response['catalog_elements']['update']['errors'])) {
112
            return false;
113
        }
114
115 1
        return empty($response['catalog_elements']['update']['errors']);
116
    }
117
118
    /**
119
     * Удаление элементов каталога
120
     *
121
     * Метод позволяет удалять данные по уже существующим элементам каталога
122
     *
123
     * @link https://developers.amocrm.ru/rest_api/catalog_elements/set.php
124
     * @param int $id Уникальный идентификатор элемента элемента каталога
125
     * @return bool Флаг успешности выполнения запроса
126
     * @throws \AmoCRM\Exception
127
     */
128 1
    public function apiDelete($id)
129
    {
130 1
        $this->checkId($id);
131
132
        $parameters = [
133
            'catalog_elements' => [
134 1
                'delete' => [$id],
135 1
            ],
136 1
        ];
137
138 1
        $response = $this->postRequest('/private/api/v2/json/catalog_elements/set', $parameters);
139
140 1
        if (!isset($response['catalog_elements']['delete']['errors'])) {
141
            return false;
142
        }
143
144 1
        return empty($response['catalog_elements']['delete']['errors']);
145
    }
146
}
147