diff --git a/app/controller/ProfilController.php b/app/controller/ProfilController.php index e5b24b9b5b1eb73b7f37fb4fc0d1e8a0379c40af..57b635cb2fd6fb4b9e99230f505e1c55b8723180 100644 --- a/app/controller/ProfilController.php +++ b/app/controller/ProfilController.php @@ -1,4 +1,5 @@ <?php +include(ROOT."/Image.php"); class ProfilController extends Controller { // classe de contrôleur pour l'affichage des profils public function display() { @@ -12,4 +13,65 @@ class ProfilController extends Controller { // classe de contrôleur pour l'affi $this->view->jeu_favori = $p; $this->view->display(); // on affiche ce profil } + + public function displayEdit() { + $slug = $this->route["params"]["slug"]; // on récupère le "slug", en gros tout le reste de l'URL qui n'a pas encore servi + // je précise que dans ce cas précis, le $slug ne contient que le pseudo du joueur sosu forme normalisée. Donc je pourrais renommer la variable $slug_joueur... + $this->view->profil = Profil::getFromSlug($slug); // on utilise le modèle pour aller chercher en BDD le profil qui nous intéresse + $this->view->display(); // on affiche ce profil + } + + public function displayValid() { + $slug = $this->route["params"]["slug"]; // on récupère le "slug", en gros tout le reste de l'URL qui n'a pas encore servi + // je précise que dans ce cas précis, le $slug ne contient que le pseudo du joueur sosu forme normalisée. Donc je pourrais renommer la variable $slug_joueur... + $this->view->profil = Profil::getFromSlug($slug); // on utilise le modèle pour aller chercher en BDD le profil qui nous intéresse + $this->view->display(); // on affiche ce profil + } + + public function verifyEdit() { + if (!isset($_POST['nom']) || !isset($_POST['prenom']) || !isset($_POST['email'])) { // si l'une des données manque, erreur + echo "<h1>Erreur : variables absentes</h1>"; + die(); + } + $slug = $this->route["params"]["slug"]; + $profil = Profil::getFromSlug($slug); + if (isset($_POST['password']) && isset($_POST['password_bis']) && $_POST['password'] != "") { + if ($_POST['password'] == $_POST['password_bis']) { + $password = password_hash($_POST['password'], PASSWORD_DEFAULT); + Profil::setPassword($slug, $password); + } else { + session_start(); // on démarre une session pour avoir accès aux variables superglobales de session + $_SESSION["registerErrCode"] = 4; // on stocke le code d'erreur + header('Location:../edit'); // on redirige vers la page de formulaire (il faut faire un retour dans le dossier parent pour que ça fonctionne) + die(); + } + } + $data = $_POST; + if(!isset($data['avatar_suppr'])) { + if(isset($_FILES['avatar'])) { + list($err, $avatar) = getImage($_FILES['avatar'], 512, 512); + if ($err == 0) { + unlink(ROOT . "/www/images/avatar/" . $slug . ".jpg"); + saveImage($avatar, ROOT . "/www/images/avatar/" . $slug . ".jpg"); + $data['avatar'] = 1; + } elseif ($err == 1) { + $data['avatar'] = $profil->avatar; + } else { + session_start(); // on démarre une session pour avoir accès aux variables superglobales de session + $_SESSION["registerErrCode"] = $err; // on stocke le code d'erreur + header('Location:../edit'); // on redirige vers la page de formulaire (il faut faire un retour dans le dossier parent pour que ça fonctionne) + die(); + } + } else { + $data['avatar'] = $profil->avatar; + } + } else { + unlink(ROOT."/www/images/avatar/".$slug.".jpg"); + $data['avatar'] = 0; + } + Profil::setAutre($slug, $data); + session_start(); + $_SESSION['user'] = Connexion::getUser($slug); + header('Location:valid'); + } } diff --git a/app/kernel/Router.php b/app/kernel/Router.php index 821d272d624f41451fb3ced499df452074c542bc..c624faf931692f198e3cae908a8ecc6a255ba5b7 100644 --- a/app/kernel/Router.php +++ b/app/kernel/Router.php @@ -50,7 +50,25 @@ class Router { // classe PHP permettant l'analyse de l'URL des requêtes $result["action"] = "display"; $result["params"]["slug"] = $parts[1]; } + + else if($parts[0] == "profil" && count($parts) == 3 && $parts[2] == "edit") { + $result["controller"] = "Profil"; + $result["action"] = "displayEdit"; + $result["params"]["slug"] = $parts[1]; + } + else if($parts[0] == "profil" && count($parts) == 4 && $parts[2] == "edit" && $parts[3] == "verify") { + $result["controller"] = "Profil"; + $result["action"] = "verifyEdit"; + $result["params"]["slug"] = $parts[1]; + } + + else if($parts[0] == "profil" && count($parts) == 4 && $parts[2] == "edit" && $parts[3] == "valid") { + $result["controller"] = "Profil"; + $result["action"] = "displayValid"; + $result["params"]["slug"] = $parts[1]; + } + /*** consultation des classements ***/ else if($parts[0] == "classement" && count($parts) > 1) { // si classement général : 2 morceaux(classement/global), si classement spécifique : 3 morceaux (classement/jeu/nomDuJeu) $result["controller"] = "Classement"; diff --git a/app/model/Profil.php b/app/model/Profil.php index 521528a953689f3ba834066c11ef457004dd0659..e3b1beeaf0895e444c1efcac72e076af37868303 100644 --- a/app/model/Profil.php +++ b/app/model/Profil.php @@ -19,6 +19,24 @@ class Profil extends Model { // classe de modèle pour l'affichage de profils $req->setFetchMode(PDO::FETCH_CLASS, "Profil"); return $req->fetchAll(); } + + public static function setPassword($slug, $password) { + $db = Database::getInstance(); // idem à au-dessus + $sql = "UPDATE R_joueur SET password = :password WHERE slug = :slug"; + $req = $db->prepare($sql); + $req->execute(array(':password' => $password, ':slug' => $slug)); + } + + public static function setAutre($slug, $data) { + $db = Database::getInstance(); // idem à au-dessus + $sql = "UPDATE R_joueur SET nom = :nom, prenom = :prenom, email = :email, avatar = :avatar WHERE slug = :slug"; + $req = $db->prepare($sql); + $req->execute(array(':nom' => $data['nom'], + ':prenom' => $data['prenom'], + ':email' => $data['email'], + ':avatar' => $data['avatar'], + ':slug' => $slug)); + } } diff --git a/app/view/Profil/display.html b/app/view/Profil/display.html index 2f7b6e1f47e89eae01a7ad16fcf3345ca6019e17..8bbf2e29ffdb172d588e12260b966bb35aef1070 100644 --- a/app/view/Profil/display.html +++ b/app/view/Profil/display.html @@ -88,6 +88,11 @@ <div class="more-link"><a href="" >Plus...</a></div> </div> </div> + <?php + if(isset($_SESSION['connected']) && $_SESSION['connected'] == true && $_SESSION['user']->slug == $this->profil->slug) { + ?> + <div class="more-link"><a href="<?php print $this->profil->slug;?>/edit" >Modifier le profil</a></div> + <?php } ?> </article> diff --git a/app/view/Profil/displayEdit.html b/app/view/Profil/displayEdit.html new file mode 100644 index 0000000000000000000000000000000000000000..e0075d9e61a9c02aa3c73987d9000828c54608bc --- /dev/null +++ b/app/view/Profil/displayEdit.html @@ -0,0 +1,116 @@ +<?php + session_start(); + + $page_title = "Édition du profil de ".$this->profil->pseudo; + include(ROOT."/app/view/Includes/header.include.html"); +?> + +<?php + if(isset($_SESSION['registerErrCode'])) { // si message d'erreur + $errCode = $_SESSION['registerErrCode']; + if($errCode == 2) { // on détermine le message + $errMsg = '<h3>Pseudo déjà utilisé !</h3>'; +} elseif($errCode == 3) { +$errMsg = '<h3>Adresse e-mail déjà utilisée !</h3>'; +} elseif($errCode == 4) { +$errMsg = '<h3>Mots de passe différants</h3>'; +} elseif($errCode == 5) { +$errMsg = '<h3>Problème sur l\'avatar</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['registerErrCode']); // on retire la variable de session +} +?> + +<?php if(isset($_SESSION['connected']) && $_SESSION['connected'] == true && + isset($_SESSION['user']) && $_SESSION['user']->slug == $this->profil->slug) { ?> +<article> + <h2>Édition du profil de <?php print $this->profil->pseudo; ?></h2> + <div class="inscription-form"> + <form method="post" action="edit/verify" enctype="multipart/form-data" onsubmit="return checkForm();"> + <div class="form-line"> + <div class="validation-container-left"> + <label for="password">Mot de passe* : </label> + <input type="password" name="password" id="password" onchange="if(this.value != '') callAjax('checkPassword', this.value, this.id);" /> + </div> + <div class="validation-container"> + <span id="rsp_password" class="validation-container-content"></span> + <input type="checkbox" disabled name="valid_password" class="validation-checkbox" /> + </div> + </div> + <div class="form-line"> + <div class="validation-container-left"> + <label for="password_bis">Vérification mdp* : </label> + <input type="password" name="password_bis" id="password_bis" onchange="if(this.value != '') callAjax('checkPasswordBis', this.value+'¤'+$.(\'#password\').value, this.id);" /> + </div> + <div class="validation-container"> + <span id="rsp_password_bis" class="validation-container-content"></span> + <input type="checkbox" disabled name="valid_password_bis" class="validation-checkbox" /> + </div> + </div> + <div class="form-line"> + <div class="validation-container-left"> + <label for="nom">Nom* : </label> + <input type="text" required="" name="nom" id="nom" <?php print "value=\"".$this->profil->nom."\"";?> /> + </div> + <div class="validation-container"> + <span id="rsp_nom" class="validation-container-content"></span> + <input type="checkbox" disabled name="valid_nom" class="validation-checkbox" /> + </div> + </div> + <div class="form-line"> + <div class="validation-container-left"> + <label for="prenom">Prénom* : </label> + <input type="text" required="" name="prenom" id="prenom" <?php print "value=\"".$this->profil->prenom."\"";?>/> + </div> + <div class="validation-container"> + <span id="rsp_prenom" class="validation-container-content"></span> + <input type="checkbox" disabled name="valid_prenom" class="validation-checkbox" /> + </div> + </div> + <div class="form-line"> + <div class="validation-container-left"> + <label for="email">Adresse e-mail* : </label> + <input type="email" required="" name="email" id="email" <?php print "value=\"".$this->profil->email."\"";?> onchange="if(this.value != '') callAjax('checkEmail', this.value, this.id);" /> + </div> + <div class="validation-container"> + <span id="rsp_email" class="validation-container-content"></span> + <input type="checkbox" disabled name="valid_email" class="validation-checkbox" /> + </div> + </div> + <div class="form-line"> + <div class="validation-container-left"> + <label for="description">Une description de vous : </label> + <textarea name="description" id="description" ><?php print $this->profil->description;?></textarea> + </div> + </div> + <div class="form-line"> + <div class="validation-container-left"> + <label for="avatar">Avatar</label> + <input type="file" name="avatar" id="avatar" /> + </div> + </div> + <div class="form-line"> + <div class="validation-container-left"> + <label for="avatar_suppr">Supprimer l'avatar : </label> + <input type="checkbox" name="avatar_suppr" id="avatar_suppr" value="1"/> + </div> + </div> + <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 <?php print $this->profil->pseudo; ?></article> + <?php } ?> + + + +<?php include(ROOT."/app/view/Includes/footer.include.html"); ?> \ No newline at end of file diff --git a/app/view/Profil/displayValid.html b/app/view/Profil/displayValid.html new file mode 100644 index 0000000000000000000000000000000000000000..3e111d3883ebeb0ae1ae0587f6ac51f73d30f036 --- /dev/null +++ b/app/view/Profil/displayValid.html @@ -0,0 +1,8 @@ +<?php + $page_title = "Inscription réussie"; + include(ROOT."/app/view/Includes/header.include.html"); +?> + + <article class="msg-valide"><h2>Modifiction Réussi</h2></article> + +<?php include(ROOT."/app/view/Includes/footer.include.html"); ?>