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

Account   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 95
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Test Coverage

Coverage 75.61%

Importance

Changes 0
Metric Value
wmc 9
lcom 1
cbo 2
dl 0
loc 95
ccs 31
cts 41
cp 0.7561
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A apiCurrent() 0 10 3
A getUserByLogin() 0 17 4
A getShorted() 0 36 2
1
<?php
2
3
namespace AmoCRM\Models;
4
5
use AmoCRM\Models\Cache;
6
7
/**
8
 * Class Account
9
 *
10
 * Класс модель для работы с Аккаунтом
11
 *
12
 * @package AmoCRM\Models
13
 * @author dotzero <[email protected]>
14
 * @link http://www.dotzero.ru/
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 Account extends AbstractModel
21
{
22
    /**
23
     * Данные по аккаунту
24
     *
25
     * Получение информации по аккаунту в котором произведена авторизация:
26
     * название, оплаченный период, пользователи аккаунта и их права,
27
     * справочники дополнительных полей контактов и сделок, справочник статусов сделок,
28
     * справочник типов событий, справочник типов задач и другие параметры аккаунта.
29
     *
30
     * @link https://developers.amocrm.ru/rest_api/accounts_current.php
31
     * @param bool $short Краткий формат, только основные поля
32
     * @param array $parameters Массив параметров к amoCRM API
33
     * @return array Ответ amoCRM API
34
     */
35 2
    public function apiCurrent($short = false, $parameters = [])
36
    {
37 2
        $result = (new Cache)->getCache('accounts_current');
38
        if(!$result){
39
            $result = $this->getRequest('/private/api/v2/json/accounts/current', $parameters);
40
            (new Cache)->setCache('accounts_current',$result);
41
        }
42
43
        return $short ? $this->getShorted($result['account']) : $result['account'];
44
    }
45
46
    /**
47
     * Возвращает сведения о пользователе по его логину.
48
     * Если не указывать логин, вернутся сведения о владельце API ключа.
49
     *
50
     * @param null|string $login Логин пользователя
51
     * @return mixed Данные о пользователе
52
     */
53 1
    public function getUserByLogin($login = null)
54
    {
55 1
        if ($login === null) {
56 1
            $login = $this->getParameters()->getAuth('login');
57 1
        }
58
59 1
        $login = strtolower($login);
60 1
        $result = $this->apiCurrent();
61
62
        foreach ($result['users'] as $user) {
63
            if (strtolower($user['login']) == $login) {
64
                return $user;
65
            }
66
        }
67
68
        return false;
69
    }
70
71
    /**
72
     * Урезание значения возвращаемого методом apiCurrent,
73
     * оставляет только основные поля такие как 'id', 'name', 'type_id', 'enums'
74
     *
75
     * @param array $account Ответ amoCRM API
76
     * @return mixed Краткий ответ amoCRM API
77
     */
78 1
    private function getShorted($account)
79
    {
80 1
        $keys = array_fill_keys(['id', 'name', 'login'], 1);
81
        $account['users'] = array_map(function($val) use ($keys) {
82 1
            return array_intersect_key($val, $keys);
83 1
        }, $account['users']);
84
85 1
        $keys = array_fill_keys(['id', 'name'], 1);
86
        $account['leads_statuses'] = array_map(function($val) use ($keys) {
87 1
            return array_intersect_key($val, $keys);
88 1
        }, $account['leads_statuses']);
89
90 1
        $keys = array_fill_keys(['id', 'name'], 1);
91
        $account['note_types'] = array_map(function($val) use ($keys) {
92 1
            return array_intersect_key($val, $keys);
93 1
        }, $account['note_types']);
94
95 1
        $keys = array_fill_keys(['id', 'name'], 1);
96
        $account['task_types'] = array_map(function($val) use ($keys) {
97 1
            return array_intersect_key($val, $keys);
98 1
        }, $account['task_types']);
99
100 1
        $keys = array_fill_keys(['id', 'name', 'type_id', 'enums'], 1);
101 1
        foreach ($account['custom_fields'] AS $type => $fields) {
102
            $account['custom_fields'][$type] = array_map(function($val) use ($keys) {
103 1
                return array_intersect_key($val, $keys);
104 1
            }, $fields);
105 1
        }
106
107 1
        $keys = array_fill_keys(['id', 'label', 'name'], 1);
108 1
        $account['pipelines'] = array_map(function($val) use ($keys) {
109 1
            return array_intersect_key($val, $keys);
110 1
        }, $account['pipelines']);
111
112 1
        return $account;
113
    }
114
}
115