8if (!class_exists(
'ControllerBattle')) {
23 public function lister(): void
27 $battleDao =
new BattleDao($this->getPdo());
28 $toutesLesBattles = $battleDao->findAll();
30 $maintenant =
new DateTime();
32 foreach ($toutesLesBattles as $battle) {
33 if ($battle->getStatutBattle() === StatutBattle::En_cours) {
34 if ($maintenant > $battle->getDateFinBattle()) {
35 $battleDao->modifierStatut($battle->getIdBattle(),
'terminee');
39 $idB = (int)$battle->getIdBattle();
40 if (isset($_SESSION[
'user_email']) && !empty($_SESSION[
'user_email'])) {
41 $battle->setDejaVote($battleDao->hasUserVoted($idB, $_SESSION[
'user_email']));
44 $battle->setVotesCreateur($battleDao->getVotesCount($idB, $battle->getEmailCreateurBattle()));
45 $battle->setVotesParticipant($battleDao->getVotesCount($idB, $battle->getEmailParticipantBattle()));
47 $battlesEnCours[] = $battle;
51 echo $this->
getTwig()->render(
'battle_liste.html.twig', [
52 'page' => [
'title' =>
"Arène des Battles",
'name' =>
"battle"],
53 'battles' => $battlesEnCours,
54 'session' => $_SESSION
61 public function choisirChanson(): void
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'];
68 $battleDao =
new BattleDao($this->getPdo());
69 $battle = $battleDao->find($idBattle);
70 $estCreateur = ($battle->getEmailCreateurBattle() === $_SESSION[
'user_email']);
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]);
79 echo json_encode([
'status' =>
'success']);
83 echo json_encode([
'status' =>
'error']);
90 public function inviter(): void
92 header(
'Content-Type: application/json');
93 if ($_SERVER[
'REQUEST_METHOD'] ===
'POST' && isset($_SESSION[
'user_email'])) {
94 $emailInvite = $_POST[
'emailInvite'];
95 $pseudoInvite = $_POST[
'pseudoInvite'];
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'));
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());
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']);
119 echo json_encode([
'status' =>
'error']);
123 public function accepter(): void
125 $idBattle = isset($_GET[
'idBattle']) ? (int)$_GET[
'idBattle'] : null;
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]%"]);
133 $this->
redirectTo(
"battle",
"gestionDashboard");
137 public function refuser(): void
139 $idBattle = isset($_GET[
'idBattle']) ? (int)$_GET[
'idBattle'] : null;
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]%"]);
147 $this->
redirectTo(
"battle",
"gestionDashboard");
150 public function voter(): void
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);
166 public function supprimer(): void
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());
175 $this->
redirectTo(
"battle",
"gestionDashboard");
179 public function gestionDashboard(): void
184 $emailActuel = $_SESSION[
'user_email'];
185 $battleDao =
new BattleDao($this->getPdo());
186 $chansonDao =
new ChansonDao($this->getPdo());
187 $utilisateurDao =
new UtilisateurDao($this->getPdo());
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
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.
$twig
Environnement Twig configuré
$loader
Chargeur de fichiers Twig.