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 |
webmaster@64
|
20 if(!is_null($Auteur) && $Auteur!='Votre Nom' && $Auteur != $Adresse && !empty($Comment) && strlen($Comment) > 6 && strpos($Comment, 'xanga') === false) { |
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('<', '>'), $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 // Suppression d'un gros lourd |
webmaster@64
|
41 $visibleBool &= (ereg('^ma[0-9]+zda$', $Auteur) === false); |
webmaster@64
|
42 $visible = $visibleBool ? 1 : 0; |
webmaster@64
|
43 |
webmaster@71
|
44 $doc = @DOMDocument::loadXML('<comment>' . stripslashes($Comment) . '</comment>'); |
webmaster@71
|
45 // Si le post est conforme XML, on recherche des balises indésirables |
webmaster@71
|
46 if($doc) |
webmaster@71
|
47 { |
webmaster@71
|
48 $bannedTags = array('script', 'object', 'iframe'); |
webmaster@71
|
49 foreach($bannedTags as $tagName) |
webmaster@71
|
50 { |
webmaster@71
|
51 $nl = $doc->getElementsByTagName($tagName); |
webmaster@71
|
52 if($nl->length > 0) |
webmaster@71
|
53 { |
webmaster@71
|
54 $Comment = htmlspecialchars($Comment); |
webmaster@71
|
55 break; |
webmaster@71
|
56 } |
webmaster@71
|
57 } |
webmaster@71
|
58 } |
webmaster@71
|
59 // Sinon le post n'est pas conforme XML, on supprime toute balise |
webmaster@71
|
60 else |
webmaster@71
|
61 $Comment = htmlspecialchars($Comment); |
webmaster@71
|
62 |
webmaster@0
|
63 $Data->debugQuery(" |
webmaster@64
|
64 INSERT INTO Commentaires(MessId, Auteur, Adresse, AdresseMail, Comment, DateComment, ip, Visible) |
webmaster@64
|
65 VALUES({$id}, '{$Auteur}', '{$Adresse}', '{$AdresseMail}', '{$Comment}', '{$DateComment}', '{$ip}', $visible) |
webmaster@0
|
66 "); |
webmaster@0
|
67 $Data->Query("UPDATE Mess SET NbCommentaires=NbCommentaires+1 WHERE num_mess={$id}"); |
webmaster@64
|
68 if($visibleBool) |
webmaster@64
|
69 mail(ADMIN_MAIL, 'Nouveau commentaire de ' . $Auteur, $Auteur . " vient de mettre en ligne le commentaire suivant: \n" . wordwrap($Comment, 70)); |
webmaster@0
|
70 } |
webmaster@0
|
71 |
webmaster@16
|
72 // Ajout du post au squelette |
webmaster@0
|
73 $Data->Query("SELECT * FROM Mess WHERE num_mess = {$id}"); |
webmaster@0
|
74 $row = $Data->GetRow(); |
webmaster@16
|
75 $post = new Post($row); |
webmaster@16
|
76 $sk->addBlogPost($post->format()); |
webmaster@36
|
77 $sk->checkUpdateTime(strtotime($row['DatePost'])); |
webmaster@16
|
78 |
webmaster@22
|
79 // On définit le titre |
webmaster@22
|
80 $sk->setTitle($row['Titre'] . ' - Dual Blog'); |
webmaster@22
|
81 |
webmaster@16
|
82 // Récupération des commentaires |
webmaster@1
|
83 $Data->Query("SELECT * FROM Commentaires Where MessId={$id} AND Visible=1 ORDER BY num_comm"); |
webmaster@61
|
84 $defaultGravatar = urlencode(BLOG_DEFAULT_GRAVATAR); |
webmaster@0
|
85 while(0 !== ($row = $Data->GetRow())) { |
webmaster@32
|
86 $commentTpl = new Template(Skeleton::getTemplateFile('comment')); |
webmaster@57
|
87 $dateFormatee = strftime(" à %Hh%M, le %A %d %B %Y", strtotime($row['DateComment'])); |
webmaster@33
|
88 $dateFormateeISO = date('c', strtotime($row['DateComment'])); |
webmaster@16
|
89 $AdresseMail = $row['AdresseMail']; |
webmaster@16
|
90 $grav_id = md5($AdresseMail); |
webmaster@23
|
91 $grav_url = 'http://www.gravatar.com/avatar.php?gravatar_id=' . $grav_id . '&size=50&default=' . $defaultGravatar; |
webmaster@16
|
92 $Comment = nl2br($row['Comment']); |
webmaster@16
|
93 $Comment = str_replace(" & ", " & ", $Comment); |
webmaster@16
|
94 $commentFrag = $commentTpl->getDocumentFragment(); |
webmaster@16
|
95 $commentFrag->appendXML($Comment); |
webmaster@16
|
96 $params = array( |
webmaster@16
|
97 '#gravatar@src' => $grav_url, |
webmaster@30
|
98 '#auteur@href' => $post->getURL() . '#c' . $row['num_comm'], |
webmaster@16
|
99 '#auteur@name' => 'c' . $row['num_comm'], |
webmaster@16
|
100 '#auteur' => $row['Auteur'], |
webmaster@16
|
101 'commentDate' => $dateFormatee, |
webmaster@33
|
102 'commentDateISO' => $dateFormateeISO, |
webmaster@32
|
103 'commentNumber' => $row['num_comm'], |
webmaster@16
|
104 'comment' => $commentFrag, |
webmaster@16
|
105 ); |
webmaster@16
|
106 if(stristr($row['Adresse'], 'http://')) { |
webmaster@16
|
107 $params['#auteur@href'] = $row['Adresse']; |
webmaster@16
|
108 } |
webmaster@32
|
109 $commentTpl->setParams(array_merge($post->getTplParams(), $params)); |
webmaster@16
|
110 $sk->addBlogPost($commentTpl); |
webmaster@36
|
111 $sk->checkUpdateTime(strtotime($row['DateComment'])); |
webmaster@0
|
112 } |
webmaster@16
|
113 |
webmaster@24
|
114 // Génération de la graine (cette dernière permet de s'assurer |
webmaster@24
|
115 // que l'essai d'ajout de commentaire provient bien de ce |
webmaster@24
|
116 // formulaire, et en conséquence devrait permettre de réduire |
webmaster@24
|
117 // le spam. |
webmaster@24
|
118 $seed = md5(time() . 'DualBlog'); |
webmaster@24
|
119 $_SESSION['commentSeed'] = $seed; |
webmaster@24
|
120 |
webmaster@24
|
121 // Ajout du formulaire d'enregistrement de commentaires |
webmaster@16
|
122 $commentForm = new Template('commentForm.xml'); |
webmaster@24
|
123 $commentForm->setParams(array('#Seed@value' => $seed)); |
webmaster@31
|
124 $sk->setParams(array('commentForm' => $commentForm)); |
webmaster@16
|
125 |
webmaster@16
|
126 echo $sk; |
webmaster@0
|
127 ?> |