From a63080acc8896ce2e4c78b6b4dc29451f199feba Mon Sep 17 00:00:00 2001 From: Mischa Spelt Date: Tue, 5 Sep 2017 19:44:10 +0200 Subject: [PATCH] Nieuws filter op regio --- api/app/Http/Controllers/NewsController.php | 25 ++++++++++++++++----- api/routes/web.php | 1 + common/classes/NewsItem.php | 6 +++++ common/classes/NewsSource.php | 10 +++++++++ 4 files changed, 37 insertions(+), 5 deletions(-) diff --git a/api/app/Http/Controllers/NewsController.php b/api/app/Http/Controllers/NewsController.php index 202c993..c524c3b 100644 --- a/api/app/Http/Controllers/NewsController.php +++ b/api/app/Http/Controllers/NewsController.php @@ -13,7 +13,7 @@ SELECT `news`.`id`, `content`.`title`, `content`.`content`, `news`.`podcast` AS `news`.`creationdt` AS `published`, `content`.`creator`, `content`.`editingdt` AS `edited`, `content`.`editor`, `news`.`startdt` AS `starts`, `news`.`enddt` AS `ends`, `content`.`showsource` AS `showsource`, `sources`.`title` AS `source`, `sources`.`url` AS `source_url`, - `themes`.`title` AS `theme`, `themes`.`thumbnail` AS `theme_thumbnail`, `regions`.`title` AS `region` + `themes`.`title` AS `theme`, `themes`.`thumbnail` AS `theme_thumbnail`, `regions`.`title` AS `region`, `regions`.`slug` as `region_slug` FROM `news` LEFT JOIN `news_target_content` AS `content` ON `content`.`news` = `news`.`id` LEFT JOIN `news_regions` AS `regions` ON `regions`.`id` = `news`.`region` @@ -38,17 +38,28 @@ QUERY; /** * Lijst van alle nieuwsberichten */ - public function newslist(Request $request) { + public function newslist(Request $request, $filter = null) { $count = (int)$request->get('aantal', 15); $page = (int)$request->get('pagina', 1); if($count <= 0 || $page <= 0) { return abort(400); - } + } + + $filterSql = ""; + $params = ['category' => self::$NEWS_CATEGORY]; + if($filter) { + foreach($filter as $field => $value) { + $paramName = preg_replace('/[^A-Za-z0-9]/', '', $field); + $filterSql .= " AND $field = :$paramName"; + $params[$paramName] = $value; + } + } $start = ($page - 1) * $count; - $newsItems = app('db')->select(self::$BASE_SQL + $newsItems = app('db')->select(self::$BASE_SQL + . $filterSql . ' ORDER BY `published` DESC' - . ' LIMIT ' . (int)$start . ', ' . (int)$count, ['category' => self::$NEWS_CATEGORY]); + . ' LIMIT ' . (int)$start . ', ' . (int)$count, $params); $result = array(); foreach($newsItems as $newsItem) { @@ -61,6 +72,10 @@ QUERY; return response()->json(['page' => $page, 'count' => $count, 'news' => $result]); } + public function regionlist(Request $request, $region) { + return $this->newslist($request, ['`regions`.`slug`' => $region]); + } + /** * Agendaberichten ophalen */ diff --git a/api/routes/web.php b/api/routes/web.php index b53feb9..64a43ad 100644 --- a/api/routes/web.php +++ b/api/routes/web.php @@ -16,6 +16,7 @@ $app->get('/', function () use ($app) { }); $app->get('nieuws/overzicht', 'NewsController@newslist' ); +$app->get('nieuws/regio/{region:[a-z0-9]+}', 'NewsController@regionlist' ); $app->get('nieuws/populair', 'NewsController@popularNews' ); $app->get('nieuws/bericht/{id:\d+}', 'NewsController@newsitem' ); $app->get('nieuws/regionieuws', 'PodcastController@latestNews' ); diff --git a/common/classes/NewsItem.php b/common/classes/NewsItem.php index 16bdc72..c2e60ec 100644 --- a/common/classes/NewsItem.php +++ b/common/classes/NewsItem.php @@ -59,6 +59,12 @@ class NewsItem extends Model { $this->keywords = explode(' ', $data->keywords); } + 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); + } + $images = ($images != null) ? $images : (isset($data->images) ? $data->images : null); if($images) { diff --git a/common/classes/NewsSource.php b/common/classes/NewsSource.php index 6c1f55b..fa946c0 100644 --- a/common/classes/NewsSource.php +++ b/common/classes/NewsSource.php @@ -2,6 +2,16 @@ namespace Model; +class NewsRegion { + public $title; + public $slug; + + public function __construct($title, $slug = null) { + $this->title = $title; + $this->slug = $slug ? $slug : strtolower(str_replace(' ', '', $title)); + } +} + class NewsSource { public $title; public $url;