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

namespace AppHttpControllers;

use 
AppHttpRequestsActionValidateRequest;
use 
AppHttpRequestsCardValidationRequest;
use 
AppHttpRequestsEditCardValidationRequest;
use 
AppModelsBlockedIPModel;
use 
AppModelsCardModel;
use 
AppModelsArenaBattleModel;
use 
AppModelsArenaCardsModel;
use 
AppModelsCardUserModel;
use 
AppModelsChatModel;
use 
AppModelsMailDialogModel;
use 
AppModelsMailListModel;
use 
AppModelsMailMessageModel;
use 
AppModelsMarketCardModel;
use 
AppModelsNotificationModel;
use 
IlluminateHttpRequest;
use 
Auth;
use 
DB;
use 
AppModelsSupportTicketModel;
use 
AppModelsUserModel;
use 
AppModelsForumTopicModel;
use 
AppModelsForumPostModel;
use 
AppModelsGameSettingModel;
use 
AppRulesBlockRule;
use 
URL;
use 
Cache;

class 
AdminController extends Controller
{
    public function 
__construct()
    {
        
$this->game_settings = ['mail_enable', 'chat_enable', 'register_enable'];
    }

    public function 
access()
    {
        return 
view('admin.access');
    }

    public function 
accessConfirm(Request $request)
    {
        if(
session('admin') == 1) return redirect('/admin');
        
$messages = [
            
'password.required' => 'Введите пароль',
            
'password.string' => 'Неверный формат!',
            
'password.in' => 'Неверный пароль'
        
];
        
$this->validate($request, [
            
'password' => 'required|string|in:'.config('game.admin')
        ], 
$messages);
        
session(['admin' => 1]);
        return 
redirect(session('referer_url'));
    }

    public function 
index()
    {
        
$mailStatus = GameSettingModel::where('key', 'mail_enable')->first()->value;
        
$chatStatus = GameSettingModel::where('key', 'chat_enable')->first()->value;
        
$registerStatus = GameSettingModel::where('key', 'register_enable')->first()->value;
        return 
view('admin.index', ['mail' => $mailStatus, 'chat' => $chatStatus, 'register' => $registerStatus]);
    }

    public function 
supportTickets()
    {
        return 
view('admin.support.index');
    }

    public function 
supportTicketsType($type)
    {
        if (!
in_array($type, [1, 2, 3, 4])) return back();
        
$tickets = SupportTicketModel::where('type', $type)->orderBy('updated_at', 'DESC')->paginate(10);
        return 
view('admin.support.tickets', ["tickets" => $tickets]);
    }

    public function 
addNews()
    {
        return 
view('admin.addNews');
    }

    public function 
addNewsConfirm(Request $request)
    {
        
$messages = [
            
'name.required' => 'Введите название темы!',
            
'text.required' => 'Введите текст!',
        ];
        
$this->validate($request, [
            
'name' => 'required|string',
            
'text' => 'required|string'
        
], $messages);
        
$topic = ForumTopicModel::create([
            
'author' => Auth::user()->id,
            
'name' => $request->name,
            
'category' => 1,
            
'status' => $request->close == 'on' ? 'close' : 'open'
        
]);
        
ForumPostModel::create([
            
'topic' => $topic->id,
            
'author' => Auth::user()->id,
            
'text' => $request->text,
            
'type' => 'starter'
        
]);
        
$users = UserModel::get();
        
$notify = '<center>
        '
.$topic->name.'<br>
        Текст: '
.mb_strimwidth($request->text, 0, 50, '...').'<br>
        <a href="/forum/top'
.$topic->id.'">Перейти</a>
        </center>'
;
        foreach(
$users as $us)
        {
            
NotificationModel::create([
                
'user' => $us->id,
                
'notification' => $notify,
                
'read' => 0
            
]);
        }
        return 
redirect('/forum/top' . $topic->id)->with('ok', 'Новость добавлена!');
    }

    public function 
changeSettingStatus($setting)
    {
        
$setting .= '_enable';
        if (!
in_array($setting, $this->game_settings)) return back();
        
$settingInfo = GameSettingModel::where('key', $setting)->first();
        if (
$settingInfo->value == 0) $settingInfo->value = 1;
        else 
$settingInfo->value = 0;
        
$settingInfo->save();
        return 
back()->with('ok', 'Настройка сохранена!');
    }

    public function 
blockUser($id = null)
    {
        if(
$id != null)
        {
            
$info = UserModel::findOrFail($id);
            return 
view('admin.blockUser', ['user' => 1, 'info' => $info]);
        }
        return 
view('admin.blockUser', ['user' => 0]);
    }

    public function 
blockUserConfirm(Request $request)
    {
        
$messages = [
            
'login.required' => 'Введите имя игрока!',
            
'login.string' => 'Ошибка!',
            
'login.exists' => 'Игрока не существует!',
            
'login.not_in' => 'Нельзя заблокировать самого себя!',
            
'type.required' => 'Укажите тип блокировки!',
            
'type.string' => 'Ошибка!',
            
'type.in' => 'Неверный тип блокировки!',
            
'time.required' => 'Введите время блокировки!',
            
'time.integer' => 'Неверный формат времени блокировки!',
            
'_time.required' => 'Ошибка!',
            
'_time.integer' => 'Ошибка!',
            
'_time.in' => 'Ошибка!',
            
'reason.required' => 'Введите причину блокировки!',
            
'reason.string' => 'Ошибка!',
        ];
        
$this->validate($request, [
            
'login' => ['required', 'string', 'exists:users,login', new BlockRule, 'not_in:' . Auth::user()->login],
            
'type' => 'required|string|in:ban,mute',
            
'time' => 'required|integer',
            
'_time' => 'required|integer|in:1,60,3600,86400',
            
'reason' => 'required|string'
        
], $messages);
        
$user = UserModel::where('login', $request->login)->first();
        
$user->block_type = $request->type;
        
$user->block_time = time() + ($request->time * $request->_time);
        
$user->block_reason = $request->reason;
        
$user->save();
        return 
redirect('/admin')->with('ok', 'Игрок заблокирован!');
    }

    public function 
gift()
    {
        
$cards = CardModel::all();
        return 
view('admin.gift', ['cards' => $cards]);
    }

    public function 
giftConfirm(Request $request)
    {
        
$messages = [
            
'id.integer' => 'Неверный формат ID!',
            
'id.required' => 'Введите ID игрока!',
            
'valmers.integer' => 'Неверный формат кол-ва вальмер!',
            
'valmers.required' => 'Введите кол-во вальмер!',
            
'diamonds.integer' => 'Неверный формат кол-ва алмазов!',
            
'diamonds.required' => 'Введите кол-во алмазов!',
            
'exp.integer' => 'Неверный формат кол-ва монет!',
            
'exp.required' => 'Введите кол-во монет!',
            
'card.integer' => 'Неверный формат карты!',
            
'card.exists' => 'Карты не существует!'
        
];
        
$this->validate($request, [
            
'id' => 'integer|required',
            
'valmers' => 'integer|required',
            
'diamonds' => 'integer|required',
            
'exp' => 'integer|required',
            
'card' => 'integer|exists:cards,id'
        
], $messages);
        
$gift = [];
        if (
$request->valmers > 0) $gift['valmers'] = $request->valmers;
        if (
$request->diamonds > 0) $gift['diamonds'] = $request->diamonds;
        if (
$request->exp > 0) $gift['exp'] = $request->exp;
        if (
$request->card > 0) $gift['card'] = $request->card;
        if (
$request->id <= 0) DB::table('users')->update(['gift' => json_encode($gift)]);
        else {
            
$user = UserModel::find($request->id);
            if(
$user == null) return back()->with('error', 'Игрок не найден!');
            
$user->gift = json_encode($gift);
            
$user->save();
        }
        return 
redirect('/admin')->with('ok', 'Подарок выдан!');
    }

    public function 
deleteUser()
    {
        return 
view('admin.deleteUser');
    }

    public function 
deleteUserConfirm(Request $request)
    {
        
$messages = [
            
'id.required' => 'Введите ID удаляемого игрока!',
            
'id.integer' => 'Неверный формат ID!',
            
'id.exists' => 'Игрока с данным ID не существует!',
            
'id.not_in' => 'Нельзя удалить самого себя!',
            
'agree.required' => 'Подтвердите удаление!'
        
];
        
$this->validate($request, [
            
'id' => 'required|integer|exists:users,id|not_in:' . Auth::user()->id,
            
'agree' => 'required'
        
], $messages);
        
CardUserModel::where('user', $request->id)->delete();
        
ChatModel::where('user', $request->id)->delete();
        
NotificationModel::where('user', $request->id)->delete();
        
MarketCardModel::where('user', $request->id)->delete();
        
$mailDialogs = MailDialogModel::where('user1', $request->id)->orWhere('user2', $request->id)->get();
        foreach (
$mailDialogs as $mD) {
            
MailMessageModel::where('dialog', $mD->id)->delete();
            
MailDialogModel::destroy($mD->id);
        }
        
$topics = ForumTopicModel::where('author', $request->id)->get();
        foreach (
$topics as $t) {
            
ForumPostModel::where('topic', $t->id)->delete();
            
ForumTopicModel::destroy($t->id);
        }
        
MailListModel::where('user1', $request->id)->orWhere('user2', $request->id)->delete();
        
$arenaBattles = ArenaBattleModel::where('user1', $request->id)->orWhere('user2', $request->id)->get();
        foreach (
$arenaBattles as $aB) {
            
ArenaCardsModel::where('battle', $aB->id)->delete();
            
ArenaBattleModel::destroy($aB->id);
        }
        
UserModel::destroy($request->id);
        return 
redirect('/admin')->with('ok', 'Игрок удалён!');
    }

    public function 
addCard()
    {
        return 
view('admin.card.add');
    }

    public function 
addCardConfirm(CardValidationRequest $request)
    {
        
$image = $request->image;
        
$imageName = 'card'.time();
        
$image->move(public_path('/images/cards'), $imageName.'.jpg');
        
CardModel::create([
            
'name' => $request->name,
            
'level' => $request->level,
            
'type' => $request->type,
            
'min_attack' => $request->min_attack,
            
'max_attack' => $request->max_attack,
            
'health' => $request->health,
            
'armor' => $request->armor,
            
'attack_count' => $request->attack_count,
            
'cooldown' => $request->cooldown,
            
'learn_time' => $request->learn_time,
            
'open_cost' => $request->open_cost,
            
'buyout_cost' => $request->buyout_cost,
            
'image' => $imageName,
        ]);
        return 
redirect('/admin/card/list')->with('ok', 'Карта добавлена!');
    }

    public function 
listCard()
    {
        
$cards = CardModel::orderBy('level', 'ASC')->paginate(10);
        return 
view('admin.card.list', ['cards' => $cards]);
    }

    public function 
editCard($id)
    {
        
$card = CardModel::findOrFail($id);
        return 
view('admin.card.edit', ['card' => $card]);
    }

    public function 
editCardConfirm($id, EditCardValidationRequest $request)
    {
        
$card = CardModel::findOrFail($id);
        
$card->name = $request->name;
        
$card->level = $request->level;
        
$card->type = $request->type;
        
$card->min_attack = $request->min_attack;
        
$card->max_attack = $request->max_attack;
        
$card->health = $request->health;
        
$card->armor = $request->armor;
        
$card->attack_count = $request->attack_count;
        
$card->cooldown = $request->cooldown;
        
$card->learn_time = $request->learn_time;
        
$card->open_cost = $request->open_cost;
        
$card->buyout_cost = $request->buyout_cost;
        
$card->save();
        return 
redirect('/admin/card/list')->with('ok', 'Карта изменена!');
    }

    public function 
deleteCard($id)
    {
        
$card = CardModel::findOrFail($id);
        
unlink(public_path('/images/cards/').$card->image.'.jpg');
        
$card->delete();
        return 
redirect('/admin/card/list')->with('ok', 'Карта удалена!');
    }

    public function 
action()
    {
        
$cards = CardModel::all();
        return 
view('admin.action', ['cards' => $cards]);
    }

    public function 
actionConfirm($type, ActionValidateRequest $request)
    {
        
$result = [
            
'action' => $type,
            
'time' => time()+$request->time*3600
        
];
        if(
$type == 1) $result['percent'] = $request->percent;
        elseif(
$type == 2)
        {
            
$result['card'] = $request->card;
            
$result['summ'] = $request->summ;
        }
        elseif(
$type == 3)
        {
            
$result['percent'] = $request->percent;
            
$result['summ'] = $request->summ;
        }
        elseif(
$type == 4) $result['percent'] = $request->percent;
        
GameSettingModel::where('key', 'action')->update(['value' => json_encode($result)]);
        
DB::table('users')->update(['action_used' => 0]);
        return 
redirect('/admin')->with('ok', 'Акция включена!');
    }

    public function 
referalTournament()
    {
        
$cards = CardModel::all();
        return 
view('admin.referal', ['cards' => $cards]);
    }

    public function 
referalTournamentConfirm(Request $request)
    {
        
$messages = [
            
'time.integer' => 'Неверный формат времени!',
            
'time.required' => 'Введите время конкурса!',
            
'valmers.integer' => 'Неверный формат кол-ва вальмер!',
            
'valmers.required' => 'Введите кол-во вальмер!',
            
'exp.integer' => 'Неверный формат кол-ва монет!',
            
'exp.required' => 'Введите кол-во монет!',
            
'card.integer' => 'Неверный формат карты!',
            
'card.exists' => 'Карты не существует!'
        
];
        
$this->validate($request, [
            
'time' => 'integer|required',
            
'valmers' => 'integer|required',
            
'exp' => 'integer|required',
            
'card' => 'integer|exists:cards,id'
        
], $messages);
        
$tourn = [];
        if (
$request->valmers > 0) $tourn['valmers'] = $request->valmers;
        if (
$request->exp > 0) $tourn['exp'] = $request->exp;
        if (
$request->card > 0) $tourn['card'] = $request->card;
        
$tourn['time'] = time()+$request->time*86400;
        
GameSettingModel::where('key', 'referal_tournament')->update(['value' => json_encode($tourn)]);
        return 
redirect('/admin')->with('ok', 'Конкурс начат!');
    }

    public function 
blockList()
    {
        
$blockedUsers = UserModel::where('block_time', '>=', time())->paginate(10);
        return 
view('admin.blockList', ['blocked' => $blockedUsers]);
    }

    public function 
delBlock($id)
    {
        
$user = UserModel::findOrFail($id);
        
$user->block_type = '';
        
$user->block_time = 0;
        
$user->block_reason = '';
        
$user->save();
        return 
back()->with('ok', 'Блокировка снята!');
    }

    public function 
editBlock($id)
    {
        
$user = UserModel::findOrFail($id);
        return 
view('admin.blockEdit', ['user' => $user]);
    }

    public function 
editBlockConfirm($id, Request $request)
    {
        
$messages = [
            
'type.required' => 'Укажите тип блокировки!',
            
'type.string' => 'Ошибка!',
            
'type.in' => 'Неверный тип блокировки!',
            
'time.required' => 'Введите время блокировки!',
            
'time.integer' => 'Неверный формат времени блокировки!',
            
'_time.required' => 'Ошибка!',
            
'_time.integer' => 'Ошибка!',
            
'_time.in' => 'Ошибка!',
            
'reason.required' => 'Введите причину блокировки!',
            
'reason.string' => 'Ошибка!',
        ];
        
$this->validate($request, [
            
'type' => 'required|string|in:ban,mute',
            
'time' => 'required|integer|min:0',
            
'_time' => 'required|integer|in:1,60,3600,86400',
            
'reason' => 'required|string'
        
], $messages);
        
$user = UserModel::findOrFail($id);
        
$user->block_type = $request->type;
        
$user->block_time += ($request->time * $request->_time);
        
$user->block_reason = $request->reason;
        
$user->save();
        return 
redirect('/admin')->with('ok', 'Блокировка изменена!');
    }

    public function 
blockIP()
    {
        return 
view('admin.blockIP');
    }

    public function 
blockIPConfirm(Request $request)
    {
        
$messages = [
            
'ip.required' => 'Введите IP-адрес!',
            
'ip.ip' => 'Некорректный формат IP-адреса!',
            
'ip.unique' => 'IP-адрес уже заблокирован!'
        
];
        
$this->validate($request, [
            
'ip' => 'required|ip|unique:blocked_ip,ip'
        
], $messages);
        if(
$request->input('ip') == $request->ip()) return back()->with('error', 'Нельзя заблокировать себя!');
        
BlockedIPModel::create([
            
'ip' => $request->input('ip')
        ]);
        return 
redirect('/admin')->with('ok', 'IP-адрес заблокирован!');
    }
    
    public function 
authorizeOtherAccount()
    {
        return 
view('admin.authorize');
    }

    public function 
authorizeOtherAccountConfirm(Request $request)
    {
        
$messages = [
            
'id.required' => 'Введите ID игрока!',
            
'id.exists' => 'Игрок не найден!',
            
'id.integer' => 'Неверный формат!'
        
];
        
$this->validate($request, [
            
'id' => 'required|integer|exists:users,id'
        
], $messages);
        
Cache::put('auth:'.$request->id, Auth::user()->id, (time()+86400), 1);
        
Auth::loginUsingId($request->id);
        return 
redirect('/game');
    }

    public function 
returnToAccount()
    {
        
$key = 'auth:'.Auth::user()->id;
        if(!
Cache::has($key)) return back();
        
$id = Cache::get($key);
        
Auth::loginUsingId($id);
        
Cache::forget($key);
        return 
redirect('/game');
    }
}
Онлайн: 2
Реклама