Working on Case2: New League Creation after Qualification
This commit is contained in:
parent
d8a7f78cbd
commit
66671b1e81
11 changed files with 12726 additions and 40 deletions
|
|
@ -8,6 +8,8 @@ use App\Season;
|
|||
use App\Round;
|
||||
use App\User;
|
||||
|
||||
use App\Leagues\LeagueMember;
|
||||
|
||||
use DB;
|
||||
use Log;
|
||||
|
||||
|
|
@ -64,17 +66,26 @@ class League extends Model
|
|||
|
||||
public static function cmpScore($score1, $score2) {
|
||||
// [0] = user-id
|
||||
$_score1 = $score1[1];
|
||||
// [4] = rank
|
||||
$_score1 = $score1[1];
|
||||
$goals1 = $score1[2];
|
||||
$cGoals1 = $score1[3];
|
||||
$rank1 = -1;
|
||||
if (array_key_exists(4, $score1 )) { $rank1 = $score1[4]; }
|
||||
|
||||
$_score2 = $score2[1];
|
||||
|
||||
$_score2 = $score2[1];
|
||||
$goals2 = $score2[2];
|
||||
$cGoals2 = $score2[3];
|
||||
$rank2 = -1;
|
||||
if (array_key_exists(4, $score2 )) {$rank2 = $score2[4]; }
|
||||
|
||||
$diff1 = $goals1-$cGoals1;
|
||||
$diff2 = $goals2-$cGoals2;
|
||||
|
||||
if ($rank1 < $rank2) return true;
|
||||
if ($rank2 < $rank1) return false;
|
||||
|
||||
if ($_score1 == $_score2) {
|
||||
if ($diff1==$diff2) {
|
||||
if ($goals1 == $goals2) {
|
||||
|
|
@ -131,6 +142,8 @@ class League extends Model
|
|||
|
||||
|
||||
// Für Auf/Abstiegsberechnung - wird auf previous Season angewendet.
|
||||
// Unified bezieht sich (nur) auf Gruppen-Übergreifende Listung (also alle Untergruppen)
|
||||
// Rank = -1 bedeutet über alle Rank (benötigt für Auf- und Abstieg über alle Ligen)
|
||||
public static function getUnifiedRanking($rank, $seasonId=-1) {
|
||||
$leagueScores = League::getRanking($rank, $seasonId);
|
||||
$unifiedScores = array();
|
||||
|
|
@ -144,6 +157,29 @@ class League extends Model
|
|||
return $unifiedScores;
|
||||
}
|
||||
|
||||
// Nur für Auf und Abstieg
|
||||
public static function getTotalRankingOverall($seasonId=-1) {
|
||||
$totalRanking=array();
|
||||
|
||||
foreach([1,2,3,4] as $rank) {
|
||||
|
||||
foreach (League::getUnifiedRanking($rank, $seasonId) as $rankEntry) {
|
||||
// Tuple: [0] = userId, [1] = league_score [2] = goals, [3] = counter_goals
|
||||
$tpl = array();
|
||||
$tpl[0] = $rankEntry[0];
|
||||
$tpl[1] = $rankEntry[1];
|
||||
$tpl[2] = $rankEntry[2];
|
||||
$tpl[3] = $rankEntry[3];
|
||||
$tpl[4] = $rank;
|
||||
array_push($totalRanking, $tpl);
|
||||
}
|
||||
}
|
||||
usort($totalRanking, array('App\Leagues\League','cmpScore'));
|
||||
return $totalRanking;
|
||||
|
||||
}
|
||||
|
||||
|
||||
// ausfaktoriert aus LeaguesController::createLeagues()
|
||||
// TODO: $round_count ist nur im Quali-Modus relevant und steuert, wieviele Quali-Gruppen benötigt werden.
|
||||
// TODO: Sobald es Liga1 und Liga2 gibt, wird der round_count immer 21 sein, da Liga1 und Liga2 auf
|
||||
|
|
@ -166,7 +202,7 @@ class League extends Model
|
|||
$active_member_count=sizeof(User::getActives());
|
||||
Log::info("Aktive Spieler: ".$active_member_count);
|
||||
$neededLeagues = League::neededLeagues($active_member_count, $round_count);
|
||||
Log::info("Benötigte Quali-Gruppen: ".$neededLeagues);
|
||||
Log::info("Benötigte Liga-Gruppen: ".$neededLeagues);
|
||||
|
||||
$league_ids=array();
|
||||
|
||||
|
|
@ -177,6 +213,7 @@ class League extends Model
|
|||
// Alle Spieler werden gleichmässig auf Qualifikationsgruppen aufgeteilt
|
||||
// Dieser Modus wird gewählt, wenn es keine Vorsaison gibt, es also
|
||||
// die erste Saison im System ist.
|
||||
Log::info("League::createLeagues => No previous season detected.");
|
||||
for ($league_nr=1; $league_nr<=$neededLeagues; $league_nr+=1) {
|
||||
$league = League::create([
|
||||
'is_qualification' => true,
|
||||
|
|
@ -204,7 +241,6 @@ class League extends Model
|
|||
'league_id' => $league_ids[$league_index]
|
||||
]);
|
||||
$leagueMember->save();
|
||||
|
||||
$league_index+=1;
|
||||
if (sizeof($league_ids)==$league_index) { $league_index=0; }
|
||||
}
|
||||
|
|
@ -217,6 +253,9 @@ class League extends Model
|
|||
// - 4.) Member den Ligen zuordnen
|
||||
|
||||
// Erzeugung der Ligen
|
||||
$createdLeagues=array();
|
||||
$neededLeagues=0;
|
||||
|
||||
$league_size1= min(22,$active_member_count);
|
||||
$league1 = League::create([
|
||||
'is_qualification' => false,
|
||||
|
|
@ -227,7 +266,7 @@ class League extends Model
|
|||
'season_id' => $currentSeason->id,
|
||||
'start_round_id' => $start_round_id
|
||||
]);
|
||||
|
||||
array_push($createdLeagues, $league1);
|
||||
$league_size2=min(22,$active_member_count - $league_size1);
|
||||
|
||||
if ($league_size2>0) {
|
||||
|
|
@ -240,7 +279,7 @@ class League extends Model
|
|||
'season_id' => $currentSeason->id,
|
||||
'start_round_id' => $start_round_id
|
||||
]);
|
||||
|
||||
array_push($createdLeagues, $league2);
|
||||
$league_size3 = $active_member_count - $league_size1 - $league_size2;
|
||||
|
||||
if ($league_size3>0) {
|
||||
|
|
@ -256,12 +295,58 @@ class League extends Model
|
|||
'start_round_id' => $start_round_id
|
||||
]);
|
||||
$league->save();
|
||||
|
||||
array_push($createdLeagues,$league);
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: LeagueMembers zu den Leagues hinzufügen, abhängig vom zuzuordnenden Platz
|
||||
|
||||
$unifiedList = League::getTotalRankingOverall($previousSeason->id);
|
||||
$currentCount = 1;
|
||||
//TODO: Auf- und Abstieg
|
||||
|
||||
Log::info("-- CREATED LEAGUES --");
|
||||
foreach($createdLeagues as $createdLeague) {
|
||||
Log::info("-> ".$createdLeague->id.") ".$createdLeague->name);
|
||||
//TODO: Member erzeugen / zuordnen
|
||||
}
|
||||
|
||||
$nr=1;
|
||||
$leagueNr=1;
|
||||
$neededSize3=0;
|
||||
$subLeague=1; // for rank 3 leagues only
|
||||
$leagueCount=1;
|
||||
$leagueIndex=0;
|
||||
Log::info("unified list size= ".sizeof($unifiedList));
|
||||
|
||||
foreach($unifiedList as $entry) {
|
||||
|
||||
if ($nr==23) { $leagueNr=2; $leagueCount=1; $leagueIndex=1; }
|
||||
if ($nr==45) {
|
||||
$leagueNr=3; $leagueCount=1; $leagueIndex=2;
|
||||
$neededSize3=intdiv(($active_member_count-44),$neededLeagues); // $neededLeagues = needed Groups for rank 3 leagues
|
||||
Log::info("Needed min/switch size for rank 3 leagues: ".$neededSize3);
|
||||
}
|
||||
if ($nr>45 && $leagueCount > $neededSize3) {
|
||||
$subLeague+=1;
|
||||
$leagueCount=1;
|
||||
$leagueIndex+=1;
|
||||
}
|
||||
|
||||
Log::info("#".$leagueCount." Liga ".$leagueNr."-".$subLeague.")".$nr." ".$entry[0]);
|
||||
$league=$createdLeagues[$leagueIndex];
|
||||
$leagueMember = LeagueMember::create([
|
||||
'user_id' => $entry[0],
|
||||
'league_id' => $league->id
|
||||
]);
|
||||
$leagueMember->save();
|
||||
|
||||
|
||||
$leagueCount+=1;
|
||||
$nr++;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue