Вход Регистрация
Файл: 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($idRequest $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');
    }
}
Онлайн: 0
Реклама