summaryrefslogtreecommitdiff
path: root/app/Http/Controllers/IndexController.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/IndexController.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/IndexController.php')
-rw-r--r--app/Http/Controllers/IndexController.php150
1 files changed, 150 insertions, 0 deletions
diff --git a/app/Http/Controllers/IndexController.php b/app/Http/Controllers/IndexController.php
new file mode 100644
index 0000000..7e7b31b
--- /dev/null
+++ b/app/Http/Controllers/IndexController.php
@@ -0,0 +1,150 @@
+<?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 IndexController extends Controller
+{
+
+ public function index()
+ {
+ return view('index');
+ }
+
+ public function about()
+ {
+ $count_articles = DB::Select("SELECT COUNT(*) as count FROM article;")[0];
+ $count_discussions = DB::Select("SELECT COUNT(*) as count FROM discussion;")[0];
+ $count_comments = DB::Select("SELECT sum(comments) as count FROM discussion;")[0];
+ $count_upvotes = DB::Select("SELECT sum(upvotes) as count FROM discussion;")[0];
+ return view('about', [
+ "count_articles" => $count_articles->count,
+ "count_discussions" => $count_discussions->count,
+ "count_comments" => number_format($count_comments->count),
+ "count_upvotes" => number_format($count_upvotes->count)]);
+ }
+
+ public function topic( $topic )
+ {
+ $articles = new Category;
+ $articles = $articles->orWhere('name', $topic);
+ $articles = $articles->get()->first();
+ if ( is_null($articles) ) {
+ abort(404);
+ }
+ $articles = $articles->getArticles();
+ $articles = $articles->orderBy('impact', 'desc');
+ $count = $articles->count();
+ $articles = $articles->simplePaginate(10);
+
+ return view('list', ["articles" => $articles, "count" => $count]);
+ }
+
+ public function new()
+ {
+ $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')
+ ->orderByRaw('MAX(discussion.posted_on) DESC');
+
+ $count = $articles->count();
+ $articles = $articles->simplePaginate(10);
+
+ return view('list', ["articles" => $articles, "count" => $count]);
+ }
+
+ public function show( $id ) {
+ $articles = Article::where('id', $id);
+ $articles = $articles->simplePaginate(10);
+ $page_title = "";
+ foreach($articles as $a) {
+ $page_title = $a->title;
+ }
+ return view('list', ["articles" => $articles, "count" => 1, "page_title" => $page_title]);
+ }
+
+ 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('excerpt_html', 'like', $q);
+ });
+ }
+ $count = $articles->count();
+
+ if ( "on" == $request->input("onlypopular") ) {
+ $articles = $articles->orderBy('impact', 'desc');
+ }
+ $articles = $articles->orderBy('created_at', 'desc');
+ $articles = $articles->simplePaginate(10);
+
+ return view('list', ["articles" => $articles, "count" => $count]);
+ }
+
+ public function popular()
+ {
+ $articles = new Article;
+ $articles = $articles->setTable('view_popular');
+ $count = $articles->count();
+ $articles = $articles->simplePaginate(10);
+
+ return view('list', ["articles" => $articles, "count" => $count]);
+ }
+
+ function topicindex() {
+ $categories = Category::orderBy('name');
+ $letters = DB::select("SELECT DISTINCT LEFT(name, 1) as name FROM category ORDER BY left(name, 1);");
+
+ return view('topicindex', ['topics' => $categories, 'letters' => $letters]);
+ }
+
+ public function random() {
+ $articles = new Article;
+ $articles = $articles->inRandomOrder();
+ $count = $articles->count();
+ $articles = $articles->simplePaginate(10);
+
+ return view('list', ["articles" => $articles, "count" => $count]);
+ }
+
+ public function populartopics() {
+ $topics = DB::select("
+ SELECT
+ c.name,
+ count(c.name) AS count
+ FROM category AS c
+ JOIN
+ article_category AS ac ON c.id = ac.category_id
+ GROUP BY
+ c.name
+ ORDER BY count(c.name) DESC;");
+#echo "<pre>"; var_dump($topics);exit;
+
+ return view('topicpopular', ['topics' => $topics ]);
+ }
+}