Modèle de plugin

Feuille emblématique de Dotclear, oct. 2022
Feuille emblématique de Dotclear

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 existence
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

DIRECTORY=$(dirname "$0")
MODEL="$DIRECTORY/_template_"

# Helpers
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_install()
{
  if [ ! -f "$MODULE/src/Install.php" ]; then
    cp "$MODEL/src/Install.php" "$MODULE/src/Install.php"
    update_ns "$MODULE/src/Install.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/Install.php if not exists
make_install

# 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>

<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 :

  1. d’aller éditer le fichier My.php pour positionner les permissions en fonction des contextes,

  2. 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, …),

  3. 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.

  4. 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. Les répétitions répétées, tout ça, cf dessus ;-) ↩︎

  2. Ça permet de gérer tout ce qui concerne les permissions à un seul endroit (en plus de ceux définis dans le fichier _define.php qui lui ne change pas d’endroit) ↩︎

  3. Les répétitions répétées, tout ça, cf dessus ;-) ↩︎

Ajouter un commentaire

Les champs suivis d'un * sont obligatoires

Les commentaires peuvent être formatés en utilisant la syntaxe Markdown Extra.

Ajouter un rétrolien

URL de rétrolien : https://open-time.net/trackback/15706

Haut de page