PageController.php 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  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. ];
  18. }
  19. protected function authCheck($admin_only = false)
  20. {
  21. $auth = $admin_only ?
  22. Auth::check() && Auth::user()->is_admin == true :
  23. Auth::check();
  24. if($auth == false) {
  25. abort(403);
  26. }
  27. }
  28. public function edit(Request $request)
  29. {
  30. $this->authCheck(true);
  31. $this->validate($request, [
  32. 'page' => 'required|string'
  33. ]);
  34. $slug = urldecode($request->page);
  35. if(in_array($slug, array_keys($this->cacheKeys())) == false) {
  36. return redirect(route('admin.settings.pages'));
  37. }
  38. $page = Page::firstOrCreate(['slug' => $slug]);
  39. return view('admin.pages.edit', compact('page'));
  40. }
  41. public function store(Request $request)
  42. {
  43. $this->validate($request, [
  44. 'slug' => 'required|string',
  45. 'content' => 'required|string',
  46. 'title' => 'nullable|string',
  47. 'active' => 'required|boolean'
  48. ]);
  49. $slug = urldecode($request->input('slug'));
  50. $page = Page::firstOrCreate(['slug' => $slug]);
  51. $page->content = $request->input('content');
  52. $page->title = $request->input('title');
  53. $page->active = (bool) $request->input('active');
  54. $page->save();
  55. if($page->cached) {
  56. $keys = $this->cacheKeys();
  57. $key = $keys[$page->slug];
  58. Cache::forget($key);
  59. }
  60. return response()->json(['msg' => 200]);
  61. }
  62. public function delete(Request $request)
  63. {
  64. $this->validate($request, [
  65. 'id' => 'required|integer|min:1|exists:pages,id'
  66. ]);
  67. $page = Page::findOrFail($request->input('id'));
  68. $page->delete();
  69. return redirect(route('admin.settings.pages'));
  70. }
  71. public function generatePage(Request $request)
  72. {
  73. $this->validate($request, [
  74. 'page' => 'required|string|in:about,terms,privacy',
  75. ]);
  76. $page = $request->input('page');
  77. switch ($page) {
  78. case 'about':
  79. Page::firstOrCreate(['slug' => '/site/about']);
  80. break;
  81. case 'privacy':
  82. Page::firstOrCreate(['slug' => '/site/privacy']);
  83. break;
  84. case 'terms':
  85. Page::firstOrCreate(['slug' => '/site/terms']);
  86. break;
  87. }
  88. return redirect(route('admin.settings.pages'));
  89. }
  90. }