plugin.php
SPIP, Système de publication pour l'internet
Copyright © avec tendresse depuis 2001 Arnaud Martin, Antoine Pitrou, Philippe Rivière, Emmanuel Saint-James
Ce programme est un logiciel libre distribué sous licence GNU/GPL.
Table of Contents
Constants
- _DIR_PLUGINS_AUTO = \_DIR_PLUGINS . 'auto/'
- _EXTRAIRE_INTERVALLE = ',^[\[\(\]]([0-9.a-zRC\s\-]*)[;]([0-9.a-zRC\s\-\*]*)[\]\)\[]$,'
- Regexp d'extraction des informations d'un intervalle de compatibilité
Functions
- liste_plugin_files() : array<string|int, mixed>
- Retourne la description de chaque plugin présent dans un répertoire
- fast_find_plugin_dirs() : array<string|int, mixed>
- Recherche rapide des répertoires de plugins contenus dans un répertoire
- is_plugin_dir() : string|array<string|int, string>
- Indique si un répertoire (ou plusieurs) est la racine d'un plugin SPIP
- plugin_version_compatible() : bool
- Teste si le numéro de version d'un plugin est dans un intervalle donné.
- liste_plugin_valides() : array<string|int, mixed>
- Construire la liste des infos strictement necessaires aux plugins à activer afin de les mémoriser dans une meta pas trop grosse
- plugin_valide_resume() : string|array<string|int, mixed>
- Ne retenir un plugin que s'il est valide et dans leur plus recente version compatible avec la version presente de SPIP
- plugin_fixer_procure() : mixed
- Compléter la liste des plugins avec les éventuels procure
- liste_chemin_plugin() : array<string|int, mixed>
- Extrait les chemins d'une liste de plugin
- liste_chemin_plugin_actifs() : array<string|int, mixed>
- Liste les chemins vers les plugins actifs du dossier fourni en argument a partir d'une liste d'elelements construits par plugin_valide_resume
- plugin_trier() : array<string|int, mixed>
- Trier les plugins en vériant leur dépendances (qui doivent être présentes)
- plugins_erreurs() : mixed
- Collecte les erreurs de dépendances des plugins dans la meta `plugin_erreur_activation`
- plugin_donne_erreurs() : string|array<string|int, mixed>
- Retourne les erreurs d'activation des plugins, au format html ou brut
- plugin_necessite() : array<string|int, mixed>
- Teste des dépendances
- plugin_controler_necessite() : mixed
- Vérifie qu'une dépendance (plugin) est bien présente.
- plugin_message_incompatibilite() : string
- plugin_controler_lib() : mixed
- actualise_plugins_actifs() : bool
- Calcule la liste des plugins actifs et recompile les fichiers caches qui leurs sont relatifs
- ecrire_plugin_actifs() : bool
- Calcule ou modifie la liste des plugins actifs et recompile les fichiers caches qui leurs sont relatifs
- plugins_precompile_chemin() : mixed
- Écrit le fichier de déclaration des chemins (path) des plugins actifs
- plugins_precompile_xxxtions() : mixed
- Écrit les fichiers de chargement des fichiers d'options et de fonctions des plugins
- plugin_ongletbouton() : string
- Compile les entrées d'un menu et retourne le code php d'exécution
- plugins_amorcer_plugins_actifs() : mixed
- Chargement des plugins actifs dans le path de SPIP et exécution de fichiers d'options des plugins
- pipeline_matrice_precompile() : array<string|int, mixed>
- Crée la liste des filtres à traverser pour chaque pipeline
- pipeline_precompile() : mixed
- Précompilation des pipelines
- plugin_est_installe() : bool
- Indique si un chemin de plugin fait parti des plugins activés sur le site
- plugin_installes_meta() : mixed
- Parcours les plugins activés et appelle leurs fonctions d'installation si elles existent.
- ecrire_fichier_php() : mixed
- Écrit un fichier PHP
Constants
_DIR_PLUGINS_AUTO
public
mixed
_DIR_PLUGINS_AUTO
= \_DIR_PLUGINS . 'auto/'
_EXTRAIRE_INTERVALLE
Regexp d'extraction des informations d'un intervalle de compatibilité
public
mixed
_EXTRAIRE_INTERVALLE
= ',^[\[\(\]]([0-9.a-zRC\s\-]*)[;]([0-9.a-zRC\s\-\*]*)[\]\)\[]$,'
Functions
liste_plugin_files()
Retourne la description de chaque plugin présent dans un répertoire
liste_plugin_files([string|null $dir_plugins = null ]) : array<string|int, mixed>
Lecture des sous repertoire plugin existants
Parameters
- $dir_plugins : string|null = null
-
- string : Chemin (relatif à la racine du site) du répertoire à analyser.
- null : utilise le chemin
_DIR_PLUGINS
.
Tags
Return values
array<string|int, mixed>fast_find_plugin_dirs()
Recherche rapide des répertoires de plugins contenus dans un répertoire
fast_find_plugin_dirs(string $dir[, int $max_prof = 100 ]) : array<string|int, mixed>
Parameters
- $dir : string
-
Chemin du répertoire dont on souhaite retourner les sous répertoires
- $max_prof : int = 100
-
Profondeur maximale des sous répertoires
Tags
Return values
array<string|int, mixed> —Liste complète des répeertoires
is_plugin_dir()
Indique si un répertoire (ou plusieurs) est la racine d'un plugin SPIP
is_plugin_dir(string|array<string|int, string> $dir[, string|null $dir_plugins = null ]) : string|array<string|int, string>
Vérifie le ou les chemins relatifs transmis pour vérifier qu'ils contiennent
un paquet.xml
. Les chemins valides sont retournés.
Parameters
- $dir : string|array<string|int, string>
-
Chemin (relatif à
$dir_plugins
), ou liste de chemins à tester - $dir_plugins : string|null = null
-
- string : Chemin de répertoire (relatif à la
_DIR_RACINE
), départ des chemin(s) à tester - null (par défaut) : utilise le chemin
_DIR_PLUGINS
- string : Chemin de répertoire (relatif à la
Tags
Return values
string|array<string|int, string> —- string : Le chemin accepté (c'était un plugin)
- '' : ce n'était pas un chemin valide
- array : Ensemble des chemins acceptés (si
$dir
était array)
plugin_version_compatible()
Teste si le numéro de version d'un plugin est dans un intervalle donné.
plugin_version_compatible(string $intervalle, string $version[, string $avec_quoi = '' ]) : bool
Cette fonction peut être volontairement trompée (phase de développement) : voir commentaire infra sur l'utilisation de la constante _DEV_VERSION_SPIP_COMPAT
Parameters
- $intervalle : string
-
Un intervalle entre 2 versions. ex: [2.0.0-dev;2.1.*]
- $version : string
-
Un numéro de version. ex: 3.1.99]
- $avec_quoi : string = ''
-
Ce avec quoi est testée la compatibilité. par défaut ('') avec un plugin (cas des 'necessite'), parfois ('spip') avec SPIP.
Tags
Return values
bool —True si dans l'intervalle, false sinon.
liste_plugin_valides()
Construire la liste des infos strictement necessaires aux plugins à activer afin de les mémoriser dans une meta pas trop grosse
liste_plugin_valides(array<string|int, mixed> $liste_plug[, bool $force = false ]) : array<string|int, mixed>
Parameters
- $liste_plug : array<string|int, mixed>
- $force : bool = false
Tags
Return values
array<string|int, mixed>plugin_valide_resume()
Ne retenir un plugin que s'il est valide et dans leur plus recente version compatible avec la version presente de SPIP
plugin_valide_resume(array<string|int, mixed> &$liste, string $plug, array<string|int, mixed> $infos, string $dir_type) : string|array<string|int, mixed>
Parameters
- $liste : array<string|int, mixed>
- $plug : string
- $infos : array<string|int, mixed>
- $dir_type : string
Tags
Return values
string|array<string|int, mixed> —string prefixe dans $liste si on a accepte le plugin array description short si on ne le retient pas (pour memorisation dans une table des erreurs)
plugin_fixer_procure()
Compléter la liste des plugins avec les éventuels procure
plugin_fixer_procure(array<string|int, mixed> &$liste, array<string|int, mixed> &$infos) : mixed
les balises <procure>
sont considerées comme des plugins proposés,
mais surchargeables (on peut activer un plugin qui procure ça pour l'améliorer,
donc avec le même prefixe, qui sera pris en compte si il a une version plus grande)
Parameters
- $liste : array<string|int, mixed>
- $infos : array<string|int, mixed>
Tags
liste_chemin_plugin()
Extrait les chemins d'une liste de plugin
liste_chemin_plugin(array<string|int, mixed> $liste[, string $dir_plugins = _DIR_PLUGINS ]) : array<string|int, mixed>
Sélectionne au passage ceux qui sont dans $dir_plugins
uniquement
si valeur non vide
Parameters
- $liste : array<string|int, mixed>
- $dir_plugins : string = _DIR_PLUGINS
Tags
Return values
array<string|int, mixed>liste_chemin_plugin_actifs()
Liste les chemins vers les plugins actifs du dossier fourni en argument a partir d'une liste d'elelements construits par plugin_valide_resume
liste_chemin_plugin_actifs([string $dir_plugins = _DIR_PLUGINS ]) : array<string|int, mixed>
Parameters
- $dir_plugins : string = _DIR_PLUGINS
-
Chemin du répertoire de plugins
Tags
Return values
array<string|int, mixed>plugin_trier()
Trier les plugins en vériant leur dépendances (qui doivent être présentes)
plugin_trier(array<string|int, mixed> $infos, array<string|int, mixed> $liste_non_classee) : array<string|int, mixed>
Pour tester "utilise", il faut connaître tous les plugins qui seront forcément absents à la fin, car absent de la liste des plugins actifs.
Il faut donc construire une liste ordonnée.
Cette fonction détecte des dépendances circulaires, avec un doute sur un "utilise" qu'on peut ignorer. Mais ne pas insérer silencieusement et risquer un bug sournois latent
Parameters
- $infos : array<string|int, mixed>
-
Répertoire (plugins, plugins-dist, ...) => Couples (prefixes => infos completes) des plugins qu'ils contiennent
- $liste_non_classee : array<string|int, mixed>
-
Couples (prefixe => description) des plugins qu'on souhaite utiliser
Tags
Return values
array<string|int, mixed> —Tableau de 3 éléments :
- $liste : couples (prefixes => description) des plugins valides
- $ordre : couples (prefixes => infos completes) des plugins triés (les plugins nécessités avant les plugins qui les utilisent)
- $liste_non_classee : couples (prefixes => description) des plugins qui n'ont pas satisfait leurs dépendances
plugins_erreurs()
Collecte les erreurs de dépendances des plugins dans la meta `plugin_erreur_activation`
plugins_erreurs(array<string|int, mixed> $liste_non_classee, array<string|int, mixed> $liste, array<string|int, mixed> $infos[, mixed $msg = [] ]) : mixed
Parameters
- $liste_non_classee : array<string|int, mixed>
-
Couples (prefixe => description) des plugins en erreur
- $liste : array<string|int, mixed>
-
Couples (prefixe => description) des plugins qu'on souhaite utiliser
- $infos : array<string|int, mixed>
-
Répertoire (plugins, plugins-dist, ...) => Couples (prefixes => infos completes) des plugins qu'ils contiennent
- $msg : mixed = []
Tags
plugin_donne_erreurs()
Retourne les erreurs d'activation des plugins, au format html ou brut
plugin_donne_erreurs([bool $raw = false ][, bool $raz = true ]) : string|array<string|int, mixed>
Parameters
- $raw : bool = false
-
- true : pour obtenir le tableau brut des erreurs
- false : Code HTML
- $raz : bool = true
-
- true pour effacer la meta qui stocke les erreurs.
Tags
Return values
string|array<string|int, mixed> —- Liste des erreurs ou code HTML des erreurs
plugin_necessite()
Teste des dépendances
plugin_necessite(array<string|int, mixed> $n, array<string|int, mixed> $liste[, mixed $balise = 'necessite' ]) : array<string|int, mixed>
Et vérifie que chaque dépendance est présente dans la liste de plugins donnée
Parameters
- $n : array<string|int, mixed>
-
Tableau de dépendances dont on souhaite vérifier leur présence
- $liste : array<string|int, mixed>
-
Tableau des plugins présents
- $balise : mixed = 'necessite'
Tags
Return values
array<string|int, mixed> —Tableau des messages d'erreurs reçus. Il sera vide si tout va bien.
plugin_controler_necessite()
Vérifie qu'une dépendance (plugin) est bien présente.
plugin_controler_necessite(array<string|int, mixed> $liste, string $nom, string $intervalle, string $balise) : mixed
Parameters
- $liste : array<string|int, mixed>
-
Liste de description des plugins
- $nom : string
-
Le plugin donc on cherche la presence
- $intervalle : string
-
L'éventuelle intervalle de compatibilité de la dépendance. ex: [1.1.0;]
- $balise : string
-
Permet de définir si on teste un utilise ou un nécessite
Tags
plugin_message_incompatibilite()
plugin_message_incompatibilite(string $intervalle, string $version, string $nom, string $balise) : string
Parameters
- $intervalle : string
-
L'éventuelle intervalle de compatibilité de la dépendance. ex: [1.1.0;]
- $version : string
-
La version en cours active pour le plugin demandé (ou php ou extension php demandée)
- $nom : string
-
Le plugin (ou php ou extension php) qui est absent
- $balise : string
-
Le type de balise utilisé (necessite ou utilise)
Tags
Return values
string —Le message d'erreur.
plugin_controler_lib()
plugin_controler_lib(mixed $lib, mixed $url) : mixed
Parameters
- $lib : mixed
- $url : mixed
Tags
actualise_plugins_actifs()
Calcule la liste des plugins actifs et recompile les fichiers caches qui leurs sont relatifs
actualise_plugins_actifs([bool $pipe_recherche = false ]) : bool
Parameters
- $pipe_recherche : bool = false
-
?
Tags
Return values
bool —true si il y a eu des modifications sur la liste des plugins actifs, false sinon
ecrire_plugin_actifs()
Calcule ou modifie la liste des plugins actifs et recompile les fichiers caches qui leurs sont relatifs
ecrire_plugin_actifs(string|array<string|int, string> $plugin[, bool $pipe_recherche = false ][, string $operation = 'raz' ]) : bool
Parameters
- $plugin : string|array<string|int, string>
-
Plugin ou plugins concernés (leur chemin depuis le répertoire plugins)
- $pipe_recherche : bool = false
-
?
- $operation : string = 'raz'
-
- raz : recalcule tout
- ajoute : ajoute le plugin indiqué à la liste des plugins actifs
- enleve : enleve le plugin indiqué de la liste des plugins actifs
- force : ?
Tags
Return values
bool —true si il y a eu des modifications sur la liste des plugins actifs, false sinon
plugins_precompile_chemin()
Écrit le fichier de déclaration des chemins (path) des plugins actifs
plugins_precompile_chemin(array<string|int, mixed> $plugin_valides, array<string|int, mixed> $ordre) : mixed
Le fichier créé, une fois exécuté permet à SPIP de rechercher des fichiers dans les répertoires des plugins concernés.
Parameters
- $plugin_valides : array<string|int, mixed>
-
Couples (prefixe => description) des plugins qui seront actifs
- $ordre : array<string|int, mixed>
-
Couples (prefixe => infos complètes) des plugins qui seront actifs, dans l'ordre de leurs dépendances
Tags
plugins_precompile_xxxtions()
Écrit les fichiers de chargement des fichiers d'options et de fonctions des plugins
plugins_precompile_xxxtions(array<string|int, mixed> $plugin_valides, array<string|int, mixed> $ordre) : mixed
Les onglets et menus déclarés dans le fichier paquet.xml des plugins sont également ajoutés au fichier de fonctions créé.
Parameters
- $plugin_valides : array<string|int, mixed>
-
Couples (prefixe => description) des plugins qui seront actifs
- $ordre : array<string|int, mixed>
-
Couples (prefixe => infos complètes) des plugins qui seront actifs, dans l'ordre de leurs dépendances
Tags
plugin_ongletbouton()
Compile les entrées d'un menu et retourne le code php d'exécution
plugin_ongletbouton(string $nom, array<string|int, mixed> $val) : string
Génère et retourne un code php (pour enregistrement dans un fichier de cache) permettant d'obtenir la liste des entrées de menus, ou des onglets de l'espace privé.
Définit également une constante (UPDATED$nom et UPDATED_md5$nom), signalant une modification de ces menus
Parameters
- $nom : string
-
Nom du type de menu Exemple: boutons_plugins, onglets_plugins
- $val : array<string|int, mixed>
-
Liste des entrées de ce menu
Tags
Return values
string —Code php
plugins_amorcer_plugins_actifs()
Chargement des plugins actifs dans le path de SPIP et exécution de fichiers d'options des plugins
plugins_amorcer_plugins_actifs() : mixed
Les fichiers d'options peuvent déclarer des pipelines ou de nouveaux chemins.
La connaissance chemins peut être nécessaire pour la construction du fichier d'exécution des pipelines.
pipeline_matrice_precompile()
Crée la liste des filtres à traverser pour chaque pipeline
pipeline_matrice_precompile(array<string|int, mixed> $plugin_valides, array<string|int, mixed> $ordre, string $pipe_recherche) : array<string|int, mixed>
Complète la globale spip_pipeline
des fonctions que doit traverser un pipeline,
et la globale spip_matrice
des fichiers à charger qui contiennent ces fonctions.
Retourne aussi pour certaines balises présentes dans les paquet.xml (script, style, genie), un code PHP à insérer au début de la chaîne du ou des pipelines associés à cette balise (insert_head, insert_head_css, taches_generales_cron, ...). Ce sont des écritures raccourcies pour des usages fréquents de ces pipelines.
Parameters
- $plugin_valides : array<string|int, mixed>
-
Couples (prefixe => description) des plugins qui seront actifs
- $ordre : array<string|int, mixed>
-
Couples (prefixe => infos complètes) des plugins qui seront actifs, dans l'ordre de leurs dépendances
- $pipe_recherche : string
Return values
array<string|int, mixed> —Couples (nom du pipeline => Code PHP à insérer au début du pipeline)
pipeline_precompile()
Précompilation des pipelines
pipeline_precompile([array<string|int, mixed> $prepend_code = [] ]) : mixed
Crée le fichier d'exécution des pipelines
dont le chemin est défini par _CACHE_PIPELINES
La liste des pipelines est définie par la globale spip_pipeline
qui a été remplie soit avec les fichiers d'options, soit avec
des descriptions de plugins (paquet.xml) dont celui de SPIP lui-même.
Les fichiers à charger pour accéder aux fonctions qui doivent traverser
un pipeline se trouve dans la globale spip_matrice
.
Parameters
- $prepend_code : array<string|int, mixed> = []
-
Code PHP à insérer avant le passage dans la chaîne des fonctions d'un pipeline Couples 'Nom du pipeline' => Code PHP à insérer
Tags
plugin_est_installe()
Indique si un chemin de plugin fait parti des plugins activés sur le site
plugin_est_installe(string $plug_path) : bool
Parameters
- $plug_path : string
-
Chemin du plugin
Return values
bool —true si le plugin est actif, false sinon
plugin_installes_meta()
Parcours les plugins activés et appelle leurs fonctions d'installation si elles existent.
plugin_installes_meta() : mixed
Elle ajoute ensuite les plugins qui ont été installés dans la valeur "plugin_installes" de la table meta. Cette meta ne contient que les noms des plugins qui ont une version_base.
Tags
ecrire_fichier_php()
Écrit un fichier PHP
ecrire_fichier_php(string $nom, string $contenu[, string $comment = '' ]) : mixed
Parameters
- $nom : string
-
Chemin du fichier
- $contenu : string
-
Contenu du fichier (sans les balises ouvrantes et fermantes de PHP)
- $comment : string = ''
-
Commentaire : code écrit en tout début de fichier, après la balise PHP ouvrante