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

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