#! /bin/sh

#
# ce script supervise la construction de(s) arborescences exportees par le
# serveur Intranet. En clair, il fait :
#  - mise a jour des listes de tous les fichiers exploitables (non proteges)
#  - generation des fichiers '.html' si les fichiers '.txt' sont plus recents
#  - generation des 'index.html' si le contenu des repertoires evolue
# ... et il ne fait pas le cafe (cf: Java_unresolved#logo)
#
# Par defaut, le script travaille sur l'arborescence principale : '$TWSROOT' 
# Pour lui indiquer quelles sont les autres arborescences a explorer,
# completez la 'list_of_trees_to_browse', puis lancez le script
# '$TWSTOOLS/manage_trees_to_browse.pl' pour convertir le texte en HASH
#


# fabriquer les variables d'environnement utiles, a partir de '$TWSTOOLS'
TWSTOOLS=`echo $0 | sed "s|/[^/]*$||"`;

# sourcer les symboles TWS
. $TWSTOOLS/../.twsrc



# qui est il ?
TWSROOTMASTER=root@calimero





if [ -z "$1" ]
 then
   echo "(remember: use 'purge' option to force new lists of links)"
 fi


# par defaut, on ne force pas 'txt2html'...
sed 's/^FORCE=.*$/FORCE=/' < $TWSMAKEFILE > "$TWSMAKEFILE"2
mv "$TWSMAKEFILE"2 $TWSMAKEFILE




# purger les 'megalists' si necessaire
remove_hash_arrays=true
forcedScan=
while [ ! -z "$1" ]
 do
   case $1 in
    rescan )
      forcedScan=force
      ;;
    purge )
      remove_hash_arrays=true
      echo "rm $TWSFILES/megalist_of_*"
      rm $TWSFILES/megalist_of_* > /dev/null 2>&1
      ;;
    force )
      echo ""
      echo "FORCE : every '.txt' will be rebuilt with 'txt2html'..."
      sed 's/^FORCE=.*$/FORCE=force/' < $TWSMAKEFILE > "$TWSMAKEFILE"2
      mv "$TWSMAKEFILE"2 $TWSMAKEFILE
      ;;
    ? | "-?" | h | "-h" )
      echo "
Usage : make_everything_but_coffee [purge] [force] [rescan]

purge   :  effacer les fichiers 'megalist' pour les recreer (violent)
rescan  :  forcer un parcours des arborescences pour prendre en compte
           tous les nouveaux fichiers, meme si la derniere mise a jour
           est recente 
force   :  forcer 'txt2html' pour tous les fichiers '.txt' (et les index)


"
      exit
      ;;
    * )
      do=nothing
      ;;
   esac

   shift
 done



# PURGE des fichiers d'erreurs
for i in $TWSFILES/log_*
 do
   if [ -w $i ]; then cat /dev/null > $i; fi
 done




# mise a jour eventuelle du HASH ARRAY des arborescences a traiter
#  - utilisation de 'make' pour comparer les dates...
echo ""
echo "Verification de la liste des arborescences a traiter"
make -s -f $TWSMAKEFILE check_trees


# creer la liste des repertoires non proteges
#  - megalist_of_dirs
echo ""
echo "Creation de la liste des repertoires non proteges"
$TWSTOOLS/get_unprotected_dirs.pl $forcedScan

#
# la toute premiere fois, si il n'existe AUCUN hash array pour resoudre les 
# demandes de liens, il faut appeler 'make_txt2html_files.pl' pour les
# generer (meme si ils sont vides...)
if [    ! -r $TWSFILES/list_of_images.dir\
     -o ! -r $TWSFILES/list_of_images.pag \
     -o ! -r $TWSFILES/list_of_linkspaths.dir \
     -o ! -r $TWSFILES/list_of_linkspaths.pag \
     -o ! -r $TWSFILES/list_of_linkstitles.dir \
     -o ! -r $TWSFILES/list_of_linkstitles.pag \
     -o ! -r $TWSFILES/list_of_stuff.dir \
     -o ! -r  $TWSFILES/list_of_stuff.pag ]
 then
   # creer la liste des repertoires non proteges
   #  - megalist_of_files
   echo ""
   echo "PREMIERE creation des tableaux associatifs (liens hypertextes)"
   $TWSTOOLS/make_txt2html_files.pl $forcedScan
 fi



# premiere passe : generer tous les '.html' si les '.txt' sont plus recents
#
# NE PAS APPELER 'make_html_files.pl' si les hash arrays n'existent pas pour
# decouvrir les references... (erreur : I need a HASH !)
#
# ATTENTION : on a bien evidemment besoin des listes completes pour brancher
# les liens, ce qui peut conduire a de nombreuses references non resolues.
# MAIS... il FAUT generer des fichiers '.html' bidon, car ils permettront de
# faire une liste complete de tous les fichiers dans 'make_web_files.pl'
#
echo ""
echo "Generation des fichiers '.html' a partir des '.txt' plus recents"
$TWSTOOLS/make_html_files.pl $forcedScan


# si on a l'option 'purge', il faut forcer "maintenant" la creation des 
# hash arrays (ils viennent de servir "a peu pres" a l'etape precedente, mais
# ils doivent etre "propres" pour l'etape finale)
if [ "$remove_hash_arrays" = "true" ]
 then
   rm $TWSFILES/list_of_images.dir
   rm $TWSFILES/list_of_images.pag
   rm $TWSFILES/list_of_linkspaths.dir
   rm $TWSFILES/list_of_linkspaths.pag
   rm $TWSFILES/list_of_linkstitles.dir
   rm $TWSFILES/list_of_linkstitles.pag
   rm $TWSFILES/list_of_stuff.dir
   rm $TWSFILES/list_of_stuff.pag   
 fi


# creer les tableaux de tous les fichiers connus
# (prendre compte de ceux qui viennt d'etre generes)
#  - megalist_of_files ("tout", mais purge de ce qui ne sera pas utilise)
#  - list_of_linkspaths.[dir,pag]
#  - list_of_linkstitles.[dir,pag]
#  - list_of_images.[dir,pag]
#  - list_of_stuff.[dir,pag]
# y compris les HTML generes ci-dessus, meme si ils sont incomplets...
echo ""
echo "Creation des tableaux associatifs pour resoudre les liens hypertextes"
$TWSTOOLS/make_txt2html_files.pl $forcedScan


# chercher les liens non resolus au premier passage de 'create_html_files', et
# faire un derniere tentative avec les tableaux plus recents
echo ""
echo "Utiliser les nouveaux tableaux pour corriger les liens non resolus"
$TWSTOOLS/try_again_make_html_files.pl


# generer tous les 'index.html' si la directive 'index.auto' est presente
echo ""
echo "Generer les 'index.html' dans les repertoires qui ont la directive 'index.auto'"
$TWSTOOLS/make_index_files.pl


# envoyer au WebMaster la liste des fichiers qui contiennent des erreurs
if [ -r $TWSFILES/log_unresolved ]
 then
   awk '($1=="================="){start=NR+1;}(NR>start){print $0;}' \
	< $TWSFILES/log_unresolved > /tmp/unresolved_$$

    nb_lines=`wc -l  /tmp/unresolved_$$ | awk '{print $1}'`

    if [ $nb_lines -gt 1 ]
     then
       echo SHOULD MAIL A MESSAGE
       ### Mail -s "txt2html : UNRESOLVED links" $TWSROOTMASTER < /tmp/unresolved_$$
     fi

   rm /tmp/unresolved_$$
 fi



echo ""




# si par hasard on avait "force" le 'Makefile', on le remet au propre
sed 's/^FORCE=.*$/FORCE=/' < $TWSMAKEFILE > "$TWSMAKEFILE"2
mv "$TWSMAKEFILE"2 $TWSMAKEFILE
