Pressroom template verwijderd, website naar root van repo

This commit is contained in:
2020-03-22 15:30:52 +01:00
parent 2cb6a77425
commit f3d1c41e91
7620 changed files with 0 additions and 186900 deletions

View File

@@ -0,0 +1,32 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\SendsPasswordResetEmails;
class ForgotPasswordController extends Controller
{
/*
|--------------------------------------------------------------------------
| Password Reset Controller
|--------------------------------------------------------------------------
|
| This controller is responsible for handling password reset emails and
| includes a trait which assists in sending these notifications from
| your application to your users. Feel free to explore this trait.
|
*/
use SendsPasswordResetEmails;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest');
}
}

View File

@@ -0,0 +1,39 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
class LoginController extends Controller
{
/*
|--------------------------------------------------------------------------
| Login Controller
|--------------------------------------------------------------------------
|
| This controller handles authenticating users for the application and
| redirecting them to your home screen. The controller uses a trait
| to conveniently provide its functionality to your applications.
|
*/
use AuthenticatesUsers;
/**
* Where to redirect users after login.
*
* @var string
*/
protected $redirectTo = '/home';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest')->except('logout');
}
}

View File

@@ -0,0 +1,71 @@
<?php
namespace App\Http\Controllers\Auth;
use App\User;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;
class RegisterController extends Controller
{
/*
|--------------------------------------------------------------------------
| Register Controller
|--------------------------------------------------------------------------
|
| This controller handles the registration of new users as well as their
| validation and creation. By default this controller uses a trait to
| provide this functionality without requiring any additional code.
|
*/
use RegistersUsers;
/**
* Where to redirect users after registration.
*
* @var string
*/
protected $redirectTo = '/home';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest');
}
/**
* Get a validator for an incoming registration request.
*
* @param array $data
* @return \Illuminate\Contracts\Validation\Validator
*/
protected function validator(array $data)
{
return Validator::make($data, [
'name' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:users',
'password' => 'required|string|min:6|confirmed',
]);
}
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return \App\User
*/
protected function create(array $data)
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
]);
}
}

View File

@@ -0,0 +1,39 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\ResetsPasswords;
class ResetPasswordController extends Controller
{
/*
|--------------------------------------------------------------------------
| Password Reset Controller
|--------------------------------------------------------------------------
|
| This controller is responsible for handling password reset requests
| and uses a simple trait to include this behavior. You're free to
| explore this trait and override any methods you wish to tweak.
|
*/
use ResetsPasswords;
/**
* Where to redirect users after resetting their password.
*
* @var string
*/
protected $redirectTo = '/home';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest');
}
}

View File

@@ -0,0 +1,29 @@
<?php
namespace App\Http\Controllers;
use \Illuminate\Http\Request;
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);
return view('calendarevent', ['event' => $calendarEvent, 'metadata' => $calendarEvent->metadata]);
}
public function overview(Request $request)
{
$apiResult = $this->API('agenda/overzicht');
$calendar = [];
foreach($apiResult as $calendarItem)
{
$calendar[] = new \Model\CalendarEvent($calendarItem);
}
return view('calendarlist', ['events' => $calendar]);
}
}

View File

@@ -0,0 +1,117 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\View;
class Controller extends BaseController
{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
protected $API_URL;
private function getDataFromFileAndConvert($file, $path, $class, $maxItems = 0)
{
$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;
}
public function __construct()
{
View::share('apiUrl', $this->API_URL = env('API_URL', 'http://api.6fm.nl/'));
View::share('imgBase', env('IMAGE_BASE_URL', '/'));
//View::share('onAir', file_get_contents(url('onair')));
View::composer('widgets.laatstenieuws', function($view) {
$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::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));
}
// Need a bit of slack here, otherwise the current program may show up
$now = new \DateTimeImmutable('2 minutes ago');
$data = json_decode(Storage::disk('local')->get('zojuist.json'))->schedule;
$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));
if(($recent->end < $now) && (!$recent->nonstop) && (!$recent->rerun)) {
$view->with('recent', $recent);
break;
}
}
$view->with('data', $programs);
});
View::composer('widgets.laatstepodcasts', function($view) {
$view->with('data', $this->getDataFromFileAndConvert('laatste_podcasts.json', ['podcasts'], '\Model\Podcast'));
});
View::composer('widgets.regioagenda', function($view) {
$view->with('data', $this->getDataFromFileAndConvert('regioagenda.json', [], '\Model\CalendarEvent'));
});
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('podcasts', $this->getDataFromFileAndConvert('laatste_podcasts.json', ['podcasts'], '\Model\Podcast'));
});
}
protected function registerView(Request $request, $type, $id)
{
if(config('app.env') == 'local') {
return;
}
app('db')->insert('INSERT INTO `pagestats`(`type`, `item_id`, `visitor_ip`, `session`, `referer`) VALUES(:type, :id, :ip, :session, :referer)', [
'type' => $type,
'id' => $id,
'ip' => $request->server('REMOTE_ADDR'),
'session' => md5(Session::getId()),
'referer' => $request->server('HTTP_REFERRER')
]);
}
protected function API($url)
{
return json_decode(file_get_contents($this->API_URL . $url));
}
protected static function JsonToDateTime($obj)
{
return new \DateTime($obj->date, new \DateTimeZone($obj->timezone));
}
public function __call($method, $arguments) {
if(substr($method, 0, 5) == 'view_') {
$view = substr($method, 5);
if(view()->exists($view)) { return view($view); }
}
return abort(404);
}
}

View File

@@ -0,0 +1,37 @@
<?php
namespace App\Http\Controllers;
use \Model\NewsItem;
class HomeController extends Controller
{
public function show()
{
$apiResult = $this->API('nieuws/overzicht?aantal=12');
$news = [];
foreach($apiResult->news as $newsItem)
{
$news[] = new \Model\NewsItem($newsItem);
}
$apiResult = $this->API('programma/schema/nustraks');
$comingUp = [];
foreach($apiResult->schedule as $program)
{
$comingUp[] = [
'start' => self::JsonToDateTime($program->start),
'end' => self::JsonToDateTime($program->end),
'program' => new \Model\Program($program->program)
];
}
$apiResult = $this->API('podcast/overzicht?aantal=20');
$podcasts = [];
foreach($apiResult->podcasts as $podcast) {
$podcasts[] = new \Model\Podcast($podcast);
}
return view('home', ['news' => $news, 'podcasts' => $podcasts, 'comingUp' => $comingUp]);
}
}

View File

@@ -0,0 +1,16 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use \Model\NewsItem;
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)]);
}
}

View File

@@ -0,0 +1,93 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use \Model\NewsItem;
class NewsController extends Controller
{
private static function TimestampToDateTime($timestamp) {
$result = new \DateTime;
$result->setTimestamp($timestamp);
return $result;
}
public function show(Request $request, $id)
{
parent::registerView($request, 'nieuws', $id);
$apiResult = $this->API('nieuws/bericht/' . $id);
$newsItem = new \Model\NewsItem($apiResult->news);
switch($apiResult->version) {
case 1:
return view('newsitem', ['news' => $newsItem, 'metadata' => $newsItem->metadata]);
break;
case 2:
$source = $apiResult->source;
$newsItem->published = self::TimestampToDateTime($source->created);
$newsItem->edited = self::TimestampToDateTime($source->updated);
$newsItem->author = $source->author;
$newsItem->images = null; // Images will be embedded
$newsItem->video = null; // Videos will be embedded
$newsItem->content = $source->blocks;
return view('newsitem', ['news' => $newsItem, 'metadata' => $newsItem->metadata]);
}
}
public function overview(Request $request)
{
return $this->listNews($request, 'overzicht');
}
public function regionlist(Request $request, $region)
{
return $this->listNews($request, 'regio/' . $region, ucfirst($region));
}
public function themelist(Request $request, $theme)
{
return $this->listNews($request, 'thema/' . $theme, ucfirst($theme));
}
public function search(Request $request, $query)
{
return $this->listNews($request, 'zoeken/' . $query, 'Zoekresultaat')->with('query', urldecode($query));
}
private function listNews(Request $request, $url, $title = null)
{
$page = (int)$request->get('pagina', 1);
$apiResult = $this->API('nieuws/' . $url . '?pagina=' . (int)max(1, $page));
$news = [];
foreach($apiResult->news as $newsItem)
{
$news[] = new \Model\NewsItem($newsItem);
}
return view($request->ajax() ? 'partial/newslist_small' : ($title == null ? 'home' : 'newslist'), ['title' => $title, 'news' => $news, 'searchURL' => 'nieuws/zoeken']);
}
public function popular()
{
$apiResult = $this->API('nieuws/populair');
$news = [];
foreach($apiResult as $newsItem)
{
$news[] = new \Model\NewsItem($newsItem);
}
return view('popularnews', ['news' => $news]);
}
public function regionieuws()
{
return view('listen', [
'source' => $this->API_URL . 'nieuws/regionieuws',
'title' => 'Regionieuws',
'content' => 'het laatste nieuws uit de regio',
'isStream' => false,
'canDownload' => true ]);
}
}

View File

@@ -0,0 +1,109 @@
<?php
namespace App\Http\Controllers;
use \Illuminate\Http\Request;
use \Model\Programma;
class RadioController extends Controller
{
public function schedule(Request $request, $shiftWeeks = 0)
{
$apiResult = $this->API('programma/schema/week/' . (int)$shiftWeeks);
$start = self::JsonToDateTime($apiResult->startdate);
$end = self::JsonToDateTime($apiResult->enddate);
$schedule = [];
foreach($apiResult->schedule as $program)
{
$schedule[] = [
'starttime' => self::JsonToDateTime($program->start),
'endtime' => self::JsonToDateTime($program->end),
'shift' => (int)$shiftWeeks,
'program' => new \Model\Program($program->program)
];
}
return view($request->ajax() ? 'radioscheduleweek' : 'radioschedule', ['start' => $start, 'end' => $end, 'schedule' => $schedule, 'shift' => $shiftWeeks]);
}
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)
{
parent::registerView($request, 'podcast', $id);
$apiResult = $this->API('podcast/details/' . (int)$id);
$podcast = new \Model\Podcast($apiResult);
$related = [];
if($podcast->program != null)
{
$apiRelated = $this->API("podcast/programma/{$podcast->program->id}?date={$podcast->created->format('Y-m-d')}");
foreach($apiRelated->podcasts as $relatedItem)
{
$related[] = new \Model\Podcast($relatedItem);
}
}
return view('podcastitem', ['podcast' => $podcast, 'metadata' => $podcast->metadata, 'related' => $related, '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, $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');
$apiResult = $this->API('programma/schema/recent');
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('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, ['podcasts' => $podcasts, 'searchURL' => 'gemist/zoeken']));
}
}

View File

@@ -0,0 +1,79 @@
<?php
namespace App\Http\Controllers;
use \Illuminate\Http\Request;
use \Model\Podcast;
class StreamController extends Controller
{
private static $STREAM_URL = 'https://stream.nhgooi.nl:8001/';
public function liveradio()
{
return view('listen', [
'source' => self::$STREAM_URL . 'mp3live',
'title' => 'Luister live',
'content' => 'de live-uitzending van NH Gooi.',
'isStream' => true ]);
}
public function livetv()
{
return view('watch');
}
public function podcast(Request $request, $id)
{
$apiResult = $this->API('podcast/details/' . (int)$id);
$podcast = new \Model\Podcast($apiResult);
if($podcast->auth != $request->get('auth')) {
return abort(403);
}
return view('listen', [
'source' => $this->API_URL . 'podcast/download' . $apiResult->url . '?auth=' . $podcast->auth,
'title' => $podcast->title,
'content' => $podcast->title,
'isStream' => false,
'canDownload' => true ]);
}
public function program(Request $request, $year, $month, $day, $hour, $duration, $offset = 0) {
$date = (new \DateTimeImmutable())->setDate($year, $month, $day)->setTime($hour, 0, 0);
$current = $date->add(\DateInterval::createFromDateString($offset . ' hours'));
$hours = [];
for($i = 0; $i < $duration; $i++) {
$other = $date->add(\DateInterval::createFromDateString($i . ' hours'));
$url = '/luister/programma/' . $date->format('Y/m/d/H') . '/' . $duration . '/' . $i;
$hours[$offset == $i ? '#' : $url] = 'Uur ' . ($i + 1) . ' (' . $other->format('H') . ':00)';
}
return view('listen', [
'source' => $this->API_URL . 'programma/download/' . $current->format('Y/m/d/H') . '/1',
'tabs' => $hours,
'title' => 'Uitzending terugluisteren',
'content' => 'de uitzending van ' . $current->format('d-m-Y, H') . ':00 uur',
'isStream' => false,
'canDownload' => false ]);
}
public function gemeenteraad(Request $request) {
return view('listen', [
'source' => self::$STREAM_URL . 'gemhuizen',
'title' => 'Gemeenteraad Huizen',
'content' => 'de openbare vergadering van de gemeenteraad Huizen',
'isStream' => true,
'canDownload' => false ]);
}
public function kerkdienst(Request $request) {
return view('listen', [
'source' => $this->API_URL . 'kerkdienst/download',
'title' => 'Kerkdienst gemist',
'content' => 'de kerkdienst van afgelopen zondag',
'isStream' => false,
'canDownload' => true ]);
}
}

60
app/Http/Kernel.php Normal file
View File

@@ -0,0 +1,60 @@
<?php
namespace App\Http;
use Illuminate\Foundation\Http\Kernel as HttpKernel;
class Kernel extends HttpKernel
{
/**
* The application's global HTTP middleware stack.
*
* These middleware are run during every request to your application.
*
* @var array
*/
protected $middleware = [
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
];
/**
* The application's route middleware groups.
*
* @var array
*/
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
// \Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
'api' => [
'throttle:60,1',
'bindings',
],
];
/**
* The application's route middleware.
*
* These middleware may be assigned to groups or used individually.
*
* @var array
*/
protected $routeMiddleware = [
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
];
}

View File

@@ -0,0 +1,17 @@
<?php
namespace App\Http\Middleware;
use Illuminate\Cookie\Middleware\EncryptCookies as BaseEncrypter;
class EncryptCookies extends BaseEncrypter
{
/**
* The names of the cookies that should not be encrypted.
*
* @var array
*/
protected $except = [
//
];
}

View File

@@ -0,0 +1,26 @@
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Auth;
class RedirectIfAuthenticated
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param string|null $guard
* @return mixed
*/
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->check()) {
return redirect('/home');
}
return $next($request);
}
}

View File

@@ -0,0 +1,18 @@
<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\TrimStrings as BaseTrimmer;
class TrimStrings extends BaseTrimmer
{
/**
* The names of the attributes that should not be trimmed.
*
* @var array
*/
protected $except = [
'password',
'password_confirmation',
];
}

View File

@@ -0,0 +1,17 @@
<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;
class VerifyCsrfToken extends BaseVerifier
{
/**
* The URIs that should be excluded from CSRF verification.
*
* @var array
*/
protected $except = [
//
];
}