logo       

RE : RE : RE : RE : Ne pas afficher un champ d'un Schema (suite): msg#00389

web.zope.cps.general.french

Subject: RE : RE : RE : RE : Ne pas afficher un champ d'un Schema (suite)


Bonjour,

Je vous remercie de votre réponse qui m'aide bien.
Sans vouloir abuser, savez-vous s'il est possible également :
1) de tester si un document a tel ou tel etat ? Nous avons cherchés une
fonction du type has_state mais nous n'avons rien trouvé.
2) de mettre cette fonction sous forme de script dans ce même paramètre : "Hide
the widget if the given TAL expression returns true"

D'avance merci de votre aide,

Cordialement,


-------- Message d'origine--------
De: Florent Guillaume [mailto:fg-CQNGlVZ5l00AvxtiuMwx3w@xxxxxxxxxxxxxxxx]
Date: mer. 22/06/2005 18:24
À: Piton Marco
Cc: cps-users-fr-FQDHc1wsLCVb90+sfpvX0g@xxxxxxxxxxxxxxxx
Objet: Re: RE : RE : RE : [CPS-users-fr] Ne pas afficher un champ d'un Schema
(suite)

On 22 Jun 2005, at 10:10, Piton Marco wrote:
> Bonjour,
>
> Suite à l'aide de yannick Boyer, j'arrive bien à tester l'affichage
> des champs d'un layout en fonction de rôles ; le code TAL a
> indiquer dans le champ "Hide the widget if the given TAL expression
> returns true" (portal_layout/champ a afficher ou non) est du type :
> python: 'X' not in user.getRolesInContext(context) ou 'X' est un role.
> Si le user a le role 'X' le champ s'affiche bien.(l'expression
> renvoie 'False', et le champ n'est donc pas caché).
>
> J'ai ete plus loin, et j'ai permis l'affichage de champs, à quatre
> roles, sachant qu'un utilisateur peut avoir 0,un,deux,trois, ou
> quatre de ces rôles.
>
> J'ai pas mal galéré (je ne connais pas Python)

Il va falloir s'y mettre :)

> avant d'arriver à trouver le bout de code qui fonctionne (même si
> c'est simplissime mais bon...) :
>
> python: 'Rolex1' not in user.getRolesInContext(context) and
> 'Rolex2' not in user.getRolesInContext(context) and
> 'Rolex3' not in user.getRolesInContext(context) and
> 'Rolex4' not in user.getRolesInContext(context)
>
> 1) Mais pouvez-vous me dire s'il existe une expression Python plus
> simple que celle que j'ai trouvée ?
> Du type :
> ('Rolex1','Rolex2','Rolex3','Rolex4') not in user.getRolesInContext
> (context)
> ou du type :
> ('Rolex1' and 'Rolex2' and 'Rolex3' and 'Rolex4') not in
> user.getRolesInContext(context)
> Je ne suis pas arrivé à la trouver.

Le mieux est d'utiliser
python: not user.has_role(('Rolex1', 'Rolex2', 'Rolex3',
'Rolex4'), context)

sachant que si ici on passe plusieurs rôles à has_role, un OU logique
est fait.

>
> 2) Afin d'eviter de lister les differents roles, je pourrais
> egalement rechercher la presence non pas de roles, mais d'une sous-
> chaine de caracteres : comment alors coder l'expression ? (Dans le
> cas ci-dessus : tester la presence de la Chaine('Rolex') dans la
> liste des roles du user). Comment coder cette expression : Chaine
> ('Rolex') not in user.getRolesInContext(context) ?

Rien de simple, non, même si on peut trouver des expressions qui
marchent.

>
> 3) Existe t-il une doc sur les fonctions écrites en Python et
> utilisables ? Comment savoir par exemple que la fonction
> getRolesInContext(context) peut être employée et qu'elle a telle
> finalité ?

Il faut lire l'API de Zope, et celle de CMF.

Florent

--
Florent Guillaume, Nuxeo (Paris, France) CTO, Director of R&D
+33 1 40 33 71 59 http://nuxeo.com
fg-CQNGlVZ5l00AvxtiuMwx3w@xxxxxxxxxxxxxxxx





_______________________________________________
cps-users-fr
Adresse de la liste : cps-users-fr-FQDHc1wsLCVb90+sfpvX0g@xxxxxxxxxxxxxxxx
Gestion de l'abonnement : <http://lists.nuxeo.com/mailman/listinfo/cps-users-fr>
<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

News | FAQ | advertise