Personnaliser l'authentification : quelles sont les variables ?

Bonjour

J'utilise le plugin/contrib authentification de spip qui se sert des visiteurs pour les inscriptions.

J'aimerais avoir sur la page d'accueil un "bonjour $nom" mais je ne sais pas quelle variable il faut mettre.

J'ai essayé une boucle auteur
<BOUCLE_auteur(AUTEURS){id_auteur}>
[<p>(#NOM)</p>]
</BOUCLE_auteur>

Mais il ne me retourne rien même si je suis déjà logué comme Administrateur...

Des solutions ?

Le 12/06/06, Josh Parker<mail.ronan@free.fr> a écrit :

Bonjour

J'utilise le plugin/contrib authentification de spip qui se sert des
visiteurs pour les inscriptions.

J'aimerais avoir sur la page d'accueil un "bonjour $nom" mais je ne
sais pas quelle variable il faut mettre.

J'ai essayé une boucle auteur
<BOUCLE_auteur(AUTEURS){id_auteur}>
[<p>(#NOM)</p>]
</BOUCLE_auteur>

Mais il ne me retourne rien même si je suis déjà logué comme
Administrateur...

Des solutions ?

Ajoute {tout} tout auteur qui n'a pas publié un document ne s'affiche
pas sans ça.

--
** Bienvenue dans le Monde de Miss Mopi : http://www.missmopi.net/ **
** A l'Ombre des Eternels : http://www.ombreternel.org/ **

Ce qui veut dire que pour visiteur c'est fichu ? Vu qu'a priori ils ne publient aucun document...

Si. Utilise {tout}

Le 12/06/06, Josh Parker<mail.ronan@free.fr> a écrit :

Ce qui veut dire que pour visiteur c'est fichu ? Vu qu'a priori ils ne
publient aucun document...

_______________________________________________
liste spip
spip@rezo.net - désabonnement : spip-off@rezo.net
Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
Documentation de SPIP : http://www.spip.net/
irc://irc.freenode.net/spip
FAQ : http://www.spip-contrib.net/spikini/FaQ

--
** Bienvenue dans le Monde de Miss Mopi : http://www.missmopi.net/ **
** A l'Ombre des Eternels : http://www.ombreternel.org/ **

Le résultat c'est qu'effectivement il m'affiche tout ! Mais tous les auteurs, ça fait une jolie liste après bonjour !

Le 12/06/06, Josh Parker a écrit :

Le résultat c'est qu'effectivement il m'affiche tout ! Mais tous les
auteurs, ça fait une jolie liste après bonjour !

Regarde la doc et cherche un peu de temps en temps.

Il faut passer à ta boucle l'id_auteur concerné que ce soit par
l'adresse http, par un contexte (l'auteur d'un article), etc..., sinon
effectivement il va aller te chercher tous les auteurs.

Je ne connais pas le plugin authentification donc je ne sais pas
comment aller chercher l'information. Tu peux toujours aller
rechercher dans Spip-BB qui fait ce genre de chose également.

--
** Bienvenue dans le Monde de Miss Mopi : http://www.missmopi.net/ **
** A l'Ombre des Eternels : http://www.ombreternel.org/ **

Si je pose la question c'est que justement j'ai cherché :

Quand on fait une boucle auteur, c'est par rapport à un id, un nom ou un article.

Or dans ce cas c'est par rapport à rien, c'est juste la personne qui s'est logué en court... c'est là que ce n'est pas évident

Josh Parker wrote:

Or dans ce cas c'est par rapport à rien, c'est juste la personne qui s'est logué en court... c'est là que ce n'est pas évident

J'utilise

<?php if (($auteur_session['statut']=="0minirezo")||($auteur_session['statut']=="1comite")) { ?>
<h2>Bonjour <?php echo $auteur_session['nom']; ?></h2>
<div class="menu">
<ul class="general">
         <li class="menu-item"><a href="/ecrire">Acc&egrave;s r&eacute;dacteur</a></li>
         <li class="menu-item"><a href="membres.php">Page membres</a></li>
         <li class="menu-item"><a href='[(#URL_LOGOUT{spip.php})]'>D&eacute;connexion</a></li>
</ul>
</div>

<?php } else { ?>
<h2>Acc&egrave;s Membres</h2>
<div class="menu">
<ul class="general">
         <li class="menu-item">#LOGIN_PUBLIC</li>
</ul>
</div>
<?php } ?>

Je crois que le statut visiteur est "6visiteur" (vois la table auteurs si besoin). Si tu veux dire "Bonjour X." quel que soit le statut, ceci devrait suffire:

<?php if ($auteur_session) { ?>
<h2>Bonjour <?php echo $auteur_session['nom']; ?></h2>
<?php } ?>

Suske

Suske a pensé très fort :

Josh Parker wrote:

Or dans ce cas c'est par rapport à rien, c'est juste la personne qui s'est logué en court... c'est là que ce n'est pas évident

J'utilise

<?php if (($auteur_session['statut']=="0minirezo")||($auteur_session['statut']=="1comite")) { ?>
<h2>Bonjour <?php echo $auteur_session['nom']; ?></h2>
<div class="menu">
<ul class="general">
         <li class="menu-item"><a href="/ecrire">Acc&egrave;s r&eacute;dacteur</a></li>
         <li class="menu-item"><a href="membres.php">Page membres</a></li>
         <li class="menu-item"><a href='[(#URL_LOGOUT{spip.php})]'>D&eacute;connexion</a></li>
</ul>
</div>

<?php } else { ?>
<h2>Acc&egrave;s Membres</h2>
<div class="menu">
<ul class="general">
         <li class="menu-item">#LOGIN_PUBLIC</li>
</ul>
</div>
<?php } ?>

Je crois que le statut visiteur est "6visiteur" (vois la table auteurs si besoin). Si tu veux dire "Bonjour X." quel que soit le statut, ceci devrait suffire:

<?php if ($auteur_session) { ?>
<h2>Bonjour <?php echo $auteur_session['nom']; ?></h2>
<?php } ?>

Suske

Merci beaucoup je vais tester... Je n'avais pas imaginer un script avec du php comme ça, content de voir que je n'ai pas posté pour rien, je n'aurais jamais trouvé ça !

Josh Parker wrote:

Merci beaucoup je vais tester... Je n'avais pas imaginer un script avec du php comme ça, content de voir que je n'ai pas posté pour rien, je n'aurais jamais trouvé ça !

C'est une variation sur base d'un article de la doc:

Le php dans les squelettes c'est pas trop recommandé mais bon, jusqu'ici j'ai pas trouvé mieux. Note que le comportement est en apparence parfois bizarre, en fonction des caches de navigateur, de proxy, etc. Mais si tu as plusieurs navigateurs ou ordinateurs sous la main, tu verras que c'est OK.

Suske

Suske a écrit :

Josh Parker wrote:

Merci beaucoup je vais tester... Je n'avais pas imaginer un script avec du php comme ça, content de voir que je n'ai pas posté pour rien, je n'aurais jamais trouvé ça !

C'est une variation sur base d'un article de la doc:

Les formulaires - SPIP

Le php dans les squelettes c'est pas trop recommandé mais bon, jusqu'ici j'ai pas trouvé mieux. Note que le comportement est en apparence parfois bizarre, en fonction des caches de navigateur, de proxy, etc. Mais si tu as plusieurs navigateurs ou ordinateurs sous la main, tu verras que c'est OK.

Suske

un solution en spip, avec 2 balises perso
ici http://www.medicalistes.org/~maxime-plus/squelettes/droit.html

[(#CACHE{0})]
[(#DROITS|<{7}|?{' ',''})
[<p><strong> Bonjour (#IDENTITE) </strong></p>]
<INCLURE{fond='access'}>
]

[(#DROITS|>{'6'}|?{' ',''})
  <INCLURE{fond='connexion'}{espace=public}>
  ]

le cache doit être nul ou très petit pour ne pas mettre en cache le résultat.
il faut associer à droit.html, le fichier droits_fonctions.php dans lequel sont définies les balises

<?php
function calcul_DROITS() {
    //pour ne pas modifier le coeur de spip il faudra aller faire une
    //requet sur la table adherent
    //on en profitera pour v?fier la validit?e sa date
    global $auteur_session;
    $cgfp_retour='';
    $cgfp_statut_loc=$auteur_session['statut'];
    if (strlen($cgfp_statut_loc)==0)
     $cgfp_retour= 10;
    if ((strlen($cgfp_statut_loc)>0) AND
(settype($cgfp_statut_loc,"integer"))) {
       switch($cgfp_statut_loc):
          case 0:
             $cgfp_retour= 0;
             break;
          case 1:
             $cgfp_retour= 1;
             break;
          case 5:
             $cgfp_retour= 10;
             break;
          case 6:
             $cgfp_retour= 6;
             break;
          default:
             $cgfp_retour= 10;
             break;
       endswitch;
    }
    return $cgfp_retour;
}

function balise_DROITS ($p){
     $p->code="calcul_DROITS()";
     $p->statut = 'html';
   return $p;
}
function calcul_IDENTITE (){
   global $auteur_session;
   $nom_connecte = $auteur_session['nom'];
   return $nom_connecte;
}
function balise_IDENTITE($p){
     $p->code="calcul_IDENTITE()";
     $p->statut = 'html';
   return $p;
}
?>

rpapa wrote:

un solution en spip, avec 2 balises perso
ici http://www.medicalistes.org/~maxime-plus/squelettes/droit.html

Génial ! Je tenterai ça "au plus vite"... Mais je suppose que ça ne marche que sur la 1.9B3 ?

Moi je viens seulement d'y passer, j'ai oublié de signer come il faut :wink:

Suske-ki-passe-seulement-à-la-1.9-et-maitrise-presque-rien

============
[(#CACHE{0})]
[(#DROITS|<{7}|?{' ',''})
[<p><strong> Bonjour (#IDENTITE) </strong></p>]
<INCLURE{fond='access'}>
]

[(#DROITS|>{'6'}|?{' ',''})
  <INCLURE{fond='connexion'}{espace=public}>
  ]

le cache doit être nul ou très petit pour ne pas mettre en cache le résultat.
il faut associer à droit.html, le fichier droits_fonctions.php dans lequel sont définies les balises

<?php
function calcul_DROITS() {
    //pour ne pas modifier le coeur de spip il faudra aller faire une
    //requet sur la table adherent
    //on en profitera pour v?fier la validit?e sa date
    global $auteur_session;
    $cgfp_retour='';
    $cgfp_statut_loc=$auteur_session['statut'];
    if (strlen($cgfp_statut_loc)==0)
     $cgfp_retour= 10;
    if ((strlen($cgfp_statut_loc)>0) AND
(settype($cgfp_statut_loc,"integer"))) {
       switch($cgfp_statut_loc):
          case 0:
             $cgfp_retour= 0;
             break;
          case 1:
             $cgfp_retour= 1;
             break;
          case 5:
             $cgfp_retour= 10;
             break;
          case 6:
             $cgfp_retour= 6;
             break;
          default:
             $cgfp_retour= 10;
             break;
       endswitch;
    }
    return $cgfp_retour;
}

function balise_DROITS ($p){
     $p->code="calcul_DROITS()";
     $p->statut = 'html';
   return $p;
}
function calcul_IDENTITE (){
   global $auteur_session;
   $nom_connecte = $auteur_session['nom'];
   return $nom_connecte;
}
function balise_IDENTITE($p){
     $p->code="calcul_IDENTITE()";
     $p->statut = 'html';
   return $p;
}
?>

Suske a écrit :

rpapa wrote:

un solution en spip, avec 2 balises perso
ici http://www.medicalistes.org/~maxime-plus/squelettes/droit.html

Génial ! Je tenterai ça "au plus vite"... Mais je suppose que ça ne marche que sur la 1.9B3 ?

le site http://www.medicalistes.org/~maxime-plus/ est en 1.9 entierement ré-écrit mais celui est en 1.83
http://cancer-familles.medicalistes.org/
avec le m^me code
http://cancer-familles.medicalistes.org/squelettes/droit.html

Moi je viens seulement d'y passer, j'ai oublié de signer come il faut :wink:

Suske-ki-passe-seulement-à-la-1.9-et-maitrise-presque-rien

============
[(#CACHE{0})]
[(#DROITS|<{7}|?{' ',''})
[<p><strong> Bonjour (#IDENTITE) </strong></p>]
<INCLURE{fond='access'}>
]

[(#DROITS|>{'6'}|?{' ',''})
  <INCLURE{fond='connexion'}{espace=public}>
  ]

le cache doit être nul ou très petit pour ne pas mettre en cache le résultat.
il faut associer à droit.html, le fichier droits_fonctions.php dans lequel sont définies les balises

<?php
function calcul_DROITS() {
    //pour ne pas modifier le coeur de spip il faudra aller faire une
    //requet sur la table adherent
    //on en profitera pour v?fier la validit?e sa date
    global $auteur_session;
    $cgfp_retour='';
    $cgfp_statut_loc=$auteur_session['statut'];
    if (strlen($cgfp_statut_loc)==0)
     $cgfp_retour= 10;
    if ((strlen($cgfp_statut_loc)>0) AND
(settype($cgfp_statut_loc,"integer"))) {
       switch($cgfp_statut_loc):
          case 0:
             $cgfp_retour= 0;
             break;
          case 1:
             $cgfp_retour= 1;
             break;
          case 5:
             $cgfp_retour= 10;
             break;
          case 6:
             $cgfp_retour= 6;
             break;
          default:
             $cgfp_retour= 10;
             break;
       endswitch;
    }
    return $cgfp_retour;
}

function balise_DROITS ($p){
     $p->code="calcul_DROITS()";
     $p->statut = 'html';
   return $p;
}
function calcul_IDENTITE (){
   global $auteur_session;
   $nom_connecte = $auteur_session['nom'];
   return $nom_connecte;
}
function balise_IDENTITE($p){
     $p->code="calcul_IDENTITE()";
     $p->statut = 'html';
   return $p;
}
?>

rpapa a écrit :

un solution en spip, avec 2 balises perso
ici http://www.medicalistes.org/~maxime-plus/squelettes/droit.html

[(#CACHE{0})]
[(#DROITS|<{7}|?{' ',''})
[<p><strong> Bonjour (#IDENTITE) </strong></p>]
<INCLURE{fond='access'}>
]

[(#DROITS|>{'6'}|?{' ',''})
  <INCLURE{fond='connexion'}{espace=public}>
  ]

le cache doit être nul ou très petit pour ne pas mettre en cache le résultat.
il faut associer à droit.html, le fichier droits_fonctions.php dans lequel sont définies les balises

Comme deja expliqué, cette solution n'est vraiment pas une bonne approche.

Il vaut mieux mettre du code PHP dans le squelette plutot que ca !

Si tu generes un cache de cette facon, il est valable pour tout le monde.

Pour aborder les acces restreints ou la personnalisation, il faut generer plusieurs caches differents en fonction du statut ou de l'id de l'utilisateur.

La, si mysql tombe en panne, le dernier cache généré sera renvoyé à tout le monde, donc si c'est un admin, hop, tout le monde admin !

C'est quand meme pas dur de faire un inclure :
<INCLURE(bloc_statut.php){bloc=toto}>

et dans bloc_statut.php :
<?php
//quelques tests de secu, ici ...
$fond=$contexte_inclus['bloc']

$contexte_inclus['statut']=$auteur_session['statut'];
include ("inc-public.php3");
?>

La, tu es sur que chaque statut utilisera un cache different.

@++

salut,

comme dit dans le titre, je m'interroge s'il est possible d'appliquer un filtre (j'ai tenté les abs_url, ...) ou si quelqu'un a l'idée d'une manip qui permettrait que la source de l'image créée par image_typo soit une adresse absolue et non relative, pour les curieux c'est parce que je veux utiliser ce filtre sur une newsletter et héberger les images sur le site donc.

merci

troOn

ah bien je crois que j'ai finalement trouvé ma réponse sur cette page Discuter chez rezo.net

donc le filtre à utiliser pour récupérer l'adresse de l'image est : fichier_seul

ca va me faciliter la vie youpiii

troOn

troOn a écrit :

salut,

comme dit dans le titre, je m'interroge s'il est possible d'appliquer un filtre (j'ai tenté les abs_url, ...) ou si quelqu'un a l'idée d'une manip qui permettrait que la source de l'image créée par image_typo soit une adresse absolue et non relative, pour les curieux c'est parce que je veux utiliser ce filtre sur une newsletter et héberger les images sur le site donc.

merci

troOn
_______________________________________________
liste spip
spip@rezo.net - désabonnement : spip-off@rezo.net
Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
Documentation de SPIP : http://www.spip.net/
irc://irc.freenode.net/spip
FAQ : http://www.spip-contrib.net/spikini/FaQ

bon finalement ce filtre semble avoir été supprimé depuis un an, je ne saisis pas comment faire, donc j'ai toujours besoin de vous, à l'aiiiiiiide :slight_smile:
je suis sur la version 1.9 beta3

troOn

troOn a écrit :

ah bien je crois que j'ai finalement trouvé ma réponse sur cette page Discuter chez rezo.net

donc le filtre à utiliser pour récupérer l'adresse de l'image est : fichier_seul

ca va me faciliter la vie youpiii

troOn

troOn a écrit :

salut,

comme dit dans le titre, je m'interroge s'il est possible d'appliquer un filtre (j'ai tenté les abs_url, ...) ou si quelqu'un a l'idée d'une manip qui permettrait que la source de l'image créée par image_typo soit une adresse absolue et non relative, pour les curieux c'est parce que je veux utiliser ce filtre sur une newsletter et héberger les images sur le site donc.

merci

troOn
_______________________________________________
liste spip
spip@rezo.net - désabonnement : spip-off@rezo.net
Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
Documentation de SPIP : http://www.spip.net/
irc://irc.freenode.net/spip
FAQ : http://www.spip-contrib.net/spikini/FaQ

_______________________________________________
liste spip
spip@rezo.net - désabonnement : spip-off@rezo.net
Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
Documentation de SPIP : http://www.spip.net/
irc://irc.freenode.net/spip
FAQ : http://www.spip-contrib.net/spikini/FaQ

troOn a écrit :

bon finalement ce filtre semble avoir été supprimé depuis un an, je ne saisis pas comment faire, donc j'ai toujours besoin de vous, à l'aiiiiiiide :slight_smile:
je suis sur la version 1.9 beta3

en 1.9 il y a 2 plugins sur spip-zone qui font des newsletter, regarde comment elles font, dans spip_liste, il y a un filtre :

function url_absolues($texte, $base='') {
  if (preg_match_all(',(<a[[:space:]]+[^<>]*href=["\']?)([^"\' ><[:space:]]+)([^<>]*>),ims',
  $texte, $liens, PREG_SET_ORDER)) {
    foreach ($liens as $lien) {
      if (substr($lien[2],0,1)!='#'){
        $abs = url_absolue($lien[2], $base);
        if ($abs <> $lien[2])
          $texte = str_replace($lien[0], $lien[1].$abs.$lien[3], $texte);
      }
    }
  }
  if (preg_match_all(',(<img[[:space:]]+[^<>]*src=["\']?)([^"\' ><[:space:]]+)([^<>]*>),ims',
  $texte, $liens, PREG_SET_ORDER)) {
    foreach ($liens as $lien) {
      $abs = url_absolue($lien[2], $base);
      if ($abs <> $lien[2])
        $texte = str_replace($lien[0], $lien[1].$abs.$lien[3], $texte);
    }
  }
  return $texte;
}
@++

Stephane LAURENT a écrit :

rpapa a écrit :

Comme deja expliqué, cette solution n'est vraiment pas une bonne approche.

Il vaut mieux mettre du code PHP dans le squelette plutot que ca !

Si tu generes un cache de cette facon, il est valable pour tout le monde.

je pensais qu'avec un cache de 0, je n'avis pas de cache!

Pour aborder les acces restreints ou la personnalisation, il faut generer plusieurs caches differents en fonction du statut ou de l'id de l'utilisateur.

La, si mysql tombe en panne, le dernier cache généré sera renvoyé à tout le monde, donc si c'est un admin, hop, tout le monde admin !

effectivement je n'avais pas pensé à la panne mysql!

C'est quand meme pas dur de faire un inclure :

en tout cas, vu le nombre de demande ce n'est pas aussi évident que ça!

<INCLURE(bloc_statut.php){bloc=toto}>

et dans bloc_statut.php :
<?php
//quelques tests de secu, ici ...
$fond=$contexte_inclus['bloc']

$contexte_inclus['statut']=$auteur_session['statut'];
include ("inc-public.php3");
?>

reprenons dans le cas de la 1.9b2

comment faire alors qu'il n'y a plus de .php?

rpapa a écrit :
>> Il vaut mieux mettre du code PHP dans le squelette plutot que ca !
> je pensais qu'avec un cache de 0, je n'avis pas de cache!

???
ben il faut bien compiler le squelette et l'executer (cad generer le fichier de cache correspondant) pour avoir le resultat ...

Mais de toutes facons, comme je le disais, il vaut mieux dans ce cas mettre du PHP dans le squelette.
Au moins
- le reste est mis en cache et tu peux donc exploiter ce cache
- le code est executer à chaque fois, mais c'est le but
- tu ne fais pas generer du code au compilo à chaque appel (puisqu'il le genere à chaque fois et qu'à chaque fois c'est le meme ... autant ecrire direct le resultat, non ?)

L'approche un cache par statut, c'est quand meme mieux.

Pour le cache "personnel" (quand tu met l'id de l'utilisateur dans le contexte), c'est plus discutable, mais j'ai pas mal de cas ou c'est interessant.

en tout cas, vu le nombre de demande ce n'est pas aussi évident que ça!

<INCLURE(bloc_statut.php){bloc=toto}>

et dans bloc_statut.php :
<?php
//quelques tests de secu, ici ...
$fond=$contexte_inclus['bloc']

$contexte_inclus['statut']=$auteur_session['statut'];
include ("inc-public.php3");
?>

reprenons dans le cas de la 1.9b2

comment faire alors qu'il n'y a plus de .php?

si ca marche encore.
Si tu ne passes pas de fichier à l'inclure, il utilise spip.php (ex page.php).
Si tu passes un fichier, il ira le chercher dans le path.
Les differents blocs d'inclusions peuvent donc etre mis dans /squelette (et si possible, un petit .htaccess empeche l'acces direct.

Au fait, il vaut mieux choisir un autre nom que statut et id_auteur (plutot session_statut et session_id_auteur) pour eviter les embrouilles avec des champs spip.

@++