Вход Регистрация
Файл: app/Http/Controllers/SupportController.php
Строк: 98
<?php

namespace AppHttpControllers;

use 
AppModelsNotificationModel;
use 
IlluminateFoundationAuthUser;
use 
IlluminateHttpRequest;
use 
Auth;
use 
AppModelsSupportTicketModel;
use 
AppModelsSupportMessageModel;
use 
AppModelsUserModel;
use 
Cache;

class 
SupportController extends Controller
{
    private 
$types = [null, 'Ошибки', 'Предложения', 'Вопросы администрации', 'Вопросы по игре'];
    public function 
index()
    {
        
$myTickets = SupportTicketModel::where('user', Auth::user()->id)->where('status', '<>', 'closed')->orderBy('updated_at', 'DESC')->paginate(10);
        return 
view('game.support.index', ['tickets' => $myTickets]);
    }

    public function 
newTicket()
    {
        return 
view('game.support.new');
    }

    public function 
newTicketConfirm(Request $request)
    {
        
$antispam = Cache::get('support:'.Auth::user()->id.':antispam');
        if(
$antispam-time() > 0) return redirect('/support')->with('error', 'Слишком частая отправка запросов!');
        
$messages = [
            
'type.integer' => 'Ошибка!',
            
'type.in' => 'Ошибка!',
            
'type.required' => 'Не указана тема!',
            
'name.string' => 'Ошибка!',
            
'name.required' => 'Введите название!',
            
'name.between' => 'Длина названия должна быть в пределах :min-:max символов!',
            
'text.string' => 'Ошибка!',
            
'text.required' => 'Введите описание проблемы!',
        ];
        
$this->validate($request, [
            
'type' => 'integer|in:1,2,3,4|required',
            
'name' => 'string|required|between:6,32',
            
'text' => 'string|required'
        
], $messages);
        
Cache::put('support:'.Auth::user()->id.':antispam', (time()+600), 1);
        
$ticket = SupportTicketModel::create([
            
'user' => Auth::user()->id,
            
'type' => $request->input('type'),
            
'name' => $request->input('name')
        ]);
        
SupportMessageModel::create([
            
'ticket' => $ticket->id,
            
'user' => Auth::user()->id,
            
'text' => $request->input('text')
        ]);
        
$moders = UserModel::where('role', '<>', 'user')->get();
        foreach(
$moders as $mod)
        {
            
NotificationModel::create([
                
'user' => $mod->id,
                
'notification' => 'Новый запрос в тех.поддержку, раздел <a href="/admin/support/'.$request->input('type').'">"'.$this->types[$request->input('type')].'"</a>.',
                
'read' => 0
            
]);
        }
        return 
redirect('/support/ticket/'.$ticket->id);
    }

    public function 
ticket($id)
    {
        
$ticket = SupportTicketModel::with('getMessages.getUser', 'getUser')->findOrFail($id);
        if(
$ticket->user != Auth::user()->id && Auth::user()->role == 'user') return redirect('/support')->with('error', 'Доступ закрыт!');
        
$messages = $ticket->getMessages()->orderBy('created_at', 'ASC')->paginate(10);
        if(
Auth::user()->role != 'user' && $ticket->status == 'notread')
        {
            
$ticket->status = 'read';
            
$ticket->save();
        }
        
$statuses = ['nonread' => 'Ожидает ответа администрации', 'read' => 'Прочитан', 'answered' => 'Отвечен администрацией', 'closed' => 'Закрыт'];
        return 
view('game.support.ticket', ['ticket' => $ticket, 'messages' => $messages, "types" => $this->types, "statuses" => $statuses]);
    }

    public function 
send($id, Request $request)
    {
        
$messages = [
            
'text.string' => 'Ошибка!',
            
'text.required' => 'Введите текст!'
        
];
        
$this->validate($request, [
            
'text' => 'string|required'
        
], $messages);
        
$ticket = SupportTicketModel::findOrFail($id);
        if(
$ticket->status == 'closed') return redirect('/support')->with('error', 'Запрос закрыт!');
        if(
$ticket->user != Auth::user()->id && Auth::user()->role == 'user') return redirect('/support')->with('error', 'Нет доступа!');
        if(
Auth::user()->role != 'user')
        {
            
$status = 'answered';
            
NotificationModel::create([
                
'user' => $ticket->user,
                
'notification' => 'На запрос <a href="/support/ticket/'.$ticket->id.'">"'.$ticket->name.'"</a> был получен ответ от администратора.',
                
'read' => 0
            
]);
        }
        else
        {
            
$status = 'nonread';
            
$admins = UserModel::where('role', '<>', 'user')->get();
            foreach(
$admins as $adm)
            {
                
NotificationModel::create([
                    
'user' => $adm->id,
                    
'notification' => 'На запрос <a href="/support/ticket/'.$ticket->id.'">"'.$ticket->name.'"</a> был получен ответ от игрока.',
                    
'read' => 0
                
]);
            }
        }
        
SupportMessageModel::create([
            
'ticket' => $ticket->id,
            
'user' => Auth::user()->id,
            
'text' => $request->input('text'),
        ]);
        
$ticket->status = $status;
        
$ticket->save();
        return 
back();
    }

    public function 
close($id)
    {
        
$ticket = SupportTicketModel::findOrFail($id);
        if(
$ticket->status == 'closed') return redirect('/support')->with('error', 'Запрос закрыт!');
        if(
$ticket->user != Auth::user()->id && Auth::user()->role == 'user') return redirect('/support')->with('error', 'Нет доступа!');
        
$ticket->status = 'closed';
        
$ticket->save();
        return 
redirect('/support');
    }
}
Онлайн: 1
Реклама