annotate admin.php @ 64:d4f26e9767bf

Filtrage via Akismet du spam. Suite aux nombreuses attaques de spammers sur le blog, j'ai du chercher une solution efficace permettant d'y faire face. La solution la plus efficace que j'ai pour le moment, c'est Akismet, qui semble ne pas avoir trop de faux positifs (je n'en ai pas encore eu un seul). Il est necessaire de creer un compte sur WordPress.com pour obtenir une clef permettant d'utiliser le service, c'est totalement gratuit.
author Franck Deroche <webmaster@defr.org>
date Tue, 11 Mar 2008 08:16:11 -0700
parents 25c6e59f019e
children 251a4c4e05d1
rev   line source
webmaster@0 1 <?php
webmaster@0 2 if(!is_null($_SERVER['HTTP_ACCEPT']) && stristr($_SERVER['HTTP_ACCEPT'], 'application/xhtml+xml'))
webmaster@0 3 header('Content-Type: application/xhtml+xml; charset=UTF-8');
webmaster@0 4 else
webmaster@0 5 header('Content-Type: text/html; charset=UTF-8');
webmaster@0 6
webmaster@0 7 include("classes.php");
webmaster@0 8 $Data=new DataAccess;
webmaster@0 9 $Req = new Requete;
webmaster@0 10
webmaster@0 11 $mode = $Req->get('mode');
webmaster@0 12 switch($mode) {
webmaster@0 13 case 'nvBrouillon':
webmaster@0 14 $nvTitre = $Req->get('Titre', 'POST');
webmaster@0 15 $nvContenu = $Req->get('Contenu', 'POST');
webmaster@0 16 $Data->debugQuery("INSERT INTO Brouillons SET Titre='{$nvTitre}', Contenu='{$nvContenu}'");
webmaster@0 17 break;
webmaster@0 18
webmaster@0 19 case 'nvTache':
webmaster@0 20 $nvThing = $Req->get('Tache');
webmaster@0 21 $Data->Query("INSERT INTO ToDo SET Thing='{$nvThing}'");
webmaster@0 22 break;
webmaster@0 23
webmaster@0 24 case 'nvPost':
webmaster@0 25 $id = $Req->get('id', 'POST');
webmaster@0 26 $versionAc = $Req->get('versionAc', 'POST');
webmaster@0 27 $newVersion = $Req->get('newVersion', 'POST');
webmaster@0 28 $mood = $Req->get('mood', 'POST');
webmaster@0 29 $tbAddress = $Req->get('tb', 'POST');
webmaster@0 30 if($versionAc == 'Version 10' && $newVersion != 'Nouvelle version ?' && !empty($newVersion))
webmaster@0 31 $version = $newVersion;
webmaster@0 32 else
webmaster@0 33 $version = $versionAc;
webmaster@0 34 $Data->Query("SELECT * FROM Brouillons WHERE id_brouillon={$id}");
webmaster@0 35 $row = $Data->GetRow();
webmaster@0 36 $row['Titre'] = addslashes($row['Titre']);
webmaster@0 37 $row['Contenu'] = addslashes($row['Contenu']);
webmaster@0 38 $datePost = gmdate("Y-m-d H:i:s", time() + 3600);
webmaster@0 39 $Data->Query("
webmaster@0 40 INSERT INTO Mess(Titre, DatePost, num_version, Message, Emot)
webmaster@0 41 VALUES('{$row['Titre']}', '{$datePost}', '{$version}', '{$row['Contenu']}', '{$mood}')");
webmaster@0 42 $Data->Query("DELETE FROM Brouillons WHERE id_brouillon={$id}");
webmaster@0 43 $Data->Query("SELECT num_mess, Message FROM Mess ORDER BY num_mess DESC LIMIT 0, 1");
webmaster@0 44 $id_row = $Data->GetRow();
webmaster@0 45 // Gestion des tags
webmaster@0 46 $arTags = TextUtils::SplitTags($Req->get('Tags'));
webmaster@0 47 foreach($arTags as $tagAj)
webmaster@0 48 {
webmaster@0 49 $n = $Data->Query("SELECT idTag FROM Tags WHERE Tag='{$tagAj}'");
webmaster@0 50 if($n == 0)
webmaster@0 51 {
webmaster@0 52 // Si le tag n'existe pas, on le crée
webmaster@0 53 $Data->Query("INSERT INTO Tags SET Tag='{$tagAj}'");
webmaster@0 54 $Data->Query("SELECT idTag FROM Tags WHERE Tag='{$tagAj}'");
webmaster@0 55 }
webmaster@0 56 $row_tag = $Data->GetRow();
webmaster@0 57 $Data->Query
webmaster@0 58 ("
webmaster@0 59 INSERT INTO Lien_Tags_Posts
webmaster@0 60 SET idMess={$id_row['num_mess']}, idTag={$row_tag['idTag']}
webmaster@0 61 ");
webmaster@0 62 }
webmaster@0 63 // Génération de trackbacks
webmaster@0 64 if(!empty($tbAddress) && substr($tbAddress, 0, 4)=='http') {
webmaster@0 65 $ar_tbAddress = parse_url($tbAddress);
webmaster@0 66 if(!array_key_exists('port', $ar_tbAddress)) $ar_tbAddress['port'] = 80;
webmaster@0 67 if(!array_key_exists('path', $ar_tbAddress)) $ar_tbAddress['path'] = '/';
webmaster@0 68 if(array_key_exists('query', $ar_tbAddress)) $ar_tbAddress['query'] = '?' . $ar_tbAddress['query'];
webmaster@0 69 $fp = fsockopen($ar_tbAddress['host'], $ar_tbAddress['port'], $errno, $errstr, 15);
webmaster@0 70 if($fp) {
webmaster@0 71 $genToSend = "POST {$ar_tbAddress['path']}{$ar_tbAddress['query']} HTTP/1.0\r\n";
webmaster@0 72 $genToSend .= "Host: {$ar_tbAddress['host']}\r\n";
webmaster@0 73 $genToSend .= "Content-Type: application/x-www-form-urlencoded \n";
webmaster@0 74
webmaster@0 75 // Essai de récuperation de l'encodage...Envoie en iso si pas d'indication d'UTF...
webmaster@0 76 $argToSend = "__info=1";
webmaster@0 77 $toSend = $genToSend . "Content-Length: " . strlen($argToSend) . "\n\n";
webmaster@0 78 $toSend .= $argToSend;
webmaster@0 79 echo("<pre>$toSend</pre>");
webmaster@0 80 fwrite($fp, $toSend);
webmaster@0 81 while(!feof($fp))
webmaster@0 82 $result .= fgets($fp, 128);
webmaster@0 83 fclose($fp);
webmaster@0 84 if(!preg_match('/<encoding>(UTF-8|utf-8)<\/encoding>/msU',$result)) {
webmaster@0 85 $row['Titre'] = utf8_decode($row['Titre']);
webmaster@0 86 $row['Message'] = utf8_decode($row['Message']);
webmaster@0 87 }
webmaster@0 88
webmaster@0 89 $fp = fsockopen($ar_tbAddress['host'], 80, $errno, $errstr, 15);
webmaster@0 90 $argToSend = "title=" . htmlentities(urlencode($row['Titre'])) . "&blog_name=Dual+Blog";
webmaster@61 91 $argToSend .= "&url=" . BLOG_URL . "/posts/{$row['num_mess']}&excerpt="
webmaster@0 92 . htmlentities(urlencode(substr(strip_tags($row['Message']), 0, 255) . "..."));
webmaster@0 93
webmaster@0 94 $toSend = $genToSend . "Content-Length: " . strlen($argToSend) . "\n\n";
webmaster@0 95 $toSend .= $argToSend;
webmaster@0 96 echo("<pre><![CDATA[$toSend]]></pre>");
webmaster@0 97 echo("<![CDATA[");
webmaster@0 98 fwrite($fp, $toSend);
webmaster@0 99 while (!feof($fp)) {
webmaster@0 100 echo fgets($fp, 128);
webmaster@0 101 }
webmaster@0 102 echo("]]>");
webmaster@0 103 fclose($fp);
webmaster@0 104 }
webmaster@0 105 }
webmaster@0 106 break;
webmaster@0 107 }
webmaster@0 108 ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
webmaster@0 109
webmaster@0 110 <html xmlns='http://www.w3.org/1999/xhtml'>
webmaster@0 111 <head>
webmaster@0 112 <title>Administration : Conception &amp; Design</title>
webmaster@0 113 <link rel='StyleSheet' type='Text/CSS' href='css/admin.css' />
webmaster@0 114 <script type='text/javascript' src='admin.js'>/* Die IE, diiie */</script>
webmaster@0 115 </head>
webmaster@0 116
webmaster@0 117 <body>
webmaster@0 118 <h3>Administration de Dual Blog</h3>
webmaster@0 119 <ul id='Menu'>
webmaster@0 120 <li><div id='Brouillons'>Brouillons</div></li>
webmaster@0 121 <li><div id='Posts'>Posts publiés</div></li>
webmaster@0 122 <li><div id='Designs'>Designs</div></li>
webmaster@0 123 <li><div id='ToDo'>To-Do</div></li>
webmaster@0 124 </ul>
webmaster@0 125 <div id='GestPosts'>
webmaster@0 126 <ul>
webmaster@0 127 <?php
webmaster@0 128 $Data->Connect();
webmaster@0 129 $Data->Query("SELECT * FROM Mess ORDER BY num_version, num_mess DESC LIMIT 0, 10");
webmaster@0 130 $versionAc="";
webmaster@0 131 $i=0;
webmaster@0 132 $ar_Version = array();
webmaster@0 133 while(0!==($val=$Data->GetRow())) {
webmaster@0 134 if($val['num_version']!=$versionAc) {
webmaster@0 135 if($i!=0) echo("</ul>\n</li>");
webmaster@0 136 echo(" <li>{$val['num_version']} :\n <ul>");
webmaster@0 137 $versionAc=$val['num_version'];
webmaster@0 138 $ar_Version[] = $versionAc;
webmaster@0 139 $i++;
webmaster@0 140 }
webmaster@53 141 $Titre=TextUtils::EnsureUTF8($val['Titre']);
webmaster@0 142 echo("
webmaster@0 143 \t <li>{$Titre}<span class='Admin'><a href='#id={$val['num_mess']}'>Editer</a> -- <a href='#id={$val['num_mess']}'>Supprimer</a> -- <a href='?id={$val['num_mess']}'>Gérer les commentaires</a></span></li>");
webmaster@0 144 }
webmaster@0 145 echo("\n </ul>\n </li>\n");
webmaster@0 146 ?>
webmaster@0 147 </ul>
webmaster@0 148 </div>
webmaster@0 149
webmaster@0 150 <div id='GestDesigns'>
webmaster@0 151 <ul>
webmaster@0 152 <li class='Add'><a href='#'>Ajouter un nouveau design au weblog</a></li>
webmaster@0 153 <li>Modifier les designs déja existants</li>
webmaster@0 154 </ul>
webmaster@0 155 </div>
webmaster@0 156
webmaster@0 157 <div id='GestBrouillons'>
webmaster@0 158 <ul>
webmaster@0 159 <li class='Add'><a href='#'>Ajouter un nouveau brouillon</a>
webmaster@0 160 <form method='post' action='admin.php'>
webmaster@0 161 <div>
webmaster@0 162 <input type='hidden' name='mode' value='nvBrouillon' />
webmaster@0 163 <input type='text' name='Titre' value='Titre' />
webmaster@0 164 <textarea name='Contenu' rows='10' cols='30'></textarea>
webmaster@0 165 <input type='submit' value='Valider ce brouillon' />
webmaster@0 166 </div>
webmaster@0 167 </form>
webmaster@0 168 </li>
webmaster@0 169 <?
webmaster@0 170 $Data->Query("SELECT * FROM Brouillons ORDER BY id_brouillon DESC");
webmaster@0 171 while(0!==($val=$Data->GetRow())) {
webmaster@0 172 echo("
webmaster@0 173 <li>{$val['Titre']} <span class='Admin'><a href='#id={$val['id_brouillon']}'>Editer</a> -- <a href='#id={$val['id_brouillon']}'>Publier</a> -- <a href='?id={$val['id_brouillon']}'>Supprimer</a></span></li>");
webmaster@0 174 }
webmaster@0 175 ?>
webmaster@0 176 </ul>
webmaster@0 177 </div>
webmaster@0 178
webmaster@0 179 <div id='GestToDo'>
webmaster@0 180 <ul>
webmaster@0 181 <li class='Add'><a href='#'>Ajouter une nouvelle tâche</a>
webmaster@0 182 <form method='post' action='admin.php'>
webmaster@0 183 <div>
webmaster@0 184 <input type='hidden' name='mode' value='nvTache' />
webmaster@0 185 <input type='text' name='Tache' />
webmaster@0 186 <input type='submit' value='Ajouter cette tâche' />
webmaster@0 187 </div>
webmaster@0 188 </form></li>
webmaster@0 189 <?php
webmaster@0 190 $Data->Query("SELECT * FROM ToDo ORDER By num_thing DESC");
webmaster@0 191 while(0!==($val=$Data->GetRow())) {
webmaster@0 192 echo("
webmaster@0 193 <li>{$val['Thing']} <span class='Admin'><a href='#'>Fait</a> -- <a href='#'>Editer</a> -- <a href='#'>Supprimer</a></span></li>");
webmaster@0 194 }
webmaster@0 195 $Data->Close();
webmaster@0 196 ?>
webmaster@0 197 </ul>
webmaster@0 198 </div>
webmaster@0 199
webmaster@0 200 <form method='post' action='#' id='editPost'>
webmaster@0 201 <div>
webmaster@0 202 <input type='hidden' name='mode' value='editBrouillon' />
webmaster@0 203 <p><input type='text' name='Titre' value='Titre' /></p>
webmaster@0 204 <p><textarea name='Contenu' rows='10' cols='30'></textarea></p>
webmaster@0 205 <p><select name='mood' id='mood'>
webmaster@0 206 <?php
webmaster@0 207 $handle = opendir('mood');
webmaster@0 208 while($file = readdir($handle))
webmaster@0 209 {
webmaster@0 210 if(strlen($file) > 3 && substr($file, -3) == 'png')
webmaster@0 211 {
webmaster@0 212 $short = substr($file, 0, -4);
webmaster@0 213 echo("\t\t<option value='$short'><img src='mood/25/$file' alt='' />" . $short . "</option>\n");
webmaster@0 214 }
webmaster@0 215 }
webmaster@0 216 closedir($handle);
webmaster@0 217 ?>
webmaster@0 218 </select></p>
webmaster@0 219 <p><input type='text' name='Tags' value='Tags' /></p>
webmaster@0 220 <input type='button' name='Save' value='Sauver la modification' />
webmaster@0 221 </div>
webmaster@0 222 </form>
webmaster@0 223
webmaster@0 224 <form method='post' action='admin.php' id='whichVersion'>
webmaster@0 225 <div>
webmaster@0 226 <!--a onclick='javascript:hidePubForm()'>Hide</a-->
webmaster@0 227 <input type='hidden' name='mode' value='nvPost' />
webmaster@0 228 <input type='hidden' name='id' />
webmaster@0 229 <fieldset>
webmaster@0 230 <legend>Catégorie du post</legend>
webmaster@0 231 <label for='vAc'>Pour poster le post dans une catégorie déja existante, veuillez la choisir dans la liste ci-dessous :<br /></label>
webmaster@0 232 <select name='versionAc' id='vAc'>
webmaster@0 233 <option>Version 10</option>
webmaster@0 234 <option>DeFr.org news</option>
webmaster@0 235 </select>
webmaster@0 236 <label for='nvCat'><br />Pour poster le post dans une catégorie n'existant pas encore, veuillez
webmaster@0 237 entrer son nom : <br /></label>
webmaster@0 238 <input type='text' name='newVersion' id='nvCat' value='Nouvelle version ?' />
webmaster@0 239 </fieldset>
webmaster@0 240 <fieldset>
webmaster@0 241 <legend>Tags</legend>
webmaster@0 242 <label for='Tags'>Histoire d'organiser les posts, et de pouvoir filtrer par centres d'interet, veuillez
webmaster@0 243 préciser les <em>tags</em> à attribuer à ce post :<br /></label>
webmaster@0 244 <input type='text' name='Tags' id='Tags' />
webmaster@0 245 </fieldset>
webmaster@0 246 <fieldset>
webmaster@0 247 <legend>Mood / Emots</legend>
webmaster@0 248 <label for='mood'>Pour assurer un minimum d'attrait aux posts, et leur attribuer un aspect graphique
webmaster@0 249 sympathique, veuillez selectionner une emoticone pour le post, dans la liste suivante :<br /></label>
webmaster@0 250 <select name='mood' id='mood'>
webmaster@0 251 <?php
webmaster@0 252 $handle = opendir('mood');
webmaster@0 253 while($file = readdir($handle))
webmaster@0 254 {
webmaster@0 255 if(strlen($file) > 3 && substr($file, -3) == 'png')
webmaster@0 256 {
webmaster@0 257 $short = substr($file, 0, -4);
webmaster@0 258 echo("\t\t\t<option value='$short'><img src='mood/25/$file' alt='' />" . $short . "</option>\n");
webmaster@0 259 }
webmaster@0 260 }
webmaster@0 261 closedir($handle);
webmaster@0 262 ?>
webmaster@0 263 </select>
webmaster@0 264 </fieldset>
webmaster@0 265 <fieldset>
webmaster@0 266 <legend>Trackback</legend>
webmaster@0 267 <label for='tb'>Pour effectuer un trackback vers un autre post, rentrer son URL :<br /></label>
webmaster@0 268 <input type='text' name='tb' id='tb' value='TrackBack ?' />
webmaster@0 269 </fieldset>
webmaster@0 270 <fieldset>
webmaster@0 271 <legend>Publication</legend>
webmaster@0 272 <label id='pubComment' for='pubButton' />
webmaster@0 273 <input type='submit' name="pubButton" id="pubButton" value='Publier' />
webmaster@0 274 </fieldset>
webmaster@0 275 </div>
webmaster@0 276 </form>
webmaster@0 277
webmaster@0 278 <div id='Infos'>
webmaster@0 279 Administration de Dual Blog - Par DeFr - Icones &copy; David Lanham - The IconFactory -
webmaster@0 280 Valide <a href="http://validator.w3.org/check?uri=referer">XHTML 1.1</a> et <a href='http://jigsaw.w3.org/css-validator/check/referer'>CSS 3</a>
webmaster@0 281 </div>
webmaster@0 282 </body>
webmaster@0 283 </html>