Codes Libres - Blog de Boyquotes - SPIP - LINUX - AJAX - CSS

Accueil > Développements > BASH > Visual SPIP , explication du code

Visual SPIP , explication du code

jeudi 31 mars 2011, par nicolas

Je vais expliquer ici le déroulement des scripts BASH qui permettent de réaliser Visual SPIP ( pour savoir ce qu’est Visual SPIP voir ici ).

Il sera question de boucle while, de condition if, else..., d’utilisation de commande ls, cat, touch et autres commandes sed et grep ou encore cut...pour arriver à nos fins.

Je signale que ces scripts ont étaient crées à l’origine car je souhaitais pouvoir imprimer ( dont mettre en page le code de façon la plus lisible possible ) afin de pouvoir lire le code des plugins de SPIP et d’un autre coté me permettre d’apprendre le langage BASH par la pratique, dont si vous avez des améliorations qui optimise le temps de parsage et/ou rende le code à la fois plus léger, je suis preneur.

1. Préparation :
La commande tree doit etre installee sur le système pour obtenir l’arborescence du code a parser.

Il faut un SPIP ( version 2.0.x ou 2.1.x ) d’installé avec les plugins :
Article PDF
Imprimer document 2
Couteau suisse et sa lame : sommaire automatique

Récupérer le script sur github :
https://github.com/Boyquotes/visual-spip/archives/master

Et déposer son contenu dans (exemple) :

/var/www/clients/client1/web2/vs-script/

Récupérer les plugins que vous souhaitez examiner ( commencé avec seulement quelques plugins pour tester que tous fonctionne avant de lancer sur une centaine de plugins ).

Exemple utilisation avec le plugin console, extraire le zip dans

/var/www/clients/client1/web2/vs-dev/console/

Puis modifier ces 3 lignes dans lancement.sh si vos répertoires diffèrent :

rep="/var/www/clients/client1/web2/vs-dev"
rep_script="/var/www/clients/client1/web2/vs-script"
rep_antislash="\/var\/www\/clients\/client1\/web2\/vs-dev\/"

Faire un chmod 755 dessus les fichiers *.sh du dossier vs-script.

./lancement.sh {{c}}

Description du processus de ce script.
Le point de départ et le fichier lancement.sh, celui créer un fichier texte avec le nom des dossier à examiner.
Une fois ce fichier obtenu, pour chaque ligne de celui-ci on lance le script php2html.sh avec comme argument la ligne en question qui contient le nom du plugin.
exemple :

./lancement.sh c

Le c permet d’indiquer de sélectionner les dossiers commençant par c dans /var/www/clients/client1/web2/vs-dev
Cela récupère le dossier console ( de l’exemple ) donc et met ce nom dans le fichier repi.txt, après traitement de ce fichier, tous est nettoyé (slash, point ) est redirigé vers repa.txt, c’est ce dernier qui sera appelé par le script suivant (php2html.sh).

La boucle while ( à la fin du fichier lancement.sh ) boucle sur le fichier contenant les dossier de plugin à examiner et lance la commande php2html.sh contenu_de_chaque_ligne_du_fichier_repa.txt
Tous les fichiers du dossier du plugin sont triés suivant leur extension ( php, jpg, txt,... ) et on chacun un traitement spécifiques pour sortir le maximum d’information, exemple si on trouve un répertoire base, alors on s’en sert pour trouver combien et quels sont les noms des bases et champs crées...

Le fichier lancement.sh :

#!/bin/bash
rm -rf ./html
rm -rf ./tmp
rm -rf ./sql

mkdir -p tmp/spip
mkdir html
mkdir sql

> tmp/repohtml.txt
> tmp/repohtml.sql
> tmp/repisql.txt

echo 1 > ./j
echo "0" > ./rub
echo "2" > ./num

save="0"
nettoyer="0"
prendre=$1

if [ ${save:-0} = 1 ]
then
source init-save.sh
fi

rep="/var/www/clients/client1/web2/vs-dev"
rep_script="/var/www/clients/client1/web2/vs-script"
rep_antislash="\/var\/www\/clients\/client1\/web2\/vs-dev\/"

mkdir ./tmp/spip -p

ls -d $rep/[$prendre]*  | sed  "s/$rep_antislash//g" | sed  's/://g' > tmp/repi.txt
cat tmp/repi.txt

#Remise a zero des fichiers
> tmp/repi0.txt
> tmp/repa.txt
> tmp/fait

cat tmp/repi.txt | sed 's/sql//g;s/tmp//g;s/html//g' | sed '/./!d' > tmp/repa.txt
while read line
do
xml_ou_pas=`ls $rep/$line/plugin.xml`

if [ ${xml_ou_pas:-mot} == 'mot' ]
then
echo '#'$line >> tmp/repi0.txt

else
echo $line >> tmp/repi0.txt
#echo rep bon
fi

done < tmp/repi.txt

cat tmp/repi0.txt  | grep -v "#" > tmp/repa.txt
cat tmp/repi0.txt  | grep -v "#" >> tmp/repisql.txt

./php2html.sh $rep && ./html2php.sh && ./php2sql.sh $rep_script

if [ ${nettoyer:-0} = "1" ]
then
rm -rf ./html
rm -rf ./tmp
rm -rf ./sql

rm -rf ./j
rm -rf ./rub
rm -rf ./num

rm -rf ./repophp.txt
fi

Le fichier php2html.sh
Lance à son tour la commande pages2spip2.sh contenu_de_chaque_ligne_du_fichier_repa.txt

while read line
do
./pages2spip2.sh $line /$line
done < tmp/repa.txt

Le fichier pages2spip2.sh
Fichier très important, car il incorpore la quasi totalités des autres scripts de l’application ( les fichiers init-*.sh ) qui permette de générer l’article au format spip.

#!/bin/bash
nom=$1
rep=$2

source init.sh
echo init_geshi >> tmp/fait-txt
source init-geshi.sh
echo presentation >> tmp/fait-txt
source init-presentation.sh
echo php >> tmp/fait-txt
source init-php.sh
echo html2 >> tmp/fait-txt
source init-html2.sh
echo xml >> tmp/fait-txt
source init-xml.sh
echo css >> tmp/fait-txt
source init-css.sh
echo js2 >> tmp/fait-txt
source init-js2.sh
echo autres >> tmp/fait-txt
source init-autres.sh
echo img >> tmp/fait-txt
source init-img.sh
echo fct >> tmp/fait-txt
source init-fct.sh
echo sql >> tmp/fait-txt
source init-sql.sh
echo end >> tmp/fait-txt
source end.sh

echo "[Retour au sommaire->#sommaire]"  >> tmp/spip/page--$h.php
echo  >> tmp/faits

Un message, un commentaire ?

modération a priori

Ce forum est modéré a priori : votre contribution n’apparaîtra qu’après avoir été validée par un administrateur du site.

Qui êtes-vous ?
Votre message

Pour créer des paragraphes, laissez simplement des lignes vides.