annotate comment.php @ 85:efb93800fe10

Akismet: Légère mise à jour
author Franck Deroche <franck@defr.org>
date Fri, 23 Nov 2018 00:46:07 +0100
parents 0b635e3ae1a1
children e37ef9a81737
rev   line source
webmaster@0 1 <?php
webmaster@16 2 require_once("classes.php");
webmaster@16 3 $sk = Factory::getSkeleton();
webmaster@0 4 $id = $_GET['id'];
webmaster@16 5 $Data = Factory::getDB();
webmaster@0 6 $Req = new Requete;
webmaster@16 7
webmaster@16 8
webmaster@16 9 // Enregistrement éventuel d'un commentaire dans la base de données
webmaster@0 10 $Auteur=$Req->get('Auteur');
webmaster@0 11 $Adresse=$Req->get('Adresse');
webmaster@0 12 $AdresseMail = $Req->get('AdresseMail');
webmaster@0 13 $Comment=$Req->get('Comment');
webmaster@0 14 $DateComment=gmdate("Y-m-d H:i:s", time() + 3600*2);
webmaster@64 15
webmaster@24 16 // Si on essaie d'ajouter un commentaire et que la graine n'est pas bonne
webmaster@48 17 if(!empty($Comment) && $_SESSION['commentSeed'] != $Req->get('seed', null, 't'))
webmaster@24 18 die("L'ajout de commentaire doit se faire à partir du formulaire de ce blog");
webmaster@64 19
franck@84 20 if(!is_null($Auteur) && $Auteur!='Votre Nom' && $Auteur != $Adresse && !empty($Comment) && strlen($Comment) > 6) {
webmaster@0 21 // Prévention d'un "cassage" par ajout d'un commentaire incorrectement formaté
webmaster@0 22 $ip = $_SERVER['REMOTE_ADDR'];
webmaster@0 23 $Auteur = str_replace(array('<', '>'), array('&lt;', '&gt;'), $Auteur);
webmaster@64 24
webmaster@64 25 /* Akismet */
webmaster@64 26 require_once('akismet.class.php');
webmaster@64 27 $comment = array(
webmaster@64 28 'author' => $Auteur,
webmaster@64 29 'email' => $AdresseMail,
webmaster@64 30 'website' => $Adresse,
webmaster@64 31 'body' => $Comment,
webmaster@73 32 'permalink' => BLOG_URL . '/posts/' . $id
webmaster@64 33 );
webmaster@73 34 $ak = new akismet(BLOG_URL, AKISMET_API_KEY, $comment);
webmaster@64 35 if(!$ak->errorsExist())
webmaster@64 36 $visibleBool = !$ak->isSpam();
webmaster@72 37 else
root@79 38 $visibleBool = false;
webmaster@64 39
webmaster@64 40 $visible = $visibleBool ? 1 : 0;
webmaster@64 41
webmaster@71 42 $doc = @DOMDocument::loadXML('<comment>' . stripslashes($Comment) . '</comment>');
webmaster@71 43 // Si le post est conforme XML, on recherche des balises indésirables
webmaster@71 44 if($doc)
webmaster@71 45 {
webmaster@71 46 $bannedTags = array('script', 'object', 'iframe');
webmaster@71 47 foreach($bannedTags as $tagName)
webmaster@71 48 {
webmaster@71 49 $nl = $doc->getElementsByTagName($tagName);
webmaster@71 50 if($nl->length > 0)
webmaster@71 51 {
webmaster@71 52 $Comment = htmlspecialchars($Comment);
webmaster@71 53 break;
webmaster@71 54 }
webmaster@71 55 }
webmaster@71 56 }
webmaster@71 57 // Sinon le post n'est pas conforme XML, on supprime toute balise
webmaster@71 58 else
webmaster@71 59 $Comment = htmlspecialchars($Comment);
webmaster@71 60
franck@84 61 $Data->Query("
webmaster@64 62 INSERT INTO Commentaires(MessId, Auteur, Adresse, AdresseMail, Comment, DateComment, ip, Visible)
webmaster@64 63 VALUES({$id}, '{$Auteur}', '{$Adresse}', '{$AdresseMail}', '{$Comment}', '{$DateComment}', '{$ip}', $visible)
webmaster@0 64 ");
webmaster@0 65 $Data->Query("UPDATE Mess SET NbCommentaires=NbCommentaires+1 WHERE num_mess={$id}");
webmaster@64 66 if($visibleBool)
webmaster@64 67 mail(ADMIN_MAIL, 'Nouveau commentaire de ' . $Auteur, $Auteur . " vient de mettre en ligne le commentaire suivant: \n" . wordwrap($Comment, 70));
webmaster@0 68 }
webmaster@0 69
webmaster@16 70 // Ajout du post au squelette
webmaster@0 71 $Data->Query("SELECT * FROM Mess WHERE num_mess = {$id}");
webmaster@0 72 $row = $Data->GetRow();
webmaster@16 73 $post = new Post($row);
webmaster@16 74 $sk->addBlogPost($post->format());
webmaster@36 75 $sk->checkUpdateTime(strtotime($row['DatePost']));
webmaster@16 76
webmaster@22 77 // On définit le titre
webmaster@22 78 $sk->setTitle($row['Titre'] . ' - Dual Blog');
webmaster@22 79
webmaster@16 80 // Récupération des commentaires
webmaster@1 81 $Data->Query("SELECT * FROM Commentaires Where MessId={$id} AND Visible=1 ORDER BY num_comm");
webmaster@61 82 $defaultGravatar = urlencode(BLOG_DEFAULT_GRAVATAR);
webmaster@0 83 while(0 !== ($row = $Data->GetRow())) {
webmaster@32 84 $commentTpl = new Template(Skeleton::getTemplateFile('comment'));
webmaster@57 85 $dateFormatee = strftime(" à %Hh%M, le %A %d %B %Y", strtotime($row['DateComment']));
webmaster@33 86 $dateFormateeISO = date('c', strtotime($row['DateComment']));
webmaster@16 87 $AdresseMail = $row['AdresseMail'];
webmaster@16 88 $grav_id = md5($AdresseMail);
webmaster@23 89 $grav_url = 'http://www.gravatar.com/avatar.php?gravatar_id=' . $grav_id . '&size=50&default=' . $defaultGravatar;
webmaster@16 90 $Comment = nl2br($row['Comment']);
webmaster@16 91 $Comment = str_replace(" & ", " &amp; ", $Comment);
webmaster@16 92 $commentFrag = $commentTpl->getDocumentFragment();
webmaster@16 93 $commentFrag->appendXML($Comment);
webmaster@16 94 $params = array(
webmaster@16 95 '#gravatar@src' => $grav_url,
webmaster@30 96 '#auteur@href' => $post->getURL() . '#c' . $row['num_comm'],
webmaster@16 97 '#auteur@name' => 'c' . $row['num_comm'],
webmaster@16 98 '#auteur' => $row['Auteur'],
webmaster@16 99 'commentDate' => $dateFormatee,
webmaster@33 100 'commentDateISO' => $dateFormateeISO,
webmaster@32 101 'commentNumber' => $row['num_comm'],
webmaster@16 102 'comment' => $commentFrag,
webmaster@16 103 );
webmaster@16 104 if(stristr($row['Adresse'], 'http://')) {
webmaster@16 105 $params['#auteur@href'] = $row['Adresse'];
webmaster@16 106 }
webmaster@32 107 $commentTpl->setParams(array_merge($post->getTplParams(), $params));
webmaster@16 108 $sk->addBlogPost($commentTpl);
webmaster@36 109 $sk->checkUpdateTime(strtotime($row['DateComment']));
webmaster@0 110 }
webmaster@16 111
webmaster@24 112 // Génération de la graine (cette dernière permet de s'assurer
webmaster@24 113 // que l'essai d'ajout de commentaire provient bien de ce
webmaster@24 114 // formulaire, et en conséquence devrait permettre de réduire
webmaster@24 115 // le spam.
webmaster@24 116 $seed = md5(time() . 'DualBlog');
webmaster@24 117 $_SESSION['commentSeed'] = $seed;
webmaster@24 118
webmaster@24 119 // Ajout du formulaire d'enregistrement de commentaires
webmaster@16 120 $commentForm = new Template('commentForm.xml');
webmaster@24 121 $commentForm->setParams(array('#Seed@value' => $seed));
webmaster@31 122 $sk->setParams(array('commentForm' => $commentForm));
webmaster@16 123
webmaster@16 124 echo $sk;
webmaster@0 125 ?>