Bascule vers l’usage d’un espace de nom pour les plugins et thèmes ; j’en ai plusieurs dizaines (plus de cent en tout) et je suis une feignasse !
Conclusion j’ai préparé de quoi me mâcher le boulot pour m’éviter trop de … boulot — eh ouais, j’fais des répétitions si j’veux, qu’est-ce que tu vas faire ? :-)
Donc un petit plugin modèle, nommé judicieusement _template_
, admire un peu ! D’ailleurs je l’ai poussé sur Github pour que tu puisse l’admirer1 et un petit script bash pour faire le job :
#!/bin/sh
# Check 1st parameter (module name = directory)
if [ -z "$1" ]; then
echo "You must give the module name = module directory"
exit 1
fi
# Check module existance
if [ ! -d "$1" ]; then
echo "The module $1 does not exists"
exit 1
fi
MODULE="$1"
# Check module src subfolder
if [ ! -d "$MODULE/src" ]; then
mkdir "$MODULE/src"
fi
MODEL="_template_"
update_ns()
{
perl -i -pe"s/_template_/$MODULE/g" "$1"
}
make_my()
{
if [ ! -f "$MODULE/src/My.php" ]; then
cp "$MODEL/src/My.php" "$MODULE/src/My.php"
update_ns "$MODULE/src/My.php"
fi
}
make_uninstall()
{
if [ ! -f "$MODULE/src/Uninstall.php" ]; then
cp "$MODEL/src/Uninstall.php" "$MODULE/src/Uninstall.php"
update_ns "$MODULE/src/Uninstall.php"
fi
}
make_src()
{
if [ -f "$MODULE/$1.php" ]; then
if [ ! -f "$MODULE/src/$2.php" ]; then
cp "$MODEL/src/$2.php" "$MODULE/src/$2.php"
update_ns "$MODULE/src/$2.php"
# Add a separator between new and old code
{
echo ""
echo "// --- old code below ---"
echo ""
} >> "$MODULE/src/$2.php"
# Add old code at the end
tail +2 "$MODULE/$1.php" >> "$MODULE/src/$2.php"
fi
fi
}
# Add a src/My.php
make_my
# Move existing code to src
make_src _install Install
make_src _prepend Prepend
make_src _admin Backend
make_src _public Frontend
make_src _config Config
make_src index Manage
make_src _widgets Widgets
# Add a src/Uninstall.php
make_uninstall
Sachant que ce script est placé à la racine du dossier qui contient tous mes plugins tiers (hors code Dotclear donc) et le plugin _template_
lui-même.
Ça se lance facilement avec un :
./do_src.sh <module>
Où <module>
est le nom du dossier du plugin à traiter.
Éventuellement précédé d’un :
chmod +x do_src.sh
Quelques explications :
D’abord le script ne casse pas l’existant, il crée le répertoire src
si besoin et ajoute dedans ce qui manque. Pour ça il récupère les fichiers de l’ancien temps, genre index.php
ou encore _prepend.php
situés à la racine du dossier du module et l’ajoute en fin du modèle placé dans le dossier src
.
Par ailleurs, comme il ne sont généralement pas présents, il rajoute aussi le fichier My.php
— super pratique et créé par JcDenis — auquel j’ai ajouté un truc pour vérifier les droits d’accès en fonction du contexte2 et le fichier Uninstall.php
utilisé par le plugin de désinstallation — super pratique et créé par JcDenis3.
Ensuite il suffit :
d’aller éditer le fichier
My.php
pour positionner les permissions en fonction des contextes,de décommenter ce qu’il faut dans
Uninstall.php
en fonction de ce que le plugin crée comme traces (table dans la base, préférences utilisateurs, paramètres du blog, cache, …),de reprendre les autres fichiers présents dans le dossier
src
pour récupérer l’ancien code (copié en fin de fichier) et le déplacer et/ou l’adapter.Une fois le nouveau code vérifié et testé et contrôlé et re-vérifié — ah y’est ? vous êtes sûr et certains ? — vous pouvez alors supprimer les vieux fichiers :
_install.php
_prepend.php
_admin.php
_public.php
_config.php
_widgets.php
index.php
Notez tout de même que ce script ne fait pas tout le job à votre place, juste il mâchouille un peu des trucs et bricole des bidules pour vous simplifiez la vie ; par ailleurs si vous préférez une vie compliquée à retaper du code touche du clavier après touche du clavier, c’est vous qui voyez, hein ?
Je mets le script en pièce jointe, ça peut servir — aux feignasses comme moi !
PS : Le plugin _template_
, dont le script se sert, et le script lui même pourront être amenés à évoluer au fil de mes adaptations.
1 De Philippe -
J’ai vu que tu avais ajouté une fonction makeUrl() dans le My.php depuis hier ;)
Il est bien utile ce plugin d’exemple !
2 De Franck -
Oui hein ? :-)