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

Размер файла: 7.14Kb
  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\PaidAdvert;
  9. use Illuminate\Http\RedirectResponse;
  10. use Illuminate\Http\Request;
  11. use Illuminate\View\View;
  12.  
  13. class PaidAdvertController extends AdminController
  14. {
  15. /**
  16. * List adverts
  17. *
  18. * @param Request $request
  19. *
  20. * @return View
  21. */
  22. public function index(Request $request): View
  23. {
  24. $place = check($request->input('place', 'top_all'));
  25.  
  26. if (! in_array($place, PaidAdvert::PLACES, true)) {
  27. $place = 'top_all';
  28. }
  29.  
  30. $advertTotal = PaidAdvert::query()
  31. ->selectRaw('place, count(*) as total')
  32. ->groupBy('place')
  33. ->pluck('total', 'place')
  34. ->all();
  35.  
  36. $totals = [];
  37. $places = PaidAdvert::PLACES;
  38. foreach ($places as $placeName) {
  39. $totals[$placeName] = $advertTotal[$placeName] ?? 0;
  40. }
  41.  
  42. $adverts = PaidAdvert::query()
  43. ->where('place', $place)
  44. ->orderBy('created_at')
  45. ->with('user')
  46. ->get();
  47.  
  48. return view('admin/paid-adverts/index', compact('adverts', 'place', 'places', 'totals'));
  49. }
  50.  
  51. /**
  52. * Create advert
  53. *
  54. * @param Request $request
  55. * @param Validator $validator
  56. *
  57. * @return View|RedirectResponse
  58. */
  59. public function create(Request $request, Validator $validator)
  60. {
  61. $places = PaidAdvert::PLACES;
  62. $advert = new PaidAdvert();
  63.  
  64. if ($request->isMethod('post')) {
  65. $site = $request->input('site');
  66. $place = $request->input('place');
  67. $names = (array) $request->input('names');
  68. $color = $request->input('color');
  69. $bold = empty($request->input('bold')) ? 0 : 1;
  70. $term = (string) $request->input('term');
  71. $comment = $request->input('comment');
  72.  
  73. $term = strtotime($term);
  74. $names = array_unique(array_diff($names, ['']));
  75.  
  76. $validator->equal($request->input('_token'), csrf_token(), __('validator.token'))
  77. ->in($place, $places, ['place' => __('admin.paid_adverts.place_invalid')])
  78. ->url($site, ['site' => __('validator.url')])
  79. ->length($site, 5, 100, ['site' => __('validator.url_text')])
  80. ->regex($color, '|^#+[A-f0-9]{6}$|', ['color' => __('validator.color')], false)
  81. ->gt($term, SITETIME, ['term' => __('admin.paid_adverts.term_invalid')])
  82. ->length($comment, 0, 255, ['comment' => __('validator.text_long')])
  83. ->gte(count($names), 1, ['names' => __('admin.paid_adverts.names_count')]);
  84.  
  85. foreach ($names as $name) {
  86. $validator->length($name, 5, 35, ['names' => __('validator.text')]);
  87. }
  88.  
  89. if ($validator->isValid()) {
  90. PaidAdvert::query()->create([
  91. 'user_id' => getUser('id'),
  92. 'place' => $place,
  93. 'site' => $site,
  94. 'names' => array_values($names),
  95. 'color' => $color,
  96. 'bold' => $bold,
  97. 'comment' => $comment,
  98. 'created_at' => SITETIME,
  99. 'deleted_at' => $term,
  100. ]);
  101.  
  102. clearCache('paidAdverts');
  103. setFlash('success', __('main.record_added_success'));
  104.  
  105. return redirect('admin/paid-adverts?place=' . $place);
  106. }
  107.  
  108. setInput($request->all());
  109. setFlash('danger', $validator->getErrors());
  110. }
  111.  
  112. return view('admin/paid-adverts/create', compact('advert', 'places'));
  113. }
  114.  
  115. /**
  116. * Change advert
  117. *
  118. * @param int $id
  119. * @param Request $request
  120. * @param Validator $validator
  121. *
  122. * @return View|RedirectResponse
  123. */
  124. public function edit(int $id, Request $request, Validator $validator)
  125. {
  126. $places = PaidAdvert::PLACES;
  127.  
  128. /** @var PaidAdvert $advert */
  129. $advert = PaidAdvert::query()->find($id);
  130.  
  131. if (! $advert) {
  132. abort(404, __('admin.paid_adverts.not_found'));
  133. }
  134.  
  135. if ($request->isMethod('post')) {
  136. $site = $request->input('site');
  137. $place = $request->input('place');
  138. $names = (array) $request->input('names');
  139. $color = $request->input('color');
  140. $bold = empty($request->input('bold')) ? 0 : 1;
  141. $term = (string) $request->input('term');
  142. $comment = $request->input('comment');
  143.  
  144. $term = strtotime($term);
  145. $names = array_unique(array_diff($names, ['']));
  146.  
  147. $validator->equal($request->input('_token'), csrf_token(), __('validator.token'))
  148. ->in($place, $places, ['place' => __('admin.paid_adverts.place_invalid')])
  149. ->url($site, ['site' => __('validator.url')])
  150. ->length($site, 5, 100, ['site' => __('validator.url_text')])
  151. ->regex($color, '|^#+[A-f0-9]{6}$|', ['color' => __('validator.color')], false)
  152. ->gt($term, SITETIME, ['term' => __('admin.paid_adverts.term_invalid')])
  153. ->length($comment, 0, 255, ['comment' => __('validator.text_long')])
  154. ->gte(count($names), 1, ['names' => __('admin.paid_adverts.names_count')]);
  155.  
  156. foreach ($names as $name) {
  157. $validator->length($name, 5, 35, ['names' => __('validator.text')]);
  158. }
  159.  
  160. if ($validator->isValid()) {
  161. $advert->update([
  162. 'place' => $place,
  163. 'site' => $site,
  164. 'names' => array_values($names),
  165. 'color' => $color,
  166. 'bold' => $bold,
  167. 'comment' => $comment,
  168. 'deleted_at' => $term,
  169. ]);
  170.  
  171. clearCache('paidAdverts');
  172. setFlash('success', __('main.record_saved_success'));
  173.  
  174. return redirect('admin/paid-adverts?place=' . $place);
  175. }
  176.  
  177. setInput($request->all());
  178. setFlash('danger', $validator->getErrors());
  179. }
  180.  
  181. return view('admin/paid-adverts/edit', compact('advert', 'places'));
  182. }
  183.  
  184. /**
  185. * Delete adverts
  186. *
  187. * @param int $id
  188. * @param Request $request
  189. * @param Validator $validator
  190. *
  191. * @return RedirectResponse
  192. */
  193. public function delete(int $id, Request $request, Validator $validator): RedirectResponse
  194. {
  195. /** @var PaidAdvert $advert */
  196. $advert = PaidAdvert::query()->find($id);
  197.  
  198. if (! $advert) {
  199. abort(404, __('admin.paid_adverts.not_found'));
  200. }
  201.  
  202. $validator->equal($request->input('_token'), csrf_token(), __('validator.token'));
  203.  
  204. if ($validator->isValid()) {
  205. $advert->delete();
  206.  
  207. clearCache('paidAdverts');
  208. setFlash('success', __('main.record_deleted_success'));
  209. } else {
  210. setFlash('danger', $validator->getErrors());
  211. }
  212.  
  213. return redirect('admin/paid-adverts?place=' . $advert->place);
  214. }
  215. }