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; }
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; }