annotate admin.php @ 53:ec0c926a78a6

Nettoyage de la classe d'accès aux données. Petit re-arrangement: les fonctions permettant de s'assurer que l'on a bien de l'utf-8 passe désormais dans la classe TextUtils. D'autre part, la classe a été notablement modifié: 1) si on souhaite passer un nom de base de données, il faut le faire dans le constructeur (précédement, c'était dans la méthode connect, mais c'était trompeur car le code ne gére absolument pas la connexion à deux bases de données différentes sur le même objet) 2) le code essayait de faire du ref-counting sur le nombre de fois où on avait appellé la fonction de connexion, pour fermer quand on avait atteint le même nombre de déconnexion, mais ne faisait pas ca particulièrement bien 3) il y avait une auto-connexion lors de l'execution des requetes si l'on était pas déja connecté, mais il n'y avait jamais d'auto-deconnexion (le code était buggé) 4) on essayait systématiquement de s'assurer que les enregistrements obtenus depuis la base de données étaient en utf8. A priori, c'est pour des considérations de migrations hérités de Mega-Poudlard, mais je crois que ce n'est pas necessaire pour ce blog, et ca ne l'est certainement pas dans le cas général...
author Franck Deroche <webmaster@defr.org>
date Tue, 29 Jan 2008 11:52:32 +0100
parents 629389204276
children 25c6e59f019e
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@0 91 $argToSend .= "&url=http://defr.org/blog/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>