PageController.php 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. <?php
  2. namespace App\Http\Controllers;
  3. use Illuminate\Http\Request;
  4. use Auth, Cache;
  5. use App\Page;
  6. class PageController extends Controller
  7. {
  8. public function __construct()
  9. {
  10. $this->middleware(['auth', 'admin']);
  11. }
  12. protected function cacheKeys() {
  13. return [
  14. '/site/about' => 'site:about',
  15. '/site/privacy' => 'site:privacy',
  16. '/site/terms' => 'site:terms',
  17. '/site/kb/community-guidelines' => 'site:help:community-guidelines'
  18. ];
  19. }
  20. protected function authCheck($admin_only = false)
  21. {
  22. $auth = $admin_only ?
  23. Auth::check() && Auth::user()->is_admin == true :
  24. Auth::check();
  25. if($auth == false) {
  26. abort(403);
  27. }
  28. }
  29. public function edit(Request $request)
  30. {
  31. $this->authCheck(true);
  32. $this->validate($request, [
  33. 'page' => 'required|string'
  34. ]);
  35. $slug = urldecode($request->page);
  36. if(in_array($slug, array_keys($this->cacheKeys())) == false) {
  37. return redirect(route('admin.settings.pages'));
  38. }
  39. $page = Page::firstOrCreate(['slug' => $slug]);
  40. return view('admin.pages.edit', compact('page'));
  41. }
  42. public function store(Request $request)
  43. {
  44. $this->validate($request, [
  45. 'slug' => 'required|string',
  46. 'content' => 'required|string',
  47. 'title' => 'nullable|string',
  48. 'active' => 'required|boolean'
  49. ]);
  50. $slug = urldecode($request->input('slug'));
  51. $page = Page::firstOrCreate(['slug' => $slug]);
  52. $page->content = $request->input('content');
  53. $page->title = $request->input('title');
  54. $page->active = (bool) $request->input('active');
  55. $page->save();
  56. if($page->cached) {
  57. $keys = $this->cacheKeys();
  58. $key = $keys[$page->slug];
  59. Cache::forget($key);
  60. }
  61. return response()->json(['msg' => 200]);
  62. }
  63. public function delete(Request $request)
  64. {
  65. $this->validate($request, [
  66. 'id' => 'required|integer|min:1|exists:pages,id'
  67. ]);
  68. $page = Page::findOrFail($request->input('id'));
  69. $page->delete();
  70. return redirect(route('admin.settings.pages'));
  71. }
  72. public function generatePage(Request $request)
  73. {
  74. $this->validate($request, [
  75. 'page' => 'required|string|in:about,terms,privacy,community_guidelines',
  76. ]);
  77. $page = $request->input('page');
  78. switch ($page) {
  79. case 'about':
  80. Page::firstOrCreate(['slug' => '/site/about']);
  81. break;
  82. case 'privacy':
  83. Page::firstOrCreate(['slug' => '/site/privacy']);
  84. break;
  85. case 'terms':
  86. Page::firstOrCreate(['slug' => '/site/terms']);
  87. break;
  88. case 'community_guidelines':
  89. Page::firstOrCreate(['slug' => '/site/kb/community-guidelines']);
  90. break;
  91. }
  92. return redirect(route('admin.settings.pages'));
  93. }
  94. }