Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
100.00% |
73 / 73 |
|
100.00% |
1 / 1 |
CRAP | |
100.00% |
1 / 1 |
SolvEventParser | |
100.00% |
73 / 73 |
|
100.00% |
1 / 1 |
31 | |
100.00% |
1 / 1 |
parse_solv_events_csv | |
100.00% |
73 / 73 |
|
100.00% |
1 / 1 |
31 |
1 | <?php |
2 | |
3 | namespace Olz\Parsers; |
4 | |
5 | use Olz\Entity\SolvEvent; |
6 | use Olz\Utils\WithUtilsTrait; |
7 | |
8 | class SolvEventParser { |
9 | use WithUtilsTrait; |
10 | |
11 | /** @var array<int, string> */ |
12 | public array $solv_entryportals = [ |
13 | 1 => "GO2OL", |
14 | 2 => "picoTIMING", |
15 | 3 => "anderes", |
16 | ]; |
17 | |
18 | /** @return array<SolvEvent> */ |
19 | public function parse_solv_events_csv(string $csv_content): array { |
20 | $data = str_getcsv($csv_content, "\n", "\"", "\\"); |
21 | $header = str_getcsv($data[0] ?? '', ";", "\"", "\\"); |
22 | $solv_events = []; |
23 | for ($row_index = 1; $row_index < count($data); $row_index++) { |
24 | $line = html_entity_decode($data[$row_index] ?? '', ENT_QUOTES); |
25 | $row = str_getcsv($line, ";", "\"", "\\"); |
26 | $solv_event = new SolvEvent(); |
27 | $solv_event->setStartLink(null); |
28 | $solv_event->setRankLink(null); |
29 | for ($col_index = 0; $col_index < count($header); $col_index++) { |
30 | $csv_column_name = $header[$col_index] ?? ''; |
31 | $field_value = $row[$col_index] ?? ''; |
32 | switch ($csv_column_name) { |
33 | case 'unique_id': |
34 | $solv_event->setSolvUid(intval($field_value)); |
35 | break; |
36 | case 'date': |
37 | $date = $this->dateUtils()->sanitizeDateValue($field_value); |
38 | $this->generalUtils()->checkNotNull($date, "No SolvEvent date {$field_value}"); |
39 | $solv_event->setDate($date); |
40 | break; |
41 | case 'duration': |
42 | $solv_event->setDuration(intval($field_value)); |
43 | break; |
44 | case 'kind': |
45 | $solv_event->setKind($field_value ?: ''); |
46 | break; |
47 | case 'day_night': |
48 | $solv_event->setDayNight($field_value ?: ''); |
49 | break; |
50 | case 'national': |
51 | $solv_event->setNational(intval($field_value)); |
52 | break; |
53 | case 'region': |
54 | $solv_event->setRegion($field_value ?: ''); |
55 | break; |
56 | case 'type': |
57 | $solv_event->setType($field_value ?: ''); |
58 | break; |
59 | case 'event_name': |
60 | $solv_event->setName($field_value ?: ''); |
61 | break; |
62 | case 'event_link': |
63 | $solv_event->setLink($field_value ?: ''); |
64 | break; |
65 | case 'club': |
66 | $solv_event->setClub($field_value ?: ''); |
67 | break; |
68 | case 'map': |
69 | $solv_event->setMap($field_value ?: ''); |
70 | break; |
71 | case 'location': |
72 | $solv_event->setLocation($field_value ?: ''); |
73 | break; |
74 | case 'coord_x': |
75 | $solv_event->setCoordX(intval($field_value)); |
76 | break; |
77 | case 'coord_y': |
78 | $solv_event->setCoordY(intval($field_value)); |
79 | break; |
80 | case 'deadline': |
81 | $date = $this->dateUtils()->sanitizeDateValue($field_value); |
82 | $solv_event->setDeadline($date); |
83 | break; |
84 | case 'entryportal': |
85 | $solv_event->setEntryportal(intval($field_value)); |
86 | break; |
87 | case 'last_modification': |
88 | $datetime = $this->dateUtils()->sanitizeDatetimeValue($field_value); |
89 | $solv_event->setLastModification($datetime ?? new \DateTime()); |
90 | break; |
91 | default: |
92 | break; |
93 | } |
94 | } |
95 | $solv_events[] = $solv_event; |
96 | } |
97 | return $solv_events; |
98 | } |
99 | } |