From 1c9a73b6de0168d4af977f676371d2d93326dfe0 Mon Sep 17 00:00:00 2001 From: Massimo Di Pierro Date: Wed, 2 May 2012 16:08:40 -0500 Subject: [PATCH] fixed onvalidation for SQLFORM, issue 778, thanks Carlos Galindo --- VERSION | 2 +- gluon/html.py | 4 ++++ gluon/sqlhtml.py | 36 +++++++++++++++++++----------------- 3 files changed, 24 insertions(+), 18 deletions(-) diff --git a/VERSION b/VERSION index 15a7f8cf..486d9ed8 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -Version 1.99.7 (2012-05-02 16:03:22) dev +Version 1.99.7 (2012-05-02 16:08:31) dev diff --git a/gluon/html.py b/gluon/html.py index 501bb441..4d513e95 100644 --- a/gluon/html.py +++ b/gluon/html.py @@ -1812,6 +1812,9 @@ class FORM(DIV): self.latest = Storage() self.accepted = None # none for not submitted + def assert_status(self, status, request_vars): + return status + def accepts( self, request_vars, @@ -1851,6 +1854,7 @@ class FORM(DIV): status = False self.record_changed = True status = self._traverse(status,hideerror) + status = self.assert_status(status, request_vars) if onvalidation: if isinstance(onvalidation, dict): onsuccess = onvalidation.get('onsuccess', None) diff --git a/gluon/sqlhtml.py b/gluon/sqlhtml.py index 9c472188..55fd6f7e 100644 --- a/gluon/sqlhtml.py +++ b/gluon/sqlhtml.py @@ -706,6 +706,25 @@ class SQLFORM(FORM): ID_LABEL_SUFFIX = '__label' ID_ROW_SUFFIX = '__row' + def assert_status(self, status, request_vars): + if not status and self.record and self.errors: + ### if there are errors in update mode + # and some errors refers to an already uploaded file + # delete error if + # - user not trying to upload a new file + # - there is existing file and user is not trying to delete it + # this is because removing the file may not pass validation + for key in self.errors.keys(): + if key in self.table \ + and self.table[key].type == 'upload' \ + and request_vars.get(key, None) in (None, '') \ + and self.record[key] \ + and not key + UploadWidget.ID_DELETE_SUFFIX in request_vars: + del self.errors[key] + if not self.errors: + status = True + return status + def __init__( self, table, @@ -1111,23 +1130,6 @@ class SQLFORM(FORM): hideerror=hideerror, ) - if not ret and self.record and self.errors: - ### if there are errors in update mode - # and some errors refers to an already uploaded file - # delete error if - # - user not trying to upload a new file - # - there is existing file and user is not trying to delete it - # this is because removing the file may not pass validation - for key in self.errors.keys(): - if key in self.table \ - and self.table[key].type == 'upload' \ - and request_vars.get(key, None) in (None, '') \ - and self.record[key] \ - and not key + UploadWidget.ID_DELETE_SUFFIX in request_vars: - del self.errors[key] - if not self.errors: - ret = True - self.deleted = \ request_vars.get(self.FIELDNAME_REQUEST_DELETE, False)