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() : string
- 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) : 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(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