#!/bin/bash

# php_vers_html version 1.3
# Par le ouebmestre de micr0lab
# Licence art libre ( http://artlibre.org/ ) : vous êtes libres de copier,
# diffuser et transformer librement les oeuvres dans le respect des droits de
# l'auteur.
# Ce script «  compile » votre site en php vers un site en html. Bien
# évidemment, cela suppose que vous n’employez php que pour gérer des inclusions
# et des calculs, et non pas pour rendre votre site interactif, auquel cas la
# compilation vers du html casserait l’interactivité de votre site. Il permets
# d’effectuer une fois pour toute les calculs sur votre ordinateur, plutôt que de 
# les faire faire à votre serveur à chaque requête.


# Ce script est fourni tel quel, il est préférable de comprendre son
# fonctionnement avant de chercher à l’employer, le ouebmestre de micr0lab ne
# serait être responsable d'un quelconque effet indésirable engendré par l'emploi 
# de ce script.

# Votre attention est notamment attirée sur le fait que si un fichier index.html
# existait déjà dans un dossier où se trouve un fichier index.php, et que ce
# fichier est différent du rendu statique obtenu à partir du fichier index.php,
# alors ce fichier index.html sera écrasé.

# Pour que ce script soit utile, pensez à préciser dans le fichier .htaccess à
# la racine de votre site (sans le # le précédant) : 
# DirectoryIndex index.html index.php
# Ainsi, la page index.html sera servie par défaut, et si elle n’existe pas,
# alors sera affichée index.php.

# Bonne compilation !

# Changements avec la version 1 : 
# Désormais, les résultats des téléchargements, et la mise à jour ou non du
# fichier index.html ne sont plus affichées au fur et à mesure, mais stockées dans 
# des variables, triées, et affichées à la fin.


#####################
# À personnaliser      ! #
####################

# L’adresse locale de votre site.
path=http://localhost/micr0lab/
# Le chemin du dossier où se trouve votre site.
dossier=/donnees/micr0lab/sites/micr0lab/

# Ici, on suppose que votre site est constitué de dossiers qui contiennent
# chacun au plus une page en php à compiler.
# On suppose que cette page se nomme index.php, elle est ainsi affichée par
# défaut lorsque l’on entre simplement le chemin du dossier.

# On commmence fixer comme série de paramètres la liste des fichiers php à
# compiler : 
#set `find $dossier -name "index.php" -o -path "*/sites/*" -prune -type f`
# Ici, on liste tous les fichiers index.php de tous les dossiers contenus dans
# le chemin $dossier, à l’exception des dossiers qui se trouvent dans le dossier
# "sites".
# Bogue : le fichier /sites/index.php est pris en compte. Ça ne pose pas de
# soucis, mais c’est curieux. Si on veut l’exclure, il suffit de préciser entre «
# -type f  » et « `  » ce qui suit : «  ! -name index.html  ».

# Pour lister simplement tous fichiers index.php de tous les dossiers, faîtes
# set `find $dossier -name "index.php"`

#############################
#Fin de la personnalisation.#
#############################


# Quelques variables (tableaux et compteurs) pour stocker respectivement…
# Les erreurs au téléchargement
declare -a erreurs_telechargement
declare -i compt_erreurs_telechargement=0
# Les fichiers crées
declare -a nouveaux_fichiers
declare -i compt_nouveaux_fichiers=0
# Les fichiers écrasés
declare -a fichiers_ecrases
declare -i compt_fichiers_ecrases=0
# Les fichiers ignorés
declare -a fichiers_ignores
declare -i compt_fichiers_ignores=0
#Pour dater la compilation
jour=$(date +%D)
heure=$(date +%T)

echo $dossier


for fich in $(find $dossier -name "index.php");
# Pour chacun des fichiers index.php trouvé…
do
    echo "En train de traiter $path${fich:${#dossier}}"
    wget $path${fich:${#dossier}} -q -O /tmp/index.html
# On enregistre une version html que l’on sauvegarde dans /tmp/index.html à l’aide de wget.
	    if [ $? -ne 0 ]
# Si la commande wget a renvoyé une erreur   …
	    then 
		let "compt_erreurs_telechargement= $compt_erreurs_telechargement + 1"
		erreurs_telechargement[$compt_erreurs_telechargement]=$path${fich:${#dossier}:-3}html
		rm /tmp/index.html
# On stocke dans le tableau l'adresse de la page pour laquelle il y a eu une erreur et on supprime le fichier /tmp/index.html.
	    else 
# Si la commande wget n’a pas renvoyé d’erreur   …
  sed -i '1s|^|<!--\n 	Bienvenue, lecteur-trice de code source !\n\n\n	Comment est fabriqué ce site ?  \n		— https://micr0lab.org/tech/ \n		— https://micr0lab.org/rouage/ \n		— https://micr0lab.org/humains.txt\n\n\n	Licence : \n		Code le plus souvent sous licence art libre (artlibre.org), voir https://micr0lab.org/rouage/droits/#d_site pour plus d’infos.\n\n\n 	Contact : \n		Voir https://micr0lab.org/contact/\n\n\n **********************\n *	=======> Puisque tu es là <======\n *	Tu aimes le code?\n *		Tu modèles les octets ?\n * 			Les arts numériques de micr0lab (https://micr0lab.org/arts_numeriques/) sont là !\n *	======> Proposes-y tes projets ! <======\n **********************\n -->|' /tmp/index.html 
# On marque le fichier obtenu.
	    tidy -config /donnees/micr0lab/scripts/compile_php/config-tidy -m /tmp/index.html
		if [ -f ${fich:0:-10}/index.html ]
# On regarde si le dossier dans lequel se trouvait le fichier index.php actuellement compilé contenait déjà un fichier index.html.
		then
		    DIFF=$(diff ${fich:0:-10}/index.html /tmp/index.html)
#index.html existe déjà, on compare la version obtenue et la version actuelle.
 		    if [ "$DIFF" != "" ]
 		    then
# Si les fichiers sont différents…
			let "compt_fichiers_ecrases= $compt_fichiers_ecrases + 1"
			fichiers_ecrases[$compt_fichiers_ecrases]=$path${fich:${#dossier}:-3}html
			mv /tmp/index.html ${fich:0:-10}/index.html
			#sed -i "/<head>/ i <!-- Version compilée en html le $jour vers $heure selon la méthode décrite à http://micr0lab.org/tech/scripts/#php_vers_html. -->\n" ${fich:0:-10}/index.html
# On stocke dans le tableau l’adresse de la page écrasée et on écrase le fichier index.html avec la version générée par wget.
 		    else
# Si le fichier index.html qui existait déjà et le fichier index.html obtenu avec wget sont identiques  …
			let "compt_fichiers_ignores= $compt_fichiers_ignores + 1"
			fichiers_ignores[$compt_fichiers_ignores]=$path${fich:${#dossier}:-3}html
			rm /tmp/index.html
# Alors on stocke dans le tableau l’adresse de la page ignorée et on efface le fichier généré par wget.
		    fi
		else
# Le fichier index.html n’existait pas.
		    let "compt_nouveaux_fichiers= $compt_nouveaux_fichiers + 1"
		    nouveaux_fichiers[$compt_nouveaux_fichiers]=$path${fich:${#dossier}:-3}html
		    mv /tmp/index.html ${fich:0:-10}/index.html
		    sed -i "/<head>/ i <!-- Version compilée en html le $jour vers $heure selon la méthode décrite à http://micr0lab.org/tech/scripts/#php_vers_html. -->" ${fich:0:-10}/index.html
# On stocke l’adresse du fichier crée dans le tableau et on déplace la version fabriquée par wget dans le dossier
		fi
	    fi
done


#####
# Désormais, on affiche les résultats.
echo -e "\n"

# Pour les pages laissées intactes :
if [ "$compt_fichiers_ignores" != "0" ] 
then
    echo -e "********************* \n* Ont été ignorés : *\n*********************"
    while [ "$compt_fichiers_ignores" != "0" ]
    do 
	echo ${fichiers_ignores[$compt_fichiers_ignores]}
	let "compt_fichiers_ignores = $compt_fichiers_ignores -1"
    done
    echo -e "\n"
else
    echo -e "*********************\n* Tous les fichiers ont été modifiées ou crées ! *\n*********************\n"
fi

#Pour les pages en erreurs : 
if [ "$compt_erreurs_telechargement" != "0" ] 
then
    echo -e "****************************** \n* Erreur au téléchargement : *\n******************************"
    while [ "$compt_erreurs_telechargement" != "0" ]
    do 
	echo ${erreurs_telechargement[$compt_erreurs_telechargement]}
	let "compt_erreurs_telechargement = $compt_erreurs_telechargement -1"
    done
    echo -e "\n\n"
else
    echo -e "************************************\n* Aucune erreur au téléchargement. *\n************************************\n\n"
fi

# Pour les pages créées :
if [ "$compt_nouveaux_fichiers" != "0" ] 
then
    echo -e "********************* \n Ont été crées :\n*********************"
    while [ "$compt_nouveaux_fichiers" != "0" ]
    do 
	echo ${nouveaux_fichiers[$compt_nouveaux_fichiers]}
	let "compt_nouveaux_fichiers = $compt_nouveaux_fichiers -1"
    done
    echo -e "\n\n"
else
    echo -e "*******************************\n* Aucun nouveau fichier crée. *\n*******************************\n\n"
fi 

# Pour les pages écrasées :
if [ "$compt_fichiers_ecrases" != "0" ] 
then
    echo -e "**********************\n* Ont été écrasées : *\n**********************"
    while [ "$compt_fichiers_ecrases" != "0" ]
    do 
	echo ${fichiers_ecrases[$compt_fichiers_ecrases]}
	let "compt_fichiers_ecrases = $compt_fichiers_ecrases -1"
    done
    echo -e "\n\n"
else
    echo -e "*************************\n* Aucun fichier écrasé. *\n*************************\n\n"
fi 

### Fin de l’affichage des résultats.
