diff --git a/app/controller/AdminController.php b/app/controller/AdminController.php
new file mode 100644
index 0000000000000000000000000000000000000000..006d0120e94577cad9f649cf155fc05d2a85342c
--- /dev/null
+++ b/app/controller/AdminController.php
@@ -0,0 +1,645 @@
+<?php
+include(ROOT."/Image.php");
+
+class AdminController extends Controller {
+    
+    public function display() {
+        $this->view->display();
+    }
+
+    public function displayJeu() {
+        $this->view->nonValide = Admin::getListeJeuNonValide();
+        $this->view->Valide = Admin::getListeJeuValide();
+        $this->view->display();
+    }
+    
+    public function acceptJeu() {
+        $slug = $this->route["params"]["slug"];
+        if(Admin::acceptJeu($slug)) {
+            header("Location:valide/ok");
+        } else {
+            session_start();
+            $_SESSION['adminErr'] = 1;
+            header("Location:../../jeu");
+        }
+    }
+    
+    public function displayAcceptJeuOK() {
+        $this->view->display();
+    }
+
+    public function displayModifPartieOK() {
+        $this->view->display();
+    }
+
+    public function supprimeJeu() {
+        $slug = $this->route["params"]["slug"];
+        Admin::supprJeu($slug);
+        unlink(ROOT."/www/images/jeu/".$slug.".jpg");
+        header("Location:supprime/ok");
+    }
+
+    public function displaySupprimeJeuOK() {
+        $this->view->display();
+    }
+    
+    public function unAcceptJeu() {
+        $slug = $this->route["params"]["slug"];
+        if(Admin::unacceptJeu($slug)) {
+            header("Location:unvalide/ok");
+        } else {
+            session_start();
+            $_SESSION['adminErr'] = 1;
+            header("Location:../../jeu");
+        }
+    }
+    
+    public function displayUnAcceptJeuOK() {
+        $this->view->display();
+    }
+    
+    public function displayModifJeu() {
+        $slug = $this->route["params"]["slug"];
+        $this->view->jeu = Jeu::getFromSlug($slug);
+        $this->view->display();
+    }
+
+    public function displayModifJeuOK() {
+        $this->view->display();
+    }
+    public function verifyModifJeu() {
+        $slug = $this->route["params"]["slug"];
+        if(!isset($_POST['min_joueurs']) || !isset($_POST['type']) || !isset($_POST['type_scores'])) {
+            session_start();
+            $_SESSION['modifJeuErrCode'] = 1;
+            header("location:../modif");
+            die();
+        }
+        if(isset($_FILES['image'])) {
+            list($err, $image) = getImage($_FILES['image'], 512, 512);
+            if ($err == 0) {
+                saveImage($image, ROOT . "/www/images/jeu/" . $_POST['slug_jeu'] . ".jpg");
+            } elseif($err == 2) {
+                $_SESSION["addRequestErrCode"] = $err; // on stocke le code d'erreur
+                header('Location:../modif'); // on redirige vers la page de formulaire (il faut faire un retour dans le dossier parent pour que ça fonctionne)
+                die();
+            }
+        }
+        $data = $_POST;
+        foreach (array('max_joueurs', 'min_equipes', 'max_equipes') as $truc) {
+            if ($data[$truc] == 0) {
+                $data[$truc] = null;
+            }
+        }
+        Admin::setModifJeu($slug, $data);
+        header("Location:ok");
+    }
+    
+    public function displayJoueur() {
+        $this->view->joueurs = Profil::getList();
+        $this->view->display();
+    }
+    public function supprimeJoueur() {
+        $slug = $this->route["params"]["slug"];
+        Admin::supprJoueur($slug);
+        unlink(ROOT."/www/images/avatar/".$slug.".jpg");
+        header("Location:supprime/ok");
+    }
+
+    public function displaySupprimeJoueurOK() {
+        $this->view->display();
+    }
+    
+    public function displayListPartie() {
+        $this->view->listPartie = Admin::getListPartie();
+        $this->view->display();        
+    }
+    
+    public function initModifPartie()  {
+        session_start();
+        $id = $this->route["params"]["slug"];
+        $partie = Partie::getFromId($id);
+        $jeuactuel = Jeu::getFromSlug($partie->jeu);
+        if($jeuactuel->type == "equipes"){
+            $_SESSION['equipes'] = Admin::getEquipes($id);
+            $_SESSION['jeu_select'] = $jeuactuel;
+            $_SESSION['id_partie'] = $id;
+            header("location:modif/stepe1");
+            die();
+        } else {
+            $_SESSION['joueurs_select'] = Admin::getListeJoueur($id);
+            $_SESSION['jeu_select'] = $jeuactuel;
+            $_SESSION['id_partie'] = $id;
+            header("location:modif/step1");
+            die();
+        }
+    }
+    
+    public function displayModifPartieStepe1()
+    {
+        session_start();
+        if (!isset($_SESSION['jeu_select']) || !isset($_SESSION['equipes'])) {
+            header("Location:../add_partie");
+            die();
+        }
+        if(isset($_SESSION['errMsg'])){
+            $this->view->errMsg = $_SESSION['errMsg'];
+            unset($_SESSION['errMsg']);
+        }
+        if (is_null($_SESSION['jeu_select']->max_joueurs)) {
+            $this->view->maxj = "plus de";
+        }
+        else {
+            $this->view->maxj = $_SESSION['jeu_select']->max_joueurs;
+        }
+        if (is_null($_SESSION['jeu_select']->max_equipes)) {
+            $this->view->maxe = "plus d'";
+        }
+        else{
+            $this->view->maxe = $_SESSION['jeu_select']->max_equipes." ";
+        }
+        $this->view->jeuactuel = $_SESSION['jeu_select'];
+        $this->view->listej = Profil::getList();
+        $this->view->equipes = $_SESSION['equipes'];
+        $this->view->display();
+    }
+
+    public function displayModifPartieStep1()
+    {
+        session_start();
+        if (!isset($_SESSION['jeu_select'])) {
+            header("Location:../add_partie");
+			die();
+		}
+        if(isset($_SESSION['errMsg'])){
+            $this->view->errMsg = $_SESSION['errMsg'];
+            unset($_SESSION['errMsg']);
+        }
+
+        if ($_SESSION['jeu_select']->max_joueurs === "")
+            $this->view->max = "plus";
+        else
+            $this->view->max = $_SESSION['jeu_select']->max_joueurs;
+
+        $this->view->jeuactuel = $_SESSION['jeu_select'];
+        $this->view->listej = Profil::getList();
+        $this->view->display();
+    }
+
+    private static function error($errstr, $step){
+        session_start();
+        $_SESSION['errMsg'] = $errstr;
+        if($step == "step0") {
+            header("Location:../add_partie");
+            die();
+        }
+        else if($step == "step1") {
+            header("Location:step1");
+            die();
+        }
+        else if($step == "step2") {
+            header("Location:step2");
+            die();
+        }
+        else if($step == "stepe1") {
+            header("Location:stepe1");
+            die();
+        }
+        else if($step == "stepe2") {
+            header("Location:stepe2");
+            die();
+        }
+        else {
+            header("Location:../add_partie");
+            die();
+        }
+    }
+
+    public static function ModifPartieaddjoueurs1()
+    {
+        session_start();
+        if (!isset($_SESSION['jeu_select'])) {
+            header("Location:../add_partie");
+            die();
+        }
+
+        $jeu = $_SESSION['jeu_select'];
+
+        if (!isset($_POST["joueur"])) {
+            if ($jeu->type == 'equipes') {
+                self::error("<h1>Erreur : pas de joueur entré.</h1>", "stepe1");
+                die();
+            }
+            else {
+                self::error("<h1>Erreur : pas de joueur entré.</h1>", "step1");
+                die();
+            }
+        }
+
+        $joueur = $_POST["joueur"];
+
+        if (Profil::checkExists($joueur)) {
+            $joueur_objet = Profil::getFromSlug($joueur);
+        }
+        else {
+            if ($jeu->type == 'equipes') {
+                self::error("<h1>Erreur : le joueur est introuvable dans la base de données.</h1>", "stepe1");
+                die();
+            }
+            else {
+                self::error("<h1>Erreur : le joueur est introuvable dans la base de données.</h1>", "step1");
+                die();
+            }
+        }
+
+        if ($jeu->type == 'equipes') {
+            $ke = $_POST['equipejadd'];
+            foreach ($_SESSION['equipes'] as $equipe) {
+                if (in_array($joueur_objet, $equipe)) {
+                    self::error("<h1>Erreur : le joueur a déjà été inscrit pour cette partie.</h1>", "stepe1");
+                    die();
+                }
+            }
+            array_push($_SESSION['equipes'][$ke], $joueur_objet);
+            header("Location:stepe1");
+            die();
+        }
+        else {
+            if (!isset($_SESSION['joueurs_select'])) {
+                $_SESSION['joueurs_select'] = array($joueur_objet);
+                header("Location:step1");
+                die();
+            }
+
+            if (!in_array($joueur_objet, $_SESSION['joueurs_select']))
+                array_push($_SESSION['joueurs_select'], $joueur_objet);
+            else {
+                self::error("<h1>Erreur : le joueur a déjà été inscrit pour cette partie.</h1>", "step1");
+                die();
+            }
+            header("Location:step1");
+            die();
+        }
+    }
+
+    public static function ModifPartieclearstep1()
+    {
+        session_start();
+        if (!isset($_SESSION['jeu_select'])) {
+            header("Location:../add_partie");
+            die();
+        }
+        $jeu_actuel = $_SESSION['jeu_select'];
+        if ($jeu_actuel->type == 'equipes') {
+            if (!isset($_SESSION['equipes'])) {
+                header("Location:stepe1");
+                die();
+            }
+            $_SESSION['equipes'] = array(array());
+            header("Location:stepe1");
+            die();
+        }
+        else {
+            if (!isset($_SESSION['joueurs_select'])) {
+                header("Location:step1");
+                die();
+            }
+            unset($_SESSION['joueurs_select']);
+            header("Location:step1");
+            die();
+        }
+    }
+
+    public static function ModifPartiedeljoueurs1()
+    {
+        session_start();
+        if (!isset($_SESSION['jeu_select'])) {
+            header("Location:../add_partie");
+            die();
+        }
+
+        if ($_SESSION['jeu_select']->type == 'duels') {
+            if (!isset($_SESSION['joueurs_select'])) {
+                header("Location:step1");
+                die();
+            }
+        }
+        if ($_SESSION['jeu_select']->type == 'equipes') {
+            if (!isset($_SESSION['equipes'])) {
+                header("Location:stepe1");
+                die();
+            }
+        }
+
+        if (!isset($_POST['joueurdel'])) {
+            if ($_SESSION['jeu_select']->type == 'equipes') {
+                self::error("<h1>Erreur : variables manquantes.</h1>", "stepe1");
+                die();
+            }
+            else {
+                self::error("<h1>Erreur : variables manquantes.</h1>", "step1");
+                die();
+            }
+        }
+
+        if ($_SESSION['jeu_select']->type == 'equipes') {
+            unset($_SESSION['equipes'][$_POST['equipejdel']][$_POST['joueurdel']]);
+            $equipe_tmp = array();
+            foreach ($_SESSION['equipes'][$_POST['equipejdel']] as $j) {
+                array_push($equipe_tmp, $j);
+            }
+            $_SESSION['equipes'][$_POST['equipejdel']] = $equipe_tmp;
+            header("Location:stepe1");
+            die();
+        }
+        else {
+            unset($_SESSION['joueurs_select'][$_POST['joueurdel']]);
+            $joueurs_tmp = array();
+            foreach ($_SESSION['joueurs_select'] as $j) {
+                array_push($joueurs_tmp, $j);
+            }
+            $_SESSION['joueurs_select'] = $joueurs_tmp;
+            header("Location:step1");
+            die();
+        }
+    }
+
+    public static function ModifPartiedelequipe()
+    {
+        session_start();
+        if (!isset($_SESSION['jeu_select'])) {
+            header("Location:../add_partie");
+            die();
+        }
+        if (!isset($_SESSION['equipes'])) {
+            header("Location:stepe1");
+            die();
+        }
+        if (count($_SESSION['equipes']) <= 1) {
+            self::error("<h1>Erreur : vous ne pouvez pas supprimer la seule équipe restante.</h1>", "stepe1");
+            die();
+        }
+
+        if (!isset($_POST['equipe'])) {
+            self::error("<h1>Erreur : variables manquantes.</h1>", "stepe1");
+            die();
+        }
+
+        unset($_SESSION['equipes'][$_POST['equipe']]);
+        $equipe_tmp = array();
+        foreach ($_SESSION['equipes'] as $e) {
+            array_push($equipe_tmp, $e);
+        }
+        $_SESSION['equipes'] = $equipe_tmp;
+        header("Location:stepe1");
+        die();
+    }
+
+    public static function ModifPartieaddequipe()
+    {
+        session_start();
+        if (!isset($_SESSION['jeu_select'])) {
+            header("Location:../add_partie");
+			die();
+		}
+        if (count($_SESSION['equipes']) == $_SESSION['jeu_select']->max_equipes) {
+            self::error("<h1>Erreur : vous ne pouvez pas créer d'équipe supplémentaire.</h1>", "stepe1");
+			die();
+        }
+
+        array_push($_SESSION['equipes'], array());
+        header("Location:stepe1");
+		die();
+    }
+
+    public static function verifyModifPartieStep1()
+    {
+        session_start();
+        if (!isset($_SESSION['jeu_select'])) {
+            header("Location:../add_partie");
+            die();
+        }
+        $jeu_actuel = $_SESSION['jeu_select'];
+        if ($jeu_actuel->type == 'equipes') {
+            if (!isset($_SESSION['equipes'])) {
+                header("Location:stepe1");
+                die();
+            }
+            $equipes = $_SESSION['equipes'];
+            if (count($equipes) < $jeu_actuel->min_equipes) {
+                self::error("<h1>Erreur : il n'y a pas assez d'équipes.</h1>", "stepe1");
+                die();
+            }
+            if (count($equipes) > $jeu_actuel->max_equipes) {
+                self::error("<h1>Erreur : il y a trop d'équipes.</h1>", "stepe1");
+                die();
+            }
+
+            foreach ($equipes as $ke => $e) {
+                if (count($e) < $jeu_actuel->min_joueurs) {
+                    $ke = $ke + 1;
+                    self::error("<h1>Erreur : il n'y a pas assez de joueurs dans l'équipe $ke.</h1>", "stepe1");
+                    die();
+                }
+                if (!is_null($jeu_actuel->max_joueurs)) {
+                    if (count($e) > $jeu_actuel->max_joueurs) {
+                        $ke = $ke + 1;
+                        self::error("<h1>Erreur : il y a trop de joueurs dans l'équipe $ke.</h1>", "stepe1");
+                        die();
+                    }
+                }
+            }
+
+            header("Location:stepe2");
+            die();
+        }
+        else {
+            if (!isset($_SESSION['joueurs_select'])) {
+                header("Location:step1");
+                die();
+            }
+            $joueurs = $_SESSION['joueurs_select'];
+            if (count($joueurs) < $jeu_actuel->min_joueurs) {
+                self::error("<h1>Erreur : il n'y a pas assez de joueurs.</h1>", "step1");
+                die();
+            }
+            if (count($joueurs) > $jeu_actuel->max_joueurs) {
+                self::error("<h1>Erreur : il y a trop de joueurs.</h1>", "step1");
+                die();
+            }
+            header('Location:step2');
+            die();
+        }
+    }
+
+
+
+    public function displayModifPartieStep2()
+    {
+        session_start();
+        $id = $this->route["params"]["slug"];
+        if (!isset($_SESSION['jeu_select'])) {
+            header("Location:../add_partie");
+            die();
+        }
+        if (!isset($_SESSION['joueurs_select'])) {
+            header("Location:../add_partie/step1");
+            die();
+        }
+        if(isset($_SESSION['errMsg'])){
+            $this->view->errMsg = $_SESSION['errMsg'];
+            unset($_SESSION['errMsg']);
+        }
+
+
+        $this->view->jeuactuel = $_SESSION['jeu_select'];
+        $this->view->listejactuel = $_SESSION['joueurs_select'];
+        if($this->view->jeuactuel->type_scores == "scores") {
+            $this->view->scorePartie = Admin::getListeScorePartie($id);
+        } else {
+            $this->view->classement = Admin::getListeClassement($id);
+        }
+        $this->view->display();
+    }
+
+    public function displayModifPartieStepe2()
+    {
+        session_start();
+        $id = $this->route["params"]["slug"];
+        if (!isset($_SESSION['jeu_select'])) {
+            header("Location:../../../partie");
+			die();
+		}
+        if (!isset($_SESSION['equipes'])) {
+            header("Location:../initModif");
+			die();
+		}
+        if(isset($_SESSION['errMsg'])){
+            $this->view->errMsg = $_SESSION['errMsg'];
+            unset($_SESSION['errMsg']);
+        }
+
+        $this->view->jeuactuel = $_SESSION['jeu_select'];
+        $this->view->equipes = $_SESSION['equipes'];
+        if($this->view->jeuactuel->type_scores == "scores") {
+            $this->view->scorePartie = Admin::getListeScorePartie($id);
+        } else {
+            $this->view->classement = Admin::getListeClassement($id);
+        }
+        $this->view->display();
+    }
+
+    public function verifyModifPartieStep2()
+    {
+        $id = $this->route["params"]["slug"];
+        session_start();
+        if (!isset($_SESSION['jeu_select'])) {
+            self::error("<h1>Erreur : le jeu doit être renseigné.</h1>", "step0");
+            die();
+        }
+
+        $jeu = $_SESSION['jeu_select'];
+        if ($jeu->type == 'equipes') {
+            if (!isset($_SESSION['equipes'])){
+                header("Location:stepe1");
+                die();
+            }
+        }
+        else {
+            if (!isset($_SESSION['joueurs_select'])) {
+                header("Location:step1");
+                die();
+            }
+        }
+
+        if (!isset($_POST['scores'])) {
+            if ($jeu->type == 'equipes') {
+                self::error("<h1>Erreur : variables absentes</h1>", "stepe2");
+                die();
+            }
+            else {
+                self::error("<h1>Erreur : variables absentes</h1>", "step2");
+                die();
+            }
+        }
+
+        $scores = $_POST["scores"];
+        foreach ($scores as $s) {
+            if (!is_numeric($s)) {
+                if ($jeu->type == 'equipes') {
+                    self::error("<h1>Erreur : les scores doivent être des nombres.</h1>", "stepe2");
+                    die();
+                }
+                else {
+                    self::error("<h1>Erreur : les scores doivent être des nombres.</h1>", "step2");
+                    die();
+                }
+            }
+        }
+        if ($jeu->type == 'equipes') {
+            $equipes = $_SESSION['equipes'];
+            $ns = count($scores);
+            $nj = count($equipes);
+            if ($ns != $nj) {
+                self::error("<h1>Erreur : scores et joueurs incohérents</h1>", "stepe2");
+                die();
+            }
+            $pb = Admin::ModifPartie($id,$equipes, $scores, $jeu);
+            if (!$pb) {
+                unset($_SESSION['equipes']);
+                unset($_SESSION['jeu_select']);
+                header('Location:valid'); // Redirection vers la page OK
+                die();
+            }
+            switch ($pb) {
+                case 2:
+                    self::error("<h1>Erreur de connexion à la BD.</h1>", "stepe2");
+                    die();
+                    break;
+                default:
+                    self::error("<h1>Erreur non gérée.</h1>", "stepe2");
+                    die();
+                    break;
+            }
+        }
+        else {
+            $joueurs = $_SESSION['joueurs_select'];
+            $ns = count($scores);
+            $nj = count($joueurs);
+            if ($ns != $nj) {
+                self::error("<h1>Erreur : scores et joueurs incohérents</h1>", "step2");
+                die();
+            }
+            $pb = Admin::ModifPartie($id, $joueurs, $scores, $jeu);
+            if (!$pb) {
+                unset($_SESSION['jeu_select']);
+                unset($_SESSION['joueurs_select']);
+                //self::error("<h1>DEBUGGING</h1>", "step2");
+                //die();
+                header('Location:valid'); // Redirection vers la page OK
+                die();
+            }
+            switch ($pb) {
+                case 2:
+                    self::error("<h1>Erreur de connexion à la BD.</h1>", "step2");
+                    die();
+                    break;
+                default:
+                    self::error("<h1>Erreur non gérée.</h1>", "step2");
+                    die();
+                    break;
+            }
+        }
+    }
+    
+    public function supprPartie() {
+        $id = $this->route["params"]["slug"];
+        Admin::supprPartie($id);
+        header("Location:supprime/ok");
+    }
+    
+    public function displaysupprPartieOK() {
+        $this->view->display();
+    }
+
+}
diff --git a/app/kernel/Router.php b/app/kernel/Router.php
index d74851724ba6d03ff526a008e9320a069d296ae3..c213c26666ea9491b392ccb1692f492513514517 100644
--- a/app/kernel/Router.php
+++ b/app/kernel/Router.php
@@ -181,6 +181,190 @@ class Router
                 $result["controller"] = "Partie";
                 $result["action"] = "verifyStep2";
             }
+			
+			/*** Ajout de l'administration ***/
+			else if($parts[0] == "admin" && count($parts) == 1) {
+				$result["controller"] = 'Admin';
+				$result['action'] = "display";
+			}
+
+			else if($parts[0] == "admin" && count($parts) == 2 && $parts[1] == 'jeu') {
+				$result["controller"] = 'Admin';
+				$result['action'] = "displayJeu";
+			}
+
+			else if($parts[0] == "admin" && count($parts) == 4 && $parts[1] == 'jeu' && $parts[3] == 'valide') {
+				$result["controller"] = 'Admin';
+				$result['action'] = "acceptJeu";
+				$result["params"]["slug"] = $parts[2];
+			}
+
+			else if($parts[0] == "admin" && count($parts) == 5 && $parts[1] == 'jeu' && $parts[3] == 'valide' && $parts[4] == 'ok') {
+				$result["controller"] = 'Admin';
+				$result['action'] = "displayAcceptJeuOK";
+				$result["params"]["slug"] = $parts[2];
+			}
+
+			else if($parts[0] == "admin" && count($parts) == 4 && $parts[1] == 'jeu' && $parts[3] == 'supprime') {
+				$result["controller"] = 'Admin';
+				$result['action'] = "supprimeJeu";
+				$result["params"]["slug"] = $parts[2];
+			}
+
+			else if($parts[0] == "admin" && count($parts) == 5 && $parts[1] == 'jeu' && $parts[3] == 'supprime' && $parts[4] == 'ok') {
+				$result["controller"] = 'Admin';
+				$result['action'] = "displaySupprimeJeuOK";
+				$result["params"]["slug"] = $parts[2];
+			}
+
+			else if($parts[0] == "admin" && count($parts) == 4 && $parts[1] == 'jeu' && $parts[3] == 'unvalide') {
+				$result["controller"] = 'Admin';
+				$result['action'] = "unAcceptJeu";
+				$result["params"]["slug"] = $parts[2];
+			}
+
+			else if($parts[0] == "admin" && count($parts) == 5 && $parts[1] == 'jeu' && $parts[3] == 'unvalide' && $parts[4] == 'ok') {
+				$result["controller"] = 'Admin';
+				$result['action'] = "displayUnAcceptJeuOK";
+				$result["params"]["slug"] = $parts[2];
+			}
+
+			else if($parts[0] == "admin" && count($parts) == 4 && $parts[1] == 'jeu' && $parts[3] == 'modif') {
+				$result["controller"] = 'Admin';
+				$result['action'] = "displayModifJeu";
+				$result["params"]["slug"] = $parts[2];
+			}
+
+			else if($parts[0] == "admin" && count($parts) == 5 && $parts[1] == 'jeu' && $parts[3] == 'modif' && $parts[4] == "verify") {
+				$result["controller"] = 'Admin';
+				$result['action'] = "verifyModifJeu";
+				$result["params"]["slug"] = $parts[2];
+			}
+
+			else if($parts[0] == "admin" && count($parts) == 5 && $parts[1] == 'jeu' && $parts[3] == 'modif' && $parts[4] == 'ok') {
+				$result["controller"] = 'Admin';
+				$result['action'] = "displayModifJeuOK";
+				$result["params"]["slug"] = $parts[2];
+			}
+
+			else if($parts[0] == "admin" && count($parts) == 2 && $parts[1] == 'joueur') {
+				$result["controller"] = 'Admin';
+				$result['action'] = "displayJoueur";
+			}
+
+			else if($parts[0] == "admin" && count($parts) == 4 && $parts[1] == 'joueur' && $parts[3] == 'supprime') {
+				$result["controller"] = 'Admin';
+				$result['action'] = "supprimeJoueur";
+				$result["params"]["slug"] = $parts[2];
+			}
+
+			else if($parts[0] == "admin" && count($parts) == 5 && $parts[1] == 'joueur' && $parts[3] == 'supprime' && $parts[4] == 'ok') {
+				$result["controller"] = 'Admin';
+				$result['action'] = "displaySupprimeJoueurOK";
+				$result["params"]["slug"] = $parts[2];
+			}
+
+			else if($parts[0] == "admin" && count($parts) == 2 && $parts[1] == 'partie') {
+				$result["controller"] = 'Admin';
+				$result['action'] = "displayListPartie";
+			}
+
+			else if($parts[0] == "admin" && count($parts) == 4 && $parts[1] == 'partie' && $parts[3] == 'modifinit') {
+				$result["controller"] = 'Admin';
+				$result['action'] = "initModifPartie";
+				$result["params"]["slug"] = $parts[2];
+			}
+
+			else if($parts[0] == "admin" && count($parts) == 4 && $parts[1] == 'partie' && $parts[3] == 'modif') {
+				$result["controller"] = 'Admin';
+				$result['action'] = "initModifPartie";
+				$result["params"]["slug"] = $parts[2];
+			}
+
+			else if($parts[0] == "admin" && count($parts) == 5 && $parts[1] == 'partie' && $parts[3] == 'modif' && $parts[4] == 'stepe1') {
+				$result["controller"] = 'Admin';
+				$result['action'] = "displayModifPartieStepe1";
+				$result["params"]["slug"] = $parts[2];
+			}
+
+			else if($parts[0] == "admin" && count($parts) == 5 && $parts[1] == 'partie' && $parts[3] == 'modif' && $parts[4] == 'step1') {
+				$result["controller"] = 'Admin';
+				$result['action'] = "displayModifPartieStep1";
+				$result["params"]["slug"] = $parts[2];
+			}
+
+			else if($parts[0] == "admin" && count($parts) == 5 && $parts[1] == 'partie' && $parts[3] == 'modif' && $parts[4] == 'addjoueurs1') {
+				$result["controller"] = 'Admin';
+				$result['action'] = "ModifPartieaddjoueurs1";
+				$result["params"]["slug"] = $parts[2];
+			}
+
+			else if ($parts[0] == "admin" && count($parts) == 5 && $parts[1] == 'partie' && $parts[3] == 'modif' && $parts[4] == "clearstep1") {
+				$result["controller"] = "Admin";
+				$result["action"] = "ModifPartieclearstep1";
+				$result["params"]["slug"] = $parts[2];
+			}
+
+			else if($parts[0] == "admin" && count($parts) == 5 && $parts[1] == 'partie' && $parts[3] == 'modif' && $parts[4] == 'deljoueurs1') {
+				$result["controller"] = 'Admin';
+				$result['action'] = "ModifPartiedeljoueurs1";
+				$result["params"]["slug"] = $parts[2];
+			}
+
+			else if($parts[0] == "admin" && count($parts) == 5 && $parts[1] == 'partie' && $parts[3] == 'modif' && $parts[4] == 'delequipe') {
+				$result["controller"] = 'Admin';
+				$result['action'] = "ModifPartiedelequipe";
+				$result["params"]["slug"] = $parts[2];
+			}
+
+			else if($parts[0] == "admin" && count($parts) == 5 && $parts[1] == 'partie' && $parts[3] == 'modif' && $parts[4] == 'addequipe') {
+				$result["controller"] = 'Admin';
+				$result['action'] = "ModifPartieaddequipe";
+				$result["params"]["slug"] = $parts[2];
+			}
+
+			else if($parts[0] == "admin" && count($parts) == 5 && $parts[1] == 'partie' && $parts[3] == 'modif' && $parts[4] == 'verifystep1') {
+				$result["controller"] = 'Admin';
+				$result['action'] = "verifyModifPartieStep1";
+				$result["params"]["slug"] = $parts[2];
+			}
+
+			else if($parts[0] == "admin" && count($parts) == 5 && $parts[1] == 'partie' && $parts[3] == 'modif' && $parts[4] == 'step2') {
+				$result["controller"] = 'Admin';
+				$result['action'] = "displayModifPartieStep2";
+				$result["params"]["slug"] = $parts[2];
+			}
+
+			else if($parts[0] == "admin" && count($parts) == 5 && $parts[1] == 'partie' && $parts[3] == 'modif' && $parts[4] == 'stepe2') {
+				$result["controller"] = 'Admin';
+				$result['action'] = "displayModifPartieStepe2";
+				$result["params"]["slug"] = $parts[2];
+			}
+
+			else if($parts[0] == "admin" && count($parts) == 5 && $parts[1] == 'partie' && $parts[3] == 'modif' && $parts[4] == 'verifystep2') {
+				$result["controller"] = 'Admin';
+				$result['action'] = "verifyModifPartieStep2";
+				$result["params"]["slug"] = $parts[2];
+			}
+
+			else if($parts[0] == "admin" && count($parts) == 5 && $parts[1] == 'partie' && $parts[3] == 'modif' && $parts[4] == 'valid') {
+				$result["controller"] = 'Admin';
+				$result['action'] = "displayModifPartieOK";
+				$result["params"]["slug"] = $parts[2];
+			}
+
+			else if($parts[0] == "admin" && count($parts) == 4 && $parts[1] == 'partie' && $parts[3] == 'supprime') {
+				$result["controller"] = 'Admin';
+				$result['action'] = "supprPartie";
+				$result["params"]["slug"] = $parts[2];
+			}
+
+			else if($parts[0] == "admin" && count($parts) == 5 && $parts[1] == 'partie' && $parts[3] == 'supprime' && $parts[4] == 'ok') {
+				$result["controller"] = 'Admin';
+				$result['action'] = "displaysupprPartieOK";
+				$result["params"]["slug"] = $parts[2];
+			}
+
             else if ($parts[0] == "add_partie" && count($parts) == 2 && $parts[1] == "addjoueurs1") {
                 $result["controller"] = "Partie";
                 $result["action"] = "addjoueurs1";
diff --git a/app/model/Admin.php b/app/model/Admin.php
new file mode 100644
index 0000000000000000000000000000000000000000..b0f2dd27cd683978b7cd2f5a674d7ad2572f2c5f
--- /dev/null
+++ b/app/model/Admin.php
@@ -0,0 +1,281 @@
+<?php
+
+class Admin extends Model {
+
+    public static function estAdmin($slug) {
+        $db = Database::getInstance(); // on récupère la connexion à la BDD
+        $sql = "SELECT * FROM R_admin WHERE identite = :slug"; // on définit la requête qu'on enverra (on considère que le slug contient jeu/nomDuJeu pour le classement par jeu. Donc il faudrait encore faire un explode() sur le slug.
+        $req = $db->prepare($sql); // on prépare la requête (c'est là que la mémthode __call() est utile dans la classe Database d'ailleurs)
+        $req->execute(array(":slug" => $slug));
+        return ($req->rowcount() != 0);
+    }
+
+    public static function getListeJeuNonValide() {
+        $db = Database::getInstance(); // on récupère la connexion à la BDD
+        $sql = "SELECT * FROM R_jeu WHERE NOT est_valide ORDER BY nom"; // on définit la requête qu'on enverra (on considère que le slug contient jeu/nomDuJeu pour le classement par jeu. Donc il faudrait encore faire un explode() sur le slug.
+        $req = $db->prepare($sql); // on prépare la requête (c'est là que la mémthode __call() est utile dans la classe Database d'ailleurs)
+        $req->execute();
+        $res = array();
+        while($ligne = $req->fetch(PDO::FETCH_ASSOC)) { // parcours toute la liste
+            $res[] = $ligne;
+        }
+        return $res;
+    }
+
+    public static function acceptJeu($slug) {
+        $db = Database::getInstance();
+        $sql = "UPDATE R_jeu SET est_valide = 1 WHERE slug = :slug";
+        $req = $db->prepare($sql);
+        return $req->execute(array(':slug' => $slug));
+    }
+
+    public static function supprJeu($slug) {
+        $db = Database::getInstance();
+        $sql= "SELECT * FROM R_partie WHERE jeu = :slug";
+        $req = $db->prepare($sql);
+        $req->execute(array(':slug' => $slug));
+        $sql= "DELETE FROM R_joueur_partie WHERE partie = :partie";
+        $req = $db->prepare($sql);
+        while($ligne = $req->fetch(PDO::FETCH_ASSOC)) {
+            $req->execute(array(':partie' => $ligne['id']));
+        }
+        $sql= "DELETE FROM R_partie WHERE jeu = :slug";
+        $req = $db->prepare($sql);
+        $req->execute(array(':slug' => $slug));
+        $sql= "DELETE FROM R_joueur_jeu WHERE jeu = :slug";
+        $req = $db->prepare($sql);
+        $req->execute(array(':slug' => $slug));
+        $sql = "DELETE FROM R_jeu WHERE slug = :slug";
+        $req = $db->prepare($sql);
+        $req->execute(array(':slug' => $slug));
+    }
+
+    public static function getListeJeuValide() {
+        $db = Database::getInstance(); // on récupère la connexion à la BDD
+        $sql = "SELECT * FROM R_jeu WHERE est_valide ORDER BY nom"; // on définit la requête qu'on enverra (on considère que le slug contient jeu/nomDuJeu pour le classement par jeu. Donc il faudrait encore faire un explode() sur le slug.
+        $req = $db->prepare($sql); // on prépare la requête (c'est là que la mémthode __call() est utile dans la classe Database d'ailleurs)
+        $req->execute();
+        $res = array();
+        while($ligne = $req->fetch(PDO::FETCH_ASSOC)) { // parcours toute la liste
+            $res[] = $ligne;
+        }
+        return $res;
+    }
+    
+    public static function unacceptJeu($slug) {
+        $db = Database::getInstance();
+        $sql = "UPDATE R_jeu SET est_valide = 0 WHERE slug = :slug";
+        $req = $db->prepare($sql);
+        return $req->execute(array(':slug' => $slug));
+    }
+    
+    public static function setModifJeu($slug, $data) {
+        $db = Database::getInstance();
+        $sql = "UPDATE R_jeu SET description = :description, max_joueurs = :max_joueurs,
+                min_joueurs = :min_joueurs, max_equipes = :max_equipes, min_equipes = :min_equipes,
+                 type = :type, type_scores = :type_scores WHERE slug = :slug";
+        $req = $db->prepare($sql);
+        return $req->execute(array(':slug' => $slug,
+                                    ':description' => $data['description'] ,
+                                    ':type' => $data['type'],
+                                    ':max_joueurs' => $data['max_joueurs'],
+                                    ':min_joueurs' => $data['min_joueurs'],
+                                    ':max_equipes' => $data['max_equipes'],
+                                    ':min_equipes' => $data['min_equipes'],
+                                    ':type_scores' => $data['type_scores']));
+    }
+
+    public static function supprJoueur($slug) {
+        $db = Database::getInstance();
+        $sql= "DELETE FROM R_joueur_partie WHERE joueur = :slug";
+        $req = $db->prepare($sql);
+        $req->execute(array(':slug' => $slug));
+        $sql= "DELETE FROM R_joueur_jeu WHERE joueur = :slug";
+        $req = $db->prepare($sql);
+        $req->execute(array(':slug' => $slug));
+        $sql = "DELETE FROM R_joueur WHERE slug = :slug";
+        $req = $db->prepare($sql);
+        $req->execute(array(':slug' => $slug));
+    }
+
+    public static function getListPartie() {
+        $db = Database::getInstance(); // on récupère la connexion à la BDD
+        $sql = "SELECT * FROM R_partie JOIN R_jeu ON R_partie.jeu = R_jeu.slug ORDER BY date"; // on définit la requête qu'on enverra (on considère que le slug contient jeu/nomDuJeu pour le classement par jeu. Donc il faudrait encore faire un explode() sur le slug.
+        $req = $db->prepare($sql); // on prépare la requête (c'est là que la mémthode __call() est utile dans la classe Database d'ailleurs)
+        $req->execute();
+        $res = array();
+        while($ligne = $req->fetch(PDO::FETCH_ASSOC)) { // parcours toute la liste
+            $res[] = $ligne;
+        }
+        return $res;
+    }
+
+    public static function getEquipes($id) {
+        $db = Database::getInstance(); // on récupère la connexion à la BDD
+        $sql = "SELECT * FROM R_joueur_partie WHERE partie = :id ORDER BY classement"; // on définit la requête qu'on enverra (on considère que le slug contient jeu/nomDuJeu pour le classement par jeu. Donc il faudrait encore faire un explode() sur le slug.
+        $req = $db->prepare($sql); // on prépare la requête (c'est là que la mémthode __call() est utile dans la classe Database d'ailleurs)
+        $req->execute(array(':id' => $id));
+        $res = array();
+        $i = -1;
+        $classement_old = 0;
+        while($ligne = $req->fetch(PDO::FETCH_ASSOC)) {
+            if($classement_old != $ligne['classement']) {
+                $i = $i +1;
+                $classement_old = $ligne['classement'];
+                $res[$i] = array();
+            }
+            $res[$i][] = Profil::getFromSlug($ligne['joueur']);
+        }
+        return $res;
+    }
+
+    public static function getListeJoueur($id) {
+        $db = Database::getInstance(); // on récupère la connexion à la BDD
+        $sql = "SELECT * FROM R_joueur_partie WHERE partie = :id ORDER BY classement"; // on définit la requête qu'on enverra (on considère que le slug contient jeu/nomDuJeu pour le classement par jeu. Donc il faudrait encore faire un explode() sur le slug.
+        $req = $db->prepare($sql); // on prépare la requête (c'est là que la mémthode __call() est utile dans la classe Database d'ailleurs)
+        $req->execute(array(':id' => $id));
+        $res = array();
+        while($ligne = $req->fetch(PDO::FETCH_ASSOC)) { // parcours toute la liste
+            $res[] = Profil::getFromSlug($ligne['joueur']);
+        }
+        return $res;
+    }
+
+    public static function getListeScore($id) {
+        $db = Database::getInstance(); // on récupère la connexion à la BDD
+        $sql = "SELECT * FROM R_joueur_partie WHERE partie = :id ORDER BY classement"; // on définit la requête qu'on enverra (on considère que le slug contient jeu/nomDuJeu pour le classement par jeu. Donc il faudrait encore faire un explode() sur le slug.
+        $req = $db->prepare($sql); // on prépare la requête (c'est là que la mémthode __call() est utile dans la classe Database d'ailleurs)
+        $req->execute(array(':id' => $id));
+        $res = array();
+        while($ligne = $req->fetch(PDO::FETCH_ASSOC)) { // parcours toute la liste
+            $res[$ligne['joueur']] = $ligne['score'];
+        }
+        return $res;
+    }
+
+    public static function getListeScorePartie($id) {
+        $db = Database::getInstance(); // on récupère la connexion à la BDD
+        $sql = "SELECT * FROM R_joueur_partie WHERE partie = :id ORDER BY classement"; // on définit la requête qu'on enverra (on considère que le slug contient jeu/nomDuJeu pour le classement par jeu. Donc il faudrait encore faire un explode() sur le slug.
+        $req = $db->prepare($sql); // on prépare la requête (c'est là que la mémthode __call() est utile dans la classe Database d'ailleurs)
+        $req->execute(array(':id' => $id));
+        $res = array();
+        while($ligne = $req->fetch(PDO::FETCH_ASSOC)) { // parcours toute la liste
+            $res[$ligne['joueur']] = $ligne['score_partie'];
+        }
+        return $res;
+    }
+
+    public static function getListeScorePartie2($id) {
+        $db = Database::getInstance(); // on récupère la connexion à la BDD
+        $sql = "SELECT * FROM R_joueur_partie WHERE partie = :id ORDER BY classement"; // on définit la requête qu'on enverra (on considère que le slug contient jeu/nomDuJeu pour le classement par jeu. Donc il faudrait encore faire un explode() sur le slug.
+        $req = $db->prepare($sql); // on prépare la requête (c'est là que la mémthode __call() est utile dans la classe Database d'ailleurs)
+        $req->execute(array(':id' => $id));
+        $res = array();
+        while($ligne = $req->fetch(PDO::FETCH_ASSOC)) { // parcours toute la liste
+            $res[] = $ligne['score_partie'];
+        }
+        return $res;
+    }
+
+    public static function getListeClassement($id) {
+        $db = Database::getInstance(); // on récupère la connexion à la BDD
+        $sql = "SELECT * FROM R_joueur_partie WHERE partie = :id ORDER BY classement"; // on définit la requête qu'on enverra (on considère que le slug contient jeu/nomDuJeu pour le classement par jeu. Donc il faudrait encore faire un explode() sur le slug.
+        $req = $db->prepare($sql); // on prépare la requête (c'est là que la mémthode __call() est utile dans la classe Database d'ailleurs)
+        $req->execute(array(':id' => $id));
+        $res = array();
+        while($ligne = $req->fetch(PDO::FETCH_ASSOC)) { // parcours toute la liste
+            $res[$ligne['joueur']] = $ligne['classement'];
+        }
+        return $res;
+    }
+
+    public static function getListeClassement2($id) {
+        $db = Database::getInstance(); // on récupère la connexion à la BDD
+        $sql = "SELECT DISTINCT classement FROM R_joueur_partie WHERE partie = :id ORDER BY classement"; // on définit la requête qu'on enverra (on considère que le slug contient jeu/nomDuJeu pour le classement par jeu. Donc il faudrait encore faire un explode() sur le slug.
+        $req = $db->prepare($sql); // on prépare la requête (c'est là que la mémthode __call() est utile dans la classe Database d'ailleurs)
+        $req->execute(array(':id' => $id));
+        $res = array();
+        while($ligne = $req->fetch(PDO::FETCH_ASSOC)) { // parcours toute la liste
+            $res[] = $ligne['classement'];
+        }
+        return $res;
+    }
+
+    public static function ModifPartie($id, $joueurs, $scores, $jeu)
+    {
+        $db = Database::getInstance();
+        $sql5 = "UPDATE R_joueur_jeu SET score = :new_score WHERE joueur = :id_joueur AND jeu = :id_jeu;";
+        $stmt5 = $db->prepare($sql5);
+
+        $partieModif = Partie::getFromId($id);
+        // recherche des joueurs ayant fais une partie apres celle-ci (celle-ci incluse)
+        $sql1 = "SELECT * FROM R_joueur_partie JOIN R_partie ON R_joueur_partie.partie = R_partie.id WHERE date >= date(:date) AND jeu =:jeu ORDER BY date";
+        $stmt1 = $db->prepare($sql1);
+        $stmt1->execute(array(':date' => $partieModif->date, ":jeu" => $partieModif->jeu));
+        // pour tout les joueurs remettre les scrores comme-ci aucune partie après celle-ci a été jouée
+        $joueurDejaTraite = array();
+        while ($joueur = $stmt1->fetch(PDO::FETCH_ASSOC)) {
+            if (!in_array($joueur['joueur'], $joueurDejaTraite)) {
+                $joueurDejaTraite[] = $joueur['joueur'];
+                $stmt5->execute(array(':new_score' => $joueur['score'],
+                ':id_joueur' => $joueur['joueur'],
+                    ':id_jeu' => $joueur['jeu']));
+            }
+        }
+        // applique la partie
+        if (($resp = Partie::modPartie($joueurs, $scores, $jeu, $id)) > 0){
+            print $resp;
+            die();
+        }
+        // pour chaque partie apres celle modifier on la réapplique avec les nouveaux scores
+        $sql2 = "SELECT * FROM R_partie WHERE date > date(:date) AND jeu =:jeu ORDER BY date";
+        $stmt2 = $db->prepare($sql2);
+        $stmt2->execute(array(':date' => $partieModif->date, ":jeu" => $partieModif->jeu));
+        while ($ligne = $stmt2->fetch(PDO::FETCH_ASSOC)) {
+            $joueurs = $jeu->type == 'equipes' ? Admin::getEquipes($ligne['id']) : Admin::getListeJoueur($ligne['id']);
+            $scores = $jeu->type_scores == 'scores' ? Admin::getListeScorePartie2($ligne['id']) : Admin::getListeClassement2($ligne['id']);
+            Partie::modPartie($joueurs, $scores, $jeu, $ligne['id']);
+        }
+        return 0;
+    }
+
+    public static function supprPartie($id) {
+        $db = Database::getInstance();
+        $sql5 = "UPDATE R_joueur_jeu SET score = :new_score WHERE joueur = :id_joueur AND jeu = :id_jeu;";
+        $stmt5 = $db->prepare($sql5);
+        $partieSuppr = Partie::getFromId($id);
+        // recherche des joueurs ayant fais une partie apres celle-ci (celle-ci incluse)
+        $sql1 = "SELECT * FROM R_joueur_partie JOIN R_partie ON R_joueur_partie.partie = R_partie.id WHERE date >= date(:date) AND jeu =:jeu ORDER BY date";
+        $stmt1 = $db->prepare($sql1);
+        $stmt1->execute(array(':date' => $partieSuppr->date, ":jeu" => $partieSuppr->jeu));
+        // pour tout les joueurs remettre les scrores comme-ci aucune partie après celle-ci a été jouée
+        $joueurDejaTraite = array();
+        while ($joueur = $stmt1->fetch(PDO::FETCH_ASSOC)) {
+            if (!in_array($joueur['joueur'], $joueurDejaTraite)) {
+                $joueurDejaTraite[] = $joueur['joueur'];
+                $stmt5->execute(array(':new_score' => $joueur['score'],
+                ':id_joueur' => $joueur['joueur'],
+                    ':id_jeu' => $joueur['jeu']));
+            }
+        }
+
+        $sql = "DELETE FROM R_joueur_partie WHERE partie = :id";
+        $req = $db->prepare($sql);
+        $req->execute(array(':id' => $id));
+
+        $sql = "DELETE FROM R_partie WHERE id = :id";
+        $req = $db->prepare($sql);
+        $req->execute(array(':id' => $id));
+
+        $jeu = Jeu::getFromSlug($partieSuppr->jeu);
+        $sql2 = "SELECT * FROM R_partie WHERE date > date(:date) AND jeu =:jeu ORDER BY date";
+        $stmt2 = $db->prepare($sql2);
+        $stmt2->execute(array(':date' => $partieSuppr->date, ":jeu" => $partieSuppr->jeu));
+        while ($ligne = $stmt2->fetch(PDO::FETCH_ASSOC)) {
+            $joueurs = $jeu->type == 'equipes' ? Admin::getEquipes($ligne['id']) : Admin::getListeJoueur($ligne['id']);
+            $scores = $jeu->type_scores == 'scores' ? Admin::getListeScorePartie2($ligne['id']) : Admin::getListeClassement2($ligne['id']);
+            Partie::modPartie($joueurs, $scores, $jeu, $ligne['id']);
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/app/model/Partie.php b/app/model/Partie.php
index 0f043c3020132b6ec32def1d07f7d0ebcfc37279..658dd042d1926965426052d35830b8b112deff12 100644
--- a/app/model/Partie.php
+++ b/app/model/Partie.php
@@ -11,13 +11,13 @@ class Partie extends Model
 {
     public $joueurs, $scores, $lejeu, $date, $slug;
 
-    public static function getFromSlug($slug_partie)
+    public static function getFromId($id)
     {
         $db = Database::getInstance();
-        $sql = "SELECT * FROM R_partie WHERE slug = :slug";
+        $sql = "SELECT * FROM R_partie WHERE id = :id";
         $stmt = $db->prepare($sql);
         $stmt->setFetchMode(PDO::FETCH_CLASS, "Partie"); // règle le type dans lequel on doit mettre les données (PDO va chercher les attributs de la classe de même nom que ses colonnes de BDD et mettre dedans les valeurs correspondantes)
-        $stmt->execute(array(":slug" => $slug_partie));
+        $stmt->execute(array(":id" => $id));
         return $stmt->fetch();
     }
 
@@ -44,7 +44,7 @@ class Partie extends Model
         return false; // on aurait pu mettre deux return (un dans le if et un ici), mais bon...
     }
 
-    private static function calcul_classement($R)
+    public static function calcul_classement($R)
     {
         $m = count($R);
 
@@ -70,6 +70,7 @@ class Partie extends Model
             $t = 1;
             $rows = $stmt1->fetchAll();
             foreach ($rows as $row){
+
                 if ($stmt2->execute(array(":classement" => $t, ":joueur" => $row['joueur'], ":jeu" => $jeu->slug))) {
 
                 } else {
@@ -83,6 +84,112 @@ class Partie extends Model
         return 0;
     }
 
+    public static function modPartie($joueurs, $scores, $jeu, $id_partie)
+    {
+        $db = Database::getInstance();
+        $sql3 = "SELECT score FROM  R_joueur_partie WHERE joueur = :id_joueur AND partie = :id_partie;";
+        $sql4 = "UPDATE R_joueur_partie SET classement=:classement, score=:score, score_partie=:score_partie
+                 WHERE partie=:partie AND joueur=:joueur;";
+        $sql5 = "UPDATE R_joueur_jeu SET score = :new_score WHERE joueur = :id_joueur AND jeu = :id_jeu;";
+        $sqlN = "INSERT INTO R_joueur_jeu (joueur, jeu, score) VALUES (:id_joueur, :id_jeu, :score);";
+        $stmt3 = $db->prepare($sql3);
+        $stmt4 = $db->prepare($sql4);
+        $stmt5 = $db->prepare($sql5);
+
+        $m = count($scores);
+        $old_score = array_fill(0, $m, 0);
+        $old_score_e = array();
+        foreach ($joueurs as $k => $joueur) {
+            // version avec équipes
+            if ($jeu->type == 'equipes') {
+                $old_score_e[$k] = array();
+                foreach ($joueur as $kj => $j) {
+                    if ($stmt3->execute(array(":id_joueur" => $j->slug, ":id_partie" => $id_partie))) {
+                        if ($row = $stmt3->fetch()) {
+                            // Le joueur a déja joué à ce jeu
+                            $old_score_e[$k][$kj] = $row[0];
+                        }
+                        else {
+                            // ou le joueur n'a jamais joué à ce jeu, on je rajoute à la relation.
+                            $old_score[$k] = 1000;
+                            $stmtN = $db->prepare($sqlN);
+                            if ($stmtN->execute(array(":id_joueur" => $joueur->slug, ":id_jeu" => $jeu->slug, ":score" => 1000))) {
+
+                            } else
+                                return 2;
+                        }
+                    }
+                }
+                $old_score[$k] = array_sum($old_score_e[$k]) / count($old_score_e[$k]);
+            } else {
+                // récupération du score actuel de chaque joueur
+                if ($stmt3->execute(array(":id_joueur" => $joueur->slug, ":id_partie" => $id_partie))) {
+                    if ($row = $stmt3->fetch()) {
+                        // Le joueur a forcément déja joué à ce jeu
+                        $old_score[$k] = $row[0];
+                    }
+                    else {
+                        // ou le joueur n'a jamais joué à ce jeu, on je rajoute à la relation.
+                        $old_score[$k] = 1000;
+                        $stmtN = $db->prepare($sqlN);
+                        if ($stmtN->execute(array(":id_joueur" => $joueur->slug, ":id_jeu" => $jeu->slug, ":score" => 1000))) {
+
+                        } else
+                            return 2;
+                    }
+                }
+            }
+        }
+        // Calcul de la nouvelle différence de scores et du classement de chacun dans la partie
+        $diff_scores = ELO_scores($old_score, $scores, 32);
+        $classement = self::calcul_classement($diff_scores);
+        foreach ($joueurs as $k => $joueur) {
+            if ($jeu->type_scores == 'classement') {
+                $score = null;
+            } else {
+                $score = $scores[$k];
+            }
+            if ($jeu->type == 'equipes') {
+                foreach ($joueur as $kj => $j) {
+                    // Insertion des infos de la partie (avec le score avant la partie et le classement interne à la partie
+                    // et le score de la partie) pour chaque joueur par équipe
+                    if ($stmt4->execute(array(":partie" => $id_partie,
+                        ":joueur" => $j->slug,
+                        ":classement" => $classement[$k], ":score" => $old_score_e[$k][$kj], ":score_partie" => $score))
+                    ) {
+                        $newS = $old_score_e[$k][$kj] + $diff_scores[$k];
+                        // On met à jour le score du joueur actuel dans sa relation avec le jeu
+                        if ($stmt5->execute(array(":new_score" => $newS,
+                            ":id_jeu" => $jeu->slug, ":id_joueur" => $j->slug))
+                        ) {
+                        } else
+                            return 2;
+                    } else
+                        return 2;
+                }
+            } else {
+                // Insertion des infos de la partie (avec le score avant la partie et le classement interne à la partie
+                //  et le score de la partie) pour chaque joueur
+
+                if ($stmt4->execute(array(":partie" => $id_partie,
+                    ":joueur" => $joueur->slug,
+                    ":classement" => $classement[$k], ":score" => $old_score[$k], ":score_partie" => $score))
+                ) {
+                    $newS = $old_score[$k] + $diff_scores[$k];
+                    // On met à jour le score du joueur actuel dans sa relation avec le jeu
+                    if ($stmt5->execute(array(":new_score" => $newS,
+                        ":id_jeu" => $jeu->slug, ":id_joueur" => $joueur->slug))
+                    ) {
+                    } else
+                        return 2;
+                } else
+                    return 2;
+            }
+        }
+
+        return self::updateClassement($jeu);
+    }
+
     public static function addPartie($joueurs, $scores, $jeu)
     {
         $db = Database::getInstance();
diff --git a/app/view/Admin/display.html b/app/view/Admin/display.html
new file mode 100644
index 0000000000000000000000000000000000000000..8c349c82d29668d360ea7e2799565de53b00d3ce
--- /dev/null
+++ b/app/view/Admin/display.html
@@ -0,0 +1,27 @@
+<?php
+	$page_title = "Page d'administration";
+include(ROOT."/app/view/Includes/header.include.html");
+?>
+
+<?php if(isset($_SESSION['user']) && Admin::estAdmin($_SESSION['user']->slug)) { ?>
+
+    <article>
+        <h3>
+            <a href="admin/jeu">Gestion des jeux</a>
+        </h3>
+        <h3>
+            <a href="admin/joueur">Gestion des Joueurs</a>
+        </h3>
+        <h3>
+            <a href="admin/partie">Gestion des Parties</a>
+        </h3>
+    </article>
+
+
+<?php } else { ?>
+
+<article class="msg-erreur">Vous n'êtes pas connecté comme administrateur</article>'
+
+<?php } ?>
+
+<?php include(ROOT."/app/view/Includes/footer.include.html"); ?>
diff --git a/app/view/Admin/displayAcceptJeuOK.html b/app/view/Admin/displayAcceptJeuOK.html
new file mode 100644
index 0000000000000000000000000000000000000000..e4f181cf7f618949e93c0ee5a6294ff35ffddf16
--- /dev/null
+++ b/app/view/Admin/displayAcceptJeuOK.html
@@ -0,0 +1,17 @@
+<?php
+	$page_title = "Page d'administration";
+include(ROOT."/app/view/Includes/header.include.html");
+?>
+
+<?php if(isset($_SESSION['user']) && Admin::estAdmin($_SESSION['user']->slug)) { ?>
+
+<article class="msg-valide"><h2>Ajout réussi !</h2></article>
+
+
+<?php } else { ?>
+
+<article class="msg-erreur">Vous n'êtes pas connecté comme administrateur</article>
+
+<?php } ?>
+
+<?php include(ROOT."/app/view/Includes/footer.include.html"); ?>
diff --git a/app/view/Admin/displayJeu.html b/app/view/Admin/displayJeu.html
new file mode 100644
index 0000000000000000000000000000000000000000..f280b99c440b3549cb8ef8dba39e353325f5e8d1
--- /dev/null
+++ b/app/view/Admin/displayJeu.html
@@ -0,0 +1,97 @@
+<?php
+	$page_title = "Page d'administration";
+include(ROOT."/app/view/Includes/header.include.html");
+?>
+
+<?php if(isset($_SESSION['user']) && Admin::estAdmin($_SESSION['user']->slug)) { ?>
+
+<?php
+			if(isset($_SESSION['addRequestErrCode'])) { // si message d'erreur
+				$errCode = $_SESSION['addRequestErrCode'];
+				if($errCode == 1) { // on détermine le message
+					$errMsg = '<h3>Impossible !</h3>';
+                }
+            echo '<article class="msg-erreur">'.$errMsg.'</article>'; // on affiche le message
+            unset($_SESSION['addRequestErrCode']); // on retire la variable de session
+            }
+?>
+
+
+<article>
+    <h3 class="stat-title">Jeu(x) non Validé(s)</h3>
+    <table class="jeux-preferes">
+        <?php if($this->nonValide != array()){ ?>
+        <tr>
+            <th>Logo</th>
+            <th>Nom</th>
+            <th>Min joueurs</th>
+            <th>Max joueurs</th>
+            <th>Type</th>
+            <th>Min équipe</th>
+            <th>Max équipe</th>
+        </tr>
+        <?php
+            foreach($this->nonValide as $ligne) {
+            print "
+            <tr>
+                <td><a href=\"".BASE_URL."/jeu/".$ligne['slug']."\"> <img src=\"".BASE_URL."/images/jeu/".$ligne['slug'].".jpg\" alt=\"logo de ".$ligne['nom']."\" /></a></td>
+                <td><a href=\"".BASE_URL."/jeu/".$ligne['slug']."\">".$ligne['nom']."</a></td>
+                <td><a href=\"".BASE_URL."/jeu/".$ligne['slug']."\">".$ligne['min_joueurs']."</a></td>
+                <td><a href=\"".BASE_URL."/jeu/".$ligne['slug']."\">".$ligne['max_joueurs']."</a></td>
+                <td><a href=\"".BASE_URL."/jeu/".$ligne['slug']."\">".$ligne['type']."</a></td>
+                <td><a href=\"".BASE_URL."/jeu/".$ligne['slug']."\">".$ligne['min_equipes']."</a></td>
+                <td><a href=\"".BASE_URL."/jeu/".$ligne['slug']."\">".$ligne['max_equipes']."</a></td>
+                <td><a href=\"jeu/".$ligne['slug']."/valide\"><img src=\"".BASE_URL."/images/ok.svg\" alt=\"Valider\"/></a></td>
+                <td><a href=\"jeu/".$ligne['slug']."/modif\"><img src=\"".BASE_URL."/images/modif.svg\" alt=\"Modifier\"//></a></td>
+                <td><a href=\"jeu/".$ligne['slug']."/supprime\"><img src=\"".BASE_URL."/images/cancel.svg\" /></a></td>
+            </tr>
+            ";
+            }
+        } else {
+            print "Il n'y a pas de jeu à valider.";
+        }
+        ?>
+    </table>
+
+    <h3 class="stat-title">Jeu(x) Validé(s)</h3>
+    <table class="jeux-preferes">
+        <?php if($this->Valide != array()){ ?>
+        <tr>
+            <th>Logo</th>
+            <th>Nom</th>
+            <th>Min joueurs</th>
+            <th>Max joueurs</th>
+            <th>Type</th>
+            <th>Min équipe</th>
+            <th>Max équipe</th>
+        </tr>
+        <?php
+            foreach($this->Valide as $ligne) {
+        print "
+        <tr>
+            <td><a href=\"".BASE_URL."/jeu/".$ligne['slug']."\"> <img src=\"".BASE_URL."/images/jeu/".$ligne['slug'].".jpg\" alt=\"logo de ".$ligne['nom']."\" /></a></td>
+            <td><a href=\"".BASE_URL."/jeu/".$ligne['slug']."\">".$ligne['nom']."</a></td>
+            <td><a href=\"".BASE_URL."/jeu/".$ligne['slug']."\">".$ligne['min_joueurs']."</a></td>
+            <td><a href=\"".BASE_URL."/jeu/".$ligne['slug']."\">".$ligne['max_joueurs']."</a></td>
+            <td><a href=\"".BASE_URL."/jeu/".$ligne['slug']."\">".$ligne['type']."</a></td>
+            <td><a href=\"".BASE_URL."/jeu/".$ligne['slug']."\">".$ligne['min_equipes']."</a></td>
+            <td><a href=\"".BASE_URL."/jeu/".$ligne['slug']."\">".$ligne['max_equipes']."</a></td>
+            <td><a href=\"jeu/".$ligne['slug']."/modif\"><img src=\"".BASE_URL."/images/modif.svg\" /></a></td>
+            <td><a href=\"jeu/".$ligne['slug']."/unvalide\"><img src=\"".BASE_URL."/images/cancel.svg\" /></a></td>
+        </tr>
+        ";
+        }
+        } else {
+        print "Il n'y a pas de jeu validé.";
+        }
+        ?>
+    </table>
+</article>
+
+<?php } else { ?>
+
+<article class="msg-erreur">Vous n'êtes pas connecté comme administrateur</article>'
+
+<?php } ?>
+
+<?php include(ROOT."/app/view/Includes/footer.include.html"); ?>
diff --git a/app/view/Admin/displayJoueur.html b/app/view/Admin/displayJoueur.html
new file mode 100644
index 0000000000000000000000000000000000000000..68fbf4b53f1f6f3df1d14a1fa87efbf35790da75
--- /dev/null
+++ b/app/view/Admin/displayJoueur.html
@@ -0,0 +1,50 @@
+<?php
+	$page_title = "Page d'administration";
+include(ROOT."/app/view/Includes/header.include.html");
+?>
+
+<?php if(isset($_SESSION['user']) && Admin::estAdmin($_SESSION['user']->slug)) { ?>
+
+<article>
+    <h3 class="stat-title">Listes des Joueur</h3>
+    <table class="jeux-preferes">
+        <tr>
+            <th>Avatar</th>
+            <th>Pseudo</th>
+            <th>Nom</th>
+            <th>Prénom</th>
+            <th>email</th>
+        </tr>
+        <?php
+            foreach($this->joueurs as $ligne) {
+        print "
+        <tr>";
+            if($ligne->avatar) { print "
+            <td><a href=\"".BASE_URL."/profil/".$ligne->slug."\"> <img src=\"".BASE_URL."/images/avatar/".$ligne->slug.".jpg\" alt=\"avatar de ".$ligne->pseudo."\" /></a></td>
+            "; } else { print "
+            <td><a href=\"".BASE_URL."/profil/".$ligne->slug."\"> <img src=\"".BASE_URL."/images/profil_42.jpg\" alt=\"avatar de ".$ligne->pseudo."\" /></a></td>
+            "; }
+            print "
+            <td><a href=\"".BASE_URL."/profil/".$ligne->slug."\">".$ligne->pseudo."</a></td>
+            <td><a href=\"".BASE_URL."/profil/".$ligne->slug."\">".$ligne->nom."</a></td>
+            <td><a href=\"".BASE_URL."/profil/".$ligne->slug."\">".$ligne->prenom."</a></td>
+            <td><a href=\"mailto:".$ligne->email."\">".$ligne->email."</a></td>
+            <td><a href=\"joueur/".$ligne->slug."/supprime\"><img src=\"".BASE_URL."/images/cancel.svg\" /></a></td>
+        </tr>
+        ";
+        }
+        ?>
+    </table>
+</article>
+
+
+
+
+
+<?php } else { ?>
+
+<article class="msg-erreur">Vous n'êtes pas connecté comme administrateur</article>'
+
+<?php } ?>
+
+<?php include(ROOT."/app/view/Includes/footer.include.html"); ?>
\ No newline at end of file
diff --git a/app/view/Admin/displayListPartie.html b/app/view/Admin/displayListPartie.html
new file mode 100644
index 0000000000000000000000000000000000000000..b3c0d1c650a5b39c764a51b48447663be986d50a
--- /dev/null
+++ b/app/view/Admin/displayListPartie.html
@@ -0,0 +1,42 @@
+<?php
+	$page_title = "Page d'administration";
+include(ROOT."/app/view/Includes/header.include.html");
+?>
+
+<?php if(isset($_SESSION['user']) && Admin::estAdmin($_SESSION['user']->slug)) { ?>
+
+<article>
+    <h3 class="stat-title">Listes des parties</h3>
+    <table class="jeux-preferes">
+        <tr>
+            <th>Image</th>
+            <th>Jeu</th>
+            <th>Date</th>
+        </tr>
+        <?php
+            foreach($this->listPartie as $ligne) {
+        print "
+        <tr>
+            <td><a href=\"".BASE_URL."/jeu/".$ligne['slug']."\"> <img src=\"".BASE_URL."/images/jeu/".$ligne['slug'].".jpg\" alt=\"image de ".$ligne['jeu']."\" /></a></td>
+            <td><a href=\"".BASE_URL."/jeu/".$ligne['slug']."\">".$ligne['nom']."</a></td>
+            <td><a href=\"".BASE_URL."/admin/partie/".$ligne['slug']."\">".$ligne['date']."</a></td>
+            <td><a href=\"partie/".$ligne['id']."/modifinit\"><img src=\"".BASE_URL."/images/modif.svg\" alt=\"Modifier\"//></a></td>
+            <td><a href=\"partie/".$ligne['id']."/supprime\"><img src=\"".BASE_URL."/images/cancel.svg\" /></a></td>
+        </tr>
+        ";
+        }
+        ?>
+    </table>
+</article>
+
+
+
+
+
+<?php } else { ?>
+
+<article class="msg-erreur">Vous n'êtes pas connecté comme administrateur</article>'
+
+<?php } ?>
+
+<?php include(ROOT."/app/view/Includes/footer.include.html"); ?>
\ No newline at end of file
diff --git a/app/view/Admin/displayModifJeu.html b/app/view/Admin/displayModifJeu.html
new file mode 100644
index 0000000000000000000000000000000000000000..c7b499a78405837f53daf74152f51da7d7ce8c48
--- /dev/null
+++ b/app/view/Admin/displayModifJeu.html
@@ -0,0 +1,82 @@
+<?php
+	$page_title = "Page d'administration";
+include(ROOT."/app/view/Includes/header.include.html");
+?>
+
+<?php if(isset($_SESSION['user']) && Admin::estAdmin($_SESSION['user']->slug)) { ?>
+
+<?php
+			if(isset($_SESSION['modifJeuErrCode'])) { // si message d'erreur
+				$errCode = $_SESSION['modifJeuErrCode'];
+				if($errCode == 1) { // on détermine le message
+					$errMsg = '<h3>Erreur une variable est manquante</h3>';
+                } elseif($errCode == 2) {
+                    $errMsg = '<h3>Image manquante</h3>';
+                } elseif($errCode == 5) {
+                    $errMsg = '<h3>Problème sur l\'image</h3>';
+                } elseif($errCode == 6) {
+                    $errMsg = '<h3>Le fichier n\'est pas une image</h3>';
+                } elseif($errCode == 7) {
+                    $errMsg = '<h3>L\'image est trop grande</h3>';
+                }
+                echo '<article class="msg-erreur">'.$errMsg.'</article>'; // on affiche le message
+                unset($_SESSION['modifJeuErrCode']); // on retire la variable de session
+            }
+?>
+
+<article>
+    <h2>Modifcation de <?php print $this->jeu->nom; ?></h2>
+    <div class="addjeu-form">
+        <form method="post" action="modif/verify" enctype="multipart/form-data">
+            <label for="nom">Nom du jeu :</label> <input type="text" name="nom" required="" id="nom" disabled value="<?php print $this->jeu->nom; ?>"/> <br/>
+            <label for="description">Description :</label> <textarea name="description" id="description" ><?php print $this->jeu->description; ?></textarea> <br/>
+            <label for="min_joueurs">Joueurs minimum*:</label> <input type="number" name="min_joueurs" required="" id="min_joueurs" value="<?php print $this->jeu->min_joueurs; ?>"/> <br/>
+            <label for="max_joueurs">Joueurs maximum :</label> <input type="number" name="max_joueurs" id="max_joueurs" value="<?php print $this->jeu->max_joueurs; ?>"/> <br/>
+            <label for="type">Type de jeu*:</label>
+                <select name="type" required="" id="type" >
+                    <?php if($this->jeu->type == "duels") {
+                        print '
+                            <option value="duels" selected="selected">Duels</option>
+                            <option value="equipes">Equipes</option>
+                        ';
+                        } else {
+                        print '
+                            <option value="duels">Duels</option>
+                            <option value="equipes" selected="selected">Equipes</option>
+                        ';
+                        }
+                    ?>
+                </select><br/>
+            <label for="min_equipes">Nombre d'équipes minimum :</label> <input type="number" name="min_equipes" id="min_equipes" value="<?php print $this->jeu->min_equipes; ?>"/> <br/>
+            <label for="max_equipes">Nombre d'équipes maximum :</label> <input type="number" name="max_equipes" id="max_equipes" value="<?php print $this->jeu->max_equipes; ?>"/> <br/>
+            <label for="type_scores">Type de classement*:</label>
+                <select name="type_scores" required="" id="type_scores" >
+                    <?php if($this->jeu->type == "classement") {
+                        print '
+                            <option value="classement" selected="selected">Classement</option>
+                            <option value="scores">Scores</option>
+                        ';
+                        } else {
+                        print '
+                            <option value="classement">Classement</option>
+                            <option value="scores" selected="selected">Scores</option>
+                        ';
+                        }
+                    ?>
+                </select><br/>
+            <label for="image">Image du jeu: </label>	<input type="file" name="image" id="image" /><br/>
+            <div class="submit">
+                <input type="reset" name="reset" value="Réinitialiser">
+                <input type="submit" name="submit" value="Modifier">
+            </div>
+        </form>
+    </div>
+</article>
+
+<?php } else { ?>
+
+<article class="msg-erreur">Vous n'êtes pas connecté comme administrateur</article>'
+
+<?php } ?>
+
+<?php include(ROOT."/app/view/Includes/footer.include.html"); ?>
diff --git a/app/view/Admin/displayModifJeuOK.html b/app/view/Admin/displayModifJeuOK.html
new file mode 100644
index 0000000000000000000000000000000000000000..43e5476ba5afdf21178f247dc382974f8fbd34ac
--- /dev/null
+++ b/app/view/Admin/displayModifJeuOK.html
@@ -0,0 +1,17 @@
+<?php
+	$page_title = "Page d'administration";
+include(ROOT."/app/view/Includes/header.include.html");
+?>
+
+<?php if(isset($_SESSION['user']) && Admin::estAdmin($_SESSION['user']->slug)) { ?>
+
+<article class="msg-valide"><h2>Modification réussie !</h2></article>
+
+
+<?php } else { ?>
+
+<article class="msg-erreur">Vous n'êtes pas connecté comme administrateur</article>
+
+<?php } ?>
+
+<?php include(ROOT."/app/view/Includes/footer.include.html"); ?>
diff --git a/app/view/Admin/displayModifPartieOK.html b/app/view/Admin/displayModifPartieOK.html
new file mode 100644
index 0000000000000000000000000000000000000000..38ba0f326b8c375c056970f7947d688ce42abaee
--- /dev/null
+++ b/app/view/Admin/displayModifPartieOK.html
@@ -0,0 +1,17 @@
+<?php
+	$page_title = "Page d'administration";
+include(ROOT."/app/view/Includes/header.include.html");
+?>
+
+<?php if(isset($_SESSION['user']) && Admin::estAdmin($_SESSION['user']->slug)) { ?>
+
+<article class="msg-valide"><h2>Modifiction réussie !</h2></article>
+
+
+<?php } else { ?>
+
+<article class="msg-erreur">Vous n'êtes pas connecté comme administrateur</article>
+
+<?php } ?>
+
+<?php include(ROOT."/app/view/Includes/footer.include.html"); ?>
diff --git a/app/view/Admin/displayModifPartieStep1.html b/app/view/Admin/displayModifPartieStep1.html
new file mode 100644
index 0000000000000000000000000000000000000000..5a76afa8f06e1f842d1fced02b4eb3e7716f84c9
--- /dev/null
+++ b/app/view/Admin/displayModifPartieStep1.html
@@ -0,0 +1,51 @@
+<?php 
+	$page_title = "Formulaire d'ajout de partie"; 
+	include(ROOT."/app/view/Includes/header.include.html");
+?>
+<?php $jeuactuel = $this->jeuactuel ?>
+<?php	if (!is_null($this->errMsg)){ ?>
+<article class="msg-erreur"><?php echo $this->errMsg;?></article>
+<?php } ?>
+<article>
+    <h2>Formulaire d'ajout de partie</h2>
+    <h3>Sélection des joueurs</h3>
+    <div class="addjeu-form">
+
+        <h4>Jeu : <?php echo $jeuactuel->nom; ?></h4>
+        <h4>De <?php echo $jeuactuel->min_joueurs; ?> à <?php echo $this->max; ?> joueurs</h4>
+        <form method="post" action="addjoueurs1">
+            <label for="joueur">Ajouter un joueur (pseudo) :</label>
+            <input type="text" id="joueur" name="joueur"/>
+            <input type="submit" name="submit" value="ajouter un joueur"/>
+        </form>
+        <?php if (isset($_SESSION['joueurs_select'])) { ?>
+        <h5>Joueurs actuellement sélectionnés :</h5>
+        <ul>
+            <?php foreach($_SESSION['joueurs_select'] as $k => $j){ ?>
+            <li>
+                <?php echo $j->pseudo; ?>
+
+
+                <form method="post" action="deljoueurs1">
+                    <input type="hidden" value="<?php echo $k;?>" name="joueurdel">
+                    <input type="submit" name="submit" value="supprimer ce joueur"/>
+                </form>
+            </li>
+            <?php } ?>
+            <?php } ?>
+        </ul>
+        <div class="submit">
+            <form method="post" action="clearstep1">
+                <input type="submit" name="submit" value="Remise à zéro"/>
+            </form>
+            <form method="post" action="../modif">
+                <input type="submit" name="submit" value="Réinitialiser"/>
+            </form>
+            <form method="post" action="verifystep1">
+                <input type="submit" name="submit" value="Étape suivante"/>
+            </form>
+        </div>
+    </div>
+</article>
+
+<?php include(ROOT."/app/view/Includes/footer.include.html"); ?>
diff --git a/app/view/Admin/displayModifPartieStep2.html b/app/view/Admin/displayModifPartieStep2.html
new file mode 100644
index 0000000000000000000000000000000000000000..7ec88e8071688099c6bb39f11578f7a5e13f5e68
--- /dev/null
+++ b/app/view/Admin/displayModifPartieStep2.html
@@ -0,0 +1,47 @@
+<?php 
+	$page_title = "Formulaire d'ajout de partie"; 
+	include(ROOT."/app/view/Includes/header.include.html"); 
+?>
+<?php $jeuactuel = $this->jeuactuel ?>
+<?php	if (!is_null($this->errMsg)){ ?>
+<article class="msg-erreur"><?php echo $this->errMsg;?></article>
+<?php } ?>
+<article>
+    <h2>Formulaire d'ajout de partie</h2>
+    <h3>Entrée des scores</h3>
+    <div class="addjeu-form">
+        <form method="post" action="verifystep2">
+            Jeu : <?php echo $jeuactuel->nom; ?><br/>
+            Joueurs :
+            <ul>
+                <?php foreach($this->listejactuel as $joueur){ ?>
+                <li><?php echo $joueur->pseudo; ?>
+                    <?php if($jeuactuel->type_scores == 'scores'){ ?>
+                    Score obtenu : <input type="text" title="score" required="" name="scores[]" value="<?php echo isset($this->scorePartie[$joueur->slug]) ? $this->scorePartie[$joueur->slug] : "" ; ?>"/>
+                    <?php } else { ?>
+                    Classement obtenu : <select title="score" required="" name="scores[]">
+                        <?php for ($j=1;$j<=count($this->listejactuel);$j++){ ?>
+                        <option value="<?php echo count($this->listejactuel)-$j;?>" <?php echo ((isset($this->classement[$joueur->slug]) && $this->classement[$joueur->slug] == $j)? "selected" : "") ?>><?php echo $j;?></option>
+
+                        <?php } ?>
+                    </select>
+                    <?php } ?>
+                </li>
+                <?php } ?>
+            </ul>
+            <br/>
+            <div class="submit">
+
+                <input type="reset" name="reset" value="Réinitialiser"/>
+                <input type="submit" name="submit" value="Modifier"/>
+            </div>
+        </form>
+        <div class="submit">
+            <form action="step1">
+                <input type="submit" name="submit" value="Étape précédente"/>
+            </form>
+        </div>
+    </div>
+</article>
+
+<?php include(ROOT."/app/view/Includes/footer.include.html"); ?>
diff --git a/app/view/Admin/displayModifPartieStepe1.html b/app/view/Admin/displayModifPartieStepe1.html
new file mode 100644
index 0000000000000000000000000000000000000000..dbcea70e3f31a163a8e59b7ec18fe7f3fb94913b
--- /dev/null
+++ b/app/view/Admin/displayModifPartieStepe1.html
@@ -0,0 +1,65 @@
+<?php 
+	$page_title = "Formulaire de Modification de partie";
+	include(ROOT."/app/view/Includes/header.include.html");
+?>
+<?php $jeuactuel = $this->jeuactuel ?>
+<?php	if (!is_null($this->errMsg)){ ?>
+<article class="msg-erreur"><?php echo $this->errMsg;?></article>
+<?php } ?>
+<article>
+    <h2>Formulaire de Modifaction de partie</h2>
+    <h3>Sélection des joueurs</h3>
+    <div class="addjeu-form">
+
+        <h4>Jeu : <?php echo $jeuactuel->nom; ?></h4>
+        <h4>De <?php echo $jeuactuel->min_equipes; ?> à <?php echo $this->maxe; ?>équipes (de <?php echo $jeuactuel->min_joueurs; ?> à <?php echo $this->maxj; ?> joueurs)</h4>
+
+        <?php foreach($this->equipes as $ke => $e) { ?>
+        <h5>Équipe <?php echo $ke+1; ?> </h5>
+        <ul>
+            <?php
+            foreach($e as $k => $j){ ?>
+            <li>
+                <?php echo $j->pseudo; ?>
+                <form method="post" action="deljoueurs1">
+                    <input type="hidden" value="<?php echo $k;?>" name="joueurdel"/>
+                    <input type="hidden" value="<?php echo $ke;?>" name="equipejdel"/>
+                    <input type="submit" name="submit" value="supprimer ce joueur"/>
+                </form>
+
+            </li>
+            <?php } ?>
+            <form method="post" action="addjoueurs1">
+                <label for="joueur">Ajouter un joueur à l'équipe <?php echo $ke+1;?> :</label>
+                <input type="text" id="joueur" name="joueur"/>
+                <input type="hidden" value="<?php echo $ke;?>" name="equipejadd" id="equipejadd"/>
+                <input type="submit" name="submit" value="Ajouter un joueur"/>
+            </form>
+            <form method="post" action="delequipe">
+                <input type="hidden" value="<?php echo $ke;?>" name="equipe"/>
+                <input type="submit" name="submit" value="Supprimer l'équipe <?php echo $ke+1;?>"/>
+            </form>
+        </ul>
+        <?php } ?>
+        <div class="submit">
+            <form method="post" action="addequipe">
+                <input type="submit" name="submit" value="Ajouter une équipe"/>
+            </form>
+
+            <form method="post" action="clearstep1">
+                <input type="submit" name="submit" value="Mise à zéro"/>
+            </form>
+            <form method="post" action="../modif">
+                <input type="submit" name="submit" value="Réinitialisation"/>
+            </form>
+            <form method="post" action="verifystep1">
+
+
+                <input type="submit" name="submit" value="Étape suivante"/>
+
+            </form>
+        </div>
+    </div>
+</article>
+
+<?php include(ROOT."/app/view/Includes/footer.include.html"); ?>
diff --git a/app/view/Admin/displayModifPartieStepe2.html b/app/view/Admin/displayModifPartieStepe2.html
new file mode 100644
index 0000000000000000000000000000000000000000..6ea40056a57e7bea44b475fdf544c2ef71b781cd
--- /dev/null
+++ b/app/view/Admin/displayModifPartieStepe2.html
@@ -0,0 +1,49 @@
+<?php 
+	$page_title = "Formulaire d'ajout de partie"; 
+	include(ROOT."/app/view/Includes/header.include.html"); 
+?>
+<?php $jeuactuel = $this->jeuactuel ?>
+<?php	if (!is_null($this->errMsg)){ ?>
+<article class="msg-erreur"><?php echo $this->errMsg;?></article>
+<?php } ?>
+<article>
+    <h2>Formulaire d'ajout de partie</h2>
+    <h3>Entrée des scores</h3>
+    <div class="addjeu-form">
+        <form method="post" action="verifystep2">
+            Jeu : <?php echo $jeuactuel->nom; ?><br/>
+            Équipes :<br/>
+            <?php foreach($this->equipes as $ke => $e) { ?>
+            <h4>Équipe <?php echo $ke+1; ?> </h4>
+            <ul>
+                <?php
+                    foreach($e as $k => $j){ ?>
+                <li>
+                    <?php echo $j->pseudo;?>
+                </li>
+                <?php } ?>
+            </ul>
+            <?php if($jeuactuel->type_scores == 'scores'){ print_r($this->scorePartie);?>
+                Score obtenu : <input type="text" title="score" required="" name="scores[]" value="<?php echo isset($this->scorePartie[$e[0]->slug]) ? $this->scorePartie[$e[0]->slug] : "" ; ?>"/>
+            <?php } else { ?>
+                Classement obtenu : <select title="score" required="" name="scores[]">
+            <?php for ($j=1;$j<= count($this->equipes);$j++){ ?>
+                <option value="<?php echo count($this->equipes)-$j;?>" <?php echo ((isset($this->classement[$e[0]->slug]) && $this->classement[$e[0]->slug] == $j)? "selected" : "") ?>><?php echo $j;?></option>
+            <?php } ?>
+        </select>
+            <?php } ?>
+            <?php } ?>
+            <div class="submit">
+                <input type="reset" name="reset" value="Réinitialiser"/>
+                <input type="submit" name="submit" value="Modifier"/>
+            </div>
+        </form>
+        <div class="submit">
+            <form action="../add_partie/stepe1">
+                <input type="submit" name="submit" value="Étape précédente"/>
+            </form>
+        </div>
+    </div>
+</article>
+
+<?php include(ROOT."/app/view/Includes/footer.include.html"); ?>
diff --git a/app/view/Admin/displaySupprimeJeuOK.html b/app/view/Admin/displaySupprimeJeuOK.html
new file mode 100644
index 0000000000000000000000000000000000000000..fb721522c37496cced358d77ad7ee9a0ce26b1a6
--- /dev/null
+++ b/app/view/Admin/displaySupprimeJeuOK.html
@@ -0,0 +1,17 @@
+<?php
+	$page_title = "Page d'administration";
+include(ROOT."/app/view/Includes/header.include.html");
+?>
+
+<?php if(isset($_SESSION['user']) && Admin::estAdmin($_SESSION['user']->slug)) { ?>
+
+<article class="msg-valide"><h2>Suppression réussie !</h2></article>
+
+
+<?php } else { ?>
+
+<article class="msg-erreur">Vous n'êtes pas connecté comme administrateur</article>
+
+<?php } ?>
+
+<?php include(ROOT."/app/view/Includes/footer.include.html"); ?>
diff --git a/app/view/Admin/displaySupprimeJoueurOK.html b/app/view/Admin/displaySupprimeJoueurOK.html
new file mode 100644
index 0000000000000000000000000000000000000000..fb721522c37496cced358d77ad7ee9a0ce26b1a6
--- /dev/null
+++ b/app/view/Admin/displaySupprimeJoueurOK.html
@@ -0,0 +1,17 @@
+<?php
+	$page_title = "Page d'administration";
+include(ROOT."/app/view/Includes/header.include.html");
+?>
+
+<?php if(isset($_SESSION['user']) && Admin::estAdmin($_SESSION['user']->slug)) { ?>
+
+<article class="msg-valide"><h2>Suppression réussie !</h2></article>
+
+
+<?php } else { ?>
+
+<article class="msg-erreur">Vous n'êtes pas connecté comme administrateur</article>
+
+<?php } ?>
+
+<?php include(ROOT."/app/view/Includes/footer.include.html"); ?>
diff --git a/app/view/Admin/displayUnAcceptJeuOK.html b/app/view/Admin/displayUnAcceptJeuOK.html
new file mode 100644
index 0000000000000000000000000000000000000000..d4f0a3005a5853bbadf793b9cfcf3dffb339b8b5
--- /dev/null
+++ b/app/view/Admin/displayUnAcceptJeuOK.html
@@ -0,0 +1,17 @@
+<?php
+	$page_title = "Page d'administration";
+include(ROOT."/app/view/Includes/header.include.html");
+?>
+
+<?php if(isset($_SESSION['user']) && Admin::estAdmin($_SESSION['user']->slug)) { ?>
+
+<article class="msg-valide"><h2>Rejet réussi !</h2></article>
+
+
+<?php } else { ?>
+
+<article class="msg-erreur">Vous n'êtes pas connecté comme administrateur</article>
+
+<?php } ?>
+
+<?php include(ROOT."/app/view/Includes/footer.include.html"); ?>
diff --git a/app/view/Admin/displaysupprPartieOK.html b/app/view/Admin/displaysupprPartieOK.html
new file mode 100644
index 0000000000000000000000000000000000000000..fb721522c37496cced358d77ad7ee9a0ce26b1a6
--- /dev/null
+++ b/app/view/Admin/displaysupprPartieOK.html
@@ -0,0 +1,17 @@
+<?php
+	$page_title = "Page d'administration";
+include(ROOT."/app/view/Includes/header.include.html");
+?>
+
+<?php if(isset($_SESSION['user']) && Admin::estAdmin($_SESSION['user']->slug)) { ?>
+
+<article class="msg-valide"><h2>Suppression réussie !</h2></article>
+
+
+<?php } else { ?>
+
+<article class="msg-erreur">Vous n'êtes pas connecté comme administrateur</article>
+
+<?php } ?>
+
+<?php include(ROOT."/app/view/Includes/footer.include.html"); ?>
diff --git a/www/images/cancel.svg b/www/images/cancel.svg
new file mode 100644
index 0000000000000000000000000000000000000000..74217739102e22e1aa6e161d538e2392385826fc
--- /dev/null
+++ b/www/images/cancel.svg
@@ -0,0 +1,558 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://web.resource.org/cc/"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48px"
+   height="48px"
+   id="svg1306"
+   sodipodi:version="0.32"
+   inkscape:version="0.45.1"
+   sodipodi:docbase="C:\Documents and Settings\AleXander\Desktop"
+   sodipodi:docname="Dialog-error.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <defs
+     id="defs1308">
+    <linearGradient
+       id="linearGradient3957">
+      <stop
+         style="stop-color:#fffeff;stop-opacity:0.33333334;"
+         offset="0"
+         id="stop3959" />
+      <stop
+         style="stop-color:#fffeff;stop-opacity:0.21568628;"
+         offset="1"
+         id="stop3961" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2536">
+      <stop
+         style="stop-color:#a40000;stop-opacity:1;"
+         offset="0"
+         id="stop2538" />
+      <stop
+         style="stop-color:#ff1717;stop-opacity:1;"
+         offset="1"
+         id="stop2540" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2479">
+      <stop
+         style="stop-color:#ffe69b;stop-opacity:1;"
+         offset="0"
+         id="stop2481" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="1"
+         id="stop2483" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4126"
+       inkscape:collect="always">
+      <stop
+         id="stop4128"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop4130"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4126"
+       id="radialGradient2169"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.000000,0.000000,0.000000,0.500000,1.899196e-14,20.00000)"
+       cx="23.857143"
+       cy="40.000000"
+       fx="23.857143"
+       fy="40.000000"
+       r="17.142857" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2479"
+       id="linearGradient2485"
+       x1="43.93581"
+       y1="53.835983"
+       x2="20.064686"
+       y2="-8.5626707"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2536"
+       id="linearGradient2542"
+       x1="36.917976"
+       y1="66.288063"
+       x2="19.071495"
+       y2="5.5410109"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2536"
+       id="linearGradient3046"
+       gradientUnits="userSpaceOnUse"
+       x1="36.917976"
+       y1="66.288063"
+       x2="19.071495"
+       y2="5.5410109" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2479"
+       id="linearGradient3048"
+       gradientUnits="userSpaceOnUse"
+       x1="43.93581"
+       y1="53.835983"
+       x2="20.064686"
+       y2="-8.5626707" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2536"
+       id="linearGradient3064"
+       gradientUnits="userSpaceOnUse"
+       x1="36.917976"
+       y1="66.288063"
+       x2="19.071495"
+       y2="5.5410109" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2479"
+       id="linearGradient3066"
+       gradientUnits="userSpaceOnUse"
+       x1="43.93581"
+       y1="53.835983"
+       x2="20.064686"
+       y2="-8.5626707" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3957"
+       id="linearGradient3963"
+       x1="21.993773"
+       y1="33.955299"
+       x2="20.917078"
+       y2="15.814602"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4126"
+       id="radialGradient3976"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.5,0,20)"
+       cx="23.857143"
+       cy="40.000000"
+       fx="23.857143"
+       fy="40.000000"
+       r="17.142857" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2536"
+       id="linearGradient3978"
+       gradientUnits="userSpaceOnUse"
+       x1="36.917976"
+       y1="66.288063"
+       x2="19.071495"
+       y2="5.5410109" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2479"
+       id="linearGradient3980"
+       gradientUnits="userSpaceOnUse"
+       x1="43.93581"
+       y1="53.835983"
+       x2="20.064686"
+       y2="-8.5626707" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3957"
+       id="linearGradient3982"
+       gradientUnits="userSpaceOnUse"
+       x1="21.993773"
+       y1="33.955299"
+       x2="20.917078"
+       y2="15.814602"
+       gradientTransform="matrix(1.002994,0,0,1.002994,-7.1859e-2,1.968356e-2)" />
+    <linearGradient
+       gradientTransform="translate(0,-2)"
+       gradientUnits="userSpaceOnUse"
+       y2="35.05225"
+       x2="24.30225"
+       y1="15.80225"
+       x1="21.75"
+       id="linearGradient2262"
+       xlink:href="#linearGradient2256"
+       inkscape:collect="always" />
+    <radialGradient
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(4.154957,0,0,3.198723,-52.84553,-23.50921)"
+       r="21.25"
+       fy="10.666344"
+       fx="16.75"
+       cy="10.666344"
+       cx="16.75"
+       id="radialGradient2254"
+       xlink:href="#linearGradient2248"
+       inkscape:collect="always" />
+    <linearGradient
+       gradientTransform="matrix(0.988373,0.000000,0.000000,0.988373,0.279002,0.278984)"
+       y2="37.959785"
+       x2="41.047836"
+       y1="20.105337"
+       x1="23.995985"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2243"
+       xlink:href="#linearGradient4981"
+       inkscape:collect="always" />
+    <radialGradient
+       gradientTransform="matrix(1.693981,0,0,1.693981,-16.86529,-25.11111)"
+       gradientUnits="userSpaceOnUse"
+       r="12.30225"
+       fy="33.30225"
+       fx="24.30225"
+       cy="33.30225"
+       cx="24.30225"
+       id="radialGradient2239"
+       xlink:href="#linearGradient9647"
+       inkscape:collect="always" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       y2="28.394291"
+       x2="32.166405"
+       y1="16.285088"
+       x1="15.578875"
+       id="linearGradient7901"
+       xlink:href="#linearGradient7895"
+       inkscape:collect="always" />
+    <linearGradient
+       gradientTransform="translate(0,-2)"
+       gradientUnits="userSpaceOnUse"
+       y2="37.959785"
+       x2="41.047836"
+       y1="20.105337"
+       x1="23.995985"
+       id="linearGradient4987"
+       xlink:href="#linearGradient4981"
+       inkscape:collect="always" />
+    <linearGradient
+       gradientTransform="translate(0,-2)"
+       gradientUnits="userSpaceOnUse"
+       y2="47.374317"
+       x2="53.570126"
+       y1="12.503600"
+       x1="15.737001"
+       id="linearGradient2057"
+       xlink:href="#linearGradient11780"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient15762"
+       id="linearGradient15772"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.000000,0.000000,0.000000,-1.000000,31.72170,31.29079)"
+       x1="5.7365270"
+       y1="5.3855424"
+       x2="9.8940229"
+       y2="9.6507530" />
+    <linearGradient
+       id="linearGradient11014">
+      <stop
+         id="stop11016"
+         offset="0.0000000"
+         style="stop-color:#a80000;stop-opacity:1.0000000;" />
+      <stop
+         id="stop13245"
+         offset="0.0000000"
+         style="stop-color:#c60000;stop-opacity:1.0000000;" />
+      <stop
+         id="stop11018"
+         offset="1.0000000"
+         style="stop-color:#e50000;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient11780">
+      <stop
+         id="stop11782"
+         offset="0.0000000"
+         style="stop-color:#ff8b8b;stop-opacity:1.0000000;" />
+      <stop
+         id="stop11784"
+         offset="1.0000000"
+         style="stop-color:#ec1b1b;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient14236">
+      <stop
+         style="stop-color:#ed4040;stop-opacity:1.0000000;"
+         offset="0.0000000"
+         id="stop14238" />
+      <stop
+         style="stop-color:#a40000;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop14240" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient15762">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop15764" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop15766" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4981">
+      <stop
+         id="stop4983"
+         offset="0"
+         style="stop-color:#cc0000;stop-opacity:1;" />
+      <stop
+         id="stop4985"
+         offset="1.0000000"
+         style="stop-color:#b30000;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient7895"
+       inkscape:collect="always">
+      <stop
+         id="stop7897"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop7899"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <radialGradient
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.595238,0,14.875)"
+       r="15.75"
+       fy="36.75"
+       fx="25.125"
+       cy="36.75"
+       cx="25.125"
+       id="radialGradient21650"
+       xlink:href="#linearGradient21644"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient21644"
+       inkscape:collect="always">
+      <stop
+         id="stop21646"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop21648"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient9647">
+      <stop
+         id="stop9649"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop9651"
+         offset="1"
+         style="stop-color:#dbdbdb;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2248"
+       inkscape:collect="always">
+      <stop
+         id="stop2250"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop2252"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2256">
+      <stop
+         id="stop2258"
+         offset="0"
+         style="stop-color:#ff0202;stop-opacity:1;" />
+      <stop
+         id="stop2260"
+         offset="1"
+         style="stop-color:#ff9b9b;stop-opacity:1;" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9647"
+       id="radialGradient2335"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.693981,0,0,1.693981,-16.86529,-23.715608)"
+       cx="24.30225"
+       cy="33.30225"
+       fx="24.30225"
+       fy="33.30225"
+       r="12.30225" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2256"
+       id="linearGradient2337"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-7.1723252e-7,-0.6044975)"
+       x1="21.75"
+       y1="15.80225"
+       x2="24.30225"
+       y2="35.05225" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="0.21568627"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="5.9785191"
+     inkscape:cx="41.314579"
+     inkscape:cy="38.052902"
+     inkscape:current-layer="layer3"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="925"
+     inkscape:window-height="846"
+     inkscape:window-x="247"
+     inkscape:window-y="-12"
+     inkscape:showpageshadow="false"
+     fill="#ef2929"
+     gridempspacing="4" />
+  <metadata
+     id="metadata1311">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:creator>
+          <cc:Agent>
+            <dc:title>Rodney Dawes</dc:title>
+          </cc:Agent>
+        </dc:creator>
+        <dc:contributor>
+          <cc:Agent>
+            <dc:title>Jakub Steiner, Garrett LeSage</dc:title>
+          </cc:Agent>
+        </dc:contributor>
+        <cc:license
+           rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
+        <dc:title>Dialog Error</dc:title>
+      </cc:Work>
+      <cc:License
+         rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
+        <cc:permits
+           rdf:resource="http://web.resource.org/cc/Reproduction" />
+        <cc:permits
+           rdf:resource="http://web.resource.org/cc/Distribution" />
+        <cc:requires
+           rdf:resource="http://web.resource.org/cc/Notice" />
+        <cc:requires
+           rdf:resource="http://web.resource.org/cc/Attribution" />
+        <cc:permits
+           rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
+        <cc:requires
+           rdf:resource="http://web.resource.org/cc/ShareAlike" />
+      </cc:License>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="Shadow">
+    <path
+       inkscape:r_cy="true"
+       inkscape:r_cx="true"
+       transform="matrix(1.070555,0,0,0.525,-0.892755,22.5)"
+       d="M 41 40 A 17.142857 8.5714283 0 1 1  6.7142868,40 A 17.142857 8.5714283 0 1 1  41 40 z"
+       sodipodi:ry="8.5714283"
+       sodipodi:rx="17.142857"
+       sodipodi:cy="40"
+       sodipodi:cx="23.857143"
+       id="path6548"
+       style="opacity:0.6;color:#000000;fill:url(#radialGradient3976);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
+       sodipodi:type="arc" />
+  </g>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <g
+       id="g4006">
+      <path
+         transform="matrix(0.920488,0,0,0.920488,2.368532,0.97408)"
+         d="M 46.857143 23.928572 A 23.357143 23.357143 0 1 1  0.1428566,23.928572 A 23.357143 23.357143 0 1 1  46.857143 23.928572 z"
+         sodipodi:ry="23.357143"
+         sodipodi:rx="23.357143"
+         sodipodi:cy="23.928572"
+         sodipodi:cx="23.5"
+         id="path1314"
+         style="fill:url(#linearGradient3978);fill-opacity:1;fill-rule:nonzero;stroke:#b20000;stroke-width:1.08638;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         sodipodi:type="arc"
+         inkscape:r_cx="true"
+         inkscape:r_cy="true" />
+      <path
+         transform="matrix(0.856093,0,0,0.856093,1.818275,0.197769)"
+         d="M 49.901535 26.635273 A 23.991123 23.991123 0 1 1  1.9192886,26.635273 A 23.991123 23.991123 0 1 1  49.901535 26.635273 z"
+         sodipodi:ry="23.991123"
+         sodipodi:rx="23.991123"
+         sodipodi:cy="26.635273"
+         sodipodi:cx="25.910412"
+         id="path3560"
+         style="opacity:0.34659089;fill:#cc0000;fill-opacity:0;stroke:url(#linearGradient3980);stroke-width:1.16809607;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         sodipodi:type="arc"
+         inkscape:r_cx="true"
+         inkscape:r_cy="true" />
+    </g>
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="Error Box">
+    <rect
+       inkscape:r_cy="true"
+       inkscape:r_cx="true"
+       style="fill:#efefef;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.73876643;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.8627451"
+       id="rect2070"
+       width="28.000002"
+       height="6.0000873"
+       x="-13.292924"
+       y="30.234007"
+       transform="matrix(0.7071068,-0.7071068,0.7071068,0.7071068,0,0)" />
+    <rect
+       inkscape:r_cy="true"
+       inkscape:r_cx="true"
+       style="fill:#efefef;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.73876643;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.8627451"
+       id="rect2353"
+       width="28.000002"
+       height="6.0000873"
+       x="19.234049"
+       y="-3.7071202"
+       transform="matrix(0.7071068,0.7071068,-0.7071068,0.7071068,0,0)" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="Glossy Shine">
+    <path
+       sodipodi:nodetypes="czssc"
+       id="path3955"
+       d="M 43.428679,21.800186 C 43.428679,32.663229 33.043349,15.515116 24.698029,22.187731 C 16.547377,28.704695 4.039397,34.414777 4.039397,23.551734 C 4.039397,12.434496 12.760828,2.1207586 23.623874,2.1207586 C 34.48692,2.1207586 43.428679,10.937141 43.428679,21.800186 z "
+       style="fill:url(#linearGradient3982);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       inkscape:r_cx="true"
+       inkscape:r_cy="true" />
+  </g>
+</svg>
diff --git a/www/images/modif.svg b/www/images/modif.svg
new file mode 100644
index 0000000000000000000000000000000000000000..a0eba2b8484ab12625ce2266087f301bf4a8753b
--- /dev/null
+++ b/www/images/modif.svg
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg id="svg4198" xmlns="http://www.w3.org/2000/svg" height="42.525" width="42.525" version="1.0" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs id="defs4200">
+  <linearGradient id="linearGradient15218">
+   <stop id="stop15220" stop-color="#f0f0ef" offset="0"/>
+   <stop id="stop2269" stop-color="#e8e8e8" offset=".59929"/>
+   <stop id="stop2267" stop-color="#fff" offset=".82759"/>
+   <stop id="stop15222" stop-color="#d8d8d3" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient2259">
+   <stop id="stop2261" stop-color="#fff" offset="0"/>
+   <stop id="stop2263" stop-color="#fff" stop-opacity="0" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient3497" y2="39.498" xlink:href="#linearGradient15218" gradientUnits="userSpaceOnUse" x2="35.785" gradientTransform="matrix(1.0657 0 0 .98760 -8.5483 -4.8917)" y1="18.992" x1="22.308"/>
+  <linearGradient id="linearGradient3499" y2="42.007" xlink:href="#linearGradient2259" gradientUnits="userSpaceOnUse" x2="30.811" gradientTransform="matrix(.99850 0 0 .99825 -6.9704 -4.8929)" y1="26.697" x1="26.076"/>
+  <linearGradient id="linearGradient3501" y2="39.498" xlink:href="#linearGradient15218" gradientUnits="userSpaceOnUse" x2="35.785" gradientTransform="matrix(.67326 0 0 .62408 13.393 9.6326)" y1="18.992" x1="22.308"/>
+  <linearGradient id="linearGradient3503" y2="42.007" xlink:href="#linearGradient2259" gradientUnits="userSpaceOnUse" x2="30.811" gradientTransform="matrix(.63048 0 0 .63084 14.402 9.6314)" y1="26.697" x1="26.076"/>
+  <linearGradient id="linearGradient3505" y2="37.771" gradientUnits="userSpaceOnUse" x2="33.665" gradientTransform="matrix(.63084 0 0 .63084 14.51 9.6314)" y1="40.458" x1="35.997">
+   <stop id="stop2226" stop-color="#7c7c7c" offset="0"/>
+   <stop id="stop2228" stop-color="#b8b8b8" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient3507" y2="38.07" gradientUnits="userSpaceOnUse" x2="34.17" gradientTransform="matrix(.63084 0 0 .63084 14.51 9.3949)" y1="36.921" x1="33.396">
+   <stop id="stop2253" stop-color="#fff" offset="0"/>
+   <stop id="stop2255" stop-color="#fff" stop-opacity="0" offset="1"/>
+  </linearGradient>
+ </defs>
+ <g id="layer1" transform="translate(-3.2124 -.63038)">
+  <g id="g3475">
+   <path id="path1650" stroke-linejoin="round" d="m45.265 21.893c0 11.482-9.308 20.79-20.79 20.79s-20.79-9.308-20.79-20.79c-0.0001-11.482 9.308-20.79 20.79-20.79 11.482-0.0001 20.79 9.308 20.79 20.79v0z" stroke="#914900" stroke-linecap="round" stroke-width="0.945" fill="#f57900"/>
+   <path id="path3392" stroke-linejoin="round" d="m44.732 21.802c0 11.11-9.007 20.117-20.118 20.117-11.11 0-20.118-9.007-20.118-20.117 0.0005-11.111 9.008-20.118 20.118-20.118 11.111-0.0002 20.118 9.007 20.118 20.118v0z" stroke="#fcaf3e" stroke-linecap="round" stroke-width=".91445" fill="none"/>
+   <path id="path3068" d="m43.853 20.966c0 10.831-6.052-4.306-18.674 0.386-12.723 4.73-20.567 10.445-20.567-0.386-0.0001-10.831 8.79-19.621 19.621-19.621 10.83 0.0002 19.62 8.79 19.62 19.621z" fill-opacity=".21390" fill="#fffeff"/>
+   <g id="g4268" opacity=".5" transform="matrix(.63180 0 0 .63123 10.591 7.0472)">
+    <rect id="rect2279" opacity=".17045" fill-rule="evenodd" height="2" width="13" y="34.033" x="20.162"/>
+    <rect id="rect4238" opacity="1" fill-rule="evenodd" rx=".56566" ry=".56616" height="35.977" width="30.952" stroke="#888a85" y="1.5629" x="1.5484" stroke-width=".99894" fill="url(#linearGradient3497)"/>
+    <rect id="rect4240" opacity="1" rx="0" ry="0" height="33.981" width="28.971" stroke="url(#linearGradient3499)" y="2.5606" x="2.5325" stroke-width=".99894" fill="none"/>
+    <rect id="rect4248" opacity=".17045" fill-rule="evenodd" height="2" width="21" y="10.033" x="7.0161"/>
+    <rect id="rect4250" opacity=".17045" fill-rule="evenodd" height="2" width="20" y="14.033" x="7.0161"/>
+    <rect id="rect4252" opacity=".17045" fill-rule="evenodd" height="2" width="18" y="18.033" x="7.0161"/>
+    <rect id="rect4254" opacity=".17045" fill-rule="evenodd" height="2" width="21" y="22.033" x="7.0161"/>
+    <rect id="rect4256" opacity=".17045" fill-rule="evenodd" height="2" width="13" y="26.033" x="7.0161"/>
+   </g>
+   <path id="rect12413" opacity=".80277" d="m20.131 13.711h18.835c0.199 0 0.359 0.16 0.359 0.358v17.139c0 1.562-4.34 5.238-5.846 5.238h-13.348c-0.199 0-0.359-0.16-0.359-0.358v-22.019c0-0.198 0.16-0.358 0.359-0.358z" fill-rule="evenodd" stroke="#888a85" stroke-width=".63084" fill="url(#linearGradient3501)"/>
+   <rect id="rect15244" rx="0" ry="0" height="21.474" width="18.293" stroke="url(#linearGradient3503)" y="14.342" x="20.402" stroke-width=".63084" fill="none"/>
+   <path id="path2210" d="m33.472 36.445c1.281 0.208 6.049-2.858 5.857-5.361-0.986 1.528-3.002 0.811-5.594 0.912 0 0 0.25 4.133-0.263 4.449z" fill-rule="evenodd" stroke="#868a84" stroke-width=".63084" fill="url(#linearGradient3505)"/>
+   <path id="path2247" opacity=".36932" d="m34.387 35.062c0.864-0.431 2.794-1.354 3.613-2.541-1.006 0.429-1.859 0.133-3.597 0.12 0 0 0.103 1.932-0.016 2.421z" stroke="url(#linearGradient3507)" stroke-width=".63084" fill="none"/>
+   <rect id="rect2271" opacity=".17045" fill-rule="evenodd" height="1.2617" width="13.248" y="19.094" x="23.239"/>
+   <rect id="rect2273" opacity=".17045" fill-rule="evenodd" height="1.2617" width="12.612" y="21.617" x="23.239"/>
+   <rect id="rect2275" opacity=".17045" fill-rule="evenodd" height="1.2617" width="11.34" y="24.141" x="23.239"/>
+   <rect id="rect2277" opacity=".17045" fill-rule="evenodd" height="1.2617" width="13.248" y="26.664" x="23.239"/>
+  </g>
+ </g>
+</svg>
diff --git a/www/images/ok.svg b/www/images/ok.svg
new file mode 100644
index 0000000000000000000000000000000000000000..287b11e7fa019b860c28aa56e1b40c4df6441992
--- /dev/null
+++ b/www/images/ok.svg
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg id="svg1306" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="48px" width="48px" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <defs id="defs1308">
+  <radialGradient id="radialGradient3976" gradientUnits="userSpaceOnUse" cy="40" cx="23.857" gradientTransform="matrix(1 0 0 .5 0 20)" r="17.143">
+   <stop id="stop4128" offset="0"/>
+   <stop id="stop4130" stop-opacity="0" offset="1"/>
+  </radialGradient>
+  <linearGradient id="linearGradient3980" y2="-8.5627" gradientUnits="userSpaceOnUse" x2="20.065" y1="53.836" x1="43.936">
+   <stop id="stop2481" stop-color="#ffe69b" offset="0"/>
+   <stop id="stop2483" stop-color="#fff" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient3982" y2="15.815" gradientUnits="userSpaceOnUse" x2="20.917" gradientTransform="matrix(1.003 0 0 1.003 -.071859 .019684)" y1="33.955" x1="21.994">
+   <stop id="stop3959" stop-color="#fffeff" stop-opacity=".33333" offset="0"/>
+   <stop id="stop3961" stop-color="#fffeff" stop-opacity=".21569" offset="1"/>
+  </linearGradient>
+ </defs>
+ <metadata id="metadata1311">
+  <rdf:RDF>
+   <cc:Work rdf:about="">
+    <dc:format>image/svg+xml</dc:format>
+    <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+    <dc:creator>
+     <cc:Agent>
+      <dc:title>Rodney Dawes</dc:title>
+     </cc:Agent>
+    </dc:creator>
+    <dc:contributor>
+     <cc:Agent>
+      <dc:title>Jakub Steiner, Garrett LeSage</dc:title>
+     </cc:Agent>
+    </dc:contributor>
+    <cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/"/>
+    <dc:title/>
+   </cc:Work>
+   <cc:License rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
+    <cc:permits rdf:resource="http://web.resource.org/cc/Reproduction"/>
+    <cc:permits rdf:resource="http://web.resource.org/cc/Distribution"/>
+    <cc:requires rdf:resource="http://web.resource.org/cc/Notice"/>
+    <cc:requires rdf:resource="http://web.resource.org/cc/Attribution"/>
+    <cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks"/>
+    <cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike"/>
+   </cc:License>
+  </rdf:RDF>
+ </metadata>
+ <g id="layer2">
+  <path id="path6548" opacity=".6" style="color:#000000" d="m41 40a17.143 8.5714 0 1 1 -34.286 0 17.143 8.5714 0 1 1 34.286 0z" transform="matrix(1.0706 0 0 .525 -.89276 22.5)" display="block" fill="url(#radialGradient3976)"/>
+ </g>
+ <g id="layer1">
+  <g id="g4006">
+   <path id="path1314" d="m46.857 23.929c0 12.9-10.457 23.357-23.357 23.357s-23.357-10.457-23.357-23.357 10.457-23.357 23.357-23.357 23.357 10.457 23.357 23.357z" transform="matrix(.92049 0 0 .92049 2.3685 .97408)" stroke="#4e9a06" stroke-width="1.0864" fill="#73d216"/>
+   <path id="path3560" opacity=".34659" d="m49.902 26.635c0 13.25-10.741 23.991-23.991 23.991s-23.991-10.741-23.991-23.991 10.741-23.991 23.991-23.991 23.991 10.741 23.991 23.991z" fill-opacity="0" transform="matrix(.85609 0 0 .85609 1.8183 .19777)" stroke="url(#linearGradient3980)" stroke-width="1.1681"/>
+  </g>
+ </g>
+ <g id="layer3">
+  <g id="text4967" fill="#eeeeec" stroke="#eeeeec">
+   <path id="path4984" style="" d="m14.707 25.178c0.62921 0.000015 1.1052 0.5163 1.4278 1.5489 0.64534 1.9361 1.1052 2.9041 1.3794 2.9041 0.20973 0.000012 0.42753-0.16133 0.65342-0.48402 4.5336-7.2602 8.7284-13.133 12.584-17.618 1.0003-1.1616 2.5895-1.7424 4.7676-1.7425 0.51625 0.0000313 0.86313 0.048433 1.0406 0.1452 0.17744 0.096834 0.26618 0.21784 0.26621 0.36301-0.000033 0.2259-0.26624 0.66959-0.79863 1.331-6.2277 7.4861-12.004 15.392-17.328 23.717-0.37109 0.58082-1.1294 0.87124-2.2749 0.87123-1.1617 0.000005-1.8473-0.0484-2.0571-0.1452-0.54856-0.242-1.1939-1.4762-1.9361-3.7027-0.83897-2.4685-1.2585-4.0173-1.2584-4.6466-0.000008-0.67761 0.56468-1.331 1.6941-1.9603 0.69375-0.3872 1.3068-0.5808 1.8393-0.58082"/>
+  </g>
+ </g>
+ <g id="layer4">
+  <path id="path3955" fill="url(#linearGradient3982)" d="m43.429 21.8c0 10.863-10.386-6.285-18.731 0.388-8.151 6.517-20.659 12.227-20.659 1.364 0.0004-11.118 8.722-21.431 19.585-21.431 10.863-0.0002 19.805 8.816 19.805 19.679z"/>
+ </g>
+</svg>