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