Files
nhgooi.nl/app/Http/Controllers/RadioController.php
Jorit Tijsen 1d94e7da7f Add some variables to the scss files
Use the period API call for the program schema
2024-03-20 17:54:10 +01:00

127 lines
4.9 KiB
PHP

<?php
namespace App\Http\Controllers;
use \Illuminate\Http\Request;
use \Model\Programma;
class RadioController extends Controller
{
public function schedule(Request $request, $date = '')
{
$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);
$schedule = [];
foreach($apiResult->schedule as $program)
{
$schedule[self::JsonToDateTime($program->start)->format('Ymd')][] = [
'starttime' => self::JsonToDateTime($program->start),
'endtime' => self::JsonToDateTime($program->end),
'shift' => 0,
'program' => new \Model\Program($program->program)
];
}
if ($date) {
$days = [
'custom' => (new \DateTime($date))->format('Ymd'),
];
} else {
$days = [
'day_before_yesterday' => (new \DateTime("-2 day"))->format('Ymd'),
'yesterday' => (new \DateTime("yesterday"))->format('Ymd'),
'today' => (new \DateTime("now"))->format('Ymd'),
'tomorrow' => (new \DateTime("+1 day"))->format('Ymd'),
'day_after_tomorrow' => (new \DateTime("+2 day"))->format('Ymd'),
'custom' => (new \DateTime($date))->format('Ymd'),
];
}
return view($request->ajax() ? 'partial/radioscheduleweek' : 'radioschedule', ['start' => $start, 'end' => $end, 'schedule' => $schedule, 'shift' => 0, 'days' => $days, 'date' => $date]);
}
public function onair()
{
$data = $this->API('programma/schema/onair');
return response()->json($data);
}
public function program($id)
{
$apiResult = $this->API('programma/details/' . (int)$id);
return view('radioprogram', ['program' => new \Model\Program($apiResult)]);
}
public function podcast(Request $request, $id, $title = '')
{
if($this->checkAPI('podcast/details/' . (int)$id) != "200"){
return view('podcastitem', array_merge($this->getSidebareData(), ['title' => $title, 'podcast' => null, 'metadata' => null, 'related' => [], 'searchURL' => 'gemist/zoeken']));
}
parent::registerView($request, 'podcast', $id);
$apiResult = $this->API('podcast/details/' . (int)$id);
$podcast = new \Model\Podcast($apiResult);
$page = (int)$request->get('pagina', 1);
$apiResult = $this->API('podcast/overzicht?pagina=' . (int)max(1, $page) . '&aantal=6');
$podcasts = [];
foreach($apiResult->podcasts as $_podcast)
{
$podcasts[] = new \Model\Podcast($_podcast);
}
return view($request->ajax() ? 'partial/podcastitems' : 'podcastitem', ['title' => $title, 'podcast' => $podcast, 'metadata' => $podcast->metadata, 'podcasts' => $podcasts, 'searchURL' => 'gemist/zoeken']);
}
public function podcasts(Request $request, $programma = null)
{
$action = 'overzicht';
$viewData = [];
if((int)$programma > 0) {
$action = 'programma/' . (int)$programma;
$viewData['program'] = new \Model\Program($this->API('programma/details/' . (int)$programma));
}
return $this->getPodcastList($request, $action, array_merge($this->getSidebareData(), $viewData));
}
public function searchpodcast(Request $request, $query)
{
return $this->getPodcastList($request, 'zoeken/' . $query)->with('query', urldecode($query));
}
public function terugluisteren(Request $request)
{
$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');
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);
$programs[] = $item;
}
}
return view($request->ajax() ? 'partial/programitems' : 'programlist', ['programs' => array_reverse($programs)]);
}
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');
$podcasts = [];
foreach($apiResult->podcasts as $podcast)
{
$podcasts[] = new \Model\Podcast($podcast);
}
return view($request->ajax() ? 'partial/podcastitems' : 'podcastlist', array_merge($viewData, ['id' => 'items-podcasts', 'podcasts' => $podcasts, 'searchURL' => 'gemist/zoeken']));
}
}