Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
| Total | |
0.00% |
0 / 73 |
|
0.00% |
0 / 1 |
CRAP | |
0.00% |
0 / 1 |
| SolvEventParser | |
0.00% |
0 / 73 |
|
0.00% |
0 / 1 |
992 | |
0.00% |
0 / 1 |
| parse_solv_events_csv | |
0.00% |
0 / 73 |
|
0.00% |
0 / 1 |
992 | |||
| 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 | } |