#!/usr/bin/perl # # REF: resoobaoadmin.pl # ResooSite v.0.9.5 -(p)Resoo 2002-2003 # (c)2003 - pascal blain / GNU GPL - General Public License # http://www.resoo.org/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{'pageindex'}) { $pageindex = "$FORM{'pageindex'}"; } if ($FORM{'ordreindex2'}) { $ordreindex2 = "$FORM{'ordreindex2'}"; } if ($FORM{'retour'}) { $retour = "$FORM{'retour'}"; } if ($FORM{'retourold'}) { $retourold = "$FORM{'retourold'}"; } if ($FORM{'codepage'}) { $codepage = "$FORM{'codepage'}"; } if ($FORM{'page'}) { $page = "$FORM{'page'}"; } else { $page = "$query"; } 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; print "
\n"; print "\n"; print "\n"; print ""; 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"; &hidden; 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"; &hidden; 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"; &hidden; print "\n"; print "\n"; print "\n"; print "\n"; print "
$fontstitre Accès à une page index \"invisible\": $finfontstitre
$font Titre: $finfont\n"; $comptefile=1; foreach $key (sort keys %indexfiles) { if ($key =~ /^_I_/) { $fakename=$key; $fakename=~ s/^_I_//; print "$fakename
"; $comptefile++; } } if ($comptefile == 1){ print "Aucune page index \"invisible\""; } print "

$fontstitre Suppression multiple d'article: $finfontstitre
$font Page: $finfont\n"; print "\n"; print "

$fontstitre Archivage multiple d'article: $finfontstitre
$font Page: $finfont\n"; print "\n"; print "

$fontstitre Réorganisation page index: $finfontstitre
$font Page: $finfont\n"; print "\n"; print "

$fontstitre Utilitaire téléchargement: $finfontstitre
$font Téléchargement fichiers $finfont

$fontstitre Indexation moteur de recherche: $finfontstitre
$font Option non disponible... $finfont

$fontstitre Statistiques du site: $finfontstitre
$font Compteurs articles et index $finfont
\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"; &hidden; print "\n"; 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"; print "\n"; print "
\n"; print "$fonttitre\n"; if ( $verif == 9 ) { if ( $action == "4" ) { print "Oups ! Erreur...\n"; } else { print "Page B.A.O. Administrateur\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"; print "\n"; print "
\n"; &foot; } ######## routines "action" ######## # action = 0 (voir page invisible) # action = 1 (liste suppression multiple) # action = 2 (liste archivage multiple) # action = 3 (liste réorganisation) # action = 4 (erreur) # action = 5 (réindexation) # action = 6 (réorganisation) # action = 7 (archivage article) # action = 8 (suppression article liste) # action = 9 (suppression article) # action = 10 (statistiques) sub action { ✓ # verifie les champs obligatoire # if ($action == "1" ) { ## affiche la liste suppression # } # if ($action == "2" ) { ## affiche la liste archivage # } # if ($action == "3" ) { ## affiche la page réorganisation # } # if ($action == "5" ) { ## à voir # } if ($action == "6" ) { open(LST,">$dir_txt/$pageindex.lst") || die $!; print LST $ordreindex2; close (LST); } if ($action == "7" ) { &maj_index; ## modifier le fichier idx open(MAIN1,"$dir_txt/$page.idx") || die $!; @main1 = ; close(MAIN1); @main1[1] =~ s/$retourold/$retour/; open(MAIN2,">$dir_txt/$page.idx") || die $!; print MAIN2 @main1; close(MAIN2); ## retourne à la liste $action = 2; $verif = 9; $pageindex=$retourold; } if ($action == "8" ) { &maj_index; ## maj de liste index open (CONF,"resoocnf.pl") || die $!; @conf = ; close (CONF); open(CONF,">resoocnf.pl") || die $!; 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); ## retourne à la liste $pageindex=$retourold; $action = 1; $verif = 9; } if ($action == "9" ) { &maj_index; $delfic1 = "$dir_txt/$page.txt"; unlink ($delfic1); $delfic2 = "$dir_txt/$page.idx"; unlink ($delfic2); $delfic3 = "$dir_comp/$page.cmp"; unlink ($delfic3); ## retourne à la liste $pageindex=$retourold; $action = 1; $verif = 9; } &page_tete; print "$fontgrande\n"; if ($action == "1") { open(LST,"$dir_txt/$pageindex.lst") || die $!; @lst = ; close (LST); print "
\n"; print "\n"; foreach $line (@lst) { $line =~ s/\n//; open(TEXT,"$dir_txt/$line.idx") || die $!; @text = ; close (TEXT); $txttitre = $text[0]; $txtcodepage = $text[9]; print "\n\n\n"; } } else { print "\n"; $page=$line; &hidden; print "\n"; print "\n"; print "\n"; print "\n"; print ""; print "\n"; } } print "
$font N° $finfont$font Titre page $finfont$font action $finfont
$font"; print "$line"; print "$font"; if ($txtcodepage > 9){ print "(liste) $txttitre"; } else { print "$txttitre"; } print ""; if ($txtcodepage > 9) { if (-s "$dir_txt/$line.lst") { print "$fontgrande (liste non vide) $finfontgrande"; } else { print "
\n"; $page=$line; &hidden; print "\n"; print "\n"; print "\n"; print "\n"; print "
"; print "
\n"; print "

"; } if ($action == "2") { open(LST,"$dir_txt/$pageindex.lst") || die $!; @lst = ; close (LST); print "
\n"; print "\n"; foreach $line (@lst) { $line =~ s/\n//; open(TEXT,"$dir_txt/$line.idx") || die $!; @text = ; close (TEXT); $txttitre = $text[0]; $txtcodepage = $text[9]; print "\n\n\n\n"; } print "
$font N° $finfont$font Titre page $finfont$font Nouvelle page retour $fintfont$font action $finfont
$font"; print "$line"; print "$font"; if ($txtcodepage > 9){ print "(liste) $txttitre"; } else { print "$txttitre"; } print ""; print "
\n"; if ($retourfiles > 1) { print "\n"; } else { foreach $key (sort keys %indexfiles) { print "$key\n"; print "\n"; } } print "
"; $page=$line; &hidden; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print ""; print "
\n"; print "

"; } if ($action == "3") { open(LST,"$dir_txt/$pageindex.lst") || die $!; @lst = ; close (LST); print "
\n"; print "\n"; print "\n\n"; print "
$font Ordre actuel (N° - Titre page) pour info $finfont$font Ordre modifié $finfont
"; print ""; print "
$fontgrande Clé = $testcount $finfontgrande"; print "
"; print "
\n"; &hidden; print "\n"; print "\n"; print ""; print "
$fontgrande ... $finfontgrande"; print "
\n"; print "
"; print "
"; print "\n"; print "
"; print ""; print "

"; } if ($action == "5") { print "Mise à jour de la base de donnée du moteur de recherche effectuée !

\n"; } if ($action == "6") { print " mise à jour effectuée !

\n"; } # if ($action == "7") { ## le retour se fait en action 2 (affichage liste) # } # if ($action == "8") { ## le retour se fait en action 2 (affichage liste) # } # if ($action == "9") { ## le retour se fait en action 2 (affichage liste) # } if ($action == "10" ) { print "Statistiques site $title au $date :

\n"; print "\n"; if ($img > "1") { print ""; open(N01,"$dir_comp/img.cmp"); $comp01 = ; close(N01); print "\n"; } if ($link > "1") { print ""; open(N02,"$dir_comp/link.cmp"); $comp02 = ; close(N02); print "\n"; } if ($bbs > "1") { print ""; open(N03,"$dir_comp/bbs.cmp"); $comp03 = ; close(N03); print "\n"; } if ($rep > "1") { print ""; open(N04,"$dir_comp/doc.cmp"); $comp04 = ; close(N04); print "\n"; } foreach $key (sort keys %filesindex) { if (!($filesindex{$key} =~ /^_\w_/)) { print ""; my $pagestat=$key; open(N,"$dir_comp/$pagestat.cmp"); $comp0 = ; close(N); print "\n"; $asterix = ""; &print_stat($pagestat); } } print "
Titrevisites
  • $imgtitre
  • $comp01
  • $linktitre
  • $comp02
  • Forum
  • $comp03
  • Page téléchargement
  • $comp04
    $filesindex{$key}$comp0


    \n"; } if ($action == "4") { print "Erreur: champs $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 "
    \n"; print "
    \n"; if ($page) { print "\n"; } print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
    \n"; print "


    \n"; print "$finfontgrande\n"; print "$font\n"; print "...
    \n"; print "$finfont\n"; &page_pied; } sub print_stat { my $pagestat = $_[0]; if (-e "$dir_txt/$pagestat.lst"){ open (F, "$dir_txt/$pagestat.lst"); my @f=; close (F); foreach my $line (@f) { my $pagestat2=$line; $pagestat2 =~ s/\n//; if (-e "$dir_txt/$pagestat2.lst"){ open(N1,"$dir_txt/$pagestat2.idx"); @ttt = ; $titreart = $ttt[0]; close(N1); $asterix = $asterix . "*"; print "
  • $titreart ($asterix)"; open(N2,"$dir_comp/$pagestat2.cmp"); $comp1 = ; close(N2); print "$comp1\n"; } &print_stat($pagestat2); } $asterix =~ s/\*//; } else{ open(N1,"$dir_txt/$pagestat.idx"); @ttt = ; $titreart = $ttt[0]; close(N1); if ($asterix) { print "
  • ($asterix) $titreart"; } else { print "
  • $titreart"; } open(N2,"$dir_comp/$pagestat.cmp"); $comp1 = ; close(N2); print "$comp1\n"; } } sub check { if (($action == 1) or ($action == 2) or ($action == 3)) { if (!$pageindex) { $error = "\"page\": Vous devez choisir une page index"; $action = "4"; } } if ($action == "5") { $error = "\"...\" (Cette fonction n'est pas encore disponible)"; $action = "4"; } if ($action == "6") { open(LST,"$dir_txt/$pageindex.lst") || die $!; @lst = ; close (LST); $testcount=0; $linecount=0; foreach $line (@lst) { $line =~ s/\n//; $testcount=$testcount+$line; $linecount++; } $ordreindex2=~ s/\r//g; $ordreindex2=~ s/\n\n//g; @list = split(/\n/, $ordreindex2); foreach $line (@list) { $line =~ s/\n//; $testcount=$testcount-$line; $linecount--; } if (!($testcount == 0)) { $error = "\"Ordre modifié\" (mauvaise clé: fichier manquant?)"; $action = "4"; } elsif (!($linecount == 0)) { $error = "\"Ordre modifié\" (nombre de ligne différent)"; $action = "4"; } } if ($action == "7") { if ($retour eq "erreur") { $error = "\"Nouvelle page retour\" (non spécifiée)"; $action = "4"; } if ($codepage > 9) { open (F,"$dir_txt/$page.lst"); @f = ; close(F); foreach $line (@f) { if ($line == $retour) { $error = "\"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"; } } } } if ($action == "8") { 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); } } if ($action == "9") { ### pas de verification } if ($action == "10") { ### pas de verification } } sub maj_index { if ($action != "4") { # si pas d'erreur if (($action != 8) and ($action != 9)) { # si ce n'est pas une suppression open(MAIN6,"$dir_txt/$retour.lst") || die $!; @art = ; close (MAIN6); 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); 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); } }