Файл: app/Http/Controllers/DeckController.php
Строк: 128
<?php
namespace AppHttpControllers;
use AppModelsArenaCardsModel;
use AppModelsUserModel;
use AppServicesServices;
use IlluminateHttpRequest;
use Auth;
use AppModelsCardUserModel;
use AppModelsMarketCardModel;
use AppRulesSellCardRule;
class DeckController extends Controller
{
public function index()
{
$cards = CardUserModel::with('getCardInfo')->where('user', Auth::user()->id)->whereIn('status', ['redeemed', 'selling'])->paginate(10);
return view('game.deck.index', ["cards" => $cards]);
}
public function card($id)
{
$deck = explode(';', Auth::user()->deck);
$card = CardUserModel::findOrFail($id);
if($card->user != Auth::user()->id) return redirect('/deck')->with('error', 'Ошибка!');
return view('game.deck.info', ["card" => $card, 'deck' => $deck]);
}
public function sellCard($id)
{
return view('game.deck.sell', ['id' => $id]);
}
public function sellCardConfirm(Request $request)
{
$messages = [
'card.integer' => 'Ошибка!',
'card.required' => 'Ошибка!',
'cost.integer' => 'Ошибка ввода!',
'cost.required' => 'Введите цену!'
];
$this->validate($request, [
'card' => ['integer', 'required', new SellCardRule],
'cost' => 'integer|required'
], $messages);
$arenaCards = ArenaCardsModel::where('card', $request->input('card'))->count();
if($arenaCards > 0) return back()->with('error', 'Невозможно продать карту!');
$deck = explode(';', Auth::user()->deck);
if(in_array($id, $deck)) return back()->with('error', 'Невозможно продать карту!');
if($request->input('card') == Auth::user()->mob_card) return back()->with('error', 'Невозможно продать карту!');
$card = CardUserModel::findOrFail($request->input('card'));
$card->status = 'selling';
$card->save();
MarketCardModel::create([
"user" => Auth::user()->id,
"card" => $card->id,
"cost" => $request->input('cost')
]);
return redirect('/deck')->with('ok', 'Карта выставлена на продажу!');
}
public function cancelSell($id)
{
$marketCard = MarketCardModel::where('card', $id)->first();
if($marketCard != null && $marketCard->user == Auth::user()->id) $marketCard->delete();
CardUserModel::findOrFail($id)->update(['status' => 'redeemed']);
return back()->with('ok', 'Карта снята с продажи!');
}
public function upgradeCard($id)
{
$card = CardUserModel::with('getCardInfo')->findOrFail($id);
if($card->user != Auth::user()->id) return back()->with('error', 'Ошибка!');
$cost = Services::getUpgradeData($card->upgrade_level+1, 'cost');
$currency = ($card->getCardInfo->type == 'premium' || $card->getCardInfo->type == 'tutorial-premium') ? 'valmers' : 'exp';
if(Auth::user()->$currency < $cost) return back()->with('error', 'Недостаточно '.($currency == 'valmers' ? 'вальмер' : 'монет').'!');
$card->upgrade_level++;
$card->save();
$user = UserModel::find(Auth::user()->id);
$user->$currency -= $cost;
$user->save();
return back()->with('ok', 'Карта улучшена!');
}
public function destroyCard($id)
{
$card = CardUserModel::with('getCardInfo')->findOrFail($id);
if($card->user != Auth::user()->id) return back();
if($card->status != 'redeemed') return back();
return view('game.deck.destroyConfirm', ['card' => $card]);
}
public function destroyCardConfirm($id)
{
$card = CardUserModel::with('getCardInfo')->findOrFail($id);
$arenaCards = ArenaCardsModel::where('card', $id)->count();
if($arenaCards > 0) return back()->with('error', 'Невозможно разобрать карту!');
if($card->id == Auth::user()->mob_card) return back()->with('error', 'Невозможно разобрать карту!');
$deck = explode(';', Auth::user()->deck);
if(in_array($id, $deck)) return back()->with('error', 'Невозможно разобрать карту!');
if($card->user != Auth::user()->id) return back();
if($card->status != 'redeemed') return back();
$progress = $card->getCardInfo->progress+Services::getUpgradeData($card->upgrade_level, 'progress');
$user = UserModel::find(Auth::user()->id);
$user->progress += $progress;
$user->save();
$card->delete();
return redirect('/deck')->with('ok', 'Карта разобрана!');
}
public function progressUpgrade($id)
{
$card = CardUserModel::findOrFail($id);
if($card->user != Auth::user()->id) return back()->with('error', 'Ошибка!');
$cost = Services::getUpgradeData($card->upgrade_level+1, 'progress');
if(Auth::user()->progress < $cost) return back()->with('error', 'Недостаточно прогресса!');
$user = UserModel::find(Auth::user()->id);
$user->progress -= $cost;
$user->save();
$card->upgrade_level++;
$card->save();
return back()->with('ok', 'Карта улучшена!');
}
public function myDeck()
{
$deck = explode(';', Auth::user()->deck);
$cards = CardUserModel::with('getCardInfo')->whereIn('id', $deck)->get();
return view('game.deck.my', ['cards' => $cards]);
}
public function inDeck($id)
{
$deck = explode(';', Auth::user()->deck);
$card = CardUserModel::find($id);
if($card->user != Auth::user()->id) return back();
if(!in_array(0, $deck)) return back()->with('error', 'В колоде нет места!');
if(in_array($id, $deck)) return back()->with('error', 'Карта уже в колоде!');
if($card->status != 'redeemed') return back();
foreach($deck as $key => $value)
{
if($value == 0)
{
$deck[$key] = $id;
break;
}
}
$user = UserModel::find(Auth::user()->id);
$user->deck = implode(';', $deck);
$user->save();
return back()->with('ok', 'Карта установлена в колоду!');
}
public function outDeck($id)
{
$deck = explode(';', Auth::user()->deck);
$card = CardUserModel::find($id);
if($card->user != Auth::user()->id) return back();
if(!in_array($id, $deck)) return back()->with('error', 'Карты нет в колоде!');
if($card->status != 'redeemed') return back();
foreach($deck as $key => $value)
{
if($value == $id)
{
$deck[$key] = 0;
break;
}
}
$user = UserModel::find(Auth::user()->id);
$user->deck = implode(';', $deck);
$user->save();
return back()->with('ok', 'Карта убрана из колоды!');
}
}