diff options
| author | Developer | 2026-06-27 02:47:40 +0200 |
|---|---|---|
| committer | Developer | 2026-06-27 02:47:40 +0200 |
| commit | 34ee983becfa088d0c39c4f0d9b35f038b351a78 (patch) | |
| tree | 25737516a97c596b8b88d2da8dfb0ded5a76a1b6 /app/Http/Controllers/FeedController.php | |
| download | curious-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.php | 97 |
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")); + } +} |
