Documentation du code de SPIP et de ses plugins

SPIP

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
example
  • liste_plugin_files()
  • liste_plugin_files(_DIR_PLUGINS_DIST)
  • liste_plugin_files(_DIR_PLUGINS_SUPPL)
uses
fast_find_plugin_dirs()
uses
plugins_get_infos_dist()
used-by
affiche_les_plugins_verrouilles()
used-by
liste_plugin_valides()
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
uses
spip_version_compare()
used-by
plugin_valide_resume()
used-by
plugin_trier()
used-by
plugin_controler_necessite()
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
uses
liste_plugin_files()
uses
plugins_get_infos_dist()
uses
plugin_valide_resume()
uses
plugin_fixer_procure()
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
uses
plugin_version_compatible()
uses
spip_version_compare()
used-by
liste_plugin_valides()
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
uses
spip_version_compare()
used-by
liste_plugin_valides()

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
used-by
admin_plug_args()
used-by
liste_chemin_plugin_actifs()
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
uses
liste_plugin_actifs()
uses
liste_chemin_plugin()
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
uses
plugin_version_compatible()
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
uses
plugin_necessite()
uses
plugin_controler_lib()

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
used-by
admin_plug_args()
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
uses
plugin_controler_necessite()
used-by
plugins_erreurs()
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
uses
plugin_version_compatible()
uses
plugin_message_incompatibilite()
used-by
plugin_necessite()
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
used-by
plugin_controler_necessite()
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
used-by
plugins_erreurs()

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
bool

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
uses
ecrire_plugin_actifs()
used-by
exec_admin_plugin_dist()
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
note

Les ecrire_meta() doivent en principe aussi initialiser la valeur a vide si elle n'existe pas risque de pb en php5 a cause du typage ou de null (verifier dans la doc php)

used-by
actualise_plugins_actifs()
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
bool

plugins_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: array, scripts: array}>}

register_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
uses
plugins_installer_dist()
used-by
admin_plug_args()

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


        
On this page

Search results