GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Completed
Push — master ( 48ef9d...490df9 )
by Christian
01:26
created

Setlist::fromApi()   A

Complexity

Conditions 5
Paths 8

Size

Total Lines 31

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 31
rs 9.1128
c 0
b 0
f 0
cc 5
nc 8
nop 1
1
<?php
2
3
declare(strict_types=1);
4
5
/*
6
 * (c) Christian Gripp <[email protected]>
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace Core23\SetlistFm\Model;
13
14
use DateTime;
15
16
final class Setlist
17
{
18
    /**
19
     * @var string
20
     */
21
    private $id;
22
23
    /**
24
     * @var Artist|null
25
     */
26
    private $artist;
27
28
    /**
29
     * @var Venue|null
30
     */
31
    private $venue;
32
33
    /**
34
     * @var Tour|null
35
     */
36
    private $tour;
37
38
    /**
39
     * @var Set[]
40
     */
41
    private $sets;
42
43
    /**
44
     * @var string|null
45
     */
46
    private $info;
47
48
    /**
49
     * @var string|null
50
     */
51
    private $url;
52
53
    /**
54
     * @var string|null
55
     */
56
    private $versionId;
57
58
    /**
59
     * @var DateTime
60
     */
61
    private $eventDate;
62
63
    /**
64
     * @var DateTime|null
65
     */
66
    private $updateDate;
67
68
    /**
69
     * @param string        $id
70
     * @param Artist|null   $artist
71
     * @param Venue|null    $venue
72
     * @param Tour|null     $tour
73
     * @param Set[]         $sets
74
     * @param string|null   $info
75
     * @param string|null   $url
76
     * @param string|null   $versionId
77
     * @param DateTime      $eventDate
78
     * @param DateTime|null $updateDate
79
     */
80
    public function __construct(
81
        string $id,
82
        ?Artist $artist,
83
        ?Venue $venue,
84
        ?Tour $tour,
85
        array $sets,
86
        ?string $info,
87
        ?string $url,
88
        ?string $versionId,
89
        DateTime $eventDate,
90
        ?DateTime $updateDate
91
    ) {
92
        $this->id         = $id;
93
        $this->artist     = $artist;
94
        $this->venue      = $venue;
95
        $this->tour       = $tour;
96
        $this->sets       = $sets;
97
        $this->info       = $info;
98
        $this->url        = $url;
99
        $this->versionId  = $versionId;
100
        $this->eventDate  = $eventDate;
101
        $this->updateDate = $updateDate;
102
    }
103
104
    /**
105
     * @return string
106
     */
107
    public function getId(): string
108
    {
109
        return $this->id;
110
    }
111
112
    /**
113
     * @return Artist|null
114
     */
115
    public function getArtist(): ?Artist
116
    {
117
        return $this->artist;
118
    }
119
120
    /**
121
     * @return Venue|null
122
     */
123
    public function getVenue(): ?Venue
124
    {
125
        return $this->venue;
126
    }
127
128
    /**
129
     * @return Tour|null
130
     */
131
    public function getTour(): ?Tour
132
    {
133
        return $this->tour;
134
    }
135
136
    /**
137
     * @return Set[]
138
     */
139
    public function getSets(): array
140
    {
141
        return $this->sets;
142
    }
143
144
    /**
145
     * @return string|null
146
     */
147
    public function getInfo(): ?string
148
    {
149
        return $this->info;
150
    }
151
152
    /**
153
     * @return string|null
154
     */
155
    public function getUrl(): ?string
156
    {
157
        return $this->url;
158
    }
159
160
    /**
161
     * @return string|null
162
     */
163
    public function getVersionId(): ?string
164
    {
165
        return $this->versionId;
166
    }
167
168
    /**
169
     * @return DateTime
170
     */
171
    public function getEventDate(): DateTime
172
    {
173
        return $this->eventDate;
174
    }
175
176
    /**
177
     * @return DateTime|null
178
     */
179
    public function getUpdateDate(): ?DateTime
180
    {
181
        return $this->updateDate;
182
    }
183
184
    /**
185
     * @param array $data
186
     *
187
     * @return Setlist
188
     */
189
    public static function fromApi(array $data): self
190
    {
191
        $artist = null;
192
        $venue  = null;
193
        $tour   = null;
194
195
        if (\array_key_exists('artist', $data)) {
196
            $artist = Artist::fromApi($data['artist']);
197
        }
198
        if (\array_key_exists('venue', $data)) {
199
            $venue = Venue::fromApi($data['venue']);
200
        }
201
        if (\array_key_exists('tour', $data)) {
202
            $tour = Tour::fromApi($data['tour']);
203
        }
204
205
        $sets = self::createSetsFromApi($data);
206
207
        return new self(
208
            $data['id'],
209
            $artist,
210
            $venue,
211
            $tour,
212
            $sets,
213
            $data['info'] ?? null,
214
            $data['url'] ?? null,
215
            $data['versionId'] ?? null,
216
            new DateTime($data['eventDate']),
217
            $data['lastUpdated'] ? new DateTime($data['lastUpdated']) : null
218
        );
219
    }
220
221
    /**
222
     * @param array $data
223
     *
224
     * @return array
225
     */
226
    private static function createSetsFromApi(array $data): array
227
    {
228
        $sets = [];
229
230
        $setData = [];
231
232
        if (\array_key_exists('sets', $data) && \array_key_exists('set', $data['sets'])) {
233
            $setData = $data['sets']['set'];
234
        } elseif (\array_key_exists('set', $data)) {
235
            $setData = $data['set'];
236
        }
237
238
        foreach ($setData as $set) {
239
            $sets[] = Set::fromApi($set);
240
        }
241
242
        return $sets;
243
    }
244
}
245