public function checkPhaseTeams(Phase $phase) { $errors = []; if (count($phase->getTeams())) { foreach ($phase->getEvent()->getTeams() as $team) { if (!$phase->hasTeam($team)) { $errors[] = "L'équipe {$team->getName()} est exclue de cette phase"; } } } else { $errors[] = "Aucune équipe n'est chargée dans cette phase. Utilisez le bouton \"Chargez les équipes de l'évènement\" pour recopier toutes les équipes de l'évènement dans cette phase"; } return $errors; }
/** * Try to set a referee for each game * * @param Phase $phase */ protected function findReferees(Phase $phase) { $refereeCounter = []; foreach ($phase->getRounds() as $round) { foreach ($round->getGames() as $game) { if ($game->getReferee()) { // The game already has a referee continue; } $poolTeams = $game->getPool()->getTeams(); $teams = $phase->getTeams()->toArray(); usort($teams, function (Team $a, Team $b) use($refereeCounter, $poolTeams) { // Priority for teams in the same pool, because they know each other if ($poolTeams->contains($a) && !$poolTeams->contains($b)) { return -1; } if (!$poolTeams->contains($a) && $poolTeams->contains($b)) { return 1; } // Now priority to the teams that made few referees if (!isset($refereeCounter[$a->getId()])) { return -1; } if (!isset($refereeCounter[$b->getId()])) { return 1; } return $refereeCounter[$a->getId()] > $refereeCounter[$b->getId()]; }); // Go find a referee /** @var Team $team */ foreach ($teams as $team) { if ($round->hasTeam($team)) { // The team is already playing continue; } // Team is available, set it as a referee $game->setReferee($team); if (!isset($refereeCounter[$team->getId()])) { $refereeCounter[$team->getId()] = 0; } $refereeCounter[$team->getId()]++; break; } if (!$game->getReferee()) { // Default $game->setReferee($game->getTeam1()); } } } }