annotate admin.php @ 21:86a6793f1408

Temporary fix: si on envoie le prolog xml, IE sort du mode strict... Idealement, il faudrait detecter ça en amont, et utiliser saveHTML ou saveXML en fonction: ce serait probablement plus robuste. Toutefois, il faut encore decider si cela doit se faire par défaut dans la classe Template ou en spécialisation dans skeleton (auquel cas, il est indispensable de passer Template::xmlDocument en protected).
author Franck Deroche <webmaster@defr.org>
date Fri, 26 Oct 2007 17:55:35 +0200
parents 629389204276
children ec0c926a78a6
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@0 141 $Titre=$Data->utf8_ensure($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>