references.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
- CODE_EXECUTER_BALISE = "executer_balise_dynamique('%s',\n\tarray(%s%s),\n\tarray(%s%s))"
- Code PHP d'exécution d'une balise dynamique
- CODE_EXECUTER_BALISE_MODELE = "executer_balise_dynamique_dans_un_modele('%s',\n\tarray(%s%s),\n\tarray(%s%s))"
Functions
- index_boucle() : string
- Retrouver l'index de la boucle d'une balise
- index_boucle_mere() : string
- Retrouve la boucle mère d’une balise, sauf si son nom est explicité
- index_pile() : string
- Retourne la position dans la pile d'un champ SQL
- index_compose() : string
- Reconstuire la cascade de condition de recherche d'un champ
- index_tables_en_pile() : array<string|int, mixed>
- Cherche un champ dans une boucle
- index_exception() : array<string|int, mixed>
- Retrouve un alias d'un champ dans une boucle
- champ_sql() : string
- Demande le champ '$champ' dans la pile
- calculer_champ() : string
- Calcule et retourne le code PHP d'exécution d'une balise SPIP et des ses filtres
- calculer_balise() : Champ
- Calcule et retourne le code PHP d'exécution d'une balise SPIP
- calculer_balise_DEFAUT_dist() : string
- Calcule et retourne le code PHP d'exécution d'une balise SPIP non déclarée
- calculer_balise_dynamique() : Champ
- Calcule le code PHP d'exécution d'une balise SPIP dynamique
- collecter_balise_dynamique() : array<string|int, mixed>
- Construction du tableau des arguments d'une balise dynamique.
- trouver_nom_serveur_distant() : string
- Récuperer le nom du serveur
- balise_distante_interdite() : bool
- Teste si une balise est appliquée sur une base distante
- champs_traitements() : mixed
- applique_filtres() : mixed
- compose_filtres() : mixed
- filtre_logique() : mixed
- compose_filtres_args() : mixed
- calculer_argument_precedent() : mixed
- Réserve les champs necessaires à la comparaison avec le contexte donné par la boucle parente.
- rindex_pile() : mixed
- zbug_presenter_champ() : string
- Retourne le nom de la balise indiquée pour les messages d’erreurs
Constants
CODE_EXECUTER_BALISE
Code PHP d'exécution d'une balise dynamique
public
mixed
CODE_EXECUTER_BALISE
= "executer_balise_dynamique('%s',\n\tarray(%s%s),\n\tarray(%s%s))"
CODE_EXECUTER_BALISE_MODELE
public
mixed
CODE_EXECUTER_BALISE_MODELE
= "executer_balise_dynamique_dans_un_modele('%s',\n\tarray(%s%s),\n\tarray(%s%s))"
Functions
index_boucle()
Retrouver l'index de la boucle d'une balise
index_boucle(Champ $p) : string
Retrouve à quelle boucle appartient une balise, utile dans le cas où une référence explicite est demandée
#MABALISE
: l'index est celui de la première boucle englobante#_autreboucle:MABALISE
: l'index est celui de la boucle _autreboucle
Parameters
- $p : Champ
-
AST au niveau de la balise
Tags
Return values
string —- Identifiant de la boucle possédant ce champ.
- '' si une référence explicite incorrecte est envoyée
index_boucle_mere()
Retrouve la boucle mère d’une balise, sauf si son nom est explicité
index_boucle_mere(Champ $p) : string
#MABALISE
: l'index sera celui de la boucle parente#_autreboucle:MABALISE
: l'index est celui de la boucle _autreboucle, si elle existe
Parameters
- $p : Champ
-
AST au niveau de la balise
Tags
Return values
string —- Identifiant de la boucle parente possédant ce champ, ou '' si pas de parent.
- '' si une référence explicite incorrecte est envoyée
index_pile()
Retourne la position dans la pile d'un champ SQL
index_pile(string $idb, string $nom_champ, array<string|int, mixed> &$boucles[, string $explicite = '' ][, null|string $defaut = null ][, bool $remonte_pile = true ][, bool $select = true ]) : string
Retourne le code PHP permettant de récupérer un champ SQL dans une boucle parente, en prenant la boucle la plus proche du sommet de pile (indiqué par $idb).
Si on ne trouve rien, on considère que ça doit provenir du contexte (par l'URL ou l'include) qui a été recopié dans Pile[0] (un essai d'affinage a débouché sur un bug vicieux)
Si ca référence un champ SQL, on le mémorise dans la structure $boucles afin de construire un requête SQL minimale (plutôt qu'un brutal 'SELECT *')
Parameters
- $idb : string
-
Identifiant de la boucle
- $nom_champ : string
-
Nom du champ SQL cherché
- $boucles : array<string|int, mixed>
-
AST du squelette
- $explicite : string = ''
-
Indique que le nom de la boucle est explicite dans la balise #_nomboucletruc:CHAMP
- $defaut : null|string = null
-
Code par defaut si le champ n'est pas trouvé dans l'index. Utilise
($Pile[0][$nom_champ] ?? null)
si non fourni - $remonte_pile : bool = true
-
Permettre de remonter la pile des boucles ou non (dans ce cas on ne cherche que dans la 1ère boucle englobante)
- $select : bool = true
-
Pour ajouter au select de la boucle, par defaut true
Return values
string —Code PHP pour obtenir le champ SQL
index_compose()
Reconstuire la cascade de condition de recherche d'un champ
index_compose(array<string|int, mixed> $conditionnel, string $defaut) : string
On ajoute la valeur finale par défaut pour les balises dont on ne saura qu'à l'exécution si elles sont definies ou non (boucle DATA)
Parameters
- $conditionnel : array<string|int, mixed>
-
Liste de codes PHP pour retrouver un champ
- $defaut : string
-
Valeur par défaut si aucun des moyens ne l'a trouvé
Return values
string —Code PHP complet de recherche d'un champ
index_tables_en_pile()
Cherche un champ dans une boucle
index_tables_en_pile(string $idb, string $nom_champ, array<string|int, Boucle> &$boucles, bool &$joker) : array<string|int, mixed>
Le champ peut être :
- un alias d'un autre : il faut alors le calculer, éventuellement en construisant une jointure.
- présent dans la table : on l'utilise
- absent, mais le type de boucle l'autorise (joker des itérateurs DATA) : on l'utilise et lève le drapeau joker
- absent, on cherche une jointure et on l'utilise si on en trouve.
Parameters
- $idb : string
-
Identifiant de la boucle
- $nom_champ : string
-
Nom du champ SQL cherché
- $boucles : array<string|int, Boucle>
-
AST du squelette
- $joker : bool
-
Le champ peut-il être inconnu à la compilation ? Ce drapeau sera levé si c'est le cas.
Tags
Return values
array<string|int, mixed> —Liste (Nom du champ véritable, nom du champ demandé). Le nom du champ véritable est une expression pour le SELECT de la boucle tel que "rubriques.titre" ou "mots.titre AS titre_mot". Les éléments de la liste sont vides si on ne trouve rien.
index_exception()
Retrouve un alias d'un champ dans une boucle
index_exception(Boucle &$boucle, array<string|int, mixed> $desc, string $nom_champ, array<string|int, mixed> $excep) : array<string|int, mixed>
Référence à une entite SPIP alias d'un champ SQL. Ça peut même être d'un champ dans une jointure qu'il faut provoquer si ce n'est fait
Parameters
- $boucle : Boucle
-
Boucle dont on prend un alias de champ
- $desc : array<string|int, mixed>
-
Description de la table SQL de la boucle
- $nom_champ : string
-
Nom du champ original demandé
- $excep : array<string|int, mixed>
-
Description de l'exception pour ce champ. Peut être :
- string : nom du champ véritable dans la table
- array :
- liste (table, champ) indique que le véritable champ est dans une autre table et construit la jointure dessus
- liste (table, champ, fonction) idem, mais en passant un nom de fonction qui s'occupera de créer la jointure.
Return values
array<string|int, mixed> —Liste (nom du champ alias, nom du champ). Le nom du champ alias est une expression pour le SELECT de la boucle du style "mots.titre AS titre_mot"
champ_sql()
Demande le champ '$champ' dans la pile
champ_sql(string $champ, Champ $p[, null|string $defaut = null ][, bool $remonte_pile = true ]) : string
Le champ est cherché dans l'empilement de boucles, sinon dans la valeur par défaut (qui est l'environnement du squelette si on ne la précise pas).
Parameters
- $champ : string
-
Champ recherché
- $p : Champ
-
AST au niveau de la balise
- $defaut : null|string = null
-
Code de la valeur par défaut si on ne trouve pas le champ dans une des boucles parentes. Sans précision, il sera pris dans l'environnement du squelette. Passer $defaut = '' pour ne pas prendre l'environnement.
- $remonte_pile : bool = true
-
Permettre de remonter dans la pile des boucles pour trouver le champ
Return values
string —Code PHP pour retrouver le champ
calculer_champ()
Calcule et retourne le code PHP d'exécution d'une balise SPIP et des ses filtres
calculer_champ(Champ $p) : string
Cette fonction qui sert d'API au compilateur demande à calculer le code PHP d'une balise, puis lui applique les filtres (automatiques et décrits dans le squelette)
Parameters
- $p : Champ
-
AST au niveau de la balise
Tags
Return values
string —Code PHP pour d'exécution de la balise et de ses filtres
calculer_balise()
Calcule et retourne le code PHP d'exécution d'une balise SPIP
calculer_balise(string $nom, Champ $p) : Champ
Cette fonction qui sert d'API au compilateur demande à calculer le code PHP d'une balise (cette fonction ne calcule pas les éventuels filtres de la balise).
Pour une balise nommmée NOM
, elle demande à charger_fonction()
de chercher
s'il existe une fonction balise_NOM
ou balise_NOM_dist
éventuellement en chargeant le fichier balise/NOM.php.
Si la balise est de la forme PREFIXE_SUFFIXE
(cf LOGO_*
et URL_*
)
elle fait de même avec juste le PREFIXE
.
S'il n'y a pas de fonction trouvée, on considère la balise comme une référence
à une colonne de table SQL connue, sinon à l'environnement (cf. calculer_balise_DEFAUT_dist()
).
Les surcharges des colonnes SQL via charger_fonction sont donc possibles.
Parameters
- $nom : string
-
Nom de la balise
- $p : Champ
-
AST au niveau de la balise
Tags
Return values
Champ —Pile complétée par le code PHP pour l'exécution de la balise et de ses filtres
calculer_balise_DEFAUT_dist()
Calcule et retourne le code PHP d'exécution d'une balise SPIP non déclarée
calculer_balise_DEFAUT_dist(string $nom, Champ $p) : string
Cette fonction demande à calculer le code PHP d'une balise qui n'a pas de fonction spécifique.
On considère la balise comme une référence à une colonne de table SQL connue, sinon à l'environnement.
Parameters
- $nom : string
-
Nom de la balise
- $p : Champ
-
AST au niveau de la balise
Tags
Return values
string —Code PHP pour d'exécution de la balise et de ses filtres
calculer_balise_dynamique()
Calcule le code PHP d'exécution d'une balise SPIP dynamique
calculer_balise_dynamique(Champ $p, string $nom, array<string|int, mixed> $l[, array<string|int, mixed> $supp = [] ]) : Champ
Calcule les balises dynamiques, notamment les formulaire_*
.
Inclut le fichier associé à son nom, qui contient la fonction homonyme donnant les arguments à chercher dans la pile, et qui sont donc compilés.
On leur adjoint les arguments explicites de la balise (cf #LOGIN{url}
)
et d'éventuelles valeurs transmises d'autorité par la balise.
(cf https://core.spip.net/issues/1728)
La fonction executer_balise_dynamique()
définie par la
constante CODE_EXECUTER_BALISE
recevra à l'exécution la valeur de tout ca.
Parameters
- $p : Champ
-
AST au niveau de la balise
- $nom : string
-
Nom de la balise dynamique
- $l : array<string|int, mixed>
-
Liste des noms d'arguments (balises) à collecter
- $supp : array<string|int, mixed> = []
-
Liste de données supplémentaires à transmettre au code d'exécution.
Tags
Return values
Champ —Balise complétée de son code d'exécution
collecter_balise_dynamique()
Construction du tableau des arguments d'une balise dynamique.
collecter_balise_dynamique(array<string|int, mixed> $l, Champ &$p, string $nom) : array<string|int, mixed>
Pour chaque argument (un nom de balise), crée le code PHP qui le calculera.
Parameters
- $l : array<string|int, mixed>
-
Liste des noms d'arguments (balises) à collecter (chaque argument de la balise dynamique est considéré comme étant un nom de balise)
- $p : Champ
-
AST au niveau de la balise
- $nom : string
-
Nom de la balise
Tags
Return values
array<string|int, mixed> —Liste des codes PHP d'éxecution des balises collectées
trouver_nom_serveur_distant()
Récuperer le nom du serveur
trouver_nom_serveur_distant(Champ $p) : string
Mais pas si c'est un serveur spécifique dérogatoire
Parameters
- $p : Champ
-
AST positionné sur la balise
Return values
string —Nom de la connexion
balise_distante_interdite()
Teste si une balise est appliquée sur une base distante
balise_distante_interdite(Champ $p) : bool
La fonction loge une erreur si la balise est utilisée sur une base distante et retourne false dans ce cas.
Parameters
- $p : Champ
-
AST positionné sur la balise
Tags
Return values
bool —- true : La balise est autorisée
- false : La balise est interdite car le serveur est distant
champs_traitements()
champs_traitements(mixed $p) : mixed
Parameters
- $p : mixed
applique_filtres()
applique_filtres(mixed $p) : mixed
Parameters
- $p : mixed
Tags
compose_filtres()
compose_filtres(mixed &$p, mixed $code) : mixed
Parameters
- $p : mixed
- $code : mixed
filtre_logique()
filtre_logique(mixed $fonc, mixed $code, mixed $arg) : mixed
Parameters
- $fonc : mixed
- $code : mixed
- $arg : mixed
compose_filtres_args()
compose_filtres_args(mixed $p, mixed $args, mixed $sep) : mixed
Parameters
- $p : mixed
- $args : mixed
- $sep : mixed
calculer_argument_precedent()
Réserve les champs necessaires à la comparaison avec le contexte donné par la boucle parente.
calculer_argument_precedent(string $idb, string $nom_champ, array<string|int, mixed> &$boucles[, null|string $defaut = null ]) : mixed
Attention en recursif il faut les réserver chez soi-même ET chez sa maman
Parameters
- $idb : string
-
Identifiant de la boucle
- $nom_champ : string
- $boucles : array<string|int, mixed>
-
AST du squelette
- $defaut : null|string = null
rindex_pile()
rindex_pile(mixed $p, mixed $champ, mixed $motif) : mixed
Parameters
- $p : mixed
- $champ : mixed
- $motif : mixed
zbug_presenter_champ()
Retourne le nom de la balise indiquée pour les messages d’erreurs
zbug_presenter_champ(Pile $p[, string $champ = '' ]) : string
Parameters
- $p : Pile
-
Description de la balise
- $champ : string = ''
-
Nom du champ
Return values
string —Nom de la balise, avec indication de boucle explicite si présent.