#!/usr/bin/perl # # REF: resoopagelistadmin.pl # ResooSite v.0.9.5.3 -(p)Resoo 2002-2004 # (c)2004 - pascal blain / GNU GPL - General Public License # http://www.resoo.com/resoosite # pascal@resoo.org # require "resooconf.pl"; $query = $ENV{'QUERY_STRING'}; &parse_form; &get_date; &get_variables; ######## recuperation des variables ######## ##################################################### # Obtenir les informations du formulaire - Subroutine sub parse_form { # recevoir les variables read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); # partager les variables en paire ( nom , valeur ) @pairs = split(/&/, $buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); # Un-Webify plus signs and %-encoding $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ s///g; $FORM{$name} = $value; } } ################################################### # Mettre les champs dans des variables - Subroutine sub get_variables { if ($FORM{'page'}) { $page = "$FORM{'page'}"; } else { $page = "$query"; } if ($FORM{'titre'}) { $titre = "$FORM{'titre'}"; $renew = $titre; &unword; &ctrlline; $titre = $renew; $titre =~ tr/\"/ /; $titre =~ tr/\,/ /; $titre =~ tr/\)/ /; $titre =~ tr/\(/ /; $titre =~ tr/\;/ /; $titre =~ tr/\\/ /; $titre =~ tr/\/ /; $titre =~ tr/\&/ /; $titre =~ tr/\~/ /; $titre =~ tr/\#/ /; $titre =~ tr/\{/ /; $titre =~ tr/\}/ /; $titre =~ tr/\[/ /; $titre =~ tr/\]/ /; $titre =~ tr/\^/ /; $titre =~ tr/\$/ /; $titre =~ tr/\%/ /; $titre =~ tr/\§/ /; $titre =~ tr/\*/ /; $titre =~ tr/\?/ /; $titre =~ tr/\:/ /; $titreold = "$FORM{'titreold'}"; } if ($FORM{'retour'}) { $retour = "$FORM{'retour'}"; } else { $retour = "$defautretour"; } if ($FORM{'retourold'}) { $retourold = "$FORM{'retourold'}"; } if ($FORM{'creation'}) { $creation = "$FORM{'creation'}"; } if ($FORM{'maj'}) { $maj = "$FORM{'maj'}"; } if ($FORM{'auteur'}) { $auteur = "$FORM{'auteur'}"; } if ($FORM{'resume'}) { $resume = "$FORM{'resume'}"; $renew = $resume; &unword; $resume = $renew; $resume =~ s/\n/
/g; } if ($FORM{'note'}) { $note = "$FORM{'note'}"; $renew = $note; &unword; &ctrlline; $note = $renew; } # if ($FORM{'lettrine'}) { # $lettrine = "$FORM{'lettrine'}"; # } # if ($FORM{'codehtml'}) { # $codehtml = "$FORM{'codehtml'}"; # } # if ($FORM{'coderesoohtml'}) { # $coderesoohtml = "$FORM{'coderesoohtml'}"; # } if ($FORM{'codepage'}) { $codepage = "$FORM{'codepage'}"; } # if ($FORM{'article'}) { # $article = "$FORM{'article'}"; # } if ($FORM{'actual'}) { $actual = "$FORM{'actual'}"; } if ($FORM{'action'}) { $action = "$FORM{'action'}"; } if ($FORM{'verif'}) { $verif = "$FORM{'verif'}"; } else { $verif = "0" } if ($FORM{'util'}) { $util = "$FORM{'util'}"; if ($FORM{'pass'}) { $pass = "$FORM{'pass'}"; &verify; } else { $verif = ( $verif + 1 ); &page_verify; } } else { &page_verify; } } ######## affichage page mot de passe ######## sub page_verify { &page_tete; if ($verif == 2) { print "$fontgrande\n"; print "Votre mot de passe n'est pas valide,
\n"; print "merci de contacter \n"; print "l'administrateur du site $dir.
\n"; print "$finfontgrande\n"; } else { print "
\n"; print "
\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
$font Utilisateur: $finfont
$font Mot de passe: $finfont
\n"; print "
\n"; if ($verif == 1) { print "
\n"; print "$fontstitre\n"; print "deuxième essai\n"; print "$finfontstitre\n"; } else { print "
\n"; print "$fontpetite\n"; print "premier essai\n"; print "$finfontpetite\n"; } print "
"; print "Accès au mode Super-Administrateur... cliquez ici!\n"; print "
\n"; if ($bbs > 1) { print "Administration Forum... cliquez ici!\n"; print "
\n"; } } &page_pied; } ######## verification mot de passe ######## sub verify { open(MAIN,"$private/$util.txt") || &erreurpass; @main =
; foreach $main_line (@main) { $passcrypt = &resoocrypt($pass); if ($main_line =~ /^$passcrypt$/) { if ($action > 0) { &action; } else { $verif = "9"; #condition du titre page_admin $action = "0"; &page_admin; } } else { &erreurpass; } } close(MAIN); } sub erreurpass { $verif = ( $verif + 1 ); &page_verify; } ######## administration du site ######## sub page_admin { &page_tete; if ($page > 0) { open(MAIN2,"$dir_txt/$page.idx") || die $!; @main2 = ; close (MAIN2); $titreold = $main2[0]; $titreold =~ s/\n//; $renew = $titreold; &unword; $titreold = $renew; $titreold =~ s/"/\"\;/g; $retourold = $main2[1]; $retourold =~ s/\n//; $creationold = $main2[2]; $creationold =~ s/\n//; $majold = $main2[3]; # inutile $majold =~ s/\n//; $auteurold = $main2[4]; $auteurold =~ s/\n//; $resumeold = $main2[5]; $resumeold =~ s/\n//; $renew = $resumeold; &unword; $resumeold = $renew; $noteold = $main2[6]; $noteold =~ s/\n//; $noteold =~ s/"/\"\;/g; $codepageold = $main2[9]; $codepageold =~ s/\n//; print "
\n"; print "
\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print ""; print "\n"; &hidden; print "\n"; print "\n"; print "\n"; print "\n"; print "
$font Réactivation: $finfont$font oui \n"; print " non $finfont
$font Mise à jour du: $finfont \n"; print " $fontpetite (article créé le $creationold"; if ($majold) { print " - m.a.j. du $majold"; } print ") $finfontpetite
$font Titre: $finfont
$font Email auteur: $finfont
$font Retour: $finfont"; if ($retourfiles > 1) { print "\n"; } else { foreach $key (sort keys %indexfiles) { print ""; print "$key\n"; } } print ""; print "
$font Résumé: $finfont
$font Mise en page des articles: $finfont$font normal \n";} else {print "> normal \n ";} print " condensé \n";} else {print "> condensé ";} print " lien seul \n";} else {print "> lien seul ";} print "$finfont
$font Note: $finfont


\n"; print "
\n"; print "
\n"; print "
\n"; &hidden; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "

\n"; print "
\n"; print "
\n"; print "\n"; print "\n"; print "

$fonttitre Autre(s) choix:$finfonttitre
\n"; print "
\n"; print "\n"; &hidden; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "

\n"; print "
\n"; print "\n"; &hidden; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "

\n"; print "
\n"; print "\n"; print "\n"; print "\n"; if ($bbs > 1) { print "\n"; print "\n"; } print "

Accès au mode Super-Administrateur... cliquez ici!

Administration Forum... cliquez ici!

\n"; print "$fontpetite
 
\n"; print "en cas de difficulté, merci de contacter \n"; print "l'administrateur du site $title.
\n"; print "
$finfontpetite\n"; } else { print "
\n"; print "
\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print ""; print "\n"; &hidden; print "\n"; print "\n"; print "\n"; print "\n"; print "
$font Date de création: $finfont
$font Titre: $finfont
$font Email auteur: $finfont
$font Retour: $finfont"; if ($retourfiles > 1) { print "\n"; } else { foreach $key (sort keys %indexfiles) { print ""; print "$key\n"; } } print "
$font Résumé: $finfont
$font Mise en page des articles: $finfont$font normal \n"; print " condensé "; print " lien seul \n"; print "$finfont
$font Note: $finfont


\n"; print "
\n"; print "
\n"; print "\n"; print "\n"; print "

$fonttitre Autre(s) choix:$finfonttitre
\n"; print "
\n"; print "\n"; &hidden; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "

\n"; print "
\n"; print "\n"; &hidden; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "

\n"; print "
\n"; print "\n"; print "\n"; print "\n"; if ($bbs > 1) { print "\n"; print "\n"; } print "

Accès au mode Super-Administrateur... cliquez ici!

Administration Forum... cliquez ici!

\n"; print "$fontpetite
 
\n"; print "en cas de difficulté, merci de contacter \n"; print "l'administrateur du site $title.
\n"; print "
$finfontpetite\n"; } &page_pied; } ######## entete et pied de page ######## sub page_tete { print "Content-type: text/html\; charset=ISO-8859-1\n\n"; &head; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
\n"; print "$font\n"; if (-e "$dir_txt/$retour.txt") { print "\n"; } else { print "\n"; } print "
\n"; print "$fonttitre\n"; if ( $verif == 9 ) { if ( $action == "4" ) { print "Oups ! Erreur...\n"; } else { if ($page) { if ($action == "1") { print "Création article liste\n"; } else { print "Suppression / Modification\n"; } } else { print "Création article liste\n"; } } } else { print "Saisie du mot de passe $fontstitre(administrateur)$finfontstitre\n"; } print "$finfonttitre

\n"; print "Si vous avez un problème avec cette page, merci d'en informer "; print "l'administrateur de ce site
\n"; print "$finfont\n"; print "
\n"; print "$font\n"; print "\ \;
\ \;\n"; print "$finfont\n"; print "
\n"; print "$font \ \;
\n"; } sub page_pied { print "$finfont\n"; print "
\n"; print "$font\n"; if (-e "$dir_txt/$retour.txt") { print "\n"; } else { print "\n"; } print "
\n"; &foot; } ######## routines "action" ######## # action = 1 (creation) # action = 2 (modification) # action = 3 (suppression) # action = 4 (erreur) sub action { ✓ # verifie les champs obligatoire if ($action == "1" ) { ## si creation, recuperer le numero de fichier &get_numb; $page = "$numb"; ## maj de liste index $filesindex{$page}="_A_$titre"; open (CONF,"resoocnf.pl") || &badcheck; @conf = ; close (CONF); open(CONF,">resoocnf.pl") || &badcheck2; foreach $line (@conf) { if ($line =~ /\%filesindex \= \(\".*/) { print CONF "\%filesindex \= \("; foreach $key (sort keys %filesindex) { print CONF "\"$key\",\"$filesindex{$key}\","; } print CONF "\)\;\n"; } else { print CONF "$line"; } } close(CONF); ## creer ou ecraser le fichier idx open(MAIN,">$dir_txt/$page.idx") || die $!; print MAIN "$titre\n"; print MAIN "$retour\n"; print MAIN "$creation\n"; print MAIN "$maj\n"; print MAIN "$auteur\n"; print MAIN "$resume\n"; print MAIN "$note\n"; print MAIN "0\n"; ### lettrine print MAIN "0\n"; ### code html print MAIN "$codepage\n"; print MAIN "0\n"; ### coderesoohtml close(MAIN); ## creer le fichier lst open(MAIN,">$dir_txt/$page.lst") || die $!; print MAIN ""; close(MAIN); ## creer le fichier cmp &creer_comp; } if ($action == "2" ) { ## maj de liste index open (CONF,"resoocnf.pl") || &badcheck; @conf = ; close (CONF); open(CONF,">resoocnf.pl") || &badcheck2; foreach $line (@conf) { if ($line =~ /\%filesindex \= \(\".*/) { $_=$line; s/\"$page\"\,\"$filesindex{$page}\"\,/\"$page\"\,\"_A_$titre\"\,/; print CONF "$_"; } else { print CONF "$line"; } } close(CONF); ## creer ou ecraser le fichier idx open(MAIN,">$dir_txt/$page.idx") || die $!; print MAIN "$titre\n"; print MAIN "$retour\n"; print MAIN "$creation\n"; print MAIN "$maj\n"; print MAIN "$auteur\n"; print MAIN "$resume\n"; print MAIN "$note\n"; print MAIN "0\n"; ### lettrine print MAIN "0\n"; ### code html print MAIN "$codepage\n"; print MAIN "0\n"; ### coderesoohtml close(MAIN); } if ($action == "3") { ## maj de liste index open (CONF,"resoocnf.pl") || &badcheck; @conf = ; close (CONF); open(CONF,">resoocnf.pl") || &badcheck2; foreach $line (@conf) { if ($line =~ /\%filesindex \= \(\".*/) { $_=$line; s/\"$page\"\,\"$filesindex{$page}\"\,//; print CONF "$_"; } else { print CONF "$line"; } } close(CONF); ## suppression des fichiers $delfic1 = "$dir_txt/$page.lst"; unlink ($delfic1); $delfic2 = "$dir_txt/$page.idx"; unlink ($delfic2); $delfic3 = "$dir_comp/$page.cmp"; unlink ($delfic3); } &maj_index; &page_tete; print "$fontgrande\n"; if ($action == "1") { print "Création de page terminée :
\n"; print "Page \# $page

\n"; } if ($action == "2") { print "Modification de page terminée :
\n"; print "Page \# $page

\n"; } if ($action == "3") { print "Suppression de page terminée

\n"; } if ($action == "4") { print "$error

\n"; print "$font\n"; print "utiliser le bouton retour de votre navigateur pour revenir au formulaire prédédent.

\n"; print "$finfont\n"; } print "
\n"; print "
\n"; &hidden; print "\n"; print "\n"; print "\n"; print "
\n"; print "


\n"; print "$finfontgrande\n"; print "$font\n"; print "...
\n"; print "$finfont\n"; &page_pied; } sub maj_index { if ($action != "4") { # si pas d'erreur &maj_date; if ( $retour ne $retourold ) { open(MAIN6,"$dir_txt/$retour.lst") || die $!; @art = ; close (MAIN6); if ($action != "3") { #si ce n'est pas une suppression open(MAIN6,">$dir_txt/$retour.lst") || die $!; # cree la nouvelle ligne print MAIN6 "$page\n"; # recopie le reste du fichier foreach $line (@art) { print MAIN6 "$line"; } } close(MAIN6); if ($action != "1") { #si ce n'est pas une creation open(MAIN7,"$dir_txt/$retourold.lst") || die $!; @artold = ; close (MAIN7); open(MAIN7,">$dir_txt/$retourold.lst") || die $!; foreach $line (@artold) { # cherche et supprime l'ancienne ligne if ($line =~ /^$page$/) { $line = "" } # recopie le reste du fichier print MAIN7 "$line"; } close(MAIN7); } } else { if ($actual != "1") { # si actualisation non invalide open(MAIN6,"$dir_txt/$retour.lst") || die $!; @art = ; close (MAIN6); open(MAIN6,">$dir_txt/$retour.lst") || die $!; if ($action != "3") { #si ce n'est pas une suppression # cree la nouvelle ligne print MAIN6 "$page\n"; } foreach $line (@art) { if ($action != "1") { #si ce n'est pas une creation # cherche et supprime l'ancienne ligne if ($line =~ /^$page$/) { $line = "" } } # recopie le reste du fichier print MAIN6 "$line"; } close(MAIN6); } } } } sub check { if ($action == "2") { open (F,"$dir_txt/$page.lst"); @f = ; foreach $line (@f) { if ($line == $retour) { $error = "Erreur: champs \"retour\" $fontpetite
(vous ne pouvez pas donner pour cet article une page de retour qui elle-même a cet article comme page de retour)
$finfontpetite"; $action = "4"; } close(F); } if ($titreold ne $titre){ foreach $key (%indexfiles) { if ($key eq "_A_$titre") { $error = "Erreur: champs \"titre\" déjà existant"; $action = "4"; } } } } if ($action == "1") { foreach $key (%indexfiles) { if ($key eq "_A_$titre") { $error = "Erreur: champs \"titre\" déjà existant"; $action = "4"; } } } if ($action == "3") { open (F,"$dir_txt/$page.lst"); @f = ; foreach $line (@f) { if ($line =~ /^\w/) { $error = "\"page article\" $fontpetite
(pour pouvoir supprimer une page index, il faut avoir précédemment supprimé ou transféré vers une autre page index tous les articles qui lui sont rattachés)
$finfontpetite"; $action = "4"; } close(F); } } else { if (!$resume) { $error = "Erreur: champs \"résumé\" non servi."; $action = "4"; } if (!$titre) { $error = "Erreur: champs \"titre\" non servi."; $action = "4"; } if (!($creation =~ /^(\d{2})\/(\d{2})\/(\d{4})$/)) { $error = "date de création non valide."; $action = "4"; } if (($maj) and (!($maj =~ /^(\d{2})\/(\d{2})\/(\d{4})$/))) { $error = "date de mise a jour non valide"; $action = "4"; } if (($auteur) and (!($auteur =~ /^\S+\@\S+$/))) { $error = "email auteur non valide"; $action = "4"; } } } sub badcheck { $error = "Fichier resoocnf.pl absent..."; $action = "4"; } sub badcheck2 { $error = "Impossible d'écrire dans le fichier resoocnf.pl..."; $action = "4"; }