tippspiel/pfosten/app/Http/Controllers/TippsController.php

151 lines
4 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Season;
use App\Round;
use App\Game;
use App\Tipp;
use App\User;
use Auth;
use Log;
use DB;
class TippsController extends Controller
{
public static function createTipps($user_id) {
$activeSeason = Season::getCurrent();
$rounds = Round::all()->where('season_id', '=', $activeSeason->id);
foreach($rounds as $round) {
$games=Game::all()->where('round_id','=',$round->id);
foreach($games as $game) {
// Tipp erzeugen wenn noch nicht vorhanden
$tipp = DB::table('tipps')->where([
['game_id','=',$game->id],
['user_id','=',$user_id]]
)->first();
if (! $tipp) {
//Log::info('Creating missing tip: game_id=' . $game->id . ", user_id=" . $user->id);
$tipp=Tipp::create([
'user_id' => $user_id,
'game_id'=> $game->id,
'score1'=> -1,
'score2'=> -1,
'joker'=> false
]);
$tipp->save();
}
}
}
}
public static function createAllTips(){
$users = DB::table('users')->where('deleted',null)->get();
foreach($users as $user) {
TippsController::createTipps($user->id);
}
}
public function index()
{
if (Auth::guest()) { return redirect("/"); }
$user = Auth::user();
$activeSeason = Season::getCurrent();
if (!$activeSeason) {
return redirect('/');
}
if (! User::payment_date($user->id, $activeSeason->id)) {
return view('users.no_payment');
}
$rounds = null;
TippsController::createTipps($user->id); // ggfs. fehlender Tipp Eintraege einfügen
if ($activeSeason) {
$activeSeasonId = Season::getCurrent()->id;
$rounds = Round::all()->where('season_id', '=', $activeSeasonId);
}
return view('tipps.index', compact('rounds', 'activeSeason', 'user'));
}
public function edit($tipp_id) {
$tipp = Tipp::where('id','=',$tipp_id)->first();
$game = Game::where('id','=',$tipp->game_id)->first();
return view('tipps.edit',compact('tipp','game'));
}
public function store() {
// Validate form
$this->validate(request(), [
'id' => 'required',
'score1' => 'required',
'score2' => 'required',
'round_id' => 'required'
]);
$user=Auth::user();
// Fetch, modify, save Tipp
$tipp = Tipp::where('id', request('id'))->first();
$tipp->score1= request('score1');
$tipp->score2= request('score2');
if (request()->has('joker')) {
if (Round::hasLockedGame(request('round_id'))==false) { // Jokermod nur wenn Runde noch nicht begonnen hat
$tipp->joker=true;
} else {
$tipp->joker = false;
}
}
$tipp->save();
// Joker gesetzt ? Dann Jokerflag für alle Tipps der selben Runde entfernen
if ($tipp->joker){
Log::info("Checking for joker strip");
$game=Game::where('id','=',$tipp->game_id)->first();
$round_id=$game->round_id;
$games = DB::table('games')->where('round_id', '=', request('round_id'))->get();
foreach ($games as $game) {
$tipp = Tipp::where('user_id', $user->id)->where('game_id', $game->id)->first();
Log::info("Testing game_id " . $game->id);
if ($tipp->id != request('id')) {
Log::info("Resetting game_id " . $game->id);
$tipp->joker = false;
$tipp->save();
}
}
}
// Redirect to the Rounds Index
return redirect('/tipps');
}
}