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 = \Spip::directories()->relative()->getPluginsDir() . '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, string>
- Retourne la description de chaque plugin présent dans un répertoire
- 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() : void
- 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() : void
- 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() : string
- Vérifie qu'une dépendance (plugin) est bien présente.
- plugin_message_incompatibilite() : string
- plugin_controler_lib() : mixed
- plugin_manifest_migrate_from_sql_if_needed() : bool
- Migration one-shot : crée `var/state/plugins.php` depuis la meta SQL `plugin` lorsque ce fichier n'existe pas encore.
- 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
- ecrire_plugin_actifs_recompile() : bool
- plugins_precompile_container() : void
- Compile un conteneur Symfony complet (core + plugins) en `boot/container.php`.
- register_legacy_pipeline_listener_services() : void
- Branche les callbacks pipeline legacy (`<pipeline>` + fonctions globales) dans le container compile via des services tagues `spip.pipeline_listener`.
- plugins_amorcer_plugins_actifs() : void
- Chargement des plugins actifs dans le path de SPIP et exécution de fichiers d'options des plugins.
- plugins_amorcer_chemins_actifs() : void
- Chargement des chemins (path) des plugins actifs dans le path de SPIP, SANS exécuter les fichiers d'options.
-
pipeline_matrice_precompile()
: PipelineRegistry, 1: array
, scripts: array }>} - Crée la liste des filtres à traverser pour chaque pipeline.
- register_legacy_head_assets_listener_services() : void
- Enregistre les listeners d'assets legacy (styles/scripts de paquet.xml) dans le conteneur.
- plugin_est_installe() : bool
- Indique si un chemin de plugin fait parti des plugins activés sur le site
- plugin_installes_meta() : void
- Parcours les plugins activés et appelle leurs fonctions d'installation si elles existent.
- ecrire_fichier_php() : void
- Écrit un fichier PHP
Constants
_DIR_PLUGINS_AUTO
public
mixed
_DIR_PLUGINS_AUTO
= \Spip::directories()->relative()->getPluginsDir() . '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, string>
Lecture des sous repertoire plugin existants
Parameters
- $dir_plugins : string|null = null
-
Chemin (relatif à la racine du site) du répertoire à analyser. Ou utilise le chemin
_DIR_PLUGINS.
Tags
Return values
array<string|int, string>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> —prefixe dans $liste si on a accepte le plugin ou 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) : void
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|null $dir_plugins = null ]) : 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|null = null
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|null $dir_plugins = null ]) : array<string|int, mixed>
Parameters
- $dir_plugins : string|null = null
-
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[, array<string|int, mixed> $msg = [] ]) : void
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 : array<string|int, 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[, string $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 : string = '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) : string
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
Return values
string —Vide si ok, Message d'erreur lorsque la dépendance est absente.
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(string|Stringable $lib, string $url) : mixed
Parameters
- $lib : string|Stringable
- $url : string
Tags
plugin_manifest_migrate_from_sql_if_needed()
Migration one-shot : crée `var/state/plugins.php` depuis la meta SQL `plugin` lorsque ce fichier n'existe pas encore.
plugin_manifest_migrate_from_sql_if_needed() : bool
Ne s'exécute qu'avec une connexion SQL active (hors chemin critique pré-HTTP).
Return values
boolactualise_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
ecrire_plugin_actifs_recompile()
ecrire_plugin_actifs_recompile(string|array<string|int, mixed> $plugin[, bool $pipe_recherche = false ][, string $operation = 'raz' ]) : bool
Parameters
- $plugin : string|array<string|int, mixed>
- $pipe_recherche : bool = false
- $operation : string = 'raz'
Return values
boolplugins_precompile_container()
Compile un conteneur Symfony complet (core + plugins) en `boot/container.php`.
plugins_precompile_container(array<string, mixed> $pluginValides, array<string, mixed> $ordre, PipelineRegistry $registry, array<string, array{styles: array, scripts: array}> $legacyHeadAssets[, string|null $signature = null ]) : void
Parameters
- $pluginValides : array<string, mixed>
- $ordre : array<string, mixed>
- $registry : PipelineRegistry
-
$legacyHeadAssets
: array<string, array{styles: array
, scripts: array }> - $signature : string|null = null
register_legacy_pipeline_listener_services()
Branche les callbacks pipeline legacy (`<pipeline>` + fonctions globales) dans le container compile via des services tagues `spip.pipeline_listener`.
register_legacy_pipeline_listener_services(ContainerBuilder $container, PipelineRegistry $registry) : void
Ce pont de transition permet de conserver les declarations historiques sans imposer une migration immediate vers des classes annotees.
Parameters
- $container : ContainerBuilder
- $registry : PipelineRegistry
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() : void
Usage RUNTIME uniquement (cycle HTTP). Les fichiers d'options peuvent ajouter des chemins ou définir des constantes / configurations dynamiques.
À NE PAS utiliser dans le chemin de recompilation du conteneur : la recompilation est options-free (plugins_amorcer_chemins_actifs()).
plugins_amorcer_chemins_actifs()
Chargement des chemins (path) des plugins actifs dans le path de SPIP, SANS exécuter les fichiers d'options.
plugins_amorcer_chemins_actifs() : void
Utilisé par la recompilation options-free du conteneur : la connaissance des
chemins est nécessaire à charger_fonction() (validation des genie) et à
l'enregistrement des autoloaders, mais les options ne doivent pas être exécutées.
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) : PipelineRegistry, 1: array, scripts: array}>}
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 les assets head legacy issus de paquet.xml (script/style).
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
PipelineRegistry, 1: arrayregister_legacy_head_assets_listener_services()
Enregistre les listeners d'assets legacy (styles/scripts de paquet.xml) dans le conteneur.
register_legacy_head_assets_listener_services(ContainerBuilder $container, array<string, array{styles: array, scripts: array}> $legacyHeadAssets) : void
Ces assets sont injectés directement dans les pipelines cibles (insert_head, insert_head_css, header_prive, header_prive_css) en position 'prepend'.
Parameters
- $container : ContainerBuilder
-
$legacyHeadAssets
: array<string, array{styles: array
, scripts: array }>
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() : void
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 = '' ]) : void
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