1
0

PageController.php 2.9 KB

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