#!/bin/bash

# Objet : Mise à jour des squelettes SPIP 1.7 et 1.8 -> SPIP 1.9
# Script nécessitant une version de Bash > 3.0
# Auteur : pvincent@erasme.org - Mars 2007 - 
# License : GPL

# NOTE : FAIRE UNE SAUVEGARDE DES SQUELETTES AVANT TOUTE EXCECUTION
# Ce script a été développé pour répondre aux besoins spécifiques du 
# squelette reseau (erasme) et de ses déclinaisons. 
# A adapter aux particularités de chaque jeu de squelette.
# Le script s'éxécute depuis la racine du site en passant
# en paramètre le dossier contenant les fichiers de squelette.

# Répertoire de travail

	echo -en "\nIndiquer le dossier contenant les squelettes :"
	read repertoire

	if 	[ -d $repertoire ];
	then
		echo -en "\nBackup du répertoire...\n\n"
	else
		echo -en "\nLe répertoire n'existe pas. \nVeuillez relancer le script.\n\n";
		exit;
	fi

# Backup des fichiers

	if 	[ -d "sauvegarde_$repertoire" ];
	then
		echo -en "Attention : la sauvegarde existe déjà. \nPour continuer, pressez une touche (la sauvegarde précédente sera écrasée)\n" && read temp
	else
		mkdir "sauvegarde_$repertoire";
	fi
	
	cp -aRf $repertoire/ sauvegarde_$repertoire/

#Initialisation des valeurs de remplacement

	#Remplacement des INCLURE

	rec[0]='< *INCLURE *(\(.\+\)[.]php3 *)>'
	rep[0]='[(#INCLURE{fond=\1})]'

	rec[1]='< *INCLURE *(\(.\+\)[.]php3 *) *\({.\+}\) *>'
	rep[1]='[(#INCLURE{fond=\1}\2)]'


	#Remplacements spécifiques au squelette - à modifier en cas de besoin

	rec[2]='&'
	rep[2]='&'
	
	rec[3]='&'
	rep[3]='&'

	#sq-sssc
	#rec[2]='<link.\+DOSSIER_SQUELETTE.\+>'
	#rep[2]='<link rel="stylesheet" href="#DOSSIER_SQUELETTE\/style.css" type="text\/css">'


	#Remplacement des écritures statiques

	rec[4]='article.php3?id_article=#ID_ARTICLE'
	rep[4]='#URL_ARTICLE'

	rec[5]='rubrique.php3?id_rubrique=#ID_RUBRIQUE'
	rep[5]='#URL_RUBRIQUE'

	rec[6]='breve.php3?id_breve=#ID_BREVE'
	rep[6]='#URL_BREVE'

	rec[7]='auteur.php3?id_auteur=#ID_AUTEUR'
	rep[7]='#URL_AUTEUR'

	rec[8]='mot.php3?id_mot=#ID_MOT'
	rep[8]='#URL_MOT'

	# Cas d'adressages génériques : remplacement des .php3 par spip.php?page=

	rec[9]='\([0-9a-zA-Z_-]\+\).php3?'
	rep[9]='spip.php?page=\1\&'

	rec[10]='\([0-9a-zA-Z_-]\+\).php3'
	rep[10]='spip.php?page=\1'

	# Traitement du cas de la recherche

	rec[11]='\(<input.\+recherche\)'
	rep[11]='<input name="page" value="recherche" type="hidden" \/>\1'


	# Quelques mises en confirmité XHTML - W3C
	# Penser à passer une couche de l'outil tidy sur les squelettes eux-mêmes
	# Puis à activer l'option tidy dans mes_options.php3 au niveau des fichiers HTML calculés par SPIP : 

	rec[12]='< *\([hb]r\) *>'
	rep[12]='<\1 \/>'

	rec[13]='\(<link.*\?[^-?\/]\)>'
	rep[13]='\1 \/>'

	rec[14]='\(<input.*\?[^-?\/]\)>'
	rep[14]='\1 \/>'

	rec[15]='\(<img.*\?[^-?\/]\)>'
	rep[15]='\1 \/>'

	rec[16]='\(<meta.*\?[^-?\/]\)>'
	rep[16]='\1 \/>'

	#rec[15]='\(<img \)\([^a][^l][^t]\).\+\(>\)'
	#rep[15]='\1\2 alt=\"\" \3'

	# Note : possibilité de lecture directe depuis un fichier :
	# i=1; while read aLine ;do rec[$i]=$aLine; i=$(($i+1)) ;done  < mon_fichier.txt


# Execution des remplacements

	for ((a=0 ; a<=${#rec[*]}-1 ; a++))
	do
	    echo
	    echo "$a : remplacement de ${rec[a]} par ${rep[a]}";
		echo
		#echo "valider par entrer"; read temp;
		for i in `ls $repertoire/*.html`; 
		do
			sed -e "s/${rec[a]}/${rep[a]}/gi" "$i" > "$i".new 2>/dev/null ;
			mv "$i.new" "$i";		
		done
	done


# Exécution du cache
	echo -en "\nVoulez vous conserver le cache, si existant : O\N ?\n" && read cache1
	echo -en "\nQuelle valeur par défault voulez vous appliquer au cache en secondes (Cache nul : 0) ?\n" && read cache2

# CACHE

		for i in `ls $repertoire/*.html`; 
		do
			if grep "#CACHE" "$i";
			then
				if [ "$cache1" = "N" ] ;
		 			then
						sed -e s/"#CACHE{.*}"/"#CACHE{$cache2}"/gi "$i" > "$i".new 2>/dev/null ;
					else
						cat "$i" > "$i".new
				fi
			else
				echo "#CACHE{$cache2}" > "$i".new 
				cat "$i" >> "$i".new
			fi
			
			mv "$i".new "$i";		
		done


# Exécution de Tidy
	echo "Remplacements terminés."
 	echo -en "\nVoulez vous éxécuter Tidy (http://www.w3.org/People/Raggett/tidy/) \npour avoir une indication des MAJ de conformité à effectuer\nou des boucles non fermées dans vos squelettes\nO/N ?" && read temp1
 	if [ "$temp1" = "O" ];
 	then
 		for i in `ls $repertoire/*.html`; 
			do
				echo "
------------------------------------------------------------------------------
				Travail de Tidy sur $i
------------------------------------------------------------------------------
				"
				echo "Presser la touche Entrée pour commencer" && read temp
				tidy -e -q -xml --show-warnings false $i
			done
	else
		echo -en "\n\nVous pouvez lancer ultérieurement la commande > tidy -e -q -xml --show-warnings false $repertoire/*.html\n\n"
		exit
	fi
