Просмотр файла app/Http/Controllers/Admin/PhotoController.php

Размер файла: 3.87Kb
  1. <?php
  2.  
  3. declare(strict_types=1);
  4.  
  5. namespace App\Http\Controllers\Admin;
  6.  
  7. use App\Classes\Validator;
  8. use App\Models\Photo;
  9. use App\Models\User;
  10. use Exception;
  11. use Illuminate\Http\RedirectResponse;
  12. use Illuminate\Http\Request;
  13. use Illuminate\View\View;
  14.  
  15. class PhotoController extends AdminController
  16. {
  17. /**
  18. * Главная страница
  19. *
  20. * @return View
  21. */
  22. public function index(): View
  23. {
  24. $photos = Photo::query()
  25. ->orderByDesc('created_at')
  26. ->with('user')
  27. ->paginate(setting('fotolist'));
  28.  
  29. return view('admin/photos/index', compact('photos'));
  30. }
  31.  
  32. /**
  33. * Редактирование ссылки
  34. *
  35. * @param int $id
  36. * @param Request $request
  37. * @param Validator $validator
  38. *
  39. * @return View|RedirectResponse
  40. */
  41. public function edit(int $id, Request $request, Validator $validator)
  42. {
  43. $page = int($request->input('page', 1));
  44. $photo = Photo::query()->find($id);
  45.  
  46. if (! $photo) {
  47. abort(404, __('photos.photo_not_exist'));
  48. }
  49.  
  50. if ($request->isMethod('post')) {
  51. $title = $request->input('title');
  52. $text = $request->input('text');
  53. $closed = empty($request->input('closed')) ? 0 : 1;
  54.  
  55. $validator->equal($request->input('_token'), csrf_token(), __('validator.token'))
  56. ->length($title, 3, 50, ['title' => __('validator.text')])
  57. ->length($text, 0, 1000, ['text' => __('validator.text_long')]);
  58.  
  59. if ($validator->isValid()) {
  60. $text = antimat($text);
  61.  
  62. $photo->update([
  63. 'title' => $title,
  64. 'text' => $text,
  65. 'closed' => $closed
  66. ]);
  67.  
  68. clearCache(['statPhotos', 'recentPhotos']);
  69. setFlash('success', __('photos.photo_success_edited'));
  70.  
  71. return redirect('admin/photos?page=' . $page);
  72. }
  73.  
  74. setInput($request->all());
  75. setFlash('danger', $validator->getErrors());
  76. }
  77.  
  78. return view('admin/photos/edit', compact('photo', 'page'));
  79. }
  80.  
  81. /**
  82. * Удаление записей
  83. *
  84. * @param int $id
  85. * @param Request $request
  86. * @param Validator $validator
  87. *
  88. * @return RedirectResponse
  89. * @throws Exception
  90. */
  91. public function delete(int $id, Request $request, Validator $validator): RedirectResponse
  92. {
  93. if (! is_writable(public_path('uploads/photos'))) {
  94. abort(200, __('main.directory_not_writable'));
  95. }
  96.  
  97. $page = int($request->input('page', 1));
  98.  
  99. /** @var Photo $photo */
  100. $photo = Photo::query()->find($id);
  101.  
  102. if (! $photo) {
  103. abort(404, __('photos.photo_not_exist'));
  104. }
  105.  
  106. $validator->equal($request->input('_token'), csrf_token(), __('validator.token'));
  107.  
  108. if ($validator->isValid()) {
  109. $photo->comments()->delete();
  110. $photo->delete();
  111.  
  112. clearCache(['statPhotos', 'recentPhotos']);
  113. setFlash('success', __('photos.photo_success_deleted'));
  114. } else {
  115. setFlash('danger', $validator->getErrors());
  116. }
  117.  
  118. return redirect('admin/photos?page=' . $page);
  119. }
  120.  
  121. /**
  122. * Пересчет комментариев
  123. *
  124. * @param Request $request
  125. *
  126. * @return RedirectResponse
  127. */
  128. public function restatement(Request $request): RedirectResponse
  129. {
  130. if (! isAdmin(User::BOSS)) {
  131. abort(200, __('main.page_only_owner'));
  132. }
  133.  
  134. if ($request->input('_token') === csrf_token()) {
  135. restatement('photos');
  136.  
  137. setFlash('success', __('main.success_recounted'));
  138. } else {
  139. setFlash('danger', __('validator.token'));
  140. }
  141.  
  142. return redirect('admin/photos');
  143. }
  144. }