ADD garde-fous dans le controller à propos des inscriptions terminees
[cl7.git] / php / controller.php
index ff47132..bec8917 100644 (file)
-<?php # coding:utf-8\r
-/**\r
-  * Traite les données envoyées par le client.\r
-  */\r
+<?php # coding:utf-8
+/**
+  * Traite les données envoyées par le client.
+  */
 include_once("class_participant.php");
-\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
-}\r
-\r
-# insciption d'un nouveau participant
+
+// un message peut être produit par le controlleur
+$message_utilisateur = NULL;
+
+/**
+  * Traiter les données de l'inscription (trim par exemple).
+  */
+function traiter_donnees_inscription()
+{
+   $_POST['pseudo'] = trim($_POST['pseudo']);
+}
+
+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)
+   {
+      $message_utilisateur = "Le pseudo '".$_POST["pseudo"]."' est déjà pris";
+      return TRUE;
+   }
+   return FALSE;   
+}
+
+/**
+  * Renvoie TRUE si les données d'une inscription sont valides (POST).
+  */
+function donnees_inscription_valides()
+{
+   return
+      $_POST['pseudo'] != "" &&
+      $_POST['pass1'] != "" &&
+      $_POST['pass1'] == $_POST['pass2'] &&
+      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.
+  */
+function set_periodes($id)
+{
+   $periodes = $_POST['periodes'];
+   if (!$periodes)
+      $periodes = array();
+   
+   mysql_query("DELETE FROM participations WHERE participant_id = " . (int)$id);
+   for ($i = 0; $i < count($periodes); $i++)
+   {
+      mysql_query("
+         INSERT INTO participations (participant_id, periode_id)
+         VALUES (".$id.", ".(int)$periodes[$i].")
+      ");
+   }
+}
+
+# inscription d'un nouveau participant
 if (isset($_POST['inscription']) && !Participant::nombre_participant_max_atteint())
-{              \r
-   # vérification des données\r
-   if (\r
-      donnees_inscription_valides() &&\r
-      $_POST['accord'] == "on"\r
-   )\r
-   {\r
-      mysql_query("BEGIN TRANSACTION");\r
-      mysql_query("\r
-         INSERT INTO participants \r
+{              
+   if ($config->get("inscription_terminees"))
+      return;
+
+   traiter_donnees_inscription();
+   if (!login_deja_pris() && # vérification des données
+      donnees_inscription_valides() &&
+      $_POST['accord'] == "on"
+   )
+   {
+      mysql_query("BEGIN TRANSACTION");
+      mysql_query("
+         INSERT INTO participants 
          (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
-      );\r
-      mysql_query("COMMIT");\r
-   }\r
+         VALUES (
+            '".addslashes($_POST['pseudo'])."',
+            '".addslashes($_POST['pass1'])."',
+            '".addslashes($_POST['clan_nom'])."',
+            '".addslashes($_POST['clan_tag'])."',
+            '".addslashes($_POST['nom'])."',
+            '".addslashes($_POST['prenom'])."',
+            '".addslashes($_POST['age'])."',
+            '".addslashes($_POST['e_mail'])."',
+            '".addslashes($_POST['remarques'])."'
+         )"
+      );
+      $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);  
+      $le_participant = new participant($_POST['pseudo'], $_POST['pass1']);
+      setcookie("COOKIE_INFO_PATICIPANT", $le_participant->info->id, time() + 31104000);
+      $page = "bienvenue";
+   }
 }
 # un participant modifie ses infos
 else if(isset($_POST['modification_participant']) && $le_participant->valide)
-{\r
-   if (donnees_inscription_valides())\r
-   {\r
+{   
+   if ($config->get("inscription_terminees"))
+      return;
+
+   traiter_donnees_inscription();
+   if (!login_deja_pris() && donnees_inscription_valides())
+   {
       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);
@@ -64,38 +122,42 @@ else if(isset($_POST['modification_participant']) && $le_participant->valide)
       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);\r
-      mysql_query("COMMIT");\r
+      mysql_query("UPDATE participants SET remarques = '".addslashes($_POST['remarques'])."' WHERE id = " . $le_participant->info->id);
+      set_periodes($le_participant->info->id);
+      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
+   }
+}
+# vote pour des jeux (autorisé même lorsque les inscriptions sont terminées)
+else if (isset($_POST['set_jeux_joues']) && $le_participant->valide)
+{
+   $votes = $_POST['votes'];
+   if (!$votes)
+      $votes = array();
+   
+   mysql_query("BEGIN TRANSACTION");
+   
+   # l'utilisateur peut proposer le nom d'un jeu qui ne se trouve pas dans la liste
+   $jeu = trim($_POST['jeu']);
+   if ($jeu !== '')
+   {
+      mysql_query("INSERT INTO jeux (nom) VALUES ('".addslashes($jeu)."')");
+      $id = mysql_insert_id();
+      if ($id != 0) # si le jeu se trouve déjà dans la liste alors $id == 0
+         array_unshift($votes, $id);
+   }
+   
+   # suppression des anciens votes (remplacement par les nouveaux)
+   mysql_query("DELETE FROM jeux_choisis WHERE participant_id = " . $le_participant->info->id);
+
+   # traite les trois premiers votes
+   for ($i = 0; $i < count($votes) && $i < $config->get('nb_votes_jeux'); $i++)
+   {
+      mysql_query("INSERT INTO jeux_choisis (participant_id, jeu_id) VALUES (".$le_participant->info->id.", ".(int)$votes[$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 < $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
+   
+   mysql_query("COMMIT");
 }
 ?>