Browse Source

v0.6 : le plugin 'visiteur' devient 'macrosession' et #_VISITEUR devient #_SESSION etc

svn/root/tags/v0.13.0
jluc@no-log.org 4 years ago
commit
d30e43277d
  1. 16
      .gitattributes
  2. 14
      lang/paquet-visiteur_fr.php
  3. 20
      paquet.xml
  4. 20
      plugin.xml
  5. 27
      readme/test cequilnefautpasfaire.html
  6. 60
      readme/test.html
  7. 21
      readme/todo.avotreboncode
  8. 20
      test_visiteur.html
  9. 9
      test_visiteur_comparaison.html
  10. 31
      test_visiteur_etendu.html
  11. 12
      test_visiteur_filtre.html
  12. 49
      test_visiteur_limitations.html
  13. 53
      test_visiteur_si.html
  14. 30
      test_visiteur_si_etendu.html
  15. 17
      test_visiteur_si_etendu_emboite.html
  16. 182
      visiteur_options.php

16
.gitattributes

@ -0,0 +1,16 @@
* text=auto !eol
lang/paquet-visiteur_fr.php -text
/paquet.xml -text
/plugin.xml -text
readme/test[!!-~]cequilnefautpasfaire.html -text
readme/test.html -text
readme/todo.avotreboncode -text
/test_visiteur.html -text
/test_visiteur_comparaison.html -text
/test_visiteur_etendu.html -text
/test_visiteur_filtre.html -text
/test_visiteur_limitations.html -text
/test_visiteur_si.html -text
/test_visiteur_si_etendu.html -text
/test_visiteur_si_etendu_emboite.html -text
/visiteur_options.php -text

14
lang/paquet-visiteur_fr.php

@ -0,0 +1,14 @@
<?php
// Ceci est un fichier langue de SPIP -- This is a SPIP language file
// Fichier source, a modifier dans svn://zone.spip.org/spip-zone/_plugins_/switchcase/trunk/lang/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
$GLOBALS[$GLOBALS['idx_lang']] = array(
// C
'visiteur_nom' => 'Visiteurs efficaces',
'visiteur_slogan' => 'Macros SPIP : #_VISITEUR, #_VISITEUR_SI, #_VISITEUR_SINON, #_VISITEUR_FIN pour accéder aux données de la session du visiteur courant (ou à des données provenant dailleurs que la session SPIP locale), et les tester dans un squelette en suivant les recommandations webperf (cf https://contrib.spip.net/4611 ).',
);

20
paquet.xml

@ -0,0 +1,20 @@
<paquet
prefix="macrosession"
categorie="outil"
version="0.6.0"
etat="test"
compatibilite="[2.1.0;3.2.*]"
documentation="https://contrib.spip.net/4823"
>
<nom>Macro session étendue</nom>
<!--
webperf de l'accés aux données de sesssions et sessions étendues :
macros SPIP : #_SESSION, #_SESSION_SI, #_SESSION_SINON, #_SESSION_FIN
pour accéder aux données de la session de la _session courant
en suivant les recommandations webperf (cf https://contrib.spip.net/4611 )
ou à des données de sessions étendues, d'une autre origine que la session SPIP
-->
<auteur lien="https://contrib.spip.net/JLuc">JLuc</auteur>
<auteur lien="https://contrib.spip.net/Matthieu-Marcillaud">marcimat</auteur>
<licence lien="http://www.gnu.org/licenses/gpl-3.0.html">GNU/GPL</licence>
</paquet>

20
plugin.xml

@ -0,0 +1,20 @@
<plugin>
<nom>Macro session étendue</nom>
<slogan>webperf de l'accés aux données de sesssions et sessions étendues</slogan>
<icon></icon>
<auteur>JLuc, marcimat</auteur>
<licence>GPL</licence>
<version>0.6.0</version>
<etat>dev</etat>
<description>
Macros SPIP : #_SESSION, #_SESSION_SI, #_SESSION_SINON, #_SESSION_FIN
pour accéder aux données de la session de la _session courant et les tester efficacement
dans le respect des recommandations webperf (cf https://contrib.spip.net/4611 )
ou à des données de sessions étendues, d'une autre origine que la session spip,
</description>
<prefix>macrosession</prefix>
<necessite id="SPIP" version="[2.1.0;3.2.99]" />
<categorie>outil</categorie>
<lien>http://contrib.spip.net/4823</lien>
<options>macrosession_options.php</options>
</plugin>

27
readme/test cequilnefautpasfaire.html

@ -0,0 +1,27 @@
<h4>Explications</h4>
voir http://contrib.spip.net/4823
<h4>filtres et partie conditionnelle avant après sur une balise _SESSION_etc</h4>
Par exemple [(# _SESSION{nom}|strlen)] renvoie une valeur constante quel que soit le nom de la personne connectée.
<br><br>
<ul><li>nom = #_SESSION{nom} <li>
<li>filtre strlen : [(#_SESSION{nom}|strlen)] (indique toujours la même longueur de chaine, 33, quelque soit le nom de la _session, car ça s'applique sur le source php et non sur le résultat php : il ne faut PAS appeler de filtre sur # _SESSION)</li>
<li>les parties conditionnelles avant après sur balise s'affichent toujours, même si le résultat php est vide car il n'y a pas de _session, car le source php n'est pas vide : [avant si non vide (#_SESSION{nom}) apres si non vide]
Effets de bords
<h4>Effets de bord</h4>
Les morceaux de squelettes SPIP présents dans des zones conditionnelles non affichées à cause d’un #_SESSION_SI sont quand mêmes calculées.
<h4>Ce qu'il ne faut pas faire</h4>
#SET{var,var} var vaut var<br>
_SESSION_SI{nom} :
#_SESSION_SI{nom}
/ #SET{var,oui_visiteur} IL Y A UNE_SESSION var vaut oui_visiteur : #GET{var}<br>
#_SESSION_SINON{nom}
/ #SET{var,pas_de_visiteur} IL Y A UNE_SESSION var vaut pas_de_visiteur : #GET{var}<br>
#_SESSION_FINSI
/ après_SESSION_finsi var vaut : #GET{var}<br>

60
readme/test.html

@ -0,0 +1,60 @@
<html><head></head>
<body>
<h1>Test cache eval session</h1>
Squelette : [(#DATE|affdate{'Y-m-d H:i:s'})]<br>
php session_get <?= session_get('nom') ?> --> php date <?= date('Y-m-d H:i:s') ?> :: SPIP eval session_get : #EVAL{session_get('nom')} :: SPIP eval globals : #EVAL{$GLOBALS['visiteur_session']['nom']}
<br>
<b>_SESSION{nom} : #_SESSION{nom}</b><br>
<br><hr><br>
_SESSION_SI{nom} :
#_SESSION_SI{nom}
/ IL Y A UNE_SESSION
#_SESSION_FINSI
/ après_SESSION_finsi
<br><br>
_SESSION_SI{nom} puis SINON :
#_SESSION_SI{nom}
/ apres_SESSION_si
#_SESSION_SINON
/ PAS DE_SESSION
#_SESSION_FINSI
/ après_SESSION_finsi
<br><br>
_SESSION_SI_EGAL{nom,Secretaire} :
#_SESSION_SI_EGAL{nom,Secretaire}
/ c'est egal
#_SESSION_FINSI
/ après_SESSION_finsi
<br><br>
_SESSION_SI_EGAL{nom,Secretaire} puis SINON :
#_SESSION_SI_EGAL{nom,Secretaire}
/ c'est encore egal
#_SESSION_SINON
/ pas egal
#_SESSION_FINSI
/ après_SESSION_finsi
<br><br>
<h4>Emboitements</h4>
#_SESSION_SI{nom}
le nom existe
#_SESSION_SI_EGAL{nom,Secretaire}
et vaut bien Secrétaire
#_SESSION_SINON
et ne vaut pas Secrétaire. Il vaut #_SESSION{nom}.
#_SESSION_FINSI
#_SESSION_SINON
le nom n'existe pas !
#_SESSION_FINSI
</body>
</html>

21
readme/todo.avotreboncode

@ -0,0 +1,21 @@
## Gestion des erreurs ##
détection par le compilateur des usages impossibles de ces macros en tant que balise : appels de filtres et parties conditionnelles avant / après. Le compilateur doit les gèrer et refuser les filtres et affichages conditionnels en les sanctionnant d’une erreur.
détection des mauvaises imbrications de SI SINON FINSI et signalement proprement par une erreur
## Fonctionnalités ##
élargir la gamme de tests
* autres comparaisons de valeurs
* tester les autorisations ?
permettre d'afficher autre chose de plus complexe que juste la valeur du champ :
* avec appel d’un filtre
contrer le risque d'effet de bord (est ce possible?)
une balise qui inclue toutes les parties,
#_SESSION_SI{arg1, arg2, arg3}
bien pour petits morceaux de code

20
test_visiteur.html

@ -0,0 +1,20 @@
<h1>Tests de la balise # _SESSION</h1>
<ul>
<li>_session : #_SESSION</li>
<li>_session nom : #_SESSION{nom}</li>
<li>_session{nom,strlen} : #_SESSION{nom,strlen}</li>
<li>_session{nom, strlen } avec espaces à strlen : #_SESSION{nom, strlen }</li>
<li>_session{ nom,strlen} avec espaces avant nom : #_SESSION{ nom,strlen}</li>
<li>_session{nom ,strlen} avec espaces après nom : #_SESSION{nom ,strlen}</li>
<li>_session{nom,n'existe pas} : #_SESSION{nom,n'existe pas}</li>
</ul>
<hr>
<h3>Tous les tests</h3>
<ul>
<li><a href="?page=test_visiteur">test_visiteur</a></li>
<li><a href="?page=test_visiteur_etendu">test_visiteur_etendu</a></li>
<li><a href="?page=test_visiteur_si">test_visiteur_si</a></li>
<li><a href="?page=test_visiteur_si_etendu">test_visiteur_si_etendu</a></li>
</ul>

9
test_visiteur_comparaison.html

@ -0,0 +1,9 @@
<h4>Comparaison avec == </h4>
<li>_session nom == JLuc : #_SESSION{nom,==,JLuc}</li>
<li>_session nom == Anna : #_SESSION{nom,==,Anna}</li>
<li>_session nom != JLuc : #_SESSION{nom,!=,JLuc}</li>
<li>_session nom > J : #_SESSION{nom,>,J}</li>
<li>_session nom < J : #_SESSION{nom,<,J}</li>
<li>_session nom > K : #_SESSION{nom,>,K}</li>
<li>_session nom < K : #_SESSION{nom,<,K}</li>
</ul>

31
test_visiteur_etendu.html

@ -0,0 +1,31 @@
#_SESSION{nbreste,plus,3}
<h1>Appel de _SESSION avec champ de session étendue</h1>
nom : #_SESSION{nom}<br>
<h4>champ étendu : nbreste</h4>
<dl>
<dt>nbreste</dt><dd> #_SESSION{nbreste}</dd>
<dt>a reçu</dt><dd>#_SESSION{envois_revues_liste}</dd>
</dl>
<h4>avec filtres</h4>
<dl>
<dt>nbreste |+ 3 </dt>
<dd>#_SESSION{nbreste,plus,3}</dd>
<dt>nbreste |choixsivide vide! pasvide </dt>
<dd> #_SESSION{nbreste,choixsivide,vide!,pasvide}</dd>
<dt>nbreste |? pasvide! vide </dt>
<dd> #_SESSION{nbreste,?,pas vide!,vide}</dd>
<dt>a reçu |strlen</dt>
<dd>#_SESSION{envois_revues_liste,strlen}</dd>
</dl>
</ul>
<hr>
<h3>Tous les tests</h3>
<ul>
<li><a href="?page=test_visiteur">test_visiteur</a></li>
<li><a href="?page=test_visiteur_etendu">test_visiteur_etendu</a></li>
<li><a href="?page=test_visiteur_si">test_visiteur_si</a></li>
<li><a href="?page=test_visiteur_si_etendu">test_visiteur_si_etendu</a></li>
</ul>

12
test_visiteur_filtre.html

@ -0,0 +1,12 @@
<ul>
<li>_session{nom,strlen} : #_SESSION{nom,strlen}</li>
</ul>
<hr>
<h3>Tous les tests</h3>
<ul>
<li><a href="?page=test_visiteur">test_visiteur</a></li>
<li><a href="?page=test_visiteur_etendu">test_visiteur_etendu</a></li>
<li><a href="?page=test_visiteur_si">test_visiteur_si</a></li>
<li><a href="?page=test_visiteur_si_etendu">test_visiteur_si_etendu</a></li>
</ul>

49
test_visiteur_limitations.html

@ -0,0 +1,49 @@
<html><head></head>
<body>
<h1>Test cache eval session</h1>
Squelette : [(#DATE|affdate{'Y-m-d H:i:s'})]<br>
php session_get <?= session_get('nom') ?> --> php date <?= date('Y-m-d H:i:s') ?> :: SPIP eval session_get : #EVAL{session_get('nom')} :: SPIP eval globals : #EVAL{$GLOBALS['visiteur_session']['nom']}
<br><br>
_SESSION [(#_SESSION{nom})] avec [(|len)] : [(#_SESSION{nom}|strlen)]
<br>
On boucle avec {si EVAL{session_get('nom')}} = Ça ne dépend pas de la session mais de ce qu'il y a en cache<br>
<BOUCLE_articles(ARTICLES){si #EVAL{session_get('nom')}}>
#ID_ARTICLE ;
</BOUCLE_articles>
<br><br>
<b>_SESSION{nom} : #_SESSION{nom}</b><br>
et avec le filtre strlen : [(#_SESSION{nom}|strlen)]
<br><hr><br>
_SESSION_SI{nom} : #_SESSION_SI{nom} / IL Y A UNE _SESSION #_SESSION_FIN / après_SESSION_finsi
<br><br>
_SESSION_SI{nom} puis SINON : #_SESSION_SI{nom} / apres_SESSION_si #_SESSION_SINON / PAS DE_SESSION #_SESSION_FIN / après_SESSION_finsi
<br><br>
_SESSION_SI{nom,Secretaire} : #_SESSION_SI{nom,Secretaire} / c'est egal #_SESSION_FIN / après_SESSION_finsi
<br><br>
_SESSION_SI{nom,Secretaire} puis SINON : #_SESSION_SI{nom,Secretaire} / c'est encore egal #_SESSION_SINON / pas egal #_SESSION_FIN / après_SESSION_finsi
<br><br>
<h4>Emboitements</h4>
#_SESSION_SI{nom}
le nom existe
#_SESSION_SI{nom,Secretaire}
et vaut bien Secrétaire
#_SESSION_SINON
et ne vaut pas Secrétaire. Il vaut #_SESSION{nom}.
#_SESSION_FIN
#_SESSION_SINON
le nom n'existe pas !
#_SESSION_FIN
<h3>Ce qu'il ne faut pas faire</h3>
#SET{var,var} var vaut var<br>
_SESSION_SI{nom} :
#_SESSION_SI{nom}
/ #SET{var,oui_visiteur} IL Y A UNE_SESSION var vaut oui_visiteur : #GET{var}<br>
#_SESSION_SINON{nom}
/ #SET{var,pas_de_visiteur} IL Y A UNE_SESSION var vaut pas_de_visiteur : #GET{var}<br>
#_SESSION_FIN
/ après_SESSION_finsi var vaut : #GET{var}<br>
</body>
</html>

53
test_visiteur_si.html

@ -0,0 +1,53 @@
<h1>Test _SESSION_SI simple</h1>
<h4>SI{nom} + FIN</h4>
#_SESSION_SI{nom}
<pre>
OUI IL Y A UNE_SESSION avec un nom
son nom est #_SESSION{nom}
</pre>
#_SESSION_FIN
C'est tout (pas de partie SINON).
<h4>SI{nom} + SINON + FIN</h4>
#_SESSION_SI{nom}
<pre>OUI IL Y A UNE_SESSION avec un nom
son nom est #_SESSION{nom}
</pre>
#_SESSION_SINON
<pre>
NON le _session courant n'est pas connecté
</pre>
#_SESSION_FIN
Voilà.
<h4>SI{nom,==,JLuc} + FIN</h4>
#_SESSION_SI{nom,==,JLuc}
<pre>
OUI IL Y A UNE_SESSION avec un nom JLuc
son nom est #_SESSION{nom}
</pre>
#_SESSION_FIN
C'est tout (pas de partie SINON).
<h4>SI{nom,==,JLuc} + SINON + FIN</h4>
#_SESSION_SI{nom,==,JLuc}
<pre>OUI IL Y A UNE_SESSION avec un nom JLuc
son nom est #_SESSION{nom}
</pre>
#_SESSION_SINON
<pre>
NON le _session courant s'il y en a un n'est pas JLuc
</pre>
#_SESSION_FIN
Voilà fini.
<hr>
<h3>Tous les tests</h3>
<ul>
<li><a href="?page=test_visiteur">test_visiteur</a></li>
<li><a href="?page=test_visiteur_etendu">test_visiteur_etendu</a></li>
<li><a href="?page=test_visiteur_si">test_visiteur_si</a></li>
<li><a href="?page=test_visiteur_si_etendu">test_visiteur_si_etendu</a></li>
</ul>

30
test_visiteur_si_etendu.html

@ -0,0 +1,30 @@
<h1>Test # _SESSION avec _SI, _SINON, _FIN et accés session étendue</h1>
<ul>
<li>nom : #_SESSION{nom}</li>
<li>est abonne : #_SESSION{est_abonne}</li>
<li>nbreste : #_SESSION{nbreste}</li>
<li>a reçu : #_SESSION{envois_revues_liste}</li>
</ul>
<h4>SI nbreste</h4>
#_SESSION_SI{nbreste}
il vous reste des numéros à recevoir
#_SESSION_SINON
vous n'êtes plus abonné
#_SESSION_FIN
<h4>SI nbreste==0</h4>
#_SESSION_SI{nbreste,==,0}
il vous reste exactement plus aucun numéro à recevoir !
#_SESSION_SINON
ah, il vous reste des numéros à recevoir... exactement #_SESSION{nbreste}
#_SESSION_FIN
<hr>
<h3>Tous les tests</h3>
<ul>
<li><a href="?page=test_visiteur">test_visiteur</a></li>
<li><a href="?page=test_visiteur_etendu">test_visiteur_etendu</a></li>
<li><a href="?page=test_visiteur_si">test_visiteur_si</a></li>
<li><a href="?page=test_visiteur_si_etendu">test_visiteur_si_etendu</a></li>
</ul>

17
test_visiteur_si_etendu_emboite.html

@ -0,0 +1,17 @@
<h1>Test # _SESSION avec _SI, _SINON, _FIN et accés session étendue</h1>
<ul>
<li>nom : #_SESSION{nom}</li>
<li>est abonne : #_SESSION{est_abonne}</li>
<li>nbreste : #_SESSION{nbreste}</li>
<li>a reçu : #_SESSION{envois_revues_liste}</li>
<li>SI nbreste :
#_SESSION_SI{nbreste}
il vous reste des numéros à recevoir
#_SESSION_SINON
#_SESSION_SI{a_ete_abonne}
votre abo est fini !
#_SESSION_SINON
il faudrait vous abonner !
#_SESSION_FIN
#_SESSION_FIN
</li>

182
visiteur_options.php

@ -0,0 +1,182 @@
<?php
/**
* Outils SPIP supplémentaires pour une gestion efficace pour l'hébergement
* des accés aux données du visiteur courant
* Balises #_VISITEUR, #_VISITEUR_SI, #_VISITEUR_SINON, #_VISITEUR_FIN
*
* @copyright 2016, 2017
* @author JLuc
* @author Marcimat
* @licence GPL
*
*/
include_spip('inc/session');
include_spip ('inc/filtres');
// appeler appliquer_filtre dans le code compilé est une somptuosité superfétatoire
// todo : à la compilation appeler chercher_filtre pour savoir quelle est la fonction appelée par le filtre et insérer dans le code compilé un appel direct à cette fonction --> plus besoin d'inclure inc/filtres dans mes_options
//
// Accés étendu aux données de session des visiteurs
//
// Aucun test n'est fait en amont sur la présence ou non d'une session :
// le pipeline session_get peut être défini par ailleurs (autre plugin...)
// Il reçoit un tableau avec 2 arguments : 'champ' contient le champ recherché,
// et 'visiteur_session' contient la session en cours d'élaboration,
// qu'il peut, ou non, utiliser pour le calcul ou la recherche de la valeur demandée
//
// Actuellement le pipeline n'est appelé que si la valeur demandée
// n'est pas déjà présente dans la session globale SPIP de base...
//
function pipelined_session_get ($champ) {
if (!isset ($GLOBALS['visiteur_session'])
or !isset($GLOBALS['visiteur_session']['id_auteur']) // il semble que ces précisions soient nécessaires
or !$GLOBALS['visiteur_session']['id_auteur'] )
return '';
elseif (isset ($GLOBALS['visiteur_session'][$champ]))
return $GLOBALS['visiteur_session'][$champ];
$session =
array ( 'champ' => $champ,
'visiteur_session' => $GLOBALS['visiteur_session']);
$session = pipeline ('session_get', $session);
if (isset ($session['visiteur_session'][$champ]))
return $session['visiteur_session'][$champ];
else
return '';
};
if (!function_exists('existe_argument_balise')) {
// prolégomène à interprete_argument_balise
function existe_argument_balise ($n, $p) {
return (($p->param) && (!$p->param[0][0]) && (count($p->param[0])>$n));
};
}
/*
* Recevant un argument entre quotes (contenant par exemple un nom de filtre)
* trim_quote enlève les espaces de début et fin *à l'intérieur* des quotes
* ex : reçoit ' filtre ' (quotes comprises) et renvoie 'filtre'
*/
function trim_quote($f) {
$f = trim($f); // c'est pas ça l'important
$l = strlen($f);
if ((strpos($f,"'")!== 0) or (strrpos($f,"'")!== $l-1))
return $f;
$r = '\''.trim(substr($f, 1, $l-2)).'\'';
return $r;
}
// une fonction pour le code de |? (la négation de choixsivide)
function choix_selon ($test, $sioui, $sinon) {
return $test ? $sioui : $sinon;
}
define (V_OUVRE_PHP, "'<'.'" . '?php ');
define (V_FERME_PHP, ' ?' . "'.'>'");
// Appelé uniquement au recalcul pour la compilation
// $champ est entre quotes ''
// le code renvoyé sera inséré à l'intérieur d'un '...'
function compile_appel_visiteur ($p, $champ,$n=2) {
$get_champ = "pipelined_session_get('.\"$champ\".')";
// champ sans application de filtre
if (!existe_argument_balise($n, $p))
return $get_champ;
// Application d'un filtre, récupéré entre quotes ''
$filtre = trim_quote(interprete_argument_balise (2, $p));
if ($filtre=="'?'")
$filtre = "'choix_selon'";
// le filtre peut être appelé avec 0, un ou 2 arguments
$arg_un = $arg_deux = $virgule_arg_un = $virgule_arg_deux = '';
if (existe_argument_balise($n+1, $p)) {
$arg_un = interprete_argument_balise($n+1, $p);
$virgule_arg_un = ".', '.\"$arg_un\"";
};
// le filtre est il en fait un opérateur de comparaison ?
if (in_array ($filtre, array ("'=='", "'!='", "'<'", "'<='", "'>'", "'>='"))) {
$comparateur = trim ($filtre, "'");
$r = "($get_champ $comparateur '.\"$arg_un\".')";
// #_VISITEUR{nom,==,JLuc} donnera
// '<'.'?php echo (pipelined_session_get('."'nom'".') == '."'JLuc'".'); ?'.'>'
// #_VISITEUR_SI{nom
return $r;
}
if (existe_argument_balise($n+2, $p)) {
$arg_deux = interprete_argument_balise($n+2, $p);
$virgule_arg_deux = ".', '.\"$arg_deux\"";
};
// produira par exemple ensuite :
// '<'.'?php echo appliquer_filtre(pipelined_session_get('."'nom'".'), '."'strlen'".'); ?'.'>'
// ou '<'.'?php echo appliquer_filtre( pipelined_session_get('."'nbreste'".'), '."'plus'" .', "'3'" .'); ?'.'>'
$r = "appliquer_filtre($get_champ, '.\"$filtre\" $virgule_arg_un $virgule_arg_deux .')";
return $r;
}
//
// Définition des balises
// Attention : on ne peut PAS appliquer de filtre sur ces balises ni les utiliser dans une construction conditionnelle [avant(...) après]
// Pour appliquer un filtre, utiliser la syntaxe dédiée avec un argument d'appel de la balise
//
/*
* #_VISITEUR rend l'id_auteur si l'internaute est connecté
* #_VISITEUR(champ) rend la valeur du champ de session étendue de l'internaute connecté
* #_VISITEUR(champ, filtre[, arg1[, arg2]]) applique le filtre au champ de session étendue, avec 0, 1 ou 2 arguments supplémentaires et rend la valeur résultat
*/
function balise__VISITEUR_dist($p) {
$champ = interprete_argument_balise(1, $p);
if (!$champ)
$champ = "'id_auteur'";
$p->code = V_OUVRE_PHP . ' echo '. compile_appel_visiteur($p, $champ). '; ' . V_FERME_PHP;
$p->interdire_scripts = false;
// echo "On insèrera l'évaluation du code suivant : <pre>".$p->code."</pre>\n\n";
return $p;
}
/*
* #_VISITEUR_SI(champ) teste si le champ de session est non vide
* #_VISITEUR_SI(champ, val) teste si le champ de session est égal à la valeur spécifiée
* #_VISITEUR_SI(champ, val, operateur) teste si le champ de session se compare positivement à la valeur spécifiée
* selon l'opérateur spécifié, qui peut etre
* - soit un comparateur : ==, <, >, >=, <=
* - soit un filtre (nom de fonction) recevant 2 arguments : la valeur du champ et val. C'est le retour qui est alors testé.
* Produit par exemple le code suivant :
* '<'.'?php echo pipelined_session_get('."'nom'".'); ?'.'>'
*/
function balise__VISITEUR_SI_dist($p) {
$champ = interprete_argument_balise(1, $p);
if (!$champ)
$champ = "'id_auteur'";
$p->interdire_scripts = false;
// Appelé uniquement au recalcul
$p->code = V_OUVRE_PHP . 'if ('.compile_appel_visiteur($p, $champ).') { ' . V_FERME_PHP;
// echo "On insèrera l'évaluation du code suivant : <pre>".$p->code."</pre>\n\n";
return $p;
}
function balise__VISITEUR_SINON_dist($p) {
$p->code="'<'.'" . '?php } else { ?' . "'.'>'";
$p->interdire_scripts = false;
return $p;
}
function balise__VISITEUR_FIN_dist($p) {
$p->code="'<'.'" . '?php }; ?' . "'.'>'";
$p->interdire_scripts = false;
return $p;
}
Loading…
Cancel
Save