Skip to content

Commit

Permalink
Merge pull request #519 from Ilyumzhinov/feature/INT-2524
Browse files Browse the repository at this point in the history
Добавил CustomFieldsFilter для фильтрации полей по типам.
  • Loading branch information
bessudnov committed Jul 26, 2023
2 parents d68301f + b566d5b commit 8c70d65
Show file tree
Hide file tree
Showing 3 changed files with 71 additions and 2 deletions.
5 changes: 3 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,12 @@
- [Подход к работе с библиотекой](#подход-к-работе-с-библиотекой)
- [Поддерживаемые методы и сервисы](#поддерживаемые-методы-и-сервисы)
- [Обработка ошибок](#обработка-ошибок)
- [Фильтры](#Фильтры)
- [Фильтры](#фильтры)
- [Работа с Custom Fields сущностей](#работа-с-дополнительными-полями-сущностей)
- [Работа с тегами сущностей](#работа-с-тегами-сущностей)
- [Особенности работы с источниками](#особенности-работы-с-источниками)
- [Константы](#константы)
- [Работа в случае смены субдомена аккаунта](#Работа-в-случае-смены-субдомена-аккаунта)
- [Работа в случае смены субдомена аккаунта](#работа-в-случае-смены-субдомена-аккаунта)
- [Одноразовые токены интеграций, расшифровка](#одноразовые-токены-интеграций-расшифровка)
- [Работа с валютами](#работа-с-валютами)
- [Примеры](#примеры)
Expand Down Expand Up @@ -539,6 +539,7 @@ $leadsService = $apiClient->leads();
| ```companies``` | ```\AmoCRM\Filters\CompaniesFilter``` | Доступен только на аккаунтах, которые подключены к тестированию функционала фильтрации по API ||
| ```contacts``` | ```\AmoCRM\Filters\ContactsFilter``` | Доступен только на аккаунтах, которые подключены к тестированию функционала фильтрации по API ||
| ```customers``` | ```\AmoCRM\Filters\CustomersFilter``` | Доступен только на аккаунтах, которые подключены к тестированию функционала фильтрации по API ||
| ```customFields``` | ```\AmoCRM\Filters\CustomFieldsFilter``` | Фильтр для метода получения дополнительных полей `\AmoCRM\EntitiesServices\CustomFields::get` ||
| ```leads``` | ```\AmoCRM\Filters\LeadsFilter``` | Доступен только на аккаунтах, которые подключены к тестированию функционала фильтрации по API ||
| ```events``` | ```\AmoCRM\Filters\EventsFilter``` | Фильтр для списка событий ||
| ```leads```, ```contacts```, ```customers```, ```companies``` | ```\AmoCRM\Filters\LinksFilter``` | Фильтр для получения связей для метода `\AmoCRM\EntitiesServices\HasLinkMethodInterface::getLinks` ||
Expand Down
11 changes: 11 additions & 0 deletions examples/custom_fields_actions.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
use AmoCRM\Helpers\EntityTypesInterface;
use AmoCRM\Collections\CustomFields\CustomFieldsCollection;
use AmoCRM\Exceptions\AmoCRMApiException;
use AmoCRM\Filters\CustomFieldsFilter;
use AmoCRM\Models\CustomFields\CheckboxCustomFieldModel;
use AmoCRM\Models\CustomFields\CustomFieldModel;
use AmoCRM\Models\CustomFields\EnumModel;
Expand Down Expand Up @@ -47,6 +48,16 @@ function (AccessTokenInterface $accessToken, string $baseDomain) {
die;
}

//Получим поля по типу
try {
$filter = (new CustomFieldsFilter())
->setTypes([CustomFieldModel::TYPE_TEXT, CustomFieldModel::TYPE_URL]); // или ['text', 'url']
$result = $customFieldsService->get($filter);
} catch (AmoCRMApiException $e) {
printError($e);
die;
}

//Создадим модель поля и освежим его
$customFieldModel = new CustomFieldModel();
$customFieldModel->setId(269303);
Expand Down
57 changes: 57 additions & 0 deletions src/AmoCRM/Filters/CustomFieldsFilter.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
<?php

namespace AmoCRM\Filters;

use AmoCRM\Filters\Interfaces\HasPagesInterface;
use AmoCRM\Filters\Traits\ArrayOrStringFilterTrait;
use AmoCRM\Filters\Traits\PagesFilterTrait;

/**
* Supports pagination and filtering custom_fields by types.
*/
class CustomFieldsFilter extends BaseEntityFilter implements HasPagesInterface
{
use PagesFilterTrait;
use ArrayOrStringFilterTrait;

/**
* @var null|string[] An array of custom_field types.
*/
private ?array $types = null;

/**
* @return string[]|null
*/
public function getTypes(): ?array
{
return $this->types;
}

/**
* Filters custom_fields by types.
*
* @param string[]|null $types Type are defined in `CustomFieldModel`.
*/
public function setTypes(?array $types): self
{
$this->types = $this->parseArrayOrStringFilter($types);

return $this;
}

/**
* @return array
*/
public function buildFilter(): array
{
$filter = [];

if (!empty($this->types)) {
$filter['filter']['type'] = $this->types;
}

$filter = $this->buildPagesFilter($filter);

return $filter;
}
}

0 comments on commit 8c70d65

Please sign in to comment.