NewsroomController.php 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <?php
  2. namespace App\Http\Controllers;
  3. use Auth;
  4. use App\Newsroom;
  5. use Illuminate\Support\Str;
  6. use Illuminate\Http\Request;
  7. use Illuminate\Support\Facades\Redis;
  8. class NewsroomController extends Controller
  9. {
  10. public function index(Request $request)
  11. {
  12. if(Auth::check()) {
  13. $posts = Newsroom::whereNotNull('published_at')->latest()->paginate(9);
  14. } else {
  15. $posts = Newsroom::whereNotNull('published_at')
  16. ->whereAuthOnly(false)
  17. ->latest()
  18. ->paginate(3);
  19. }
  20. return view('site.news.home', compact('posts'));
  21. }
  22. public function show(Request $request, $year, $month, $slug)
  23. {
  24. $post = Newsroom::whereNotNull('published_at')
  25. ->whereSlug($slug)
  26. ->whereYear('published_at', $year)
  27. ->whereMonth('published_at', $month)
  28. ->firstOrFail();
  29. abort_if($post->auth_only && !$request->user(), 404);
  30. return view('site.news.post.show', compact('post'));
  31. }
  32. public function search(Request $request)
  33. {
  34. abort(404);
  35. $this->validate($request, [
  36. 'q' => 'nullable'
  37. ]);
  38. }
  39. public function archive(Request $request)
  40. {
  41. abort(404);
  42. return view('site.news.archive.index');
  43. }
  44. public function timelineApi(Request $request)
  45. {
  46. abort_if(!Auth::check(), 404);
  47. $key = 'newsroom:read:profileid:' . $request->user()->profile_id;
  48. $read = Redis::smembers($key);
  49. $posts = Newsroom::whereNotNull('published_at')
  50. ->whereShowTimeline(true)
  51. ->whereNotIn('id', $read)
  52. ->orderBy('id', 'desc')
  53. ->take(9)
  54. ->get()
  55. ->map(function($post) {
  56. return [
  57. 'id' => $post->id,
  58. 'title' => Str::limit($post->title, 25),
  59. 'summary' => $post->summary,
  60. 'url' => $post->show_link ? $post->permalink() : null,
  61. 'published_at' => $post->published_at->format('F m, Y')
  62. ];
  63. });
  64. return response()->json($posts, 200, [], JSON_PRETTY_PRINT);
  65. }
  66. public function markAsRead(Request $request)
  67. {
  68. abort_if(!Auth::check(), 404);
  69. $this->validate($request, [
  70. 'id' => 'required|integer|min:1'
  71. ]);
  72. $news = Newsroom::whereNotNull('published_at')
  73. ->findOrFail($request->input('id'));
  74. $key = 'newsroom:read:profileid:' . $request->user()->profile_id;
  75. Redis::sadd($key, $news->id);
  76. return response()->json(['code' => 200]);
  77. }
  78. }