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

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