Skip to content

Commit

Permalink
Add missing methods and test for CatalogElement model
Browse files Browse the repository at this point in the history
  • Loading branch information
dotzero committed Mar 4, 2017
1 parent 2230fc2 commit 29a6993
Show file tree
Hide file tree
Showing 7 changed files with 358 additions and 40 deletions.
9 changes: 8 additions & 1 deletion README.md
Expand Up @@ -177,13 +177,20 @@ try {
* `apiLink($links = [])` - Метод позволяет устанавливать связи между сущностями
* `apiUnlink($links = [])` - Метод позволяет удалять связи между сущностями

- Модель `catalog` для работы с Виджетами
- Модель `catalog` для работы с Каталогами

* `apiList($id = null)` - Метод для получения списка каталогов аккаунта
* `apiAdd($catalogs = [])` - Метод позволяет добавлять каталоги по одному или пакетно
* `apiUpdate($id)` - Метод позволяет обновлять данные по уже существующим каталогам
* `apiDelete($id)` - Метод позволяет удалять данные по уже существующим каталогам

- Модель `catalog_element` для работы с Элементами каталога

* `apiList($parameters = [])` - Метод для получения элементов каталога аккаунта
* `apiAdd($elements = [])` - Метод позволяет добавлять элементы каталога по одному или пакетно
* `apiUpdate($id)` - Метод позволяет обновлять данные по уже существующим элементам каталога
* `apiDelete($id)` - Метод позволяет удалять данные по уже существующим элементам каталога

- Модель `widgets` для работы с Виджетами

* `apiList($parameters = [])` - Метод для получения списка доступных для установки виджетов
Expand Down
51 changes: 51 additions & 0 deletions examples/catalog_element.php
@@ -0,0 +1,51 @@
<?php

require_once __DIR__ . '/../vendor/autoload.php';

try {
$amo = new \AmoCRM\Client(getenv('DOMAIN'), getenv('LOGIN'), getenv('HASH'));

// Список элементов каталога
// Метод для получения элементов каталога аккаунта.

print_r($amo->catalog_element->apiList([
'catalog_id' => 4179,
'term' => 'Product'
]));

// Добавление элементов каталога
// Метод позволяет добавлять элементы каталога по одному или пакетно

$element = $amo->catalog_element;
$element->debug(true); // Режим отладки
$element['catalog_id'] = 4179;
$element['name'] = 'Product';
$element->addCustomField(212937, 1);

$id = $element->apiAdd();
print_r($id);

// Или массовое добавление:
$element1 = clone $element;
$element1['name'] = 'Product 1';
$element2 = clone $element;
$element2['name'] = 'Product 2';

$ids = $amo->catalog_element->apiAdd([$element1, $element2]);
print_r($ids);

// Обновление элементов каталога
$element = $amo->catalog_element;
$element->debug(true); // Режим отладки
$element['name'] = 'New product';
$element['catalog_id'] = 4179; // без catalog_id amocrm не обновит
$element->addCustomField(212937, 5000);

$element->apiUpdate((int)$id);

// Удаление каталогов
$amo->catalog_element->apiDelete((int)$id);

} catch (\AmoCRM\Exception $e) {
printf('Error (%d): %s' . PHP_EOL, $e->getCode(), $e->getMessage());
}
1 change: 1 addition & 0 deletions src/Client.php
Expand Up @@ -27,6 +27,7 @@
* @property \AmoCRM\Models\Unsorted $unsorted
* @property \AmoCRM\Models\Links $links
* @property \AmoCRM\Models\Catalog $catalog
* @property \AmoCRM\Models\CatalogElement $catalog_element
* @property \AmoCRM\Models\Widgets $widgets
* @property \AmoCRM\Models\WebHooks $webhooks
*
Expand Down
146 changes: 146 additions & 0 deletions src/Models/CatalogElement.php
@@ -0,0 +1,146 @@
<?php

namespace AmoCRM\Models;

/**
* Class CatalogElement
*
* Класс модель для работы с Элементами каталога
*
* @package AmoCRM\Models
* @author mb@baso-it.ru
* @author dotzero <mail@dotzero.ru>
* @link https://github.com/dotzero/amocrm-php
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
class CatalogElement extends AbstractModel
{
/**
* @var array Список доступный полей для модели (исключая кастомные поля)
*/
protected $fields = [
'catalog_id',
'name',
'request_id',
];

/**
* Список элементов каталога
*
* Метод для получения элементов каталога аккаунта.
*
* @link https://developers.amocrm.ru/rest_api/catalog_elements/list.php
* @param array $parameters Массив параметров к amoCRM API
* @return array Ответ amoCRM API
* @throws \AmoCRM\Exception
*/
public function apiList($parameters = [])
{
$response = $this->getRequest('/private/api/v2/json/catalog_elements/list', $parameters);

return isset($response['catalog_elements']) ? $response['catalog_elements'] : [];
}

/**
* Добавление элементов каталога
*
* Метод позволяет добавлять элементы каталога по одному или пакетно
*
* @link https://developers.amocrm.ru/rest_api/catalog_elements/set.php
* @param array $elements Массив каталогов для пакетного добавления
* @return int|array Уникальный идентификатор каталога или массив при пакетном добавлении
*/
public function apiAdd($elements = [])
{
if (empty($elements)) {
$elements = [$this];
}

$parameters = [
'catalog_elements' => [
'add' => [],
],
];

foreach ($elements AS $element) {
$parameters['catalog_elements']['add'][] = $element->getValues();
}

$response = $this->postRequest('/private/api/v2/json/catalog_elements/set', $parameters);

if (isset($response['catalog_elements']['add']['catalog_elements'])) {
$result = array_map(function ($item) {
return $item['id'];
}, $response['catalog_elements']['add']['catalog_elements']);
} else {
return [];
}

return count($elements) == 1 ? array_shift($result) : $result;
}

/**
* Обновление элементов каталога
*
* Метод позволяет обновлять данные по уже существующим элементам каталога
*
* @link https://developers.amocrm.ru/rest_api/catalog_elements/set.php
* @param int $id Уникальный идентификатор элемента элемента каталога
* @return bool Флаг успешности выполнения запроса
* @throws \AmoCRM\Exception
*/
public function apiUpdate($id)
{
$this->checkId($id);

$parameters = [
'catalog_elements' => [
'update' => [],
],
];

$catalog = $this->getValues();
$catalog['id'] = $id;

$parameters['catalog_elements']['update'][] = $catalog;

$response = $this->postRequest('/private/api/v2/json/catalog_elements/set', $parameters);

if (!isset($response['catalog_elements']['update']['errors'])) {
return false;
}

return empty($response['catalog_elements']['update']['errors']);
}

/**
* Удаление элементов каталога
*
* Метод позволяет удалять данные по уже существующим элементам каталога
*
* @link https://developers.amocrm.ru/rest_api/catalog_elements/set.php
* @param int $id Уникальный идентификатор элемента элемента каталога
* @return bool Флаг успешности выполнения запроса
* @throws \AmoCRM\Exception
*/
public function apiDelete($id)
{
$this->checkId($id);

$parameters = [
'catalog_elements' => [
'delete' => [$id],
],
];

$response = $this->postRequest('/private/api/v2/json/catalog_elements/set', $parameters);

if (!isset($response['catalog_elements']['delete']['errors'])) {
return false;
}

return empty($response['catalog_elements']['delete']['errors']);
}
}
39 changes: 0 additions & 39 deletions src/Models/Element.php

This file was deleted.

1 change: 1 addition & 0 deletions tests/ClientTest.php
Expand Up @@ -39,6 +39,7 @@ public function modelsProvider()
// model name, expected
['account', 'AmoCRM\Models\Account'],
['catalog', 'AmoCRM\Models\Catalog'],
['catalog_element', 'AmoCRM\Models\CatalogElement'],
['company', 'AmoCRM\Models\Company'],
['contact', 'AmoCRM\Models\Contact'],
['customer', 'AmoCRM\Models\Customer'],
Expand Down

0 comments on commit 29a6993

Please sign in to comment.