Client::__construct()   A
last analyzed

Complexity

Conditions 3
Paths 4

Size

Total Lines 20

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 12
CRAP Score 3.0261

Importance

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