Вход Регистрация
Файл: 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', 'Игрок удалён из чёрного списка!');
    }
}
Онлайн: 2
Реклама