Changeset 108099 in spip-zone


Ignore:
Timestamp:
Dec 18, 2017, 9:34:19 AM (18 months ago)
Author:
jluc@…
Message:

Passer 'env' ou 'url' ou #BALISE ou #GET{variable} en 3eme argument de #_AUTORISER + messages d'erreurs plus précis

Location:
_plugins_/macrosession/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/macrosession/trunk/macrosession_options.php

    r107862 r108099  
    2727// Au lieu de cela, appeler chercher_filtre à la compilation pour savoir quelle est la fonction appelée par le filtre et insérer dans le code compilé un appel direct à cette fonction
    2828// Comme ça plus besoin d'inclure inc/filtres dans mes_options
    29 //
    3029
    3130//
     
    211210}
    212211
     212function macrosession_pipe($q) {
     213//      echo "exec macrosession_pipe($q)<br>";
     214        return $q;
     215}
     216
    213217function compile_appel_macro_autoriser ($p) {
    214218        $autorisation = interprete_argument_balise(1, $p);
     
    222226
    223227        $type = trim_quote(interprete_argument_balise (2, $p));
    224         if (erreur_argument_macro ('#_AUTORISER_SI', 'type', $type, $p))
     228        if (erreur_argument_macro ("#_AUTORISER_SI{ $autorisation,...}", 'type', $type, $p))
    225229                return "''";
    226230
     
    229233
    230234        $id = trim_quote(interprete_argument_balise (3, $p));
    231         if (erreur_argument_macro ('#_AUTORISER_SI', 'id', $id, $p))
    232                 return "''";
    233 
    234         if (!existe_argument_balise(4, $p))
    235                 return "autoriser('.\"$autorisation\".', '.\"$type\".', '.\"$id\".')";
    236 
    237         // Les appels à #_AUTORISER_SI avec arguments $qui et $opt n'ont été testés
     235        //
     236        // 4 possibilités de passer des id calculées à #_AUTORISER_SI :
     237        // - Appels directs de #BALISE ou #GET{variable} (non recommandé)
     238        // - Passer 'env' et 'url' pour chercher l'id_ associé au type dans l'env ou dans l'url
     239        // Ex : #_AUTORISER{modifier,article,env} ou #_AUTORISER{modifier,article,url}
     240        //
     241
     242        // Hacks : décompiler pour reconnaître et gérer #BALISE et #GET{variable}
     243        //
     244        // 1) Balises genre #ID_ARTICLE
     245        // Comme leur source php est inséré dans une chaine il faut l'enchasser entre accolades, et enlever le @
     246        // TODO : assurer une évaluation hors chaine
     247        if ((substr ($id,0,11) == '@$Pile[0][\'')
     248                and preg_match("/[a-z_]+'\]\$/iu", substr ($id, 11))) {
     249                $id = 'macrosession_pipe({'.substr($id, 1).'})';
     250        }
     251        // 2) #GET{variable}
     252        // cad : table_valeur($Pile["vars"], (string)'variable', null)
     253        // Pour simplifier la réécriture, on ne passe pas par table_valeur
     254        elseif (preg_match("/^table_valeur\(\\\$Pile\[\"vars\"\], \(string\)'([a-z_]+)', null\)\s*\$/iu",$id,$matches)) {
     255                $id = 'macrosession_pipe({$Pile["vars"]["'.$matches[1].'"]})';
     256        }
     257        elseif (erreur_argument_macro ("#_AUTORISER_SI{ $autorisation, $type, ...}", 'id', $id, $p, 'contexte_ok'))
     258                return "''";
     259
     260        if (!existe_argument_balise(4, $p)) {
     261                $id_type = "'id_".substr($type,1);      //      TODO : utiliser API spip
     262                switch($id) {   
     263                        // TODO : gérer ces cas dans la continuité des 1) et 2) plus haut, en affectant $id. Ainsi ce sera compatible avec arguments qui et opt
     264                        // 3)
     265                        case "'env'" :
     266                                $ret = "autoriser('.\"$autorisation\".', '.\"$type\".', '.\"macrosession_pipe({\$Pile[0][$id_type]})\".')";
     267                                return $ret;
     268
     269                        // 4)
     270                        case "'url'" :
     271                                $ret = "autoriser('.\"$autorisation\".', '.\"$type\".', '.\"macrosession_pipe(_request($id_type))\".')";
     272                                return $ret;
     273
     274                        default :
     275                                return "autoriser('.\"$autorisation\".', '.\"$type\".', '.\"$id\".')";
     276                };
     277        };
     278
     279        // ATTENTION : Les appels à #_AUTORISER_SI avec arguments $qui et $opt n'ont pas été testés
    238280        $qui = trim_quote(interprete_argument_balise (4, $p));
    239         if (erreur_argument_macro ('#_AUTORISER_SI', 'qui', $qui, $p))
     281        if (erreur_argument_macro ("#_AUTORISER_SI{ $autorisation, $type, $id, ...}", 'qui', $qui, $p))
    240282                return "''";
    241283        if (!existe_argument_balise(5, $p))
     
    265307 
    266308
    267 function erreur_argument_macro ($macro, $argument, $val, $p) {
     309function erreur_argument_macro ($macro, $argument, $val, $p, $contexte_ok='') {
    268310        if (substr($val, 0, 1) != "'") {
    269                 erreur_squelette ("L'argument '$argument' de la macro '$macro' ne doit pas être une valeur calculée (".$val.")", $p);
     311                if ($contexte_ok)
     312                        $contexte_ok = "Pour chercher dans les variables d'environnement ou d'url, vous pouvez aussi utiliser 'env' et 'url'";
     313                erreur_squelette ("L'argument '$argument' de la macro '$macro' ne doit pas être une valeur calculée (".$val."). $contexte_ok", $p);
    270314                return true;
    271315        };
  • _plugins_/macrosession/trunk/paquet.xml

    r107862 r108099  
    22        prefix="macrosession"
    33        categorie="outil"
    4         version="0.8.2"
     4        version="0.9.0"
    55        etat="test"
    66        compatibilite="[2.1.0;3.2.*]"
  • _plugins_/macrosession/trunk/plugin.xml

    r107862 r108099  
    55        <auteur>JLuc</auteur>
    66        <licence>GPL</licence>
    7         <version>0.8.2</version>
     7        <version>0.9.0</version>
    88        <etat>test</etat>
    99        <description>
Note: See TracChangeset for help on using the changeset viewer.