defr/DualBlog

view comment.php @ 78:80bb1ca0114e

Utilisation du chemin complet vers classes.php

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