X-Git-Url: https://git.cyclocoop.org/?a=blobdiff_plain;f=www%2Fecrire%2Fpublic%2Finterfaces.php;fp=www%2Fecrire%2Fpublic%2Finterfaces.php;h=168148a59be4d8ca6bf68306b14ed1c5ef187009;hb=a9541742f84ce7e258d46dd8407242289ab2ec72;hp=0000000000000000000000000000000000000000;hpb=8ed9bb762bd42e6262d417333a5a42c2c15a79e0;p=lhc%2Fweb%2Fwww.git diff --git a/www/ecrire/public/interfaces.php b/www/ecrire/public/interfaces.php new file mode 100644 index 00000000..168148a5 --- /dev/null +++ b/www/ecrire/public/interfaces.php @@ -0,0 +1,694 @@ +, <, >=, IN, ...) + * @var null|string */ + public $op; + + /** + * Présence d'une négation (truc !op valeur) + * @var null|string */ + public $not; + + /** + * Présence d'une exclusion (!truc op valeur) + * @var null|string */ + public $exclus; + + /** + * Paramètres du critère + * - $param[0] : élément avant l'opérateur + * - $param[1..n] : éléments après l'opérateur + * @var array */ + var $param = array(); + + /** + * Numéro de ligne dans le code source du squelette + * @var int */ + public $ligne = 0; +} + +/** + * Description d'un champ (balise SPIP) + * + * @package SPIP\Compilateur\AST +**/ +class Champ { + /** + * Type de noeud + * @var string */ + public $type = 'champ'; + + /** + * Nom du champ demandé. Exemple 'ID_ARTICLE' + * @var string|null */ + public $nom_champ; + + /** + * Identifiant de la boucle parente si explicité + * @var string|null */ + public $nom_boucle= ''; + + /** + * Partie optionnelle avant + * @var null|string|array */ + public $avant; + + /** + * Partie optionnelle après + * @var null|string|array */ + public $apres; + + /** + * Étoiles : annuler des automatismes + * + * - '*' annule les filtres automatiques + * - '**' annule en plus les protections de scripts + * @var null|string */ + public $etoile; + + /** + * Arguments et filtres explicites sur la balise + * - $param[0] contient les arguments de la balise + * - $param[1..n] contient les filtres à appliquer à la balise + * @var array */ + public $param = array(); + + /** + * Source des filtres (compatibilité) (?) + * @var array|null */ + public $fonctions = array(); + + /** + * Identifiant de la boucle + * @var string */ + public $id_boucle = ''; + + /** + * AST du squelette, liste de toutes les boucles + * @var Boucles[] */ + public $boucles; + + /** + * Alias de table d'application de la requête ou nom complet de la table SQL + * @var string|null */ + public $type_requete; + + /** + * Résultat de la compilation: toujours une expression PHP + * @var string */ + public $code = ''; + + /** + * Interdire les scripts + * + * false si on est sûr de cette balise + * @see interdire_scripts() + * @var bool */ + public $interdire_scripts = true; + + /** + * Description du squelette + * + * Sert pour la gestion d'erreur et la production de code dependant du contexte + * + * Peut contenir les index : + * - nom : Nom du fichier de cache + * - gram : Nom de la grammaire du squelette (détermine le phraseur à utiliser) + * - sourcefile : Chemin du squelette + * - squelette : Code du squelette + * - id_mere : Identifiant de la boucle parente + * - documents : Pour embed et img dans les textes + * - session : Pour un cache sessionné par auteur + * - niv : Niveau de tabulation + * + * @var array */ + public $descr = array(); + + /** + * Numéro de ligne dans le code source du squelette + * @var int */ + public $ligne = 0; + + /** + * Drapeau pour reperer les balises calculées par une fonction explicite + * @var bool */ + public $balise_calculee = false; +} + + +/** + * Description d'une chaîne de langue +**/ +class Idiome { + /** + * Type de noeud + * @var string */ + public $type = 'idiome'; + + /** + * Clé de traduction demandée. Exemple 'item_oui' + * @var string */ + public $nom_champ = ""; + + /** + * Module de langue où chercher la clé de traduction. Exemple 'medias' + * @var string */ + public $module = ""; + + /** + * Arguments à passer à la chaîne + * @var array */ + public $arg = array(); + + /** + * Filtres à appliquer au résultat + * @var array */ + public $param = array(); + + /** + * Source des filtres (compatibilité) (?) + * @var array|null */ + public $fonctions = array(); + + /** + * Inutilisé, propriété générique de l'AST + * @var string|array */ + public $avant = ''; + + /** + * Inutilisé, propriété générique de l'AST + * @var string|array */ + public $apres = ''; + + /** + * Identifiant de la boucle + * @var string */ + public $id_boucle = ''; + + /** + * AST du squelette, liste de toutes les boucles + * @var Boucles[] */ + public $boucles; + + /** + * Alias de table d'application de la requête ou nom complet de la table SQL + * @var string|null */ + public $type_requete; + + /** + * Résultat de la compilation: toujours une expression PHP + * @var string */ + public $code = ''; + + /** + * Interdire les scripts + * @see interdire_scripts() + * @var bool */ + public $interdire_scripts = false; + + /** + * Description du squelette + * + * Sert pour la gestion d'erreur et la production de code dependant du contexte + * + * Peut contenir les index : + * - nom : Nom du fichier de cache + * - gram : Nom de la grammaire du squelette (détermine le phraseur à utiliser) + * - sourcefile : Chemin du squelette + * - squelette : Code du squelette + * - id_mere : Identifiant de la boucle parente + * - documents : Pour embed et img dans les textes + * - session : Pour un cache sessionné par auteur + * - niv : Niveau de tabulation + * + * @var array */ + public $descr = array(); + + /** + * Numéro de ligne dans le code source du squelette + * @var int */ + public $ligne = 0; +} + +/** + * Description d'un texte polyglotte () + * + * @package SPIP\Compilateur\AST +**/ +class Polyglotte { + /** + * Type de noeud + * @var string */ + public $type = 'polyglotte'; + + /** + * Tableau des traductions possibles classées par langue + * + * Tableau code de langue => texte + * @var array */ + var $traductions = array(); + + /** + * Numéro de ligne dans le code source du squelette + * @var int */ + public $ligne = 0; +} + + + +global $table_criteres_infixes; +$table_criteres_infixes = array('<', '>', '<=', '>=', '==', '===', '!=', '!==', '<>', '?'); + +global $exception_des_connect; +$exception_des_connect[] = ''; // ne pas transmettre le connect='' par les inclure + + + +/** + * Déclarer les interfaces de la base pour le compilateur + * + * On utilise une fonction qui initialise les valeurs, + * sans écraser d'eventuelles prédéfinition dans mes_options + * et les envoie dans un pipeline + * pour les plugins + * + * @link http://doc.spip.org/@declarer_interfaces + * + * @return void + */ +function declarer_interfaces(){ + global $exceptions_des_tables, $table_des_tables, $table_date, $table_titre, $table_statut; + + $table_des_tables['articles']='articles'; + $table_des_tables['auteurs']='auteurs'; + $table_des_tables['rubriques']='rubriques'; + $table_des_tables['hierarchie']='rubriques'; + + // definition des statuts de publication + global $tables_statut; + $table_statut = array(); + + // + // tableau des tables de jointures + // Ex: gestion du critere {id_mot} dans la boucle(ARTICLES) + global $tables_jointures; + $tables_jointures = array(); + $tables_jointures['spip_jobs'][] = 'jobs_liens'; + + global $exceptions_des_jointures; + #$exceptions_des_jointures['titre_mot'] = array('spip_mots', 'titre'); // pour exemple + $exceptions_des_jointures['profondeur'] = array('spip_rubriques', 'profondeur'); + + global $table_des_traitements; + + define('_TRAITEMENT_TYPO', 'typo(%s, "TYPO", $connect, $Pile[0])'); + define('_TRAITEMENT_RACCOURCIS', 'propre(%s, $connect, $Pile[0])'); + define('_TRAITEMENT_TYPO_SANS_NUMERO', 'typo(supprimer_numero(%s), "TYPO", $connect, $Pile[0])'); + + $table_des_traitements['BIO'][]= _TRAITEMENT_RACCOURCIS; + $table_des_traitements['CHAPO'][]= _TRAITEMENT_RACCOURCIS; + $table_des_traitements['DATE'][]= 'normaliser_date(%s)'; + $table_des_traitements['DATE_REDAC'][]= 'normaliser_date(%s)'; + $table_des_traitements['DATE_MODIF'][]= 'normaliser_date(%s)'; + $table_des_traitements['DATE_NOUVEAUTES'][]= 'normaliser_date(%s)'; + $table_des_traitements['DESCRIPTIF'][]= _TRAITEMENT_RACCOURCIS; + $table_des_traitements['INTRODUCTION'][]= 'PtoBR('. _TRAITEMENT_RACCOURCIS .')'; + $table_des_traitements['NOM_SITE_SPIP'][]= _TRAITEMENT_TYPO; + $table_des_traitements['NOM'][]= _TRAITEMENT_TYPO_SANS_NUMERO; + $table_des_traitements['AUTEUR'][]= _TRAITEMENT_TYPO; + $table_des_traitements['PS'][]= _TRAITEMENT_RACCOURCIS; + $table_des_traitements['SOURCE'][]= _TRAITEMENT_TYPO; + $table_des_traitements['SOUSTITRE'][]= _TRAITEMENT_TYPO; + $table_des_traitements['SURTITRE'][]= _TRAITEMENT_TYPO; + $table_des_traitements['TAGS'][]= '%s'; + $table_des_traitements['TEXTE'][]= _TRAITEMENT_RACCOURCIS; + $table_des_traitements['TITRE'][]= _TRAITEMENT_TYPO_SANS_NUMERO; + $table_des_traitements['TYPE'][]= _TRAITEMENT_TYPO; + $table_des_traitements['DESCRIPTIF_SITE_SPIP'][]= _TRAITEMENT_RACCOURCIS; + $table_des_traitements['SLOGAN_SITE_SPIP'][]= _TRAITEMENT_TYPO; + $table_des_traitements['ENV'][]= 'entites_html(%s,true)'; + + // valeur par defaut pour les balises non listees ci-dessus + $table_des_traitements['*'][]= false; // pas de traitement, mais permet au compilo de trouver la declaration suivante + // toujours securiser les DATA + $table_des_traitements['*']['DATA']= 'safehtml(%s)'; + // expliciter pour VALEUR qui est un champ calcule et ne sera pas protege par le catch-all * + $table_des_traitements['VALEUR']['DATA']= 'safehtml(%s)'; + + + // gerer l'affectation en 2 temps car si le pipe n'est pas encore declare, on ecrase les globales + $interfaces = pipeline('declarer_tables_interfaces', + array( + 'table_des_tables'=>$table_des_tables, + 'exceptions_des_tables'=>$exceptions_des_tables, + 'table_date'=>$table_date, + 'table_titre'=>$table_titre, + 'tables_jointures'=>$tables_jointures, + 'exceptions_des_jointures'=>$exceptions_des_jointures, + 'table_des_traitements'=>$table_des_traitements, + 'table_statut'=>$table_statut, + )); + if ($interfaces){ + $table_des_tables = $interfaces['table_des_tables']; + $exceptions_des_tables = $interfaces['exceptions_des_tables']; + $table_date = $interfaces['table_date']; + $table_titre = $interfaces['table_titre']; + $tables_jointures = $interfaces['tables_jointures']; + $exceptions_des_jointures = $interfaces['exceptions_des_jointures']; + $table_des_traitements = $interfaces['table_des_traitements']; + $table_statut = $interfaces['table_statut']; + } +} + +declarer_interfaces(); + +?>