Populair nieuws en agenda redelijk vlot werkend

This commit is contained in:
2017-09-05 03:18:49 +02:00
parent 4392b1c188
commit eb2710a302
2 changed files with 26 additions and 13 deletions

View File

@@ -4,9 +4,6 @@ namespace App\Http\Controllers;
use Illuminate\Http\Request; use Illuminate\Http\Request;
error_reporting(E_ALL);
ini_set('display_errors', true);
class NewsController extends Controller class NewsController extends Controller
{ {
private static $NEWS_CATEGORY = 1; private static $NEWS_CATEGORY = 1;
@@ -88,26 +85,41 @@ QUERY;
/** /**
* Populaire berichten ophalen * Populaire berichten ophalen
*/ */
public function popular(Request $request) { public function popularNews(Request $request) {
return $this->popularInCategory($request, self::$NEWS_CATEGORY);
}
public function popularCalendar(Request $request) {
return $this->popularInCategory($request, self::$CALENDAR_CATEGORY);
}
protected function popularInCategory(Request $request, $category) {
$count = (int)$request->get('aantal', 5); $count = (int)$request->get('aantal', 5);
$recent = app('db')->select(<<<QUERY $recent = app('db')->select(<<<QUERY
SELECT `type`, `item_id`, COUNT(DISTINCT session) AS `count` SELECT `news`.`id`, COUNT(DISTINCT pagestats.visitor_ip) AS visitors
FROM pagestats FROM news
WHERE `type` = 'nieuws' AND `timestamp` > DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 30 DAY) INNER JOIN pagestats ON pagestats.type = :type AND pagestats.item_id = news.id
GROUP BY `item_id` INNER JOIN `news_target_content` AS `content` ON `content`.`news` = `news`.`id`
ORDER BY `count` DESC WHERE `news`.`startdt` >= DATE_SUB(CURRENT_TIMESTAMP, INTERVAL :interval DAY)
AND `news`.`category` = :category AND `content`.`target` = 1 AND `news`.`active` = 1 AND `content`.`active` = 1
GROUP BY news.id ORDER BY visitors DESC
LIMIT 0, :count LIMIT 0, :count
QUERY QUERY
, [ , [
'type' => $category == self::$NEWS_CATEGORY ? 'nieuws'
: ($category == self::$CALENDAR_CATEGORY ? 'agenda'
: ( "" ) ),
'interval' => $category == self::$NEWS_CATEGORY ? 60
: ($category == self::$CALENDAR_CATEGORY ? 0
: 60 ),
'category' => $category,
'count' => $count 'count' => $count
]); ]);
return response()->json($recent);
$result = array(); $result = array();
foreach($recent as $item) foreach($recent as $item)
{ {
$newsItem = app('db')->select(self::$BASE_SQL . ' AND `news`.`id` = :newsId', ['newsId' => $item->item_id])[0]; $newsItem = app('db')->select(self::$BASE_SQL . ' AND `news`.`id` = :newsId', ['category' => $category, 'newsId' => $item->id])[0];
$pictures = app('db')->select(self::$LOAD_IMAGES, ['newsId' => $newsItem->id]); $pictures = app('db')->select(self::$LOAD_IMAGES, ['newsId' => $newsItem->id]);
$result[] = new \Model\NewsItem($newsItem, $pictures); $result[] = new \Model\NewsItem($newsItem, $pictures);
} }

View File

@@ -16,12 +16,13 @@ $app->get('/', function () use ($app) {
}); });
$app->get('nieuws/overzicht', 'NewsController@newslist' ); $app->get('nieuws/overzicht', 'NewsController@newslist' );
$app->get('nieuws/populair', 'NewsController@popular' ); $app->get('nieuws/populair', 'NewsController@popularNews' );
$app->get('nieuws/bericht/{id:\d+}', 'NewsController@newsitem' ); $app->get('nieuws/bericht/{id:\d+}', 'NewsController@newsitem' );
$app->get('nieuws/regionieuws', 'PodcastController@latestNews' ); $app->get('nieuws/regionieuws', 'PodcastController@latestNews' );
$app->get('agenda/overzicht[/week]', 'NewsController@calendarlist' ); $app->get('agenda/overzicht[/week]', 'NewsController@calendarlist' );
$app->get('agenda/item/{id:\d+}', 'NewsController@calendaritem' ); $app->get('agenda/item/{id:\d+}', 'NewsController@calendaritem' );
$app->get('agenda/populair', 'NewsController@popularCalendar' );
$app->get('podcast/overzicht', 'PodcastController@overview' ); $app->get('podcast/overzicht', 'PodcastController@overview' );
$app->get('podcast/details/{id:\d+}', 'PodcastController@details' ); $app->get('podcast/details/{id:\d+}', 'PodcastController@details' );