<?php namespace App\Http\Controllers; use Auth; use App\Newsroom; use Illuminate\Support\Str; use Illuminate\Http\Request; use Illuminate\Support\Facades\Redis; class NewsroomController extends Controller { public function index(Request $request) { if(Auth::check()) { $posts = Newsroom::whereNotNull('published_at')->latest()->paginate(9); } else { $posts = Newsroom::whereNotNull('published_at') ->whereAuthOnly(false) ->latest() ->paginate(3); } return view('site.news.home', compact('posts')); } public function show(Request $request, $year, $month, $slug) { $post = Newsroom::whereNotNull('published_at') ->whereSlug($slug) ->whereYear('published_at', $year) ->whereMonth('published_at', $month) ->firstOrFail(); abort_if($post->auth_only && !$request->user(), 404); return view('site.news.post.show', compact('post')); } public function search(Request $request) { abort(404); $this->validate($request, [ 'q' => 'nullable' ]); } public function archive(Request $request) { abort(404); return view('site.news.archive.index'); } public function timelineApi(Request $request) { abort_if(!Auth::check(), 404); $key = 'newsroom:read:profileid:' . $request->user()->profile_id; $read = Redis::smembers($key); $posts = Newsroom::whereNotNull('published_at') ->whereShowTimeline(true) ->whereNotIn('id', $read) ->orderBy('id', 'desc') ->take(9) ->get() ->map(function($post) { return [ 'id' => $post->id, 'title' => Str::limit($post->title, 40), 'summary' => $post->summary, 'url' => $post->show_link ? $post->permalink() : null, 'published_at' => $post->published_at->format('F m, Y') ]; }); return response()->json($posts, 200, [], JSON_PRETTY_PRINT); } public function markAsRead(Request $request) { abort_if(!Auth::check(), 404); $this->validate($request, [ 'id' => 'required|integer|min:1' ]); $news = Newsroom::whereNotNull('published_at') ->findOrFail($request->input('id')); $key = 'newsroom:read:profileid:' . $request->user()->profile_id; Redis::sadd($key, $news->id); return response()->json(['code' => 200]); } }