| webmaster@0 | 1 <?php | 
| webmaster@16 | 2      require_once("classes.php"); | 
| webmaster@16 | 3      $sk = Factory::getSkeleton(); | 
| webmaster@16 | 4      $Data = Factory::getDB(); | 
| franck@88 | 5      $Req = Factory::getRequete(); | 
| webmaster@16 | 6 | 
| franck@88 | 7      $id = $Req->get('id'); | 
| 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('<', '>'), $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(" & ", " & ", $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 ?> |