interdire un titre existant pour un type d'objet

9 messages Options
Embed this post
Permalink
thomasvo

interdire un titre existant pour un type d'objet

Reply Threaded More More options
Print post
Permalink
bonjour,

je cherche à interdire à l'utilisateur de saisir un titre qui existe déjà pour
un objet de type 'Bookmark Folder' (add-on product tasty-bookmarks).

j'ai essayé de mettre des modifs dans le code de ATBookmarks.py (dans
plone_home/zinstance/products/ATBookmark/) mais je ne constate aucun effet
sur l'utilisation...

quelqu'un aurait-il une idée de l'endroit (fichier dans le fs, dans la
zmi,...) où je pourrais faire cette modification ?

merci beaucoup,

ps: plone v3.1 (RC) et tasty bookmarks v1.7.2

--
Thomas van Oudenhove
PraKsys - <http://www.praksys.org>

_______________________________________________
Plone-FR mailing list
[hidden email]
http://lists.plone.org/mailman/listinfo/plone-fr
Gilles Lenfant

Re: interdire un titre existant pour un type d'objet

Reply Threaded More More options
Print post
Permalink

Le 6 mai 08 à 16:35, Thomas van Oudenhove a écrit :

> bonjour,
>
> je cherche à interdire à l'utilisateur de saisir un titre qui existe  
> déjà pour
> un objet de type 'Bookmark Folder' (add-on product tasty-bookmarks).
>
> j'ai essayé de mettre des modifs dans le code de ATBookmarks.py (dans
> plone_home/zinstance/products/ATBookmark/) mais je ne constate aucun  
> effet
> sur l'utilisation...
>
> quelqu'un aurait-il une idée de l'endroit (fichier dans le fs, dans la
> zmi,...) où je pourrais faire cette modification ?

Tant qu'à modifier le code d'un composant existant, ajouter la méthode  
"post_validate" dans le type de contenu. Voir la signature de la dite  
méthode dans Products/Archetypes/BaseObject.py

Il suffit d'enrichir dans cette méthode le dico "errors" avec la clé  
"title" en cas de doublon. Ex. errors["title"] = "Duplicated title :o("

>
>
> merci beaucoup,
>
> ps: plone v3.1 (RC) et tasty bookmarks v1.7.2
>
> --
> Thomas van Oudenhove
> PraKsys - <http://www.praksys.org>
>
> _______________________________________________
> Plone-FR mailing list
> [hidden email]
> http://lists.plone.org/mailman/listinfo/plone-fr

--
Gilles Lenfant
INGENIWEB (TM) - SAS 50000 Euros - RC B 438 725 632
Bureaux de la Colline
1 rue Royal
92210 Saint Cloud
web : www.ingeniweb.com - « les Services Web Ingénieux »






_______________________________________________
Plone-FR mailing list
[hidden email]
http://lists.plone.org/mailman/listinfo/plone-fr
michaellaunay

Re: interdire un titre existant pour un type d'objet

Reply Threaded More More options
Print post
Permalink
In reply to this post by thomasvo
Bonjour,
Bonjour vous devez modifier le validor associé à title dans le schema
ex :
schema['title'].validators = list(tuple(schema['title'].validators) +
[monInstanceDeValidator])

Ou ajouter une fonction post_validate dans la classe

ex pour une classe s'appelant EPRIVR_Workspace et ayant pour domaine
extranetprivr j'ai ajouté dans EPRIVR_Workspace.py

security.declarePublic('post_validate')
def post_validate(self,REQUEST,errors):
    """
    Check if a workspace with same title already exist
    """
    if not REQUEST or not REQUEST.has_key('title') :
        return
    title = REQUEST['title']
    parent = self.getParentNode()
    for w in parent.objectValues(('EPRIVR_Workspace',)) :
        if w != self and w.Title() == title :
            errors['title'] =
self.translate('error_title_already_in_use', domain='extranetprivr')
            break

Cordialement
--
Michaël Launay
Gérant d'Ecréall
24, rue des Pâquerettes
59155 Faches Thumesnil
tél : 09 50 88 00 07
mob : 06 16 85 91 12
Fax : 09 56 88 00 07

Le mardi 06 mai 2008 à 16:35 +0200, Thomas van Oudenhove a écrit :

> bonjour,
>
> je cherche à interdire à l'utilisateur de saisir un titre qui existe déjà pour
> un objet de type 'Bookmark Folder' (add-on product tasty-bookmarks).
>
> j'ai essayé de mettre des modifs dans le code de ATBookmarks.py (dans
> plone_home/zinstance/products/ATBookmark/) mais je ne constate aucun effet
> sur l'utilisation...
>
> quelqu'un aurait-il une idée de l'endroit (fichier dans le fs, dans la
> zmi,...) où je pourrais faire cette modification ?
>
> merci beaucoup,
>
> ps: plone v3.1 (RC) et tasty bookmarks v1.7.2
>



_______________________________________________
Plone-FR mailing list
[hidden email]
http://lists.plone.org/mailman/listinfo/plone-fr
thomasvo

Re: interdire un titre existant pour un type d'objet

Reply Threaded More More options
Print post
Permalink
bonjour,

(merci à tous les deux pour vos réponses)

Le Tuesday 06 May 2008 17:04:00 Michaël Launay, vous avez écrit :
> Ou ajouter une fonction post_validate dans la classe

c'est ce que j'ai fait, et en effet, ça fait le boulot - sauf dans des cas un
peu tordus (par exemple, sur des titres avec des accents, des espaces,...)

en fait, c'est pas seulement le titre que je cherche à "filtrer", mais
le "short title", i.e. le dernier élément de l'url de l'objet...

mais vous m'avez mis sur la voie, merci beaucoup.

--
Thomas van Oudenhove
PraKsys - <http://www.praksys.org>


_______________________________________________
Plone-FR mailing list
[hidden email]
http://lists.plone.org/mailman/listinfo/plone-fr
michaellaunay

Re: interdire un titre existant pour un type d'objet

Reply Threaded More More options
Print post
Permalink
Bonjour,
On peut améliorer le code en utilisant la méthode
plone_utils.normalizeString(laChaineANormaliser) pour tester les chaînes
sans accents.
Cordialement
Michael Launay

Le mercredi 07 mai 2008 à 09:40 +0200, Thomas van Oudenhove a écrit :

> bonjour,
>
> (merci à tous les deux pour vos réponses)
>
> Le Tuesday 06 May 2008 17:04:00 Michaël Launay, vous avez écrit :
> > Ou ajouter une fonction post_validate dans la classe
>
> c'est ce que j'ai fait, et en effet, ça fait le boulot - sauf dans des cas un
> peu tordus (par exemple, sur des titres avec des accents, des espaces,...)
>
> en fait, c'est pas seulement le titre que je cherche à "filtrer", mais
> le "short title", i.e. le dernier élément de l'url de l'objet...
>
> mais vous m'avez mis sur la voie, merci beaucoup.
>
> _______________________________________________
> Plone-FR mailing list
> [hidden email]
> http://lists.plone.org/mailman/listinfo/plone-fr


_______________________________________________
Plone-FR mailing list
[hidden email]
http://lists.plone.org/mailman/listinfo/plone-fr
thomasvo

Re: interdire un titre existant pour un type d'objet

Reply Threaded More More options
Print post
Permalink
bonjour,

Le Wednesday 07 May 2008 09:56:06 Michaël Launay, vous avez écrit :
> On peut améliorer le code en utilisant la méthode
> plone_utils.normalizeString(laChaineANormaliser) pour tester les chaînes
> sans accents.

en effet, c'est parfait comme ça.

merci beaucoup,
cordialement,

--
Thomas van Oudenhove
PraKsys - <http://www.praksys.org>


_______________________________________________
Plone-FR mailing list
[hidden email]
http://lists.plone.org/mailman/listinfo/plone-fr
Gilles Lenfant

Re: interdire un titre existant pour un type d'objet

Reply Threaded More More options
Print post
Permalink
In reply to this post by thomasvo
Le 7 mai 08 à 09:40, Thomas van Oudenhove a écrit :

> bonjour,
>
> (merci à tous les deux pour vos réponses)
>
> Le Tuesday 06 May 2008 17:04:00 Michaël Launay, vous avez écrit :
>> Ou ajouter une fonction post_validate dans la classe
>
> c'est ce que j'ai fait, et en effet, ça fait le boulot - sauf dans  
> des cas un
> peu tordus (par exemple, sur des titres avec des accents, des  
> espaces,...)
>
> en fait, c'est pas seulement le titre que je cherche à "filtrer", mais
> le "short title", i.e. le dernier élément de l'url de l'objet...

Hmmm, normalement, ajouter l'attribut "_at_rename_after_creation"  
suffit dans ce cas. La magie d'Archetypes fait le reste  
(transformation du titre en id "parlant" et gestion des éventuels  
doublons).

class MonType(BaseContent):
        ...
        _at_rename_after_creation = True
        ...

>
>
> mais vous m'avez mis sur la voie, merci beaucoup.
>
> --
> Thomas van Oudenhove
> PraKsys - <http://www.praksys.org>
>
> _______________________________________________
> Plone-FR mailing list
> [hidden email]
> http://lists.plone.org/mailman/listinfo/plone-fr

--
Gilles Lenfant
INGENIWEB (TM) - SAS 50000 Euros - RC B 438 725 632
Bureaux de la Colline
1 rue Royal
92210 Saint Cloud
web : www.ingeniweb.com - « les Services Web Ingénieux »


_______________________________________________
Plone-FR mailing list
[hidden email]
http://lists.plone.org/mailman/listinfo/plone-fr
Frédéric Dupré

Re: interdire un titre existant pour un type d'objet

Reply Threaded More More options
Print post
Permalink
Salut,

J'ai eu à peu près le même cas, dans un autre contexte ... C'est un
besoin réel.

pour moi voyons plus large, un des manques de la zodb est l'absence de
clé unique.

Perso j'aurais plutôt penser à un validateur "uniqueKey" (si possible
réutilisable pour créer un validateur plus fin correspondant au attentes
du end-user) afin que cela puisse être utilisé dans le schema. J'avais
penser la chose en utilisant le catalog...

Par contre, je ne voit pas du tout dans la chose dans le  post-validate ...

D'accord j'ai un petit peu l'esprit de contradiction ;)

A++ sur le fil

Gilles Lenfant a écrit :

> Le 7 mai 08 à 09:40, Thomas van Oudenhove a écrit :
>
>> bonjour,
>>
>> (merci à tous les deux pour vos réponses)
>>
>> Le Tuesday 06 May 2008 17:04:00 Michaël Launay, vous avez écrit :
>>> Ou ajouter une fonction post_validate dans la classe
>>
>> c'est ce que j'ai fait, et en effet, ça fait le boulot - sauf dans
>> des cas un
>> peu tordus (par exemple, sur des titres avec des accents, des
>> espaces,...)
>>
>> en fait, c'est pas seulement le titre que je cherche à "filtrer", mais
>> le "short title", i.e. le dernier élément de l'url de l'objet...
>
> Hmmm, normalement, ajouter l'attribut "_at_rename_after_creation"
> suffit dans ce cas. La magie d'Archetypes fait le reste
> (transformation du titre en id "parlant" et gestion des éventuels
> doublons).
>
> class MonType(BaseContent):
>     ...
>     _at_rename_after_creation = True
>     ...
>
>>
>>
>> mais vous m'avez mis sur la voie, merci beaucoup.
>>
>> --
>> Thomas van Oudenhove
>> PraKsys - <http://www.praksys.org>
>>
>> _______________________________________________
>> Plone-FR mailing list
>> [hidden email]
>> http://lists.plone.org/mailman/listinfo/plone-fr
>


_______________________________________________
Plone-FR mailing list
[hidden email]
http://lists.plone.org/mailman/listinfo/plone-fr
Alexandre Garel

Re: interdire un titre existant pour un type d'objet

Reply Threaded More More options
Print post
Permalink
Frédéric Dupré a écrit :

> Salut,
>
> J'ai eu à peu près le même cas, dans un autre contexte ... C'est un
> besoin réel.
>
> pour moi voyons plus large, un des manques de la zodb est l'absence de
> clé unique.
>
> Perso j'aurais plutôt penser à un validateur "uniqueKey" (si possible
> réutilisable pour créer un validateur plus fin correspondant au attentes
> du end-user) afin que cela puisse être utilisé dans le schema. J'avais
> penser la chose en utilisant le catalog...
>
> Par contre, je ne voit pas du tout dans la chose dans le  post-validate ...
>
> D'accord j'ai un petit peu l'esprit de contradiction ;)
>  
Pour info les tools utilisent "__replaceable__ = UNIQUE" (cf.
UniqueObject dans CMFCore/utils.py) pour éviter d'être remplacés dans la
hiérarchie, et c'est un fonctionnalité de OFS (cf. checkValidId dans
OFS/ObjectManager.py)

A propos de "id" unique, archetype fait effectivement un contrôle mais
pour le dossier courant dans rename_after_creation (cf. _findUniqueId
dans Archetypes/BaseObject.py) et là vous verrez que quand il calcul
deux fois le même identifiant il essaye ensuite d'ajouter, -1, -2 etc...
mais ne tentera que trois fois :-/

Mes 2 cents,

Alex

--
Alexandre Garel - [hidden email]
Pilot Systems - 9, rue Desargues - 75011 Paris
Tel : +33 1 44 53 05 55 - http://www.pilotsystems.net
Hébergement Zope et Plone gratuit - http://www.objectis.org


_______________________________________________
Plone-FR mailing list
[hidden email]
http://lists.plone.org/mailman/listinfo/plone-fr