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

Catalog::apiAdd()   B

Complexity

Conditions 7
Paths 12

Size

Total Lines 33

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 18
CRAP Score 7.2944

Importance

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