-<?php # coding:utf-8\r
-/**\r
- * Traite les données envoyées par le client.\r
- */\r
-include_once("class_participant.php");
-
-// un message peut être produit par le controlleur
-$message_utilisateur = NULL;
+<?php # coding: utf-8
/**
- * Traiter les données de l'inscription (trim par exemple).
- */
-function traiter_donnees_inscription()
+ * 'Controller' traite les données envoyées par le client.
+ */
+class Controller
{
- $_POST['pseudo'] = trim($_POST['pseudo']);
-}
+ public $message_utilisateur = NULL;
+ public $nouvel_inscrit = FALSE;
-function login_deja_pris()
-{
- global $le_participant;
- global $message_utilisateur;
- if ($le_participant->valide && strtolower($le_participant->info->pseudo) === strtolower($_POST['pseudo'])) // le pseudo n'a pas changé
- return FALSE;
-
- $loginDejaPris = mysql_fetch_array(mysql_query("SELECT count(*) FROM participants WHERE pseudo = '".addslashes($_POST['pseudo'])."'"));
- if ($loginDejaPris[0] > 0)
+ private $participant;
+ private $config;
+
+ public function Controller($participant, $config)
{
- $message_utilisateur = "Le pseudo '".$_POST["pseudo"]."' est déjà pris";
- return TRUE;
- }
- return FALSE;
-}
-\r
-/**\r
- * Renvoie TRUE si les données d'une inscription sont valides (POST).\r
- */\r
-function donnees_inscription_valides()\r
-{\r
- return\r
- $_POST['pseudo'] != "" &&\r
- $_POST['pass1'] != "" &&\r
- $_POST['pass1'] == $_POST['pass2'] &&\r
- strlen($_POST['pass1']) >= 3 &&\r
- $_POST['nom'] != "" &&\r
- $_POST['prenom'] != "" &&\r
- $_POST['e_mail'] != "";\r
-}
+ $this->participant = $participant;
+ $this->config = $config;
+
+ # inscription d'un nouveau participant
+ if (isset($_POST['inscription']) && !Participant::nombre_participant_max_atteint())
+ {
+ if ($this->config->get("inscription_terminees"))
+ return;
-/**
- * Met à jour les periodes du participant dont l'id est donnée
- * en fonction de $_POST["periodes"]
- * Attention, cette fonction doit être appelée dans une transaction.
- */
-function set_periodes($id)
-{
- $periodes = $_POST['periodes'];
- if (!$periodes)
- $periodes = array();
+ $this->traiter_donnees_inscription();
+ if (!$this->login_deja_pris() && # vérification des données
+ $this->donnees_inscription_valides() &&
+ $_POST['accord'] == "on"
+ )
+ {
+ pg_query("BEGIN");
+
+ // Cherche un id libre.
+ // Pour des questions de sécurité, les ids ne sont pas générés sequentiellement
+ // car ils sont mémorisé dans un cookie et permette l'authentification.
+ $id = 0;
+ do
+ {
+ $id = rand(1, PHP_INT_MAX);
+ $row = pg_fetch_row(pg_query_params("SELECT count(*) FROM participants WHERE id = $1", array($id)));
+ } while ($row[0] != 0);
+
+ pg_query_params("
+ INSERT INTO participants
+ (id, pseudo, password, clan_nom, clan_tag, nom, prenom, age, e_mail, remarques)
+ VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)
+ ",
+ array(
+ $id,
+ $_POST['pseudo'],
+ sha1($_POST['pass1']),
+ $_POST['clan_nom'],
+ $_POST['clan_tag'],
+ $_POST['nom'],
+ $_POST['prenom'],
+ $_POST['age'],
+ $_POST['e_mail'],
+ $_POST['remarques'],
+ )
+ );
+
+ $this->set_periodes($id);
+ pg_query("COMMIT");
+
+ $this->participant->chargerInfos($_POST['pseudo'], $_POST['pass1']);
+ setcookie("COOKIE_INFO_PARTICIPANT", $this->participant->info->id, time() + 31104000);
+ $this->nouvel_inscrit = TRUE;
+ }
+ }
+ # un participant modifie ses infos
+ else if(isset($_POST['modification_participant']) && $this->participant->existe())
+ {
+ if ($this->config->get("inscription_terminees"))
+ return;
+
+ $this->traiter_donnees_inscription();
+ if (!$this->login_deja_pris() && $this->donnees_inscription_valides(true))
+ {
+ pg_query("BEGIN");
+ pg_query_params("UPDATE participants SET pseudo = $1 WHERE id = $2", array($_POST['pseudo'], $this->participant->info->id));
+ if ($_POST['pass1'] != '') // Uniquement si un nouveau password est donné.
+ pg_query_params("UPDATE participants SET password = $1 WHERE id = $2", array(sha1($_POST['pass1']), $this->participant->info->id));
+ pg_query_params("UPDATE participants SET clan_nom = $1 WHERE id = $2", array($_POST['clan_nom'], $this->participant->info->id));
+ pg_query_params("UPDATE participants SET clan_tag = $1 WHERE id = $2", array($_POST['clan_tag'], $this->participant->info->id));
+ pg_query_params("UPDATE participants SET nom = $1 WHERE id = $2", array($_POST['nom'], $this->participant->info->id));
+ pg_query_params("UPDATE participants SET prenom = $1 WHERE id = $2", array($_POST['prenom'], $this->participant->info->id));
+ pg_query_params("UPDATE participants SET age = $1 WHERE id = $2", array($_POST['age'], $this->participant->info->id));
+ pg_query_params("UPDATE participants SET e_mail = $1 WHERE id = $2", array($_POST['e_mail'], $this->participant->info->id));
+ pg_query_params("UPDATE participants SET remarques = $1 WHERE id = $2", array($_POST['remarques'], $this->participant->info->id));
+ $this->set_periodes($this->participant->info->id);
+ pg_query("COMMIT");
+ //header("Location: /inscrits.html");
+ $this->message_utilisateur = "Les modifications ont été enregistrées";
+
+ // Puisque les données du participant ont changés il faut les re-charger.
+ $this->participant->chargerInfos();
+ }
+ }
+ # vote pour des jeux (autorisé même lorsque les inscriptions sont terminées)
+ else if (isset($_POST['set_jeux_joues']) && $this->participant->existe() && !$config->get("inscription_terminees"))
+ {
+ $votes = $_POST['votes'];
+ if (!$votes)
+ $votes = array();
+
+ pg_query("BEGIN");
+
+ # l'utilisateur peut proposer le nom d'un jeu qui ne se trouve pas dans la liste
+ $jeu = trim($_POST['jeu']);
+ if ($jeu !== '')
+ {
+ if(@pg_query_params("INSERT INTO jeux (participant_id, nom, type, url) VALUES ($1, $2, $3, $4)", array($this->participant->info->id, $jeu, $_POST['type'], $_POST['url'])))
+ {
+ $row = pg_fetch_row(pg_query("SELECT LASTVAL()"));
+ $id = $row[0];
+ if ($id != 0) # si le jeu se trouve déjà dans la liste alors $id == 0
+ array_unshift($votes, $id);
+ }
+ else # Puisque le jeu existe déjà, on le recherche
+ {
+ pg_query("ROLLBACK");
+ pg_query("BEGIN");
+ $res = pg_query_params("SELECT id FROM jeux WHERE nom = $1", array($jeu));
+ if ($id = pg_fetch_object($res))
+ if (!in_array($id->id, $votes))
+ array_unshift($votes, $id->id);
+ }
+ }
+
+ # suppression des anciens votes (remplacement par les nouveaux)
+ pg_query_params("DELETE FROM jeux_choisis WHERE participant_id = $1", array($this->participant->info->id));
+
+ # traite les trois premiers votes
+ for ($i = 0; $i < count($votes) && $i < $this->config->get('nb_votes_jeux'); $i++)
+ {
+ pg_query_params("INSERT INTO jeux_choisis (participant_id, jeu_id) VALUES ($1, $2)", array($this->participant->info->id, (int)$votes[$i]));
+ }
+
+ pg_query("COMMIT");
+ }
+ }
- mysql_query("DELETE FROM participations WHERE participant_id = " . (int)$id);
- for ($i = 0; $i < count($periodes); $i++)
+ /**
+ * Traiter les données de l'inscription (trim par exemple).
+ */
+ private function traiter_donnees_inscription()
{
- mysql_query("
- INSERT INTO participations (participant_id, periode_id)
- VALUES (".$id.", ".(int)$periodes[$i].")
- ");
+ $_POST['pseudo'] = trim($_POST['pseudo']);
}
-}\r
-\r
-# inscription d'un nouveau participant
-if (isset($_POST['inscription']) && !Participant::nombre_participant_max_atteint())
-{
- traiter_donnees_inscription();
- if (!login_deja_pris() && # vérification des données\r
- donnees_inscription_valides() &&\r
- $_POST['accord'] == "on"\r
- )\r
- {\r
- mysql_query("BEGIN TRANSACTION");\r
- mysql_query("\r
- INSERT INTO participants \r
- (pseudo, password, clan_nom, clan_tag, nom, prenom, age, e_mail, remarques)
- VALUES (\r
- '".addslashes($_POST['pseudo'])."',\r
- '".addslashes($_POST['pass1'])."',\r
- '".addslashes($_POST['clan_nom'])."',\r
- '".addslashes($_POST['clan_tag'])."',\r
- '".addslashes($_POST['nom'])."',\r
- '".addslashes($_POST['prenom'])."',\r
- '".addslashes($_POST['age'])."',\r
- '".addslashes($_POST['e_mail'])."',\r
- '".addslashes($_POST['remarques'])."'\r
- )"\r
- );
- $id = mysql_insert_id();
- set_periodes($id);
- mysql_query("COMMIT");
-
- $le_participant = new participant($_POST['pseudo'], $_POST['pass1']);
- setcookie("COOKIE_INFO_PATICIPANT", $le_participant->info->id, time() + 31104000);
- $page = "bienvenue";\r
+
+ private function login_deja_pris()
+ {
+ if ($this->participant->existe() && strtolower($this->participant->info->pseudo) === strtolower($_POST['pseudo'])) // le pseudo n'a pas changé
+ return FALSE;
+
+ $loginDejaPris = pg_fetch_array(pg_query_params("SELECT count(*) FROM participants WHERE pseudo = $1", array($_POST['pseudo'])));
+ if ($loginDejaPris[0] > 0)
+ {
+ $this->message_utilisateur = "Le pseudo '".$_POST["pseudo"]."' est déjà pris";
+ return TRUE;
+ }
+ return FALSE;
}
-}
-# un participant modifie ses infos
-else if(isset($_POST['modification_participant']) && $le_participant->valide)
-{
- traiter_donnees_inscription();
- if (!login_deja_pris() && donnees_inscription_valides())\r
- {\r
- mysql_query("BEGIN TRANSACTION");
- mysql_query("UPDATE participants SET pseudo = '".addslashes($_POST['pseudo'])."' WHERE id = " . $le_participant->info->id);
- mysql_query("UPDATE participants SET password = '".addslashes($_POST['pass1'])."' WHERE id = " . $le_participant->info->id);
- mysql_query("UPDATE participants SET clan_nom = '".addslashes($_POST['clan_nom'])."' WHERE id = " . $le_participant->info->id);
- mysql_query("UPDATE participants SET clan_tag = '".addslashes($_POST['clan_tag'])."' WHERE id = " . $le_participant->info->id);
- mysql_query("UPDATE participants SET nom = '".addslashes($_POST['nom'])."' WHERE id = " . $le_participant->info->id);
- mysql_query("UPDATE participants SET prenom = '".addslashes($_POST['prenom'])."' WHERE id = " . $le_participant->info->id);
- mysql_query("UPDATE participants SET age = '".addslashes($_POST['age'])."' WHERE id = " . $le_participant->info->id);
- mysql_query("UPDATE participants SET e_mail = '".addslashes($_POST['e_mail'])."' WHERE id = " . $le_participant->info->id);
- mysql_query("UPDATE participants SET remarques = '".addslashes($_POST['remarques'])."' WHERE id = " . $le_participant->info->id);
- set_periodes($le_participant->info->id);\r
- mysql_query("COMMIT");
- //header("Location: /inscrits.html");
- $message_utilisateur = "Les modifications ont été enregistrées";
- $page = "inscrits"; // TODO : moche car la page ne va plus correspondre à l'url\r
+
+ /**
+ * Renvoie TRUE si les données d'une inscription sont valides (POST).
+ * $maj : égal 'TRUE' si c'est une mise à jour, dans ce cas le password est traité différement
+ */
+ private function donnees_inscription_valides($maj = FALSE)
+ {
+ return
+ $_POST['pseudo'] != "" &&
+ ($maj || $_POST['pass1'] != "") &&
+ $_POST['pass1'] == $_POST['pass2'] &&
+ (($maj && $_POST['pass1'] == "") || strlen($_POST['pass1']) >= 3) &&
+ $_POST['nom'] != "" &&
+ $_POST['prenom'] != "" &&
+ $_POST['e_mail'] != "";
+ }
+
+ /**
+ * Met à jour les periodes du participant dont l'id est donnée
+ * en fonction de $_POST["periodes"]
+ * Attention, cette fonction doit être appelée dans une transaction.
+ */
+ private function set_periodes($id)
+ {
+ $periodes = $_POST['periodes'];
+ if (!$periodes)
+ $periodes = array();
+
+ pg_query_params("DELETE FROM participations WHERE participant_id = $1", array($id));
+ for ($i = 0; $i < count($periodes); $i++)
+ {
+ pg_query_params("
+ INSERT INTO participations (participant_id, periode_id)
+ VALUES ($1, $2)", array($id, $periodes[$i])
+ );
+ }
}
-}\r
-# vote pour des jeux\r
-else if (isset($_POST['set_jeux_joues']) && $le_participant->valide)\r
-{\r
- $votes = $_POST['votes'];\r
- if (!$votes)\r
- $votes = array();\r
- \r
- mysql_query("BEGIN TRANSACTION");\r
- \r
- # l'utilisateur peut proposer le nom d'un jeu qui ne se trouve pas dans la liste\r
- $jeu = trim($_POST['jeu']);\r
- if ($jeu !== '')\r
- {\r
- mysql_query("INSERT INTO jeux (nom) VALUES ('".addslashes($jeu)."')");\r
- $id = mysql_insert_id();\r
- if ($id != 0) # si le jeu se trouve déjà dans la liste alors $id == 0\r
- array_unshift($votes, $id);\r
- }\r
- \r
- # suppression des anciens votes (remplacement par les nouveaux)\r
- mysql_query("DELETE FROM jeux_choisis WHERE participant_id = " . $le_participant->info->id);\r
-\r
- # traite les trois premiers votes\r
- for ($i = 0; $i < count($votes) && $i < $config->get('nb_votes_jeux'); $i++)\r
- {\r
- mysql_query("INSERT INTO jeux_choisis (participant_id, jeu_id) VALUES (".$le_participant->info->id.", ".(int)$votes[$i].")");\r
- }\r
- \r
- mysql_query("COMMIT");\r
}
+
?>