diff --git a/app/Http/Controllers/CalendarController.php b/app/Http/Controllers/CalendarController.php index 47749224..ffb32f65 100644 --- a/app/Http/Controllers/CalendarController.php +++ b/app/Http/Controllers/CalendarController.php @@ -6,56 +6,10 @@ use \Illuminate\Http\Request; class CalendarController extends Controller { - private $events = [ - 1 => [ - 'id' => 1, - 'title' => 'Seinconcert Hilversum', - 'region' => 'Hilversum', - 'content' => 'Vrijdag 19 april treedt het Barbican Quartet op in de serie Seinconcerten in Hilversum. Op het programma staan werken van Schubert, Ravel en Britten.', - 'starts' => '16-04-2024', - 'ends' => '19-04-2024', - 'url' => 'seinconcert-hilversum', - 'images' => [ - ['url' => '/img/news/rHjgm6CM0D.jpg'] - ] - ], - 2 => [ - 'id' => 2, - 'title' => 'Orgelconcert Blaricum', - 'region' => 'Blaricum', - 'content' => '

In april van dit jaar bestaat het Maarschalkerweerd orgel van de Vituskerk in Blaricum 150 jaar. Ter gelegenheid hiervan is er op zondag 21 april van 14.00 – 15.00 uur een orgelconcert in de Vituskerk. De vaste organisten van de Vituskerk, Bas Groenewoud en Herman van Dijk, zullen het orgel bespelen en er zal iets worden verteld over de geschiedenis van het orgel.

Het orgel is in 1874 gebouw door Michaël Maarschalkerweerd. Hij bouwde orgels die in de traditie van de neogotiek passen en zijn orgels zijn zeer geschikt voor het spelen van 19e-eeuwse romantische werken. Het orgel in het Amsterdamse concertgebouw is ook van zijn hand. In zijn bedrijf werkten rond 1900 ruim twintig mensen. Na Michaels dood in 1915 werd het bedrijf voortgezet door C.H. van Brussel, J.J. Elbertse en L. Collard, die tot dan toe meesterknechten geweest waren. Elbertse verliet de firma na twee jaar om zijn eigen orgelmakerij op te richten. De firma Elbertse uit Soest heeft jarenlang dit orgel in onderhoud gehad (de tweede én derde generatie trad toe).

In 2023 fuseerde het bedrijf met de firma Van Vulpen. Het orgel in de Vituskerk was oorspronkelijk gebouwd op de koorzolder maar tijdens de grondige verbouwing van de kerk in 2004 werd het orgel naar beneden gehaald zodat het in al zijn pracht te bewonderen is en ook nodig is om dienst te doen als ondersteuning van het koor. Afgelopen jaar is het orgel in de Vituskerk grondig gerenoveerd.

Het concert begint om 14:00 uur en de entree is vrij. Collecte na afloop.

', - 'starts' => '21-04-2024', - 'ends' => '21-04-2024', - 'url' => 'orgelconcert-blaricum', - 'images' => [ - ['url' => '/img/news/tgrOh0kbIS.jpg'] - ] - ], - ]; - - public function __construct() - { - parent::__construct(); - - $events = []; - foreach ($this->events as $index => $event) { - $object = new \stdClass(); - foreach ($event as $key => $value) { - $object->$key = $value; - } - $events[$index] = $object; - } - $this->events = $events; - } - public function show(Request $request, $id) { parent::registerView($request, 'agenda', $id); - if ($id > 3) { - $apiResult = $this->API('agenda/item/' . (int)$id); - } else { - $apiResult = $this->events[$id]; - } + $apiResult = $this->API('agenda/item/' . (int)$id); $calendarEvent = new \Model\CalendarEvent($apiResult); return view('calendarevent', array_merge($this->getSidebareData(), ['event' => $calendarEvent, 'metadata' => $calendarEvent->metadata])); @@ -64,11 +18,8 @@ class CalendarController extends Controller public function overview(Request $request) { $apiResult = $this->API('agenda/overzicht'); - if (!count($apiResult)) { - $apiResult = $this->events; - } $calendar = []; - foreach($apiResult as $calendarItem) + foreach($apiResult->events as $calendarItem) { $calendar[] = new \Model\CalendarEvent($calendarItem); } diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php index 58237b3c..398b135a 100644 --- a/app/Http/Controllers/Controller.php +++ b/app/Http/Controllers/Controller.php @@ -22,14 +22,14 @@ class Controller extends BaseController $data = json_decode(Storage::disk('local')->get($file)); foreach ($path as $subobject) { $data = $data->$subobject; - } + } $items = []; foreach ($data as $item_data) { $items[] = new $class($item_data); if ($maxItems && count($items) == $maxItems) { break; } - } + } return $items; } @@ -49,17 +49,15 @@ class Controller extends BaseController $view->with('data', $this->getDataFromFileAndConvert('laatste_nieuws.json', ['news'], '\Model\NewsItem')); }); View::composer('widgets.populairnieuws', function ($view) { - $view->with('data', $this->getDataFromFileAndConvert('populair_nieuws.json', [], '\Model\NewsItem')); + $view->with('data', $this->getDataFromFileAndConvert('populair_nieuws.json', ['news'], '\Model\NewsItem')); }); View::composer('widgets.nustraks', function ($view) { $data = json_decode(Storage::disk('local')->get('nu_straks.json'))->schedule; $programs = []; foreach ($data as $item_data) { $programs[] = $program = new \Model\Program($item_data->program); - $program->start = new \DateTimeImmutable($item_data->start->date, - new \DateTimeZone($item_data->start->timezone)); - $program->end = new \DateTimeImmutable($item_data->end->date, - new \DateTimeZone($item_data->end->timezone)); + $program->start = self::JsonToDateTime($item_data->start); + $program->end = self::JsonToDateTime($item_data->end); } // Need a bit of slack here, otherwise the current program may show up @@ -68,10 +66,8 @@ class Controller extends BaseController $i = 0; foreach (array_reverse($data) as $item_data) { $recent = $program = new \Model\Program($item_data->program); - $recent->start = new \DateTimeImmutable($item_data->start->date, - new \DateTimeZone($item_data->start->timezone)); - $recent->end = new \DateTimeImmutable($item_data->end->date, - new \DateTimeZone($item_data->end->timezone)); + $recent->start = self::JsonToDateTime($item_data->start); + $recent->end = self::JsonToDateTime($item_data->end); if (($recent->end < $now) && (!$recent->nonstop) && (!$recent->rerun)) { $view->with('recent', $recent); break; @@ -92,7 +88,7 @@ class Controller extends BaseController }); View::composer('widgets.menu', function ($view) { $view->with('news', $this->getDataFromFileAndConvert('laatste_nieuws.json', ['news'], '\Model\NewsItem')) - ->with('popular', $this->getDataFromFileAndConvert('populair_nieuws.json', [], '\Model\NewsItem', 3)) + ->with('popular', $this->getDataFromFileAndConvert('populair_nieuws.json', ['news'], '\Model\NewsItem', 3)) ->with('podcasts', $this->getDataFromFileAndConvert('laatste_podcasts.json', ['podcasts'], '\Model\Podcast')); }); @@ -118,16 +114,16 @@ class Controller extends BaseController protected function API($url) { -// if (strpos($url, 'nieuws/overzicht') !== false) { -// return json_decode(file_get_contents(__DIR__ . '/../../../storage/app/laatste_nieuws.json')); -// } -// return []; - $arrContextOptions = [ 'ssl' => [ "verify_peer" => false, "verify_peer_name" => false, - ], + ], + 'http' => [ + 'method' => 'GET', + 'header' => 'X-Api-Key: ' . sha1(request()->server('REMOTE_ADDR')) . "\r\n" + . 'X-User-Agent: ' . request()->server('HTTP_USER_AGENT') . "\r\n" + ] ]; return json_decode(file_get_contents($this->API_URL . $url, false, stream_context_create($arrContextOptions))); @@ -148,7 +144,7 @@ class Controller extends BaseController protected static function JsonToDateTime($obj) { - return new \DateTime($obj->date, new \DateTimeZone($obj->timezone)); + return is_object($obj) ? new \DateTime($obj->date, new \DateTimeZone($obj->timezone)) : \Carbon\Carbon::parse($obj)->setTimezone(date_default_timezone_get()); } public function __call($method, $arguments) @@ -166,8 +162,8 @@ class Controller extends BaseController public function getSidebareData() { $populair = []; - $apiResult = $this->API('nieuws/populair?aantal=5'); - foreach ($apiResult as $_newsItem) { + $apiResult = $this->API('nieuws/populair?aantal=5'); + foreach ($apiResult->news as $_newsItem) { $populair[] = new \Model\NewsItem($_newsItem); } diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php index e196ebe9..668adff1 100644 --- a/app/Http/Controllers/HomeController.php +++ b/app/Http/Controllers/HomeController.php @@ -18,17 +18,13 @@ class HomeController extends Controller $populair = []; $apiResult = $this->API('nieuws/populair?pagina=' . (int)max(1, $page) . '&aantal=5'); - foreach ($apiResult as $newsItem) { + foreach ($apiResult->news as $newsItem) { $populair[] = new \Model\NewsItem($newsItem); } - $podcasts = []; - $apiResult = $this->API('podcast/overzicht?aantal=3'); - $podcast = new \Model\Podcast($apiResult->podcasts[0]); - foreach ($apiResult->podcasts as $_podcast) { - $podcasts[] = new \Model\Podcast($_podcast); - } - - return view('home', ['populair' => $populair, 'podcasts' => $podcasts, 'podcast' => $podcast, 'title' => 'Home', 'news' => $news, 'searchURL' => 'nieuws/zoeken']); + $apiResult = $this->API('podcast/overzicht?aantal=15'); + $index = array_rand($apiResult->podcasts); + $podcast = new \Model\Podcast($apiResult->podcasts[$index]); + return view('home', ['populair' => $populair, 'podcast' => $podcast, 'title' => 'Home', 'news' => $news, 'searchURL' => 'nieuws/zoeken']); } } diff --git a/app/Http/Controllers/JobsController.php b/app/Http/Controllers/JobsController.php index d2a8d2ba..3cb7206f 100644 --- a/app/Http/Controllers/JobsController.php +++ b/app/Http/Controllers/JobsController.php @@ -29,12 +29,12 @@ class JobsController extends Controller private function listJobs(Request $request, $url, $title = null) { $page = (int)$request->get('pagina', 1); - $apiResult = $this->API('vacatures/' . $url . '?pagina=' . (int)max(1, $page)); + #$apiResult = $this->API('vacatures/' . $url . '?pagina=' . (int)max(1, $page)); $jobs = []; - foreach($apiResult->jobs as $jobsItem) - { - $jobs[] = new \Model\JobOpening($jobsItem); - } + #foreach($apiResult->jobs as $jobsItem) + #{ + # $jobs[] = new \Model\JobOpening($jobsItem); + #} return view('jobslist', array_merge($this->getSidebareData(), ['title' => $title, 'jobs' => $jobs])); //return view($request->ajax() ? 'partial/jobslist_small' : ($title == null ? 'home' : 'jobslist'), ['title' => $title, 'jobs' => $jobs, 'searchURL' => 'vacatures/zoeken']); diff --git a/app/Http/Controllers/NewsController.php b/app/Http/Controllers/NewsController.php index f5678748..d58d5f87 100644 --- a/app/Http/Controllers/NewsController.php +++ b/app/Http/Controllers/NewsController.php @@ -27,7 +27,7 @@ class NewsController extends Controller break; case 2: - $source = $apiResult->source; + $source = $apiResult->source->article; $newsItem->published = self::TimestampToDateTime($source->created); $newsItem->edited = self::TimestampToDateTime($source->updated); $newsItem->author = $source->author; @@ -65,21 +65,26 @@ class NewsController extends Controller $id = $request->get('id', ''); $populair = []; $apiResult = $this->API('nieuws/populair?pagina=' . (int)max(1, $page) . '&aantal=5'); - foreach ($apiResult as $_newsItem) { + foreach ($apiResult->news as $_newsItem) { $populair[] = new \Model\NewsItem($_newsItem); } return view('partial/newslist_small', ['id' => $id, 'news' => $populair]); } + public function taglist(Request $request, $tag) + { + return $this->listNews($request, 'tag/' . $tag, ucfirst($tag)); + } + public function regionlist(Request $request, $region) { - return $this->listNews($request, 'regio/' . $region, ucfirst($region)); + return $this->listNews($request, 'tag/' . $region, ucfirst($region)); } public function themelist(Request $request, $theme) { - return $this->listNews($request, 'thema/' . $theme, ucfirst($theme)); + return $this->listNews($request, 'tag/' . $theme, ucfirst($theme)); } public function search(Request $request, $query) @@ -145,7 +150,7 @@ class NewsController extends Controller } $apiResult = $this->API('nieuws/populair?pagina=' . (int)max(1, $page) . ($total ? '&aantal=' . $total : '')); - foreach ($apiResult as $newsItem) { + foreach ($apiResult->news as $newsItem) { $populair[] = new \Model\NewsItem($newsItem); } @@ -172,7 +177,7 @@ class NewsController extends Controller { $apiResult = $this->API('nieuws/populair'); $news = []; - foreach ($apiResult as $newsItem) { + foreach ($apiResult->news as $newsItem) { $news[] = new \Model\NewsItem($newsItem); } diff --git a/app/Http/Controllers/StreamController.php b/app/Http/Controllers/StreamController.php index 78362399..841cf341 100644 --- a/app/Http/Controllers/StreamController.php +++ b/app/Http/Controllers/StreamController.php @@ -30,6 +30,17 @@ class StreamController extends Controller return view('watch', ['title' => 'Kijk NH Gooi Tv Studio', 'stream' => 'https://studiocam.nhgooi.nl/studiocam/live/index.m3u8']); } + public function inline(Request $request, $id) + { + $apiResult = $this->API('podcast/details/' . (int)$id); + $podcast = new \Model\Podcast($apiResult); + if(sha1($id . ':' . date('Y-m-d')) != $request->get('auth')) { + // return view('widgets/podcastplayer', ['podcast' => null]); + } + + return view('widgets/podcastplayer', ['podcast' => $podcast]); + } + public function podcast(Request $request, $id) { $apiResult = $this->API('podcast/details/' . (int)$id); @@ -39,11 +50,11 @@ class StreamController extends Controller } return view('listen', [ - 'source' => $this->API_URL . 'podcast/download' . $apiResult->url . '?auth=' . $podcast->auth, + 'source' => $this->API_URL . 'podcast/stream/' . $apiResult->url, 'title' => $podcast->title, 'content' => $podcast->title, 'isStream' => false, - 'canDownload' => true ]); + 'canDownload' => $this->API_URL . 'podcast/download/' . $apiResult->url ]); } public function program(Request $request, $year, $month, $day, $hour, $duration, $offset = 0) { @@ -58,7 +69,7 @@ class StreamController extends Controller } return view('listen', [ - 'source' => $this->API_URL . 'programma/download/' . $current->format('Y/m/d/H') . '/1', + 'source' => $this->API_URL . 'programma/stream/' . $current->format('Y/m/d/H') . '/1', 'tabs' => $hours, 'title' => 'Uitzending terugluisteren', 'content' => 'de uitzending van ' . $current->format('d-m-Y, H') . ':00 uur', @@ -77,10 +88,10 @@ class StreamController extends Controller public function kerkdienst(Request $request) { return view('listen', [ - 'source' => $this->API_URL . 'kerkdienst/download', + 'source' => $this->API_URL . 'kerkdienst/stream', 'title' => 'Kerkdienst gemist', 'content' => 'de kerkdienst van afgelopen zondag', 'isStream' => false, - 'canDownload' => true ]); + 'canDownload' => $this->API_URL . 'kerkdienst/download' ]); } } diff --git a/public/css/style.css b/public/css/style.css index b50b4f76..c4e245a6 100644 --- a/public/css/style.css +++ b/public/css/style.css @@ -725,6 +725,8 @@ div.pp_default .pp_close:hover { margin: 0; padding: 0; list-style: none; + display: flex; + gap: 3px; } .blog_grid .post .slider_content_box .post_details .category a { padding: 6px 11px 7px; @@ -1229,7 +1231,8 @@ div.pp_default .pp_close:hover { .post_container .post_body h3 { font-size: 15px; } -.post_container .post_body .sentence { +.post_container .post_body .sentence, +.box.featured .sentence { font-size: 12px; font-style: italic; line-height: 1.3; @@ -1238,7 +1241,8 @@ div.pp_default .pp_close:hover { display: block; width: 100%; } -.post_container .post_body .sentence span { +.post_container .post_body .sentence span, +.box.featured .sentence span { padding: 0 5px; } .post_container .post_body blockquote { @@ -1647,4 +1651,10 @@ a, a:hover, a:active { } } +.podcast-player .content { + border: solid 1px #333; + border-radius: 5px; + padding: 0.4rem; +} + /*# sourceMappingURL=style.css.map */ diff --git a/public/js/main.js b/public/js/main.js index 8b137891..e69de29b 100644 --- a/public/js/main.js +++ b/public/js/main.js @@ -1 +0,0 @@ - diff --git a/resources/views/calendarevent.blade.php b/resources/views/calendarevent.blade.php index 9daa8e2c..9e7911f4 100644 --- a/resources/views/calendarevent.blade.php +++ b/resources/views/calendarevent.blade.php @@ -41,7 +41,7 @@
@endsection @section('tags') @endsection @@ -28,12 +30,6 @@
- @if($news->podcast) - @include('widgets/mediaplayer') -
-
- -
- -
- @endif -
@if($news->images) @@ -123,6 +95,10 @@
@endif + @if($news->podcast) + @include('widgets/podcastplayer', ['podcast' => $news->podcast]) + @endif + @if($news->source && $news->source->show)

Bron: {{$news->source->title}}

@@ -133,26 +109,6 @@ @include('widgets/share') --}} - {{-- -
    - @if($news->keywords) - @foreach($news->keywords as $keyword) -
  • - {{$keyword}} -
  • - @endforeach - @endif -
- --}} -
-@endforeach +@endforeach diff --git a/resources/views/podcastitem.blade.php b/resources/views/podcastitem.blade.php index d9cd1d4b..17f28226 100644 --- a/resources/views/podcastitem.blade.php +++ b/resources/views/podcastitem.blade.php @@ -90,6 +90,7 @@ @if ($podcast) url . "?auth=" . $podcast->auth); + $streamUrl = url($apiUrl . 'podcast/stream' . $podcast->url . "?auth=" . $podcast->auth); $popoutUrl = route('luister.podcast') . $podcast->url . '?auth=' . $podcast->auth; ?> @@ -112,7 +113,7 @@
diff --git a/resources/views/widgets/podcastplayer.blade.php b/resources/views/widgets/podcastplayer.blade.php new file mode 100644 index 00000000..00d1b3ce --- /dev/null +++ b/resources/views/widgets/podcastplayer.blade.php @@ -0,0 +1,56 @@ +
+ @if($podcast == null) + De podcast kan helaas (op dit moment) niet weergegeven worden. + @else + @include('widgets/mediaplayer') + + @if ($podcast) + url . "?auth=" . $podcast->auth); + $popoutUrl = route('luister.podcast') . $podcast->url . '?auth=' . $podcast->auth; + ?> +
+

{{$podcast->title}}

+
+ + + + + +
+ @if($podcast->image) +
+ +
+ {{$podcast->image->title}} +
+
+ @endif +
{!!$podcast->content!!}
+
+
+ +
+ @endif + @endif +
\ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 0a90c78f..20a5ed6b 100644 --- a/routes/web.php +++ b/routes/web.php @@ -17,6 +17,7 @@ Route::get('/nieuws', 'NewsController@overview')->name('nieuws'); Route::get('/nieuws/more', 'NewsController@more')->name('nieuws.more'); Route::get('/nieuws/populair', 'NewsController@populair')->name('nieuws.populair'); Route::get('/nieuws/regio/{region}', 'NewsController@regionlist' )->where(['region' => '[a-z0-9]+'])->name('nieuws.regio'); +Route::get('/nieuws/tag/{tag}', 'NewsController@taglist' )->where(['tag' => '[a-z0-9-]+'])->name('nieuws.tag'); Route::get('/nieuws/thema/{theme}', 'NewsController@themelist' )->where(['themelist' => '[a-z0-9]+'])->name('nieuws.thema'); Route::get('/nieuws/{id}/{title}', 'NewsController@show')->where(['id' => '\d+'])->name('nieuws.detail'); Route::get('/nieuws/zoeken/{query}', 'NewsController@search')->name('nieuws.zoeken'); @@ -52,6 +53,7 @@ Route::get('/luister/fragment')->name('luister.podcast'); Route::get('/luister/programma/{year}/{month}/{day}/{hour}/{duration}/{offset?}', 'StreamController@program') ->where(['id' => '\d+', 'year' => '20\d\d', 'month' => '\d\d?', 'day' => '\d\d?', 'hour' => '\d\d?', 'duration' => '\d\d?', 'offset' => '\d\d?']); Route::get('/luister/programma')->name('luister.programma'); +Route::get('/luister/fragment/inline/{id}', 'StreamController@inline')->where(['id' => '\d+']); Route::get('/gemist', 'RadioController@podcasts')->name('gemist'); Route::get('/gemist/zoeken/{query}', 'RadioController@searchpodcast')->name('gemist.zoeken');