Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 73
0.00% covered (danger)
0.00%
0 / 1
CRAP
0.00% covered (danger)
0.00%
0 / 1
SolvEventParser
0.00% covered (danger)
0.00%
0 / 73
0.00% covered (danger)
0.00%
0 / 1
992
0.00% covered (danger)
0.00%
0 / 1
 parse_solv_events_csv
0.00% covered (danger)
0.00%
0 / 73
0.00% covered (danger)
0.00%
0 / 1
992
1<?php
2
3namespace Olz\Parsers;
4
5use Olz\Entity\SolvEvent;
6use Olz\Utils\WithUtilsTrait;
7
8class 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}