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

Размер файла: 4.49Kb
  1. <?php
  2.  
  3. declare(strict_types=1);
  4.  
  5. namespace App\Http\Controllers;
  6.  
  7. use App\Classes\Validator;
  8. use App\Models\Contact;
  9. use Illuminate\Http\RedirectResponse;
  10. use Illuminate\Http\Request;
  11. use Illuminate\View\View;
  12.  
  13. class ContactController extends Controller
  14. {
  15. /**
  16. * Конструктор
  17. */
  18. public function __construct()
  19. {
  20. $this->middleware('check.user');
  21. }
  22.  
  23. /**
  24. * Главная страница
  25. *
  26. * @param Request $request
  27. * @param Validator $validator
  28. *
  29. * @return View|RedirectResponse
  30. */
  31. public function index(Request $request, Validator $validator)
  32. {
  33. $login = $request->input('user');
  34.  
  35. if ($request->isMethod('post')) {
  36. $page = int($request->input('page', 1));
  37.  
  38. $validator->equal($request->input('_token'), csrf_token(), __('validator.token'));
  39.  
  40. $user = getUserByLogin($login);
  41. $validator->notEmpty($user, ['user' => __('validator.user')]);
  42.  
  43. if ($user) {
  44. $validator->notEqual($user->login, getUser('login'), ['user' => __('contacts.forbidden_yourself')]);
  45.  
  46. $totalContact = Contact::query()->where('user_id', getUser('id'))->count();
  47. $validator->lte($totalContact, setting('limitcontact'), __('contacts.contact_full', ['max' => setting('limitcontact')]));
  48.  
  49. $validator->false(getUser()->isContact($user), ['user' => __('contacts.already_contacts')]);
  50. }
  51.  
  52. if ($validator->isValid()) {
  53. Contact::query()->create([
  54. 'user_id' => getUser('id'),
  55. 'contact_id' => $user->id,
  56. 'created_at' => SITETIME,
  57. ]);
  58.  
  59. if (! $user->isIgnore(getUser())) {
  60. $text = textNotice('contact', ['login' => getUser('login')]);
  61. $user->sendMessage(null, $text);
  62. }
  63.  
  64. setFlash('success', __('contacts.success_added'));
  65.  
  66. return redirect('contacts?page=' . $page);
  67. }
  68.  
  69. setInput($request->all());
  70. setFlash('danger', $validator->getErrors());
  71. }
  72.  
  73. $contacts = Contact::query()
  74. ->where('user_id', getUser('id'))
  75. ->orderByDesc('created_at')
  76. ->with('contactor')
  77. ->paginate(setting('contactlist'));
  78.  
  79. return view('contacts/index', compact('contacts', 'login'));
  80. }
  81.  
  82. /**
  83. * Заметка для пользователя
  84. *
  85. * @param int $id
  86. * @param Request $request
  87. * @param Validator $validator
  88. *
  89. * @return View|RedirectResponse
  90. */
  91. public function note(int $id, Request $request, Validator $validator)
  92. {
  93. $contact = Contact::query()
  94. ->where('user_id', getUser('id'))
  95. ->where('id', $id)
  96. ->first();
  97.  
  98. if (! $contact) {
  99. abort(404, __('main.record_not_found'));
  100. }
  101.  
  102. if ($request->isMethod('post')) {
  103. $msg = $request->input('msg');
  104.  
  105. $validator->equal($request->input('_token'), csrf_token(), ['msg' => __('validator.token')])
  106. ->length($msg, 0, 1000, ['msg' => __('users.note_to_big')]);
  107.  
  108. if ($validator->isValid()) {
  109. $contact->update([
  110. 'text' => $msg,
  111. ]);
  112.  
  113. setFlash('success', __('users.note_saved_success'));
  114.  
  115. return redirect('contacts');
  116. }
  117.  
  118. setInput($request->all());
  119. setFlash('danger', $validator->getErrors());
  120. }
  121.  
  122. return view('contacts/note', compact('contact'));
  123. }
  124.  
  125. /**
  126. * Удаление контактов
  127. *
  128. * @param Request $request
  129. * @param Validator $validator
  130. *
  131. * @return RedirectResponse
  132. */
  133. public function delete(Request $request, Validator $validator): RedirectResponse
  134. {
  135. $page = int($request->input('page', 1));
  136. $del = intar($request->input('del'));
  137.  
  138. $validator->equal($request->input('_token'), csrf_token(), __('validator.token'))
  139. ->true($del, __('validator.deletion'));
  140.  
  141. if ($validator->isValid()) {
  142. Contact::query()
  143. ->where('user_id', getUser('id'))
  144. ->whereIn('id', $del)
  145. ->delete();
  146.  
  147. setFlash('success', __('main.records_deleted_success'));
  148. } else {
  149. setFlash('danger', $validator->getErrors());
  150. }
  151.  
  152. return redirect('contacts?page='.$page);
  153. }
  154. }