Skip to content

Commit

Permalink
Merge 6700dfd into 857a566
Browse files Browse the repository at this point in the history
  • Loading branch information
jean committed Oct 24, 2013
2 parents 857a566 + 6700dfd commit 485a7e2
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 19 deletions.
13 changes: 13 additions & 0 deletions Products/CMFPlomino/PlominoDocument.py
Original file line number Diff line number Diff line change
Expand Up @@ -995,6 +995,17 @@ def __nonzero__(self):
addPlominoDocument = Factory(PlominoDocument)
addPlominoDocument.__name__ = "addPlominoDocument"

def getTemporaryDocument(db, form, REQUEST, doc=None, validation_mode=False):
if hasattr(doc, 'real_id'):
return doc
else:
target = TemporaryDocument(
db,
form,
REQUEST,
validation_mode=validation_mode).__of__(db)
return target

class TemporaryDocument(PlominoDocument):

security = ClassSecurityInfo()
Expand All @@ -1006,6 +1017,7 @@ def __init__(self, parent, form, REQUEST, real_doc=None, validation_mode=False):
self.items = PersistentDict(real_doc.items)
self.setItem('Form', form.getFormName())
self.real_id = real_doc.id
form.validateInputs(REQUEST, self)
form.readInputs(self, REQUEST, validation_mode=validation_mode)
else:
self.items = {}
Expand All @@ -1024,6 +1036,7 @@ def __init__(self, parent, form, REQUEST, real_doc=None, validation_mode=False):
for f in mapped_field_ids:
self.setItem(f.strip(), rowdata[mapped_field_ids.index(f)])
else:
form.validateInputs(REQUEST, self)
form.readInputs(self, REQUEST, validation_mode=validation_mode)


Expand Down
41 changes: 22 additions & 19 deletions Products/CMFPlomino/PlominoForm.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@

# Plomino
from exceptions import PlominoScriptException
from PlominoDocument import TemporaryDocument
from PlominoDocument import getTemporaryDocument, TemporaryDocument
from Products.CMFCore.utils import getToolByName
from Products.CMFPlomino.config import *
from Products.CMFPlomino.browser import PlominoMessageFactory as _
Expand Down Expand Up @@ -864,16 +864,17 @@ def hasDynamicHidewhen(self):
return False

security.declareProtected(READ_PERMISSION, 'getHidewhenAsJSON')
def getHidewhenAsJSON(self, REQUEST, parent_form=None, validation_mode=False):
def getHidewhenAsJSON(self, REQUEST, parent_form=None, doc=None, validation_mode=False):
""" Return a JSON object to dynamically show or hide hidewhens
(works only with isDynamicHidewhen)
"""
db = self.getParentDatabase()
result = {}
target = TemporaryDocument(
target = getTemporaryDocument(
db,
parent_form or self,
REQUEST,
doc,
validation_mode=validation_mode).__of__(db)
for hidewhen in self.getHidewhenFormulas():
if getattr(hidewhen, 'isDynamicHidewhen', False):
Expand All @@ -888,7 +889,7 @@ def getHidewhenAsJSON(self, REQUEST, parent_form=None, validation_mode=False):
#if error, we hide anyway
isHidden = True
result[hidewhen.id] = isHidden
for subformname in self.getSubforms():
for subformname in self.getSubforms(doc=target):
form = db.getForm(subformname)
if not form:
msg = 'Missing subform: %s. Referenced on: %s' % (subformname, self.id)
Expand All @@ -897,7 +898,7 @@ def getHidewhenAsJSON(self, REQUEST, parent_form=None, validation_mode=False):
continue
form_hidewhens = json.loads(
form.getHidewhenAsJSON(REQUEST,
parent_form=parent_form or self,
parent_form=parent_form or self, doc=target,
validation_mode=validation_mode))
result.update(form_hidewhens)

Expand Down Expand Up @@ -1280,7 +1281,7 @@ def validation_errors(self, REQUEST):
def _get_js_hidden_fields(self, REQUEST, doc, validation_mode=False):
hidden_fields = []
hidewhens = json.loads(
self.getHidewhenAsJSON(REQUEST,
self.getHidewhenAsJSON(REQUEST, doc=doc,
validation_mode=validation_mode))
html_content = self._get_html_content()
for hidewhenName, doit in hidewhens.items():
Expand Down Expand Up @@ -1310,30 +1311,31 @@ def _get_js_hidden_fields(self, REQUEST, doc, validation_mode=False):
security.declarePublic('validateInputs')
def validateInputs(self, REQUEST, doc=None):
"""
"""
errors=[]
"""
db = self.getParentDatabase()
tmp = getTemporaryDocument(
db,
self,
REQUEST,
doc,
validation_mode=True).__of__(db)

fields = self.getFormFields(
includesubforms=True,
doc=doc,
# doc=doc,
doc=tmp,
applyhidewhen=True,
validation_mode=True,
request=REQUEST)
hidden_fields = self._get_js_hidden_fields(
REQUEST,
doc,
# doc,
tmp,
validation_mode=True)
fields = [field for field in fields
if field.getId() not in hidden_fields]

# Temp doc for validation
db = self.getParentDatabase()
tmp = TemporaryDocument(
db,
self,
REQUEST,
doc,
validation_mode=True).__of__(db)

errors=[]
for f in fields:
fieldname = f.id
fieldtype = f.getFieldType()
Expand Down Expand Up @@ -1367,6 +1369,7 @@ def validateInputs(self, REQUEST, doc=None):
'field', self.id, f.id,
'ValidationFormula']),
tmp,
# doc,
f.ValidationFormula)
except PlominoScriptException, e:
e.reportError('%s validation formula failed' % f.id)
Expand Down

0 comments on commit 485a7e2

Please sign in to comment.