Mercurial > defr > DualBlog
view comment.php @ 77:a8c013fa4416
Ajout d'un outil permettant d'envoyer par mail les commentaires moderes.
Typiquement utilise dans un cron-job pour avoir un envoi quotidien des commentaires
qui sont tombes dans la file de moderation pendant les dernieres 24h.
author | defr@hedwige.defr.net |
---|---|
date | Sun, 13 Jul 2008 13:26:42 +0200 |
parents | e43b756548b4 |
children | 7f0347d4c75e |
line wrap: on
line source
<?php require_once("classes.php"); $sk = Factory::getSkeleton(); $id = $_GET['id']; $Data = Factory::getDB(); $Req = new Requete; // Enregistrement éventuel d'un commentaire dans la base de données $Auteur=$Req->get('Auteur'); $Adresse=$Req->get('Adresse'); $AdresseMail = $Req->get('AdresseMail'); $Comment=$Req->get('Comment'); $DateComment=gmdate("Y-m-d H:i:s", time() + 3600*2); // Si on essaie d'ajouter un commentaire et que la graine n'est pas bonne if(!empty($Comment) && $_SESSION['commentSeed'] != $Req->get('seed', null, 't')) die("L'ajout de commentaire doit se faire à partir du formulaire de ce blog"); if(!is_null($Auteur) && $Auteur!='Votre Nom' && $Auteur != $Adresse && !empty($Comment) && strlen($Comment) > 6 && strpos($Comment, 'xanga') === false) { // Prévention d'un "cassage" par ajout d'un commentaire incorrectement formaté $ip = $_SERVER['REMOTE_ADDR']; $Auteur = str_replace(array('<', '>'), array('<', '>'), $Auteur); /* Akismet */ require_once('akismet.class.php'); $comment = array( 'author' => $Auteur, 'email' => $AdresseMail, 'website' => $Adresse, 'body' => $Comment, 'permalink' => BLOG_URL . '/posts/' . $id ); $ak = new akismet(BLOG_URL, AKISMET_API_KEY, $comment); if(!$ak->errorsExist()) $visibleBool = !$ak->isSpam(); else $visibleBool = true; // Suppression d'un gros lourd $visibleBool &= (ereg('^ma[0-9]+zda$', $Auteur) === false); $visible = $visibleBool ? 1 : 0; $doc = @DOMDocument::loadXML('<comment>' . stripslashes($Comment) . '</comment>'); // Si le post est conforme XML, on recherche des balises indésirables if($doc) { $bannedTags = array('script', 'object', 'iframe'); foreach($bannedTags as $tagName) { $nl = $doc->getElementsByTagName($tagName); if($nl->length > 0) { $Comment = htmlspecialchars($Comment); break; } } } // Sinon le post n'est pas conforme XML, on supprime toute balise else $Comment = htmlspecialchars($Comment); $Data->debugQuery(" INSERT INTO Commentaires(MessId, Auteur, Adresse, AdresseMail, Comment, DateComment, ip, Visible) VALUES({$id}, '{$Auteur}', '{$Adresse}', '{$AdresseMail}', '{$Comment}', '{$DateComment}', '{$ip}', $visible) "); $Data->Query("UPDATE Mess SET NbCommentaires=NbCommentaires+1 WHERE num_mess={$id}"); if($visibleBool) mail(ADMIN_MAIL, 'Nouveau commentaire de ' . $Auteur, $Auteur . " vient de mettre en ligne le commentaire suivant: \n" . wordwrap($Comment, 70)); } // Ajout du post au squelette $Data->Query("SELECT * FROM Mess WHERE num_mess = {$id}"); $row = $Data->GetRow(); $post = new Post($row); $sk->addBlogPost($post->format()); $sk->checkUpdateTime(strtotime($row['DatePost'])); // On définit le titre $sk->setTitle($row['Titre'] . ' - Dual Blog'); // Récupération des commentaires $Data->Query("SELECT * FROM Commentaires Where MessId={$id} AND Visible=1 ORDER BY num_comm"); $defaultGravatar = urlencode(BLOG_DEFAULT_GRAVATAR); while(0 !== ($row = $Data->GetRow())) { $commentTpl = new Template(Skeleton::getTemplateFile('comment')); $dateFormatee = strftime(" à %Hh%M, le %A %d %B %Y", strtotime($row['DateComment'])); $dateFormateeISO = date('c', strtotime($row['DateComment'])); $AdresseMail = $row['AdresseMail']; $grav_id = md5($AdresseMail); $grav_url = 'http://www.gravatar.com/avatar.php?gravatar_id=' . $grav_id . '&size=50&default=' . $defaultGravatar; $Comment = nl2br($row['Comment']); $Comment = str_replace(" & ", " & ", $Comment); $commentFrag = $commentTpl->getDocumentFragment(); $commentFrag->appendXML($Comment); $params = array( '#gravatar@src' => $grav_url, '#auteur@href' => $post->getURL() . '#c' . $row['num_comm'], '#auteur@name' => 'c' . $row['num_comm'], '#auteur' => $row['Auteur'], 'commentDate' => $dateFormatee, 'commentDateISO' => $dateFormateeISO, 'commentNumber' => $row['num_comm'], 'comment' => $commentFrag, ); if(stristr($row['Adresse'], 'http://')) { $params['#auteur@href'] = $row['Adresse']; } $commentTpl->setParams(array_merge($post->getTplParams(), $params)); $sk->addBlogPost($commentTpl); $sk->checkUpdateTime(strtotime($row['DateComment'])); } // Génération de la graine (cette dernière permet de s'assurer // que l'essai d'ajout de commentaire provient bien de ce // formulaire, et en conséquence devrait permettre de réduire // le spam. $seed = md5(time() . 'DualBlog'); $_SESSION['commentSeed'] = $seed; // Ajout du formulaire d'enregistrement de commentaires $commentForm = new Template('commentForm.xml'); $commentForm->setParams(array('#Seed@value' => $seed)); $sk->setParams(array('commentForm' => $commentForm)); echo $sk; ?>