From 30893eb7a7eacbe9a3293eded9085404f6358b0e Mon Sep 17 00:00:00 2001 From: root Date: Tue, 18 Aug 2026 09:31:05 -0100 Subject: [PATCH] Changes by CLaude --- app/Http/Controllers/CalendarController.php | 8 +-- app/Http/Controllers/ContactController.php | 2 +- app/Http/Controllers/HomeController.php | 29 ++++++---- app/Http/Controllers/ImagesController.php | 4 +- app/Http/Controllers/JobsController.php | 2 +- app/Http/Controllers/KerkdienstController.php | 4 +- app/Http/Controllers/NewsController.php | 44 +++++++-------- app/Http/Controllers/PodcastController.php | 12 ++-- app/Http/Controllers/RadioController.php | 24 ++++---- app/Http/Controllers/SpecialController.php | 4 +- app/Models/Blog.php | 16 ++++++ app/Models/CalendarEvent.php | 20 ++++++- app/Models/JobOpening.php | 18 +++++- app/Models/Kerkdienst.php | 11 ++++ app/Models/NewsImage.php | 10 ++++ app/Models/NewsItem.php | 56 +++++++++++++++---- app/Models/NewsSource.php | 6 +- app/Models/Podcast.php | 35 +++++++++++- app/Models/Program.php | 25 ++++++++- app/Models/ProgramHost.php | 14 +++++ app/Models/Track.php | 17 ++++++ 21 files changed, 276 insertions(+), 85 deletions(-) diff --git a/app/Http/Controllers/CalendarController.php b/app/Http/Controllers/CalendarController.php index a140c23d..ea9b565f 100755 --- a/app/Http/Controllers/CalendarController.php +++ b/app/Http/Controllers/CalendarController.php @@ -9,19 +9,19 @@ class CalendarController extends Controller public function show(Request $request, $id) { parent::registerView($request, 'agenda', $id); - $apiResult = $this->API('agenda/item/' . (int)$id); - $calendarEvent = new \Model\CalendarEvent($apiResult->news); + $apiResult = (object) $this->API('agenda/item/' . (int)$id); + $calendarEvent = new \Model\CalendarEvent((object) $apiResult->news); return view('calendarevent', array_merge($this->getSidebareData(), ['event' => $calendarEvent, 'metadata' => $calendarEvent->metadata])); } public function overview(Request $request) { - $apiResult = $this->API('agenda/overzicht?aantal=100'); + $apiResult = (object) $this->API('agenda/overzicht?aantal=100'); $calendar = []; foreach($apiResult->events as $calendarItem) { - $calendar[] = new \Model\CalendarEvent($calendarItem); + $calendar[] = new \Model\CalendarEvent((object) $calendarItem); } return view('calendarlist', array_merge($this->getSidebareData(), ['events' => $calendar])); diff --git a/app/Http/Controllers/ContactController.php b/app/Http/Controllers/ContactController.php index cdac0fd2..a25b5110 100644 --- a/app/Http/Controllers/ContactController.php +++ b/app/Http/Controllers/ContactController.php @@ -12,7 +12,7 @@ class ContactController extends Controller { public function show() { - $page = $this->API('statisch/contact'); + $page = (object) $this->API('statisch/contact'); if ($page == null) { return abort(404); } diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php index a8f0fdbc..3eaf4467 100755 --- a/app/Http/Controllers/HomeController.php +++ b/app/Http/Controllers/HomeController.php @@ -10,24 +10,31 @@ class HomeController extends Controller public function show(Request $request) { $page = (int) $request->get('pagina', 1); - $apiResult = $this->API('nieuws/overzicht?pagina=' . (int) max(1, $page) . '&aantal=10'); + $apiResult = (object) $this->API('nieuws/overzicht?pagina=' . (int) max(1, $page) . '&aantal=10'); $news = []; - foreach ($apiResult->news as $newsItem) { - $news[] = new \Model\NewsItem($newsItem); + if ($apiResult && isset($apiResult->news)) { + foreach ($apiResult->news as $newsItem) { + $news[] = new \Model\NewsItem((object) $newsItem); + } } - $apiResult = $this->API('nieuws/liveblogs'); - $liveblogs = $apiResult->liveblogs; + $apiResult = (object) $this->API('nieuws/liveblogs'); + $liveblogs = $apiResult && isset($apiResult->liveblogs) ? $apiResult->liveblogs : []; $populair = []; - $apiResult = $this->API('nieuws/populair?pagina=' . (int) max(1, $page) . '&aantal=5'); - foreach ($apiResult->news as $newsItem) { - $populair[] = new \Model\NewsItem($newsItem); + $apiResult = (object) $this->API('nieuws/populair?pagina=' . (int) max(1, $page) . '&aantal=5'); + if ($apiResult && isset($apiResult->news)) { + foreach ($apiResult->news as $newsItem) { + $populair[] = new \Model\NewsItem((object) $newsItem); + } } - $apiResult = $this->API('podcast/overzicht?aantal=15'); - $index = array_rand($apiResult->podcasts); - $podcast = new \Model\Podcast($apiResult->podcasts[$index]); + $podcast = null; + $apiResult = (object) $this->API('podcast/overzicht?aantal=15'); + if ($apiResult && isset($apiResult->podcasts) && !empty($apiResult->podcasts)) { + $index = array_rand($apiResult->podcasts); + $podcast = new \Model\Podcast((object) $apiResult->podcasts[$index]); + } return view('home', ['populair' => $populair, 'podcast' => $podcast, 'title' => 'Home', 'news' => $news, 'liveblogs' => $liveblogs, 'searchURL' => 'nieuws/zoeken']); } } diff --git a/app/Http/Controllers/ImagesController.php b/app/Http/Controllers/ImagesController.php index 92e7327c..4b152f9a 100755 --- a/app/Http/Controllers/ImagesController.php +++ b/app/Http/Controllers/ImagesController.php @@ -15,7 +15,7 @@ class ImagesController extends Controller public function show(Request $request, $id) { - $apiResult = $this->API('beelden/details/' . $id); + $apiResult = (object) $this->API('beelden/details/' . $id); $imagesItem = new \Model\NewsItem($apiResult->images); return view('imagesitem', ['images' => $imagesItem, 'metadata' => $imagesItem->metadata]); @@ -39,7 +39,7 @@ class ImagesController extends Controller private function listImages(Request $request, $url, $title = null) { $page = (int)$request->get('pagina', 1); - $apiResult = $this->API('beelden/' . $url . '?pagina=' . (int)max(1, $page)); + $apiResult = (object) $this->API('beelden/' . $url . '?pagina=' . (int)max(1, $page)); $images = []; foreach($apiResult->items as $imagesItem) { diff --git a/app/Http/Controllers/JobsController.php b/app/Http/Controllers/JobsController.php index 3cb7206f..2129112d 100755 --- a/app/Http/Controllers/JobsController.php +++ b/app/Http/Controllers/JobsController.php @@ -16,7 +16,7 @@ class JobsController extends Controller public function show(Request $request, $id) { parent::registerView($request, 'nieuws', $id); - $apiResult = $this->API('vacatures/details/' . $id); + $apiResult = (object) $this->API('vacatures/details/' . $id); $jobsItem = new \Model\JobOpening($apiResult->item); return view('jobsitem', array_merge($this->getSidebareData(), ['job' => $jobsItem, 'metadata' => $jobsItem->metadata])); } diff --git a/app/Http/Controllers/KerkdienstController.php b/app/Http/Controllers/KerkdienstController.php index b9ce82d1..cadce1e4 100755 --- a/app/Http/Controllers/KerkdienstController.php +++ b/app/Http/Controllers/KerkdienstController.php @@ -10,7 +10,7 @@ class KerkdienstController extends Controller public function main(Request $request) { parent::registerView($request, 'kerkdienst', 0); - $apiResult = $this->API('kerkdienst'); - return view('kerkdienst', ['kerkdienst' => new \Model\Kerkdienst($apiResult)]); + $apiResult = (object) $this->API('kerkdienst'); + return view('kerkdienst', ['kerkdienst' => new \Model\Kerkdienst((object) $apiResult)]); } } diff --git a/app/Http/Controllers/NewsController.php b/app/Http/Controllers/NewsController.php index 8a1af5b7..1fb69f08 100755 --- a/app/Http/Controllers/NewsController.php +++ b/app/Http/Controllers/NewsController.php @@ -21,8 +21,8 @@ class NewsController extends Controller if (request()->get('preview', null) != null) { $preview = "?preview=" . request()->get('preview'); } - $apiResult = $this->API('nieuws/bericht/' . $id . $preview); - $newsItem = new \Model\NewsItem($apiResult->news); + $apiResult = (object) $this->API('nieuws/bericht/' . $id . $preview); + $newsItem = new \Model\NewsItem((object) $apiResult->news); switch ($apiResult->version) { case 1: @@ -54,10 +54,10 @@ class NewsController extends Controller { $page = (int) $request->get('pagina', 1); $id = $request->get('id', ''); - $apiResult = $this->API('nieuws/overzicht?pagina=' . (int) max(1, $page) . '&aantal=5'); + $apiResult = (object) $this->API('nieuws/overzicht?pagina=' . (int) max(1, $page) . '&aantal=5'); $news = []; foreach ($apiResult->news as $newsItem) { - $news[] = new \Model\NewsItem($newsItem); + $news[] = new \Model\NewsItem((object) $newsItem); } return view('partial/newslist_small', ['id' => $id, 'news' => $news]); @@ -68,9 +68,9 @@ class NewsController extends Controller $page = (int) $request->get('pagina', 1); $id = $request->get('id', ''); $populair = []; - $apiResult = $this->API('nieuws/populair?pagina=' . (int) max(1, $page) . '&aantal=5'); + $apiResult = (object) $this->API('nieuws/populair?pagina=' . (int) max(1, $page) . '&aantal=5'); foreach ($apiResult->news as $_newsItem) { - $populair[] = new \Model\NewsItem($_newsItem); + $populair[] = new \Model\NewsItem((object) $_newsItem); } return view('partial/newslist_small', ['id' => $id, 'news' => $populair]); @@ -99,9 +99,9 @@ class NewsController extends Controller public function activeblog() { - $apiResult = $this->API('blog/overzicht'); - if (count($apiResult)) { - $blog = new \Model\Blog($apiResult[0]); + $apiResult = (object) $this->API('blog/overzicht'); + if (count((array) $apiResult)) { + $blog = new \Model\Blog((object) $apiResult[0]); if ($blog->is_active) { return redirect($blog->url); } @@ -115,9 +115,9 @@ class NewsController extends Controller parent::registerView($request, 'blog', $id); - $blog = $this->API('nieuws/liveblog/' . (int) $id); + $blog = (object) $this->API('nieuws/liveblog/' . (int) $id); foreach ($blog->artikelen as &$item) { - $item = new \Model\NewsItem($item); + $item = new \Model\NewsItem((object) $item); } if (request()->ajax()) { @@ -140,38 +140,38 @@ class NewsController extends Controller if ($url == 'overzicht' && $request->get('dateStart', null) && $request->get('dateEnd', null)) { $url = 'datum/' . $request->get('dateStart', null) . '/' . $request->get('dateEnd', null); } - $apiResult = $this->API('nieuws/' . $url . '?pagina=' . (int) max(1, $page) . ($total ? '&aantal=' . $total : '')); + $apiResult = (object) $this->API('nieuws/' . $url . '?pagina=' . (int) max(1, $page) . ($total ? '&aantal=' . $total : '')); $news = []; foreach ($apiResult->news ?? [] as $newsItem) { - $news[] = new \Model\NewsItem($newsItem); + $news[] = new \Model\NewsItem((object) $newsItem); } $populair = []; if ($title == null) { $total = 5; } - $apiResult = $this->API('nieuws/populair?pagina=' . (int) max( + $apiResult = (object) $this->API('nieuws/populair?pagina=' . (int) max( 1, $page ) . ($total ? '&aantal=' . $total : '')); foreach ($apiResult->news as $newsItem) { - $populair[] = new \Model\NewsItem($newsItem); + $populair[] = new \Model\NewsItem((object) $newsItem); } $podcast = null; $podcasts = []; if ($title == null) { - $apiResult = $this->API('podcast/overzicht?aantal=3'); - $podcast = new \Model\Podcast($apiResult->podcasts[0]); + $apiResult = (object) $this->API('podcast/overzicht?aantal=3'); + $podcast = new \Model\Podcast((object) $apiResult->podcasts[0]); foreach ($apiResult->podcasts as $_podcast) { - $podcasts[] = new \Model\Podcast($_podcast); + $podcasts[] = new \Model\Podcast((object) $_podcast); } } $newsItems = []; - $apiResult = $this->API('nieuws/overzicht?aantal=5'); + $apiResult = (object) $this->API('nieuws/overzicht?aantal=5'); foreach ($apiResult->news as $_newsItem) { - $newsItems[] = new \Model\NewsItem($_newsItem); + $newsItems[] = new \Model\NewsItem((object) $_newsItem); } return view($request->ajax() ? ($title == null ? 'partial/home_newslist_small' : 'partial/newslist_small') : ($title == null ? 'news' : 'newslist'), ['populair' => $populair, 'newsItems' => $newsItems, 'podcasts' => $podcasts, 'podcast' => $podcast, 'id' => $id, 'title' => $title, 'news' => $news, 'searchURL' => 'nieuws/zoeken']); @@ -179,7 +179,7 @@ class NewsController extends Controller public function popular() { - $apiResult = $this->API('nieuws/populair'); + $apiResult = (object) $this->API('nieuws/populair'); $news = []; foreach ($apiResult->news as $newsItem) { $news[] = new \Model\NewsItem($newsItem); @@ -190,7 +190,7 @@ class NewsController extends Controller public function regionieuws() { - $data = $this->API('nieuws/regionieuws.json'); + $data = (object) $this->API('nieuws/regionieuws.json'); return view('listen', [ 'source' => $this->API_URL . 'nieuws/regionieuws.mp3', 'title' => 'Regionieuws', diff --git a/app/Http/Controllers/PodcastController.php b/app/Http/Controllers/PodcastController.php index 9b945911..aa963b5f 100755 --- a/app/Http/Controllers/PodcastController.php +++ b/app/Http/Controllers/PodcastController.php @@ -13,7 +13,7 @@ class PodcastController extends Controller $viewData = []; if((int)$programma > 0) { $action = 'programma/' . (int)$programma; - $viewData['program'] = new \Model\Program($this->API('programma/details/' . (int)$programma)); + $viewData['program'] = new \Model\Program((object) $this->API('programma/details/' . (int)$programma)); } return $this->getPodcastList($request, $action, $viewData); @@ -22,7 +22,7 @@ class PodcastController extends Controller private function getPodcastList(Request $request, $action, $viewData = []) { $page = (int)$request->get('pagina', 1); - $apiResult = $this->API('podcast/' . $action . '?pagina=' . (int)max(1, $page) . '&aantal=8'); + $apiResult = (object) $this->API('podcast/' . $action . '?pagina=' . (int)max(1, $page) . '&aantal=8'); $podcasts = []; foreach($apiResult->podcasts as $podcast) { @@ -35,15 +35,15 @@ class PodcastController extends Controller public function podcast(Request $request, $id) { parent::registerView($request, 'podcast', $id); - $apiResult = $this->API('podcast/details/' . (int)$id); - $podcast = new \Model\Podcast($apiResult); + $apiResult = (object) $this->API('podcast/details/' . (int)$id); + $podcast = new \Model\Podcast((object) $apiResult); $podcasts = []; if($podcast->program) { - $apiResult = $this->API('podcast/programma/' . (int)$podcast->program->id . '?pagina=1&aantal=5'); + $apiResult = (object) $this->API('podcast/programma/' . (int)$podcast->program->id . '?pagina=1&aantal=5'); $podcasts = []; foreach($apiResult->podcasts as $p) { - $podcasts[] = new \Model\Podcast($p); + $podcasts[] = new \Model\Podcast((object) $p); } } return view('podcastitem', ['podcast' => $podcast, 'metadata' => $podcast->metadata, 'podcasts' => $podcasts, 'isPodcast' => true]); diff --git a/app/Http/Controllers/RadioController.php b/app/Http/Controllers/RadioController.php index 5df80817..eb74b538 100755 --- a/app/Http/Controllers/RadioController.php +++ b/app/Http/Controllers/RadioController.php @@ -11,7 +11,7 @@ class RadioController extends Controller { $start = $date ? (new \DateTime($date))->format('Y-m-d') : (new \DateTime("-2 day"))->format('Y-m-d'); $end = $date ? (new \DateTime($date))->modify('+1 day')->format('Y-m-d') : (new \DateTime("+3 day"))->format('Y-m-d'); - $apiResult = $this->API('programma/schema/periode/' . $start . '/' . $end); + $apiResult = (object) $this->API('programma/schema/periode/' . $start . '/' . $end); $schedule = []; foreach($apiResult->schedule as $program) { @@ -19,7 +19,7 @@ class RadioController extends Controller 'starttime' => self::JsonToDateTime($program->start), 'endtime' => self::JsonToDateTime($program->end), 'shift' => 0, - 'program' => new \Model\Program($program->program) + 'program' => new \Model\Program((object) $program->program) ]; } @@ -49,11 +49,11 @@ class RadioController extends Controller public function program($id) { - $apiResult = $this->API('programma/details/' . (int)$id); + $apiResult = (object) $this->API('programma/details/' . (int)$id); if($apiResult == null) { return abort(404); } - return view('radioprogram', ['program' => new \Model\Program($apiResult)]); + return view('radioprogram', ['program' => new \Model\Program((object) $apiResult)]); } public function podcast(Request $request, $id, $title = '') @@ -63,11 +63,11 @@ class RadioController extends Controller } parent::registerView($request, 'podcast', $id); - $apiResult = $this->API('podcast/details/' . (int)$id); - $podcast = new \Model\Podcast($apiResult); + $apiResult = (object) $this->API('podcast/details/' . (int)$id); + $podcast = new \Model\Podcast((object) $apiResult); $page = (int)$request->get('pagina', 1); - $apiResult = $this->API('podcast/overzicht?pagina=' . (int)max(1, $page) . '&aantal=6'); + $apiResult = (object) $this->API('podcast/overzicht?pagina=' . (int)max(1, $page) . '&aantal=6'); $podcasts = []; foreach($apiResult->podcasts as $_podcast) { @@ -83,7 +83,7 @@ class RadioController extends Controller $viewData = []; if((int)$programma > 0) { $action = 'programma/' . (int)$programma; - $viewData['program'] = new \Model\Program($this->API('programma/details/' . (int)$programma)); + $viewData['program'] = new \Model\Program((object) $this->API('programma/details/' . (int)$programma)); } return $this->getPodcastList($request, $action, array_merge($this->getSidebareData(), $viewData)); @@ -99,13 +99,13 @@ class RadioController extends Controller $programs = []; $now = new \DateTimeImmutable('2 minutes ago'); $page = (int)$request->get('pagina', 1); - $apiResult = $this->API('programma/schema/recent?pagina=' . (int)max(1, $page) . '&aantal=12'); + $apiResult = (object) $this->API('programma/schema/recent?pagina=' . (int)max(1, $page) . '&aantal=12'); foreach($apiResult->schedule as $item) { if(!$item->program->nonstop && !$item->program->rerun) { $item->start = self::JsonToDateTime($item->start); $item->end = self::JsonToDateTime($item->end); $item->current = $item->end >= $now; - $item->program = new \Model\Program($item->program); + $item->program = new \Model\Program((object) $item->program); $programs[] = $item; } } @@ -116,11 +116,11 @@ class RadioController extends Controller private function getPodcastList(Request $request, $action, $viewData = []) { $page = (int)$request->get('pagina', 1); - $apiResult = $this->API('podcast/' . $action . '?pagina=' . (int)max(1, $page) . '&aantal=12'); + $apiResult = (object) $this->API('podcast/' . $action . '?pagina=' . (int)max(1, $page) . '&aantal=12'); $podcasts = []; foreach($apiResult->podcasts as $podcast) { - $podcasts[] = new \Model\Podcast($podcast); + $podcasts[] = new \Model\Podcast((object) $podcast); } return view($request->ajax() ? 'partial/podcastitems' : 'podcastlist', array_merge($viewData, ['id' => 'items-podcasts', 'podcasts' => $podcasts, 'searchURL' => 'gemist/zoeken', 'isPodcast' => false])); diff --git a/app/Http/Controllers/SpecialController.php b/app/Http/Controllers/SpecialController.php index ac5435e8..9ca56296 100755 --- a/app/Http/Controllers/SpecialController.php +++ b/app/Http/Controllers/SpecialController.php @@ -61,11 +61,11 @@ class SpecialController extends Controller public function bart(Request $request) { $page = (int)$request->get('pagina', 1); - $apiResult = $this->API('blog/overzicht/2019-07-01/2019-07-10?pagina=' . (int)max(1, $page)); + $apiResult = (object) $this->API('blog/overzicht/2019-07-01/2019-07-10?pagina=' . (int)max(1, $page)); $blog = []; foreach($apiResult->items as $blogItem) { - $blog[] = new \Model\NewsItem($blogItem); + $blog[] = new \Model\NewsItem((object) $blogItem); } return view($request->ajax() ? 'bloglistitems' : 'bloglist', ['title' => 'De Nacht van Bart - 6 juli 2019', 'items' => $blog]); diff --git a/app/Models/Blog.php b/app/Models/Blog.php index 8da4ab7f..13d992bc 100755 --- a/app/Models/Blog.php +++ b/app/Models/Blog.php @@ -14,7 +14,23 @@ class Blog extends Model { public $url; public function __construct($data, $images = null, $podcast = null) { + // Convert arrays to objects for consistent handling + if(is_array($data)) { + $data = (object) $data; + } + parent::__construct($data); + + // Ensure id is a string, not an array + if(is_array($this->id)) { + $this->id = $this->id[0] ?? ''; + } + + // Ensure title is a string, not an array + if(is_array($this->title)) { + $this->title = $this->title[0] ?? ''; + } + parent::ConvertToDateTime($this->start_date); parent::ConvertToDateTime($this->end_date); diff --git a/app/Models/CalendarEvent.php b/app/Models/CalendarEvent.php index 3422aaa6..d06b443e 100755 --- a/app/Models/CalendarEvent.php +++ b/app/Models/CalendarEvent.php @@ -18,7 +18,23 @@ class CalendarEvent extends Model { public $tags; public function __construct($data, $images = null, $podcast = null) { + // Convert arrays to objects for consistent handling + if(is_array($data)) { + $data = (object) $data; + } + parent::__construct($data); + + // Ensure id is a string, not an array + if(is_array($this->id)) { + $this->id = $this->id[0] ?? ''; + } + + // Ensure title is a string, not an array + if(is_array($this->title)) { + $this->title = $this->title[0] ?? ''; + } + parent::ConvertToDateTime($this->starts); parent::ConvertToDateTime($this->ends); @@ -26,7 +42,7 @@ class CalendarEvent extends Model { if(isset($data->keywords)) { if(is_array($data->keywords)) { $this->keywords = $data->keywords; - } else if(trim($data->keywords)) { + } else if(trim((string) $data->keywords)) { $this->keywords = explode(' ', $data->keywords); } } @@ -47,7 +63,7 @@ class CalendarEvent extends Model { } } - $this->url = "/agenda/{$this->id}/" . parent::url_slug($this->title); + $this->url = "/agenda/{$this->id}/" . parent::url_slug($this->title ?? ''); $this->metadata = (new MetaData()) ->set('title', $this->title) ->set('description', strip_tags($this->excerpt())) diff --git a/app/Models/JobOpening.php b/app/Models/JobOpening.php index b1d9147e..f20a2bc3 100755 --- a/app/Models/JobOpening.php +++ b/app/Models/JobOpening.php @@ -12,7 +12,23 @@ class JobOpening extends Model { public $url; public function __construct($data, $images = null, $podcast = null) { + // Convert arrays to objects for consistent handling + if(is_array($data)) { + $data = (object) $data; + } + parent::__construct($data); + + // Ensure id is a string, not an array + if(is_array($this->id)) { + $this->id = $this->id[0] ?? ''; + } + + // Ensure title is a string, not an array + if(is_array($this->title)) { + $this->title = $this->title[0] ?? ''; + } + parent::ConvertToDateTime($this->starts); parent::ConvertToDateTime($this->ends); @@ -20,7 +36,7 @@ class JobOpening extends Model { if(isset($data->keywords)) { if(is_array($data->keywords)) { $this->keywords = $data->keywords; - } else if(trim($data->keywords)) { + } else if(trim((string) $data->keywords)) { $this->keywords = explode(' ', $data->keywords); } } diff --git a/app/Models/Kerkdienst.php b/app/Models/Kerkdienst.php index edef34a7..be33a5de 100755 --- a/app/Models/Kerkdienst.php +++ b/app/Models/Kerkdienst.php @@ -7,7 +7,18 @@ class KerkdienstInstance extends Model { public $start; public function __construct($data) { + // Convert arrays to objects for consistent handling + if(is_array($data)) { + $data = (object) $data; + } + parent::__construct($data); + + // Ensure name is a string, not an array + if(is_array($this->name)) { + $this->name = $this->name[0] ?? ''; + } + parent::ConvertToDateTime($this->start); } } diff --git a/app/Models/NewsImage.php b/app/Models/NewsImage.php index 1d455d6d..dd849f0a 100755 --- a/app/Models/NewsImage.php +++ b/app/Models/NewsImage.php @@ -9,8 +9,18 @@ class NewsImage extends Model { public $url; public function __construct($data, $urlPrefix = '/') { + // Convert arrays to objects for consistent handling + if(is_array($data)) { + $data = (object) $data; + } + parent::__construct($data); + // Ensure title is a string, not an array + if(is_array($this->title)) { + $this->title = $this->title[0] ?? ''; + } + // Deserialisatie van JSON heeft url in data, // lezen uit database heeft file en (als het goed is) urlPrefix if(isset($data->file)) { diff --git a/app/Models/NewsItem.php b/app/Models/NewsItem.php index 710794a6..1f3eaab0 100755 --- a/app/Models/NewsItem.php +++ b/app/Models/NewsItem.php @@ -29,7 +29,23 @@ class NewsItem extends Model { public $metadata; public function __construct($data, $images = null, $podcast = null) { + // Convert arrays to objects for consistent handling + if(is_array($data)) { + $data = (object) $data; + } + parent::__construct($data); + + // Ensure id is a string, not an array + if(is_array($this->id)) { + $this->id = $this->id[0] ?? ''; + } + + // Ensure title is a string, not an array + if(is_array($this->title)) { + $this->title = $this->title[0] ?? ''; + } + parent::ConvertToDateTime($this->published); parent::ConvertToDateTime($this->edited); @@ -43,9 +59,9 @@ class NewsItem extends Model { { if(is_object($data->source)) { - $this->source = new \Model\NewsSource($data->source->title, $data->source->url, $data->source->show); + $this->source = new \Model\NewsSource($data->source->title ?? null, $data->source->url ?? null, $data->source->show ?? false); } else if($data->source) { - $this->source = new \Model\NewsSource($data->source, $data->source_url, $data->showsource); + $this->source = new \Model\NewsSource($data->source, $data->source_url ?? null, $data->showsource ?? false); } } @@ -59,33 +75,45 @@ class NewsItem extends Model { if(isset($data->keywords)) { if(is_array($data->keywords) || is_object($data->keywords)) { $this->keywords = $data->keywords; - } else if(trim($data->keywords)) { + } else if(trim((string) $data->keywords)) { $this->keywords = explode(' ', $data->keywords); } } if(isset($data->region)) { if(is_object($data->region)) { - $this->region = new \Model\NewsRegion($data->region->title, $data->region->slug); + $this->region = new \Model\NewsRegion($data->region->title ?? null, $data->region->slug ?? null); } else { - $this->region = new \Model\NewsRegion($data->region, $data->region_slug); + $this->region = new \Model\NewsRegion($data->region, $data->region_slug ?? null); } } if(isset($data->theme)) { if(is_object($data->theme)) { - $this->theme = new \Model\NewsRegion($data->theme->title, $data->theme->slug); + $this->theme = new \Model\NewsRegion($data->theme->title ?? null, $data->theme->slug ?? null); } else { - $this->theme = new \Model\NewsRegion($data->theme, $data->theme_slug); + $this->theme = new \Model\NewsRegion($data->theme, $data->theme_slug ?? null); } } if(isset($data->tags)) { + $this->tags = []; foreach($data->tags as $tag) { - $this->theme = new \Model\NewsRegion($tag->titel, $tag->slug); + if(is_object($tag)) { + $this->tags[] = new \Model\NewsRegion($tag->titel ?? null, $tag->slug ?? null); + } elseif(is_array($tag)) { + $this->tags[] = new \Model\NewsRegion($tag['titel'] ?? null, $tag['slug'] ?? null); + } } } + // Ensure content is iterable for views - convert string to empty array + if(isset($this->content) && is_string($this->content)) { + $this->content = []; + } elseif(!isset($this->content)) { + $this->content = []; + } + $images = ($images != null) ? $images : (isset($data->images) ? $data->images : null); if($images) { @@ -95,7 +123,7 @@ class NewsItem extends Model { } } - $this->url = "/nieuws/{$this->id}/" . parent::url_slug($this->title); + $this->url = "/nieuws/{$this->id}/" . parent::url_slug($this->title ?? ''); $this->metadata = (new MetaData()) ->set('title', $this->title) ->set('description', strip_tags($this->excerpt())) @@ -108,11 +136,17 @@ class NewsItem extends Model { } public function excerpt() { + // Handle case where content might be an array of blocks instead of a string + if(is_array($this->content) || is_object($this->content)) { + return '

'; + } + $hasImages = isset($this->images) && count($this->images) > 0; $maxLength = $hasImages ? 200 : 500; + $text = (string) $this->content; return '

' . - substr($this->content, 0, $maxLength) . - (strlen($this->content) > $maxLength ? '...' : '') . + substr($text, 0, $maxLength) . + (strlen($text) > $maxLength ? '...' : '') . '

'; } } diff --git a/app/Models/NewsSource.php b/app/Models/NewsSource.php index fa946c0a..e7d48788 100755 --- a/app/Models/NewsSource.php +++ b/app/Models/NewsSource.php @@ -4,11 +4,13 @@ namespace Model; class NewsRegion { public $title; + public $titel; // Support both English and Dutch spelling public $slug; - public function __construct($title, $slug = null) { + public function __construct($title = null, $slug = null) { $this->title = $title; - $this->slug = $slug ? $slug : strtolower(str_replace(' ', '', $title)); + $this->titel = $title; // Also set titel for compatibility with API responses + $this->slug = $slug ? $slug : ($title ? strtolower(str_replace(' ', '', $title)) : null); } } diff --git a/app/Models/Podcast.php b/app/Models/Podcast.php index ec6107d4..488918a9 100755 --- a/app/Models/Podcast.php +++ b/app/Models/Podcast.php @@ -21,10 +21,31 @@ class Podcast extends Model { private $key; public function __construct($data) { + // Convert arrays to objects for consistent handling + if(is_array($data)) { + $data = (object) $data; + } + parent::__construct($data); + + // Ensure id is a string, not an array + if(is_array($this->id)) { + $this->id = $this->id[0] ?? ''; + } + + // Ensure title is a string, not an array + if(is_array($this->title)) { + $this->title = $this->title[0] ?? ''; + } + + // Ensure image is not an array from API + if(is_array($this->image)) { + $this->image = null; + } + parent::ConvertToDateTime($this->created); - $this->url = '/' . $this->id . '/' . parent::url_slug($this->title) . '.mp3'; + $this->url = '/' . $this->id . '/' . parent::url_slug($this->title ?? '') . '.mp3'; if($this->soundfilename) { // Only generate when not constructing from a JSON object $this->key = sha1($this->id . ':' . date('Y-m-d') . ':' . $this->soundfilename); @@ -36,7 +57,15 @@ class Podcast extends Model { if(is_object($data->program)) { $this->program = new \Model\Program($data->program); } elseif($data->program) { - $this->program = new \Model\Program(['id' => $data->program, 'name' => $data->program_name, 'description' => $data->program_description]); + $program_name = $data->program_name ?? null; + if(is_array($program_name)) { + $program_name = $program_name[0] ?? null; + } + $program_desc = $data->program_description ?? null; + if(is_array($program_desc)) { + $program_desc = $program_desc[0] ?? null; + } + $this->program = new \Model\Program((object) ['id' => $data->program, 'name' => $program_name, 'description' => $program_desc]); } } @@ -44,7 +73,7 @@ class Podcast extends Model { $imagedata = new \stdClass(); $imagedata->id = $this->id; $imagedata->file = $data->imagefile; - $imagedata->title = $data->imagecaption; + $imagedata->title = $data->imagecaption ?? null; $this->image = new NewsImage($imagedata, '/img/podcast/'); } diff --git a/app/Models/Program.php b/app/Models/Program.php index 0d398ca7..0ee6e9fd 100755 --- a/app/Models/Program.php +++ b/app/Models/Program.php @@ -18,10 +18,29 @@ class Program extends Model { public $next; public function __construct($data) { + // Convert arrays to objects for consistent handling + if(is_array($data)) { + $data = (object) $data; + } + parent::__construct($data); + // Ensure id is a string, not an array + if(is_array($this->id)) { + $this->id = $this->id[0] ?? ''; + } + + // Ensure name is a string, not an array + if(is_array($this->name)) { + $this->name = $this->name[0] ?? ''; + } + if(isset($data->suffix) && $data->suffix) { - $this->name .= ' ' . $data->suffix; + $suffix = $data->suffix; + if(is_array($suffix)) { + $suffix = $suffix[0] ?? ''; + } + $this->name .= ' ' . $suffix; } if($this->recent && $this->recent) { @@ -37,7 +56,7 @@ class Program extends Model { } } - if(isset($data->email) && ($mailComma = strpos($data->email, ',')) !== false) { + if(isset($data->email) && ($mailComma = strpos((string) $data->email, ',')) !== false) { $this->email = substr($data->email, 0, $mailComma); } @@ -46,7 +65,7 @@ class Program extends Model { $this->rerun = $data->state == 3; } - $this->url = "/{$this->id}/" . parent::url_slug($this->name); + $this->url = "/{$this->id}/" . parent::url_slug($this->name ?? ''); } public function isSpecial() { diff --git a/app/Models/ProgramHost.php b/app/Models/ProgramHost.php index 7615fb43..c4e7ca9c 100755 --- a/app/Models/ProgramHost.php +++ b/app/Models/ProgramHost.php @@ -6,5 +6,19 @@ class ProgramHost extends Model { public $id; public $name; public $email; + + public function __construct($data) { + // Convert arrays to objects for consistent handling + if(is_array($data)) { + $data = (object) $data; + } + + parent::__construct($data); + + // Ensure name is a string, not an array + if(is_array($this->name)) { + $this->name = $this->name[0] ?? ''; + } + } } diff --git a/app/Models/Track.php b/app/Models/Track.php index 005acb7a..b6ad3a4b 100755 --- a/app/Models/Track.php +++ b/app/Models/Track.php @@ -12,7 +12,24 @@ class Track extends Model { public $isLayout; public function __construct($data) { + // Convert arrays to objects for consistent handling + if(is_array($data)) { + $data = (object) $data; + } + parent::__construct($data); + + // Ensure string fields are not arrays + if(is_array($this->title)) { + $this->title = $this->title[0] ?? ''; + } + if(is_array($this->itemCode)) { + $this->itemCode = $this->itemCode[0] ?? ''; + } + if(is_array($this->artist)) { + $this->artist = $this->artist[0] ?? ''; + } + parent::ConvertToDateTime($this->start); parent::ConvertToDateTime($this->ends); $isLayout = $this->isLayout();