Changeset 107811 in spip-zone


Ignore:
Timestamp:
Nov 30, 2017, 11:11:00 PM (16 months ago)
Author:
jluc@…
Message:

nouvelles balises macros #_AUTORISER_SI, #_AUTORISER_SINON, #_AUTORISER_FIN + vérification de la syntaxe des arguments et messages d'erreur

Location:
_plugins_/macrosession/trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/macrosession/trunk/lang/paquet-macrosession_fr.php

    r105243 r107811  
    1111        // C
    1212        'macrosession_nom' => 'Macros de session étendue',
    13         'macrosession_slogan' => 'Macros SPIP : #_SESSION, #_SESSION_SI, #_SESSION_SINON, #_SESSION_FIN pour accéder aux données de session SPIP ou d’autres origines, et les tester dans un squelette en suivant les recommandations https://contrib.spip.net/4611.',
     13        'macrosession_slogan' => 'Macros SPIP : #_SESSION, #_SESSION_SI, #_AUTORISER_SI etc pour accéder aux données de session SPIP ou d’autres origines, ainsi qu’aux autorisations et les tester dans un squelette sans multiplier les caches sessionnés.',
    1414);
  • _plugins_/macrosession/trunk/macrosession_options.php

    r107416 r107811  
    8989
    9090// Appelé uniquement au recalcul pour la compilation
    91 // $champ est entre quotes ''
    9291// le code renvoyé sera inséré à l'intérieur d'un '...'
    93 function compile_appel_macro_session ($p, $champ,$n=2) {
     92function compile_appel_macro_session ($p) {
     93        $champ = interprete_argument_balise(1, $p);
     94        // $champ est entre quotes ''
     95        if (!$champ)
     96                $champ = "'id_auteur'";
     97
     98        if (erreur_argument_macro ('#_SESSION', 'champ', $champ, $p))
     99                return "''";
     100                       
    94101        $get_champ = "pipelined_session_get('.\"$champ\".')";
    95102
    96103        // champ sans application de filtre
    97         if (!existe_argument_balise($n, $p))
     104        if (!existe_argument_balise(2, $p))
    98105                return $get_champ;
    99106       
    100107        // Application d'un filtre, récupéré entre quotes ''
    101108        $filtre = trim_quote(interprete_argument_balise (2, $p));
    102 
    103         if ($filtre=="'?'")
    104                 $filtre = "'choix_selon'";
    105                
    106         // le filtre peut être appelé avec 0, un ou 2 arguments
    107         $arg_un = $arg_deux = $virgule_arg_un = $virgule_arg_deux = '';
    108        
    109         if (existe_argument_balise($n+1, $p)) {
    110                 $arg_un = interprete_argument_balise($n+1, $p);
    111                 $virgule_arg_un = ".', '.\"$arg_un\"";
    112         };
    113 
    114         // le filtre est il en fait un opérateur de comparaison ?
    115         if (in_array ($filtre, array ("'=='", "'!='", "'<'", "'<='", "'>'", "'>='"))) {
    116                 $comparateur = trim ($filtre, "'");
    117 
    118                 return "($get_champ $comparateur '.\"$arg_un\".')";
    119                 // #_SESSION{nom,==,JLuc} donnera
    120                 // '<'.'?php  echo (pipelined_session_get('."'nom'".') == '."'JLuc'".');  ?'.'>'
    121         }
     109        if (erreur_argument_macro ('#_SESSION', 'filtre', $filtre, $p))
     110                return "''";
    122111
    123112        // le filtre est il en fait un opérateur unaire ?
     
    128117                        nobreak;
    129118                case 'non' :
    130                         return "(!$get_champ $comparateur)";
     119                        return "(!$get_champ)";
    131120                        break;
    132121                }
    133122        }
    134123
    135         if (existe_argument_balise($n+2, $p)) {
    136                 $arg_deux = interprete_argument_balise($n+2, $p);
     124        if ($filtre=="'?'")
     125                $filtre = "'choix_selon'";
     126               
     127        // le filtre peut être appelé avec 0, un ou 2 arguments
     128        $arg_un = $arg_deux = $virgule_arg_un = $virgule_arg_deux = '';
     129       
     130        if (existe_argument_balise(3, $p)) {
     131                $arg_un = interprete_argument_balise(3, $p);
     132                $virgule_arg_un = ".', '.\"$arg_un\"";
     133        };
     134
     135        if (erreur_argument_macro ('#_SESSION', 'arg_un', $arg_un, $p))
     136                return "''";
     137
     138        // le filtre est il en fait un opérateur de comparaison ?
     139        if (in_array ($filtre, array ("'=='", "'!='", "'<'", "'<='", "'>'", "'>='"))) {
     140                $comparateur = trim ($filtre, "'");
     141
     142                return "($get_champ $comparateur '.\"$arg_un\".')";
     143                // #_SESSION{nom,==,JLuc} donnera
     144                // '<'.'?php  echo (pipelined_session_get('."'nom'".') == '."'JLuc'".');  ?'.'>'
     145        }
     146
     147        if (existe_argument_balise(4, $p)) {
     148                $arg_deux = interprete_argument_balise(4, $p);
    137149                $virgule_arg_deux = ".', '.\"$arg_deux\"";
    138150        };
     151
     152        if (erreur_argument_macro ('#_SESSION', 'arg_deux', $arg_deux, $p))
     153                return "''";
    139154
    140155// produira par exemple ensuite :
     
    159174 */
    160175function balise__SESSION_dist($p) {
    161         $champ = interprete_argument_balise(1, $p);
    162         if (!$champ)
    163                 $champ = "'id_auteur'";
    164         $p->code = V_OUVRE_PHP . ' echo '. compile_appel_macro_session($p, $champ). '; ' . V_FERME_PHP;
     176        $p->code = V_OUVRE_PHP . ' echo '. compile_appel_macro_session($p). '; ' . V_FERME_PHP;
    165177        $p->interdire_scripts = false;
    166178        // echo "On insèrera l'évaluation du code suivant : <pre>".$p->code."</pre>\n\n";
     
    183195*/
    184196function balise__SESSION_SI_dist($p) {
    185         $champ = interprete_argument_balise(1, $p);
    186         if (!$champ)
    187                 $champ = "'id_auteur'";
    188 
    189         $p->interdire_scripts = false;
    190 
    191197        // Appelé uniquement au recalcul
    192198        $p->code = V_OUVRE_PHP . 'if ('.compile_appel_macro_session($p, $champ).') { ' . V_FERME_PHP;
     199        $p->interdire_scripts = false;
    193200        return $p;
    194201}
    195202
    196203function balise__SESSION_SINON_dist($p) {
    197         $p->code="'<'.'" . '?php } else { ?' . "'.'>'";
     204        $p->code = V_OUVRE_PHP.' } else { '.V_FERME_PHP;
    198205        $p->interdire_scripts = false;
    199206        return $p;
     
    201208
    202209function balise__SESSION_FIN_dist($p) {
    203         $p->code="'<'.'" . '?php }; ?' . "'.'>'";
    204         $p->interdire_scripts = false;
    205         return $p;
     210        $p->code = V_OUVRE_PHP.' } '.V_FERME_PHP;
     211        $p->interdire_scripts = false;
     212        return $p;
     213}
     214
     215function compile_appel_macro_autoriser ($p) {
     216        $autorisation = interprete_argument_balise(1, $p);
     217
     218        if (erreur_argument_macro ('#_AUTORISER_SI', 'autorisation', $autorisation, $p))
     219                return "''";
     220
     221        // l'autorisation peut être appelé avec 0, un ou 2 arguments
     222        if (!existe_argument_balise(2, $p))
     223                return "autoriser('.\"$autorisation\".')";
     224
     225        $type = trim_quote(interprete_argument_balise (2, $p));
     226        if (erreur_argument_macro ('#_AUTORISER_SI', 'type', $type, $p))
     227                return "''";
     228
     229        if (!existe_argument_balise(3, $p))
     230                return "autoriser('.\"$autorisation\".', '.\"$type\".')";
     231
     232        $id = trim_quote(interprete_argument_balise (3, $p));
     233        if (erreur_argument_macro ('#_AUTORISER_SI', 'id', $id, $p))
     234                return "''";
     235
     236        if (!existe_argument_balise(4, $p))
     237                return "autoriser('.\"$autorisation\".', '.\"$type\".', '.\"$id\".')";
     238
     239        // Les appels à #_AUTORISER_SI avec arguments $qui et $opt n'ont été testés
     240        // De toute façon c'est impossible de les appeler avec un #ARRAY
     241        $qui = trim_quote(interprete_argument_balise (4, $p));
     242        if (erreur_argument_macro ('#_AUTORISER_SI', 'qui', $qui, $p))
     243                return "''";
     244        if (!existe_argument_balise(5, $p))
     245                return "autoriser('.\"$autorisation\".', '.\"$type\".', '.\"$id\".')";
     246
     247        $opt = trim_quote(interprete_argument_balise (5, $p));
     248        if (erreur_argument_macro ('#_AUTORISER_SI', 'opt', $opt, $p))
     249                return "''";
     250        return "autoriser('.\"$autorisation\".', '.\"$type\".', '.\"$id\".', '.\"$opt\".')";
     251}
     252
     253function balise__AUTORISER_SI_dist($p) {
     254        $p->interdire_scripts = false;
     255
     256        // Appelé uniquement au recalcul
     257        $p->code = V_OUVRE_PHP . 'if ('.compile_appel_macro_autoriser ($p).') { ' . V_FERME_PHP;
     258        return $p;
     259}
     260
     261function balise__AUTORISER_SINON_dist($p) {
     262        return balise__SESSION_SINON_dist($p);
     263}
     264
     265function balise__AUTORISER_FIN_dist($p) {
     266        return balise__SESSION_FIN_dist($p);
    206267}
    207268 
     269
     270function erreur_argument_macro ($macro, $argument, $val, $p) {
     271        if (substr($val, 0, 1) != "'") {
     272                erreur_squelette ("L'argument '$argument' de la macro '$macro' ne doit pas être une valeur calculée (".$val.")", $p);
     273                return true;
     274        };
     275        return false;
     276}
  • _plugins_/macrosession/trunk/paquet.xml

    r107414 r107811  
    22        prefix="macrosession"
    33        categorie="outil"
    4         version="0.7.0"
     4        version="0.8.0"
    55        etat="test"
    66        compatibilite="[2.1.0;3.2.*]"
     
    1111        <!--
    1212        webperf de l'accés aux données de sesssions et sessions étendues :
    13         macros SPIP : #_SESSION, #_SESSION_SI, #_SESSION_SINON, #_SESSION_FIN
     13        macros SPIP : #_SESSION, #_SESSION_SI, #_AUTORISER_SI, etc
    1414        pour accéder aux données de la session de la _session courant
    15         en suivant les recommandations webperf  (cf https://contrib.spip.net/4611 )
    1615        ou à des données de sessions étendues, d'une autre origine que la session SPIP
     16        et les tester ainsi que les autorisations
     17        sans multiplier les caches sessionnés
    1718        -->
    1819        <auteur lien="https://contrib.spip.net/JLuc">JLuc</auteur>
    19         <auteur lien="https://contrib.spip.net/Matthieu-Marcillaud">marcimat</auteur>
     20        <credit lien="https://contrib.spip.net/Matthieu-Marcillaud">marcimat</credit>
    2021        <credit lien="https://thenounproject.com/leremy/collection/superhero/?i=690777">Gan Khoon Lay</credit>
    2122        <licence lien="http://www.gnu.org/licenses/gpl-3.0.html">GNU/GPL</licence>
  • _plugins_/macrosession/trunk/plugin.xml

    r107414 r107811  
    33        <slogan>webperf de l'accés aux données de sesssions et sessions étendues</slogan>
    44        <icon></icon>
    5         <auteur>JLuc, marcimat</auteur>
     5        <auteur>JLuc</auteur>
    66        <licence>GPL</licence>
    7         <version>0.7.0</version>
    8         <etat>dev</etat>
     7        <version>0.8.0</version>
     8        <etat>test</etat>
    99        <description>
    10         Macros SPIP #_SESSION, #_SESSION_SI, #_SESSION_SINON, #_SESSION_FIN
     10        Macros SPIP #_SESSION, #_SESSION_SI, #_AUTORISER_SI, etc
    1111        pour accéder aux données de la session de la _session courant et les tester efficacement
    12         dans le respect des recommandations cf https://contrib.spip.net/4611
    1312        ou à des données de sessions d'autre origine que la session spip,
     13        et les tester et tester les autorisations
     14        sans multiplier les caches sessionnés
    1415        </description>
    1516        <prefix>macrosession</prefix>
  • _plugins_/macrosession/trunk/test_visiteur_comparaison.html

    r105006 r107811  
    11<h4>Comparaison avec == </h4>
     2
     3<b>Le nom est : #_SESSION{nom}</b>
     4<ul>
    25<li>_session nom == JLuc : #_SESSION{nom,==,JLuc}</li>
    3 <li>_session nom == Anna : #_SESSION{nom,==,Anna}</li>
     6<li>_session nom == G : #_SESSION{nom,==,G}</li>
    47<li>_session nom != JLuc : #_SESSION{nom,!=,JLuc}</li>
     8<li>_session nom != G : #_SESSION{nom,!=,G}</li>
     9<li>_session nom > F : #_SESSION{nom,>,F}</li>
     10<li>_session nom < F : #_SESSION{nom,<,F}</li>
     11<li>_session nom > G : #_SESSION{nom,>,G}</li>
     12<li>_session nom < G : #_SESSION{nom,<,G}</li>
    513<li>_session nom > J : #_SESSION{nom,>,J}</li>
    614<li>_session nom < J : #_SESSION{nom,<,J}</li>
Note: See TracChangeset for help on using the changeset viewer.