- <?php
-
- declare(strict_types=1);
-
- namespace App\Controllers;
-
- use App\Classes\Validator;
- use App\Models\Contact;
- use Illuminate\Http\Request;
-
- class ContactController extends BaseController
- {
- /**
- * Конструктор
- */
- public function __construct()
- {
- parent::__construct();
-
- if (! getUser()) {
- abort(403, __('main.not_authorized'));
- }
- }
-
- /**
- * Главная страница
- *
- * @param Request $request
- * @param Validator $validator
- *
- * @return string
- */
- public function index(Request $request, Validator $validator): string
- {
- $login = $request->input('user');
-
- if ($request->isMethod('post')) {
- $page = int($request->input('page', 1));
-
- $validator->equal($request->input('token'), $_SESSION['token'], __('validator.token'));
-
- $user = getUserByLogin($login);
- $validator->notEmpty($user, ['user' => __('validator.user')]);
-
- if ($user) {
- $validator->notEqual($user->login, getUser('login'), ['user' => __('contacts.forbidden_yourself')]);
-
- $totalContact = Contact::query()->where('user_id', getUser('id'))->count();
- $validator->lte($totalContact, setting('limitcontact'), __('contacts.contact_full', ['max' => setting('limitcontact')]));
-
- $validator->false(getUser()->isContact($user), ['user' => __('contacts.already_contacts')]);
- }
-
- if ($validator->isValid()) {
- Contact::query()->create([
- 'user_id' => getUser('id'),
- 'contact_id' => $user->id,
- 'created_at' => SITETIME,
- ]);
-
- if (! $user->isIgnore(getUser())) {
- $text = textNotice('contact', ['login' => getUser('login')]);
- $user->sendMessage(null, $text);
- }
-
- setFlash('success', __('contacts.success_added'));
- redirect('/contacts?page='.$page);
- } else {
- setInput($request->all());
- setFlash('danger', $validator->getErrors());
- }
- }
-
- $contacts = Contact::query()
- ->where('user_id', getUser('id'))
- ->orderByDesc('created_at')
- ->with('contactor')
- ->paginate(setting('contactlist'));
-
- return view('contacts/index', compact('contacts', 'login'));
- }
-
- /**
- * Заметка для пользователя
- *
- * @param int $id
- * @param Request $request
- * @param Validator $validator
- *
- * @return string
- */
- public function note(int $id, Request $request, Validator $validator): string
- {
- $contact = Contact::query()
- ->where('user_id', getUser('id'))
- ->where('id', $id)
- ->first();
-
- if (! $contact) {
- abort(404, __('main.record_not_found'));
- }
-
- if ($request->isMethod('post')) {
- $msg = $request->input('msg');
-
- $validator->equal($request->input('token'), $_SESSION['token'], ['msg' => __('validator.token')])
- ->length($msg, 0, 1000, ['msg' => __('users.note_to_big')]);
-
- if ($validator->isValid()) {
- $contact->update([
- 'text' => $msg,
- ]);
-
- setFlash('success', __('users.note_saved_success'));
- redirect('/contacts');
- } else {
- setInput($request->all());
- setFlash('danger', $validator->getErrors());
- }
- }
-
- return view('contacts/note', compact('contact'));
- }
-
- /**
- * Удаление контактов
- *
- * @param Request $request
- * @param Validator $validator
- *
- * @return void
- */
- public function delete(Request $request, Validator $validator): void
- {
- $page = int($request->input('page', 1));
- $del = intar($request->input('del'));
-
- $validator->equal($request->input('token'), $_SESSION['token'], __('validator.token'))
- ->true($del, __('validator.deletion'));
-
- if ($validator->isValid()) {
- Contact::query()
- ->where('user_id', getUser('id'))
- ->whereIn('id', $del)
- ->delete();
-
- setFlash('success', __('main.records_deleted_success'));
- } else {
- setFlash('danger', $validator->getErrors());
- }
-
- redirect('/contacts?page='.$page);
- }
- }