From 9698f9b103069edbff1cdca61309cc47ee5cb948 Mon Sep 17 00:00:00 2001 From: NH Gooi Date: Sun, 29 Sep 2024 19:05:03 +0200 Subject: [PATCH] Model classes van API repo naar deze repo verplaatst --- app/Models/Blog.php | 23 +++++ app/Models/CalendarEvent.php | 67 +++++++++++++++ app/Models/JobOpening.php | 61 +++++++++++++ app/Models/Kerkdienst.php | 26 ++++++ app/Models/MetaData.php | 35 ++++++++ app/Models/Model.php | 64 ++++++++++++++ app/Models/NewsImage.php | 20 +++++ app/Models/NewsItem.php | 118 ++++++++++++++++++++++++++ app/Models/NewsSource.php | 25 ++++++ app/Models/Podcast.php | 94 ++++++++++++++++++++ app/Models/Program.php | 55 ++++++++++++ app/Models/ProgramHost.php | 10 +++ app/Models/Track.php | 47 ++++++++++ composer.json | 2 +- vendor/composer/autoload_classmap.php | 26 +++--- vendor/composer/autoload_psr4.php | 2 +- vendor/composer/autoload_static.php | 28 +++--- 17 files changed, 674 insertions(+), 29 deletions(-) create mode 100644 app/Models/Blog.php create mode 100644 app/Models/CalendarEvent.php create mode 100644 app/Models/JobOpening.php create mode 100644 app/Models/Kerkdienst.php create mode 100644 app/Models/MetaData.php create mode 100644 app/Models/Model.php create mode 100644 app/Models/NewsImage.php create mode 100644 app/Models/NewsItem.php create mode 100644 app/Models/NewsSource.php create mode 100644 app/Models/Podcast.php create mode 100644 app/Models/Program.php create mode 100644 app/Models/ProgramHost.php create mode 100644 app/Models/Track.php diff --git a/app/Models/Blog.php b/app/Models/Blog.php new file mode 100644 index 00000000..8da4ab7f --- /dev/null +++ b/app/Models/Blog.php @@ -0,0 +1,23 @@ +start_date); + parent::ConvertToDateTime($this->end_date); + + $this->url = "/blog/{$this->id}/" . parent::url_slug($this->title); + } +} diff --git a/app/Models/CalendarEvent.php b/app/Models/CalendarEvent.php new file mode 100644 index 00000000..3422aaa6 --- /dev/null +++ b/app/Models/CalendarEvent.php @@ -0,0 +1,67 @@ +starts); + parent::ConvertToDateTime($this->ends); + + $this->keywords = null; + if(isset($data->keywords)) { + if(is_array($data->keywords)) { + $this->keywords = $data->keywords; + } else if(trim($data->keywords)) { + $this->keywords = explode(' ', $data->keywords); + } + } + + if($podcast) + { + $this->podcast = new \Model\Podcast($podcast); + } else if(isset($data->podcast) && $data->podcast) { + $this->podcast = new \Model\Podcast($data->podcast); + } + + $images = ($images != null) ? $images + : (isset($data->images) ? $data->images : null); + if($images) { + $this->images = []; + foreach($images as $image) { + $this->images[] = new NewsImage($image, '/img/news/'); + } + } + + $this->url = "/agenda/{$this->id}/" . parent::url_slug($this->title); + $this->metadata = (new MetaData()) + ->set('title', $this->title) + ->set('description', strip_tags($this->excerpt())) + ->set('image', isset($this->images) && count($this->images) ? $this->images[0]->url : null ) + ->set('audio', isset($this->podcast) ? $this->podcast->url : null) + ; + } + + public function excerpt() { + $hasImages = isset($this->images) && count($this->images) > 0; + $maxLength = $hasImages ? 200 : 500; + return '

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

'; + } +} diff --git a/app/Models/JobOpening.php b/app/Models/JobOpening.php new file mode 100644 index 00000000..b1d9147e --- /dev/null +++ b/app/Models/JobOpening.php @@ -0,0 +1,61 @@ +starts); + parent::ConvertToDateTime($this->ends); + + $this->keywords = null; + if(isset($data->keywords)) { + if(is_array($data->keywords)) { + $this->keywords = $data->keywords; + } else if(trim($data->keywords)) { + $this->keywords = explode(' ', $data->keywords); + } + } + + if($podcast) + { + $this->podcast = new \Model\Podcast($podcast); + } else if(isset($data->podcast) && $data->podcast) { + $this->podcast = new \Model\Podcast($data->podcast); + } + + $images = ($images != null) ? $images + : (isset($data->images) ? $data->images : null); + if($images) { + $this->images = []; + foreach($images as $image) { + $this->images[] = new NewsImage($image, '/img/news/'); + } + } + + $this->url = "/vacatures/{$this->id}/" . parent::url_slug($this->title); + $this->metadata = (new MetaData()) + ->set('title', $this->title) + ->set('description', strip_tags($this->excerpt())) + ->set('image', isset($this->images) && count($this->images) ? $this->images[0]->url : null ) + ->set('audio', isset($this->podcast) ? $this->podcast->url : null) + ; + } + + public function excerpt() { + $hasImages = count($this->images) > 0; + $maxLength = $hasImages ? 200 : 500; + return '

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

'; + } +} diff --git a/app/Models/Kerkdienst.php b/app/Models/Kerkdienst.php new file mode 100644 index 00000000..edef34a7 --- /dev/null +++ b/app/Models/Kerkdienst.php @@ -0,0 +1,26 @@ +start); + } +} + +class Kerkdienst extends Model { + public $isRunning; + public $previous; + public $next; + + public function __construct($data) { + // parent::__construct($data); + $this->isRunning = $data->isRunning; + $this->previous = new KerkdienstInstance($data->previous); + $this->next = new KerkdienstInstance($data->next); + } +} diff --git a/app/Models/MetaData.php b/app/Models/MetaData.php new file mode 100644 index 00000000..de36d80e --- /dev/null +++ b/app/Models/MetaData.php @@ -0,0 +1,35 @@ + 'article', 'locale' => 'nl-nl']; + + public function set($prop, $val) { + if($val) { + $this->data[$prop] = $val; + } + return $this; + } + + public function append($prop, $val) { + if(array_key_exists($prop, $this->data)) { + $this->data[$prop] .= $val; + } + return $this; + } + + public function prepend($prop, $val) { + if(array_key_exists($prop, $this->data)) { + $this->data[$prop] = $val . $this->data[$prop]; + } + return $this; + } + + public function metaTags() { + foreach($this->data as $prop => $val) { + if($val) { + echo "\n"; + } + } + } +} diff --git a/app/Models/Model.php b/app/Models/Model.php new file mode 100644 index 00000000..fccf664d --- /dev/null +++ b/app/Models/Model.php @@ -0,0 +1,64 @@ +timezone) + ? new \DateTimeImmutable($field->date, new \DateTimeZone($field->timezone)) + : (new \DateTimeImmutable($field->date)); + } else { + // If $field is not an object, assume it's a plain, valid, string + $field = new \DateTime($field); + } + + if($field === false || $field->getTimestamp() <= 0) { + // If field had data but is invalid DateTime or is 0000-00-00 00:00, set it to null. + $field = null; + } else { + // If valid, return local timezone + $field->setTimezone(new \DateTimeZone("Europe/Amsterdam")); + } + } + } + + public function __construct($data) { + $class = get_class($this); + foreach($data as $key => $val) { + if(property_exists($class, $key)) { + $this->$key = is_string($val) ? stripslashes($val) : $val; + } + } + } + + public function url_slug($text) { + // Alles naar kleine letter + $text = strtolower($text); + + // Vervang accent-tekens door niet-geaccentueerde versies + // $text = iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $text); + $search = explode(",","ç,æ,œ,á,é,í,ó,ú,à,è,ì,ò,ù,ä,ë,ï,ö,ü,ÿ,â,ê,î,ô,û,å,e,i,ø,u"); + $replace = explode(",","c,ae,oe,a,e,i,o,u,a,e,i,o,u,a,e,i,o,u,y,a,e,i,o,u,a,e,i,o,u"); + $text = str_replace($search, $replace, $text); + + // Verwijder alle woorden van 3 letters, behalve BEL (BEL-combinatie etc) + if(strlen($text) > 3) { + $text = preg_replace('/\b(?!bel|fm|nh)([a-z]{1,3})\b/u', '', $text); + } + + // Vervang alles dat niet een woord-karakter is (letter, cijfer), een streepje of spatie + if(strlen($text) > 3) { + $text = preg_replace('/[^\w_\-\s]/', '', $text); + } + + // Reeksen van één of meer spaties / streepjes vervangen door een enkel streepje + $text = preg_replace('/[\-\s]+/', '-', $text); + + // Verwijder alle witruimte / streepjes aan begin en eind + return trim(strtolower($text), '-'); + } +} diff --git a/app/Models/NewsImage.php b/app/Models/NewsImage.php new file mode 100644 index 00000000..1d455d6d --- /dev/null +++ b/app/Models/NewsImage.php @@ -0,0 +1,20 @@ +file)) { + $this->url = $urlPrefix . $data->file; + } + } +} diff --git a/app/Models/NewsItem.php b/app/Models/NewsItem.php new file mode 100644 index 00000000..da3aba41 --- /dev/null +++ b/app/Models/NewsItem.php @@ -0,0 +1,118 @@ +published); + parent::ConvertToDateTime($this->edited); + + if($this->edited && ($this->edited->getTimestamp() - $this->published->getTimestamp() < 1800 /* == 30 minutes */)) { + // If last edit was within grace period, consider it unedited (note: currently RES always saves edited == published on creation) + $this->edited = null; + } + + $this->source = null; + if(isset($data->source)) + { + if(is_object($data->source)) + { + $this->source = new \Model\NewsSource($data->source->title, $data->source->url, $data->source->show); + } else if($data->source) { + $this->source = new \Model\NewsSource($data->source, $data->source_url, $data->showsource); + } + } + + if($podcast) { + $this->podcast = new \Model\Podcast($podcast); + } else if(isset($data->podcast) && $data->podcast) { + $this->podcast = new \Model\Podcast($data->podcast); + } + + $this->keywords = null; + if(isset($data->keywords)) { + if(is_array($data->keywords) || is_object($data->keywords)) { + $this->keywords = $data->keywords; + } else if(trim($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); + } else { + $this->region = new \Model\NewsRegion($data->region, $data->region_slug); + } + } + + if(isset($data->theme)) { + if(is_object($data->theme)) { + $this->theme = new \Model\NewsRegion($data->theme->title, $data->theme->slug); + } else { + $this->theme = new \Model\NewsRegion($data->theme, $data->theme_slug); + } + } + + if(isset($data->tags)) { + foreach($data->tags as $tag) { + $this->theme = new \Model\NewsRegion($tag->titel, $tag->slug); + } + } + + $images = ($images != null) ? $images + : (isset($data->images) ? $data->images : null); + if($images) { + $this->images = []; + foreach($images as $image) { + $this->images[] = new NewsImage($image, '/img/news/'); + } + } + + $this->url = "/nieuws/{$this->id}/" . parent::url_slug($this->title); + $this->metadata = (new MetaData()) + ->set('title', $this->title) + ->set('description', strip_tags($this->excerpt())) + ->set('image', isset($this->images) && count($this->images) ? $this->images[0]->url : null ) + ->set('video', isset($this->video) ? $this->video : null) + ->set('audio', isset($this->podcast) ? $this->podcast->url : null) + ->set('article:published_time', $this->published->format('r')) + ->set('article:modified_time', $this->edited ? $this->edited->format('r') : null) + ; + } + + public function excerpt() { + $hasImages = isset($this->images) && count($this->images) > 0; + $maxLength = $hasImages ? 200 : 500; + return '

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

'; + } +} diff --git a/app/Models/NewsSource.php b/app/Models/NewsSource.php new file mode 100644 index 00000000..fa946c0a --- /dev/null +++ b/app/Models/NewsSource.php @@ -0,0 +1,25 @@ +title = $title; + $this->slug = $slug ? $slug : strtolower(str_replace(' ', '', $title)); + } +} + +class NewsSource { + public $title; + public $url; + public $show; + + public function __construct($title, $url, $show) { + $this->title = $title; + $this->url = $url; + $this->show = $show; + } +} diff --git a/app/Models/Podcast.php b/app/Models/Podcast.php new file mode 100644 index 00000000..ec6107d4 --- /dev/null +++ b/app/Models/Podcast.php @@ -0,0 +1,94 @@ +created); + + $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); + $this->auth = $this->key; + } + + if(isset($data->program)) { + $this->program = null; + 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]); + } + } + + if(isset($data->imagefile)) { + $imagedata = new \stdClass(); + $imagedata->id = $this->id; + $imagedata->file = $data->imagefile; + $imagedata->title = $data->imagecaption; + $this->image = new NewsImage($imagedata, '/img/podcast/'); + } + + if(isset($data->metadata, $data->metadata->waveform)){ + $this->waveform = $data->metadata->waveform; + } + + $this->metadata = (new MetaData()) + ->set('title', $this->title) + ->set('description', strip_tags($this->excerpt())) + ->set('image', isset($this->image) ? $this->image->url : null ) + ->set('audio', $this->url) + ; + } + + public function titleWithoutProgram() { + if(!$this->program) { return $this->title; } + return trim(str_replace($this->program->name, '', $this->title), "- \t\n\r\0\x0B"); + } + + public function isValidAuth($key) { + return ($key == $this->key); + } + + public function getSoundfile() { + return '/var/audio/podcast/' . $this->soundfilename; + } + + public function formatDuration() { + $seconds = $this->duration / 1000; + $milliseconds = $this->duration % 1000; + + $hours = ($seconds > 3600) ? floor($seconds / 3600) : 0; + $seconds %= 3600; + return str_pad($hours, 2, '0', STR_PAD_LEFT) + . gmdate(':i:s', $seconds) + ;//. ($milliseconds ? ".$milliseconds" : '') ; + } + + public function excerpt() { + $maxLength = 500; + return '

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

'; + } +} diff --git a/app/Models/Program.php b/app/Models/Program.php new file mode 100644 index 00000000..0d398ca7 --- /dev/null +++ b/app/Models/Program.php @@ -0,0 +1,55 @@ +suffix) && $data->suffix) { + $this->name .= ' ' . $data->suffix; + } + + if($this->recent && $this->recent) { + foreach($this->recent as &$recent) { + parent::ConvertToDateTime($recent->starts); + parent::ConvertToDateTime($recent->ends); + } + } + if($this->next && $this->next) { + foreach($this->next as &$next) { + parent::ConvertToDateTime($next->starts); + parent::ConvertToDateTime($next->ends); + } + } + + if(isset($data->email) && ($mailComma = strpos($data->email, ',')) !== false) { + $this->email = substr($data->email, 0, $mailComma); + } + + if(isset($data->state)) { + $this->nonstop = $data->state == 0; + $this->rerun = $data->state == 3; + } + + $this->url = "/{$this->id}/" . parent::url_slug($this->name); + } + + public function isSpecial() { + return ($this->priority < 2); + } +} diff --git a/app/Models/ProgramHost.php b/app/Models/ProgramHost.php new file mode 100644 index 00000000..7615fb43 --- /dev/null +++ b/app/Models/ProgramHost.php @@ -0,0 +1,10 @@ +start); + parent::ConvertToDateTime($this->ends); + $isLayout = $this->isLayout(); + } + + private static $IDENTS = ['UURSLUITER' => 'Nieuws', 'NIEUWSOPEN ' => 'Nieuws', 'ANWB' => 'Verkeersinformatie', 'REGIO' => 'Regionieuws', 'CB' => 'Reclame']; + + public function isLayout() { + foreach(self::$IDENTS as $ident => $display) { + if(substr($this->itemCode, 0, strlen($ident)) == $ident || substr($this->title, 0, strlen($ident)) == $ident) { + $this->title = $display; + $this->artist = ""; + $this->itemCode = '_' . $this->itemCode; + return false; + } + } + + if(strlen($this->itemCode) > 0 && ($this->itemCode[0] == 'V')) { + return true; + } + + return false; + } + + public function ends($ends = null) { + $this->ends = $ends; + } + + public function secondsRemaining() { + return ($this->ends) ? ($this->ends->getTimestamp() - time()) : -1; + } +} diff --git a/composer.json b/composer.json index b15a9455..39311144 100644 --- a/composer.json +++ b/composer.json @@ -27,7 +27,7 @@ "Database\\Factories\\": "database/factories/", "Database\\Seeders\\": "database/seeders/", "Helpers\\": "app/Helpers", - "Model\\": "/srv/api/common/classes" + "Model\\": "app/Models" } }, "autoload-dev": { diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php index f7612f33..b9322486 100644 --- a/vendor/composer/autoload_classmap.php +++ b/vendor/composer/autoload_classmap.php @@ -2646,19 +2646,19 @@ return array( 'Mockery\\Undefined' => $vendorDir . '/mockery/mockery/library/Mockery/Undefined.php', 'Mockery\\VerificationDirector' => $vendorDir . '/mockery/mockery/library/Mockery/VerificationDirector.php', 'Mockery\\VerificationExpectation' => $vendorDir . '/mockery/mockery/library/Mockery/VerificationExpectation.php', - 'Model\\Blog' => '/srv/api/common/classes/Blog.php', - 'Model\\CalendarEvent' => '/srv/api/common/classes/CalendarEvent.php', - 'Model\\JobOpening' => '/srv/api/common/classes/JobOpening.php', - 'Model\\Kerkdienst' => '/srv/api/common/classes/Kerkdienst.php', - 'Model\\MetaData' => '/srv/api/common/classes/MetaData.php', - 'Model\\Model' => '/srv/api/common/classes/Model.php', - 'Model\\NewsImage' => '/srv/api/common/classes/NewsImage.php', - 'Model\\NewsItem' => '/srv/api/common/classes/NewsItem.php', - 'Model\\NewsSource' => '/srv/api/common/classes/NewsSource.php', - 'Model\\Podcast' => '/srv/api/common/classes/Podcast.php', - 'Model\\Program' => '/srv/api/common/classes/Program.php', - 'Model\\ProgramHost' => '/srv/api/common/classes/ProgramHost.php', - 'Model\\Track' => '/srv/api/common/classes/Track.php', + 'Model\\Blog' => $baseDir . '/app/Models/Blog.php', + 'Model\\CalendarEvent' => $baseDir . '/app/Models/CalendarEvent.php', + 'Model\\JobOpening' => $baseDir . '/app/Models/JobOpening.php', + 'Model\\Kerkdienst' => $baseDir . '/app/Models/Kerkdienst.php', + 'Model\\MetaData' => $baseDir . '/app/Models/MetaData.php', + 'Model\\Model' => $baseDir . '/app/Models/Model.php', + 'Model\\NewsImage' => $baseDir . '/app/Models/NewsImage.php', + 'Model\\NewsItem' => $baseDir . '/app/Models/NewsItem.php', + 'Model\\NewsSource' => $baseDir . '/app/Models/NewsSource.php', + 'Model\\Podcast' => $baseDir . '/app/Models/Podcast.php', + 'Model\\Program' => $baseDir . '/app/Models/Program.php', + 'Model\\ProgramHost' => $baseDir . '/app/Models/ProgramHost.php', + 'Model\\Track' => $baseDir . '/app/Models/Track.php', 'Monolog\\Attribute\\AsMonologProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Attribute/AsMonologProcessor.php', 'Monolog\\DateTimeImmutable' => $vendorDir . '/monolog/monolog/src/Monolog/DateTimeImmutable.php', 'Monolog\\ErrorHandler' => $vendorDir . '/monolog/monolog/src/Monolog/ErrorHandler.php', diff --git a/vendor/composer/autoload_psr4.php b/vendor/composer/autoload_psr4.php index 0f883695..1723d140 100644 --- a/vendor/composer/autoload_psr4.php +++ b/vendor/composer/autoload_psr4.php @@ -56,7 +56,7 @@ return array( 'PhpOption\\' => array($vendorDir . '/phpoption/phpoption/src/PhpOption'), 'NunoMaduro\\Collision\\' => array($vendorDir . '/nunomaduro/collision/src'), 'Monolog\\' => array($vendorDir . '/monolog/monolog/src/Monolog'), - 'Model\\' => array('/srv/api/common/classes'), + 'Model\\' => array($baseDir . '/app/Models'), 'League\\MimeTypeDetection\\' => array($vendorDir . '/league/mime-type-detection/src'), 'League\\Flysystem\\' => array($vendorDir . '/league/flysystem/src'), 'League\\Config\\' => array($vendorDir . '/league/config/src'), diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index 6fb7ec5d..79e4dd95 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -381,7 +381,7 @@ class ComposerStaticInit5216a35d72a5119d2f4646cd700f802d ), 'Model\\' => array ( - 0 => '/srv/api/common/classes', + 0 => __DIR__ . '/../..' . '/app/Models', ), 'League\\MimeTypeDetection\\' => array ( @@ -3169,19 +3169,19 @@ class ComposerStaticInit5216a35d72a5119d2f4646cd700f802d 'Mockery\\Undefined' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery/Undefined.php', 'Mockery\\VerificationDirector' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery/VerificationDirector.php', 'Mockery\\VerificationExpectation' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery/VerificationExpectation.php', - 'Model\\Blog' => '/srv/api/common/classes/Blog.php', - 'Model\\CalendarEvent' => '/srv/api/common/classes/CalendarEvent.php', - 'Model\\JobOpening' => '/srv/api/common/classes/JobOpening.php', - 'Model\\Kerkdienst' => '/srv/api/common/classes/Kerkdienst.php', - 'Model\\MetaData' => '/srv/api/common/classes/MetaData.php', - 'Model\\Model' => '/srv/api/common/classes/Model.php', - 'Model\\NewsImage' => '/srv/api/common/classes/NewsImage.php', - 'Model\\NewsItem' => '/srv/api/common/classes/NewsItem.php', - 'Model\\NewsSource' => '/srv/api/common/classes/NewsSource.php', - 'Model\\Podcast' => '/srv/api/common/classes/Podcast.php', - 'Model\\Program' => '/srv/api/common/classes/Program.php', - 'Model\\ProgramHost' => '/srv/api/common/classes/ProgramHost.php', - 'Model\\Track' => '/srv/api/common/classes/Track.php', + 'Model\\Blog' => __DIR__ . '/../..' . '/app/Models/Blog.php', + 'Model\\CalendarEvent' => __DIR__ . '/../..' . '/app/Models/CalendarEvent.php', + 'Model\\JobOpening' => __DIR__ . '/../..' . '/app/Models/JobOpening.php', + 'Model\\Kerkdienst' => __DIR__ . '/../..' . '/app/Models/Kerkdienst.php', + 'Model\\MetaData' => __DIR__ . '/../..' . '/app/Models/MetaData.php', + 'Model\\Model' => __DIR__ . '/../..' . '/app/Models/Model.php', + 'Model\\NewsImage' => __DIR__ . '/../..' . '/app/Models/NewsImage.php', + 'Model\\NewsItem' => __DIR__ . '/../..' . '/app/Models/NewsItem.php', + 'Model\\NewsSource' => __DIR__ . '/../..' . '/app/Models/NewsSource.php', + 'Model\\Podcast' => __DIR__ . '/../..' . '/app/Models/Podcast.php', + 'Model\\Program' => __DIR__ . '/../..' . '/app/Models/Program.php', + 'Model\\ProgramHost' => __DIR__ . '/../..' . '/app/Models/ProgramHost.php', + 'Model\\Track' => __DIR__ . '/../..' . '/app/Models/Track.php', 'Monolog\\Attribute\\AsMonologProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Attribute/AsMonologProcessor.php', 'Monolog\\DateTimeImmutable' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/DateTimeImmutable.php', 'Monolog\\ErrorHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/ErrorHandler.php',