WebinarApi::getSubscribers()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 21
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 11
CRAP Score 1

Importance

Changes 2
Bugs 0 Features 0
Metric Value
eloc 10
c 2
b 0
f 0
dl 0
loc 21
ccs 11
cts 11
cp 1
rs 9.9332
cc 1
nc 1
nop 8
crap 1

How to fix   Many Parameters   

Many Parameters

Methods with many parameters are not only hard to understand, but their parameters also often become inconsistent when you need more, or different data.

There are several approaches to avoid long parameter lists:

1
<?php
2
3
4
namespace slavkluev\Bizon365\Api;
5
6
use GuzzleHttp\Exception\ClientException;
7
use slavkluev\Bizon365\Helpers\UrlHelper;
8
9
class WebinarApi extends AbstractApi
10
{
11
    const METHODS = [
12
        'get'               => 'webinars/reports/get',
13
        'get.list'          => 'webinars/reports/getlist',
14
        'get.viewers'       => 'webinars/reports/getviewers',
15
        'get.subpages'      => 'webinars/subpages/getSubpages',
16
        'get.subscribers'   => 'webinars/subpages/getSubscribers',
17
        'add.subscriber'    => 'webinars/subpages/addSubscriber',
18
        'remove.subscriber' => 'webinars/subpages/removeSubscriber',
19
    ];
20
21
    /**
22
     * Получение списка доступных отчетов.
23
     *
24
     * @see https://blog.bizon365.ru/api/v1/webinars/reports/
25
     *
26
     * @param int|null  $skip         Пропустить указанное число записей.
27
     * @param int|null  $limit        Ограничить количество записей. Не более 100.
28
     * @param bool|null $liveWebinars Искать среди живых вебинаров.
29
     * @param bool|null $autoWebinars Искать среди автовебинаров.
30
     *
31
     * @return mixed
32
     *
33
     * @throws ClientException
34
     */
35 3
    public function getList(
36
        ?int $skip = null,
37
        ?int $limit = null,
38
        ?bool $liveWebinars = null,
39
        ?bool $autoWebinars = null
40
    ) {
41 3
        $url = UrlHelper::build(self::METHODS['get.list'], [
42 3
            'skip'         => $skip,
43 3
            'limit'        => $limit,
44 3
            'LiveWebinars' => $liveWebinars,
45 3
            'AutoWebinars' => $autoWebinars,
46
        ]);
47 3
        return $this->get($url);
48
    }
49
50
    /**
51
     * Получение конкретного отчета.
52
     *
53
     * @see https://blog.bizon365.ru/api/v1/webinars/reports/
54
     *
55
     * @param string $webinarId Идентификатор вебинара.
56
     *
57
     * @return mixed
58
     *
59
     * @throws ClientException
60
     */
61 3
    public function getWebinar(string $webinarId)
62
    {
63 3
        $url = UrlHelper::build(self::METHODS['get'], [
64 3
            'webinarId' => $webinarId,
65
        ]);
66 3
        return $this->get($url);
67
    }
68
69
    /**
70
     * Получение списка зрителей вебинара.
71
     *
72
     * @see https://blog.bizon365.ru/api/v1/webinars/reports/
73
     *
74
     * @param string   $webinarId Идентификатор вебинара.
75
     * @param int|null $skip      Пропустить указанное число записей.
76
     * @param int|null $limit     Ограничить количество записей. Не более 1000.
77
     *
78
     * @return mixed
79
     *
80
     * @throws ClientException
81
     */
82 3
    public function getViewers(
83
        string $webinarId,
84
        ?int $skip = null,
85
        ?int $limit = null
86
    ) {
87 3
        $url = UrlHelper::build(self::METHODS['get.viewers'], [
88 3
            'webinarId' => $webinarId,
89 3
            'skip'      => $skip,
90 3
            'limit'     => $limit,
91
        ]);
92 3
        return $this->get($url);
93
    }
94
95
    /**
96
     * Получение списка страниц регистрации и их рассылок.
97
     *
98
     * @see https://blog.bizon365.ru/api/v1/webinars/subpages/
99
     *
100
     * @param int|null $skip  Пропустить указанное число записей.
101
     * @param int|null $limit Ограничить количество записей.
102
     *
103
     * @return mixed
104
     *
105
     * @throws ClientException
106
     */
107 3
    public function getSubpages(
108
        ?int $skip = null,
109
        ?int $limit = null
110
    ) {
111 3
        $url = UrlHelper::build(self::METHODS['get.subpages'], [
112 3
            'skip'  => $skip,
113 3
            'limit' => $limit,
114
        ]);
115 3
        return $this->get($url);
116
    }
117
118
    /**
119
     * Получение списка подписчиков в заданной странице регистрации.
120
     *
121
     * @see https://blog.bizon365.ru/api/v1/webinars/subpages/
122
     *
123
     * @param string      $pageId            Идентификатор страницы регистрации.
124
     * @param int|null    $skip              Пропустить указанное число записей.
125
     * @param int|null    $limit             Ограничить количество записей.
126
     * @param string|null $registeredTimeMin Нижняя граница для времени регистрации подписчика. Задается в формате ISO.
127
     * @param string|null $registeredTimeMax Верхняя граница для времени регистрации подписчика. Задается в формате ISO.
128
     * @param string|null $webinarTimeMin    Нижняя граница для времени сеанса. Задается в формате ISO.
129
     * @param string|null $webinarTimeMax    Верхняя граница для времени сеанса. Задается в формате ISO.
130
     * @param string|null $urlMarker         Значение Маркера из URL, идентификатор партнера.
131
     *
132
     * @return mixed
133
     *
134
     * @throws ClientException
135
     */
136 3
    public function getSubscribers(
137
        string $pageId,
138
        ?int $skip = null,
139
        ?int $limit = null,
140
        ?string $registeredTimeMin = null,
141
        ?string $registeredTimeMax = null,
142
        ?string $webinarTimeMin = null,
143
        ?string $webinarTimeMax = null,
144
        ?string $urlMarker = null
145
    ) {
146 3
        $url = UrlHelper::build(self::METHODS['get.subscribers'], [
147 3
            'pageId'            => $pageId,
148 3
            'skip'              => $skip,
149 3
            'limit'             => $limit,
150 3
            'registeredTimeMin' => $registeredTimeMin,
151 3
            'registeredTimeMax' => $registeredTimeMax,
152 3
            'webinarTimeMin'    => $webinarTimeMin,
153 3
            'webinarTimeMax'    => $webinarTimeMax,
154 3
            'urlMarker'         => $urlMarker,
155
        ]);
156 3
        return $this->get($url);
157
    }
158
159
    /**
160
     * Добавление подписчика в базу, регистрируя его на конкретный сеанс вебинара.
161
     *
162
     * @see https://blog.bizon365.ru/api/v1/webinars/subpages/
163
     *
164
     * @param array $subscriber Массив с требуемыми параметрами.
165
     *  $subscriber = [
166
     *      'pageId'     => (string) Идентификатор страницы регистрации в Бизоне. Обязательное.
167
     *      'email'      => (string) Электронная почта подписчика. Обязательное.
168
     *      'phone'      => (string) Номер телефона.
169
     *      'time'       => (string) Выбранное время сеанса. Формат: ISO. Обязательное.
170
     *      'username'   => (string) Имя подписчика.
171
     *      'confirm'    => (int)    Если параметр = 1, то подписчик добавляется в режиме "с подтверждением e-mail".
172
     *      'url_marker' => (string) Значение "Марке из URL"..
173
     *      'utm_*'      => (string) Поддерживаются utm-метки.
174
     *  ]
175
     *
176
     * @return mixed
177
     *
178
     * @throws ClientException
179
     */
180 3
    public function addSubscriber(array $subscriber)
181
    {
182 3
        return $this->post(self::METHODS['add.subscriber'], $subscriber);
183
    }
184
185
    /**
186
     * Удаление подписчика со страницы регистрации.
187
     *
188
     * @see https://blog.bizon365.ru/api/v1/webinars/subpages/
189
     *
190
     * @param string $pageId Идентификатор страницы регистрации в Бизоне.
191
     * @param string $email  Электронная почта подписчика.
192
     *
193
     * @return mixed
194
     *
195
     * @throws ClientException
196
     */
197 3
    public function removeSubscriber(
198
        string $pageId,
199
        string $email
200
    ) {
201 3
        return $this->post(self::METHODS['remove.subscriber'], [
202 3
            'pageId' => $pageId,
203 3
            'email'  => $email,
204
        ]);
205
    }
206
}
207