From 59b781f35ef29ea0d68d58f28e678f2f795140a7 Mon Sep 17 00:00:00 2001 From: bernardhanna Date: Thu, 16 Jan 2025 11:47:40 +0000 Subject: [PATCH 1/4] quick fix --- app/Console/Commands/api/GermanTraits.php | 1 - 1 file changed, 1 deletion(-) diff --git a/app/Console/Commands/api/GermanTraits.php b/app/Console/Commands/api/GermanTraits.php index a447692db..e48412e4f 100644 --- a/app/Console/Commands/api/GermanTraits.php +++ b/app/Console/Commands/api/GermanTraits.php @@ -15,7 +15,6 @@ private function loadJson($url) { $client = new \GuzzleHttp\Client(); $guzzle = $client->request('get', $url); - return json_decode($guzzle->getBody(), true); } From 26574128e522c719df58bd6fe31550a254c80e00 Mon Sep 17 00:00:00 2001 From: bernardhanna Date: Thu, 16 Jan 2025 12:00:37 +0000 Subject: [PATCH 2/4] Resolved whitespace and line ending conflicts in GermanTraits.php --- app/Console/Commands/api/GermanTraits.php | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/app/Console/Commands/api/GermanTraits.php b/app/Console/Commands/api/GermanTraits.php index e48412e4f..6b8af4505 100644 --- a/app/Console/Commands/api/GermanTraits.php +++ b/app/Console/Commands/api/GermanTraits.php @@ -51,7 +51,7 @@ private function createRSSItem($json, $city): void $RSSitem->user_email = $item['user']['email'] ?? ''; $RSSitem->user_publicEmail = $item['user']['publicEmail'] ?? ''; $RSSitem->user_type = $item['user']['type']['identifier'] ?? - ($item['user']['type'] ?? 'invite-in-person'); + ($item['user']['type'] ?? 'invite-in-person'); $RSSitem->user_website = $item['user']['www'] ?? ''; // Safely get type data @@ -95,8 +95,8 @@ private function createGermanEvent($city): void 'lastname' => '', 'username' => $this->organizer, 'password' => bcrypt(Str::random()), - ]); - + ] + ); } $event = new Event([ @@ -123,7 +123,7 @@ private function createGermanEvent($city): void 'end_date' => $this->eventEndDate, 'longitude' => $this->longitude, 'latitude' => $this->latitude, - 'geoposition' => $this->latitude.','.$this->longitude, + 'geoposition' => $this->latitude . ',' . $this->longitude, 'language' => 'de', ]); @@ -150,6 +150,5 @@ private function createGermanEvent($city): void $event->tags()->sync($tagsArray); } - } } From ca4f97baee56be713ae20610e398ad09fc93e535 Mon Sep 17 00:00:00 2001 From: bernardhanna Date: Wed, 22 Jan 2025 15:43:19 +0000 Subject: [PATCH 3/4] Add CoderDojo events import for Jan-Feb 2025 --- app/Console/Commands/excel/CoderDojoEvents.php | 3 +-- ...derDojo Belgium January - February 2025.xlsx | Bin 0 -> 57462 bytes 2 files changed, 1 insertion(+), 2 deletions(-) create mode 100644 resources/excel/20250113 Events CoderDojo Belgium January - February 2025.xlsx diff --git a/app/Console/Commands/excel/CoderDojoEvents.php b/app/Console/Commands/excel/CoderDojoEvents.php index 717875857..9b402007a 100644 --- a/app/Console/Commands/excel/CoderDojoEvents.php +++ b/app/Console/Commands/excel/CoderDojoEvents.php @@ -42,8 +42,7 @@ public function handle(): void Excel::import( new CoderDojoEventsImport(), - 'events.xlsx', - 'excel' + resource_path('excel/20250113 Events CoderDojo Belgium January - February 2025.xlsx') ); } } diff --git a/resources/excel/20250113 Events CoderDojo Belgium January - February 2025.xlsx b/resources/excel/20250113 Events CoderDojo Belgium January - February 2025.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..5981dd04dab2c84036344fc3af827efd6c88bb6d GIT binary patch literal 57462 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 Date: Wed, 22 Jan 2025 15:49:39 +0000 Subject: [PATCH 4/4] Add validation to CoderDojo events import --- app/Imports/CoderDojoEventsImport.php | 107 +++++++++++++++++--------- 1 file changed, 71 insertions(+), 36 deletions(-) diff --git a/app/Imports/CoderDojoEventsImport.php b/app/Imports/CoderDojoEventsImport.php index 13bc6b74c..367457081 100644 --- a/app/Imports/CoderDojoEventsImport.php +++ b/app/Imports/CoderDojoEventsImport.php @@ -17,47 +17,82 @@ public function parseDate($date) { $arr = explode(',', $date); array_shift($arr); - return implode($arr); } public function model(array $row): ?Model { - $event = new Event([ - 'status' => 'APPROVED', - 'title' => $row['activity_title'], - 'slug' => str_slug($row['activity_title']), - 'organizer' => $row['name_of_organisation'], - 'description' => $row['description'], - 'organizer_type' => $row['type_of_organisation'], - 'activity_type' => $row['activity_type'], - 'location' => isset($row['address']) ? $row['address'] : 'online', - 'event_url' => $row['organiser_website'], - 'contact_person' => !empty($row['contact_email']) ? $row['contact_email'] : '', - 'user_email' => '', - 'creator_id' => 132942, - 'country_iso' => $row['country'], - 'picture' => isset($row['image_path']) ? $row['image_path'] : '', - 'pub_date' => now(), - 'created' => now(), - 'updated' => now(), - 'codeweek_for_all_participation_code' => 'cw20-coderdojo-eu', - 'start_date' => \PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($row['start_date']), - 'end_date' => \PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($row['end_date']), - 'geoposition' => $row['latitude'].','.$row['longitude'], - 'longitude' => $row['longitude'], - 'latitude' => $row['latitude'], - 'language' => isset($row['language']) ? $row['language'] : 'nl', - 'approved_by' => 19588, - 'mass_added_for' => 'Excel', - ]); - - $event->save(); - - $event->audiences()->attach(explode(',', $row['audience_comma_separated_ids'])); - $event->themes()->attach(explode(',', $row['theme_comma_separated_ids'])); - - return $event; + // Validate required fields + if ( + empty($row['activity_title']) || + empty($row['name_of_organisation']) || + empty($row['description']) || + empty($row['type_of_organisation']) || + empty($row['activity_type']) || + empty($row['country']) || + empty($row['start_date']) || + empty($row['end_date']) + ) { + Log::error('Missing required fields in row'); + return null; + } + + try { + $event = new Event([ + 'status' => 'APPROVED', + 'title' => trim($row['activity_title']), + 'slug' => str_slug(trim($row['activity_title'])), + 'organizer' => trim($row['name_of_organisation']), + 'description' => trim($row['description']), + 'organizer_type' => trim($row['type_of_organisation']), + 'activity_type' => trim($row['activity_type']), + 'location' => !empty($row['address']) ? trim($row['address']) : 'online', + 'event_url' => !empty($row['organiser_website']) ? trim($row['organiser_website']) : '', + 'contact_person' => !empty($row['contact_email']) ? trim($row['contact_email']) : '', + 'user_email' => '', + 'creator_id' => 132942, + 'country_iso' => trim($row['country']), + 'picture' => !empty($row['image_path']) ? trim($row['image_path']) : '', + 'pub_date' => now(), + 'created' => now(), + 'updated' => now(), + 'codeweek_for_all_participation_code' => 'cw20-coderdojo-eu', + 'start_date' => \PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($row['start_date']), + 'end_date' => \PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($row['end_date']), + 'geoposition' => (!empty($row['latitude']) && !empty($row['longitude'])) ? $row['latitude'] . ',' . $row['longitude'] : '', + 'longitude' => !empty($row['longitude']) ? trim($row['longitude']) : '', + 'latitude' => !empty($row['latitude']) ? trim($row['latitude']) : '', + 'language' => !empty($row['language']) ? trim($row['language']) : 'nl', + 'approved_by' => 19588, + 'mass_added_for' => 'Excel', + ]); + + $event->save(); + + if (!empty($row['audience_comma_separated_ids'])) { + $audiences = array_unique(array_map('trim', explode(',', $row['audience_comma_separated_ids']))); + $audiences = array_filter($audiences, function ($id) { + return is_numeric($id) && $id > 0 && $id <= 100; + }); + if (!empty($audiences)) { + $event->audiences()->attach($audiences); + } + } + + if (!empty($row['theme_comma_separated_ids'])) { + $themes = array_unique(array_map('trim', explode(',', $row['theme_comma_separated_ids']))); + $themes = array_filter($themes, function ($id) { + return is_numeric($id) && $id > 0 && $id <= 100; + }); + if (!empty($themes)) { + $event->themes()->attach($themes); + } + } + return $event; + } catch (\Exception $e) { + Log::error('Event import failed: ' . $e->getMessage()); + return null; + } } }