Fichier ecrire/public/references.php

Fonctions de recherche et de reservation dans l'arborescence des boucles

Source

Proposer une amélioration

Liste des constantes

Valeur

  • "executer_balise_dynamique('%s', array(%s%s), array(%s%s))"

Package

Liste des fonctions

APIs

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).

string champ_sql( string $champ , \Champ $p , null | string $defaut = null , boolean $remonte_pile = true )

Paramètres

  1. string $champ

    Champ recherché

  2. \Champ $p

    AST au niveau de la balise

  3. null | string $defaut = 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.

  4. boolean $remonte_pile = true

    Permettre de remonter dans la pile des boucles pour trouver le champ

Retour

  • string

    Code PHP pour retrouver le champ

API

Package

Proposer une amélioration

Internes

void applique_filtres( $p )

Paramètres

  1. $p

Utilisé par

Package

Proposer une amélioration

La fonction loge une erreur si la balise est utilisée sur une base distante et retourne false dans ce cas.

boolean balise_distante_interdite( \Champ $p )

Paramètres

  1. \Champ $p

    AST positionné sur la balise

Retour

  • boolean
    • true : La balise est autorisée
    • false : La balise est interdite car le serveur est distant

Package

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.

Balise

  • DISTANTE_INTERDITE
Proposer une amélioration

Attention en recursif il faut les réserver chez soi-même ET chez sa maman

calculer_argument_precedent( string $idb , string $nom_champ , array & $boucles , null | string $defaut = null )

Paramètres

  1. string $idb

    Identifiant de la boucle

  2. string $nom_champ
  3. array & $boucles

    AST du squelette

  4. null | string $defaut = null

Retour

Package

Proposer une amélioration

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.

\Champ calculer_balise( string $nom , \Champ $p )

Paramètres

  1. string $nom

    Nom de la balise

  2. \Champ $p

    AST au niveau de la balise

Retour

  • \Champ

    Pile complétée par le code PHP pour l'exécution de la balise et de ses filtres

Package

Proposer une amélioration

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.

string calculer_balise_DEFAUT_dist( string $nom , \Champ $p )

Paramètres

  1. string $nom

    Nom de la balise

  2. \Champ $p

    AST au niveau de la balise

Retour

  • string

    Code PHP pour d'exécution de la balise et de ses filtres

Utilisé par

Package

Note

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

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 http://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.

\Champ calculer_balise_dynamique( \Champ $p , string $nom , array $l , array $supp = array() )

Paramètres

  1. \Champ $p

    AST au niveau de la balise

  2. string $nom

    Nom de la balise dynamique

  3. array $l

    Liste des noms d'arguments (balises) à collecter

  4. array $supp = array()

    Liste de données supplémentaires à transmettre au code d'exécution.

Retour

  • \Champ

    Balise complétée de son code d'exécution

Package

Proposer une amélioration

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)

string calculer_champ( \Champ $p )

Paramètres

  1. \Champ $p

    AST au niveau de la balise

Retour

  • string

    Code PHP pour d'exécution de la balise et de ses filtres

Package

Proposer une amélioration
void champs_traitements( $p )

Paramètres

  1. $p

Package

Proposer une amélioration

Pour chaque argument (un nom de balise), crée le code PHP qui le calculera.

array collecter_balise_dynamique( array $l , \Champ & $p , string $nom )

Paramètres

  1. array $l

    Liste des noms d'arguments (balises) à collecter (chaque argument de la balise dynamique est considéré comme étant un nom de balise)

  2. \Champ & $p

    AST au niveau de la balise

  3. string $nom

    Nom de la balise

Retour

  • array

    Liste des codes PHP d'éxecution des balises collectées

Package

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)
Proposer une amélioration
void compose_filtres( & $p , $code )

Paramètres

  1. & $p
  2. $code

Package

Proposer une amélioration
void compose_filtres_args( $p , $args , $sep )

Paramètres

  1. $p
  2. $args
  3. $sep

Package

Proposer une amélioration
void filtre_logique( $fonc , $code , $arg )

Paramètres

  1. $fonc
  2. $code
  3. $arg

Package

Filtre

  • logique
Proposer une amélioration

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 si elle est bien englobante
string index_boucle( \Champ $p )

Paramètres

  1. \Champ $p

    AST au niveau de la balise

Retour

  • string
    • Identifiant de la boucle possédant ce champ.
    • '' si une référence explicite incorrecte est envoyée

Exemples

  • Dans une balise dynamique ou calculée :
    $idb = index_boucle($p);

Package

Proposer une amélioration

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)

string index_compose( array $conditionnel , string $defaut )

Paramètres

  1. array $conditionnel

    Liste de codes PHP pour retrouver un champ

  2. string $defaut

    Valeur par défaut si aucun des moyens ne l'a trouvé

Retour

  • string

    Code PHP complet de recherche d'un champ

Package

Proposer une amélioration

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

array index_exception( \Boucle & $boucle , array $desc , string $nom_champ , array $excep )

Paramètres

  1. \Boucle & $boucle

    Boucle dont on prend un alias de champ

  2. array $desc

    Description de la table SQL de la boucle

  3. string $nom_champ

    Nom du champ original demandé

  4. array $excep

    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.

Retour

  • array

    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"

Package

Proposer une amélioration

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 *')

string index_pile( string $idb , string $nom_champ , array & $boucles , string $explicite = '' , null | string $defaut = null , boolean $remonte_pile = true , boolean $select = true )

Paramètres

  1. string $idb

    Identifiant de la boucle

  2. string $nom_champ

    Nom du champ SQL cherché

  3. array & $boucles

    AST du squelette

  4. string $explicite = ''

    Indique que le nom de la boucle est explicite dans la balise #_nomboucletruc:CHAMP

  5. null | string $defaut = null

    Code par defaut si le champ n'est pas trouvé dans l'index. Utilise @$Pile[0][$nom_champ] si non fourni

  6. boolean $remonte_pile = true

    Permettre de remonter la pile des boucles ou non (dans ce cas on ne cherche que danss la 1ère boucle englobante)

  7. boolean $select = true

    Pour ajouter au select de la boucle, par defaut true

Retour

  • string

    Code PHP pour obtenir le champ SQL

Package

Proposer une amélioration

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.
array index_tables_en_pile( string $idb , string $nom_champ , \Boucle & $boucles , boolean & $joker )

Paramètres

  1. string $idb

    Identifiant de la boucle

  2. string $nom_champ

    Nom du champ SQL cherché

  3. \Boucle & $boucles

    AST du squelette

  4. boolean & $joker

    Le champ peut-il être inconnu à la compilation ? Ce drapeau sera levé si c'est le cas.

Retour

  • array

    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.

Package

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.
Proposer une amélioration
void rindex_pile( $p , $champ , $motif )

Paramètres

  1. $p
  2. $champ
  3. $motif

Package

Proposer une amélioration

Mais pas si c'est un serveur spécifique dérogatoire

string trouver_nom_serveur_distant( \Champ $p )

Paramètres

  1. \Champ $p

    AST positionné sur la balise

Retour

  • string

    Nom de la connexion

Package

Proposer une amélioration

Liste des marqueurs

Type Ligne Description
TODO 204 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.

Liste des erreurs

GravitéLigneDescription
Erreur 685
  • No summary for function \champs_traitements()
  • Argument $p is missing from the Docblock of champs_traitements
Erreur 758
  • No summary for function \applique_filtres()
  • Argument $p is missing from the Docblock of applique_filtres
Erreur 785
  • No summary for function \compose_filtres()
  • Argument $code is missing from the Docblock of compose_filtres
  • Argument $p is missing from the Docblock of compose_filtres
Erreur 832
  • No summary for function \filtre_logique()
  • Argument $arg is missing from the Docblock of filtre_logique
  • Argument $code is missing from the Docblock of filtre_logique
  • Argument $fonc is missing from the Docblock of filtre_logique
Erreur 855
  • No summary for function \compose_filtres_args()
  • Argument $sep is missing from the Docblock of compose_filtres_args
  • Argument $args is missing from the Docblock of compose_filtres_args
  • Argument $p is missing from the Docblock of compose_filtres_args
Erreur 902
  • No summary for function \rindex_pile()
  • Argument $motif is missing from the Docblock of rindex_pile
  • Argument $p is missing from the Docblock of rindex_pile
  • Argument $champ is missing from the Docblock of rindex_pile