#!/usr/bin/perl -w
# remd: script qui fabrique un index et des sous-répértoires (style bd) de votre site. 
# écrit par alain Adelmar

use Cwd;
$dir = cwd;

local $mod_affichage = 7;
local $opd = 3;
use FrDate;
$fd = maintenant($mod_affichage);
if ($fd eq "") {
	$fd = localtime(time);
}
print "$fd\n";
#$deb1 ='<!DOCTYPE doctype PUBLIC "-//w3c//dtd html 4.0 transitional//en">' . "\n\t" . '<html>' . "\n\t" . '<head>' . "\n\t" . '<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">';

if ($ENV{"MACHTYPE"}=~ /[msys|cygwin|gnu]$/) {
	$gnus++;
	print "perhaps you drive on like-gnu OS, engage!\n";
}
elsif ($ENV{"PATH"}=~ /^\//) {
	$gnus =1;
	print "this is a real gnu OS, congratulation\n";
}

$lx = "*-" x 25;
@gnul = ( "\\", "\/");   #pas mal because $gnul[$gnus] sera toujours bon, je suis trop fort


# -----------traitement argument - dossier a traiter et verification $d valide------ debut

if (@ARGV) {
  if ($ARGV[0] =~ /^-/) {
    $ARGV[0] =~ s/-()/($1)/;
    ($argm = "s") if ($ARGV[0]=~ /^s/);   # pour complet
    ($argv = "u") if ($ARGV[0]=~ /^u/);   # pour update
    if ($ARGV[1] ne "") {
      $d = $ARGV[1];
			$srep = $ARGV[2];
      &verifd;
    }
  }
  else {
  	$d = $ARGV[0];
		$srep = $ARGV[1];
    &verifd;
  }
}
else {
  print "usage: mkdb4web.pl [-sou] [dossier_a_traiter] [sous-dossier_image]\n(made by $programmeur\n";
  #---------demander quel repertoire traiter et verifier si il existe
  print "$lx$lx\n";
  print "Indiquez le dossier a traiter:\n";
  chomp($d =<STDIN>);
  &verifd;
}

$newsite = "$dir" . "\/nw" . "$ds";

#----------------------------
$deb1 ='<!DOCTYPE doctype PUBLIC "-//w3c//dtd html 4.0 transitional//en">' . "\n\t" . '<html>' . "\n\t" . '<head>' . "\n\t" . '<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">';
$meta_automatik= '<meta name="Author" content="construit par le script mkdb4web.pl (alain Adelmar)">' . "\n" . '<title>liste';
$titre_fin = '</title>' . "\n\t" . '</head>' . "\n";
$top_label= '<a name="' . "$str" . '_top>Liste des mots commançant par ' . "$s" . '</a>' . "\n";

&faitmoitmp;   #johnny, johnny

sub faitmoitmp {
  my $q = 0;
  if (-e $newsite) {
    while (-e $newsite) {
      $q++;
		$newsite = "$newsite" . "$q";
    }
    mkdir $newsite or die "ouverture de $newsite impossible $!";
  }
  else {
    mkdir $newsite or die "ouverture de $newsite impossible $!";
  }
  $path_newsite = "$newsite" . "$gnul[$gnus]";
	$tmp = "$path_newsite" . "log_tmp";
	mkdir $tmp or die "création de $tmp impossible $!";
	$path_tmp = "$tmp" . "$gnul[$gnus]";
	if ($args eq "") {
		my ($resp) = "";
		print "ce script va creer un tableau en haut de votre index.html\nce tableau recensera dynamiquement et par ordre alphabétique\ntoutes les pages de votre site, deux options vous sont permises\n[a] soit il regroupe les fichiers alphabétiquement par:\n\tfichier style sous-index (par defaut)\n[s] par sous-répértoires contenant toutes les pages commencant par (a-z) style encyclopédie\n\tun fichier index sera cree dans ces sous-repertoires\nfaite votre choix: [A] ou [B]";
		$resp = <STDIN>;
		chomp $resp;
		$args = $resp;
	}
	if ($args eq "s") {
		my $s = "";
		for $s(a..z) {
			$nsrep = "$path_newsite" . "\/liste_" . "$s";
			$h_pathsrep{$s}="$nsrep";
			# peut etre facultatif
			#$h_lsrep{$s}="\.\/liste_" . "$s\/";
			mkdir $nsrep or die "creation de $nsrep impossible $!";
			$iam = "\u$s";
			$pindex = "$nsrep\/liste_$s\.html"; 
			$h_lsrep{$s}="$pindex";
			open "$iam", ">$pindex" or die "Ouverture de $pindex impossible $!";
			print ${$iam} "$deb1 $meta_automatik $s $titre_fin $top_label <hr\>\n\n";
			close "$iam" || die "fermeture de $pindex impossible $!";
		}
	}
	
  if ($srep =~ /\w$/i) {
    $srep = "$path_newsite" . "$srep";
    mkdir $srep or die "ouverture de $srep impossible $!";
  }
  print "Un dossier nw_monsite contiendra vos pages\net \/nw_monsite\/tmp contiendra les logs si il y a lieu\n";
}

print "$lx\nLa page index comportera une banniére en trois parties\n celle de gauche contiendra une grille\nla centrale votre blason, ou un icone 3-5cm\ncelle de droite vos coordonnées\nque je vais vous demander plus bas\n$lx\n";
print "Je vous explique cela pour vous faire une idée de ce que je vais faire\n";
print "nous allons remplir le cadre de droite sur 4 a 5 lignes suivant\n\n";
print "nom (nom premon) ou inverse\n";
print "adresse email ou pas\n";
print "votre site ou site a visiter ou numero de telephone\n";
print "bien évidament vous pouvez ne remplir aucune ligne ou repondre par l\'adresse d'abord\n";
print "premier champs donc (normalement le nom premon\n";
$nom = <STDIN>;
chomp $nom;
print "adresse ou email ou les deux\n";
$adress = <STDIN>;
chomp $adress;
print "troisieme champ donc ce que vous voulez\n";
$nimportekoi = <STDIN>;
chomp $nimportekoi;
print "4eme champ adresse du site ou ce que vous voulez\n";
$champ4 = <STDIN>;
chomp $champ4;
# verification et initialisation des variables nom, auteur, etc...
$for_tabindex_deb = "&nbsp;" . '<table BORDER COLS=3 WIDTH="100%" >' . "<tr\>\n<td\><a NAME=\"index_dico_top\"\>" . '</a><table BORDER COLS=7 WIDTH="100%" >' . "\n<tr\>\n";




opendir D, "$d" or die "ouverture de $d impossible $!";
@nwlsfile = sort (readdir D);
closedir D || die "Fermeture de $d impossible $!";

foreach $file(@nwlsfile) {
	next if ($file=~ /^\./);	
	$afrep = $sd;
	if ($file =~ /^index\.htm/i) {
		open INDEX, "$file" or die "Ouverture de $file impossible $!";
		@contenuindex = <INDEX>;
		close INDEX or die "Fermeture de $file impossible $!";
		$avbod= 0;
		foreach $l(@contenuindex) {
			my $fileordir = "\.html";
			my $lsstr = "";
			push @nwcontenuindex, $l;
			if ($l =~ /<body\>/i) {
				$avbod++;
				push @nwcontenuindex, $l;
				# ajoute le tableau ici
				push @nwcontenuindex, "\n" . "$for_tabindex_deb";
				for $str(a..z) {
					$u++;
					if ($args eq "s") {
						$lsstr = "$h_lsrep{$str}";     #ou $lsstr = "\/liste_" . "$str\/";
						$fileordir = "";
					}
					if($u == 7) {
						$tabindex_suite = '<td><font size=-1><a href="' . "$lsstr" . "liste_" . "$str" . "$fileordir" . "\" target=\"liste\"\>" . "\u$str" . '</a></font></td>' . "\n" . '</tr>' . "\n\n" . '<tr>' . "\n";
						push @nwcontenuindex, $tabindex_suite;
						$u=0;
					}
					else {
						$tabindex_suite = '<td><font size=-1><a href="' . "$lsstr" . "liste_" . "$str" . "$fileordir" . "\" target=\"liste\"\>" . "\u$str" . '</a></font></td>' . "\n";
						push @nwcontenuindex, $tabindex_suite;	
					}
				}
				$tabindex_suite = '<td><font size=-1><a href="' . "$lsstr" . "liste_0-9" . "$fileordir" . "\" target=\"liste\"\>" . '0-9' . '</a></font></td>' . "\n" . '</tr>' . "\n" . '</table>' . "\n" . '</tr>' . "\n" . '</table>' . "\n" .  '<center><a NAME="recherche"></a>Index alphabétique</center>' . "\n" . '</td>' . "\n\n";
				push @nwcontenuindex, $tabindex_suite;
				$tabindex_suite = '<td>' . "\n" . '<center><img SRC="' . "$armoirie" . '" height=107 width=117></center>' . "\n" . '</td>' . "\n\n";
				push @nwcontenuindex, $tabindex_suite;
				$tabindex_suite = '<td>' . "$nom\n" . '<br><a href="' . "$adress" . '">' . "$adress" . '</a>' . "\n" . '<br>' . "$nimportekoi \n" . '<br><a href="' . "$champ4" . "\"\>$champ4<\/a\>\n" . '</td>' . "\n" . '</tr>' . "\n";
				push @nwcontenuindex, $tabindex_suite;
				$tabindex_suite = '<tr>' . "\n" . '<td><center><a NAME="_top"></a><H4>' . "$titre" . '</center></td></tr></table>' . "\n\n";				push @nwcontenuindex, $tabindex_suite;
			}
			if($l=~ /<\/body/i) {
				$tabindex_fin = "<--! fait le $fd par le script mkdb4web ecris par alain Adelmar  --\>\n";
				push @nwcontenuindex, $tabindex_fin;
			}
		}
		$findex = "$path_newsite" . "index.html";
		open FI, ">$findex" or die "Ouverture de $findex impossible $!";
		print FI @nwcontenuindex;
		unlink @nwcontenuindex;
		close FI || die "Fermeture de $findex impossible $!";
	}
	elsif ($file =~ /\.html$/i) {
		$ia = substr($file,0);
		$path = "$path_newsite";
		$pindex = "$path" . "liste_$ia\.html";
		if ($args eq "s") {
			$path = "$h_pathsrep{$ia}";
			$pindex = "$h_lsrep{$ia}";
		}
		
		$lnkfile = "<a href=\"$file\"\>$file<\/a\>";
		push @{$ia}, $lnkfile;
		$cop2file = "$path_newsite" . "$file";
		cp $file $cop2file;    #a revoir because cp pas exister dans DOS
	}
	else {
		$ia = substr($file,0);
		if ($file =~ /[jpg|gif|tif]$/) {
			cp $file "$srep\/$file";
		}
		else {
			print "ou on le met celui la: $file \n";
			$resp = <STDIN>;
			chomp $resp;
			cp $file $resp;
		}
	}
}
	
#------------------------------------------------------------------------verifd
sub verifd {
	$psr = "Veuillez ré-entrer le nom simple du sous répertoire: expl: image\nil aura comme path $d\/image ou passer en tapant Enter\n";
	$psr1 = "avez vous un sous-repertoire (pour les photos, icones, etc)\nsi oui lequel: (expl: images)\n";
  unless (-e $d) {
    print "Veuillez ré-entrer le chemin complet du dossier à traiter, expl:" . '/home/pub/monsite ou //perl//pub//toto' . "\n";
    chomp($d = <STDIN>);
  }
	#assignation de la valeur de $d en tant que nom sans path pour nomer "nw$d"
	(@ds = split(/\\/, $d)) if ($gnus == 0);
	(@ds = split(/\//, $d)) if ($gnus == 1);
	$ds = pop @ds;
	
	#nettoyage de srep au cas ou-------------
	if ($srep =~ /\w/i) {
		if (!(-e $srep)) {
			print "$psr\n";
			chomp ($srep = <STDIN>);
		}
	}
	else {
		# --demande si il doit y avoir un sous-repertoire (style ./images)
		print "$psr1\n";
		chomp ($srep = <STDIN>);
	}
	#--------------------------------------


	#-----------ouverture lecture, assignation @lsfile, controle srep != sous_rep
	opendir R, "$d" or die "Ouverture de $d impossible $!";
	@lsfile = (sort readdir R);
	closedir R or die "Fermeture du repertoire R impossible $!";
	foreach $file(@lsfile) {
		if (-d "$d\/$file") {
			$sous_rep = $file;
		}
		else {
			push @nwlsfile, $file;
		}
	}
	if($srep =~ /\w/) { 
		if ($sous_rep ne $srep) {
		LABELSAME:print "$lx\n\tAchtung Achtung\tx\nle sous repertoire existant ($sous_rep) \nn\'est pas identique à celui que vous donnez ($srep)\nvoulez vous:\nconserver le repertoire initial $sous_rep [A]\nchanger le repertoire en $srep [B] (et les liens y conduisant)\nrepondez par A ou B ou H (pour plus ample explications):\n";
			$resp = <STDIN>;
			chomp $resp;
			if ($resp =~ /^a/i) {
				$srep = $sous_rep;
				print "ok on conserve l\'original $srep\n";
			}
			elsif ($resp =~ /^b/i) {
				#changer $sous_rep en $srep
				print "Le repertoire $sous_rep s\appelera $srep et tout les liens y conduisant seront modifier dans ce sens\n";
			}
			else {
				print "Vous avez defini $srep comme sous repertoire de $d\nalors que $d a deja un sous repertoire $sous_rep \ndonc il faut que vous fassier votre choix pour que les liens attribuer au fichier du sous repertoire soit valide\n donc deux solutions A ou B\n A vous garder le sous repertoire existant\nB vous definissez $srep comme nouveau sous repertoire\ndonc a la prochaine question repondez par A ou par B\n"; 
				goto LABELSAME;
			}
		}
	}
	else {
		$srep = $sous_rep;
		}
	}

END;
