Documentation du code de SPIP et de ses plugins

SPIP

references.php

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
example

Dans une balise dynamique ou calculée :

$idb = index_boucle($p);
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
example

Dans une balise dynamique ou calculée :

$idb = index_boucle_mere($p);
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
todo

Ici la recherche de jointure sur l'absence d'un champ ne cherche une jointure que si des jointures explicites sont demandées, et non comme à d'autres endroits sur toutes les jointures possibles. Il faut homogénéiser cela.

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
uses
calculer_balise()
uses
applique_filtres()
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
uses
calculer_balise_DEFAUT_dist()

Lorsqu'aucune fonction spécifique n'est trouvée, ou que ces fonctions spécifiques ont retourné null.

see
charger_fonction()

Pour la recherche des fonctions de balises

used-by
calculer_champ()
used-by
collecter_balise_dynamique()

Pour obtenir le code d'éxécution de chaque argument.

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
uses
index_pile()

Pour la recherche de la balise comme colonne SQL ou comme environnement

note

Le texte de la balise est retourné si il ressemble à une couleur et qu'aucun champ correspondant n'a été trouvé, comme #CCAABB

used-by
calculer_balise()

Lorsqu'aucune fonction spécifique n'est trouvée, ou que ces fonctions spécifiques ont retourné null.

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
uses
collecter_balise_dynamique()

Qui calcule le code d'exécution de chaque argument de la balise

see
executer_balise_dynamique()

Code PHP produit qui chargera les fonctions de la balise dynamique à l'exécution, appelée avec les arguments calculés.

see
executer_balise_dynamique_dans_un_modele()
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
note

Ces arguments peuvent être eux-même des balises (cf FORMULAIRE_SIGNATURE) mais gare au bouclage (on peut s'aider de $nom pour le réperer au besoin)

En revanche ils n'ont pas de filtres, donc on appelle calculer_balise() qui ne s'occupe pas de ce qu'il y a dans $p (mais qui va y ecrire le code)

uses
calculer_balise()

Pour obtenir le code d'éxécution de chaque argument.

used-by
calculer_balise_dynamique()

Qui calcule le code d'exécution de chaque argument de la balise

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
note

Il faudrait savoir traiter les formulaires en local tout en appelant le serveur SQL distant. En attendant, cette fonction permet de refuser une authentification sur quelque-chose qui n'a rien a voir.

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

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.


        
On this page

Search results