Example #1
0
function mode_match($cat, $mode)
{
    switch ($mode) {
        case 0:
            return category_match($cat, "L");
        case 1:
            return category_match($cat, "M");
        case 2:
            return category_match($cat, "S");
        case 3:
            return category_match($cat, "MS");
        case 4:
            return category_match($cat, "LMS");
        case 5:
            return category_match($cat, "T");
        case 6:
            return category_match($cat, "LM");
        case 7:
            return category_match($cat, "ST");
        case 8:
            return category_match($cat, "LMST");
    }
    return false;
    // invalid mode
}
 /**
  * Evalua el resultado de una competicion por equipos
  * @param {array} $r1 datos de la manga 1
  * @param {array} $r2 datos de la manga 2
  */
 function evalFinalEquipos($r1, $r2, $mindogs, $mode)
 {
     // Datos de equipos de la jornada
     $eobj = new Equipos("evalFinalEquipos", $this->prueba->ID, $this->jornada->ID);
     $tbj = $eobj->getTeamsByJornada();
     // reindexamos equipos por ID y aniadimos campos para evaluar clasificacion
     $teams = array();
     foreach ($tbj as $equipo) {
         if ($equipo['Nombre'] === "-- Sin asignar --") {
             continue;
         }
         // comprobamos la categoria. si no coincide tiramos el equipo
         $modes = array("L", "M", "S", "MS", "LMS", "T", "LM", "ST", "LMST");
         if (!category_match($equipo['Categorias'], $modes[$mode])) {
             continue;
         }
         $r = array_merge($equipo, array('C1' => 0, 'C2' => 0, 'T1' => 0, 'T2' => 0, 'P1' => 0, 'P2' => 0, 'Tiempo' => 0, 'Penalizacion' => 0));
         $teams[$equipo['ID']] = $r;
     }
     // procesamos manga 1. Se asume que los resultados ya vienen ordenados por puesto,
     // de manera que se contabilizan solo los mindogs primeros perros de cada equipo
     if ($r1 != null) {
         foreach ($r1['rows'] as $resultado) {
             $eq = $resultado['Equipo'];
             if (!array_key_exists($eq, $teams)) {
                 $this->myLogger->notice("evalFinalEquipos(): Prueba:{$this->prueba->ID} Jornada:{$this->jornada->ID} Manga:1 Equipo:{$eq} no existe");
                 continue;
             }
             if ($teams[$eq]['C1'] >= $mindogs) {
                 continue;
             }
             $teams[$eq]['C1']++;
             $teams[$eq]['T1'] += $resultado['Tiempo'];
             $teams[$eq]['P1'] += $resultado['Penalizacion'];
             $teams[$eq]['Tiempo'] += $resultado['Tiempo'];
             $teams[$eq]['Penalizacion'] += $resultado['Penalizacion'];
         }
     }
     // procesamos manga 2
     if ($r2 != null) {
         foreach ($r2['rows'] as $resultado) {
             $eq = $resultado['Equipo'];
             if (!array_key_exists($eq, $teams)) {
                 $this->myLogger->notice("evalFinalEquipos(): Prueba:{$this->prueba->ID} Jornada:{$this->jornada->ID} Manga:2 Equipo:{$eq} no existe");
                 continue;
             }
             if ($teams[$eq]['C2'] >= $mindogs) {
                 continue;
             }
             $teams[$eq]['C2']++;
             $teams[$eq]['T2'] += $resultado['Tiempo'];
             $teams[$eq]['P2'] += $resultado['Penalizacion'];
             $teams[$eq]['Tiempo'] += $resultado['Tiempo'];
             $teams[$eq]['Penalizacion'] += $resultado['Penalizacion'];
         }
     }
     // rellenamos huecos hasta completar mindogs
     foreach ($teams as &$team) {
         // 100:Eliminado 200:NoPresentado 400:Pendiente
         for ($n = $team['C1']; $n < $mindogs; $n++) {
             $team['P1'] += 400;
             $team['Penalizacion'] += 400;
         }
         for ($n = $team['C2']; $n < $mindogs; $n++) {
             $team['P2'] += 400;
             $team['Penalizacion'] += 400;
         }
     }
     // eliminamos el indice del array
     $final = array_values($teams);
     // re-ordenamos los datos en base a la puntuacion
     usort($final, function ($a, $b) {
         if ($a['Penalizacion'] == $b['Penalizacion']) {
             return $a['Tiempo'] > $b['Tiempo'] ? 1 : -1;
         }
         return $a['Penalizacion'] > $b['Penalizacion'] ? 1 : -1;
     });
     // retornamos resultado
     return $final;
 }
Example #3
0
 function getResultadosEquipos($mode)
 {
     // obtenemos resultados individuales
     $resultados = $this->getResultados($mode);
     // obtenemos los equipos de la jornada cuya categoria coincide con la buscada
     $teams = array();
     foreach ($this->getDatosEquipos() as $equipo) {
         if ($equipo['Nombre'] === "-- Sin asignar --") {
             continue;
         }
         // comprobamos la categoria. si no coincide tiramos el equipo
         $modes = array("L", "M", "S", "MS", "LMS", "T", "LM", "ST", "LMST");
         if (!category_match($equipo['Categorias'], $modes[$mode])) {
             continue;
         }
         $r = array_merge($equipo, array('Count' => 0, 'Tiempo' => 0, 'Penalizacion' => 0));
         $teams[$equipo['ID']] = $r;
     }
     // procesamos manga Se asume que los resultados ya vienen ordenados por puesto,
     $mindogs = Jornadas::getTeamDogs($this->getDatosJornada())[0];
     // get mindogs
     // de manera que se contabilizan solo los mindogs primeros perros de cada equipo
     foreach ($resultados['rows'] as $resultado) {
         $eq = $resultado['Equipo'];
         if (!array_key_exists($eq, $teams)) {
             $this->myLogger->notice("evalFinalEquipos(): Prueba:{$this->IDPrueba} Jornada:{$this->IDJornada} Manga:1 Equipo:{$eq} no existe");
             continue;
         }
         if ($teams[$eq]['Count'] >= $mindogs) {
             continue;
         }
         $teams[$eq]['Count']++;
         $teams[$eq]['Tiempo'] += $resultado['Tiempo'];
         $teams[$eq]['Penalizacion'] += $resultado['Penalizacion'];
     }
     // rellenamos huecos hasta completar mindogs
     foreach ($teams as &$team) {
         // 100:Eliminado 200:NoPresentado 400:Pendiente
         for ($n = $team['Count']; $n < $mindogs; $n++) {
             $team['Penalizacion'] += 400;
         }
     }
     // eliminamos el indice del array
     $equipos = array_values($teams);
     // re-ordenamos los datos en base a la puntuacion
     usort($equipos, function ($a, $b) {
         if ($a['Penalizacion'] == $b['Penalizacion']) {
             return $a['Tiempo'] > $b['Tiempo'] ? 1 : -1;
         }
         return $a['Penalizacion'] > $b['Penalizacion'] ? 1 : -1;
     });
     // retornamos resultado
     $resultados['individual'] = $resultados['rows'];
     $resultados['equipos'] = $equipos;
     return $resultados;
 }