Mercurial > defr > DualBlog
changeset 0:629389204276
Import initial
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/.hgignore Sat Oct 20 14:15:10 2007 +0200 @@ -0,0 +1,2 @@ +^.htpass$ +^includes/config.php$
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/.htaccess Sat Oct 20 14:15:10 2007 +0200 @@ -0,0 +1,22 @@ +Options +FollowSymlinks +RewriteEngine on +RewriteRule ^dualblog.atom$ atom.php +RewriteRule ^dualblog.rss$ rss.php +RewriteRule ^posts/$ index.php [L] +RewriteRule ^posts/([0-9]+)/([0-9]{1,2})$ index.php?type=cal&year=$1&month=$2 [L] +RewriteRule ^posts/([0-9]+)-(.*)$ comment.php?id=$1 [L] +RewriteRule ^posts/(.*)$ comment.php?id=$1 [L] +RewriteRule ^tags/(.*)$ tag.php?tag=$1 [L] + +<Files admin*.php> + # AuthUserFile "w:\www\blog\.htpass" + AuthUserFile "/home/defrnet/defr.net/blog/.htpass" + AuthGroupFile /dev/null + AuthName "Dual Blog - Administration" + AuthType Basic + require valid-user + # Order Deny,Allow + # Deny from all + # Allow from 127.0.0.1 +</Files> +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/RollUp.js Sat Oct 20 14:15:10 2007 +0200 @@ -0,0 +1,121 @@ + var styleSwitch = { + set:function(title) { + var i, a, main; + for(i=0; (a = document.getElementsByTagName("link")[i]); i++) { + if(a.getAttribute("rel").indexOf("Style") != -1 && a.getAttribute("title")) { + a.disabled = true; + if(a.getAttribute("title") == title) a.disabled = false; + } + } + document._currentStyleSheet = title; + }, + + get:function() { + return document._currentStyleSheet; + }, + + getPref:function() { + var a = document.getElementsByTagName("link"); + for(var i=0; a[i]; i++) { + if(a[i].getAttribute("rel").indexOf("Style") != -1 && a[i].getAttribute("rel").indexOf("Alt") == -1 && a[i].getAttribute("title")) + return a[i].getAttribute("title"); + } + return null; + }, + + unload:function() { + var date = new Date(); + date.setTime(date.getTime() + 365 * 24 * 3600 * 1000); + document.cookie="style=" + document._currentStyleSheet +";expires=" + date.toGMTString() + ";path=/"; + } + } + + var arContent = new Array(); + var arTitle = new Array(); + + window.onload = function() { + var shownSection = 'About', i, x; + x=document.getElementsByTagName('dt'); + for(i=0;i<x.length;i++) { + if(x[i].parentNode.id == 'SideBar') { + x[i].onclick=ToggleDisp; + arTitle[arTitle.length] = x[i]; + } + } + x=document.getElementsByTagName('dd'); + for (i=0;i<x.length;i++) { + if(x[i].parentNode.id == 'SideBar') { + arContent[arContent.length] = x[i]; + if(arTitle[arContent.length - 1].id!=shownSection) { + x[i].style.display='none'; + } else { + arTitle[arContent.length - 1].className='Actif'; + } + } + } + var ad = document.getElementById('Adresse'); + ad.onclick = ToggleLink; + arContent[arContent.length] = document.getElementById("Link"); + arTitle[arTitle.length] = ad; + + styleSwitch.set(styleSwitch.getPref()); +/* var dS = document.styleSheets; + if(dS && dS[dS.length - 1].title) { + for(var i =0; i < dS.length; i++) + { + if(dS[i].title=='Somatic') { + if(dS[i].insertRule) + dS[i].insertRule("@import url('/blog/Somatic_JS.css');", 0); + else + dS[i].addImport('Somatic_JS.css'); + } + } + } + else if(dS && styleSwitch.get() == "Somatic") { + dS[dS.length - 1].insertRule("@import url(/blog/Somatic_JS.css);", 0); + //for(j in dS[0]) alert(j); + }*/ + } + + window.onunload = function() { + styleSwitch.unload(); + return true; + } + + + function ToggleDisp(e) { + for(var i=0; i<arTitle.length; i++) arTitle[i].className=''; + var targetAc; + if(!e) e=window.event; + if(e.target) targetAc=e.target; + else targetAc=e.srcElement; + //Parait que la ligne suivante est utile pour Safari ^^;... Sauf qu'Opera retourne en plus le ns dans le nodeName... + while(targetAc.nodeName.toLowerCase() != 'dt' && targetAc.nodeName.toLowerCase() != 'html:dt') targetAc=targetAc.parentNode; + targetAc.className = 'Actif'; + var nextSib=targetAc.nextSibling; + while(nextSib.nodeType!=1) {nextSib=nextSib.nextSibling;} + if(styleSwitch.get() != "Somatic") { + var nextSibDisp=(nextSib.style.display=='none') ? 'block' : 'none'; + nextSib.style.display=nextSibDisp; + } else { + for(i=0;i<arContent.length;i++) arContent[i].style.display = 'none'; + nextSib.style.display='block'; + } + } + + function ToggleLink() { + var obj=document.getElementById('Link'); + if(styleSwitch.get() == "Somatic") { + for(i=0; i<arTitle.length; i++) arTitle[i].className=''; + arTitle[arTitle.length - 1].className='Actif'; + for(i=0;i<arContent.length;i++) arContent[i].style.display='none'; + obj.style.display='block'; + } else { + obj.style.display=(obj.style.display=='block') ? 'none' : 'block'; + } + } + + function pop_config() { + alert('Vouip, je sais, faut qu\'j\'remette ca, mais faut l\'updater d\'abord ^^;;'); + } + \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/StyleSwitcher.js Sat Oct 20 14:15:10 2007 +0200 @@ -0,0 +1,57 @@ +function setActiveStyleSheet(title) { + var i, a, main; + for(i=0; (a = document.getElementsByTagName("link")[i]); i++) { + if(a.getAttribute("rel").indexOf("Style") != -1 && a.getAttribute("title")) { + a.disabled = true; + if(a.getAttribute("title") == title) a.disabled = false; + } + } + createCookie("style", title, 365); + document.chosenStyleSheet = title; +} + +function getActiveStyleSheet() { + /* var i, a; + for(i=0; (a = document.getElementsByTagName("link")[i]); i++) { + if(a.getAttribute("rel").indexOf("Style") != -1 && a.getAttribute("title") && !a.disabled) return a.getAttribute("title"); + } + return null;*/ + return document.chosenStyleSheet; +} + +function getPreferredStyleSheet() { + var i, a; + for(i=0; (a = document.getElementsByTagName("link")[i]); i++) { + if(a.getAttribute("rel").indexOf("Style") != -1 + && a.getAttribute("rel").indexOf("Alt") == -1 + && a.getAttribute("title") + ) return a.getAttribute("title"); + } + return null; +} + +function createCookie(name,value,days) { + if (days) { + var date = new Date(); + date.setTime(date.getTime()+(days*24*60*60*1000)); + var expires = "; expires="+date.toGMTString(); + } + else expires = ""; + document.cookie = name+"="+value+expires+"; path=/"; +} + +function readCookie(name) { + var nameEQ = name + "="; + var ca = document.cookie.split(';'); + for(var i=0;i < ca.length;i++) { + var c = ca[i]; + while (c.charAt(0)==' ') c = c.substring(1,c.length); + if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); + } + return null; +} + +window.onunload = function(e) { + var title = getActiveStyleSheet(); + createCookie("style", title, 365); +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/admin.js Sat Oct 20 14:15:10 2007 +0200 @@ -0,0 +1,243 @@ +var arLIMenu = new Array(); +var curBPShown = 0; +var wEdit, wBr, dp; + +var xmlRequest = { + init: function() { + try { + xmlRequest.obj = new XMLHttpRequest(); + } catch(e) { + xmlRequest.obj = new ActiveXObject("Msxml2.XMLHTTP"); + } + }, + + get: function(url) { + xmlRequest.obj.open("GET", url, false); + xmlRequest.obj.send(null); + + return xmlRequest.obj.responseXML; + }, + + send: function(url, data) { + try { + xmlRequest.obj.open("POST", url, false); + xmlRequest.obj.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded') + xmlRequest.obj.send(data); + return true; + } catch(e) { + return false; + } + } + +}; + +var t = { + evtListener:function(elt, evt, func, useCpt) { + if(elt.addEventListener) + elt.addEventListener(evt, func, useCpt); + else if(elt.attachEvent) + elt.attachEvent("on" + evt, func); + else + elt["on" + evt] = func; + } +} + +t.evtListener(window, "load", xmlRequest.init, false); +t.evtListener(window, "load", hideForms, false); + +var editFilter = { + acceptNode: function(node) { + if(node.nodeName == 'a' && node.firstChild && node.firstChild.nodeValue == 'Editer') return NodeFilter.FILTER_ACCEPT; + return NodeFilter.FILTER_SKIP; + } +} + +var brouillonsFilter = { + acceptNode:function(node) { + if(node.nodeName == 'a' && node.firstChild && ( + node.firstChild.nodeValue == 'Editer' || + node.firstChild.nodeValue == 'Publier' || + node.firstChild.nodeValue == 'Supprimer')) + return NodeFilter.FILTER_ACCEPT; + return NodeFilter.FILTER_SKIP; + } +} + + + +window.onload=function() { + var ar=document.getElementsByTagName('li'); + for(var i=0; i<ar.length; i++) { + if(ar[i].parentNode.id=='Menu') { + arLIMenu[arLIMenu.length]=ar[i]; + if(ar[i].firstChild.id=='Brouillons') { + ar[i].className="Actif"; + document.getElementById('Gest' + ar[i].firstChild.id).style.display='block'; + } + t.evtListener(ar[i], 'click', switchSection, true); + } + if(ar[i].className=='Add') + t.evtListener(ar[i].firstChild, 'click', showAddForm, true); + } + + try { dp = new DOMParser();} + catch(e) {dp = new ActiveXObject("Microsoft.XMLDOM");} + t.evtListener(document.getElementById("editPost").Save, "click", saveFormContent, false); + // TreeWalkers in all their glory + try { + wEdit = document.createTreeWalker(document.getElementById("GestPosts"), NodeFilter.SHOW_ALL, editFilter, true); + while(wEdit.nextNode()) { + t.evtListener(wEdit.currentNode, "click", editPubl, false); + } + + wBr = document.createTreeWalker(document.getElementById("GestBrouillons"), NodeFilter.SHOW_ALL, brouillonsFilter, true); + while(wBr.nextNode()) { + if(wBr.currentNode.firstChild.nodeValue == 'Editer') t.evtListener(wBr.currentNode,"click", editBrouillon, false); + else if(wBr.currentNode.firstChild.nodeValue == 'Publier') t.evtListener(wBr.currentNode, "click", pubBrouillon, false); + } + } catch(e) { + //Well, right now, we're sort of screwed... + } +} + +function switchSection(e) { + var targetAc = bpEvt(e, 'li').rTarget; + for(i=0; i<arLIMenu.length; i++) { + tmpObj=document.getElementById('Gest' + arLIMenu[i].firstChild.id); + if(arLIMenu[i]==targetAc) { + arLIMenu[i].className='Actif'; + tmpObj.style.display='block'; + } else { + arLIMenu[i].className=''; + tmpObj.style.display='none'; + } + } +} + + +function pubBrouillon(e) { + var whichVersion = document.getElementById("whichVersion"); + var pubComment = document.getElementById("pubComment"); + var el = bpEvt(e).rTarget; + if(el != curBPShown) { + if(curBPShown != 0) curBPShown.parentNode.parentNode.className = ''; + curBPShown = el; + el.parentNode.parentNode.className = 'Pinned'; + var pos = el.href.indexOf("#"); + whichVersion.pubButton.disabled = true; + pubComment.textContent = "Vérification en cours de la validité XML du post"; + whichVersion.id.value = el.href.substring(pos + 4, el.href.length); + el.parentNode.appendChild(whichVersion); + whichVersion.style.display='block'; + el.pubIsShown = true; + var data = xmlRequest.get("admin_xml.php?type=brouillon&id=" + whichVersion.id.value); + var doc = dp.parseFromString("<post>" + data.getElementsByTagName("contenu")[0].firstChild.data + "</post>", "text/xml"); + var parserErrors = doc.getElementsByTagName('parsererror'); + if(parserErrors.length > 0) { + pubComment.textContent = ""; + pubComment.appendChild(doc.firstChild); + } + else { + pubComment.textContent = "Le post est fait de XML valide, bon pour être poster"; + whichVersion.pubButton.disabled = false; + } + } else { + curBPShown = 0; + el.parentNode.parentNode.className = ''; + hideForms(); + el.pubIsShown = false; + } + return false; +} + +function editBrouillon(e) { + edit(e, "brouillon"); +} + +function editPubl(e) { + edit(e, "post"); +} + +function edit(e, type) { + var editPost = document.getElementById("editPost"); + editPost.type = type; + var el = bpEvt(e).rTarget; + if(el.editPostIsShown !=1) { + var id = el.href.substring(el.href.indexOf("#") + 4, el.href.length); + var data = xmlRequest.get("admin_xml.php?type=" + type + "&id=" + id); + el.parentNode.appendChild(editPost); + el.editPostIsShown = 1; + editPost.style.display = 'block'; + editPost.Titre.value = data.getElementsByTagName('titre')[0].textContent; + editPost.Contenu.value = data.getElementsByTagName('contenu')[0].firstChild.data; + if(type == 'post') { + editPost.mood.style.display = ''; + editPost.mood.value = data.getElementsByTagName('mood')[0].textContent; + editPost.Tags.style.display = ''; + editPost.Tags.value = ''; + var tags = data.getElementsByTagName('tag'); + for(var i = 0; i < tags.length; i++) + { + if(tags[i].textContent.indexOf(' ') > -1) + { + editPost.Tags.value += '"' + tags[i].textContent + '"'; + } else { + editPost.Tags.value += tags[i].textContent; + } + editPost.Tags.value += ' '; + } + } else { + editPost.mood.style.display = 'none'; + editPost.Tags.style.display = 'none'; + } + + } else { + hideForms(); + el.editPostIsShown = 0; + } +} + +function showAddForm(e) { + var targetAc = bpEvt(e, "a").rTarget; + while(targetAc.nodeName.toLowerCase()!='form') targetAc=targetAc.nextSibling; // Permet d'avoir eventuellement des espaces + targetAc.style.display = (targetAc.style.display=='block')?'none':'block'; +} + +function saveFormContent(e) { + var el = e.target.form; // Should be the form... + var toggleLink = el.parentNode.firstChild; + var id=toggleLink.href.substring(toggleLink.href.indexOf("#") + 4, toggleLink.href.length); + if(xmlRequest.send('admin_xml.php?id=' + id + '&mode=edit&type=' + el.type, + 'title=' + postValue(el.Titre.value) + + '&content=' + postValue(el.Contenu.value) + + '&mood=' + postValue(el.mood.value) + + '&tags=' + postValue(el.Tags.value))) + { + toggleLink.editPostIsShown = 0; + hideForms(); + } else { + el.submit(); + } + return true; +} + +function hideForms() { + document.getElementById('whichVersion').style.display='none'; + document.getElementById('editPost').style.display='none'; +} + +/* Bullet-Proofing of the event variable... Needed because of the huge mess out there */ +function bpEvt(eIni, tag) { + var e = (eIni)?eIni:window.event; + e.rTarget = (e.target)?e.target:e.srcElement; + if(tag != undefined) + while(e.rTarget.parentNode && e.rTarget.nodeName.toLowerCase() != tag) e.rTarget = e.rTarget.parentNode; + return e; +} + +function postValue(str) +{ + str = str.replace(/&/g, "%26"); + str = str.replace(/\+/g, "%2B"); + return str; +} \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/admin.php Sat Oct 20 14:15:10 2007 +0200 @@ -0,0 +1,283 @@ +<?php + if(!is_null($_SERVER['HTTP_ACCEPT']) && stristr($_SERVER['HTTP_ACCEPT'], 'application/xhtml+xml')) + header('Content-Type: application/xhtml+xml; charset=UTF-8'); + else + header('Content-Type: text/html; charset=UTF-8'); + + include("classes.php"); + $Data=new DataAccess; + $Req = new Requete; + + $mode = $Req->get('mode'); + switch($mode) { + case 'nvBrouillon': + $nvTitre = $Req->get('Titre', 'POST'); + $nvContenu = $Req->get('Contenu', 'POST'); + $Data->debugQuery("INSERT INTO Brouillons SET Titre='{$nvTitre}', Contenu='{$nvContenu}'"); + break; + + case 'nvTache': + $nvThing = $Req->get('Tache'); + $Data->Query("INSERT INTO ToDo SET Thing='{$nvThing}'"); + break; + + case 'nvPost': + $id = $Req->get('id', 'POST'); + $versionAc = $Req->get('versionAc', 'POST'); + $newVersion = $Req->get('newVersion', 'POST'); + $mood = $Req->get('mood', 'POST'); + $tbAddress = $Req->get('tb', 'POST'); + if($versionAc == 'Version 10' && $newVersion != 'Nouvelle version ?' && !empty($newVersion)) + $version = $newVersion; + else + $version = $versionAc; + $Data->Query("SELECT * FROM Brouillons WHERE id_brouillon={$id}"); + $row = $Data->GetRow(); + $row['Titre'] = addslashes($row['Titre']); + $row['Contenu'] = addslashes($row['Contenu']); + $datePost = gmdate("Y-m-d H:i:s", time() + 3600); + $Data->Query(" + INSERT INTO Mess(Titre, DatePost, num_version, Message, Emot) + VALUES('{$row['Titre']}', '{$datePost}', '{$version}', '{$row['Contenu']}', '{$mood}')"); + $Data->Query("DELETE FROM Brouillons WHERE id_brouillon={$id}"); + $Data->Query("SELECT num_mess, Message FROM Mess ORDER BY num_mess DESC LIMIT 0, 1"); + $id_row = $Data->GetRow(); + // Gestion des tags + $arTags = TextUtils::SplitTags($Req->get('Tags')); + foreach($arTags as $tagAj) + { + $n = $Data->Query("SELECT idTag FROM Tags WHERE Tag='{$tagAj}'"); + if($n == 0) + { + // Si le tag n'existe pas, on le crée + $Data->Query("INSERT INTO Tags SET Tag='{$tagAj}'"); + $Data->Query("SELECT idTag FROM Tags WHERE Tag='{$tagAj}'"); + } + $row_tag = $Data->GetRow(); + $Data->Query + (" + INSERT INTO Lien_Tags_Posts + SET idMess={$id_row['num_mess']}, idTag={$row_tag['idTag']} + "); + } + // Génération de trackbacks + if(!empty($tbAddress) && substr($tbAddress, 0, 4)=='http') { + $ar_tbAddress = parse_url($tbAddress); + if(!array_key_exists('port', $ar_tbAddress)) $ar_tbAddress['port'] = 80; + if(!array_key_exists('path', $ar_tbAddress)) $ar_tbAddress['path'] = '/'; + if(array_key_exists('query', $ar_tbAddress)) $ar_tbAddress['query'] = '?' . $ar_tbAddress['query']; + $fp = fsockopen($ar_tbAddress['host'], $ar_tbAddress['port'], $errno, $errstr, 15); + if($fp) { + $genToSend = "POST {$ar_tbAddress['path']}{$ar_tbAddress['query']} HTTP/1.0\r\n"; + $genToSend .= "Host: {$ar_tbAddress['host']}\r\n"; + $genToSend .= "Content-Type: application/x-www-form-urlencoded \n"; + + // Essai de récuperation de l'encodage...Envoie en iso si pas d'indication d'UTF... + $argToSend = "__info=1"; + $toSend = $genToSend . "Content-Length: " . strlen($argToSend) . "\n\n"; + $toSend .= $argToSend; + echo("<pre>$toSend</pre>"); + fwrite($fp, $toSend); + while(!feof($fp)) + $result .= fgets($fp, 128); + fclose($fp); + if(!preg_match('/<encoding>(UTF-8|utf-8)<\/encoding>/msU',$result)) { + $row['Titre'] = utf8_decode($row['Titre']); + $row['Message'] = utf8_decode($row['Message']); + } + + $fp = fsockopen($ar_tbAddress['host'], 80, $errno, $errstr, 15); + $argToSend = "title=" . htmlentities(urlencode($row['Titre'])) . "&blog_name=Dual+Blog"; + $argToSend .= "&url=http://defr.org/blog/posts/{$row['num_mess']}&excerpt=" + . htmlentities(urlencode(substr(strip_tags($row['Message']), 0, 255) . "...")); + + $toSend = $genToSend . "Content-Length: " . strlen($argToSend) . "\n\n"; + $toSend .= $argToSend; + echo("<pre><![CDATA[$toSend]]></pre>"); + echo("<![CDATA["); + fwrite($fp, $toSend); + while (!feof($fp)) { + echo fgets($fp, 128); + } + echo("]]>"); + fclose($fp); + } + } + break; + } +?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> + +<html xmlns='http://www.w3.org/1999/xhtml'> +<head> + <title>Administration : Conception & Design</title> + <link rel='StyleSheet' type='Text/CSS' href='css/admin.css' /> + <script type='text/javascript' src='admin.js'>/* Die IE, diiie */</script> +</head> + +<body> + <h3>Administration de Dual Blog</h3> +<ul id='Menu'> + <li><div id='Brouillons'>Brouillons</div></li> + <li><div id='Posts'>Posts publiés</div></li> + <li><div id='Designs'>Designs</div></li> + <li><div id='ToDo'>To-Do</div></li> +</ul> +<div id='GestPosts'> +<ul> +<?php + $Data->Connect(); + $Data->Query("SELECT * FROM Mess ORDER BY num_version, num_mess DESC LIMIT 0, 10"); + $versionAc=""; + $i=0; + $ar_Version = array(); + while(0!==($val=$Data->GetRow())) { + if($val['num_version']!=$versionAc) { + if($i!=0) echo("</ul>\n</li>"); + echo(" <li>{$val['num_version']} :\n <ul>"); + $versionAc=$val['num_version']; + $ar_Version[] = $versionAc; + $i++; + } + $Titre=$Data->utf8_ensure($val['Titre']); + echo(" + \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>"); + } + echo("\n </ul>\n </li>\n"); +?> +</ul> +</div> + +<div id='GestDesigns'> +<ul> + <li class='Add'><a href='#'>Ajouter un nouveau design au weblog</a></li> + <li>Modifier les designs déja existants</li> +</ul> +</div> + +<div id='GestBrouillons'> + <ul> + <li class='Add'><a href='#'>Ajouter un nouveau brouillon</a> + <form method='post' action='admin.php'> + <div> + <input type='hidden' name='mode' value='nvBrouillon' /> + <input type='text' name='Titre' value='Titre' /> + <textarea name='Contenu' rows='10' cols='30'></textarea> + <input type='submit' value='Valider ce brouillon' /> + </div> + </form> + </li> +<? + $Data->Query("SELECT * FROM Brouillons ORDER BY id_brouillon DESC"); + while(0!==($val=$Data->GetRow())) { + echo(" + <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>"); + } +?> + </ul> +</div> + +<div id='GestToDo'> +<ul> + <li class='Add'><a href='#'>Ajouter une nouvelle tâche</a> + <form method='post' action='admin.php'> + <div> + <input type='hidden' name='mode' value='nvTache' /> + <input type='text' name='Tache' /> + <input type='submit' value='Ajouter cette tâche' /> + </div> + </form></li> + <?php + $Data->Query("SELECT * FROM ToDo ORDER By num_thing DESC"); + while(0!==($val=$Data->GetRow())) { + echo(" + <li>{$val['Thing']} <span class='Admin'><a href='#'>Fait</a> -- <a href='#'>Editer</a> -- <a href='#'>Supprimer</a></span></li>"); + } + $Data->Close(); +?> +</ul> +</div> + +<form method='post' action='#' id='editPost'> + <div> + <input type='hidden' name='mode' value='editBrouillon' /> + <p><input type='text' name='Titre' value='Titre' /></p> + <p><textarea name='Contenu' rows='10' cols='30'></textarea></p> + <p><select name='mood' id='mood'> +<?php + $handle = opendir('mood'); + while($file = readdir($handle)) + { + if(strlen($file) > 3 && substr($file, -3) == 'png') + { + $short = substr($file, 0, -4); + echo("\t\t<option value='$short'><img src='mood/25/$file' alt='' />" . $short . "</option>\n"); + } + } + closedir($handle); +?> + </select></p> + <p><input type='text' name='Tags' value='Tags' /></p> + <input type='button' name='Save' value='Sauver la modification' /> + </div> +</form> + +<form method='post' action='admin.php' id='whichVersion'> + <div> + <!--a onclick='javascript:hidePubForm()'>Hide</a--> + <input type='hidden' name='mode' value='nvPost' /> + <input type='hidden' name='id' /> + <fieldset> + <legend>Catégorie du post</legend> + <label for='vAc'>Pour poster le post dans une catégorie déja existante, veuillez la choisir dans la liste ci-dessous :<br /></label> + <select name='versionAc' id='vAc'> + <option>Version 10</option> + <option>DeFr.org news</option> + </select> + <label for='nvCat'><br />Pour poster le post dans une catégorie n'existant pas encore, veuillez + entrer son nom : <br /></label> + <input type='text' name='newVersion' id='nvCat' value='Nouvelle version ?' /> + </fieldset> + <fieldset> + <legend>Tags</legend> + <label for='Tags'>Histoire d'organiser les posts, et de pouvoir filtrer par centres d'interet, veuillez + préciser les <em>tags</em> à attribuer à ce post :<br /></label> + <input type='text' name='Tags' id='Tags' /> + </fieldset> + <fieldset> + <legend>Mood / Emots</legend> + <label for='mood'>Pour assurer un minimum d'attrait aux posts, et leur attribuer un aspect graphique + sympathique, veuillez selectionner une emoticone pour le post, dans la liste suivante :<br /></label> + <select name='mood' id='mood'> +<?php + $handle = opendir('mood'); + while($file = readdir($handle)) + { + if(strlen($file) > 3 && substr($file, -3) == 'png') + { + $short = substr($file, 0, -4); + echo("\t\t\t<option value='$short'><img src='mood/25/$file' alt='' />" . $short . "</option>\n"); + } + } + closedir($handle); +?> + </select> + </fieldset> + <fieldset> + <legend>Trackback</legend> + <label for='tb'>Pour effectuer un trackback vers un autre post, rentrer son URL :<br /></label> + <input type='text' name='tb' id='tb' value='TrackBack ?' /> + </fieldset> + <fieldset> + <legend>Publication</legend> + <label id='pubComment' for='pubButton' /> + <input type='submit' name="pubButton" id="pubButton" value='Publier' /> + </fieldset> +</div> +</form> + +<div id='Infos'> +Administration de Dual Blog - Par DeFr - Icones © David Lanham - The IconFactory - +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> +</div> +</body> +</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/admin_xml.php Sat Oct 20 14:15:10 2007 +0200 @@ -0,0 +1,128 @@ +<?php + require("classes.php"); + + $Req = new Requete(); + $Data = new DataAccess; + + header("Content-Type: application/xml; charset=utf-8"); + $doc = new DOMDocument('1.0', 'utf-8'); + $root = $doc->createElementNS('http://defr.org/2005/blog-post', 'post'); + $doc->appendChild($root); + + $mode = $Req->get('mode', 'GET', 'get'); + $type = $Req->get('type', 'GET', 'post'); + $id = $Req->get('id'); + + $root->appendChild($doc->createElement('id', $id)); + $root->appendChild(DOMUtils::createCDATAWrapper($doc, 'debug', var_export($Req, true))); + switch($mode . '-' . $type) + { + case 'edit-post': + $nvTitre = $Req->get('title'); + $nvContenu = $Req->get('content'); + $nvMood = $Req->get('mood'); + $Data->Query + (" + UPDATE Mess + SET Titre='{$nvTitre}', Message='{$nvContenu}', Emot='{$nvMood}' + WHERE num_mess={$id} + "); + // Récuperation des nouveaux tags à appliquer + $arTags = TextUtils::splitTags($Req->get('tags')); + // Récuperation des anciens tags + $Data->Query + (" + SELECT T.idTag, T.Tag + FROM Lien_Tags_Posts L + LEFT JOIN Tags T ON L.idTag = T.idTag + WHERE L.idMess = {$id} + "); + + $oldTags = array(); + while(0 !== ($row = $Data->GetRow())) + { + $oldTags[] = $row['Tag']; + $mapOld[$row['Tag']] = $row['idTag']; + } + // Calcul des différences + $tagsSupprimes = array_diff($oldTags, $arTags); + $tagsAjoutes = array_diff($arTags, $oldTags); + // Suppression des tags non affectés + if(is_array($tagsSupprimes)) + { + foreach($tagsSupprimes as $tagSuppr) + { + $supprIDs .= $mapOld[$tagSuppr] . ','; + } + $Data->Query + (" + DELETE FROM Lien_Tags_Posts + WHERE idMess={$id} AND idTag IN ({$supprIDs}0) + "); + } + // Ajout des tags ajoutés + if(is_array($tagsAjoutes)) + { + foreach($tagsAjoutes as $tagAj) + { + $n = $Data->Query("SELECT idTag FROM Tags WHERE Tag='{$tagAj}'"); + if($n == 0) + { + // Si le tag n'existe pas, on le crée + $Data->Query("INSERT INTO Tags SET Tag='{$tagAj}'"); + $Data->Query("SELECT idTag FROM Tags WHERE Tag='{$tagAj}'"); + } + $row = $Data->GetRow(); + $Data->Query + (" + INSERT INTO Lien_Tags_Posts + SET idMess={$id}, idTag={$row['idTag']} + "); + } + } + case 'get-post': + $Data->Query + (" + SELECT Titre, Message, Emot + FROM Mess + WHERE num_mess={$id} + "); + $row = $Data->GetRow(); + $titre_CDATA = $doc->createCDATASection($row['Titre']); + $root->appendChild(DOMUtils::createCDATAWrapper($doc, 'titre', $row['Titre'])); + $root->appendChild(DOMUtils::createCDATAWrapper($doc, 'contenu', $row['Message'])); + $root->appendChild($doc->createElement('mood', $row['Emot'])); + // Obtention des tags + $Data->Query + (" + SELECT T.idTag, T.Tag + FROM Lien_Tags_Posts L + LEFT JOIN Tags T ON L.idTag = T.idTag + WHERE L.idMess = {$id} + "); + while(0 !== ($row = $Data->GetRow())) + $root->appendChild($doc->createElement('tag', $row['Tag'])); + break; + case 'edit-brouillon': + $nvTitre = $Req->get('title'); + $nvContenu = $Req->get('content'); + $Data->Query + (" + UPDATE Brouillons + SET Titre='{$nvTitre}', Contenu='{$nvContenu}' + WHERE id_brouillon={$id} + "); + case 'get-brouillon': + $Data->Query + (" + SELECT Titre, Contenu + FROM Brouillons + WHERE id_brouillon={$id} + "); + $row = $Data->GetRow(); + $root->appendChild(DOMUtils::createCDATAWrapper($doc, 'titre', $row['Titre'])); + $root->appendChild(DOMUtils::createCDATAWrapper($doc, 'contenu', $row['Contenu'])); + break; + } + echo $doc->saveXML(); +?> \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/atom.php Sat Oct 20 14:15:10 2007 +0200 @@ -0,0 +1,75 @@ +<?php + + include("classes.php"); + + function utf8_ensure($str) { + return seems_utf8($str)?$str:utf8_encode($str); + } + + function seems_utf8($Str) { + for ($i=0; $i<strlen($Str) && $i<150; $i++) { + if (ord($Str[$i]) < 0x80) continue; # 0bbbbbbb + elseif ((ord($Str[$i]) & 0xE0) == 0xC0) $n=1; # 110bbbbb + elseif ((ord($Str[$i]) & 0xF0) == 0xE0) $n=2; # 1110bbbb + elseif ((ord($Str[$i]) & 0xF8) == 0xF0) $n=3; # 11110bbb + elseif ((ord($Str[$i]) & 0xFC) == 0xF8) $n=4; # 111110bb + elseif ((ord($Str[$i]) & 0xFE) == 0xFC) $n=5; # 1111110b + else return false; # Does not match any model + for ($j=0; $j<$n; $j++) { # n bytes matching 10bbbbbb follow ? + if ((++$i == strlen($Str)) || ((ord($Str[$i]) & 0xC0) != 0x80)) + return false; + } + } + return true; + } + + if(stristr($_SERVER['HTTP_ACCEPT'], "application/atom+xml")) + header("Content-Type: application/atom+xml; charset=utf-8"); + else + header("Content-Type: application/xml; charset=utf-8"); + echo("<?xml version='1.0' encoding='utf-8'?>\n"); + $Data = new DataAccess(); + $Data->Query("SELECT * FROM Mess ORDER BY num_mess DESC LIMIT 0, 1"); + $val=$Data->GetRow(); + $modifiedDate=gmdate("Y-m-d", strtotime($val['DatePost'])) . "T" . gmdate("H:i:s-02:00", strtotime($val['DatePost'])); +?> +<feed xmlns="http://www.w3.org/2005/Atom" xml:lang='fr-FR'> + <title>Dual Blog</title> + <subtitle>Le blog de DeFr, parlant de tout et de rien ^^;</subtitle> + <link rel='alternate' type='text/html' href='http://defr.org/blog/' /> + <link rel='self' type='application/atom+xml' href='http://defr.org/blog/dualblog.atom' /> + <updated><?php echo $modifiedDate; ?></updated> + <author> + <name>Deroche Franck</name> + <uri>http://defr.org</uri> + </author> + <id>urn:uuid:cface534-634f-4ce8-a07b-3a4187982583</id> + <?php + + $result=$Data->Query("SELECT * FROM Mess ORDER BY num_mess DESC LIMIT 0, 20"); + while($val=$Data->GetRow()) { + $utf8_Mess=str_replace("</P>", "</p>", str_replace("<P>", "<p>", (str_replace("€", "€", utf8_ensure($val['Message']))))); + $utf8_Mess = str_replace(" ", " ", $utf8_Mess); + $utf8_Titre=utf8_ensure($val['Titre']); + $issuedDate=gmdate("Y-m-d", strtotime($val['DatePost'])) . "T" . gmdate("H:i:s-02:00", strtotime($val['DatePost'])); + echo(" + <entry> + <title type='xhtml'> + <div xmlns='http://www.w3.org/1999/xhtml'> + {$utf8_Titre} + </div> + </title> + <id>tag:defr.org,2006:{$val['num_mess']}</id> + <content type='xhtml'> + <div xmlns='http://www.w3.org/1999/xhtml'> + {$utf8_Mess} + </div> + </content> + <published>{$issuedDate}</published> + <updated>{$issuedDate}</updated> + <link rel='alternate' type='text/html' href='http://www.defr.org/blog/posts/{$val['id']}' /> + </entry> + "); + } + ?> +</feed>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/classes.php Sat Oct 20 14:15:10 2007 +0200 @@ -0,0 +1,14 @@ +<?php +/* +WebLog : Classe globale & all +*/ + +ini_set("include_path", $_SERVER['DOCUMENT_ROOT'] . "/blog/includes/"); + +require_once("config.php"); +require_once("class.dataaccess.php"); +require_once("class.requete.php"); +require_once("class.domutils.php"); +require_once("class.textutils.php"); + +?>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/comment.20060616.php Sat Oct 20 14:15:10 2007 +0200 @@ -0,0 +1,84 @@ +<?php + setlocale(LC_ALL, "fr_FR.utf8@euro"); + include("classes.php"); + $id = $_GET['id']; + $Data = new DataAccess; + $Req = new Requete; + + $Auteur=$Req->get('Auteur'); + $Adresse=$Req->get('Adresse'); + $AdresseMail = $Req->get('AdresseMail'); + $Comment=$Req->get('Comment'); + $DateComment=gmdate("Y-m-d H:i:s", time() + 3600*2); + if(!is_null($Auteur) && $Auteur!='Votre Nom' && $Auteur != $Adresse && !empty($Comment)) { + // Prévention d'un "cassage" par ajout d'un commentaire incorrectement formaté + if(!DOMDocument::loadXML('<comment>' . $Comment . '</comment>')) + $Comment = '<![CDATA[' . str_replace(']]>', ']]>',$Comment) . ']]>'; + $ip = $_SERVER['REMOTE_ADDR']; + $Data->debugQuery(" + INSERT INTO Commentaires(MessId, Auteur, Adresse, AdresseMail, Comment, DateComment, ip) + VALUES({$id}, '{$Auteur}', '{$Adresse}', '{$AdresseMail}', '{$Comment}', '{$DateComment}', '{$ip}') + "); + $Data->Query("UPDATE Mess SET NbCommentaires=NbCommentaires+1 WHERE num_mess={$id}"); + } + + $Data->Query("SELECT * FROM Mess WHERE num_mess = {$id}"); + $row = $Data->GetRow(); + $mood = ''; + $Mess=$Data->utf8_ensure(str_replace("<P>","<p>",str_replace("</P>","</p>", $row['Message']))); + $dateFormatee = strftime("%A %d %B %Y, %Hh%M", strtotime($row['DatePost'])); + $Titre = $Data->utf8_ensure($row['Titre']); + $Titre_url = str_replace(" ", "_", strip_tags($Titre)); + $Titre_url = str_replace("-", "_", $Titre_url); + include("top.php"); + if(!empty($row['Emot'])) { + $mood = "<img src='/blog/mood/{$row['Emot']}.png' alt='Mood : {$row['Emot']}' class='mood' />"; + $row['Emot'] = " " . $row['Emot']; + } + echo(" + <div class='PostContent{$row['Emot']}'> + <h2>{$Titre} | <span class='Date'>{$dateFormatee}</span></h2> + {$mood} + {$Mess}<br /> + </div>"); + $Data->Query("SELECT * FROM Commentaires Where MessId={$id} ORDER BY num_comm"); + $defaultGravatar = urlencode("http://defr.org/Misc/NoGravatar.png"); + while(0 !== ($row = $Data->GetRow())) { + $dateFormatee = strftime(" à %Hh%M le <span class='Date'>%A %d %B %Y</span>", strtotime($row['DateComment'])); + $AdresseMail = $row['AdresseMail']; + $grav_id = md5($AdresseMail); + $Comment = nl2br($row['Comment']); + $Comment = str_replace(" & ", " & ", $Comment); + if($row['num_comm'] == 172) $Comment = str_replace("</sup>", "</del>", $Comment); + //if(stristr($Adresse, "@")) $Adresse = "mailto:" . $Adresse; + $betterHref = (stristr($row['Adresse'], 'http://') != false)?"href='{$row['Adresse']}'":''; + echo(" + <div class='PostContent'> + <div class='Infos'> + <img class='gravatar' src='http://www.gravatar.com/avatar.php?gravatar_id={$grav_id}&size=50&default=$defaultGravatar' alt='' /> + <a {$betterHref} name='c{$row['num_comm']}'>{$row['Auteur']}</a> {$dateFormatee} + </div> + <div class='Comment'>{$Comment}</div> + <br class='endComment' /> + </div>"); + } + echo(" + <div class='PostContent'> + <a href='/blog/'>Revenir au blog</a> + </div> + <div class='PostContent'> + <form method='post' action='#'> + <div id='FormCommentaire'> + Vous souhaitez ajouter un nouveau commentaire ? Faites donc, il vous suffit de remplir + le petit formulaire ci-dessous. + <input type='text' name='Auteur' value='Votre Nom' onfocus=\"if(this.value== this.getAttribute('value')) this.value='';\" /> + <input type='text' name='AdresseMail' value='Une adresse mail où vous joindre ? ( Non affichée publiquement )' onfocus=\"if(this.value == this.getAttribute('value')) this.value='';\"/> + <input type='text' name='Adresse' value='Un site web à vous ?' onfocus=\"if(this.value == this.getAttribute('value')) this.value='';\"/> + <textarea name='Comment' rows='10' cols='40' onfocus=\"if(this.value == 'Et z\'enfin, votre petit commentaire') this.value='';\">Et z'enfin, votre petit commentaire</textarea> + <input type='submit' value='Poster ce commentaire' /> + </div> + </form> + </div> + "); + include("foot.php"); +?>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/comment.php Sat Oct 20 14:15:10 2007 +0200 @@ -0,0 +1,93 @@ +<?php + setlocale(LC_ALL, "fr_FR.utf8@euro"); + ini_set("display_errors", "off"); + include("classes.php"); + $id = $_GET['id']; + $Data = new DataAccess; + $Req = new Requete; + + $Auteur=$Req->get('Auteur'); + $Adresse=$Req->get('Adresse'); + $AdresseMail = $Req->get('AdresseMail'); + $Comment=$Req->get('Comment'); + $DateComment=gmdate("Y-m-d H:i:s", time() + 3600*2); + if(!is_null($Auteur) && $Auteur!='Votre Nom' && $Auteur != $Adresse && !empty($Comment)) { + // Prévention d'un "cassage" par ajout d'un commentaire incorrectement formaté + $ip = $_SERVER['REMOTE_ADDR']; + $Auteur = str_replace(array('<', '>'), array('<', '>'), $Auteur); + /*if(!DOMDocument::loadXML('<comment>' . $Comment . '</comment>')) + $Comment = '<![CDATA[' . str_replace(']]>', ']]>',$Comment) . ']]>';*/ + if(DOMDocument::loadXML('<comment>' . $Comment . '</comment>')) { + $Data->debugQuery(" + INSERT INTO Commentaires(MessId, Auteur, Adresse, AdresseMail, Comment, DateComment, ip) + VALUES({$id}, '{$Auteur}', '{$Adresse}', '{$AdresseMail}', '{$Comment}', '{$DateComment}', '{$ip}') + "); + $Data->Query("UPDATE Mess SET NbCommentaires=NbCommentaires+1 WHERE num_mess={$id}"); + mail('webmaster+blogcomment@defr.org', 'Nouveau commentaire sur de ' . $Auteur, $Auteur . " vient de mettre en ligne le commentaire suivant: \n" . wordwrap($Comment, 70)); + } + else { + $infos = 'Votre commentaire doit etre fait de XML valide pour apparaitre.'; + } + } + + $Data->Query("SELECT * FROM Mess WHERE num_mess = {$id}"); + $row = $Data->GetRow(); + $mood = ''; + $Mess=$Data->utf8_ensure(str_replace("<P>","<p>",str_replace("</P>","</p>", $row['Message']))); + $dateFormatee = strftime("%A %d %B %Y, %Hh%M", strtotime($row['DatePost'])); + $Titre = $Data->utf8_ensure($row['Titre']); + $Titre_url = str_replace(" ", "_", strip_tags($Titre)); + $Titre_url = str_replace("-", "_", $Titre_url); + include("top.php"); + if(!empty($row['Emot'])) { + $mood = "<img src='/blog/mood/{$row['Emot']}.png' alt='Mood : {$row['Emot']}' class='mood' />"; + $row['Emot'] = " " . $row['Emot']; + } + echo(" + <div class='PostContent{$row['Emot']}'> + <h2>{$Titre} | <span class='Date'>{$dateFormatee}</span></h2> + {$mood} + {$Mess}<br /> + {$infos} + </div>"); + $Data->Query("SELECT * FROM Commentaires Where MessId={$id} ORDER BY num_comm"); + $defaultGravatar = urlencode("http://defr.org/Misc/NoGravatar.png"); + while(0 !== ($row = $Data->GetRow())) { + $dateFormatee = strftime(" à %Hh%M le <span class='Date'>%A %d %B %Y</span>", strtotime($row['DateComment'])); + $AdresseMail = $row['AdresseMail']; + $grav_id = md5($AdresseMail); + $Comment = nl2br($row['Comment']); + $Comment = str_replace(" & ", " & ", $Comment); + if($row['num_comm'] == 172) $Comment = str_replace("</sup>", "</del>", $Comment); + //if(stristr($Adresse, "@")) $Adresse = "mailto:" . $Adresse; + $betterHref = (stristr($row['Adresse'], 'http://') != false)?"href='{$row['Adresse']}'":''; + echo(" + <div class='PostContent'> + <div class='Infos'> + <img class='gravatar' src='http://www.gravatar.com/avatar.php?gravatar_id={$grav_id}&size=50&default=$defaultGravatar' alt='' /> + <a {$betterHref} name='c{$row['num_comm']}'>{$row['Auteur']}</a> {$dateFormatee} + </div> + <div class='Comment'>{$Comment}</div> + <br class='endComment' /> + </div>"); + } + echo(" + <div class='PostContent'> + <a href='/blog/'>Revenir au blog</a> + </div> + <div class='PostContent'> + <form method='post' action='#'> + <div id='FormCommentaire'> + Vous souhaitez ajouter un nouveau commentaire ? Faites donc, il vous suffit de remplir + le petit formulaire ci-dessous. + <input type='text' name='Auteur' value='Votre Nom' onfocus=\"if(this.value== this.getAttribute('value')) this.value='';\" /> + <input type='text' name='AdresseMail' value='Une adresse mail où vous joindre ? ( Non affichée publiquement )' onfocus=\"if(this.value == this.getAttribute('value')) this.value='';\"/> + <input type='text' name='Adresse' value='Un site web à vous ?' onfocus=\"if(this.value == this.getAttribute('value')) this.value='';\"/> + <textarea name='Comment' rows='10' cols='40' onfocus=\"if(this.value == 'Et z\'enfin, votre petit commentaire') this.value='';\">Et z'enfin, votre petit commentaire</textarea> + <input type='submit' value='Poster ce commentaire' /> + </div> + </form> + </div> + "); + include("foot.php"); +?>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/comment_.php Sat Oct 20 14:15:10 2007 +0200 @@ -0,0 +1,79 @@ +<?php + setlocale(LC_ALL, "fr_FR.utf8@euro"); + include("classes.php"); + $id = $_GET['id']; + $Data = new DataAccess; + + $Auteur=$_POST['Auteur']; + $Adresse=$_POST['Adresse']; + $AdresseMail = $_POST['AdresseMail']; + $Comment=$_POST['Comment']; + $DateComment=gmdate("Y-m-d H:i:s", time() + 3600*2); + if(!is_null($Auteur) && $Auteur!='Votre Nom' && !is_null($Comment)) { + // Prévention d'un "cassage" par ajout d'un commentaire incorrectement formaté + if(!@domxml_open_mem('<comment>' . $Comment . '</comment>', DOMXML_LOAD_PARSING, $err)) + $Comment = '<![CDATA[' . $Comment . ']]>'; + $Data->Query("INSERT INTO Commentaires(MessId, Auteur, Adresse, AdresseMail, Comment, DateComment) VALUES({$id}, '{$Auteur}', '{$Adresse}', '{$AdresseMail}', '{$Comment}', '{$DateComment}')"); + $Data->Query("UPDATE Mess SET NbCommentaires=NbCommentaires+1 WHERE num_mess={$id}"); + } + + $Data->Query("SELECT * FROM Mess WHERE num_mess = {$id}"); + $row = $Data->GetRow(); + $mood = ''; + $Mess=$Data->utf8_ensure(str_replace("<P>","<p>",str_replace("</P>","</p>", $row['Message']))); + $dateFormatee = strftime("%A %d %B %Y, %Hh%M", strtotime($row['DatePost'])); + $Titre = $Data->utf8_ensure($row['Titre']); + $Titre_url = str_replace(" ", "_", strip_tags($Titre)); + $Titre_url = str_replace("-", "_", $Titre_url); + include("top.php"); + if(!empty($row['Emot'])) { + $mood = "<img src='/blog/mood/{$row['Emot']}.png' alt='Mood : {$row['Emot']}' class='mood' />"; + $row['Emot'] = " " . $row['Emot']; + } + echo(" + <div class='PostContent{$row['Emot']}'> + <h2>{$Titre} | <span class='Date'>{$dateFormatee}</span></h2> + {$mood} + {$Mess}<br /> + </div>"); + $Data->Query("SELECT * FROM Commentaires Where MessId={$id} ORDER BY num_comm"); + $defaultGravatar = urlencode("http://defr.org/Misc/NoGravatar.png"); + while(0 !== ($row = $Data->GetRow())) { + $dateFormatee = strftime(" à %Hh%M le <span class='Date'>%A %d %B %Y</span>", strtotime($row['DateComment'])); + $AdresseMail = $row['AdresseMail']; + $grav_id = md5($AdresseMail); + $Comment = nl2br($row['Comment']); + $Comment = str_replace(" & ", " & ", $Comment); + if($row['num_comm'] == 172) $Comment = str_replace("</sup>", "</del>", $Comment); + //if(stristr($Adresse, "@")) $Adresse = "mailto:" . $Adresse; + $betterHref = (stristr($row['Adresse'], 'http://') != false)?"href='{$row['Adresse']}'":''; + echo(" + <div class='PostContent'> + <div class='Infos'> + <img class='gravatar' src='http://www.gravatar.com/avatar.php?gravatar_id={$grav_id}&size=50&default=$defaultGravatar' alt='' /> + <a {$betterHref} name='c{$row['num_comm']}'>{$row['Auteur']}</a> {$dateFormatee} + </div> + <div class='Comment'>{$Comment}</div> + <br class='endComment' /> + </div>"); + } + echo(" + <div class='PostContent'> + <a href='/blog/'>Revenir au blog</a> + </div> + <div class='PostContent'> + <form method='post' action='#'> + <div id='FormCommentaire'> + Vous souhaitez ajouter un nouveau commentaire ? Faites donc, il vous suffit de remplir + le petit formulaire ci-dessous. + <input type='text' name='Auteur' value='Votre Nom' onfocus=\"if(this.value== this.getAttribute('value')) this.value='';\" /> + <input type='text' name='AdresseMail' value='Une adresse mail où vous joindre ? ( Non affichée publiquement )' onfocus=\"if(this.value == this.getAttribute('value')) this.value='';\"/> + <input type='text' name='Adresse' value='Un site web à vous ?' onfocus=\"if(this.value == this.getAttribute('value')) this.value='';\"/> + <textarea name='Comment' rows='10' cols='40' onfocus=\"if(this.value == 'Et z\'enfin, votre petit commentaire') this.value='';\">Et z'enfin, votre petit commentaire</textarea> + <input type='submit' value='Poster ce commentaire' /> + </div> + </form> + </div> + "); + include("foot.php"); +?>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/comment_back.php Sat Oct 20 14:15:10 2007 +0200 @@ -0,0 +1,84 @@ +<?php + setlocale(LC_ALL, "fr_FR.utf8@euro"); + include("classes.php"); + $id = $_GET['id']; + $Data = new DataAccess; + $Req = new Requete; + + $Auteur=$Req->get('Auteur'); + $Adresse=$Req->get('Adresse'); + $AdresseMail = $Req->get('AdresseMail'); + $Comment=$Req->get('Comment'); + $DateComment=gmdate("Y-m-d H:i:s", time() + 3600*2); + if(!is_null($Auteur) && $Auteur!='Votre Nom' && !empty($Comment)) { + // Prévention d'un "cassage" par ajout d'un commentaire incorrectement formaté + //if(!@domxml_open_mem('<comment>' . $Comment . '</comment>', DOMXML_LOAD_PARSING, $err)) + if(!DOMDocument::loadXML('<comment>' . $Comment . '</comment>')) + $Comment = '<![CDATA[' . $Comment . ']]>'; + $Data->debugQuery(" + INSERT INTO Commentaires(MessId, Auteur, Adresse, AdresseMail, Comment, DateComment) + VALUES({$id}, '{$Auteur}', '{$Adresse}', '{$AdresseMail}', '{$Comment}', '{$DateComment}') + "); + $Data->Query("UPDATE Mess SET NbCommentaires=NbCommentaires+1 WHERE num_mess={$id}"); + } + + $Data->Query("SELECT * FROM Mess WHERE num_mess = {$id}"); + $row = $Data->GetRow(); + $mood = ''; + $Mess=$Data->utf8_ensure(str_replace("<P>","<p>",str_replace("</P>","</p>", $row['Message']))); + $dateFormatee = strftime("%A %d %B %Y, %Hh%M", strtotime($row['DatePost'])); + $Titre = $Data->utf8_ensure($row['Titre']); + $Titre_url = str_replace(" ", "_", strip_tags($Titre)); + $Titre_url = str_replace("-", "_", $Titre_url); + include("top.php"); + if(!empty($row['Emot'])) { + $mood = "<img src='/blog/mood/{$row['Emot']}.png' alt='Mood : {$row['Emot']}' class='mood' />"; + $row['Emot'] = " " . $row['Emot']; + } + echo(" + <div class='PostContent{$row['Emot']}'> + <h2>{$Titre} | <span class='Date'>{$dateFormatee}</span></h2> + {$mood} + {$Mess}<br /> + </div>"); + $Data->Query("SELECT * FROM Commentaires Where MessId={$id} ORDER BY num_comm"); + $defaultGravatar = urlencode("http://defr.org/Misc/NoGravatar.png"); + while(0 !== ($row = $Data->GetRow())) { + $dateFormatee = strftime(" à %Hh%M le <span class='Date'>%A %d %B %Y</span>", strtotime($row['DateComment'])); + $AdresseMail = $row['AdresseMail']; + $grav_id = md5($AdresseMail); + $Comment = nl2br($row['Comment']); + $Comment = str_replace(" & ", " & ", $Comment); + if($row['num_comm'] == 172) $Comment = str_replace("</sup>", "</del>", $Comment); + //if(stristr($Adresse, "@")) $Adresse = "mailto:" . $Adresse; + $betterHref = (stristr($row['Adresse'], 'http://') != false)?"href='{$row['Adresse']}'":''; + echo(" + <div class='PostContent'> + <div class='Infos'> + <img class='gravatar' src='http://www.gravatar.com/avatar.php?gravatar_id={$grav_id}&size=50&default=$defaultGravatar' alt='' /> + <a {$betterHref} name='c{$row['num_comm']}'>{$row['Auteur']}</a> {$dateFormatee} + </div> + <div class='Comment'>{$Comment}</div> + <br class='endComment' /> + </div>"); + } + echo(" + <div class='PostContent'> + <a href='/blog/'>Revenir au blog</a> + </div> + <div class='PostContent'> + <form method='post' action='#'> + <div id='FormCommentaire'> + Vous souhaitez ajouter un nouveau commentaire ? Faites donc, il vous suffit de remplir + le petit formulaire ci-dessous. + <input type='text' name='Auteur' value='Votre Nom' onfocus=\"if(this.value== this.getAttribute('value')) this.value='';\" /> + <input type='text' name='AdresseMail' value='Une adresse mail où vous joindre ? ( Non affichée publiquement )' onfocus=\"if(this.value == this.getAttribute('value')) this.value='';\"/> + <input type='text' name='Adresse' value='Un site web à vous ?' onfocus=\"if(this.value == this.getAttribute('value')) this.value='';\"/> + <textarea name='Comment' rows='10' cols='40' onfocus=\"if(this.value == 'Et z\'enfin, votre petit commentaire') this.value='';\">Et z'enfin, votre petit commentaire</textarea> + <input type='submit' value='Poster ce commentaire' /> + </div> + </form> + </div> + "); + include("foot.php"); +?>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/comment_old.php Sat Oct 20 14:15:10 2007 +0200 @@ -0,0 +1,85 @@ +<?php + setlocale(LC_ALL, "fr_FR.utf8@euro"); + include("classes.php"); + $id = $_GET['id']; + $Data = new DataAccess; + $Req = new Requete; + + $Auteur=$Req->get('Auteur'); + $Adresse=$Req->get('Adresse'); + $AdresseMail = $Req->get('AdresseMail'); + $Comment=$Req->get('Comment'); + $DateComment=gmdate("Y-m-d H:i:s", time() + 3600*2); + if(!is_null($Auteur) && $Auteur!='Votre Nom' && !empty($Comment)) { + // Prévention d'un "cassage" par ajout d'un commentaire incorrectement formaté + //if(!@domxml_open_mem('<comment>' . $Comment . '</comment>', DOMXML_LOAD_PARSING, $err)) + if(!DOMDocument::loadXML('<comment>' . $Comment . '</comment>')) + $Comment = '<![CDATA[' . $Comment . ']]>'; + $ip = $_SERVER['REMOTE_ADDR']; + $Data->debugQuery(" + INSERT INTO Commentaires(MessId, Auteur, Adresse, AdresseMail, Comment, DateComment, ip) + VALUES({$id}, '{$Auteur}', '{$Adresse}', '{$AdresseMail}', '{$Comment}', '{$DateComment}', '{$ip}') + "); + $Data->Query("UPDATE Mess SET NbCommentaires=NbCommentaires+1 WHERE num_mess={$id}"); + } + + $Data->Query("SELECT * FROM Mess WHERE num_mess = {$id}"); + $row = $Data->GetRow(); + $mood = ''; + $Mess=$Data->utf8_ensure(str_replace("<P>","<p>",str_replace("</P>","</p>", $row['Message']))); + $dateFormatee = strftime("%A %d %B %Y, %Hh%M", strtotime($row['DatePost'])); + $Titre = $Data->utf8_ensure($row['Titre']); + $Titre_url = str_replace(" ", "_", strip_tags($Titre)); + $Titre_url = str_replace("-", "_", $Titre_url); + include("top.php"); + if(!empty($row['Emot'])) { + $mood = "<img src='/blog/mood/{$row['Emot']}.png' alt='Mood : {$row['Emot']}' class='mood' />"; + $row['Emot'] = " " . $row['Emot']; + } + echo(" + <div class='PostContent{$row['Emot']}'> + <h2>{$Titre} | <span class='Date'>{$dateFormatee}</span></h2> + {$mood} + {$Mess}<br /> + </div>"); + $Data->Query("SELECT * FROM Commentaires Where MessId={$id} ORDER BY num_comm"); + $defaultGravatar = urlencode("http://defr.org/Misc/NoGravatar.png"); + while(0 !== ($row = $Data->GetRow())) { + $dateFormatee = strftime(" à %Hh%M le <span class='Date'>%A %d %B %Y</span>", strtotime($row['DateComment'])); + $AdresseMail = $row['AdresseMail']; + $grav_id = md5($AdresseMail); + $Comment = nl2br($row['Comment']); + $Comment = str_replace(" & ", " & ", $Comment); + if($row['num_comm'] == 172) $Comment = str_replace("</sup>", "</del>", $Comment); + //if(stristr($Adresse, "@")) $Adresse = "mailto:" . $Adresse; + $betterHref = (stristr($row['Adresse'], 'http://') != false)?"href='{$row['Adresse']}'":''; + echo(" + <div class='PostContent'> + <div class='Infos'> + <img class='gravatar' src='http://www.gravatar.com/avatar.php?gravatar_id={$grav_id}&size=50&default=$defaultGravatar' alt='' /> + <a {$betterHref} name='c{$row['num_comm']}'>{$row['Auteur']}</a> {$dateFormatee} + </div> + <div class='Comment'>{$Comment}</div> + <br class='endComment' /> + </div>"); + } + echo(" + <div class='PostContent'> + <a href='/blog/'>Revenir au blog</a> + </div> + <div class='PostContent'> + <form method='post' action='#'> + <div id='FormCommentaire'> + Vous souhaitez ajouter un nouveau commentaire ? Faites donc, il vous suffit de remplir + le petit formulaire ci-dessous. + <input type='text' name='Auteur' value='Votre Nom' onfocus=\"if(this.value== this.getAttribute('value')) this.value='';\" /> + <input type='text' name='AdresseMail' value='Une adresse mail où vous joindre ? ( Non affichée publiquement )' onfocus=\"if(this.value == this.getAttribute('value')) this.value='';\"/> + <input type='text' name='Adresse' value='Un site web à vous ?' onfocus=\"if(this.value == this.getAttribute('value')) this.value='';\"/> + <textarea name='Comment' rows='10' cols='40' onfocus=\"if(this.value == 'Et z\'enfin, votre petit commentaire') this.value='';\">Et z'enfin, votre petit commentaire</textarea> + <input type='submit' value='Poster ce commentaire' /> + </div> + </form> + </div> + "); + include("foot.php"); +?>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/css/Brushed.css Sat Oct 20 14:15:10 2007 +0200 @@ -0,0 +1,66 @@ +/* Dual Blog v10 : OS Edition + Brushed Version */ + +#Link, #Link li, dl, dt, dd {display:block; margin:0px;list-style-type:none;} + +html {margin:0px;background:#EFEFEF; + font-family:Tahoma, Verdana, Arial, serif;font-size:11px;} + +p {margin:0px;padding:0px;} + +#Main {margin:0px;margin-left:-374px;margin-top:-286px;left:50%;top:50%; + position:absolute;width:768px;height:573px;overflow:hidden; + padding-top:85px;padding-left:4px;padding-right:9px; + background:url('./Res_Brushed/Fond_Main.jpg') no-repeat;} + +#Adresse {position:absolute;left:512px;top:57px;width:237px;} + +#Link {position:absolute;left:484px;top:70px;border:1px #B3A868 solid;width:246px;height:100px; + background:white url('./Gimp.jpg') 182px 36px no-repeat;overflow:auto;padding:2px;padding-left:6px;padding-right:6px; + z-index:100;display:none;} + +/* Style sur la colonne de gauche ^^; */ + +#SideBar {background:#CDCDCD;position:absolute;left:4px;top:83px; + width:235px;height:485px;overflow:auto;border-right:1px black dashed;} + +#SideBar dt, #SideBar dd {margin-left:auto;margin-right:auto; + padding-left:10px;padding-right:10px;padding-top:4px; + } + +#SideBar dt {background:url('./Res_Brushed/Brush_Title.png') no-repeat;height:17px;width:198px; + font-weight:bold;color:#575233;margin-top:12px;} + +#SideBar dd {background:url('./Res_Brushed/Brush_Side.png') repeat-y;color:#000000;width:198px; + text-align:left;padding-bottom:4px;border-top:none;} + +/* Style sur la partie principale du blog : les posts */ + +#Posts {top:83px;left:240px;width:524px;height:485px;overflow:auto; + position:absolute;background:url('Res_Brushed/Degrade_Post.gif') repeat-y;} + +.PostContent h2 { + margin:-19px auto 5px; + padding:0px 10px; + border:1px black dashed;background:#EFEFEF; + font-size:1.1em;} + +.PostContent {margin:10px;margin-top:12px;padding:10px;text-align:justify; + background:url('./Res_Brushed/Fond_Post.gif');border:1px black solid;} + +/* Style appliqués sur les span */ + +i, .i, em {font-style:italic;color:#333399;} + +.b {font-weight:bold;} + +/* Styles sur les liens */ +a {color:#333399;} +a:hover {color:#000000;} +#Link a {text-decoration:none;margin-left:8px;border-bottom:1px black dotted;} + +/* Style sur le tagboard ^^ */ +#TagBoard {width:175px;height:465px;border:none;margin:0px;padding:0px; + margin-left:auto;margin-right:auto;} + +p.center img {width:450px;}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/css/HoverExp.css Sat Oct 20 14:15:10 2007 +0200 @@ -0,0 +1,50 @@ +/* Dual Blog, :hover-ed edition ^^; */ + +#Link, #Link li, dl, dt, dd {display:block; margin:0px;list-style-type:none;} + +body {margin:20px;} + +#Main {border:1px black solid;padding:5px;padding-left:220px;} + +h1 {display:none;} + +/* SideBar */ +#SideBar {width:200px;float:left;padding:10px;padding-top:0px;position:absolute;left:20px;top:20px;} +#SideBar dt {background:#EEE;border:1px black solid;border-bottom:1px dotted;padding:0px 10px 0px 10px; + margin-top:10px;font-weight:bold;} +#SideBar dd {border:1px black solid;margin:0px;border-top:none;padding:10px;font-size:0.9em;} +#SideBar dd p {margin:0px;padding:0px;} +#SideBar dd p:first-letter {color:#06F;} +/* Hover sur la colonne de gauche, youplaboom ^^; */ +#SideBar dt:hover {background:#333;color:white;} +#SideBar dt:hover + #SideBar dd, #SideBar dd:hover {background:#333;color:white;} +#SideBar dt:hover + #SideBar dd a, #SideBar dd:hover a {color:#CCC;border-bottom:1px #CCC solid;} +#SideBar dd a:hover {color:#FFF;border-bottom:1px #CCC dashed;} +#SideBar dt:hover + #SideBar dd p:first-letter, #SideBar dd:hover p:first-letter {color:#FC0;} + +/* Posts */ +#Posts {border-left:1px black solid;padding:5px;padding-left:10px} +.PostContent {text-align:justify;margin-bottom:10px;border-bottom:1px black solid;padding:5px;} +.PostContent h2 {margin-left:auto;margin-right:auto;text-align:center;font-weight:bold;} + +/* Some :hover magic */ +.PostContent:hover {background:#333;color:#FC0;} +.PostContent:hover h2 {color:#3C9;} +.PostContent:hover span {color:#396;} +.PostContent:hover p:first-letter{color:#06F !important;} +.PostContent:hover a {color:#0CF;border-bottom:1px #FFF dashed;} +/* on cache la méchante iframe... */ +iframe {display:none;} + +#Adresse {display:none;} +#Link {display:block;width:auto;overflow:auto;height:100px;border-left:1px black solid; border-bottom:1px black dashed;padding:5px;} + /*#Link A {position:relative;left:10px;} Fait sortir bizarrement du flow sous IE... */ +#Link a {margin-left:10px;} + +#SideBar ul, #SideBar li {margin:0px;padding:0px;list-style-type:none;} + +.i {font-style:italic;} +.b {font-weight:bold;} + +a {color:#666;border-bottom:1px #333 solid;text-decoration:none;} +a:hover {border-bottom:1px #999 dashed;color:#000;}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/css/Lite.css Sat Oct 20 14:15:10 2007 +0200 @@ -0,0 +1,60 @@ +/* Dual Blog v10 : OS Edition + Lite Version */ + +#Link, #Link li, dl, dt, dd {display:block; margin:0px;list-style-type:none;} + +body {margin:0px;font-family:Tahoma, Verdana, Arial, serif;font-size:11px;} + +p {margin:0px;padding:0px;} + +#Main {margin:0px;margin-left:-374px;margin-top:-286px;left:50%;top:50%; + position:absolute;width:745px;height:486px;overflow:hidden; border:1px black solid;} + +#Adresse {display:none;} + +#Link {width:320px;height:70px;position:absolute;/*left:470px;*/top:10px;right:3px; + background:white url('./Gimp.jpg') 250px 6px no-repeat;overflow:auto;padding:2px;padding-left:6px;padding-right:6px; + z-index:100;display:block;} + +/* Style sur la colonne de gauche ^^; */ + +#SideBar {width:230px;height:480px;overflow:auto;border-right:1px black dashed;} + +#SideBar dt, #SideBar dd {margin-left:auto;margin-right:auto; + padding-left:10px;padding-right:10px;padding-top:4px; + } + +#SideBar dt {height:17px;width:180px;background:#DDDDDD;border:black 1px solid; + border-bottom:dotted 1px; font-weight:bold;color:#575233;margin-top:12px;} +#SideBar dt:hover {background:#F3F3F3;} + +#SideBar dd {background:#F3F3F3;color:#000000;width:180px;border:1px black solid; + text-align:left;padding-bottom:4px;border-top:none;} + +/* Style sur la partie principale du blog : les posts */ + +#Posts {width:516px;height:384px;overflow:auto;position:absolute;left:226px;top:100px;} + +.PostContent {margin:10px;margin-top:12px;padding:10px;text-align:justify; + border:1px black solid;background:url('./Gimp_grayscale.jpg') bottom right no-repeat;} + +.PostContent h2 { + margin:-19px auto 5px; + padding:0px 10px; + border:1px black dashed;background:#F3F3F3;} + +/* Style appliqués sur les span */ + +.i {font-style:italic;color:#333399;} + +.b {font-weight:bold;} + +/* Styles sur les liens */ +a {color:#333399;} +a:hover {color:#000000;} +#Link a {text-decoration:none;margin-left:8px;border-bottom:1px black dotted;} + +/* Style sur le tagboard ^^ */ +#TagBoard {width:180px;height:472px;border:none;margin:0px;padding:0px; + margin-left:auto;margin-right:auto;} +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/css/Lite_nv.css Sat Oct 20 14:15:10 2007 +0200 @@ -0,0 +1,63 @@ +/* Dual Blog v10 : OS Edition + Lite Version */ + +#Link, #Link li, dl, dt, dd {display:block; margin:0px;list-style-type:none;} + +body {margin:20px;padding:0px;font-family:Tahoma, Verdana, Arial, serif;font-size:11px;} + +p {margin:0px;padding:0px;} + +#Main {margin:10px;border:1px black solid;direction:rtl;margin-top:0px;} + +#Adresse {display:none;} + +#Link {height:70px;position:absolute;background:white url('Res_OliveVerde/Gimp.jpg') no-repeat; + overflow:auto;margin:0px;padding:2px;padding-left:6px;padding-right:6px; + z-index:100;display:none;top:40px;left:265px;} + +/* Style sur la colonne de gauche ^^; */ + +#SideBar {width:230px;margin:3px;position:absolute;right:30px;top:70px;} + +#SideBar dt, #SideBar dd { + margin:0px auto; + padding:4px 10px; + direction:ltr; + } + +#SideBar dt {height:17px;width:180px;background:#DDDDDD;border:black 1px solid; + border-bottom:dotted 1px; font-weight:bold;color:#575233;margin-top:12px;} +#SideBar dt:hover {background:#F3F3F3;} + +#SideBar dd {background:#F3F3F3;color:#000000;width:180px;border:1px black solid; + text-align:left;padding-bottom:4px;border-top:none;} + +/* Style sur la partie principale du blog : les posts */ + +#Posts {margin-right:234px;direction:ltr;border-right:1px black dashed;padding-top:0px;} + +.PostContent {margin:10px;margin-top:25px;padding:10px;text-align:justify; + border:1px black solid;background:url('Res_OliveVerde/Gimp_grayscale.jpg') bottom right no-repeat;} + +.PostContent h2 { + margin:-19px auto 5px; + padding:0px 10px; + border:1px black dashed;background:#F3F3F3;} + +/* Style appliqués sur les span */ + +.i {font-style:italic;color:#333399;} + +.b {font-weight:bold;} + +/* Styles sur les liens */ +a {color:#333399;} +a:hover {color:#000000;} +#Link a {text-decoration:none;margin-left:8px;border-bottom:1px black dotted;} + +/* Style sur le tagboard ^^ */ +#TagBoard {width:180px;height:472px;border:none;margin:0px;padding:0px; + margin-left:auto;margin-right:auto;} + +a img {padding:10px;margin:0px 10px 10px;border:1px #999 solid;background:#EEE;} +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/css/OliveVerde.css Sat Oct 20 14:15:10 2007 +0200 @@ -0,0 +1,68 @@ +/* Dual Blog v10 : OS Edition + Olive Verde Version */ + +#Link, #Link li, dl, dt, dd {display:block; margin:0px;list-style-type:none;} + +html {margin:0px;background:url('Res_OliveVerde/Fond.png') repeat-y; + font-family:Tahoma, Verdana, Arial, serif;font-size:11px;} + +p {margin:0px;padding:0px;} + +#Main {margin:0px;margin-left:-374px;margin-top:-286px;left:50%;top:50%; + position:absolute;width:745px;height:486px;overflow:hidden; + padding-top:85px;padding-left:4px;padding-right:9px; + background:url('Res_OliveVerde/FondMain.png') no-repeat;} + +#Adresse {position:absolute;left:512px;top:57px;width:237px;} + +#Link {position:absolute;left:484px;top:70px;border:1px #B3A868 solid;width:246px;height:100px; + background:white url('Res_OliveVerde/Gimp.jpg') 182px 36px no-repeat;overflow:auto;padding:2px;padding-left:6px;padding-right:6px; + z-index:100;display:none;} + +/* Style sur la colonne de gauche ^^; */ + +#SideBar {background:#DADBB5;position:absolute;left:4px;top:88px; + width:222px;height:478px;overflow:auto;border-right:1px black dashed;} + +#SideBar dt, #SideBar dd {margin-left:auto;margin-right:auto; + padding-left:10px;padding-right:10px;padding-top:4px; + } + +#SideBar dt {background:url('Res_OliveVerde/ShellBar.gif') no-repeat;height:17px;width:182px; + font-weight:bold;color:#575233;margin-top:12px;} + +#SideBar dd {background:#F0EBD7;color:#000000;width:180px;border:1px #B3A868 solid; + text-align:left;padding-bottom:4px;border-top:none;} + +/* Style sur la partie principale du blog : les posts */ + +#Posts {top:88px;left:227px;width:524px;height:478px;overflow:auto; + position:absolute;background:url('Res_OliveVerde/FondPost.png') repeat-y;} + +.PostContent {margin:10px;margin-top:12px;padding:10px;text-align:justify; + background:url('Res_OliveVerde/FondPostContent.png');border:1px #B3A868 solid;} + +.PostContent h2 { + margin:-19px auto 5px; + padding:0px 10px; + border:1px black dashed; + background:url('Res_OliveVerde/FondTitre.png'); + font-size:1.1em;} + +/* Style appliqués sur les span */ + +.i {font-style:italic;color:#333399;} + +.b {font-weight:bold;} + +/* Styles sur les liens */ +a {color:#333399;} +a:hover {color:#000000;} +#Link a {text-decoration:none;margin-left:8px;border-bottom:1px black dotted;} + +/* Style sur le tagboard ^^ */ +#TagBoard {width:175px;height:465px;border:none;margin:0px;padding:0px; + margin-left:auto;margin-right:auto;} + +p.center img {width:450px;} +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/css/Somatic.css Sat Oct 20 14:15:10 2007 +0200 @@ -0,0 +1,236 @@ +/* Dual Blog, Somatic Edition */ + +html { + margin:0; + padding:0; + background:#EEE; + font-family:"Bitstream Vera Sans", "Lucida Grande", Tahoma, Verdana, Arial, sans serif; +} + +#Link, #Link li, dl, dt, dd {display:block; margin:0;list-style-type:none;} + +#Main { + width:798px; + margin:5px auto 0; + padding:0; + background:white; + border:1px #333 solid; + border-bottom:0; +} + +h1 { + margin:0 0 150px; + padding:5px; + height:21px; + text-align:center; + border-bottom:1px #333 solid; + font-size:17px; + background-image:url('Res_Somatic/bg_test.png'); + position:relative; + z-index:3; +} + +#Adresse, #SideBar dt { + position:absolute; + top:38px; + left:50%; + display:block; + width:132px; + padding-top:135px; + background-repeat:no-repeat; + background-position:2px 5px; + background-color:#FFF; + text-align:center; + border-bottom:1px #333 solid; + border-right:1px #333 solid; + font-size:0.9em; + z-index:2; + cursor:pointer; +} + +/* Let's give some 8-bits pngs to IE... */ +* html #Adresse {background-image:url('icons/fav_8bit.png') !important;} +* html #About {background-image:url('icons/connect_8bit.png') !important;} +* html #Profile {background-image:url('icons/profile_8bit.png') !important;} +* html #Like {background-image:url('icons/like_8bit.png') !important;} +* html #Geekness {background-image:url('icons/geek_8bit.png') !important;} +* html #Archives {background-image:url('icons/Hank_8bit.png') !important;} +* html #ToDo {background-image:url('icons/todo_8bit.png') !important;} + +#Adresse { + margin-left:-398px; + background-image:url('icons/fav.png'); +} + +#About { + margin-left:-265px; + background-image:url('icons/connect.png'); +} + +#Profile { + margin-left:-132px; + background-image:url('icons/profile.png'); +} + +#Like { + margin-left:1px; + background-image:url('icons/like.png'); +} + +#Geekness { + margin-left:134px; + background-image:url('icons/geek.png'); +} + +#Archives { + margin-left:134px; + background-image:url('icons/Hank.png'); +} + +#ToDo { + margin-left:267px; + border-right:0 !important; + background-image:url('icons/todo.png'); +} + +#SideBar dt:hover, #Adresse:hover {background-color:#dec;} + +.Actif {background-color:#eee !important;} + +#SideBar p, #Posts {margin:5px 0; padding:0;text-align:justify;} + +#Link, #SideBar dd { + font-size:0.9em; + border-bottom:1px #333 solid; + padding:5px 10px; + background:url('Res_Somatic/bg_test.png') #fff; + height:150px; + overflow:auto; + position:absolute; + top:187px; + width:778px; + z-index:0; +} + +#Link {display:none;} + +.PostContent { + padding:10px; + text-align:justify; + border-bottom: 1px #333 solid; +} + +.PostContent h2 { + font-weight:bold; + text-align:center; + border:1px #666 solid; + margin:0 15px; + background:url('Res_Somatic/bg_titre.png'); + font-size:1.2em; +} + +.PostContent h2 abbr { + padding:2px 0; +} + +#SideBar a, #Link a {text-decoration:none;color:#666;font-style:italic;margin-bottom:1px;border-bottom:1px dashed;} +#SideBar li, #Link li {line-height:1.5em;} +#Link a {margin-left:10px;} +#SideBar a:hover, #Link a:hover, #Posts a:hover {border-bottom:1px solid;} +#SideBar ul, .PostContent ul {list-style:url(Res_Somatic/puce.gif) outside;} + +a:not([href]) {border-bottom:0 !important;} + +a img { + padding:10px; + margin:0 10px 10px; + border:1px solid #795; + background-image:url('Res_Somatic/bg_test.png'); +} + +code, blockquote { + border:1px #795 solid; + border-left-width:3px; + background:url('Res_Somatic/bg_test.png') #FFE; + padding:2px 6px; +} + +p.code code { + white-space:pre; + overflow:auto; + display:block; +} + +code {line-height:1.5em;} + +em, i, .i {color:#67B;} +#Posts a {color:#795;text-decoration:none;} +#Posts {padding-top:170px;} + +.mood, .gravatar, .gallerie { + float:left; + margin:1.5em 1em 0.5em 0; + padding:10px; + border:1px #795 solid; + background:url(Res_Somatic/bg_test.png); +} + +.gravatar { + margin:0 1em 0 0 ; +} + +.gallerie { + padding:1.5em; + width:300px; +} + +.Tongue { + background:url(/blog/mood/light/Tongue.png) bottom right no-repeat; +} + +.Neutral { + background:url(/blog/mood/light/Neutral.png) bottom right no-repeat; +} + +.Goggle { + background:url(/blog/mood/light/Goggle.png) bottom right no-repeat; +} + +.Clop { + background:url(/blog/mood/light/Clop.png) bottom right no-repeat; +} + +.Cry { + background:url(/blog/mood/light/Cry.png) bottom right no-repeat; +} + +.Oohh { + background:url(/blog/mood/light/Oohh.png) bottom right no-repeat; +} + +.Love { + background:url(/blog/mood/light/Love.png) bottom right no-repeat; +} + +.PostContent dd, .PostContent dt { + border:2px #795 solid; + padding-left:0.5em; +} + +.PostContent dt { + border-width:2px 2px 0; + background:url(Res_Somatic/bg_test.png); + padding:0.3em 1em; +} + +.PostContent dd { + border-top:1px dashed #795; + margin-bottom:1em; + padding:0 1em; +} + +.PostContent dd ul { + padding:0; + list-style-position:inside; +} +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/css/Somatic.css_ Sat Oct 20 14:15:10 2007 +0200 @@ -0,0 +1,214 @@ +/* Dual Blog, Somatic Edition */ + +html, body { + margin:0; + padding:0; + background:#EEE; + font-family:"Bitstream Vera Sans", "Lucida Grande", Tahoma, Verdana, Arial, sans serif; +} + +#Link, #Link li, dl, dt, dd {display:block; margin:0;list-style-type:none;} + +#Main {width:798px; margin:5px auto 0px; background:white; border:1px #333 solid;border-bottom:0px;/*padding-top:181px;*/} + +h1 { + margin:0px; + margin-bottom:150px; + padding:5px; + width:786px; + height:21px; + text-align:center; + border-bottom:1px #333 solid; + font-size:17px; + background-image:url('Res_Somatic/bg_test.png'); +} + +#Adresse, #SideBar dt { + position:absolute; + top:38px; + left:50%; + display:block; + width:132px; + padding-top:135px; + background-repeat:no-repeat; + background-position:2px 5px; + background-color:#FFF; + text-align:center; + border-bottom:1px #333 solid; + border-right:1px #333 solid; + font-size:0.9em; + z-index:2; + cursor:pointer; +} + +/* Let's give some 8-bits pngs to IE... */ +* html #Adresse {background-image:url('icons/fav_8bit.png') !important;} +* html #About {background-image:url('icons/connect_8bit.png') !important;} +* html #Profile {background-image:url('icons/profile_8bit.png') !important;} +* html #Like {background-image:url('icons/like_8bit.png') !important;} +* html #Geekness {background-image:url('icons/geek_8bit.png') !important;} +* html #Archives {background-image:url('icons/Hank_8bit.png') !important;} +* html #ToDo {background-image:url('icons/todo_8bit.png') !important;} +#Adresse { + margin-left:-398px; + background-image:url('icons/fav.png'); +} + +#About { + margin-left:-265px; + background-image:url('icons/connect.png'); +} + +#Profile { + margin-left:-132px; + background-image:url('icons/profile.png'); +} + +#Like { + margin-left:1px; + background-image:url('icons/like.png'); +} + +#Geekness { + margin-left:134px; + background-image:url('icons/geek.png'); +} + +#Archives { + margin-left:134px; + background-image:url('icons/Hank.png'); +} + +#ToDo { + margin-left:267px; + border-right:0px; + background-image:url('icons/todo.png'); +} + +#SideBar dt:hover, #Adresse:hover {background-color:#dec;} + +.Actif {background-color:#eee !important;} + +#SideBar p, #Posts {margin:5px 0px; padding:0px;text-align:justify;} + +#Link, #SideBar dd { + font-size:0.9em; + border-bottom:1px #333 solid; + padding:5px 10px; + background-color:#FFF; + background-image:url('Res_Somatic/bg_test.png'); + height:150px; + overflow:auto; + position:absolute; + top:187px; + width:778px; + z-index:0; +} + +#Link {display:none;} + +.PostContent { + padding:10px; + text-align:justify; + border-bottom: 1px #333 solid; +} + +.PostContent h2 { + font-weight:bold; + text-align:center; + border:1px #666 solid; + margin:0px 15px; + background:url('Res_Somatic/bg_titre.png'); + font-size:1.2em; +} + +.PostContent h2 abbr { + padding:2px 0; +} + +#SideBar a, #Link a {text-decoration:none;color:#666;font-style:italic;margin-bottom:1px;border-bottom:1px dashed;} +#SideBar li, #Link li {line-height:1.5em;} +#Link a {margin-left:10px;} +#SideBar a:hover, #Link a:hover, #Posts a:hover {border-bottom:1px solid;} +#SideBar ul, .PostContent ul {list-style:url(Res_Somatic/puce.gif) outside;} + + +a img {padding:10px;margin:0px 10px 10px;border:1px solid #795;background-image:url('Res_Somatic/bg_test.png');} + +code, blockquote {border:1px #795 solid; border-left-width:3px; background:url('Res_Somatic/bg_test.png') #FFE;padding:2px 6px;} + +p.code code {white-space:pre;overflow:auto;display:block;/*width:758px;*/} + +code {line-height:1.5em;} + +em, i, .i {color:#67B;} +#Posts a {color:#795;text-decoration:none;} +#Posts {padding-top:170px;} + +.mood, .gravatar, .gallerie { + float:left; + margin:1.5em 1em 0.5em 0; + padding:10px; + border:1px #795 solid; + background:url(Res_Somatic/bg_test.png); +} + +.gravatar { + margin:0 1em 0 0 ; +} + +.gallerie { + padding:1.5em; + width:300px; +} + +.Tongue { + background:url(/blog/mood/light/Tongue.png) bottom right no-repeat; +} + +.Neutral { + background:url(/blog/mood/light/Neutral.png) bottom right no-repeat; +} + +.Goggle { + background:url(/blog/mood/light/Goggle.png) bottom right no-repeat; +} + +.Clop { + background:url(/blog/mood/light/Clop.png) bottom right no-repeat; +} + +.Cry { + background:url(/blog/mood/light/Cry.png) bottom right no-repeat; +} + +.Oohh { + background:url(/blog/mood/light/Oohh.png) bottom right no-repeat; +} + +.Love { + background:url(/blog/mood/light/Love.png) bottom right no-repeat; +} + +.PostContent dd, .PostContent dt { + border:2px #795 solid; + padding-left:0.5em; +} + +.PostContent dt { + border-width:2px 2px 0; + background:url(Res_Somatic/bg_test.png); + padding:0.3em 1em; +} + +.PostContent dd { + border-top:1px dashed #795; + margin-bottom:1em; + padding:0 1em; +} + +.PostContent dd ul { + padding:0; + list-style-position:inside; +} +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/css/Somatic_JS.css Sat Oct 20 14:15:10 2007 +0200 @@ -0,0 +1,14 @@ +/* Somatic_JS.css : Importé par JavaScript, dans le but de + donner une apparence laissant tout accessible aux navigateurs + graphiques avec le JavaScript desactivé... */ + +#SideBar dt { + left:50% !important; +} + +#SideBar dd { + position:absolute; + top:0px; +} +#Link {position:absolute; top:187px !important;} +#Posts {padding-top:170px !important;} \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/css/admin.css Sat Oct 20 14:15:10 2007 +0200 @@ -0,0 +1,95 @@ +html {background:#eee;min-height:100.05%;} + +body { + margin:15px auto; + width:596px; + background:#fff; + border:1px #333 solid; + min-height:200px; +} + +h3 {width:100%;text-align:center;display:none;} + +/* Formulaire : Styles généraux */ +form {padding:1em;} + +select {background:#f9f9f9; width:100%;} + +input, textarea { + background:#f9f9f9; + border:1px #999 dashed; + margin-top:10px; + width:100%; +} + +textarea{height:120px;} + +/* Style sur les listes */ + +ul {margin:0px 15px; padding:0px; border-left:2px solid #999;} +li {padding:2px 15px;margin:2px 0px;list-style:circle inside;} + +li:hover, li.Pinned {list-style:disc inside;background:#F9F9F9;border:black dashed;border-width:1px 1px 1px 0px;padding:1px 15px;} + +/* Le menu */ +ul#Menu {margin:0px;padding:0px;border-width:0px;} +ul#Menu li:last-child {border-right-width:0px;} +ul#Menu li {display:block;float:left;padding:10px !important;margin:0px !important;border:1px #666 solid;border-left-width:0px;border-top:0px;} +ul#Menu li:hover {background:#DEC;} +ul#Menu li.Actif {background:#EEE;} +ul#Menu div {display:block;padding-top:130px;width:128px;text-align:center;text-decoration:none;color:#333;background-repeat:no-repeat;} + +div#Brouillons {background:url(icons/connect.png);} +div#Posts {background:url(icons/network.png);} +div#Designs {background:url(icons/pictures.png);} +div#ToDo {background:url(icons/todo.png);} +div#Infos {width:100%;text-align:center;font-size:small;clear:both;} + +div[id^="Gest"] {clear:both;padding:15px 3px;display:none;} + +li > .Admin {display:block;text-indent:-1000px;font-size:0.8em;} +li:hover > .Admin, li.Pinned > .Admin {display:block;width:100%;text-align:right;font-size:0.8em;text-indent:0px;} +.Admin a, div#GestPosts a {text-decoration:none;color:#666;font-style:italic;} +.Admin a:hover, div#GestPosts a:hover {border-bottom:1px black dashed;} + +div#GestPosts > ul, div#GestPosts > ul > li {margin:0px;padding:2px;list-style:none;border-width:0px;} +div#GestPosts > ul > li:hover {background:transparent;border-width:0px;padding:2px;} + + + +.Add {margin-bottom:15px;} +.Add a {color:#333;text-decoration:none;border-bottom:1px black dashed;} +.Add form {display:none;} + + +#Infos a {text-decoration:none;color:#999;} + +#pubComment {white-space:pre;text-align:left;} + +/* + Formattage des erreurs envoyés par le DOMParser +*/ +parsererror, sourcetext {font-size:1em !important;font-weight:normal;background:transparent;} + +parsererror {border:1px black dotted;overflow:auto !important;} + +/* Tests */ + +option +{ + background:white; + vertical-align:center; + border-bottom:1px black solid; + padding:2px; +} + +option img +{ + vertical-align:middle; + padding:0 2em; +} + +select +{ + height:2em; +} \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/css/comment.css Sat Oct 20 14:15:10 2007 +0200 @@ -0,0 +1,33 @@ + .Infos {font-style:italic;} + #FormCommentaire {margin-top:15px;text-align:left;} + #Summary {display:none;} + + input, textarea {background:transparent;font-family:Tahoma, Lucida Sans, 'Luxi Sans', serif; + font-size:11px;margin:5px;padding:1px; + border:1px black solid;width:95%;} + + .cal {text-align:center;border-bottom:1px black solid;padding:1em 2em;} + + .calPrev {float:left;} + .calNext {float:right;} + + .Date {text-transform:capitalize;} + + .Done {text-decoration:line-through;} + + .center {text-align:center;} + + #Adresse, #SideBar dt {cursor:pointer;} + + p.code code {white-space:pre;overflow:auto;display:block;} + + .PostContent dt {font-weight:bold;} + + .endComment {clear:left;} + + .fold .comment {display:none;} + .fold:hover .comment {display:inline;} + + .postInfos {clear:both; font-size:0.9em;} + .Tags em {font-style:normal;} + .Tags a {color:inherit !important;} \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/css/comment.css_ Sat Oct 20 14:15:10 2007 +0200 @@ -0,0 +1,29 @@ + .Infos {font-style:italic;} + #FormCommentaire {margin-top:15px;text-align:left;} + #Summary {display:none;} + + input, textarea {background:transparent;font-family:Tahoma, Lucida Sans, 'Luxi Sans', serif; + font-size:11px;margin:5px;padding:1px; + border:1px black solid;width:95%;} + + .cal {text-align:center;border-bottom:1px black solid;padding:1em 2em;} + + .calPrev {float:left;} + .calNext {float:right;} + + .Date {text-transform:capitalize;} + + .Done {text-decoration:line-through;} + + .center {text-align:center;} + + #Adresse, #SideBar dt {cursor:pointer;} + + p.code code {white-space:pre;overflow:auto;display:block;} + + .PostContent dt {font-weight:bold;} + + .endComment {clear:left;} + + .fold .comment {display:none;} + .fold:hover .comment {display:inline;}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/css/icons/Somatic.css Sat Oct 20 14:15:10 2007 +0200 @@ -0,0 +1,119 @@ +/* Dual Blog, Somatic Edition */ + +html, body {margin:0px;padding:0px; background:#EEE; font-family:"Lucida Grande", Tahoma, Verdana, Arial, sans serif;font-size:12px;} + +#Link, #Link li, dl, dt, dd {display:block; margin:0px;list-style-type:none;} + +#Main {width:798px; margin:5px auto; background:white; border:1px #333 solid;/*padding-top:181px;*/} + +h1 { + margin:0px; + margin-bottom:150px; + padding:5px; + width:786px; + height:21px; + text-align:center; + border-bottom:1px #333 solid; + font-size:17px; + background-image:url('bg_test.png'); +} + +#Adresse, .SideTitle { + /*float:left;*/ + position:absolute; + top:38px; + left:50%; + display:block; + width:132px; + padding-top:135px; + background:no-repeat 2px 5px; + text-align:center; + border-bottom:1px #333 solid; + border-right:1px #333 solid; + font-size:0.9em; +} + +/* Let's give some 8-bits pngs to IE... */ +* html #Adresse {background-image:url('icons/fav_8bit.png') !important;} +* html #About {background-image:url('icons/connect_8bit.png') !important;} +* html #Profile {background-image:url('icons/profile_8bit.png') !important;} +* html #Like {background-image:url('icons/like_8bit.png') !important;} +* html #Geekness {background-image:url('icons/geek_8bit.png') !important;} +* html #Archives {background-image:url('icons/Hank_8bit.gif') !important;} +* html #ToDo {background-image:url('icons/todo_8bit.png') !important;} +#Adresse { + margin-left:-398px; + background-image:url('icons/fav.png'); +} + +#About { + margin-left:-265px; + background-image:url('icons/connect.png'); +} + +#Profile { + margin-left:-132px; + background-image:url('icons/profile.png'); +} + +#Like { + margin-left:1px; + background-image:url('icons/like.png'); +} + +#Geekness { + margin-left:134px; + background-image:url('icons/geek.png'); +} + +#Archives { + margin-left:134px; + background-image:url('icons/Hank.png'); +} + +#ToDo { + margin-left:267px; + border-right:0px; + background-image:url('icons/todo.png'); +} + +.SideTitle:hover, #Adresse:hover {background-color:#dec;} + +.Actif {background-color:#eee !important;} + +#SideBar p, #Posts {margin:5px 0px; padding:0px;text-align:justify;} + +#Link, .SideContent { + font-size:0.9em; + border-bottom:1px #333 solid; + padding:5px 10px; + background-image:url('Res_Somatic/bg_test.png'); + max-height:180px; + overflow:auto; +} + +#Link {display:none;} + +.PostContent { + padding:10px; + text-align:justify; + border-bottom: 1px #333 solid; +} + +.PostTitle { + font-weight:bold; + text-align:center; + border:1px #666 solid; + margin:0px 15px; + background:url('Res_Somatic/bg_titre.png'); +} + +#SideBar a, #Link a {text-decoration:none;color:#666;font-style:italic;} +#Link a {margin-left:10px;} +#SideBar a:hover, #Link a:hover, #Posts a:hover {border-bottom:1px black dashed;} +#SideBar ul {list-style-type:none;} + +a img {padding:10px;border:1px solid #795;background-image:url('Res_Somatic/bg_test.png');} + +i, .i {color:#67B;} +#Posts a {color:#795;text-decoration:none;}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/css/icons/top.php Sat Oct 20 14:15:10 2007 +0200 @@ -0,0 +1,178 @@ +<?php + if(!is_null($_SERVER['HTTP_ACCEPT']) && stristr($_SERVER['HTTP_ACCEPT'], 'application/xhtml+xml')) + header('Content-Type: application/xhtml+xml'); +?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> +<html xml:lang="fr" xmlns="http://www.w3.org/1999/xhtml"> + <head> + <link rel='StyleSheet' type='Text/CSS' href='/blog/comment.css' /> +<?php + $CkStyle=$_COOKIE['style']; + if(is_null($CkStyle)) $CkStyle="Somatic"; + $StyleSheets['0']=array( 0=> "OliveVerde", 1=> "OliveVerde.css"); + $StyleSheets['1']=array( 0=> "Lite", 1=> "Lite.css"); + $StyleSheets['2']=array( 0=> "Lite:Reloaded", 1=>"Lite_nv.css"); + $StyleSheets['3']=array( 0=> "Brushed", 1=> "Brushed.css"); + $StyleSheets['4']=array( 0=> ":Hover", 1=> "HoverExp.css"); + $StyleSheets['5']=array( 0=> "Somatic", 1=>"Somatic.css"); + + foreach($StyleSheets as $StyleSheet) { + if($StyleSheet[0] == $CkStyle) + echo(" <link rel='StyleSheet' type='Text/CSS' href='/blog/{$StyleSheet[1]}' title='{$StyleSheet[0]}' media='screen' />\n"); + else + echo(" <link rel='Alternate StyleSheet' type='Text/CSS' href='/blog/{$StyleSheet[1]}' title='{$StyleSheet[0]}' media='screen' />\n"); + } + if(!empty($Titre)) + echo(" <title>{$Titre} - Dual Blog</title>\n"); + else + echo(" <title>Dual { v10 : OS Edition } Blog</title>\n"); + + if(stristr($_SERVER['HTTP_USER_AGENT'], "MSIE") && !$CkStyle == "Somatic") + echo("<style type='Text/CSS'> +/*#Link {background:no-repeat fixed white url('/blog/GIMP.jpg') bottom right;}*/ +.PostTitle {margin-bottom:0px;} +</style>"); + ?> + <link rel="alternate" type="application/atom+xml" title="Atom feed" href="/blog/dualblog.atom" /> + <link rel="alternate" type="application/rss+xml" title="RSS 2.0 feed" href="/blog/dualblog.rss" /> + <link rel="icon" type="image/png" href="/favicon.png" /> + <meta http-equiv='content-type' content='text/html; charset=utf-8' /> + <script type="Text/JavaScript" src="/blog/RollUp.js"></script> + <!--[if lt IE 7]> + <link rel="stylesheet" href="/IE7/ie7-html.css" type="text/css"/> + <![endif]--> + </head> + + <body> + <div id="Main"> +<?php if(!empty($Summary)) { +echo(" + <q id='Summary'> + {$Summary} + </q>\n"); + } ?> + <h1>Dual Blog : DeFr's Weblog</h1> + <div id="Adresse"> + <span>Sites visités</span> + </div> + <ul id="Link"> + <li><span class='b'>Mes sites</span></li> + <li><a href='http://defr.org/'>Mon collectif</a></li> + <li><a href='http://weasleyswheezes.net'>WeasleysWheezes.net, aide aux webmasters</a></li> + <li><a href='http://mega-poudlard.com'>Mega-Poudlard.com, là ou la magie prend vie</a></li> + <li><span class='b'>Weblogs</span></li> + <li><a href='http://ania.weasleyswheezes.net/blog/' title='Friandises'>Ania</a></li> + <li><a href='http://cerveau.cest-pas-pareil.net' title='Cerveau Optionnel'>Circéus</a></li> + <li><a href='http://www.elventroublemakers.net/roe' title='Record of Evilness'>Drakys</a></li> + <li><a href='http://ennaluna.pitas.com' title='Deep Mistery'>Ennaluna</a></li> + <li><a href='http://kevin.descoubes.free.fr/kisscoolblog' title='KissCoolBlog'>Kévin</a></li> + <li><a href='http://marre.cest-pas-pareil.net' title='Y en a Marre !'>Rhiannon</a></li> + <li><a href='http://www.elventroublemakers.net/FS' title='FlipSide'>Spider</a></li> + <li><a href='http://ladyzeek.pitas.com' title='Strange World'>Zeek</a></li> + <li><span class='b'>Sites fréquement visités</span></li> + <li><a href='http://www.aqua-soft.org/' title="Site dédiée à l'obtention sur PC d'application repliquant le comportement de celles trouvées sur Mac, aux skins, icons, wallpapers...">Aqua-Soft</a></li> + <li><a href='http://www.deviantart.com' title='Erm, well, DeviantArt'>DeviantArt</a></li> + <li><a href='http://www.kingsofchaos.com' title='Text-based MMORPG'>Kings Of Chaos</a></li> + <li><a href='http://www.kochonland.com' title='Elevage de Kochon, Miva a réussi à me rendre addicted'>Kochonland</a></li> + <li><a href='http://www.mozdev.org' title='Site rassemblant les extensions programmées pour Firebird...'>MozDev.org</a></li> + <li><a href='http://www.mozillazine.org' title='Site de discussion sur Firebird, ses thèmes, son developpement...'>MozillaZine</a></li> + <li><a href='http://www.stardock.com' title="Site des créateurs d'ObjectDock et WindowBlinds entre autres">Stardock</a></li> + <li><a href='http://www.gimp.org/' title='Site du meilleur éditeur graphique, du moins à mon avis ^^;'>The GIMP</a></li> + <li><a href='http://www.wincustomize.com' title='Rassemblement de skins pour ObjectDock, Window Blinds & co'>WinCustomize</a></li> + <li><span class='b'>Cliques / Webrings</span></li> + <li><a href='http://mega-poudlard.com/Autres/JournalJedusor.asp'>Journaux de Jedusor - Mega-Poudlard.com</a></li> + <li><a href='http://xdaddict.weasleyswheezes.net/'>>> // XD Addict // <<</a></li> + <li><a href='http://duckie.sinfree.net/hxf/'>Hunter x Fanatic</a></li> + </ul> + + <dl id="SideBar"> + <dt class="SideTitle" id="About">About</dt> + <dd class="SideContent"> + <p>Quelques informations sur cette version ? Ca va être un peu difficile étant donné que le choix a été fait de laisser au visiteur + le choix de l'apparence graphique de ce blog par le biais de <i>feuilles de styles alternatives</i> ( oui, je viens de pondre la traduction, + non je sais pas si c'est une bonne idée de traduire des termes techniques à 23h45 un 31 décembre ). Toutefois, pour ce qui est du style + par défaut, <i>Somatic</i>, je peux vous dire que les icones viennent du talentuex <a href='http://www.dlanham.com'>David Lanham</a>, + pour <a href='http://www.theiconfactory.com'>The IconFactory</a>, dans son set Somatic Windows</p> + <p>Quelques faits ? La magie de pouvoir changer l'apparence de ce site à volonté ( quatres versions disponible en lien ci-dessous pour + le moment, plus si vous utilisez un navigateur vous laissant choisir par lui-même l'apparence parce que vous aurez alors en <i>bonus</i> + les versions que je considère, erm, <i>expérimentales</i> ) est du essentiellement au tandem XHTML 1.1 et CSS 2.1, permettant + de séparer le contenu, c'est à dire les informations elles-même, de la facon dont elles sont affichés à l'écran, ce qui permet entre autre + ce que vous avez sous les yeux ^^;</p> + <ul><li><a href="#" onclick="styleSwitch.set('OliveVerde');return false;">Olive Verde</a></li> + <li><a href="#" onclick="styleSwitch.set('Brushed'); return false;">Brushed</a></li> + <li><a href="#" onclick="styleSwitch.set('Lite:Reloaded');return false;">Lite : Reloaded</a></li> + <li><a href="#" onclick="styleSwitch.set('Somatic');return false;">Somatic</a></li> + </ul> + </dd> + + <dt class="SideTitle" id="Profile">Profile</dt> + <dd class="SideContent"> + <p>Franck ( Deroche Franck, oui, la parodie de James Bond est nulle, et alors ? ), 20 ans + est un habitant de Plaisir, France, la Terre, petite planète + du système solaire paumée entre Venus et Mars. Il est actuellement en école d'ingénieur + à l'<a href='http://www.ec-nantes.fr'>Ecole Centrale de Nantes</a> : une école d'ingénieur + généraliste permettant de faire à peu près n'importe quel travail d'ingénieur en sortie.</p> + <p>Toutefois la spécialisation de Franck sera très certainement dans le <i>domaine informatique</i>, pour lequel + il éprouve une passion sans bornes. Normallement, de telles études devrait lui laisser assez + de temps pour qu'il puisse faire ce qu'il veut à côte, mais ce n'est que la théorie...</p> + <p>Enfin, Franck est en ce moment très ( très très ) <i>amoureux</i> d'une jeune demoiselle + particulièrement <i>brillante</i> et <i>sympathique</i>, extrement <i>jolie</i>, adepte de <i>Zelda</i> et du <i>violet</i> + qui se reconnaitra très certainement, et qui malheureusement n'habite pas vraiment très près de Nantes...</p> + </dd> + + <dt class="SideTitle" id="Like">Like / Dislike</dt> + <dd class="SideContent"> + <p>Qu'est-ce que Franck peut bien aimer ? Erf, bah, tout à la fois, pas grand chose et un nombre impressionant de machins qui pourrait un être normallement + constitué ne serait probablement rien d'autre que tout au plus des anecdotes. Toutefois, il faut bien avouer que son passe-temps majeur n'a rien de bien + original, puisqu'il s'agit de l'informatique, ce media des temps modernes sur lequel on entend à peu près tout et n'importe quoi. Et en ce qui concerne + l'informatique, on peut alors dire que Franck est on ne peut plus écléctique, touchant un peu à tout... Ce qui retient le plus son attention toutefois, en + ce moment du moins, reste la <span class="i">création de sites webs</span>, la <span class="i">programmation</span> et la <span class="i">customisation</span> de son environement, à un point pouvant parfois friser le ridicule...</p> + <p>Lorsqu'il n'est pas collé à son écran, on a alors toutes les chances de le trouver en train de lire un bouquin, la lecture lui prenant elle aussi une partie non + négligeable de ses temps libres. Dans ce domaine aussi, l'eclectisme fait loi, il peut lire plus ou moins tout et n'importe quoi... Ces dernieres découvertes majeures en + la matiere sont probablement les bouquins de Werber ( qu'il a toutefois découvert depuis un certain temps maintenant ) et plus recement les mangas que sont <span class="i">Hunter x Hunter</span>, + <span class="i">Naruto</span> et surtout <span class="i">One Piece</span>, qui l'ont amenés dans un univers ou il ne s'était curieusement que rarement aventuré.</p> + <p>Quant à sortir des deux occupations sus-mentionnées, il est difficile de donner une énumeration précise de ce qu'il aime faire, tant cela tant à l'anecdote : faire du cerf-volant sur la + plage avec le son des vagues en fond sonore, se baigner, etc.</p> + <p>Quant à ce qu'il n'aime pas, les réponses sont alors même pour lui moins évidente... Au niveau comportemental, c'est à dire dans ces relations avec les autres individus de l'espece humaine, + le tout pourrait se resumer par une formule bateau du type : <span class="i">qu'on ne respecte pas le cadre privé dans lequel il souhaite parfois se retrancher</span>... En effet, Franck aime parfois + se retrouver livrer à lui-même, avoir des instants bien à lui où il n'est pas obligé d'expliquer ses agissements, et où tout simplement il n'est pas obliger de communiquer avec d'autres + individus à qui 'il n'a finalement rien à dire... D'autre part, il deteste se sentir <span class="i">exploiter</span>, en mettant dans cette notion tout travail inutile pour lui, que ce soit au profit de + quelqu'un d'autre, ou même completement inutile à qui que ce soit. Toutefois, sa notion de l'utilitié semble legerement particulière, car passer un temps fou sur des jeux ne le dérange par + contre générallement pas le moins du monde...</p> + </dd> + + <!--dt class="SideTitle" id="Geekness">Geekness</dt> + <dd class="SideContent"> + <p>Etant donné qu'il a été précisé plus haut que Franck est <span class='i'>addicted</span>à l'informatique, cette section semble particulierement bienvenue. Donc :<br /> + 1. Une liste quasi-exhautive et presque à jour de sa configuration matérielle et logicielle peut être consulter <a href="javascript:pop_config()">ici</a><br /> + 2. Vous pouvez trouver ci-dessous des captures d'écran tout à la fois du desktop et de la skin Window Blinds actuellement utilisée :<br /> + Erm, bah, disons que vous les trouverez quand j'aurais trouvé le courage de les prendre ^^; C'est plus les mêmes qu'avant ^^;</p> + </dd--> + + <dt class="SideTitle" id="Archives">Archives</dt> + <dd class="SideContent"> + <p>Geekness n'était pas updaté depuis un bon bout de temps, la section va donc laisser sa place à quelques choses qui devrait à priori être + beaucoup plus utile, puisque je compte laisser des archives accessibles ^^; Eventuellement, des petits bonus pourrait atterir dans cette section, + comme une liste des posts jugés les plus dignes d'interet, ou un truc de ce genre. En tout cas, pour le moment, le voici, contenant la liste des + archives pour le moment disponible :<br /> + Archives :</p> + <ul> + <li><a href='http://defr.org/blog/post/2004/06'>Juin 2004</a></li> + <li><a href='http://defr.org/blog/post/2004/08'>Aout 2004</a></li> + <li><a href='http://defr.org/blog/post/2004/10'>Octobre 2004</a></li> + <li><a href='http://defr.org/blog/post/2004/11'>Novembre 2004</a></li> + <li><a href='http://defr.org/blog/post/2004/12'>Décembre 2004</a></li> + </ul> + </dd> + + <dt class="SideTitle" id="ToDo">Have to do...</dt> + <dd class="SideContent"> + - Finish this layout<br /> + <span style='text-decoration:line-through;'>- Change from Kilio to Hebergement.com ! Otherwise, there'll be a problem by + the end of the year...</span><br /> + <span style='text-decoration:line-through;'>- Sleep</span><br /> + - Play to <span class="i">The Legend of Zelda : The Wind Waker</span> and to + <span class="i">Final Fantasy Tactics Advance</span> + </dd> + + </dl> + <div id="Posts">
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/foot.php Sat Oct 20 14:15:10 2007 +0200 @@ -0,0 +1,189 @@ + </div> + <div id="Adresse"> + <span>Sites visités</span> + </div> + <dl id="Link"> + <dt>Mes Sites</dt> + <dd> + <ul> + <li><a href='http://defr.org/'>Mon collectif</a></li> + <li><a href='http://weasleyswheezes.net'>WeasleysWheezes.net, aide aux webmasters</a></li> + <li><a href='http://mega-poudlard.com'>Mega-Poudlard.com, là ou la magie prend vie</a></li> + </ul> + </dd> + + <dt>Weblogs</dt> + <dd> + <ul> + <li><a href='http://ania.weasleyswheezes.net/blog/' title='Friandises'>Ania</a></li> + <li><a href='http://cerveau.cest-pas-pareil.net' title='Cerveau Optionnel'>Circéus</a></li> + <li><a href='http://www.elventroublemakers.net/roe' title='Record of Evilness'>Drakys</a></li> + <li><a href='http://ennaluna.pitas.com' title='Deep Mistery'>Ennaluna</a></li> + <li><a href='http://kevin.descoubes.free.fr/kisscoolblog' title='KissCoolBlog'>Kévin</a></li> + <li><a href='http://marre.cest-pas-pareil.net' title='Y en a Marre !'>Rhiannon</a></li> + <li><a href='http://www.elventroublemakers.net/FS' title='FlipSide'>Spider</a></li> + <li><a href='http://ladyzeek.pitas.com' title='Strange World'>Zeek</a></li> + </ul> + </dd> + + <dt>Sites fréquement visités</dt> + <dd> + <ul> + <li><a href='http://www.aqua-soft.org/' title="Site dédiée à l'obtention sur PC d'application repliquant le comportement de celles trouvées sur Mac, aux skins, icons, wallpapers...">Aqua-Soft</a></li> + <li><a href='http://www.deviantart.com' title='Erm, well, DeviantArt'>DeviantArt</a></li> + <li><a href='http://www.kingsofchaos.com' title='Text-based MMORPG'>Kings Of Chaos</a></li> + <li><a href='http://www.kochonland.com' title='Elevage de Kochon, Miva a réussi à me rendre addicted'>Kochonland</a></li> + <li><a href='http://www.mozdev.org' title='Site rassemblant les extensions programmées pour Firebird...'>MozDev.org</a></li> + <li><a href='http://www.mozillazine.org' title='Site de discussion sur Firebird, ses thèmes, son developpement...'>MozillaZine</a></li> + <li><a href='http://www.stardock.com' title="Site des créateurs d'ObjectDock et WindowBlinds entre autres">Stardock</a></li> + <li><a href='http://www.gimp.org/' title='Site du meilleur éditeur graphique, du moins à mon avis ^^;'>The GIMP</a></li> + <li><a href='http://www.wincustomize.com' title='Rassemblement de skins pour ObjectDock, Window Blinds & co'>WinCustomize</a></li> + </ul> + </dd> + + <dt>Cliques / Webrings</dt> + <dd> + <ul> + <li><a href='http://mega-poudlard.com/Autres/JournalJedusor.asp'>Journaux de Jedusor - Mega-Poudlard.com</a></li> + <li><a href='http://xdaddict.weasleyswheezes.net/'>>> // XD Addict // <<</a></li> + <li><a href='http://duckie.sinfree.net/hxf/'>Hunter x Fanatic</a></li> + </ul> + </dd> + </dl> + + <dl id="SideBar"> + <dt id="About">About</dt> + <dd> + <p>Quelques informations sur cette version ? Ca va être un peu difficile étant donné que le choix a été fait de laisser au visiteur + le choix de l'apparence graphique de ce blog par le biais de <i>feuilles de styles alternatives</i> ( oui, je viens de pondre la traduction, + non je sais pas si c'est une bonne idée de traduire des termes techniques à 23h45 un 31 décembre ). Toutefois, pour ce qui est du style + par défaut, <i>Somatic</i>, je peux vous dire que les icones viennent du talentuex <a href='http://www.dlanham.com'>David Lanham</a>, + pour <a href='http://www.theiconfactory.com'>The IconFactory</a>, dans son set Somatic Windows</p> + <p>Quelques faits ? La magie de pouvoir changer l'apparence de ce site à volonté ( quatres versions disponible en lien ci-dessous pour + le moment, plus si vous utilisez un navigateur vous laissant choisir par lui-même l'apparence parce que vous aurez alors en <i>bonus</i> + les versions que je considère, erm, <i>expérimentales</i> ) est du essentiellement au tandem XHTML 1.1 et CSS 2.1, permettant + de séparer le contenu, c'est à dire les informations elles-même, de la facon dont elles sont affichés à l'écran, ce qui permet entre autre + ce que vous avez sous les yeux ^^;</p> + <ul><li><a href="#" onclick="styleSwitch.set('OliveVerde');return false;">Olive Verde</a></li> + <li><a href="#" onclick="styleSwitch.set('Brushed'); return false;">Brushed</a></li> + <li><a href="#" onclick="styleSwitch.set('Lite:Reloaded');return false;">Lite : Reloaded</a></li> + <li><a href="#" onclick="styleSwitch.set('Somatic');return false;">Somatic</a></li> + </ul> + </dd> + + <dt id="Profile">Profile</dt> + <dd> + <p>Franck ( Deroche Franck, oui, la parodie de James Bond est nulle, et alors ? ), 20 ans + est un habitant de Plaisir, France, la Terre, petite planète + du système solaire paumée entre Venus et Mars. Il est actuellement en école d'ingénieur + à l'<a href='http://www.ec-nantes.fr'>Ecole Centrale de Nantes</a> : une école d'ingénieur + généraliste permettant de faire à peu près n'importe quel travail d'ingénieur en sortie.</p> + <p>Toutefois la spécialisation de Franck sera très certainement dans le <i>domaine informatique</i>, pour lequel + il éprouve une passion sans bornes. Normallement, de telles études devrait lui laisser assez + de temps pour qu'il puisse faire ce qu'il veut à côte, mais ce n'est que la théorie...</p> + <p>Enfin, Franck est en ce moment très ( très très ) <i>amoureux</i> d'une jeune demoiselle + particulièrement <em>brillante</em> et <em>sympathique</em>, extrement <em>jolie</em>, adepte de <em>Zelda</em> et du <em>violet</em> + qui se reconnaitra très certainement, et qui malheureusement n'habite pas vraiment très près de Nantes... Et en plus, elle ne considère même pas + les ordinateurs comme des choses bizarres venue d'ailleurs, pouvant même <em>programmer</em> pour le web ^^;</p> + </dd> + + <dt id="Like">Like / Dislike</dt> + <dd> + <p>Qu'est-ce que Franck peut bien aimer ? Erf, bah, tout à la fois, pas grand chose et un nombre impressionant de machins qui pourrait un être normallement + constitué ne serait probablement rien d'autre que tout au plus des anecdotes. Toutefois, il faut bien avouer que son passe-temps majeur n'a rien de bien + original, puisqu'il s'agit de l'informatique, ce media des temps modernes sur lequel on entend à peu près tout et n'importe quoi. Et en ce qui concerne + l'informatique, on peut alors dire que Franck est on ne peut plus écléctique, touchant un peu à tout... Ce qui retient le plus son attention toutefois, en + ce moment du moins, reste la <em>création de sites webs</em>, la <em>programmation</em> et la <em>customisation</em> de son environement, à un point pouvant parfois friser le ridicule...</p> + <p>Lorsqu'il n'est pas collé à son écran, on a alors toutes les chances de le trouver en train de lire un bouquin, la lecture lui prenant elle aussi une partie non + négligeable de ses temps libres. Dans ce domaine aussi, l'eclectisme fait loi, il peut lire plus ou moins tout et n'importe quoi... Ces dernieres découvertes majeures en + la matiere sont probablement les bouquins de Werber ( qu'il a toutefois découvert depuis un certain temps maintenant ) et plus recement les mangas que sont <span class="i">Hunter x Hunter</span>, + <em>Naruto</em> et surtout <em>One Piece</em>, qui l'ont amenés dans un univers ou il ne s'était curieusement que rarement aventuré.</p> + <p>Quant à sortir des deux occupations sus-mentionnées, il est difficile de donner une énumeration précise de ce qu'il aime faire, tant cela tant à l'anecdote : faire du cerf-volant sur la + plage avec le son des vagues en fond sonore, se baigner, etc.</p> + <p>Quant à ce qu'il n'aime pas, les réponses sont alors même pour lui moins évidente... Au niveau comportemental, c'est à dire dans ces relations avec les autres individus de l'espece humaine, + le tout pourrait se resumer par une formule bateau du type : <em>qu'on ne respecte pas le cadre privé dans lequel il souhaite parfois se retrancher</em>... En effet, Franck aime parfois + se retrouver livrer à lui-même, avoir des instants bien à lui où il n'est pas obligé d'expliquer ses agissements, et où tout simplement il n'est pas obliger de communiquer avec d'autres + individus à qui 'il n'a finalement rien à dire... D'autre part, il deteste se sentir <em>exploiter</em>, en mettant dans cette notion tout travail inutile pour lui, que ce soit au profit de + quelqu'un d'autre, ou même completement inutile à qui que ce soit. Toutefois, sa notion de l'utilitié semble legerement particulière, car passer un temps fou sur des jeux ne le dérange par + contre générallement pas le moins du monde...</p> + </dd> + + <!--dt id="Geekness">Geekness</dt> + <dd> + <p>Etant donné qu'il a été précisé plus haut que Franck est <span class='i'>addicted</span>à l'informatique, cette section semble particulierement bienvenue. Donc :<br /> + 1. Une liste quasi-exhautive et presque à jour de sa configuration matérielle et logicielle peut être consulter <a href="javascript:pop_config()">ici</a><br /> + 2. Vous pouvez trouver ci-dessous des captures d'écran tout à la fois du desktop et de la skin Window Blinds actuellement utilisée :<br /> + Erm, bah, disons que vous les trouverez quand j'aurais trouvé le courage de les prendre ^^; C'est plus les mêmes qu'avant ^^;</p> + </dd--> + + <dt id="Archives">Archives</dt> + <dd> + <p>Geekness n'était pas updaté depuis un bon bout de temps, la section va donc laisser sa place à quelques choses qui devrait à priori être + beaucoup plus utile, puisque je compte laisser des archives accessibles ^^; Eventuellement, des petits bonus pourrait atterir dans cette section, + comme une liste des posts jugés les plus dignes d'interet, ou un truc de ce genre. En tout cas, pour le moment, le voici, contenant la liste des + archives pour le moment disponible :<br /> + Archives :</p> + <ul> + <?php + $Data->Query("SELECT MONTH(DatePost) As Month, YEAR(DatePost) As Year, COUNT(num_mess) As Nb FROM Mess GROUP BY MONTH(DatePost), YEAR(DatePost) ORDER BY YEAR(DatePost) DESC, Month(DatePost) DESC"); + while(0 !== ($row = $Data->GetRow())) { + echo(" + <li><a href='http://defr.org/blog/posts/{$row['Year']}/{$row['Month']}'>{$arMonth[$row['Month'] - 1]} {$row['Year']} </a> ( {$row['Nb']} )</li>"); + } + ?> + </ul> + </dd> + + <dt id="ToDo">Commentaires</dt> + <dd> + <!-- I should change the id, but, erm, I'll do it later, 'cause I'm lazy. Yeah, sue me + <p>Voici une petite liste de chose à faire, sans ordre réellement établi, un pense bête en quelque sorte ^^;</p> + <ul> +<?php + /* $Data->Query("SELECT * FROM ToDo ORDER BY Done, num_thing DESC"); + while(0 !== ($row = $Data->GetRow())) { + if($row['Done'] == 1) + echo("\t\t<li><del>{$row['Thing']}</del></li>\n"); + else + echo("\t\t<li>{$row['Thing']}</li>\n"); + }*/ + ?> + </ul> + --> + <p>Voici la liste des 5 derniers commentaires fait sur ce blog, tous posts confondus. Ca devrait permettre à tout le monde ( et + notamment à moi-même ) de repérer les nouveaux commentaires qui arrivent, même s'ils le sont sur des posts vieux de 6 mois ^^</p> + <ul> +<?php + $Data->Query("SELECT C.*, M.Titre FROM Commentaires C, Mess M WHERE C.MessId = M.num_mess ORDER BY num_comm DESC LIMIT 20"); + $i = 0; + while(0 !== ($row = $Data->GetRow())) { + $i++; + $Titre_url = str_replace(" ", "_", strip_tags($row['Titre'])); + $Titre_url = str_replace("-", "_", $Titre_url); + if(stristr($row['Adresse'], "@")) $row['Adresse'] = "mailto:" . $row['Adresse']; + if($i < 5) { + $row['Comment'] = nl2br($row['Comment']); + echo(" + <li> + <p>Commentaire de <a href='{$row['Adresse']}'>{$row['Auteur']}</a> sur le post <a href=\"/blog/posts/{$row['MessId']}-{$Titre_url}#c{$row['num_comm']}\">{$row['Titre']}</a> :<br /> + {$row['Comment']} + </p> + </li>"); + } else { + $row['Comment'] = str_replace("\n", " ", strip_tags($row['Comment'])); + if(strlen($row['Comment']) > 100) $row['Comment'] = utf8_encode(substr(utf8_decode($row['Comment']), 0, 97)) . "..."; + echo(" + <li class='fold'> + <p>Commentaire de <a href='{$row['Adresse']}'>{$row['Auteur']}</a> sur le post <a href=\"/blog/posts/{$row['MessId']}-{$Titre_url}#c{$row['num_comm']}\">{$row['Titre']}</a><br /> + <span>{$row['Comment']}</span> + </p> + </li>"); + } + } +?> + </ul> + </dd> + + </dl> + </body> +</html> \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/includes/class.dataaccess.php Sat Oct 20 14:15:10 2007 +0200 @@ -0,0 +1,99 @@ +<?php +class DataAccess { + var $host; + var $user; + var $pass; + var $db; + var $arResult; + var $query; + var $connOpen; + var $_nbQueries; + + var $infos; // Cache contenant les informations sur le visiteur + + function DataAccess($host=DB_HOST, $user=DB_USER, $pass=DB_PASS) { + $this->host=$host; + $this->user=$user; + $this->pass=$pass; + $this->_nbQueries = 0; + $this->Connect(); + } + + function Connect($db=DB_NAME) { + if($this->connOpen == 1) return; + $this->db=$db; + $this->connOpen=1; + mysql_connect($this->host, $this->user, $this->pass); + mysql_select_db($this->db); + } + + function Query($query, $id=0) { + $this->query=$query; + if($this->connOpen != 1) $this->Connect(); + $this->arResult[$id]=mysql_query($this->query); + if($this->connOpen != 1) $this->Close(); + if(@$num_rows=mysql_num_rows($this->arResult[$id])) + return $num_rows; + else + return 0; + } + + function debugQuery($query, $id=0) { + $rv = $this->Query($query, $id); + if(mysql_errno() !== 0) + echo("<span class='menu'>\n Query : {$query}<br />\n MySQL Answer : " . mysql_error() . "</span>"); + return $rv; + } + + function GetRow($id=0) { + if(@$row=mysql_fetch_assoc($this->arResult[$id])) { + foreach($row as $key => $value) + $row_utf[$key]=$this->utf8_ensure($value); + return $row_utf; + } + return 0; + } + + function GetRawRow($id=0) { + if(@$row=mysql_fetch_array($this->arResult[$id])) { + return $row; + } + return 0; + } + + function Close() { + $this->connOpen=0; + mysql_close(); + } + + function getNbQueries() { + return $this->_nbQueries; + } + + function formatDate($timestamp, $decallage=2, $pattern='d/m/Y H:i:s') { + return gmdate($pattern, $timestamp + $decallage * 3600); + } + + function seems_utf8($Str) { + for ($i=0; $i<strlen($Str)/10 || $i < 100; $i++) { + if (ord($Str[$i]) < 0x80) continue; # 0bbbbbbb + elseif ((ord($Str[$i]) & 0xE0) == 0xC0) $n=1; # 110bbbbb + elseif ((ord($Str[$i]) & 0xF0) == 0xE0) $n=2; # 1110bbbb + elseif ((ord($Str[$i]) & 0xF8) == 0xF0) $n=3; # 11110bbb + elseif ((ord($Str[$i]) & 0xFC) == 0xF8) $n=4; # 111110bb + elseif ((ord($Str[$i]) & 0xFE) == 0xFC) $n=5; # 1111110b + else return false; # Does not match any model + for ($j=0; $j<$n; $j++) { # n bytes matching 10bbbbbb follow ? + if ((++$i == strlen($Str)) || ((ord($Str[$i]) & 0xC0) != 0x80)) + return false; + } + } + return true; + } + + function utf8_ensure($Str) { + return $this->seems_utf8($Str)?$Str:utf8_encode($Str); + } + +} +?>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/includes/class.domutils.php Sat Oct 20 14:15:10 2007 +0200 @@ -0,0 +1,12 @@ +<?php + class DOMUtils + { + public function createCDATAWrapper($doc, $wrapperName, $data) + { + $CDATA = $doc->createCDataSection($data); + $wrapper = $doc->createElement($wrapperName); + $wrapper->appendChild($CDATA); + return $wrapper; + } + } +?> \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/includes/class.requete.php Sat Oct 20 14:15:10 2007 +0200 @@ -0,0 +1,59 @@ +<?php +/* + Cette classe permet de filtrer tout le contenu entrant, et permet de se dispenser de + toutes les super-globales. + Element unique pour l'ensemble de la génération, on y accède via Factory::getRequest() +*/ + class Requete + { + private $arData; + + public function __construct() + { + $this->loadArray($_POST, 'POST'); + $this->loadArray($_GET, 'GET'); + $this->loadArray($_COOKIE, 'COOKIE'); + } + + // Chargement d'un tableau donné + private function loadArray($array, $name = null) + { + $magic_quotes = (ini_get('magic_quotes_gpc') == '1'); + if(!is_array($array)) return; + if(empty($name)) $name = md5(serialize(microtime())); + foreach($array as $key => $value) + { + $this->arData[$key][$name] = ($magic_quotes) ? $value : addslashes($value); + } + } + + // Récuperation d'une des variables + public function get($varName, $orig = null, $default = '') + { + if(!isset($this->arData[$varName])) return $default; + if(!empty($orig) && !isset($this->arData[$varName][$orig])) return $default; + if(!empty($orig)) return $this->arData[$varName][$orig]; + return current($this->arData[$varName]); + } + + // Récuperation d'un tableau de variables dont le nom correspond à un pattern + public function matchingPattern($preg_pattern, $orig = null) + { + $returnValue = array(); + foreach($this->arData as $key => $array) + { + if(!preg_match($preg_pattern, $key)) continue; + $returnValue[$key] = $this->get($key, $orig); + } + return $returnValue; + } + + // Equivalent de |isset| + public function varSet($varName, $orig = null) + { + if(!isset($this->arData[$varName])) return false; + if(is_null($orig)) return true; + return (isset($this->arData[$varName][$orig])); + } + } +?> \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/includes/class.textutils.php Sat Oct 20 14:15:10 2007 +0200 @@ -0,0 +1,30 @@ +<?php + class TextUtils + { + public static function SplitTags($str) + { + $str = str_replace("\\\"", "\"", $str); + $tags = array(); + preg_match_all('/"([a-zA-Z0-9 ]+)"/', $str, $tests); + $useful = $tests[1]; + foreach($useful as $match) + { + $tags[] = $match; + $str = str_replace("\"{$match}\"", null, $str); + } + $str = preg_replace("/( )+/", " ", trim($str)); + if(strlen($str) > 0) + $tags = array_merge($tags, explode(" ", $str)); + asort($tags); + return $tags; + } + + public static function DiffTagLine($old, $new, &$ajout, &$suppr) + { + $arOld = TextUtils::SplitTags($old); + $arNew = TextUtils::SplitTags($new); + $ajout = array_diff($arNew, $arOld); + $suppr = array_diff($arOld, $arNew); + } + } +?> \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/includes/config.php.dist Sat Oct 20 14:15:10 2007 +0200 @@ -0,0 +1,6 @@ +<?php + define("DB_HOST", "localhost"); + define("DB_USER", "user"); + define("DB_PASSWORD", "password"); + define("DB_NAME", "database_name"); +?>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/index.php Sat Oct 20 14:15:10 2007 +0200 @@ -0,0 +1,93 @@ +<?php + setlocale(LC_ALL, "fr_FR.utf8@euro", "fr_FR.utf8"); + ini_set("display_errors", "off"); + include("classes.php"); + $type = $_GET['type']; + $year = $_GET['year']; + $month = $_GET['month']; + $prevMonth = ($month - 1)%12; if($prevMonth == 0) $prevMonth = 12; $prevYear = ($month == 1)?$year-1:$year; + $nextMonth = $month % 12 + 1; $nextYear = ($month == 12)?$year+1:$year; + $Data = new DataAccess; + include("top.php"); + $Data->Connect(); + if($type != "cal") + $Data->Query("SELECT * FROM Mess Where num_version='Version 10' ORDER BY num_mess DESC"); + else + $Data->Query("SELECT * FROM Mess WHERE YEAR(DatePost)={$year} AND MONTH(DatePost)={$month} ORDER BY num_mess DESC"); + $i=0; + if($type == "cal") { + echo("<div class='cal'>"); + if($prevYear > $startDate['year'] - 1 || ($prevYear > $startDate['Year'] - 2 && $prevMonth > $startDate['month'] - 1)) + echo("<a class='calPrev' href='/blog/posts/{$prevYear}/{$prevMonth}'>{$arMonth[$prevMonth - 1]} {$prevYear}</a>"); + else + echo("<a class='calPrev'>{$arMonth[$prevMonth - 1]} {$prevYear}</a>"); + if(($curYear == $nextYear && $nextMonth < $curMonth + 1) || ($nextYear < $curYear) ) + echo("<a class='calNext' href='/blog/posts/{$nextYear}/" . ($month % 12 + 1) ."'>{$arMonth[$month%12]} {$nextYear}</a>"); + else + echo("<a class='calNext'>{$arMonth[$month%12]} {$nextYear}</a>"); + echo("{$arMonth[$month - 1]} {$year}</div> "); + } + while(($row=$Data->GetRow()) && ($i++<10 || $type == "cal")) { + $mood = ''; + $Mess=$Data->utf8_ensure(str_replace("<P>","<p>",str_replace("</P>","</p>", $row['Message']))); + $dateFormatee = strftime("%A %d %B %Y, %Hh%M", strtotime($row['DatePost'])); + $Titre = $Data->utf8_ensure($row['Titre']); + $Titre_url = str_replace(" ", "_", strip_tags($Titre)); + $Titre_url = str_replace("-", "_", $Titre_url); + $Titre_url = str_replace(array("é", "è"), "e", $Titre_url); + $Titre_url = str_replace("à ", "a", $Titre_url); + $Titre_url = str_replace("ù", "u", $Titre_url); + $Titre_url = str_replace(array("î", "ï"), "i", $Titre_url); + if(!empty($row['Emot'])) { + $mood = "<img src='/blog/mood/{$row['Emot']}.png' alt='Mood : {$row['Emot']}' class='mood' />"; + $row['Emot'] = " " . $row['Emot']; + } + $nbTags = $Data->Query(" + SELECT T.Tag + FROM Tags T, Lien_Tags_Posts L + WHERE L.idMess={$row['num_mess']} AND L.idTag = T.idTag + ORDER BY T.Tag + ", 2); + $tags = ''; + if($nbTags > 0) + { + $tags = "<span class='Tags'><em>Tags</em> :"; + while(0 !== ($tag = $Data->GetRow(2))) + $tags .= " <a href='/blog/tags/{$tag['Tag']}'>{$tag['Tag']}</a> |"; + $tags = substr($tags, 0, -1) . ' ;</span><br />'; + } + + echo(" + <div class='PostContent{$row['Emot']}'> + <h2>{$Titre} | <span class='Date'>{$dateFormatee}</span></h2> + {$mood} + {$Mess} + <p class='postInfos'> + {$tags} + <a href=\"/blog/posts/{$row['num_mess']}-{$Titre_url}\">#{$row['num_mess']}</a> - + <a href=\"/blog/posts/{$row['num_mess']}-{$Titre_url}\"> + "); + if(!is_null($row['NbCommentaires']) && $row['NbCommentaires']!=0) + echo("Un 'tit commentaire ( {$row['NbCommentaires']} ) ?"); + else + echo("Un 'tit commentaire ?"); + echo(" + </a> + </p> + </div>"); + } + if($type == "cal") { + echo("<div class='cal'>"); + if($prevYear > $startDate['year'] - 1 && $prevMonth > $startDate['month'] - 1) + echo("<a class='calPrev' href='/blog/posts/{$prevYear}/{$prevMonth}'>{$arMonth[$prevMonth - 1]} {$prevYear}</a>"); + else + echo("<a class='calPrev'>{$arMonth[$prevMonth - 1]} {$prevYear}</a>"); + if(($curYear == $nextYear && $nextMonth < $curMonth + 1) || ($nextYear < $curYear) ) + echo("<a class='calNext' href='/blog/posts/{$nextYear}/" . ($month % 12 + 1) ."'>{$arMonth[$month%12]} {$nextYear}</a>"); + else + echo("<a class='calNext'>{$arMonth[$month%12]} {$nextYear}</a>"); + echo("{$arMonth[$month - 1]} {$year}</div> "); + } + $Data->Close(); + include("foot.php"); +?>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/index.php_ Sat Oct 20 14:15:10 2007 +0200 @@ -0,0 +1,90 @@ +<?php + setlocale(LC_ALL, "fr_FR.utf8@euro", "fr_FR.utf8"); + include("classes.php"); + $type = $_GET['type']; + $year = $_GET['year']; + $month = $_GET['month']; + $prevMonth = ($month - 1)%12; if($prevMonth == 0) $prevMonth = 12; $prevYear = ($month == 1)?$year-1:$year; + $nextMonth = $month % 12 + 1; $nextYear = ($month == 12)?$year+1:$year; + $Data = new DataAccess; + include("top.php"); + $Data->Connect(); + if($type != "cal") + $Data->Query("SELECT * FROM Mess Where num_version='Version 10' ORDER BY num_mess DESC"); + else + $Data->Query("SELECT * FROM Mess WHERE YEAR(DatePost)={$year} AND MONTH(DatePost)={$month} ORDER BY num_mess DESC"); + $i=0; + if($type == "cal") { + echo("<div class='cal'>"); + if($prevYear > $startDate['year'] - 1 || ($prevYear > $startDate['Year'] - 2 && $prevMonth > $startDate['month'] - 1)) + echo("<a class='calPrev' href='/blog/posts/{$prevYear}/{$prevMonth}'>{$arMonth[$prevMonth - 1]} {$prevYear}</a>"); + else + echo("<a class='calPrev'>{$arMonth[$prevMonth - 1]} {$prevYear}</a>"); + if(($curYear == $nextYear && $nextMonth < $curMonth + 1) || ($nextYear < $curYear) ) + echo("<a class='calNext' href='/blog/posts/{$nextYear}/" . ($month % 12 + 1) ."'>{$arMonth[$month%12]} {$nextYear}</a>"); + else + echo("<a class='calNext'>{$arMonth[$month%12]} {$nextYear}</a>"); + echo("{$arMonth[$month - 1]} {$year}</div> "); + } + while(($row=$Data->GetRow()) && ($i++<10 || $type == "cal")) { + $mood = ''; + $Mess=$Data->utf8_ensure(str_replace("<P>","<p>",str_replace("</P>","</p>", $row['Message']))); + $dateFormatee = strftime("%A %d %B %Y, %Hh%M", strtotime($row['DatePost'])); + $Titre = $Data->utf8_ensure($row['Titre']); + $Titre_url = str_replace(" ", "_", strip_tags($Titre)); + $Titre_url = str_replace("-", "_", $Titre_url); + $Titre_url = str_replace(array("é", "è"), "e", $Titre_url); + $Titre_url = str_replace("à ", "a", $Titre_url); + $Titre_url = str_replace("ù", "u", $Titre_url); + $Titre_url = str_replace(array("î", "ï"), "i", $Titre_url); + if(!empty($row['Emot'])) { + $mood = "<img src='/blog/mood/{$row['Emot']}.png' alt='Mood : {$row['Emot']}' class='mood' />"; + $row['Emot'] = " " . $row['Emot']; + } + echo(" + <div class='PostContent{$row['Emot']}'> + <h2>{$Titre} | <span class='Date'>{$dateFormatee}</span></h2> + {$mood} + {$Mess}<br /> + <a href=\"/blog/posts/{$row['num_mess']}-{$Titre_url}\">#{$row['num_mess']}</a> - + <a href=\"/blog/posts/{$row['num_mess']}-{$Titre_url}\"> + "); + if(!is_null($row['NbCommentaires']) && $row['NbCommentaires']!=0) + echo("Un 'tit commentaire ( {$row['NbCommentaires']} ) ?"); + else + echo("Un 'tit commentaire ?"); + echo(" + </a>"); + $nb = $Data->debugQuery(" + SELECT T.Tag + FROM Tags T, Lien_Tags_Posts L + WHERE L.idMess={$row['num_mess']} AND L.idTag = T.idTag + ORDER BY T.Tag + ", 2); + if($nb > 0) + { + $tags = ''; + while(0 !== ($tag = $Data->GetRow(2))) + $tags .= " <a href='/blog/tags/{$tag['Tag']}'>{$tag['Tag']}</a> -"; + $tags = substr($tags, 0, -1); + echo(" ; <em>Tags</em> : {$tags}"); + } + echo(" + + </div>"); + } + if($type == "cal") { + echo("<div class='cal'>"); + if($prevYear > $startDate['year'] - 1 && $prevMonth > $startDate['month'] - 1) + echo("<a class='calPrev' href='/blog/posts/{$prevYear}/{$prevMonth}'>{$arMonth[$prevMonth - 1]} {$prevYear}</a>"); + else + echo("<a class='calPrev'>{$arMonth[$prevMonth - 1]} {$prevYear}</a>"); + if(($curYear == $nextYear && $nextMonth < $curMonth + 1) || ($nextYear < $curYear) ) + echo("<a class='calNext' href='/blog/posts/{$nextYear}/" . ($month % 12 + 1) ."'>{$arMonth[$month%12]} {$nextYear}</a>"); + else + echo("<a class='calNext'>{$arMonth[$month%12]} {$nextYear}</a>"); + echo("{$arMonth[$month - 1]} {$year}</div> "); + } + $Data->Close(); + include("foot.php"); +?>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mood.php Sat Oct 20 14:15:10 2007 +0200 @@ -0,0 +1,65 @@ +<?php + setlocale(LC_ALL, "fr_BE.utf8@euro"); + include("classes.php"); + $type = $_GET['type']; + $year = $_GET['year']; + $month = $_GET['month']; + $prevMonth = ($month - 1)%12; if($prevMonth == 0) $prevMonth = 12; $prevYear = ($month == 1)?$year-1:$year; + $nextMonth = $month % 12 + 1; $nextYear = ($month == 12)?$year+1:$year; + $Data = new DataAccess; + include("top.php"); + $Data->Connect(); + if($type != "cal") + $Data->Query("SELECT * FROM Mess Where num_version='Version 10' ORDER BY num_mess DESC"); + else + $Data->Query("SELECT * FROM Mess WHERE YEAR(DatePost)={$year} AND MONTH(DatePost)={$month} ORDER BY num_mess DESC"); + $i=0; + if($type == "cal") { + echo("<div class='cal'>"); + if($prevYear > $startDate['year'] - 1 && $prevMonth > $startDate['month'] - 1) + echo("<a class='calPrev' href='/blog/posts/{$prevYear}/{$prevMonth}'>{$arMonth[$prevMonth - 1]} {$prevYear}</a>"); + else + echo("<a class='calPrev'>{$arMonth[$prevMonth - 1]} {$prevYear}</a>"); + if(($curYear == $nextYear && $nextMonth < $curMonth + 1) || ($nextYear < $curYear) ) + echo("<a class='calNext' href='/blog/posts/{$nextYear}/" . ($month % 12 + 1) ."'>{$arMonth[$month%12]} {$nextYear}</a>"); + else + echo("<a class='calNext'>{$arMonth[$month%12]} {$nextYear}</a>"); + echo("{$arMonth[$month - 1]} {$year}</div> "); + } + while(($row=$Data->GetRow()) && ($i++<10 || $type == "cal")) { + $Mess=$Data->utf8_ensure(str_replace("<P>","<p>",str_replace("</P>","</p>", $row['Message']))); + $dateFormatee = strftime("%A %d %B %Y, %Hh%M", strtotime($row['DatePost'])); + $Titre = $Data->utf8_ensure($row['Titre']); + $Titre_url = str_replace(" ", "_", strip_tags($Titre)); + $Titre_url = str_replace("-", "_", $Titre_url); + echo(" + <div class='PostContent' style='background:url(t_alphaboost.png) bottom right no-repeat;'> + <h2>{$Titre} | <span class='Date'>{$dateFormatee}</span></h2> + <img src='t.png' style='float:left;margin:1.5em 1em 0.5em 0; padding:10px; border:1px #795 solid; background:url(css/Res_Somatic/bg_test.png);' /> + {$Mess}<br /> + <a href=\"/blog/posts/{$row['num_mess']}-{$Titre_url}\">#{$row['num_mess']}</a> - + <a href=\"/blog/posts/{$row['num_mess']}-{$Titre_url}\"> + "); + if(!is_null($row['NbCommentaires']) && $row['NbCommentaires']!=0) + echo("Un 'tit commentaire ( {$row['NbCommentaires']} ) ?"); + else + echo("Un 'tit commentaire ?"); + echo(" + </a> + </div>"); + } + if($type == "cal") { + echo("<div class='cal'>"); + if($prevYear > $startDate['year'] - 1 && $prevMonth > $startDate['month'] - 1) + echo("<a class='calPrev' href='/blog/posts/{$prevYear}/{$prevMonth}'>{$arMonth[$prevMonth - 1]} {$prevYear}</a>"); + else + echo("<a class='calPrev'>{$arMonth[$prevMonth - 1]} {$prevYear}</a>"); + if(($curYear == $nextYear && $nextMonth < $curMonth + 1) || ($nextYear < $curYear) ) + echo("<a class='calNext' href='/blog/posts/{$nextYear}/" . ($month % 12 + 1) ."'>{$arMonth[$month%12]} {$nextYear}</a>"); + else + echo("<a class='calNext'>{$arMonth[$month%12]} {$nextYear}</a>"); + echo("{$arMonth[$month - 1]} {$year}</div> "); + } + $Data->Close(); + include("foot.php"); +?>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rss.php Sat Oct 20 14:15:10 2007 +0200 @@ -0,0 +1,58 @@ +<?php + +include("classes.php"); + + function utf8_ensure($str) { + return seems_utf8($str)?$str:utf8_encode($str); + } + + function seems_utf8($Str) { + for ($i=0; $i<strlen($Str) && $i<150; $i++) { + if (ord($Str[$i]) < 0x80) continue; # 0bbbbbbb + elseif ((ord($Str[$i]) & 0xE0) == 0xC0) $n=1; # 110bbbbb + elseif ((ord($Str[$i]) & 0xF0) == 0xE0) $n=2; # 1110bbbb + elseif ((ord($Str[$i]) & 0xF8) == 0xF0) $n=3; # 11110bbb + elseif ((ord($Str[$i]) & 0xFC) == 0xF8) $n=4; # 111110bb + elseif ((ord($Str[$i]) & 0xFE) == 0xFC) $n=5; # 1111110b + else return false; # Does not match any model + for ($j=0; $j<$n; $j++) { # n bytes matching 10bbbbbb follow ? + if ((++$i == strlen($Str)) || ((ord($Str[$i]) & 0xC0) != 0x80)) + return false; + } + } + return true; + } + + if(stristr($_SERVER['HTTP_ACCEPT'], "application/rss+xml")) + header("Content-Type: application/rss+xml; charset=utf-8"); + else + header("Content-Type: text/xml; charset=utf-8"); + echo("<?xml version='1.0' encoding='utf-8'?>\n"); +?> +<rss version='2.0'> + <channel> + <title>Dual Blog</title> + <link>http://www.defr.org/blog/</link> + <description>Le blog de DeFr, parlant de tout et de rien ^^;</description> + <language>fr-fr</language> + <?php + $Data = new DataAccess(); + $Data->Connect(); + $Data->Query("SELECT * FROM Mess ORDER BY num_mess DESC LIMIT 0, 20"); + while($val=$Data->GetRow()) { + $utf8_Mess=utf8_ensure($val['Message']); + $utf8_Titre=utf8_ensure($val['Titre']); + $dateRFC=gmdate("r", strtotime($val['DatePost'])); + echo(" + <item> + <title>{$utf8_Titre}</title> + <description><![CDATA[{$utf8_Mess}]]></description> + <pubDate>{$dateRFC}</pubDate> + <link>http://www.defr.org/blog/posts/{$val['num_mess']}</link> + </item> + "); + } + $Data->Close(); + ?> + </channel> +</rss>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tag.php Sat Oct 20 14:15:10 2007 +0200 @@ -0,0 +1,64 @@ +<?php + setlocale(LC_ALL, "fr_FR.utf8@euro", "fr_FR.utf8"); + include("classes.php"); + $tag = $_GET['tag']; + $Data = new DataAccess; + include("top.php"); + $Data->Query(" + SELECT * + FROM Mess M, Tags T, Lien_Tags_Posts L + WHERE M.num_version='Version 10' AND T.Tag='{$tag}' AND M.num_mess=L.idMess AND L.idTag=T.idTag + ORDER BY num_mess DESC"); + $i=0; + while(($row=$Data->GetRow()) && $i++<10) { + $mood = ''; + $Mess=$Data->utf8_ensure(str_replace("<P>","<p>",str_replace("</P>","</p>", $row['Message']))); + $dateFormatee = strftime("%A %d %B %Y, %Hh%M", strtotime($row['DatePost'])); + $Titre = $Data->utf8_ensure($row['Titre']); + $Titre_url = str_replace(" ", "_", strip_tags($Titre)); + $Titre_url = str_replace("-", "_", $Titre_url); + $Titre_url = str_replace(array("é", "è"), "e", $Titre_url); + $Titre_url = str_replace("à ", "a", $Titre_url); + $Titre_url = str_replace("ù", "u", $Titre_url); + $Titre_url = str_replace(array("î", "ï"), "i", $Titre_url); + if(!empty($row['Emot'])) { + $mood = "<img src='/blog/mood/{$row['Emot']}.png' alt='Mood : {$row['Emot']}' class='mood' />"; + $row['Emot'] = " " . $row['Emot']; + } + $nbTags = $Data->Query(" + SELECT T.Tag + FROM Tags T, Lien_Tags_Posts L + WHERE L.idMess={$row['num_mess']} AND L.idTag = T.idTag + ORDER BY T.Tag + ", 2); + $tags = ''; + if($nbTags > 0) + { + $tags = "<span class='Tags'><em>Tags</em> :"; + while(0 !== ($tag = $Data->GetRow(2))) + $tags .= " <a href='/blog/tags/{$tag['Tag']}'>{$tag['Tag']}</a> |"; + $tags = substr($tags, 0, -1) . ' ;</span><br />'; + } + + echo(" + <div class='PostContent{$row['Emot']}'> + <h2>{$Titre} | <span class='Date'>{$dateFormatee}</span></h2> + {$mood} + {$Mess} + <p class='postInfos'> + {$tags} + <a href=\"/blog/posts/{$row['num_mess']}-{$Titre_url}\">#{$row['num_mess']}</a> - + <a href=\"/blog/posts/{$row['num_mess']}-{$Titre_url}\"> + "); + if(!is_null($row['NbCommentaires']) && $row['NbCommentaires']!=0) + echo("Un 'tit commentaire ( {$row['NbCommentaires']} ) ?"); + else + echo("Un 'tit commentaire ?"); + echo(" + </a> + </p> + </div>"); + } + $Data->Close(); + include("foot.php"); +?>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tb.php Sat Oct 20 14:15:10 2007 +0200 @@ -0,0 +1,42 @@ +<?php + header("Content-Type: text/xml"); + echo("<?xml version='1.0' encoding='utf-8'?>"); + include("classes.php"); + $id = $_GET['id']; + $Data->Query("SELECT * FROM Messages WHERE num_mess=$id"); + $post_infos = $Data->GetRow(); + $titre = array_key_exists("title", $_POST)?$_POST['title']:"Undefined"; + $url = array_key_exists("url", $_POST)?$_POST['url']:"#"; + $info = array_key_exists("__info", $_POST)?$_POST['__info']:-1; + if($info == 1) { + $error = 0; + $message = "Some informations"; + } else if($url == "#") { + $error = 1; + $message = "The url field is needed for trackback to do something usefull !"; + } else if($post_infos === 0) { + $error = 1; + $message = "There's no post with this id"; + } else { + $excerpt = $_POST['excerpt']; + $DateComment = gmdate("Y-m-d H:i:s"); + if(strlen($excerpt) > 255) $excerpt = substr($excerpt, 0, 255) . "..."; + $Data = new DataAccess(); + $Data->Query("INSERT INTO Commentaires(MessId, Auteur, Adresse, Comment, DateComment, isTrackback) + VALUES({$id}, '{$titre}', '{$url}', '{$excerpt}', '{$DateComment}', 1)"); + $Data->Query("UPDATE Mess SET NbCommentaires=NbCommentaires+1 WHERE num_mess={$id}"); + $error = 0; + $excerpt = htmlentities(urlencode(substr(strip_tags($post_infos['Message']), 0, 252) . "...") + } + + echo "<response> + <error>$error</error> + <message>$message</message> + <engine>Dual Blog custom made PHP script</engine> + <encoding>UTF-8</encoding> + <blog>Dual Blog</blog> + <title>{$post_infos['Titre']}</title> + <url>http://defr.org/post/{$post_infos['num_mess']}</url> + <excerpt>$excerpt</excerpt> +</response>"; +?>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tb_send.php Sat Oct 20 14:15:10 2007 +0200 @@ -0,0 +1,48 @@ +<?php + include("classes.php"); + $Data = new DataAccess(); + $Data->Query("SELECT * FROM Mess WHERE num_mess=255"); + $row = $Data->GetRow(); + $tbAddress = "http://www.defr.org/blog/tb.php?id=255"; + $ar_tbAddress = parse_url($tbAddress); + if(!array_key_exists('port', $ar_tbAddress)) $ar_tbAddress['port'] = 80; + if(!array_key_exists('path', $ar_tbAddress)) $ar_tbAddress['path'] = '/'; + if(array_key_exists('query', $ar_tbAddress)) $ar_tbAddress['query'] = '?' . $ar_tbAddress['query']; + var_export($ar_tbAddress); + $fp = fsockopen($ar_tbAddress['host'], 80, $errno, $errstr, 15); + if($fp) { + $genToSend = "POST {$ar_tbAddress['path']}{$ar_tbAddress['query']} HTTP/1.0\r\n"; + $genToSend .= "Host: {$ar_tbAddress['host']}\r\n"; + $genToSend .= "Content-Type: application/x-www-form-urlencoded \n"; + + // Essai de récuperation de l'encodage...Envoie en iso si pas d'indication d'UTF... + $argToSend = "__info=1"; + $toSend = $genToSend . "Content-Length: " . strlen($argToSend) . "\n\n"; + $toSend .= $argToSend; + echo("<pre>$toSend</pre>"); + fwrite($fp, $toSend); + while(!feof($fp)) + $result .= fgets($fp, 128); + fclose($fp); + if(!preg_match('/<encoding>(UTF-8|utf-8)<\/encoding>/msU',$result)) { + $row['Titre'] = utf8_decode($row['Titre']); + $row['Message'] = utf8_decode($row['Message']); + echo("Snif, utilisation d'ISO..."); + } + + $fp = fsockopen($ar_tbAddress['host'], 80, $errno, $errstr, 15); + $argToSend = "title=" . htmlentities(urlencode($row['Titre'])) . "&blog_name=Dual+Blog"; + $argToSend .= "&url=http://defr.org/blog/posts/{$row['num_mess']}&excerpt=" . htmlentities(urlencode(substr(strip_tags($row['Message']), 0, 255) . "...")); + + $toSend = $genToSend . "Content-Length: " . strlen($argToSend) . "\n\n"; + $toSend .= $argToSend; + echo("<pre>$toSend</pre>"); + fwrite($fp, $toSend); + while (!feof($fp)) { + echo fgets($fp, 128); + } + fclose($fp); + } else { + echo("Pb de connexion : $errno - $errstr"); + } +?> \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test.php Sat Oct 20 14:15:10 2007 +0200 @@ -0,0 +1,16 @@ +<?php + /*require_once('includes/class.textutils.php'); + + $str1 = 'Test "3615 Ma Vie" A "Dual Blog" Yoohooo B E'; + $str2 = 'Test "3615 Ma Vie" D Yoohooo G "A la bonne heure"'; + + TextUtils::DiffTagLine($str1, $str2, $a, $b); + echo("<pre>"); + var_export($a); + echo("</pre>"); + echo("<pre>"); + var_export($b); + echo("</pre>");*/ + var_export(ini_get("magic_quotes_gpc")); + phpinfo(); +?> \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/testcase.html Sat Oct 20 14:15:10 2007 +0200 @@ -0,0 +1,30 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> +<html xml:lang="fr" xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>Test</title> + <link rel='StyleSheet' type='text/css' href='css/admin.css' /> + </head> + <body> + <form> + <select name='mood' id='mood'> + <option value='_'><img src='/blog/mood/25/_.png' alt='' />_</option> + <option value='Oups'><img src='/blog/mood/25/Oups.png' alt='' />Oups</option> + + <option value='Oohh'><img src='/blog/mood/25/Oohh.png' alt='' />Oohh</option> + <option value='Angry'><img src='/blog/mood/25/Angry.png' alt='' />Angry</option> + <option value='Goggle'><img src='/blog/mood/25/Goggle.png' alt='' />Goggle</option> + <option value='Cry'><img src='/blog/mood/25/Cry.png' alt='' />Cry</option> + <option value='Yes'><img src='/blog/mood/25/Yes.png' alt='' />Yes</option> + <option value='Loud'><img src='/blog/mood/25/Loud.png' alt='' />Loud</option> + + <option value='Love'><img src='/blog/mood/25/Love.png' alt='' />Love</option> + <option value='Neutral'><img src='/blog/mood/25/Neutral.png' alt='' />Neutral</option> + <option value='Clop'><img src='/blog/mood/25/Clop.png' alt='' />Clop</option> + <option value='Weird'><img src='/blog/mood/25/Weird.png' alt='' />Weird</option> + <option value='Tongue'><img src='/blog/mood/25/Tongue.png' alt='' />Tongue</option> + <option value='Sleep'><img src='/blog/mood/25/Sleep.png' alt='' />Sleep</option> + + </select> + </form> + </body> + </html> \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/testcase.php Sat Oct 20 14:15:10 2007 +0200 @@ -0,0 +1,32 @@ +<?php + header("Content-Type: application/xhtml+xml"); +?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> +<html xml:lang="fr" xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>Test</title> + <link rel='StyleSheet' type='text/css' href='css/admin.css' /> + </head> + <body> + <form> + <select name='mood' id='mood'> + <option value='_'><img src='/blog/mood/25/_.png' alt='' />_</option> + <option value='Oups'><img src='/blog/mood/25/Oups.png' alt='' />Oups</option> + + <option value='Oohh'><img src='/blog/mood/25/Oohh.png' alt='' />Oohh</option> + <option value='Angry'><img src='/blog/mood/25/Angry.png' alt='' />Angry</option> + <option value='Goggle'><img src='/blog/mood/25/Goggle.png' alt='' />Goggle</option> + <option value='Cry'><img src='/blog/mood/25/Cry.png' alt='' />Cry</option> + <option value='Yes'><img src='/blog/mood/25/Yes.png' alt='' />Yes</option> + <option value='Loud'><img src='/blog/mood/25/Loud.png' alt='' />Loud</option> + + <option value='Love'><img src='/blog/mood/25/Love.png' alt='' />Love</option> + <option value='Neutral'><img src='/blog/mood/25/Neutral.png' alt='' />Neutral</option> + <option value='Clop'><img src='/blog/mood/25/Clop.png' alt='' />Clop</option> + <option value='Weird'><img src='/blog/mood/25/Weird.png' alt='' />Weird</option> + <option value='Tongue'><img src='/blog/mood/25/Tongue.png' alt='' />Tongue</option> + <option value='Sleep'><img src='/blog/mood/25/Sleep.png' alt='' />Sleep</option> + + </select> + </form> + </body> + </html> \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/top.php Sat Oct 20 14:15:10 2007 +0200 @@ -0,0 +1,50 @@ +<?php +if(is_null($_SERVER['HTTP_ACCEPT']) || stristr($_SERVER['HTTP_ACCEPT'], 'application/xhtml+xml')) + header('Content-Type: application/xhtml+xml; charset=UTF-8'); +?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> +<html xml:lang="fr" xmlns="http://www.w3.org/1999/xhtml"> + <head> + <link rel='StyleSheet' type='Text/CSS' href='/blog/css/comment.css' /> +<?php + $startDate = array("year" => "2004", "month" => 6); + $tmpYear = $startDate['year']; $tmpMonth = $startDate['month']; + $curYear = (int)gmdate("Y"); $curMonth = (int)gmdate("m"); + $arMonth = array("Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Aout", "Septembre", "Octobre", "Novembre", "Décembre"); + $StyleSheets = array( + "Somatic" => "Somatic.css", + "OliveVerde" => "OliveVerde.css", + "Lite:Reloaded" => "Lite_nv.css", + "Brushed" => "Brushed.css", + ":Hover" => "HoverExp.css"); + $CkStyle = (array_key_exists("style", $_COOKIE) && array_key_exists($_COOKIE['style'], $StyleSheets))?$_COOKIE['style']:"Somatic"; + foreach($StyleSheets as $CSSName => $CSSHref) { + $t = ($CSSName == $CkStyle)?"StyleSheet":"Alternate StyleSheet"; + echo(" <link rel='$t' type='text/css' href='/blog/css/$CSSHref' title='$CSSName' media='screen' />\n"); + } + if(!empty($Titre)) + echo(" <title>{$Titre} - Dual Blog</title>\n"); + else + echo(" <title>Dual { v10 : OS Edition } Blog</title>\n"); + + if(stristr($_SERVER['HTTP_USER_AGENT'], "MSIE") && !$CkStyle == "Somatic") + echo("<style type='Text/CSS'> +.PostTitle {margin-bottom:0px;} +</style>"); + ?> + <link rel="alternate" type="application/atom+xml" title="Atom feed" href="/blog/dualblog.atom" /> + <link rel="alternate" type="application/rss+xml" title="RSS 2.0 feed" href="/blog/dualblog.rss" /> + <link rel="icon" type="image/png" href="/favicon.png" /> + <meta http-equiv='content-type' content='text/html; charset=utf-8' /> + <meta name='author' content='Franck Deroche' /> + <script type="Text/JavaScript" src="/blog/RollUp.js"></script> + </head> + + <body id="Main"> +<?php /* if(!empty($Summary)) { +echo(" + <q id='Summary'> + {$Summary} + </q>\n"); + }*/ ?> + <h1>Dual Blog : DeFr's Weblog</h1> + <div id="Posts">