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:[EMAIL PROTECTED]
Date:   mer. 22/06/2005 18:24
À:      Piton Marco
Cc:     [email protected]
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   [EMAIL PROTECTED]





_______________________________________________
cps-users-fr 
Adresse de la liste : [email protected]
Gestion de l'abonnement : <http://lists.nuxeo.com/mailman/listinfo/cps-users-fr>

Répondre à