"); fclose($fd); } # Là, on va chercher les informations dans le fichier data_photos. S'il # n'existe pas, on le crée. if (is_file("data_photos.php")) { include "data_photos.php"; } else { write_dat(); }; $mini_px= $mini_sz . "px"; # La fonction qui permet de construire le tableau des commentaires triés # par date. Elle utilise cmp comme comparateur. function cmp ($a,$b) { return (1-strcmp($a['date'],$b['date'])); } function set_commbis() { $commbis=array(); global $comments; foreach ($comments as $nom => $tab) { foreach ($tab as $id=>$comm) { $commbis[]=array( 'auteur' => $comm['auteur'], 'text' => $comm['text'], 'date' => $comm['date'], 'nom' => $nom, 'id' => $id); } } usort($commbis,"cmp"); $GLOBALS['commbis'] = $commbis; } # Une fontion pour construire la table des photos. On l'utilise à deux # endroits distincts. function set_table () { global $rep_photo,$regexp; $table=array(); if (!is_dir($rep_photo)) { // On ne trouve pas les photos (la louuuze !) print "

Impossible de trouver le dossier \"$rep_photo\"

"; print "

Veuillez vérifier votre configuration.

"; } else { // Là, on les a. C'est good, a priori. # L'objectif est ici de remplire la table $table avec les noms des # photos # qui existent. On utilise pour ça la regexp $handle = opendir($rep_photo); while (false !== ($file = readdir($handle))) { $seen=0; if (@is_file($rep_photo.$file)) { // On a trouvé un vrai fichier # On doit maintenant regarder si oui ou non la regexp correspond ou # pas. $seen dit si on a déjà choisi de garder le fichier. foreach (explode(' ',$regexp) as $key=>$value) { if (false !== strpos($file,$value) && $seen==0) { $seen=1; $table[]=$file; } } } } # Et ensuite, on range tout. closedir($handle); sort($table); $GLOBALS['table'] = $table ; } } # On vérifie que le répertoire contenant les miniatures existe. Si non, on # le crée. if (!is_dir($rep_mini)) { mkdir($rep_mini); } # Pour la connexion à l'administration. Si on demande la déconnexion, on # vire le cookie. if (isset($_GET['deco'])) { setcookie('login'); unset($_COOKIE['login']); } # Dans la même veine, il faut prévoir une manière d'envoyer un cookie # pour dire si la personne veut ou non utiliser du javascript. Par # défaut, c'est la variable 'java' qui va nous dire ça. Par défaut, on # l'utilise (je me suis pas fait chier pour rien). $java='true'; if ($_POST['java']=='false' || $_COOKIE['java']=='false') { setcookie('java','false'); $java='false'; } if ($_POST['java']=='true') { setcookie('java','true'); $java='true'; } # Et pour en finir avec ça, on définit la variable $poster, qui contient # le nom de la personne pour les commentaires. Parce que c'est bien # pratique, oui parfaitement. $poster='Nom' ; // valeur par défaut if (isset ($_POST['nom'])) { $_SESSION['poster']=$_POST['nom']; } if (isset ($_SESSION['poster'])) { $poster=$_SESSION['poster']; } # On regarde si la personne demande une connexion avant toute chose. Dans # ce cas, il faudra honorer sa demande, ce qui se traduit par un envoi de # cookie. On en profite également pour prendre le cookie s'il existe. if ($_POST['action']=='login' && $cr=$_POST['pass2']) {//mot de passe envoyé $cr=crypt($cr,$cr); //on hache le tout (avec des pruneaux) setcookie('login',$cr); $_COOKIE['login'] = $cr ; } if (isset($_COOKIE['login']) && $_COOKIE['login'] != "") { $cr=$_COOKIE['login']; } # Et enfin, on teste l'authentification... if (isset($cr)) { if ($cr!=$pass) { setcookie('login'); header('HTTP/1.x 403 Unauthorized'); setcookie('login'); print (" Mot de passe erroné. Revenir"); exit ; } else { $auth=1; } } else { $auth=0; } # Ensuite, on imprime les entêtes... c'est ici qu'on modifie la /*************************************************************************** **************************************************************************** ** ____ ____ __ ____ _____ _ _ _____ _ _____ ___ ___ _ _ ** ** | _ \| _ \ _/_/_/ ___|| ____| \ | |_ _|/ \|_ _|_ _/ _ \| \ | | ** ** | |_) | |_) | ____\___ \| _| | \| | | | / _ \ | | | | | | | \| | ** ** | __/| _ <| _|_ ___) | |___| |\ | | |/ ___ \| | | | |_| | |\ | ** ** |_| |_| \_\_____|____/|_____|_| \_| |_/_/ \_\_| |___\___/|_| \_| ** ** ** **************************************************************************** ***************************************************************************/ print <<< __EOF__ Photos - $title
__EOF__; ?> htmlentities($nom), 'text'=>htmlentities(stripslashes($_POST['comm'])), 'date'=>date("Y-m-d H:i:s")); write_dat(); } # On rentre dans ce qu'on obtient avec l'interface javascript... if ($nom=$_GET['comment']) { print "

Commentaire sur la photo $nom

Les commentaires

"; $num=count($comments[$nom]); if ($num) { foreach ($comments[$nom] as $key => $comm) { print "

" . $comm['date'] . "
" . $comm['auteur'] . " : " . stripslashes($comm['text']) . "

"; } } else { print "

Pas encore de commentaire

"; } set_table(); print "\n

\n" . " " . " " . "\n \n" . "
\n \n" . " \n" . "

"; $page=floor((array_search($nom,$table))/($x_size*$y_size)); print "Revenir aux photos\n"; print "

Page faite par Mouton, avec l'aide de 131, finie le 2006-01-21

"; exit; } # On rentre dans l'interface de la configuration... Ça chipote plus. if (isset($_GET['config'])) { if ($auth==0) { //pas d'authentification, on propose un mot de passe print "

Authentification

Retour

Merci d'indiquer votre mot de passe pour accéder à l'interface de configuration

"; } else { //mec authentifié... On roule sur l'interface print "

Interface d'administration

Bienvenue sur Gloupine, la machine de configuration de ce script. Si ce n'est pas fait, changez de mot de passe...

"; if ($i=$_POST['delete']) { //On vire un post $i='$comments'.stripslashes($i); eval("unset($i);if ($i) ksort($i);"); print "

Le post est supprimé

"; $_POST['action']='set_config'; // On enverra les données, $_POST['data']=array(); // Mais on change pas grand chose } if ($_POST['action']=='set_config') { //Si on a demandé à revoir des trucs extract($_POST['data']); // On les récupère # Changement de mot de passe if (crypt($cr=$_POST['pass0'],$cr) == $pass // Si on a mis le bon && ($cr=$_POST['pass1'])==$_POST['pass2']) { //et deux fois le même $pass=crypt($cr,$cr); // alors on vire le mot de passe, print "

Mot de passe changé

"; } write_dat(); // On écrit tout ce beau monde print "

Modifications enregistrées

"; } print "
"; if ($admin == 'oui') { // On met des cases à cocher, il faut // précocher la bonne case print " "; if ($show_name == 'oui') { // On met des cases à cocher, il faut // précocher la bonne case print "
Miniatures par ligne
Lignes par page
Repertoire des miniatures *
Repertoire des photos *
Nombre de commentaires à afficher
Taille max des miniatures px
Titre
Sous-titre
Expression **
Affichage des liens de gestion "; } else { print " "; } print " ***
Affichage des noms des photos "; } else { print " "; } print "
Password
Ancien
Nouveau
Confirmer

(*) doit se terminer par un '/', '.' fait reférence au dossier courant (celui où se trouve ce fichier), '..' au dossier parent.
Si vous placez ce fichier directement dans le repertoire où se trouve vos photos, (ce que je conseille), \"Repertoire des photos\" vaudra donc './'

(**) contient la liste des noms de fichiers à prendre en compte. Pour chaque fichier dans le répertoire, le script regarde si le fichier contient un des mots de la liste. Si oui, il est affiché, sinon, il est laissé.

(***) décide si oui ou non on doit afficher le lien permettant d'accéder à l'interface de configuration et au re-calcul des miniatures de première page. Si le lien est effacé, on peut retrouver l'interface de configuration en tapant '?config' à la suite de 'fichier.php' dans l'url.

Si vous avez la moindre question, vous pouvez écrire à mouton@tourniaire.org

Commentaires

"; # Affichage de la table des commentaires. C'est encore très laid, # mais je changerai ça un jour.... set_commbis(); print ""; foreach($commbis as $num=>$comm) { print "\n \n \n \n\n\n"; } print "
" . ((int)$num + 1) . "\n" . "
" . "

" . "

\n
\n" . $comm['date'] . "" . $comm['auteur'] . " : " . htmlentities(substr(html_entity_decode($comm['text']),0,50)) . "...
\n"; } exit ("

Page faite par Mouton, finie le 2006-01-21

"); } # Et là, paf, faut faire la page normale... le plus difficile. print "

$title

" . stripslashes($subtitle) . "

"; $mini_load=0; $total=$x_size*$y_size; $page=$_GET["page"]; $start=$page*$total; $r="\n"; # width='".($minisz*$mini_par_ligne)."px'>\n"; $ext_image=array_flip(explode(' ',$regexp)); set_table(); # On a donc notre tableau $table correct. On va le parcourir. for($a=$start;$a<($start+$total);$a++) { if(!($nom=$table[$a])) { // Si on a fini de lire la table... $r .= "\n"; break ; } // Quelques variables utilisées par la suite... preg_match('/(.*)\.([^.]*)/',$nom,$tmp); $ext=strtolower($tmp[2]); $filename=$tmp[1]; $num=count($comments[$nom]); # print "\$nom vaut $nom ; \$ext vaut $ext ; \$filename vaut $filename
"; // Faut-il redessiner une miniature ? if (!is_file($mini=($rep_mini.$filename.".jpg")) || isset($_GET['redoux_minis'])) { $mini_load++; $known_extensions=array( 'jpg' => 'jpeg', 'jpeg' => 'jpeg', 'gif' => 'gif', 'png' => 'png', ); $known_film=array('avi'=>1,'wmv'=>2,'mpeg'=>3,'mpg'=>4,'mov'=>5); $dim = @ getimagesize($rep_photo.$nom); if (isset($known_extensions[$ext]) && $dim[0]) { // On sait faire une miniature $func="imagecreatefrom" . $known_extensions[$ext]; $x=$dim[0];$y=$dim[1]; $ratio=max($x/$mini_sz,$y/$mini_sz); $mx=floor($x/$ratio); $my=floor($y/$ratio); $im=$func($rep_photo.$nom); $res=imagecreatetruecolor($mx,$my); imagecopyresampled ($res,$im,0,0,0,0,$mx,$my,$x,$y); imagejpeg($res,$rep_mini.$filename.".jpg",75); imagedestroy($res);imagedestroy($im); } else { # Les lignes ci-dessous servent à générer les miniatures, pour un film. # Si vous avez un programme avitojpg qui sait faire ce que vous voulez, # il suffit de le remplacer dans la ligne qui va bien, et de décommenter # un peu partout. Sinon, vos films seront affichés avec un carré noir, # c'est la suite... # if (isset($known_film[$ext])) { // Film : on va bidouiller pour en faire une... # system("/home/mouton/bin/avitojpg $rep_photo" # . "$filename.$ext $rep_mini" # . "$filename.jpg.tmp"); # $im=imagecreatefromjpeg($rep_mini."$filename.jpg.tmp"); # $dim=getimagesize($rep_mini."$filename.jpg.tmp"); # $x=$dim[0];$y=$dim[1]; # $ratio=max($x/$mini_sz,$y/$mini_sz); # $mx=floor($x/$ratio); # $my=floor($y/$ratio); # $res=imagecreatetruecolor($mx,$my); # imagecopyresampled ($res,$im,0,0,0,0,$mx,$my,$x,$y); # $white=imagecolorallocate($res,254,254,254); # imagestring($res,8,30,80,".$ext",$white); # imagejpeg($res,$rep_mini.$filename.".jpg",75); # imagedestroy($res);imagedestroy($im); # unlink($rep_mini."$filename.jpg.tmp"); # } # else { // On sait pas, alors on dessine n'importe quoi. $res=imagecreatetruecolor($mini_sz/2,$mini_sz/2); $bg=imagecolorallocate($res,0,0,0); $white=imagecolorallocate($res,254,254,254); imagestring($res,8,2,2,"$filename",$white); imagestring($res,8,35,45,".$ext",$white); imagejpeg($res,$rep_mini.$filename.".jpg",95); imagedestroy($res); # } } } # Et ensuite, on parcourt les éléments, et $r va contenir notre table. if (!($a%$x_size)) { $r.="\n"; }; $r.="\n\n"; if(!(($a+1)%$x_size)) { $r.="\n"; }; } $r.='
\n"; $r.="\n" . " \"Une\n"; $photo_title = $filename; if ($show_name != 'oui' && $num!=0) { // Affichage du titre. $photo_title=stripslashes($comments[$nom][0]['text']); } $r.="\n"; $r.="\n
\n" . "
"; $r.="" . "Masquer" . ""; if ($num) { foreach ($comments[$nom] as $key => $comm) { $r.="

" . $comm['date'] . "
" . $comm['auteur'] . " : " . stripslashes($comm['text']) . "

"; } } else { $r.="

Pas encore de commentaire

"; } $r.="\n

\n" . " " . " " . "\n \n" . "
\n \n" . " \n" . "

"; if ($java!='true') { $tmp="\"?comment=$nom\">"; } else { $tmp="\"#0\" onclick=\"click('comment_$nom')\">"; }; if ($show_name != 'oui') { //lien pour ouvrir les commentaires if ($num==0 || $num ==1) { $r.="\n
" . "\n \n
\n
"; } else { $r.=""; } } else { if ($num==0) { $r.=""; } else { $r.=""; } } $r.="\n
'; if ($mini_load) { echo $mini_load." miniatures créées\n"; } $nav="\n
\n"; if ($page) { $nav.="[Prec]\n"; } for ($a=0;$a'.($a+1).' ':"".($a+1)."\n"); } if ($page!=($a-1)&&$table) { $nav.="[Suiv]\n"; } $nav.="
\n" ."
\n"; print $nav."\n\n".$r."\n\n".$nav; # Et on passe à l'affichage des commentaires $r="\n\n"; set_commbis(); for($a=0;$a<$num_com;$a++) { if (isset($commbis[$a])) { extract($commbis[$a]); preg_match('/(.*)\.([^.]*)/',$nom,$tmp); $ext=strtolower($tmp[2]); $filename=$tmp[1]; $page= floor((array_search($nom,$table))/($total)); $r.="\n"; } } if ($num_com != 0 && $commbis) { echo $r."
" . "Derniers Commentaires
" . $date . "
\"Une" . "
$auteur:
" . stripslashes ($text) . "
Aller à cette photo
\n"; } if ($admin == 'oui') { echo "Redessiner les miniatures
\n"; echo "Configuration\n"; } print "

Page faite par Mouton, avec un gigantesque coup de main de 131, finie le 2005-12-20

"; ?>