Completed
Push — master ( 7e6a93...d4c9ca )
by dotzero
05:07
created

Contact   A

Complexity

Total Complexity 21

Size/Duplication

Total Lines 208
Duplicated Lines 0 %

Coupling/Cohesion

Components 2
Dependencies 2

Test Coverage

Coverage 98.46%

Importance

Changes 2
Bugs 0 Features 0
Metric Value
wmc 21
c 2
b 0
f 0
lcom 2
cbo 2
dl 0
loc 208
ccs 64
cts 65
cp 0.9846
rs 10

9 Methods

Rating   Name   Duplication   Size   Complexity  
A setDateCreate() 0 6 1
A setLastModified() 0 6 1
A setLinkedLeadsId() 0 10 2
A setTags() 0 10 2
A setNotes() 0 18 4
A apiList() 0 6 2
B apiAdd() 0 28 5
A apiUpdate() 0 20 2
A apiLinks() 0 6 2
1
<?php
2
3
namespace AmoCRM\Models;
4
5
/**
6
 * Class Contact
7
 *
8
 * Класс модель для работы с Контактами
9
 *
10
 * @package AmoCRM\Models
11
 * @author dotzero <[email protected]>
12
 * @link http://www.dotzero.ru/
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 Contact extends AbstractModel
19
{
20
    /**
21
     * @var array Список доступный полей для модели (исключая кастомные поля)
22
     */
23
    protected $fields = [
24
        'name',
25
        'request_id',
26
        'date_create',
27
        'last_modified',
28
        'responsible_user_id',
29
        'linked_leads_id',
30
        'company_name',
31
        'tags',
32
        'notes',
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
     * @param array|Note $value Примечание или массив примечаний
100
     * @return $this
101
     */
102 1
    public function setNotes($value)
103
    {
104 1
        $this->values['notes'] = [];
105
106 1
        if ($value instanceof Note) {
107 1
            $value = [$value];
108 1
        }
109
110 1
        foreach ($value as $note) {
111 1
            if ($note instanceof Note) {
112 1
                $note = $note->getValues();
113 1
            }
114
115 1
            $this->values['notes'][] = $note;
116 1
        }
117
118 1
        return $this;
119
    }
120
121
    /**
122
     * Список контактов
123
     *
124
     * Метод для получения списка контактов с возможностью фильтрации и постраничной выборки.
125
     * Ограничение по возвращаемым на одной странице (offset) данным - 500 контактов.
126
     *
127
     * @link https://developers.amocrm.ru/rest_api/contacts_list.php
128
     * @param array $parameters Массив параметров к amoCRM API
129
     * @param null|string $modified Дополнительная фильтрация по (изменено с)
130
     * @return array Ответ amoCRM API
131
     */
132 1
    public function apiList($parameters, $modified = null)
133
    {
134 1
        $response = $this->getRequest('/private/api/v2/json/contacts/list', $parameters, $modified);
135
136 1
        return isset($response['contacts']) ? $response['contacts'] : [];
137
    }
138
139
    /**
140
     * Добавление контактов
141
     *
142
     * Метод позволяет добавлять контакты по одному или пакетно
143
     *
144
     * @link https://developers.amocrm.ru/rest_api/contacts_set.php
145
     * @param array $contacts Массив контактов для пакетного добавления
146
     * @return int|array Уникальный идентификатор контакта или массив при пакетном добавлении
147
     */
148 1
    public function apiAdd($contacts = [])
149
    {
150 1
        if (empty($contacts)) {
151 1
            $contacts = [$this];
152 1
        }
153
154
        $parameters = [
155
            'contacts' => [
156 1
                'add' => [],
157 1
            ],
158 1
        ];
159
160 1
        foreach ($contacts AS $contact) {
161 1
            $parameters['contacts']['add'][] = $contact->getValues();
162 1
        }
163
164 1
        $response = $this->postRequest('/private/api/v2/json/contacts/set', $parameters);
165
166 1
        if (isset($response['contacts']['add'])) {
167 1
            $result = array_map(function ($item) {
168 1
                return $item['id'];
169 1
            }, $response['contacts']['add']);
170 1
        } else {
171
            return [];
172
        }
173
174 1
        return count($contacts) == 1 ? array_shift($result) : $result;
175
    }
176
177
    /**
178
     * Обновление контактов
179
     *
180
     * Метод позволяет обновлять данные по уже существующим контактам
181
     *
182
     * @link https://developers.amocrm.ru/rest_api/contacts_set.php
183
     * @param int $id Уникальный идентификатор контакта
184
     * @param string $modified Дата последнего изменения данной сущности
185
     * @return bool Флаг успешности выполнения запроса
186
     * @throws \AmoCRM\Exception
187
     */
188 1
    public function apiUpdate($id, $modified = 'now')
189
    {
190 1
        $this->checkId($id);
191
192
        $parameters = [
193
            'contacts' => [
194 1
                'update' => [],
195 1
            ],
196 1
        ];
197
198 1
        $contact = $this->getValues();
199 1
        $contact['id'] = $id;
200 1
        $contact['last_modified'] = strtotime($modified);
201
202 1
        $parameters['contacts']['update'][] = $contact;
203
204 1
        $response = $this->postRequest('/private/api/v2/json/contacts/set', $parameters);
205
206 1
        return isset($response['contacts']) ? true : false;
207
    }
208
209
    /**
210
     * Связи между сделками и контактами
211
     *
212
     * Метод для получения списка связей между сделками и контактами
213
     *
214
     * @link https://developers.amocrm.ru/rest_api/contacts_links.php
215
     * @param array $parameters Массив параметров к amoCRM API
216
     * @param null|string $modified Дополнительная фильтрация по (изменено с)
217
     * @return array Ответ amoCRM API
218
     */
219 1
    public function apiLinks($parameters, $modified = null)
220
    {
221 1
        $response = $this->getRequest('/private/api/v2/json/contacts/links', $parameters, $modified);
222
223 1
        return isset($response['links']) ? $response['links'] : [];
224
    }
225
}
226