From 9f418439aaacf3a14e7c6515f4a8676dc2c73446 Mon Sep 17 00:00:00 2001 From: Gaetan Delannay Date: Sun, 6 Feb 2011 17:39:36 +0100 Subject: [PATCH] Added the possibility to customize the global message when validation fails. --- gen/plone25/descriptors.py | 4 ++++ gen/plone25/mixins/__init__.py | 8 +++++--- gen/plone25/wrappers/TranslationWrapper.py | 6 +++--- gen/plone25/wrappers/UserWrapper.py | 6 +++--- gen/plone25/wrappers/__init__.py | 2 +- 5 files changed, 16 insertions(+), 10 deletions(-) diff --git a/gen/plone25/descriptors.py b/gen/plone25/descriptors.py index d06ea4d..38780f5 100644 --- a/gen/plone25/descriptors.py +++ b/gen/plone25/descriptors.py @@ -372,6 +372,10 @@ class ClassDescriptor(appy.gen.descriptors.ClassDescriptor): def addField(self, fieldName, fieldType): '''Adds a new field to the Tool.''' exec "self.modelClass.%s = fieldType" % fieldName + if fieldName in self.modelClass._appy_attributes: + print 'Warning, field "%s" is already existing on class "%s"' % \ + (fieldName, self.modelClass.__name__) + return self.modelClass._appy_attributes.append(fieldName) self.orderedAttributes.append(fieldName) diff --git a/gen/plone25/mixins/__init__.py b/gen/plone25/mixins/__init__.py index 93e490b..2ee17ba 100644 --- a/gen/plone25/mixins/__init__.py +++ b/gen/plone25/mixins/__init__.py @@ -152,7 +152,7 @@ class BaseMixin: inter-field validation errors.''' obj = self.appy() if not hasattr(obj, 'validate'): return - obj.validate(values, errors) + msg = obj.validate(values, errors) # Those custom validation methods may have added fields in the given # p_errors object. Within this object, for every error message that is # not a string, we replace it with the standard validation error for the @@ -162,6 +162,7 @@ class BaseMixin: if not isinstance(resValue, basestring): resValue = self.translate('field_invalid') setattr(errors, key, resValue) + return msg def onUpdate(self): '''This method is executed when a user wants to update an object. @@ -205,10 +206,11 @@ class BaseMixin: return self.skyn.edit(self) # Trigger inter-field validation - self.interFieldValidation(errors, values) + msg = self.interFieldValidation(errors, values) + if not msg: msg = errorMessage if errors.__dict__: rq.set('errors', errors.__dict__) - self.plone_utils.addPortalMessage(errorMessage) + self.plone_utils.addPortalMessage(msg) return self.skyn.edit(self) # Before saving data, must we ask a confirmation by the user ? diff --git a/gen/plone25/wrappers/TranslationWrapper.py b/gen/plone25/wrappers/TranslationWrapper.py index 9ef7b98..fdc5792 100644 --- a/gen/plone25/wrappers/TranslationWrapper.py +++ b/gen/plone25/wrappers/TranslationWrapper.py @@ -64,13 +64,13 @@ class TranslationWrapper(AbstractWrapper): def validate(self, new, errors): # Call a custom "validate" if any. - self._callCustom('validate', new, errors) + return self._callCustom('validate', new, errors) def onEdit(self, created): # Call a custom "onEdit" if any. - self._callCustom('onEdit', created) + return self._callCustom('onEdit', created) def onDelete(self): # Call a custom "onDelete" if any. - self._callCustom('onDelete') + return self._callCustom('onDelete') # ------------------------------------------------------------------------------ diff --git a/gen/plone25/wrappers/UserWrapper.py b/gen/plone25/wrappers/UserWrapper.py index ce01475..463ed9d 100644 --- a/gen/plone25/wrappers/UserWrapper.py +++ b/gen/plone25/wrappers/UserWrapper.py @@ -52,7 +52,7 @@ class UserWrapper(AbstractWrapper): msg = self.translate(u'Passwords do not match.', domain='plone') errors.password1 = msg errors.password2 = msg - self._callCustom('validate', new, errors) + return self._callCustom('validate', new, errors) def onEdit(self, created): self.title = self.firstName + ' ' + self.name @@ -88,7 +88,7 @@ class UserWrapper(AbstractWrapper): # Remove the user if it was in the corresponding group if groupName in userGroups: group.removeMember(self.login) - self._callCustom('onEdit', created) + return self._callCustom('onEdit', created) def onDelete(self): '''Before deleting myself, I must delete the corresponding Plone @@ -97,5 +97,5 @@ class UserWrapper(AbstractWrapper): self.o.acl_users._doDelUser(self.login) self.log('Plone user "%s" deleted.' % self.login) # Call a custom "onDelete" if any. - self._callCustom('onDelete') + return self._callCustom('onDelete') # ------------------------------------------------------------------------------ diff --git a/gen/plone25/wrappers/__init__.py b/gen/plone25/wrappers/__init__.py index 8bbc811..97ea724 100644 --- a/gen/plone25/wrappers/__init__.py +++ b/gen/plone25/wrappers/__init__.py @@ -42,7 +42,7 @@ class AbstractWrapper: # There is a custom user class customUser = self.__class__.__bases__[-1] if customUser.__dict__.has_key(methodName): - customUser.__dict__[methodName](self, *args, **kwargs) + return customUser.__dict__[methodName](self, *args, **kwargs) def get_tool(self): return self.o.getTool().appy() tool = property(get_tool)