Файл: app/Http/Controllers/MailController.php
Строк: 198
<?php
namespace AppHttpControllers;
use CarbonCarbon;
use IlluminateHttpRequest;
use Auth;
use AppModelsMailDialogModel;
use AppModelsUserModel;
use AppModelsMailMessageModel;
use AppModelsMailListModel;
use AppRulesDialogRule;
use AppRulesEditMessageRule;
use Cache;
class MailController extends Controller
{
public function index()
{
$dialogs = MailDialogModel::with(['getDialogMessages' => function($query) {
$query->orderBy('created_at', 'DESC');
}, 'getUser1Info', 'getUser2Info'])->where('user1', '=', Auth::user()->id)->orWhere('user2', '=', Auth::user()->id)->orderBy('updated_at', 'DESC')->paginate(10);
return view('game.mail.index', ["dialogs" => $dialogs]);
}
public function dialog($id)
{
$dialog = MailDialogModel::with('getUser1Info', 'getUser2Info')->findOrFail($id);
if($dialog->user1 != Auth::user()->id && $dialog->user2 != Auth::user()->id) return redirect('/mail');
$nonReadedMessages = MailMessageModel::where('dialog', '=', $id)->where('read', '=', '0')->where('sender', '<>', Auth::user()->id)->count();
if($nonReadedMessages > 0) MailMessageModel::where('dialog', '=', $id)->where('read', '=', '0')->where('sender', '!=', Auth::user()->id)->update(['read' => '1']);
$messages = MailMessageModel::with('getSenderInfo')->where('dialog', '=', $id)->orderBy('created_at', 'desc')->paginate(10);
return view('game.mail.dialog', ['dialog' => $dialog, 'messages' => $messages]);
}
public function send(Request $request)
{
$messages = [
'message.required' => 'Введите сообщение!',
'dialog.integer' => 'Ошибка!',
'dialog.required' => 'Не указан диалог!'
];
$this->validate($request, [
'message' => 'string|required',
'dialog' => ['integer', 'required', new DialogRule]
], $messages);
if(Auth::user()->isMuted()) return back()->with('error', 'Вы заблокированы в почте!');
$antispam = Cache::get('mail:'.Auth::user()->id.':antispam');
if($antispam != null && $antispam-time() > 0) return redirect('/mail/dialog/'.$request->input('dialog'))->with('error', 'Слишком часто отправляете сообщения!');
MailMessageModel::create([
'dialog' => $request->input('dialog'),
'sender' => Auth::user()->id,
'message' => $request->input('message'),
'read' => '0'
]);
$dialog = MailDialogModel::find($request->input('dialog'));
$dialog->updated_at = Carbon::now();
$dialog->save();
Cache::put('mail:'.Auth::user()->id.':antispam', (time()+15), 1);
return redirect('/mail/dialog/'.$request->input('dialog'));
}
public function edit($id)
{
$message = MailMessageModel::with('getDialog')->findOrFail($id);
if($message->sender != Auth::user()->id) return redirect('/mail');
if($message->read == '1') return redirect('/mail');
return view('game.mail.edit', ['message' => $message]);
}
public function editConfirm(Request $request)
{
$messages = [
'message_text.required' => 'Введите сообщение!',
'message_id.integer' => 'Ошибка!',
'message_id.required' => 'Не указано сообщение!'
];
$this->validate($request, [
'message_text' => 'string|required',
'message_id' => ['integer', 'required', new EditMessageRule]
], $messages);
$message = MailMessageModel::with('getDialog')->find($request->input('message_id'));
$message->message = $request->input('message_text');
$message->created_at = Carbon::now();
$message->save();
return redirect('/mail/dialog/'.$message->getDialog->id)->with('ok', 'Сообщение отредактировано!');
}
public function newMessage($id)
{
if(UserModel::find($id) == null) return redirect('/mail')->with('error', 'Игрок не найден!');
if(MailListModel::where('user1', '=', $id)->where('user2', '=', Auth::user()->id)->where('type', '=', 'blacklist')->count() > 0) return redirect('/mail')->with('error', 'Вы в чёрном списке!');
return view('game.mail.new', ['user_id' => $id]);
}
public function newMessageConfirm(Request $request)
{
$messages = [
'user.integer' => 'Ошибка!',
'user.exists' => 'Игрок не найден!',
'user.required' => 'Ошибка!',
'message.string' => 'Введите сообщение!',
'message.required' => 'Введите сообщение!'
];
$this->validate($request, [
"user" => 'integer|exists:users,id|required',
"message" => 'string|required'
], $messages);
$antispam = Cache::get('mail:'.Auth::user()->id.':antispam');
if($antispam != null && $antispam-time() > 0) return redirect('/mail')->with('error', 'Слишком часто отправляете сообщения!');
if(Auth::user()->isMuted()) return back()->with('error', 'Вы заблокированы в почте!');
if(MailListModel::where('user1', '=', $request->input('user'))->where('user2', '=', Auth::user()->id)->where('type', '=', 'blacklist')->count() > 0) return redirect('/mail')->with('error', 'Вы в чёрном списке!');
if($request->input('user') == Auth::user()->id) return redirect('/mail')->with('error', 'Нельзя отправлять сообщения самому себе!');
$issetMailDialog = MailDialogModel::whereRaw('(user1 = '.Auth::user()->id.' AND user2 = '.$request->input('user').') OR (user1 = '.$request->input('user').' AND user2 = '.Auth::user()->id.')')->first();
if($issetMailDialog == null)
{
$mailDialog = MailDialogModel::create([
'user1' => Auth::user()->id,
'user2' => $request->input('user')
]);
}
else
{
$dialog = MailDialogModel::whereRaw('(user1 = '.Auth::user()->id.' AND user2 = '.$request->input('user').') OR (user1 = '.$request->input('user').' AND user2 = '.Auth::user()->id.')')->first();
$dialog->updated_at = Carbon::now();
$dialog->save();
}
$message = MailMessageModel::create([
'dialog' => $issetMailDialog != null ? $issetMailDialog->id : $mailDialog->id,
'sender' => Auth::user()->id,
'message' => $request->input('message'),
'read' => '0'
]);
Cache::put('mail:'.Auth::user()->id.':antispam', (time()+15), 1);
return redirect('/mail/dialog/'.$message->dialog);
}
public function friendList()
{
$friends = MailListModel::with('getInfo')->where('user1', '=', Auth::user()->id)->where('type', 'friendlist')->paginate(15);
return view('game.mail.friendlist', ['friends' => $friends]);
}
public function blackList()
{
$blacklist = MailListModel::with('getInfo')->where('user1', '=', Auth::user()->id)->where('type', 'blacklist')->paginate(15);
return view('game.mail.blacklist', ['blacklist' => $blacklist]);
}
public function addFriendList($id)
{
if(UserModel::find($id) == null) return back()->with('error', 'Игрок не найден!');
if($id == Auth::user()->id) return back()->with('error', 'Нельзя добавить самого себя в друзья!');
if(MailListModel::where('user1', '=', Auth::user()->id)->where('user2', '=', $id)->where('type', '=', 'blacklist')->count() == 1) return back()->with('error', 'Игрок в чёрном списке!');
if(MailListModel::where('user1', '=', Auth::user()->id)->where('user2', '=', $id)->where('type', '=', 'friendlist')->count() == 0)
{
$addFriend = new MailListModel;
$addFriend->type = 'friendlist';
$addFriend->user1 = Auth::user()->id;
$addFriend->user2 = $id;
$addFriend->save();
return redirect('/mail/friendlist')->with('ok', 'Игрок добавлен в друзья!');
}
return back()->with('error', 'Игрок уже в друзьях!');
}
public function addBlackList($id)
{
if(UserModel::find($id) == null) return back()->with('error', 'Игрок не найден!');
if($id == Auth::user()->id) return back()->with('error', 'Нельзя добавить самого себя в чёрный список!');
if(MailListModel::where('user1', '=', Auth::user()->id)->where('user2', '=', $id)->where('type', '=', 'friendlist')->count() == 1) return back()->with('error', 'Игрок в друзьях!');
if(MailListModel::where('user1', '=', Auth::user()->id)->where('user2', '=', $id)->where('type', '=', 'blacklist')->count() == 0)
{
$addFriend = new MailListModel;
$addFriend->type = 'blacklist';
$addFriend->user1 = Auth::user()->id;
$addFriend->user2 = $id;
$addFriend->save();
return redirect('/mail/blacklist')->with('ok', 'Игрок добавлен в чёрный список!');
}
return back()->with('error', 'Игрок уже в чёрном списке!');
}
public function delFriendList($id)
{
if(UserModel::find($id) == null) return back()->with('error', 'Игрок не найден!');
if(MailListModel::where('user1', '=', Auth::user()->id)->where('user2', '=', $id)->where('type', '=', 'friendlist')->count() == 0) return back()->with('error', 'Игрока нет в друзьях!');
MailListModel::where('user1', '=', Auth::user()->id)->where('user2', '=', $id)->where('type', '=', 'friendlist')->delete();
return back()->with('ok', 'Игрок удалён из друзей!');
}
public function delBlackList($id)
{
if(UserModel::find($id) == null) return back()->with('error', 'Игрок не найден!');
if(MailListModel::where('user1', '=', Auth::user()->id)->where('user2', '=', $id)->where('type', '=', 'blacklist')->count() == 0) return back()->with('error', 'Игрока нет в чёрном списке!');
MailListModel::where('user1', '=', Auth::user()->id)->where('user2', '=', $id)->where('type', '=', 'blacklist')->delete();
return back()->with('ok', 'Игрок удалён из чёрного списка!');
}
}