From a74feab37e4550a10dcaf2ec40a371ea3df40782 Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Wed, 3 Feb 2016 10:24:37 +0100 Subject: [PATCH 01/10] readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c6afced..6253731 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ Un commentaire est composé de : La date est générée automatiquement. Tous les champs sont obligatoires à l'exception du site web. -Il faudra afficher l'avatar de l'auteur en utilisant le service [gravatar](https://fr.gravatar.com/site/implement/images/php/). *Ne pas réutiliser ce code source mais ne vous génez par pour vous en inspirer.* +Il faudra afficher l'avatar de l'auteur en utilisant le service [gravatar](https://fr.gravatar.com/site/implement/images/php/). *Ne pas réutiliser ce code source mais ne vous génez pas pour vous en inspirer.* Flux ---- From 64cbb948298d373564404fc1560f5c444d5c4468 Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Thu, 4 Feb 2016 19:59:27 +0100 Subject: [PATCH 02/10] psr --- lib/database.php | 2 +- lib/project.php | 16 ++++++---------- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/lib/database.php b/lib/database.php index 28625ab..333a0ec 100644 --- a/lib/database.php +++ b/lib/database.php @@ -3,7 +3,7 @@ /** * @return PDO Une instance PDO */ -function getDatabaseConnection() +function getDatabaseConnection() { static $pdo; diff --git a/lib/project.php b/lib/project.php index 87d170a..b6cac57 100644 --- a/lib/project.php +++ b/lib/project.php @@ -94,9 +94,9 @@ function getCommentsByProject($id) * @param string $website Site web de l'auteur * @param string $content Contenu du commentaire * @param DateTime $date Date du commentaire - * @param int $projectId L'id du projet associé + * @param int $projectId L'id du projet associé */ -function createComment($name, $email, $website, $content, DateTime $date, $projectId) +function createComment($name, $email, $website, $content, DateTime $date, $projectId) { $pdo = getDatabaseConnection(); @@ -122,12 +122,12 @@ function createComment($name, $email, $website, $content, DateTime $date, $proje * @param int $numberOfPages Le nombre de pages * @return array Les pages */ -function getProjectsPager($page, $numberOfPages) +function getProjectsPager($page, $numberOfPages) { if (!is_integer($page)) { throw new InvalidArgumentException('The argument "page" must be an integer.'); } - + if (!is_integer($numberOfPages)) { throw new InvalidArgumentException('The argument "numberOfPages" must be an integer.'); } @@ -141,7 +141,7 @@ function getProjectsPager($page, $numberOfPages) 'current' => $page === 1, ); } - + if ($page > 1) { $pages[] = array( 'title' => 'Précédent', @@ -159,7 +159,7 @@ function getProjectsPager($page, $numberOfPages) ); } } - + if ($page < $numberOfPages) { $pages[] = array( 'title' => 'Suivant', @@ -178,7 +178,3 @@ function getProjectsPager($page, $numberOfPages) return $pages; } - - - - From 2b91fb80acd68f501c8f0d08118533cfd971dee9 Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Thu, 11 Feb 2016 16:19:24 +0100 Subject: [PATCH 03/10] ajout commentaire --- README.md | 4 +-- lib/project.php | 37 ++++++++++++++++++++-- project.php | 84 +++++++++++++++++++++++++++++++++++++++++++------ 3 files changed, 111 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 6253731..cafa498 100644 --- a/README.md +++ b/README.md @@ -58,14 +58,14 @@ Petit plus Les étudiants qui me proposeront une correction via des `pull-request` auront 1 point supplémentaire sur la note finale. Les intéressés devront -créer un compte sur [Gitlab](https://gitlab.deblan.org). Je les ajouterai +créer un compte sur [Gitlab](https://gitnet.fr). Je les ajouterai au dépôt et vous me transmettrez votre travail dans une branche portant votre nom : `nom-prenom`. #### Installation du projet ``` -$ git clone git@gitlab.deblan.org:deblan/lpwd-php-portfolio.git +$ git clone git@gitnet.fr:deblan/lpwd-php-portfolio.git $ git branch nom-prenom # à modifier $ git checkout nom-prenom $ ... modifications ... diff --git a/lib/project.php b/lib/project.php index b6cac57..caaeb3f 100644 --- a/lib/project.php +++ b/lib/project.php @@ -78,12 +78,29 @@ function getProjectNumberOfPages($maxPerPage) /** * Returne les commentaires d'un projet * - * @param int $id L'id du projet + * @param int $projectId L'id du projet * @return array Les commentaires du projet */ -function getCommentsByProject($id) +function getCommentsByProject($projectId) { - // À réaliser + $pdo = getDatabaseConnection(); + + $query = $pdo->prepare('select * from comment where project_id=:project_id'); + + $query->bindParam(':project_id', $projectId, PDO::PARAM_INT); + + $query->execute(); + + $comments = $query->fetchAll(); + + foreach ($comments as $index => $comment) { + $comment['avatar'] = getGravatar($comment['email']); + $comment['date'] = new DateTime($comment['date']); + + $comments[$index] = $comment; + } + + return $comments; } /** @@ -178,3 +195,17 @@ function getProjectsPager($page, $numberOfPages) return $pages; } + +/** + * Retourne une url gravatar en fonction d'un email + * + * @param string $email + * @param int $size + * @return string + */ +function getGravatar($email, $size = 50) +{ + $hash = md5(strtolower(trim($email))); + + return 'http://www.gravatar.com/avatar/'.$hash.'?r=g&s='.$size; +} diff --git a/project.php b/project.php index fdf96be..1e7d0d2 100644 --- a/project.php +++ b/project.php @@ -17,14 +17,40 @@ if (false === $project) { die; } -// createComment( -// 'Simon', -// 'simon@deblan.fr', -// 'https://www.deblan.io/', -// 'Mon second super commentaire !', -// new DateTime('now'), -// $id -// ); +if (isset($_POST['name'], $_POST['email'], $_POST['website'], $_POST['content'])) { + $name = trim($_POST['name']); + $email = trim($_POST['email']); + $website = trim($_POST['website']); + $content = trim($_POST['content']); + + $valid = true; + + foreach ([$name, $email, $content] as $field) { + if (empty($field)) { + $valid = false; + } + } + + if ($valid) { + if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { + $valid = false; + } + } + + if ($valid) { + createComment( + $name, + $email, + $website, + $content, + new DateTime('now'), + $id + ); + + header('Location: project.php?id='.$id); + die; + } +} $comments = getCommentsByProject($id); @@ -63,7 +89,47 @@ $comments = getCommentsByProject($id); -

Commentaires

+
+

Commentaires

+ +
+
+

+ + +

+

+ + +

+

+ + +

+

+ +

+ +

+ +

+
+
+ + +
+

+ + , + posté le format('d/m/Y à H:i') ?> +

+ +

+ +

+
+ +
From de10cce572256fd7fa7fe074c0a8e451bee966c2 Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Thu, 11 Feb 2016 16:32:41 +0100 Subject: [PATCH 05/10] readme --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index cafa498..392683a 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,6 @@ Flux ---- Réalisez un flux RSS présentant les 10 derniers projets mis en ligne. -Vous réalisez également un flux Atom. Vous devrez concevoir et réaliser des fonctions php. From 2fdf0be3245e89f1aee63cf821cfc186a9b2c36e Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Thu, 11 Feb 2016 17:08:55 +0100 Subject: [PATCH 06/10] =?UTF-8?q?order=20by=20dans=20la=20r=C3=A9cup=C3=A9?= =?UTF-8?q?ration=20des=20projets?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/project.php | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/lib/project.php b/lib/project.php index caaeb3f..cd5ba00 100644 --- a/lib/project.php +++ b/lib/project.php @@ -7,7 +7,7 @@ * @param int $limit Nombre de projets par page * @return array Les projets */ -function getProjects($page = 1, $limit = 5) +function getProjects($page = 1, $limit = 5, $orderBy = 'date', $orderBySens = 'ASC') { if (!is_integer($page)) { throw new InvalidArgumentException('The argument "page" must be an integer.'); @@ -21,7 +21,17 @@ function getProjects($page = 1, $limit = 5) $pdo = getDatabaseConnection(); - $query = $pdo->prepare('select id, title, illustration, description, date from project limit :from, :limit'); + $query = $pdo->prepare( + ' + select + id, title, illustration, description, date + from + project + order by + '.$orderBy.' '.$orderBySens.' + limit + :from, :limit' + ); $query->bindParam(':from', $from, PDO::PARAM_INT); $query->bindParam(':limit', $limit, PDO::PARAM_INT); From a67b8f547287e89f30d0f187cfc16bd6783307b3 Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Sat, 13 Feb 2016 09:03:21 +0100 Subject: [PATCH 07/10] readme --- README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/README.md b/README.md index 392683a..8c35578 100644 --- a/README.md +++ b/README.md @@ -52,6 +52,16 @@ Réalisez un flux RSS présentant les 10 derniers projets mis en ligne. Vous devrez concevoir et réaliser des fonctions php. +Réécriture d'URL +---------------- + +Documentez-vous et réaliser une réécriture des URL afin de les rendre plus sexy. + +Je souhaites accéder aux projets via : http://localhost/projet/`{id}`/`{slug}` +Le slug est une chaine de caractère contenant le nom du projet sans les caractères spéciaux. Vous devez donc créer une fonction pour le générer. + +Exemple : le slug de `Je suis une licorne, c'est classe quand même, non ?` est `je-suis-une-licorne-c-est-classe-quand-meme-non`. Si j'avais un projet avec ce titre et si son *id* était 42, alors l'adresse du projet serait : http://localhost/projet/42/je-suis-une-licorne-c-est-classe-quand-meme-non + Petit plus ---------- From 31caa9978c594075218dded3a5d5e2acf37780ad Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Sat, 13 Feb 2016 09:04:37 +0100 Subject: [PATCH 08/10] readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8c35578..ea50613 100644 --- a/README.md +++ b/README.md @@ -55,7 +55,7 @@ Vous devrez concevoir et réaliser des fonctions php. Réécriture d'URL ---------------- -Documentez-vous et réaliser une réécriture des URL afin de les rendre plus sexy. +Documentez-vous et réalisez une réécriture des URL (`url rewriting`) afin de les rendre plus sexy. Je souhaites accéder aux projets via : http://localhost/projet/`{id}`/`{slug}` Le slug est une chaine de caractère contenant le nom du projet sans les caractères spéciaux. Vous devez donc créer une fonction pour le générer. From d915a552f1d898aa9090ef59a70669031f848082 Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Wed, 9 Mar 2016 21:59:52 +0100 Subject: [PATCH 09/10] README --- README.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/README.md b/README.md index ea50613..da5313b 100644 --- a/README.md +++ b/README.md @@ -62,6 +62,22 @@ Le slug est une chaine de caractère contenant le nom du projet sans les caract Exemple : le slug de `Je suis une licorne, c'est classe quand même, non ?` est `je-suis-une-licorne-c-est-classe-quand-meme-non`. Si j'avais un projet avec ce titre et si son *id* était 42, alors l'adresse du projet serait : http://localhost/projet/42/je-suis-une-licorne-c-est-classe-quand-meme-non +Administration +-------------- + +Pour le moment, la rédaction des articles est réalisée via phpmyadmin. Par ailleurs, il n'y a aucun modération des commentaires. +Vous devez donc développer un backoffice (BO) pour administrer les contenus du portfolio. + +L'accès au BO est reservé aux administrateurs. Prévoyez ainsi une authentification avec la méthode que vous préférez parmis : + +* Base de données + formulaire __(recommandé)__ - @see [sessions] [sessions] +* Identifiants en durs dans le code + formulaire (il manque pas grand chose pour utiliser une bdd ;)) - @see [sessions] [sessions] +* Basic ou Digest HTTP authentication (pour les flemmards !) + + + + + Petit plus ---------- @@ -82,3 +98,5 @@ $ git commit add $ git commit -m "Explications des modifications" $ git push -u origin nom-prenom ``` + +[sessions]: http://php.net/manual/fr/function.session-start.php From 2b78824ba4ebbced38a9809a2eff80fdd0586c69 Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Wed, 9 Mar 2016 22:01:44 +0100 Subject: [PATCH 10/10] README --- README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index da5313b..f9400e9 100644 --- a/README.md +++ b/README.md @@ -74,9 +74,8 @@ L'accès au BO est reservé aux administrateurs. Prévoyez ainsi une authentific * Identifiants en durs dans le code + formulaire (il manque pas grand chose pour utiliser une bdd ;)) - @see [sessions] [sessions] * Basic ou Digest HTTP authentication (pour les flemmards !) - - - +Les commentaires doivent pouvoir être mis hors-ligne voire supprimés. +Les articles doivent pouvoir être ajoutés, modifiés et supprimés depuis l'interface. Petit plus ----------