comment.php
author Franck Deroche <webmaster@defr.org>
Tue Mar 11 16:33:07 2008 +0100 (8 months ago)
changeset 65 434751e80c88
parent 6125c6e59f019e
child 71464f4b94ee27
permissions -rw-r--r--
Utilisation de la classe Requete dans tb.php

Cela permet de gérer automatiquement l'ajout des quotes si on a pas de
magic_quotes notamment, empechant les injections SQL :-)
     1 <?php
     2      require_once("classes.php");
     3      $sk = Factory::getSkeleton();
     4      $id = $_GET['id'];
     5      $Data = Factory::getDB();
     6      $Req = new Requete;
     7 
     8 
     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);
    15      
    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");
    19      
    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);
    24 
    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' => 'http://defr.org/blog/posts/' . $id
    33 	);
    34 	$ak = new akismet('http://defr.org/blog', AKISMET_API_KEY, $comment);
    35 	if(!$ak->errorsExist())
    36 	  $visibleBool = !$ak->isSpam();
    37 	
    38 	// Suppression d'un gros lourd
    39 	$visibleBool &= (ereg('^ma[0-9]+zda$', $Auteur) === false);
    40         $visible = $visibleBool ? 1 : 0;
    41 
    42 	if(DOMDocument::loadXML('<comment>' . $Comment . '</comment>')) {
    43 	$Data->debugQuery("
    44 		INSERT INTO Commentaires(MessId, Auteur, Adresse, AdresseMail, Comment, DateComment, ip, Visible)
    45 		VALUES({$id}, '{$Auteur}', '{$Adresse}', '{$AdresseMail}', '{$Comment}', '{$DateComment}', '{$ip}', $visible)
    46 	");
    47 	$Data->Query("UPDATE Mess SET NbCommentaires=NbCommentaires+1 WHERE num_mess={$id}");
    48 	if($visibleBool)
    49 		mail(ADMIN_MAIL, 'Nouveau commentaire de ' . $Auteur, $Auteur . " vient de mettre en ligne le commentaire suivant:  \n" . wordwrap($Comment, 70));
    50 	}
    51 	else {
    52 		$infos = 'Votre commentaire doit etre fait de XML valide pour apparaitre.';
    53 	}
    54       }
    55 
    56      // Ajout du post au squelette
    57      $Data->Query("SELECT * FROM Mess WHERE num_mess = {$id}");
    58      $row = $Data->GetRow();
    59      $post = new Post($row);
    60      $sk->addBlogPost($post->format());
    61      $sk->checkUpdateTime(strtotime($row['DatePost']));
    62 
    63      // On définit le titre
    64      $sk->setTitle($row['Titre'] . ' - Dual Blog'); 
    65 
    66      // Récupération des commentaires
    67       $Data->Query("SELECT * FROM Commentaires Where MessId={$id} AND Visible=1 ORDER BY num_comm");
    68       $defaultGravatar = urlencode(BLOG_DEFAULT_GRAVATAR);
    69       while(0 !== ($row = $Data->GetRow())) {
    70 	    $commentTpl = new Template(Skeleton::getTemplateFile('comment'));
    71         $dateFormatee = strftime(" à %Hh%M, le %A %d %B %Y", strtotime($row['DateComment']));
    72         $dateFormateeISO = date('c', strtotime($row['DateComment']));
    73         $AdresseMail = $row['AdresseMail'];
    74         $grav_id = md5($AdresseMail);
    75         $grav_url = 'http://www.gravatar.com/avatar.php?gravatar_id=' . $grav_id . '&size=50&default=' . $defaultGravatar;
    76 	    $Comment = nl2br($row['Comment']);
    77 	    $Comment = str_replace(" & ", " &amp; ", $Comment);
    78 	    $commentFrag = $commentTpl->getDocumentFragment();
    79 	    $commentFrag->appendXML($Comment);
    80 	    $params = array(
    81 	 	  '#gravatar@src' => $grav_url,
    82 		  '#auteur@href' => $post->getURL() . '#c' . $row['num_comm'],
    83 		  '#auteur@name' => 'c' . $row['num_comm'],
    84 		  '#auteur' => $row['Auteur'],
    85 		  'commentDate' => $dateFormatee,
    86 		  'commentDateISO' => $dateFormateeISO,
    87 		  'commentNumber' => $row['num_comm'],
    88 		  'comment' => $commentFrag,
    89 	    );
    90         if(stristr($row['Adresse'], 'http://')) {
    91             $params['#auteur@href'] = $row['Adresse'];
    92         }
    93         $commentTpl->setParams(array_merge($post->getTplParams(), $params));
    94         $sk->addBlogPost($commentTpl);
    95         $sk->checkUpdateTime(strtotime($row['DateComment']));
    96       }
    97 
    98       // Génération de la graine (cette dernière permet de s'assurer
    99       // que l'essai d'ajout de commentaire provient bien de ce
   100       // formulaire, et en conséquence devrait permettre de réduire
   101       // le spam.
   102       $seed = md5(time() . 'DualBlog');
   103       $_SESSION['commentSeed'] = $seed;
   104 
   105       // Ajout du formulaire d'enregistrement de commentaires
   106       $commentForm = new Template('commentForm.xml');
   107       $commentForm->setParams(array('#Seed@value' => $seed));
   108       $sk->setParams(array('commentForm' => $commentForm));
   109 
   110       echo $sk;
   111 ?>