Guest User

Untitled

a guest
Mar 13th, 2018
270
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 13.83 KB | None | 0 0
  1. <?php
  2.  
  3. namespace AppBundle\Controller;
  4.  
  5. use Symfony\Bundle\FrameworkBundle\Controller\Controller;
  6. use AppBundle\Form\VoterHandler;
  7. use AppBundle\Form\MessageHandler;
  8. use AppBundle\Entity\Vote;
  9. use AppBundle\Entity\Message;
  10. use AppBundle\Entity\User;
  11.  
  12. class DefaultController extends Controller
  13. {
  14.    
  15.     public function indexAction($visibility)
  16.     {
  17.         //Récupération de l'utilisateur en cours, des repositories et initialisation des valeurs
  18.         $user = $this->container->get('security.context')->getToken()->getUser();
  19.         $em = $this->getDoctrine()->getManager();
  20.        
  21.         $dbParameters = $em->getRepository('AppBundle:Parametres')
  22.           ->createQueryBuilder('p')->getQuery()
  23.           ->setMaxResults(1)->getOneOrNullResult();
  24.         $users = $em->getRepository('AppBundle:User')->findAll();
  25.         $votes = $em->getRepository('AppBundle:Vote')->findBy(array(), array('dateVote' => 'DESC'));
  26.        
  27.         if($visibility == "private" && is_string($user))
  28.           return $this->redirect($this->generateUrl('AppBundle_homepage', array('visibility' => 'public')));
  29.        
  30.         if($visibility == "private")
  31.             $votesUserToday = $em->getRepository('AppBundle:Vote')->findBy(array('votant' => $user->getId(), 'jour' => $dbParameters->getJour() ));
  32.  
  33.         $votesCastedToday = array(1 => false, 2 => false, 3 => false);
  34.        
  35.         $alivePlayers = array();
  36.         $deadPlayers = array();
  37.         $listvotesPlayers = array();
  38.         $listvotesPlayersWW = array();
  39.  
  40.         //Changement de jour/nuit, et autres actions de fin de vote
  41.         $dbParameters = $this->dayNightSwicher($dbParameters, $em);
  42.         $em->flush();
  43.  
  44.         if($visibility == "private")
  45.             foreach($votesUserToday as $vote)
  46.                 {$votesCastedToday[$vote->getType()] = $vote->getVotePour();}
  47.        
  48.        
  49.         // Récupération des joueurs et génération des listes
  50.         foreach( $users as $player )
  51.         {
  52.             if($player->getVivant() == true)
  53.             {
  54.                 $alivePlayers[$player->getId()] = $player;
  55.                 if ($player != $user)
  56.                 {
  57.                     $listvotesPlayers[$player->getId()] = $player->getUsername();
  58.                     if($player->getRole()->getId() != 2)
  59.                         {$listvotesPlayersWW[$player->getId()]= $player->getUsername();}
  60.                 }
  61.             }
  62.             else
  63.                 {$deadPlayers[$player->getDateMort()->format('d/m/Y').'-'.$player->getTypeMort()] = $player;}
  64.         }
  65.        
  66.        
  67.         //Déterminer si l'on est le jour ou la nuit et gestion des paramètres
  68.         $dayNight = $dbParameters->getJour();
  69.        
  70.         $parameter['jour'] = $dayNight == 1 ? "jour" : "nuit";
  71.         $parameter['heureNuit'] = $dbParameters->getheureNuit();
  72.         $parameter['heureJour'] = $dbParameters->getheureJour();
  73.         $mayor = 'aucun';
  74.         if($testMayor = $em->getRepository('AppBundle:User')->findOneBy(array('maire' => true)) )
  75.             $mayor = $testMayor;
  76.        
  77.        
  78.        
  79.         if($visibility == "private")
  80.         {
  81.             //Formulaire pour le vote des vilageois
  82.             $voteAgainst = new Vote;
  83.             $formVillageVote = $this->createFormBuilder($voteAgainst)
  84.                             ->add('votePour', 'choice', array('choices' => $listvotesPlayers,
  85.                 'multiple' => false, ))
  86.                             ->add('type', 'hidden', array('data' => 1, ))
  87.                             ->getForm();
  88.            
  89.            
  90.             //Formulaire pour le vote des loups
  91.             $voteWW = new Vote;
  92.             $formVoteWolfs = $this->createFormBuilder($voteWW)
  93.                             ->add('votePour', 'choice', array('choices' => $listvotesPlayersWW,
  94.                 'multiple' => false, ))
  95.                             ->add('type', 'hidden', array('data' => '2'))
  96.                             ->getForm();
  97.            
  98.             //Formulaire pour le vote d'élection du maire
  99.             $voteM = new Vote;
  100.             $formMayorVote = $this->createFormBuilder($voteM)
  101.                             ->add('votePour', 'choice', array('choices' => $alivePlayers,
  102.                 'multiple' => false, ))
  103.                             ->add('type', 'hidden', array('data' => '3'))
  104.                             ->getForm();
  105.            
  106.             //Traitement des formulaires s'il l'un d'entre eux a été remplis
  107.             $formInfoHandler = new VoterHandler($formVillageVote, $this->get('request'), $em, $user);
  108.             if($formInfoHandler->process())
  109.             {
  110.                 return $this->render('AppBundle:Default:confirmation.html.twig', array('parameters' => $parameter));
  111.             }
  112.             else
  113.             {
  114.                 $formInfoHandler = new VoterHandler($formVoteWolfs, $this->get('request'), $em, $user);
  115.                 if($formInfoHandler->process())
  116.                 {
  117.                     return $this->render('AppBundle:Default:confirmation.html.twig', array('parameters' => $parameter));
  118.                 }
  119.                 else
  120.                 {
  121.                     $formInfoHandler = new VoterHandler($formMayorVote, $this->get('request'), $em, $user);
  122.                     if($formInfoHandler->process())
  123.                     {
  124.                         return $this->render('AppBundle:Default:confirmation.html.twig', array('parameters' => $parameter));
  125.                     }
  126.                 }
  127.             }
  128.            
  129.             //Envoyer un message : formulaire et gestion du formulaire
  130.             $message = new Message;
  131.             $formMessage = $this->createFormBuilder($message)
  132.                             ->add('message', 'textarea')
  133.                             ->getForm();
  134.             $formMessageHandler = new MessageHandler($formMessage, $this->get('request'), $em, $user);
  135.             $formMessageHandler->process();
  136.         }
  137.         //Récupération des messages :
  138.         $messages = $em->getRepository('AppBundle:Message')->findBy(array(), array('date' => 'DESC'));
  139.  
  140.        
  141.         //Récupération des votes par ordre anté-chronologique
  142.         $villagersVotes = array();
  143.         $mayorVotes = array();
  144.         $wWVotes = array();
  145.        
  146.         $votesDay = '';
  147.        
  148.         foreach($votes as $vote)
  149.         {
  150.             if($votesDay != $vote->getDateVote()->format('d/m/Y'))
  151.             {
  152.                 $votesDay = $vote->getDateVote()->format('d/m/Y');
  153.                 $villagersVotes[] = array('votant' => 'date', 'pour' => $votesDay, );
  154.                 if (array_key_exists($votesDay.'-2', $deadPlayers)) {$villagersVotes[] = array('votant' => 'wWDead', 'pour' => $deadPlayers[$votesDay.'-2']);}
  155.                 if (array_key_exists($votesDay.'-1', $deadPlayers)) {$villagersVotes[] = array('votant' => 'burnedDead', 'pour' => $deadPlayers[$votesDay.'-1']);}
  156.                 $wWVotes[] = array('votant' => 'date','pour' => $votesDay, );
  157.                 $mayorVotes[] = array('votant' => 'date','pour' => $votesDay, );
  158.             }
  159.             switch ($vote->getType())
  160.             {
  161.             case 1:
  162.             {
  163.                 $villagersVotes[] = array('votant' => $vote->getVotant(),
  164.                                             'pour' => $vote->getVotePour(), );
  165.                 break;
  166.             }
  167.             case 2:
  168.             {
  169.                 $wWVotes[] = array('votant' => $vote->getVotant(),
  170.                                         'pour' => $vote->getVotePour(), );
  171.                 break;
  172.             }
  173.             case 3:
  174.             {
  175.                 $mayorVotes[] = array('votant' => $vote->getVotant(),
  176.                                         'pour' => $vote->getVotePour(), );
  177.                 break;
  178.             }
  179.             }
  180.         }
  181.        
  182.         //Synthèse des votes en cours dans le village
  183.         $arraySynthesisVillageVotes = $em->getRepository('AppBundle:Vote')->findPersoneElue(1, $dbParameters->getJour());
  184.         $arraySynthesisMayorVotes = $em->getRepository('AppBundle:Vote')->findPersoneElue(3, $dbParameters->getJour());
  185.        
  186.         $userRepository = $em->getRepository('AppBundle:User');
  187.         foreach($arraySynthesisMayorVotes as $vote)
  188.         {
  189.             $vote = $userRepository->find($vote['id']);
  190.         }
  191.         foreach($arraySynthesisVillageVotes as $vote)
  192.         {
  193.             $vote = $userRepository->find($vote['id']);
  194.         }
  195.        
  196.         if($visibility == "private")
  197.             return $this->render('AppBundle:Default:index.html.twig',
  198.                                 array('user' => $user, 'deadPlayers' => $deadPlayers, 'alivePlayers' => $alivePlayers,
  199.                                  'parameters' => $parameter, 'formJour' => $formVillageVote->createView(),
  200.                                  'formNuit' => $formVoteWolfs->createView(), 'formMaire' => $formMayorVote->createView(),
  201.                                  'villagersVotes' => $villagersVotes, 'mayorVotes' => $mayorVotes, 'wWVotes' => $wWVotes,
  202.                                  'votesCastedToday' => $votesCastedToday,
  203.                                  'formMessage' => $formMessage->createView(), 'messages' => $messages, 'maire' => $mayor,
  204.                                  'votesParPersonneVillage' => $arraySynthesisVillageVotes,
  205.                                  'votesParPersonneMaire' => $arraySynthesisMayorVotes, ));
  206.         else
  207.         return $this->render('AppBundle:Unconnected:index.html.twig',
  208.                                 array('deadPlayers' => $deadPlayers, 'alivePlayers' => $alivePlayers,
  209.                                  'parameters' => $parameter,
  210.                                  'villagersVotes' => $villagersVotes, 'mayorVotes' => $mayorVotes,  
  211.                                  'votesCastedToday' => $votesCastedToday, 'messages' => $messages, 'maire' => $mayor,
  212.                                  'votesParPersonneVillage' => $arraySynthesisVillageVotes,
  213.                                  'votesParPersonneMaire' => $arraySynthesisMayorVotes, ));
  214.     }
  215.    
  216.    
  217.     private function dayNightSwicher($dbParameters, $em) {
  218.         //Alternance Jour/Nuit
  219.         $currentTime = intval(date("H"));
  220.         if( $dbParameters->getJour() == 0 && ($currentTime > $dbParameters->getHeureJour() && $currentTime < $dbParameters->getHeureNuit() ))
  221.         {
  222.        
  223.             $nbVoters = $em->getRepository('AppBundle:Vote')->findNumberVoter(3, $dbParameters->getJour());
  224.             if($nbVoters > 0)
  225.             {
  226.                 $arrayDevoured = $em->getRepository('AppBundle:Vote')->findPersoneElue(3, $dbParameters->getJour());
  227.                
  228.                 $idDevoured = $this->validerVote($arrayDevoured);
  229.                
  230.                 if($idDevoured)
  231.                 {
  232.                     $dead = $em->getRepository('AppBundle:User')->find($idDevoured);
  233.                     $dead->setVivant(false);
  234.                     $dead->setMaire(false);
  235.                
  236.                     $em->persist($dead);
  237.                     $em->flush();
  238.                 }
  239.                 else
  240.                     {$dbParameters->setErreur(true);}
  241.             }
  242.            
  243.             //Passage Nuit->Jour
  244.             $dbParameters->setJour(1);
  245.            
  246.         }
  247.         elseif($dbParameters->getJour() == 1 && ($currentTime >= $dbParameters->getHeureNuit() || $currentTime <= $dbParameters->getHeureJour() ))
  248.         {
  249.             //Élection du maire et condamnation
  250.             $arrayCondamned = $em->getRepository('AppBundle:Vote')->findPersoneElue(1, $dbParameters->getJour());
  251.             $arrayMayor = $em->getRepository('AppBundle:Vote')->findPersoneElue(2, $dbParameters->getJour());
  252.            
  253.             $idCondamned = $this->validerVote($arrayCondamned);
  254.             $idMayor = $this->validerVote($arrayMayor, true);
  255.            
  256.             if($idMayor)
  257.             {
  258.                 $mayor = $em->getRepository('AppBundle:User')->find($idMayor);
  259.                 $mayor->setMaire(true);
  260.                 $em->persist($mayor);
  261.             }
  262.             else
  263.                 {$dbParameters->setErreur(true);}
  264.            
  265.             if($idCondamned)
  266.             {
  267.                 $dead = $em->getRepository('AppBundle:User')->find($idCondamned);
  268.                 $dead->setVivant(false);
  269.                 $dead->setMaire(false);
  270.                 $em->persist($dead);
  271.             }
  272.             else
  273.                 {$dbParameters->setErreur(true);}
  274.            
  275.             $em->flush();
  276.            
  277.             //Passage Nuit->Jour
  278.             $dbParameters->setJour(0);
  279.             $dbParameters->jourSuivant();
  280.         }
  281.        
  282.         return $dbParameters;
  283.     }
  284.    
  285.    
  286.  
  287.     private function validerVote($arrayPeople, $facultativeVote = false) {
  288.    
  289.         $oldNbVotes =  0;
  290.         $nbEquality = 0;
  291.        
  292.         foreach($arrayPeople as $villagers)
  293.         {
  294.             if($villagers['nbVotes'] < $oldNbVotes)
  295.                 break;
  296.             elseif($villagers['id'] != 0)
  297.                 $nbEquality++;
  298.         }
  299.  
  300.         if($nbEquality <1 && !$facultativeVote)
  301.         {
  302.             throw new \Exception('Erreur 01 : pas de votes à valider !
  303.            Si le jeu est au premier jour et qu\'aucun vote n\'a été effectué ce message est normal, merci de mettre à l\'heure les paramètres (passer le paramètre jour/nuit à sa valeur actuelle).
  304.            Dans tout autre cas, merci de signaler ce bug à Sébastien Touzé : <a href="mailto:[email protected]"[email protected]</a>');
  305.         }
  306.         elseif($nbEquality >1)
  307.         {
  308.             //TODO : envois d'un mail
  309.             return false;
  310.         }
  311.         elseif($nbEquality == 1)
  312.         {
  313.             $person = $arrayPeople[$nbEquality-1];
  314.             $idPerson = $person['id'];
  315.             return $idPerson;
  316.         }
  317.     }
  318.    
  319. }
Add Comment
Please, Sign In to add comment