MOD Passage de MySQL à un vrai SGBDR : PostgreSQL
[cl7.git] / php / controller.php
index 75a4668..0906650 100644 (file)
-<?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"
+         )
+         {
+            mysql_query("BEGIN TRANSACTION");
+            mysql_query("
+               INSERT INTO participants 
+               (pseudo, password, clan_nom, clan_tag, nom, prenom, age, e_mail, remarques)
+               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();
+            $this->set_periodes($id);
+            mysql_query("COMMIT");
+         
+            $this->participant = new participant($_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->valide)
+      {   
+         if ($this->config->get("inscription_terminees"))
+            return;
+
+         $this->traiter_donnees_inscription();
+         if (!$this->login_deja_pris() && $this->donnees_inscription_valides())
+         {
+            mysql_query("BEGIN TRANSACTION");
+            mysql_query("UPDATE participants SET pseudo = '".addslashes($_POST['pseudo'])."' WHERE id = " . $this->participant->info->id);
+            mysql_query("UPDATE participants SET password = '".addslashes($_POST['pass1'])."' WHERE id = " . $this->participant->info->id);
+            mysql_query("UPDATE participants SET clan_nom = '".addslashes($_POST['clan_nom'])."' WHERE id = " . $this->participant->info->id);
+            mysql_query("UPDATE participants SET clan_tag = '".addslashes($_POST['clan_tag'])."' WHERE id = " . $this->participant->info->id);
+            mysql_query("UPDATE participants SET nom = '".addslashes($_POST['nom'])."' WHERE id = " . $this->participant->info->id);
+            mysql_query("UPDATE participants SET prenom = '".addslashes($_POST['prenom'])."' WHERE id = " . $this->participant->info->id);
+            mysql_query("UPDATE participants SET age = '".addslashes($_POST['age'])."' WHERE id = " . $this->participant->info->id);
+            mysql_query("UPDATE participants SET e_mail = '".addslashes($_POST['e_mail'])."' WHERE id = " . $this->participant->info->id);
+            mysql_query("UPDATE participants SET remarques = '".addslashes($_POST['remarques'])."' WHERE id = " . $this->participant->info->id);
+            $this->set_periodes($this->participant->info->id);
+            mysql_query("COMMIT");
+            //header("Location: /inscrits.html");
+            $this->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']) && $this->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 = " . $this->participant->info->id);
+
+         # traite les trois premiers votes
+         for ($i = 0; $i < count($votes) && $i < $this->config->get('nb_votes_jeux'); $i++)
+         {
+            mysql_query("INSERT INTO jeux_choisis (participant_id, jeu_id) VALUES (".$this->participant->info->id.", ".(int)$votes[$i].")");
+         }
+         
+         mysql_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->valide && strtolower($this->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)
+      {
+         $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).
+     */
+   private 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.
+     */
+   private 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].")
+         ");
+      }
    }
-}\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
 }
+
 ?>