Completed
Pull Request — master (#61)
by Denis
01:45
created

Client   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 60
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 4

Test Coverage

Coverage 89.47%

Importance

Changes 2
Bugs 0 Features 0
Metric Value
wmc 5
c 2
b 0
f 0
lcom 0
cbo 4
dl 0
loc 60
ccs 17
cts 19
cp 0.8947
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 18 3
A __get() 0 13 2
1
<?php
2
3
namespace AmoCRM;
4
5
use AmoCRM\Models\ModelInterface;
6
use AmoCRM\Request\ParamsBag;
7
use AmoCRM\Helpers\Fields;
8
use AmoCRM\Helpers\Format;
9
10
/**
11
 * Class Client
12
 *
13
 * Основной класс для получения доступа к моделям amoCRM API
14
 *
15
 * @package AmoCRM
16
 * @author dotzero <[email protected]>
17
 * @link http://www.dotzero.ru/
18
 * @link https://github.com/dotzero/amocrm-php
19
 * @property \AmoCRM\Models\Account $account
20
 * @property \AmoCRM\Models\Call $call
21
 * @property \AmoCRM\Models\Catalog $catalog
22
 * @property \AmoCRM\Models\CatalogElement $catalog_element
23
 * @property \AmoCRM\Models\Company $company
24
 * @property \AmoCRM\Models\Contact $contact
25
 * @property \AmoCRM\Models\Customer $customer
26
 * @property \AmoCRM\Models\CustomersPeriods $customers_periods
27
 * @property \AmoCRM\Models\CustomField $custom_field
28
 * @property \AmoCRM\Models\Lead $lead
29
 * @property \AmoCRM\Models\Links $links
30
 * @property \AmoCRM\Models\Note $note
31
 * @property \AmoCRM\Models\Pipelines $pipelines
32
 * @property \AmoCRM\Models\Task $task
33
 * @property \AmoCRM\Models\Transaction $transaction
34
 * @property \AmoCRM\Models\Unsorted $unsorted
35
 * @property \AmoCRM\Models\Webhooks $webhooks
36
 * @property \AmoCRM\Models\Widgets $widgets
37
 *
38
 * For the full copyright and license information, please view the LICENSE
39
 * file that was distributed with this source code.
40
 */
41
class Client
42
{
43
    /**
44
     * @var Fields|null Экземпляр Fields для хранения номеров полей
45
     */
46
    public $fields = null;
47
48
    /**
49
     * @var ParamsBag|null Экземпляр ParamsBag для хранения аргументов
50
     */
51
    public $parameters = null;
52
53
    /**
54
     * Client constructor
55
     *
56
     * @param string $domain Поддомен или домен amoCRM
57
     * @param string $login Логин amoCRM
58
     * @param string $apikey Ключ пользователя amoCRM
59
     * @param string|null $proxy Прокси сервер для отправки запроса
60
     */
61 27
    public function __construct($domain, $login, $apikey, $proxy = null)
62
    {
63
        // Разернуть поддомен в полный домен
64 27
        if (strpos($domain, '.') === false) {
65 23
            $domain = sprintf('%s.amocrm.ru', $domain);
66 23
        }
67
68 27
        $this->parameters = new ParamsBag();
69 27
        $this->parameters->addAuth('domain', $domain);
70 27
        $this->parameters->addAuth('login', $login);
71 27
        $this->parameters->addAuth('apikey', $apikey);
72
73 27
        if ($proxy !== null) {
74
            $this->parameters->addProxy($proxy);
75
        }
76
77 27
        $this->fields = new Fields();
78 27
    }
79
80
    /**
81
     * Возвращает экземпляр модели для работы с amoCRM API
82
     *
83
     * @param string $name Название модели
84
     * @return ModelInterface
85
     * @throws ModelException
86
     */
87 19
    public function __get($name)
88
    {
89 19
        $classname = '\\AmoCRM\\Models\\' . Format::camelCase($name);
90
91 19
        if (!class_exists($classname)) {
92 1
            throw new ModelException('Model not exists: ' . $name);
93
        }
94
95
        // Чистим GET и POST от предыдущих вызовов
96 18
        $this->parameters->clearGet()->clearPost();
97
98 18
        return new $classname($this->parameters);
99
    }
100
}
101