Ejemplo n.º 1
0
 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;
 }
Ejemplo n.º 2
0
 /**
  * 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());
             }
         }
     }
 }