AbstractApi::getCommentResource()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 4
ccs 2
cts 2
cp 1
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 0
crap 1
1
<?php
2
3
declare(strict_types=1);
4
5
/*
6
 * This file is part of the zibios/wrike-php-library package.
7
 *
8
 * (c) Zbigniew Ślązak
9
 *
10
 * For the full copyright and license information, please view the LICENSE
11
 * file that was distributed with this source code.
12
 */
13
14
namespace Zibios\WrikePhpLibrary;
15
16
use Zibios\WrikePhpLibrary\Client\ClientInterface;
17
use Zibios\WrikePhpLibrary\Resource\AbstractResource;
18
use Zibios\WrikePhpLibrary\Resource\AccountResource;
19
use Zibios\WrikePhpLibrary\Resource\AttachmentResource;
20
use Zibios\WrikePhpLibrary\Resource\ColorResource;
21
use Zibios\WrikePhpLibrary\Resource\CommentResource;
22
use Zibios\WrikePhpLibrary\Resource\ContactResource;
23
use Zibios\WrikePhpLibrary\Resource\CustomFieldResource;
24
use Zibios\WrikePhpLibrary\Resource\DependencyResource;
25
use Zibios\WrikePhpLibrary\Resource\FolderResource;
26
use Zibios\WrikePhpLibrary\Resource\GroupResource;
27
use Zibios\WrikePhpLibrary\Resource\IdResource;
28
use Zibios\WrikePhpLibrary\Resource\InvitationResource;
29
use Zibios\WrikePhpLibrary\Resource\TaskResource;
30
use Zibios\WrikePhpLibrary\Resource\TimelogCategoryResource;
31
use Zibios\WrikePhpLibrary\Resource\TimelogResource;
32
use Zibios\WrikePhpLibrary\Resource\UserResource;
33
use Zibios\WrikePhpLibrary\Resource\VersionResource;
34
use Zibios\WrikePhpLibrary\Resource\WorkflowResource;
35
use Zibios\WrikePhpLibrary\Transformer\ApiExceptionTransformerInterface;
36
use Zibios\WrikePhpLibrary\Transformer\ResponseTransformerInterface;
37
use Zibios\WrikePhpLibrary\Validator\AccessTokenValidator;
38
39
/**
40
 * Abstract for General Wrike Api.
41
 *
42
 * Entry point for all Wrike API operations.
43
 *
44
 * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
45
 */
46
abstract class AbstractApi implements ApiInterface
47
{
48
    public const BASE_URI = 'https://www.wrike.com/api/v4/';
49
50
    /**
51
     * @var ClientInterface
52
     */
53
    protected $client;
54
55
    /**
56
     * @var string
57
     */
58
    protected $accessToken = '';
59
60
    /**
61
     * @var ResponseTransformerInterface
62
     */
63
    protected $responseTransformer;
64
65
    /**
66
     * @var ApiExceptionTransformerInterface
67
     */
68
    protected $apiExceptionTransformer;
69
70
    /**
71
     * Api constructor.
72
     *
73
     * @param ClientInterface                  $client
74
     * @param ResponseTransformerInterface     $responseTransformer
75
     * @param ApiExceptionTransformerInterface $apiExceptionTransformer
76
     * @param string                           $accessToken
77
     *
78
     * @throws \InvalidArgumentException
79
     */
80 46
    public function __construct(
81
        ClientInterface $client,
82
        ResponseTransformerInterface $responseTransformer,
83
        ApiExceptionTransformerInterface $apiExceptionTransformer,
84
        $accessToken = ''
85
    ) {
86 46
        AccessTokenValidator::assertIsValidOrEmpty($accessToken);
87
88 46
        $this->client = $client;
89 46
        $this->responseTransformer = $responseTransformer;
90 46
        $this->apiExceptionTransformer = $apiExceptionTransformer;
91 46
        $this->accessToken = $accessToken;
92 46
    }
93
94 2
    public function contacts(): ContactResource
95
    {
96
        /** @var $resource ContactResource */
97 2
        $resource = $this->getResource(ContactResource::class);
98
99 2
        return $resource;
100
    }
101
102
    /**
103
     * @deprecated getContactResource is deprecated and will be removed in 3.0.0. Use contacts().
104
     */
105 1
    public function getContactResource(): ContactResource
106
    {
107 1
        return $this->contacts();
108
    }
109
110
    /**
111
     * @return UserResource
112
     */
113 2
    public function users(): UserResource
114
    {
115
        /** @var UserResource $resource */
116 2
        $resource = $this->getResource(UserResource::class);
117
118 2
        return $resource;
119
    }
120
121
    /**
122
     * @return UserResource
123
     */
124 1
    public function getUserResource(): UserResource
125
    {
126 1
        return $this->users();
127
    }
128
129
    /**
130
     * @return GroupResource
131
     */
132 2
    public function groups(): GroupResource
133
    {
134
        /** @var GroupResource $resource */
135 2
        $resource = $this->getResource(GroupResource::class);
136
137 2
        return $resource;
138
    }
139
140
    /**
141
     * @return GroupResource
142
     */
143 1
    public function getGroupResource(): GroupResource
144
    {
145 1
        return $this->groups();
146
    }
147
148
    /**
149
     * @return InvitationResource
150
     */
151 2
    public function invitations(): InvitationResource
152
    {
153
        /** @var InvitationResource $resource */
154 2
        $resource = $this->getResource(InvitationResource::class);
155
156 2
        return $resource;
157
    }
158
159
    /**
160
     * @return InvitationResource
161
     */
162 1
    public function getInvitationResource(): InvitationResource
163
    {
164 1
        return $this->invitations();
165
    }
166
167
    /**
168
     * @return AccountResource
169
     */
170 2
    public function account(): AccountResource
171
    {
172
        /** @var AccountResource $resource */
173 2
        $resource = $this->getResource(AccountResource::class);
174
175 2
        return $resource;
176
    }
177
178
    /**
179
     * @return AccountResource
180
     */
181 1
    public function getAccountResource(): AccountResource
182
    {
183 1
        return $this->account();
184
    }
185
186
    /**
187
     * @return WorkflowResource
188
     */
189 2
    public function workflows(): WorkflowResource
190
    {
191
        /** @var WorkflowResource $resource */
192 2
        $resource = $this->getResource(WorkflowResource::class);
193
194 2
        return $resource;
195
    }
196
197
    /**
198
     * @return WorkflowResource
199
     */
200 1
    public function getWorkflowResource(): WorkflowResource
201
    {
202 1
        return $this->workflows();
203
    }
204
205
    /**
206
     * @return CustomFieldResource
207
     */
208 2
    public function customFields(): CustomFieldResource
209
    {
210
        /** @var CustomFieldResource $resource */
211 2
        $resource = $this->getResource(CustomFieldResource::class);
212
213 2
        return $resource;
214
    }
215
216
    /**
217
     * @return CustomFieldResource
218
     */
219 1
    public function getCustomFieldResource(): CustomFieldResource
220
    {
221 1
        return $this->customFields();
222
    }
223
224
    /**
225
     * @return FolderResource
226
     */
227 2
    public function folders(): FolderResource
228
    {
229
        /** @var FolderResource $resource */
230 2
        $resource = $this->getResource(FolderResource::class);
231
232 2
        return $resource;
233
    }
234
235
    /**
236
     * @return FolderResource
237
     */
238 1
    public function getFolderResource(): FolderResource
239
    {
240 1
        return $this->folders();
241
    }
242
243
    /**
244
     * @return TaskResource
245
     */
246 2
    public function tasks(): TaskResource
247
    {
248
        /** @var TaskResource $resource */
249 2
        $resource = $this->getResource(TaskResource::class);
250
251 2
        return $resource;
252
    }
253
254
    /**
255
     * @return TaskResource
256
     */
257 1
    public function getTaskResource(): TaskResource
258
    {
259 1
        return $this->tasks();
260
    }
261
262
    /**
263
     * @return CommentResource
264
     */
265 2
    public function comments(): CommentResource
266
    {
267
        /** @var CommentResource $resource */
268 2
        $resource = $this->getResource(CommentResource::class);
269
270 2
        return $resource;
271
    }
272
273
    /**
274
     * @return CommentResource
275
     */
276 1
    public function getCommentResource(): CommentResource
277
    {
278 1
        return $this->comments();
279
    }
280
281
    /**
282
     * @return DependencyResource
283
     */
284 2
    public function dependencies(): DependencyResource
285
    {
286
        /** @var DependencyResource $resource */
287 2
        $resource = $this->getResource(DependencyResource::class);
288
289 2
        return $resource;
290
    }
291
292
    /**
293
     * @return DependencyResource
294
     */
295 1
    public function getDependencyResource(): DependencyResource
296
    {
297 1
        return $this->dependencies();
298
    }
299
300
    /**
301
     * @return TimelogResource
302
     */
303 2
    public function timelogs(): TimelogResource
304
    {
305
        /** @var TimelogResource $resource */
306 2
        $resource = $this->getResource(TimelogResource::class);
307
308 2
        return $resource;
309
    }
310
311
    /**
312
     * @return TimelogResource
313
     */
314 1
    public function getTimelogResource(): TimelogResource
315
    {
316 1
        return $this->timelogs();
317
    }
318
319
    /**
320
     * @return TimelogCategoryResource
321
     */
322 2
    public function timelogCategories(): TimelogCategoryResource
323
    {
324
        /** @var TimelogCategoryResource $resource */
325 2
        $resource = $this->getResource(TimelogCategoryResource::class);
326
327 2
        return $resource;
328
    }
329
330
    /**
331
     * @return TimelogCategoryResource
332
     */
333 1
    public function getTimelogCategoryResource(): TimelogCategoryResource
334
    {
335 1
        return $this->timelogCategories();
336
    }
337
338
    /**
339
     * @return AttachmentResource
340
     */
341 2
    public function attachments(): AttachmentResource
342
    {
343
        /** @var AttachmentResource $resource */
344 2
        $resource = $this->getResource(AttachmentResource::class);
345
346 2
        return $resource;
347
    }
348
349
    /**
350
     * @return AttachmentResource
351
     */
352 1
    public function getAttachmentResource(): AttachmentResource
353
    {
354 1
        return $this->attachments();
355
    }
356
357
    /**
358
     * @return VersionResource
359
     */
360 2
    public function version(): VersionResource
361
    {
362
        /** @var VersionResource $resource */
363 2
        $resource = $this->getResource(VersionResource::class);
364
365 2
        return $resource;
366
    }
367
368
    /**
369
     * @return VersionResource
370
     */
371 1
    public function getVersionResource(): VersionResource
372
    {
373 1
        return $this->version();
374
    }
375
376
    /**
377
     * @return IdResource
378
     */
379 2
    public function ids(): IdResource
380
    {
381
        /** @var IdResource $resource */
382 2
        $resource = $this->getResource(IdResource::class);
383
384 2
        return $resource;
385
    }
386
387
    /**
388
     * @return IdResource
389
     */
390 1
    public function getIdResource(): IdResource
391
    {
392 1
        return $this->ids();
393
    }
394
395
    /**
396
     * @return ColorResource
397
     */
398 2
    public function colors(): ColorResource
399
    {
400
        /** @var ColorResource $resource */
401 2
        $resource = $this->getResource(ColorResource::class);
402
403 2
        return $resource;
404
    }
405
406
    /**
407
     * @return ColorResource
408
     */
409 1
    public function getColorResource(): ColorResource
410
    {
411 1
        return $this->colors();
412
    }
413
414
    /**
415
     * @param array $params
416
     *
417
     * @return array
418
     */
419 1
    public function normalizeParams(array $params): array
420
    {
421 1
        foreach ($params as $key => $value) {
422 1
            if (false === \is_string($value) && false === \is_resource($value)) {
423 1
                $params[$key] = json_encode($value);
424
            }
425
        }
426
427 1
        return $params;
428
    }
429
430
    /**
431
     * @param string $resourceClass
432
     *
433
     * @return AbstractResource
434
     */
435 34
    private function getResource(string $resourceClass): AbstractResource
436
    {
437 34
        return new $resourceClass(
438 34
            $this->client,
439 34
            $this->responseTransformer,
440 34
            $this->apiExceptionTransformer,
441 34
            $this->accessToken
442
        );
443
    }
444
}
445