Files
nhgooi.nl/app/Http/Controllers/NewsController.php
Jorit Tijsen 249f7a7d4c Add favicon
Change logo
Add luister and kijk icons
Tip de streekredactie points to whatsapp 088-8505651
Add s to Podcast
Removed waterschapsverkiezingen from menu
Podcast autoplay disabled
Remove Gooische Courant and NH Nieuws
Changed NH Gooi to Over NH Gooi
Added padding and border-radios to homepage posts
Changed header 12px to 14px
Add now and next programs to homepage
Add new button to programs
Changed contact text
Add fallback image to program guide
Make items height equally in program guide
2024-04-02 17:42:39 +02:00

192 lines
6.3 KiB
PHP

<?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:
if (!$newsItem->content) return redirect('//nhnieuws.nl/gooi');
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', array_merge($this->getSidebareData(), ['news' => $newsItem, 'metadata' => $newsItem->metadata, 'searchURL' => 'nieuws/zoeken']));
}
}
public function overview(Request $request)
{
return $this->listNews($request, 'overzicht', null, 'items-more-news', 10);
}
public function more(Request $request)
{
$page = (int)$request->get('pagina', 1);
$id = $request->get('id', '');
$apiResult = $this->API('nieuws/overzicht?pagina=' . (int)max(1, $page) . '&aantal=5');
$news = [];
foreach ($apiResult->news as $newsItem) {
$news[] = new \Model\NewsItem($newsItem);
}
return view('partial/newslist_small', ['id' => $id, 'news' => $news]);
}
public function populair(Request $request)
{
$page = (int)$request->get('pagina', 1);
$id = $request->get('id', '');
$populair = [];
$apiResult = $this->API('nieuws/populair?pagina=' . (int)max(1, $page) . '&aantal=5');
foreach ($apiResult as $_newsItem) {
$populair[] = new \Model\NewsItem($_newsItem);
}
return view('partial/newslist_small', ['id' => $id, 'news' => $populair]);
}
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));
}
public function activeblog()
{
$apiResult = $this->API('blog/overzicht');
if (count($apiResult)) {
$blog = new \Model\Blog($apiResult[0]);
if ($blog->is_active) {
return redirect($blog->url);
}
}
return abort(404);
}
public function blog(Request $request, $id)
{
parent::registerView($request, 'blog', $id);
$page = (int)$request->get('pagina', 1);
$hasNext = true;
while ($page > 0) {
$apiResult = $this->API('blog/overzicht/' . (int)$id . '?pagina=' . (int)max(1, $page));
$blog = new \Model\Blog($apiResult->blog);
$items = [];
foreach ($apiResult->items as $blogItem) {
$items[] = new \Model\NewsItem($blogItem);
}
if (count($items) || ($page == 1)) {
return view('blog', ['blog' => $blog, 'pagina' => $page, 'items' => $items, 'hasNext' => $hasNext && count($items) == 15]);
}
$hasNext = false;
--$page;
}
return abort(404);
}
private function listNews(Request $request, $url, $title = null, $id = 'items', $total = null)
{
if ($request->ajax()) {
$total = 5;
}
$page = (int)$request->get('pagina', 1);
$apiResult = $this->API('nieuws/' . $url . '?pagina=' . (int)max(1, $page) . ($total ? '&aantal=' . $total : ''));
$news = [];
foreach ($apiResult->news as $newsItem) {
$news[] = new \Model\NewsItem($newsItem);
}
$populair = [];
if ($title == null) {
$total = 5;
}
$apiResult = $this->API('nieuws/populair?pagina=' . (int)max(1,
$page) . ($total ? '&aantal=' . $total : ''));
foreach ($apiResult as $newsItem) {
$populair[] = new \Model\NewsItem($newsItem);
}
$podcast = null;
$podcasts = [];
if ($title == null) {
$apiResult = $this->API('podcast/overzicht?aantal=3');
$podcast = new \Model\Podcast($apiResult->podcasts[0]);
foreach ($apiResult->podcasts as $_podcast) {
$podcasts[] = new \Model\Podcast($_podcast);
}
}
$newsItems = [];
$apiResult = $this->API('nieuws/overzicht?aantal=5');
foreach ($apiResult->news as $_newsItem) {
$newsItems[] = new \Model\NewsItem($_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']);
}
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]);
}
}