#!/bin/sh

##
# Ce programme présente sous forme d'un tableau html, un ensemble 
# de quadruplets {O, A, L, C} tel que 
#    - O est l'URL d'une page sur un serveur distant.
#    - A est l'URL d'une version aspirée par wget 
#      et enregistrée localement de la page désignée par O.
#    - L est l'URL d'une version enregistrée localement 
#      et sous format texte (lynxée) de la page désignée par A.
#    - C est l'URL d'une page enregistrée localement correspondant à 
#      l'extraction  du contexte où apparait un mot donnée par egrep dans la 
#      page désigné par L.
#
# Usage : $0 fichierUrl "T";
#  Où : 
#     - fichierUrl est un fichier texte contenant une liste d'URLs
#     - T est le titre indiquant le lien sémantique (l'usage) qui est fait 
#       par cette liste d'URLs.
# Rq : Si le bon nombre d'argument n'est pas fourni le programme rentrera dans 
#      un mode intéractif.
#
# Le fichier html produit contenant le tableau html sera nommé selon la 
# convention suivante : Si fichierUrl=base.ext ou base alors son 
# nom sera base.html
# 
# Chaque page désignée par un élément du quadruplet sera enregistrée dans son 
# répertoire
# correspondant et dans un sous répertoire dont le nom correspondrat à base_rep. 
#
##


###                Initialisation des données configurables                    ##
#                                                                               #
#                                                                               #

# Mot constituant le thème du projet. Ce mot sera dans toutes les pages
# désignées par un élément du quadruplet.
MOT="barrage";

# Nombre de lignes souhaitées pour illustrer le contexte d'utilisation
# d'un mot.
NBContexte=1;

# Nb de paramètres attendu sur la ligne de commande
NBPARAM=3;

# Nb max d'occurence du mot apparaissant dans le résumé contexte.
NBm=1;

# Seront utilisé que s'il y a des URLs du monde.
user="plurital"
pass="20060220"


# Répertoires contenants les différents sous-répertoires, constituant 
# l'arborescence pré-définies du projet.

BREPASP="PAGES-ASPIREES";
BREPCONT="CONTEXTES";
BREPDUMP="DUMP-TEXT";
BREPURL="LISTES-URL";
BJOURNAL="JOURNAL";

# Liste contenant les répertoires principaux.
tabRep="$BREPASP $BREPCONT $BREPDUMP $BREPURL $BJOURNAL";

#importe les fonctions
. ./programmes/functions.sh

###   Acquisition des paramètres soit par lecture sur la ligne de commande     ##
#     soit par l'entrée standard.                                               #
#                                                                               #


# On teste si la ligne de commande ne contient pas le bon nombre d'argument.
if [ $# != $NBPARAM ]
then
    infouser "Usage: $0 fichierUrl \"titre pour les usages\"\n";
    infouser "Entre dans le mode interactif\n";
    
    #- Si le 1er paramètre n'est pas défini
    if [ -z $1 ]
	then
	infouser "Tapez le nom de fichier contenant les URLs à traiter : \n";
	read fichierUrl;
    else
	fichierUrl=$1;
    fi
    #- Si le 2ème paramètre n'est pas défini
    if [ -z $2 ]
	then
	infouser "Tapez le titre pour les usages de ces URLs : \n";
	read titre;
    else
	titre=$2;
    fi

    #- Si le 3ème paramètre n'est pas défini
    if [ -z $3 ]
	then
	infouser "Tapez le MOT à explorer : \n";
	read MOT;
    else
       MOT=$3;
    fi
else
# La ligne contient le bon nombre d'arguments.
    fichierUrl=$1
    titre=$2
    MOT=$3
fi

# Test de l'existence du fichier d'url dans le répertoire courant.
# ou dans le répertoire LISTES-URLS ainsi que de sa régularité.
if [ ! -f $fichierUrl ] && [ ! -f $BREPURL/$fichierUrl ]
then
    infouser "Le fichier $fichierUrl n'existe ni dans le répertoire courant\n";
    infouser " ni dans le répertoire $BREPURL ou n'est pas un fichier régulier\n";
    
    # erreur.
    exit 1;
fi

###   Création de l'arborescence et du fichier html résultat.
#                                                                               #
#                                                                               #


# Création de l'arborescence de niveau 1.
for rep in $tabRep
  do
  # Test si $rep existe et est un répertoire.
  if [ ! -d $rep ]
      then
      infouser "le repertoire $rep n'existe pas, je le créé\n"      
      mkdir $rep || exit 1
  fi
done


# Extraction de la base du nom de $fichierUrl.
fichier=`echo $fichierUrl|cut -d . -f 0,1`


# Création des noms des sous répertoires.
repPageAsp=$BREPASP/$fichier"_rep";
repPageLynx=$BREPDUMP/$fichier"_rep";
repPageContexte=$BREPCONT/$fichier"_rep";
repPageJournal=$BJOURNAL/$fichier"_rep";

# Liste contenant chaque sous répertoire.
tabSousRep="$repPageAsp $repPageLynx $repPageContexte $repPageJournal";

## Création des différents sous-répertoires s'ils n'existent pas.
#
for rep in $tabSousRep
do
  if [ ! -d $rep ]
      then
      # Le repertoire n'existe pas.
      infouser "le repertoire $rep n'existe pas, je le créé\n"
      mkdir $rep || exit 1
  fi
done


# Le fichier html résultat.
ficHtml=$repPageJournal/$fichier.html;
# Nom du fichier Url complet.
RfichierUrl=$BREPURL/$fichierUrl;

if [ -f $fichierUrl ]
    then
    # Le fichier URL est dans le repertoire courant, il faut le déplacer.
    mv $fichierUrl $RfichierUrl || exit 1
fi

####
#
#

# Compte le nbr d'URL dans $RfichierUr
nbUrl=`cat $RfichierUrl|wc -l`
nbPageATelecharger=$nbUrl
action="N"
if [ -f $ficHtml ]
    then
    # La page html existe.
    # Gestion des choix utilisateurs.
    echo "Le fichier $ficHtml existe déjà :" 
    
    echo "Taper E pour écraser la page html et  recommencer les téléchargements à partir de ce fichier URL."
    echo "Taper C pour concaténer les résultats."
    echo "Taper Q pour quitter le programme maintenant."
    
    read choix
    
    case "$choix" in
	
	"C" | "c" )
	    echo "Vous concatenez le fichier"
	    # appelle la fonction test_coherence
	    test_coherence_corpus
	    if [ $? -ne 0 ]; then echo "Etat du corpus incohérent"; exit 1; fi;
	    
	    # prepare la concatenation, recopie début fichier, compose nouveau fichier URL
	    # en faisant la différence du fichier URL passé en paramètre et de ce qui existe déjà
	    concatenation
	    if [[ $? -ne 0 ]]; then echo "Concatenation impossible"; exit 1; fi;
	    action="C"
	    break
	    ;;

	"E" | "e" )
	    echo "Vous écraser le fichier html mais pas les pages déjà téléchargées"
	    action="E"
            # On va continuer le traitement normal.
	    break
	    ;;
	
	"Q" | "q" )
	    echo "Au revoir"
	    exit 0
	    ;;
	
	* )
	    # Cas par défaut.
	    echo "Vous ne respecter pas les consignes, au revoir"
	    exit 0
	    ;;	
    esac
fi
    
# Compte le nombre d'URL dans le fichier d'URL.
infouser "Nbe d'URLs dans $RfichierUrl : $nbUrl"
infouser "Nbre d'URLs à télécharger $nbPageATelecharger";


###            Début des traitements                                          ###
#                                                                               #
#                                                                               #

# Le fichier n'existe pas je créer les headers
if [ "$action" != "C" ]
    then
    echo "<html>" > $ficHtml
    echo_header $titre $ficHtml
    echo "<body><table border=1>" >> $ficHtml;
    # Ecriture à la suite.
    echo  "<h1>$titre</h1>" >> $ficHtml;
    echo "<tr><td>URL</td><td>Page Aspirées : <BR> $repPageAsp</td><td>Page Lynxée : <BR> 
$repPageLynx</td><td>Contexte : $NBm occ. <BR>$repPageContexte</td></tr>" >> $ficHtml;
    
# Création dynamique des noms de fichiers locaux. Tous les éléments d'un même 
# quartet ont un nom de fichier dont la base est un même chiffre.
nbPageHtml=0 #Puisque le fichier n'est pas concaténé les noms de fichier vont commencer à 1
echo "action $action"
fi

##  Début de la boucle principale
#
: $[ fileName=$nbPageHtml + 1 ]
for url in `cat $RfichierUrl`
do

# On télécharge la page, elle portera l'extension .html
ficDestAsp="$repPageAsp""/""$fileName"".html"
cmd="wget -N --user=$user --password=$pass --dns-timeout=60 --connect-timeout=60 -O $ficDestAsp $url"
infouser $cmd "\n";
`$cmd`;
err=$?  # enregistre le code de sortie de wget.
# on teste si wget à réussi, le test de l'existence
# du fichier ne suffit pas, wget le créé dans tous les cas, il faut
# donc tester le code de sortie 0 succès, autre erreur.
if [ -f $ficDestAsp ] && [ $err -eq '0' ]
    then
    # On lynxe la page
    ficSourceLynx=$ficDestAsp
    # Les pages lynxées ont l'extension .txt
    ficDestLynx="$repPageLynx""/""$fileName"".txt"
    cmd2="lynx -force_html -dump $ficSourceLynx > ./$ficDestLynx"
    infouser $cmd2 "\n";
    #`$cmd2`;
    # Ne marche pas en passant par la variable intermédiaire !!
    lynx -force_html -dump $ficSourceLynx > ./$ficDestLynx


    # On grep le contexte de la page à partir de la page lynxée
    ficSourceCont=$ficDestLynx;   #
    # Le contexte porte aussi l'extension .txt
    ficDestCont="$repPageContexte""/""$fileName"".txt"
    cmd2="grep -i $MOT -C $NBContexte  $ficSourceCont > ./$ficDestCont"
    infouser $cmd2, "\n";
    #`$cmd2`
    # Ne marche pas en passant par la variable intermédiaire !!
    # -C est equivalent à -A et -B 
    egrep -i $MOT -C $NBContexte  $ficSourceCont > ./$ficDestCont

    specFicDestCont="$BREPCONT\/""$fichier""\_rep""\/""$fileName"".txt";
    contexte=`grep $MOT -C $NBContexte -m $NBm $ficSourceCont|sed -e "s/$MOT/\<a href=..\/..\/$specFicDestCont\>$MOT\<\/a\>/g"`;
    # Ajout dans le tableau html.
    # Ici <tr> est début de ligne (quartet), <td> est une colonne (élément du quartet)
    echo "<tr>
    <td><a href=$url>$fileName</a></td>
    <td><a href=../../$ficDestAsp>$fileName.html</a></td>
    <td><a href=../../$ficDestLynx>$fileName.txt</a></td>
    <td>$contexte</td>
    </tr>" >> $ficHtml;
    
    : $[ fileName=$fileName + 1 ]
fi
done

echo "</table></body></html>" >> $ficHtml;