<?php
namespace App\Controller\Frontend;
use App\Controller\Shared\Ranking\CalculateRankingCached;
use App\Entity\Backend\Competicion;
use App\Entity\Backend\Jugador;
use App\Entity\Gestion\BonusRanking;
use App\Entity\Gestion\ClasificadoRanking;
use App\Entity\Gestion\PenalidadRanking;
use App\Entity\Gestion\Ranking;
use Doctrine\Persistence\ManagerRegistry;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class RankingController extends AbstractController {
private $em;
public function __construct(ManagerRegistry $doctrine){
$this->em = $doctrine->getManager();
}
/**
* F-122 Visualización del ranking
*
* @Route("/ranking/{id}", name="ranking", options={"expose"=true})
*/
public function ranking($id, CalculateRankingCached $calculateRankingCached): RedirectResponse|Response
{
$id = intval($id);
$ranking = $this->em->getRepository(Ranking::class)->find($id);
if (!$ranking) {
$this->addFlash(
'error', "El ranking seleccionado no existe");
return $this->redirect($this->generateUrl('portada'));
}
$params = $calculateRankingCached->__invoke($id);
return $this->render("frontend/Ranking/ranking.html.twig", $params);
}
/**
* F-123 Visualización detallada de un jugador en un ranking
*
* 2021-08-30 NO SE USA ACTUALMENTE
* @Route("/ranking/{id}/resultados/{idj}", name="ranking_resultados")
*/
public function rankingResultados($id, $idj) {
$ranking = $this->em->getRepository(Ranking::class)->find($id);
$jugador = $this->em->getRepository(Jugador::class)->find($idj);
$penalidad = array();
$bonus = array();
$puntos = array();
$puntosAux = $this->em->getRepository(ClasificadoRanking::class)->getPuntosJugador($id, $idj);
foreach ($puntosAux as $pa) {
$puntos[$pa["competicion"]] = ["puntos" => $pa["puntos"], "inscrito" => $pa["inscrito"]];
}
$penalidadAux = $this->em->getRepository(PenalidadRanking::class)->findBy(["ranking" => $id]);
foreach ($penalidadAux as $pa) {
if (!$pa->getTotal()) {
$comp = $pa->getCompeticion()->getId();
$puntos[$comp]["penalidad"] = $pa->getPuntos();
$puntos["total"] -= $pa->getPuntos();
}
}
$bonusAux = $this->em->getRepository(BonusRanking::class)->findBy(["ranking" => $id]);
foreach ($bonusAux as $bn) {
if (!$bn->getTotal()) {
$comp = $bn->getCompeticion()->getId();
$puntos[$comp]["bonus"] = $bn->getPuntos();
$puntos["total"] += $bn->getPuntos();
}
}
return $this->render("frontend/Ranking/resultados.html.twig", [
"ranking" => $ranking,
"puntos" => $puntos,
"jugador" => $jugador,
"penalidad" => $penalidad,
"bonus" => $bonus
]);
}
/**
* F-124 Listado de rankings a los que pertenece una competición [No se usa]
*
* @Route("/getListadoRankings", name="listado_rankings", options={"expose"=true})
*/
public function listadoRanking(Request $request, CalculateRankingCached $calculateRankingCached) {
$id = $request->request->get("id");
$competicion = $this->em->getRepository(Competicion::class)->find($id);
$listado_rankings = [];
$rankings_competicion = $competicion->getRankings();
foreach ($rankings_competicion as $rc) {
$rid = $rc->getId();
$listado_rankings[$rid] = $calculateRankingCached->__invoke($rid);
}
return $this->render("frontend/Ranking/tabs_ranking.html.twig", [
"listado_rankings" => $listado_rankings
]);
}
}