Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
77 / 77
100.00% covered (success)
100.00%
1 / 1
CRAP
100.00% covered (success)
100.00%
1 / 1
SolvEventParser
100.00% covered (success)
100.00%
77 / 77
100.00% covered (success)
100.00%
1 / 1
33
100.00% covered (success)
100.00%
1 / 1
 parse_solv_events_csv
100.00% covered (success)
100.00%
77 / 77
100.00% covered (success)
100.00%
1 / 1
33
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        $num_data = count($data);
23        $num_header = count($header);
24        if ($num_data <= 1 || $num_header <= 3) {
25            return null;
26        }
27        $solv_events = [];
28        for ($row_index = 1; $row_index < $num_data; $row_index++) {
29            $line = html_entity_decode($data[$row_index] ?? '', ENT_QUOTES);
30            $row = str_getcsv($line, ";", "\"", "\\");
31            $solv_event = new SolvEvent();
32            $solv_event->setStartLink(null);
33            $solv_event->setRankLink(null);
34            for ($col_index = 0; $col_index < $num_header; $col_index++) {
35                $csv_column_name = $header[$col_index] ?? '';
36                $field_value = $row[$col_index] ?? '';
37                switch ($csv_column_name) {
38                    case 'unique_id':
39                        $solv_event->setSolvUid(intval($field_value));
40                        break;
41                    case 'date':
42                        $date = $this->dateUtils()->sanitizeDateValue($field_value);
43                        $this->generalUtils()->checkNotNull($date, "No SolvEvent date {$field_value}");
44                        $solv_event->setDate($date);
45                        break;
46                    case 'duration':
47                        $solv_event->setDuration(intval($field_value));
48                        break;
49                    case 'kind':
50                        $solv_event->setKind($field_value ?: '');
51                        break;
52                    case 'day_night':
53                        $solv_event->setDayNight($field_value ?: '');
54                        break;
55                    case 'national':
56                        $solv_event->setNational(intval($field_value));
57                        break;
58                    case 'region':
59                        $solv_event->setRegion($field_value ?: '');
60                        break;
61                    case 'type':
62                        $solv_event->setType($field_value ?: '');
63                        break;
64                    case 'event_name':
65                        $solv_event->setName($field_value ?: '');
66                        break;
67                    case 'event_link':
68                        $solv_event->setLink($field_value ?: '');
69                        break;
70                    case 'club':
71                        $solv_event->setClub($field_value ?: '');
72                        break;
73                    case 'map':
74                        $solv_event->setMap($field_value ?: '');
75                        break;
76                    case 'location':
77                        $solv_event->setLocation($field_value ?: '');
78                        break;
79                    case 'coord_x':
80                        $solv_event->setCoordX(intval($field_value));
81                        break;
82                    case 'coord_y':
83                        $solv_event->setCoordY(intval($field_value));
84                        break;
85                    case 'deadline':
86                        $date = $this->dateUtils()->sanitizeDateValue($field_value);
87                        $solv_event->setDeadline($date);
88                        break;
89                    case 'entryportal':
90                        $solv_event->setEntryportal(intval($field_value));
91                        break;
92                    case 'last_modification':
93                        $datetime = $this->dateUtils()->sanitizeDatetimeValue($field_value);
94                        $solv_event->setLastModification($datetime ?? new \DateTime());
95                        break;
96                    default:
97                        break;
98                }
99            }
100            $solv_events[] = $solv_event;
101        }
102        return $solv_events;
103    }
104}