summaryrefslogtreecommitdiff
path: root/app/Http/Controllers/FeedController.php
diff options
context:
space:
mode:
authorDeveloper2026-06-27 02:47:40 +0200
committerDeveloper2026-06-27 02:47:40 +0200
commit34ee983becfa088d0c39c4f0d9b35f038b351a78 (patch)
tree25737516a97c596b8b88d2da8dfb0ded5a76a1b6 /app/Http/Controllers/FeedController.php
downloadcurious-34ee983becfa088d0c39c4f0d9b35f038b351a78.tar.gz
feat: add cinema module for browsing movies from hncrawler DB
- Add 'cinema' database connection (hncrawler DB) to config/database.php - Create CinemaController with cinema(), show(), search() methods - Add /cinema, /cinema/movie/{imdb_id}, /cinema/search routes - Create cinema.blade.php (grid listing with posters, ratings, pagination) - Create cinema-show.blade.php (detail page with cast, genres, synopsis) - Add Cinema link to navbar - Update page title logic for cinema routes
Diffstat (limited to 'app/Http/Controllers/FeedController.php')
-rw-r--r--app/Http/Controllers/FeedController.php97
1 files changed, 97 insertions, 0 deletions
diff --git a/app/Http/Controllers/FeedController.php b/app/Http/Controllers/FeedController.php
new file mode 100644
index 0000000..9d20fce
--- /dev/null
+++ b/app/Http/Controllers/FeedController.php
@@ -0,0 +1,97 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\DB;
+use App\Article;
+use App\Discussion;
+use App\Category;
+use App\Libraries\Helper;
+
+class FeedController extends Controller
+{
+
+ public function new()
+ {
+ // creating rss feed with our most recent 20 posts
+ $articles = Article::join('discussion', 'discussion.article_id', '=', 'view_article.id')
+ ->select('view_article.id', 'view_article.article_id', 'view_article.url', 'view_article.title', 'view_article.excerpt_html', 'view_article.impact', 'view_article.upvotes', 'view_article.comments', 'view_article.repost')
+ ->groupBy('view_article.id', 'view_article.article_id', 'view_article.url', 'view_article.title', 'view_article.excerpt_html', 'view_article.impact', 'view_article.upvotes', 'view_article.comments', 'view_article.repost')
+ ->where('view_article.created_at', '<', now()->subMinutes(30))
+ ->orderByRaw('MAX(discussion.posted_on) DESC')
+ ->take(20)
+ ->get();
+
+ return Helper::makeFeed($articles, "new");
+ }
+
+ public function mastodon()
+ {
+ $articles = Article::join('discussion', 'discussion.article_id', '=', 'view_article.id')
+ ->select('view_article.id', 'view_article.article_id', 'view_article.url', 'view_article.title', 'view_article.excerpt_html', 'view_article.impact', 'view_article.upvotes', 'view_article.comments', 'view_article.repost')
+ ->groupBy('view_article.id', 'view_article.article_id', 'view_article.url', 'view_article.title', 'view_article.excerpt_html', 'view_article.impact', 'view_article.upvotes', 'view_article.comments', 'view_article.repost')
+ ->where('view_article.created_at', '<', now()->subMinutes(30))
+ ->orderByRaw('MAX(discussion.posted_on) DESC')
+ ->take(20)
+ ->get();
+ return Helper::makeFeed($articles, "mastodon");
+ }
+ public function mastodon_test()
+ {
+ $articles = Article::join('discussion', 'discussion.article_id', '=', 'view_article.id')
+ ->select('view_article.id', 'view_article.article_id', 'view_article.url', 'view_article.title', 'view_article.excerpt_html', 'view_article.impact', 'view_article.upvotes', 'view_article.comments', 'view_article.repost')
+ ->groupBy('view_article.id', 'view_article.article_id', 'view_article.url', 'view_article.title', 'view_article.excerpt_html', 'view_article.impact', 'view_article.upvotes', 'view_article.comments', 'view_article.repost')
+ ->where('view_article.created_at', '<', now()->subMinutes(30))
+ ->orderByRaw('MAX(discussion.posted_on) DESC')
+ ->take(20)
+ ->get();
+ return Helper::makeFeed($articles, "mastodon_test");
+ }
+
+ public function popular()
+ {
+
+ $articles = new Article;
+ $articles = $articles->setTable('view_popular');
+ $articles = $articles->take(20)->get();
+ return Helper::makeFeed($articles, "popular");
+ }
+
+ public function search(Request $request) {
+ $search_unsafe = $request->input("q");
+
+ if ( "" == $search_unsafe ) {
+ $search_unsafe = "";
+ }
+
+ $search_unsafe = explode(",", $request->input("q"));
+
+ $articles = new Article;
+
+ if ( "on" == $request->input("onlypopular") ) {
+ $articles = $articles->setTable('view_popular');
+ }
+
+ foreach($search_unsafe as $q) {
+ $q = Helper::escapeLike($q);
+ $q = "%".$q."%";
+ $articles = $articles->where(function ($query) use ($q) {
+ $query->whereHas('getCategories', function ($query) use ($q){
+ $query->where('name', 'like', $q);
+ })
+ ->orWhere('title', 'like', $q)
+ ->orWhere('url', 'like', $q)
+ ->orWhere('excerpt_html', 'like', $q);
+ });
+ }
+ $count = $articles->count();
+
+ if ( "on" == $request->input("onlypopular") ) {
+ $articles = $articles->orderBy('impact', 'desc');
+ }
+ $articles = $articles->orderBy('created_at', 'desc');
+
+ return Helper::makeFeed($articles->take(20)->get(), $request->input("q"));
+ }
+}