Paaxio 1.0
Plateforme de streaming musical - SAE IUT Bayonne
Chargement...
Recherche...
Aucune correspondance
controller_battle.class.php
Aller à la documentation de ce fichier.
1<?php
2
8if (!class_exists('ControllerBattle')) {
9
10 class ControllerBattle extends Controller
11 {
15 public function __construct(\Twig\Environment $twig, \Twig\Loader\FilesystemLoader $loader)
16 {
17 parent::__construct($loader, $twig);
18 }
19
23 public function lister(): void
24 {
25 $this->requireAnyRole([RoleEnum::Artiste, RoleEnum::Auditeur]);
26
27 $battleDao = new BattleDao($this->getPdo());
28 $toutesLesBattles = $battleDao->findAll();
29 $battlesEnCours = [];
30 $maintenant = new DateTime();
31
32 foreach ($toutesLesBattles as $battle) {
33 if ($battle->getStatutBattle() === StatutBattle::En_cours) {
34 if ($maintenant > $battle->getDateFinBattle()) {
35 $battleDao->modifierStatut($battle->getIdBattle(), 'terminee');
36 continue;
37 }
38
39 $idB = (int)$battle->getIdBattle();
40 if (isset($_SESSION['user_email']) && !empty($_SESSION['user_email'])) {
41 $battle->setDejaVote($battleDao->hasUserVoted($idB, $_SESSION['user_email']));
42 }
43
44 $battle->setVotesCreateur($battleDao->getVotesCount($idB, $battle->getEmailCreateurBattle()));
45 $battle->setVotesParticipant($battleDao->getVotesCount($idB, $battle->getEmailParticipantBattle()));
46
47 $battlesEnCours[] = $battle;
48 }
49 }
50
51 echo $this->getTwig()->render('battle_liste.html.twig', [
52 'page' => ['title' => "Arène des Battles", 'name' => "battle"],
53 'battles' => $battlesEnCours,
54 'session' => $_SESSION
55 ]);
56 }
57
61 public function choisirChanson(): void
62 {
63 header('Content-Type: application/json');
64 if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_SESSION['user_email'])) {
65 $idBattle = (int)$_POST['idBattle'];
66 $idChanson = (int)$_POST['idChanson'];
67
68 $battleDao = new BattleDao($this->getPdo());
69 $battle = $battleDao->find($idBattle);
70 $estCreateur = ($battle->getEmailCreateurBattle() === $_SESSION['user_email']);
71
72 if ($battleDao->modifierChanson($idBattle, $idChanson, $estCreateur)) {
73 $battleAjour = $battleDao->find($idBattle);
74 if ($battleAjour->getIdChansonCreateur() && $battleAjour->getIdChansonParticipant()) {
75 $battleDao->modifierStatut($idBattle, 'en_cours');
76 $sql = "UPDATE battle SET dateDebutBattle = NOW(), dateFinBattle = DATE_ADD(NOW(), INTERVAL 1 DAY) WHERE idBattle = :id";
77 $this->getPdo()->prepare($sql)->execute([':id' => $idBattle]);
78 }
79 echo json_encode(['status' => 'success']);
80 exit;
81 }
82 }
83 echo json_encode(['status' => 'error']);
84 exit;
85 }
86
90 public function inviter(): void
91 {
92 header('Content-Type: application/json');
93 if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_SESSION['user_email'])) {
94 $emailInvite = $_POST['emailInvite'];
95 $pseudoInvite = $_POST['pseudoInvite'];
96
97 $battle = new Battle();
98 $battle->setTitreBattle($_SESSION['user_pseudo'] . " VS " . $pseudoInvite);
99 $battle->setStatutBattle(StatutBattle::En_attente);
100 $battle->setEmailCreateurBattle($_SESSION['user_email']);
101 $battle->setEmailParticipantBattle($emailInvite);
102 $battle->setDateDebutBattle(new DateTime());
103 $battle->setDateFinBattle((new DateTime())->modify('+1 day'));
104
105 $battleDao = new BattleDao($this->getPdo());
106 if ($battleDao->insert($battle)) {
107 $idBattle = $this->getPdo()->lastInsertId();
108 $messageDao = new MessageDao($this->getPdo());
109 $uDao = new UtilisateurDao($this->getPdo());
110 $msg = new Message();
111 $msg->setContenu("[BATTLE_INVITE:" . $idBattle . "] Salut ! Je t'invite à un battle musical. Es-tu prêt ?");
112 $msg->setEmailExpediteur($uDao->find($_SESSION['user_email']));
113 $msg->setEmailDestinataire($uDao->find($emailInvite));
114 $messageDao->create($msg);
115 echo json_encode(['status' => 'success']);
116 exit;
117 }
118 }
119 echo json_encode(['status' => 'error']);
120 exit;
121 }
122
123 public function accepter(): void
124 {
125 $idBattle = isset($_GET['idBattle']) ? (int)$_GET['idBattle'] : null;
126 if ($idBattle) {
127 $pdo = $this->getPdo();
128 (new BattleDao($pdo))->modifierStatut($idBattle, 'en_attente');
129 $sql = "UPDATE message SET contenuMessage = 'L\'invitation au battle a été acceptée !' WHERE contenuMessage LIKE :search";
130 $stmt = $pdo->prepare($sql);
131 $stmt->execute([':search' => "%[BATTLE_INVITE:$idBattle]%"]);
132 }
133 $this->redirectTo("battle", "gestionDashboard");
134 exit;
135 }
136
137 public function refuser(): void
138 {
139 $idBattle = isset($_GET['idBattle']) ? (int)$_GET['idBattle'] : null;
140 if ($idBattle) {
141 $pdo = $this->getPdo();
142 (new BattleDao($pdo))->modifierStatut($idBattle, 'annulee');
143 $sql = "UPDATE message SET contenuMessage = 'L\'invitation au battle a été refusée.' WHERE contenuMessage LIKE :search";
144 $stmt = $pdo->prepare($sql);
145 $stmt->execute([':search' => "%[BATTLE_INVITE:$idBattle]%"]);
146 }
147 $this->redirectTo("battle", "gestionDashboard");
148 }
149
150 public function voter(): void
151 {
152
153 $this->requireAuth("battle", "lister");
154
155 if ($_SERVER['REQUEST_METHOD'] === 'POST') {
156 $idBattle = (int)$_POST['idBattle'];
157 $emailVotee = $_POST['emailVotee'];
158 $battleDao = new BattleDao($this->getPdo());
159 if (!$battleDao->hasUserVoted($idBattle, $_SESSION['user_email'])) {
160 $battleDao->addVote($_SESSION['user_email'], $idBattle, $emailVotee);
161 }
162 }
163 $this->redirectTo("battle", "lister");
164 }
165
166 public function supprimer(): void
167 {
168 if (isset($_POST['idBattle']) && isset($_SESSION['user_email'])) {
169 $battleDao = new BattleDao($this->getPdo());
170 $battle = $battleDao->find((int)$_POST['idBattle']);
171 if ($battle && $battle->getEmailCreateurBattle() === $_SESSION['user_email'] && $battle->getStatutBattle()->value === 'en_attente') {
172 $battleDao->deleteBattle($battle->getIdBattle());
173 }
174 }
175 $this->redirectTo("battle", "gestionDashboard");
176 exit;
177 }
178
179 public function gestionDashboard(): void
180 {
181
182 $this->requireRole(RoleEnum::Artiste);
183
184 $emailActuel = $_SESSION['user_email'];
185 $battleDao = new BattleDao($this->getPdo());
186 $chansonDao = new ChansonDao($this->getPdo());
187 $utilisateurDao = new UtilisateurDao($this->getPdo());
188
189 echo $this->getTwig()->render('battle_dashboard.html.twig', [
190 'page' => ['title' => "Gestion de mes Battles", 'name' => "battle_gestion"],
191 'battles' => $battleDao->findAllByUser($emailActuel),
192 'stats' => $battleDao->getStatsArtiste($emailActuel),
193 'mesChansons' => $chansonDao->findAllFromUser($emailActuel),
194 'artistesDisponibles' => $utilisateurDao->findAllArtistes($emailActuel),
195 'session' => $_SESSION
196 ]);
197 }
198 }
199}
Classe représentant une battle musicale.
Classe de base pour tous les contrôleurs de l'application.
__construct(\Twig\Loader\FilesystemLoader $loader, \Twig\Environment $twig)
Constructeur du contrôleur.
requireRole($requiredRole)
Exige que l'utilisateur ait un rôle spécifique.
redirectTo(string $controller, string $method, array $params=[])
Redirige vers un contrôleur et une méthode donnés.
requireAnyRole(array $allowedRoles)
Exige que l'utilisateur ait un des rôles spécifiés.
requireAuth(string $controller='', string $method='', array $params=[])
Exige que l'utilisateur soit authentifié.
getTwig()
Récupère l'environnement Twig.
$pdo
Classe de gestion de la connexion MySQL.
Definition include.php:328
$twig
Environnement Twig configuré
Definition twig.php:32
$loader
Chargeur de fichiers Twig.
Definition twig.php:21