Файл: 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');
}
}