Completed
Push — master ( dc5034...dd736e )
by dotzero
02:29
created

Contact::apiAdd()   B

Complexity

Conditions 5
Paths 12

Size

Total Lines 28
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 17
CRAP Score 5.0042

Importance

Changes 2
Bugs 0 Features 0
Metric Value
c 2
b 0
f 0
dl 0
loc 28
ccs 17
cts 18
cp 0.9444
rs 8.439
cc 5
eloc 16
nc 12
nop 1
crap 5.0042
1
<?php
2
3
namespace AmoCRM\Models;
4
5
/**
6
 * Class Contact
7
 *
8
 * Класс модель для работы с Контактами
9
 *
10
 * @package AmoCRM\Models
11
 * @version 0.1.0
12
 * @author dotzero <[email protected]>
13
 * @link http://www.dotzero.ru/
14
 * @link https://github.com/dotzero/amocrm-php
15
 *
16
 * For the full copyright and license information, please view the LICENSE
17
 * file that was distributed with this source code.
18
 */
19
class Contact extends Base
20
{
21
    /**
22
     * @var array Список доступный полей для модели (исключая кастомные поля)
23
     */
24
    protected $fields = [
25
        'name',
26
        'request_id',
27
        'date_create',
28
        'last_modified',
29
        'responsible_user_id',
30
        'linked_leads_id',
31
        'company_name',
32
        'tags',
33
    ];
34
35
    /**
36
     * Сеттер для даты создания контакта
37
     *
38
     * @param string $date Дата в произвольном формате
39
     * @return $this
40
     */
41 1
    public function setDateCreate($date)
42
    {
43 1
        $this->values['date_create'] = strtotime($date);
44
45 1
        return $this;
46
    }
47
48
    /**
49
     * Сеттер для даты последнего изменения контакта
50
     *
51
     * @param string $date Дата в произвольном формате
52
     * @return $this
53
     */
54 1
    public function setLastModified($date)
55
    {
56 1
        $this->values['last_modified'] = strtotime($date);
57
58 1
        return $this;
59
    }
60
61
    /**
62
     * Сеттер для списка связанных сделок контакта
63
     *
64
     * @param int|array $value Номер связанной сделки или список сделок
65
     * @return $this
66
     */
67 2
    public function setLinkedLeadsId($value)
68
    {
69 2
        if (!is_array($value)) {
70 1
            $value = [$value];
71 1
        }
72
73 2
        $this->values['linked_leads_id'] = $value;
74
75 2
        return $this;
76
    }
77
78
    /**
79
     * Сеттер для списка тегов контакта
80
     *
81
     * @param int|array $value Название тегов через запятую или массив тегов
82
     * @return $this
83
     */
84 2
    public function setTags($value)
85
    {
86 2
        if (!is_array($value)) {
87 1
            $value = [$value];
88 1
        }
89
90 2
        $this->values['tags'] = implode(',', $value);
91
92 2
        return $this;
93
    }
94
95
    /**
96
     * Список контактов
97
     *
98
     * Метод для получения списка контактов с возможностью фильтрации и постраничной выборки.
99
     * Ограничение по возвращаемым на одной странице (offset) данным - 500 контактов.
100
     *
101
     * @link https://developers.amocrm.ru/rest_api/contacts_list.php
102
     * @param array $parameters Массив параметров к amoCRM API
103
     * @param null|string $modified Дополнительная фильтрация по (изменено с)
104
     * @return array Ответ amoCRM API
105
     */
106 1
    public function apiList($parameters, $modified = null)
107
    {
108 1
        $response = $this->getRequest('/private/api/v2/json/contacts/list', $parameters, $modified);
109
110 1
        return isset($response['contacts']) ? $response['contacts'] : [];
111
    }
112
113
    /**
114
     * Добавление контактов
115
     *
116
     * Метод позволяет добавлять контакты по одному или пакетно
117
     *
118
     * @link https://developers.amocrm.ru/rest_api/contacts_set.php
119
     * @param array $contacts Массив контактов для пакетного добавления
120
     * @return int|array Уникальный идентификатор контакта или массив при пакетном добавлении
121
     */
122 1
    public function apiAdd($contacts = [])
123
    {
124 1
        if (empty($contacts)) {
125 1
            $contacts = [$this];
126 1
        }
127
128
        $parameters = [
129
            'contacts' => [
130 1
                'add' => [],
131 1
            ],
132 1
        ];
133
134 1
        foreach ($contacts AS $contact) {
135 1
            $parameters['contacts']['add'][] = $contact->getValues();
136 1
        }
137
138 1
        $response = $this->postRequest('/private/api/v2/json/contacts/set', $parameters);
139
140 1
        if (isset($response['contacts']['add'])) {
141 1
            $result = array_map(function ($item) {
142 1
                return $item['id'];
143 1
            }, $response['contacts']['add']);
144 1
        } else {
145
            return [];
146
        }
147
148 1
        return count($contacts) == 1 ? array_shift($result) : $result;
149
    }
150
151
    /**
152
     * Обновление контактов
153
     *
154
     * Метод позволяет обновлять данные по уже существующим контактам
155
     *
156
     * @link https://developers.amocrm.ru/rest_api/contacts_set.php
157
     * @param int $id Уникальный идентификатор контакта
158
     * @param string $modified Дата последнего изменения данной сущности
159
     * @return bool Флаг успешности выполнения запроса
160
     * @throws \AmoCRM\Exception
161
     */
162 1
    public function apiUpdate($id, $modified = 'now')
163
    {
164 1
        $this->checkId($id);
165
166
        $parameters = [
167
            'contacts' => [
168 1
                'update' => [],
169 1
            ],
170 1
        ];
171
172 1
        $contact = $this->getValues();
173 1
        $contact['id'] = $id;
174 1
        $contact['last_modified'] = strtotime($modified);
175
176 1
        $parameters['contacts']['update'][] = $contact;
177
178 1
        $response = $this->postRequest('/private/api/v2/json/contacts/set', $parameters);
179
180 1
        return isset($response['contacts']) ? true : false;
181
    }
182
183
    /**
184
     * Связи между сделками и контактами
185
     *
186
     * Метод для получения списка связей между сделками и контактами
187
     *
188
     * @link https://developers.amocrm.ru/rest_api/contacts_links.php
189
     * @param array $parameters Массив параметров к amoCRM API
190
     * @param null|string $modified Дополнительная фильтрация по (изменено с)
191
     * @return array Ответ amoCRM API
192
     */
193 1
    public function apiLinks($parameters, $modified = null)
194
    {
195 1
        $response = $this->getRequest('/private/api/v2/json/contacts/links', $parameters, $modified);
196
197 1
        return isset($response['links']) ? $response['links'] : [];
198
    }
199
}
200