MOD #137 création de classes et suppression de variables globales
[cl7.git] / php / controller.php
1 <?php # coding: utf-8
2
3 /**
4 * Controller traite les données envoyées par le client.
5 */
6 class Controller
7 {
8 private $participant;
9 public $message_utilisateur = NULL;
10
11 function Controller($participant)
12 {
13 $this->participant = $participant;
14
15 # inscription d'un nouveau participant
16 if (isset($_POST['inscription']) && !Participant::nombre_participant_max_atteint())
17 {
18 if ($config->get("inscription_terminees"))
19 return;
20
21 traiter_donnees_inscription();
22 if (!login_deja_pris() && # vérification des données
23 donnees_inscription_valides() &&
24 $_POST['accord'] == "on"
25 )
26 {
27 mysql_query("BEGIN TRANSACTION");
28 mysql_query("
29 INSERT INTO participants
30 (pseudo, password, clan_nom, clan_tag, nom, prenom, age, e_mail, remarques)
31 VALUES (
32 '".addslashes($_POST['pseudo'])."',
33 '".addslashes($_POST['pass1'])."',
34 '".addslashes($_POST['clan_nom'])."',
35 '".addslashes($_POST['clan_tag'])."',
36 '".addslashes($_POST['nom'])."',
37 '".addslashes($_POST['prenom'])."',
38 '".addslashes($_POST['age'])."',
39 '".addslashes($_POST['e_mail'])."',
40 '".addslashes($_POST['remarques'])."'
41 )"
42 );
43 $id = mysql_insert_id();
44 set_periodes($id);
45 mysql_query("COMMIT");
46
47 $this->participant = new participant($_POST['pseudo'], $_POST['pass1']);
48 setcookie("COOKIE_INFO_PATICIPANT", $this->participant->info->id, time() + 31104000);
49 $page = "bienvenue";
50 }
51 }
52 # un participant modifie ses infos
53 else if(isset($_POST['modification_participant']) && $this->participant->valide)
54 {
55 if ($config->get("inscription_terminees"))
56 return;
57
58 traiter_donnees_inscription();
59 if (!login_deja_pris() && donnees_inscription_valides())
60 {
61 mysql_query("BEGIN TRANSACTION");
62 mysql_query("UPDATE participants SET pseudo = '".addslashes($_POST['pseudo'])."' WHERE id = " . $this->participant->info->id);
63 mysql_query("UPDATE participants SET password = '".addslashes($_POST['pass1'])."' WHERE id = " . $this->participant->info->id);
64 mysql_query("UPDATE participants SET clan_nom = '".addslashes($_POST['clan_nom'])."' WHERE id = " . $this->participant->info->id);
65 mysql_query("UPDATE participants SET clan_tag = '".addslashes($_POST['clan_tag'])."' WHERE id = " . $this->participant->info->id);
66 mysql_query("UPDATE participants SET nom = '".addslashes($_POST['nom'])."' WHERE id = " . $this->participant->info->id);
67 mysql_query("UPDATE participants SET prenom = '".addslashes($_POST['prenom'])."' WHERE id = " . $this->participant->info->id);
68 mysql_query("UPDATE participants SET age = '".addslashes($_POST['age'])."' WHERE id = " . $this->participant->info->id);
69 mysql_query("UPDATE participants SET e_mail = '".addslashes($_POST['e_mail'])."' WHERE id = " . $this->participant->info->id);
70 mysql_query("UPDATE participants SET remarques = '".addslashes($_POST['remarques'])."' WHERE id = " . $this->participant->info->id);
71 set_periodes($this->participant->info->id);
72 mysql_query("COMMIT");
73 //header("Location: /inscrits.html");
74 $this->message_utilisateur = "Les modifications ont été enregistrées";
75 $page = "inscrits"; // TODO : moche car la page ne va plus correspondre à l'url
76 }
77 }
78 # vote pour des jeux (autorisé même lorsque les inscriptions sont terminées)
79 else if (isset($_POST['set_jeux_joues']) && $this->participant->valide)
80 {
81 $votes = $_POST['votes'];
82 if (!$votes)
83 $votes = array();
84
85 mysql_query("BEGIN TRANSACTION");
86
87 # l'utilisateur peut proposer le nom d'un jeu qui ne se trouve pas dans la liste
88 $jeu = trim($_POST['jeu']);
89 if ($jeu !== '')
90 {
91 mysql_query("INSERT INTO jeux (nom) VALUES ('".addslashes($jeu)."')");
92 $id = mysql_insert_id();
93 if ($id != 0) # si le jeu se trouve déjà dans la liste alors $id == 0
94 array_unshift($votes, $id);
95 }
96
97 # suppression des anciens votes (remplacement par les nouveaux)
98 mysql_query("DELETE FROM jeux_choisis WHERE participant_id = " . $this->participant->info->id);
99
100 # traite les trois premiers votes
101 for ($i = 0; $i < count($votes) && $i < $config->get('nb_votes_jeux'); $i++)
102 {
103 mysql_query("INSERT INTO jeux_choisis (participant_id, jeu_id) VALUES (".$this->participant->info->id.", ".(int)$votes[$i].")");
104 }
105
106 mysql_query("COMMIT");
107 }
108 }
109
110 /**
111 * Traiter les données de l'inscription (trim par exemple).
112 */
113 private function traiter_donnees_inscription()
114 {
115 $_POST['pseudo'] = trim($_POST['pseudo']);
116 }
117
118 private function login_deja_pris()
119 {
120 if ($this->participant->valide && strtolower($this->participant->info->pseudo) === strtolower($_POST['pseudo'])) // le pseudo n'a pas changé
121 return FALSE;
122
123 $loginDejaPris = mysql_fetch_array(mysql_query("SELECT count(*) FROM participants WHERE pseudo = '".addslashes($_POST['pseudo'])."'"));
124 if ($loginDejaPris[0] > 0)
125 {
126 $this->message_utilisateur = "Le pseudo '".$_POST["pseudo"]."' est déjà pris";
127 return TRUE;
128 }
129 return FALSE;
130 }
131
132 /**
133 * Renvoie TRUE si les données d'une inscription sont valides (POST).
134 */
135 private function donnees_inscription_valides()
136 {
137 return
138 $_POST['pseudo'] != "" &&
139 $_POST['pass1'] != "" &&
140 $_POST['pass1'] == $_POST['pass2'] &&
141 strlen($_POST['pass1']) >= 3 &&
142 $_POST['nom'] != "" &&
143 $_POST['prenom'] != "" &&
144 $_POST['e_mail'] != "";
145 }
146
147 /**
148 * Met à jour les periodes du participant dont l'id est donnée
149 * en fonction de $_POST["periodes"]
150 * Attention, cette fonction doit être appelée dans une transaction.
151 */
152 private function set_periodes($id)
153 {
154 $periodes = $_POST['periodes'];
155 if (!$periodes)
156 $periodes = array();
157
158 mysql_query("DELETE FROM participations WHERE participant_id = " . (int)$id);
159 for ($i = 0; $i < count($periodes); $i++)
160 {
161 mysql_query("
162 INSERT INTO participations (participant_id, periode_id)
163 VALUES (".$id.", ".(int)$periodes[$i].")
164 ");
165 }
166 }
167 }
168
169 ?>