Ejemplo n.º 1
0
 def getFormFields(self,
                   includesubforms=False,
                   doc=None,
                   applyhidewhen=False):
     """get fields
     """
     fieldlist = self.objectValues(spec='PlominoField')
     result = [f for f in fieldlist]
     if applyhidewhen:
         doc = doc or TemporaryDocument(self.getParentDatabase(), self,
                                        self.REQUEST)
         layout = self.applyHideWhen(doc)
         result = [
             f for f in result
             if """<span class="plominoFieldClass">%s</span>""" %
             f.id in layout
         ]
     result.sort(key=lambda elt: elt.id.lower())
     if includesubforms:
         subformsseen = []
         for subformname in self.getSubforms(doc, applyhidewhen):
             if subformname in subformsseen:
                 continue
             subform = self.getParentDatabase().getForm(subformname)
             if subform:
                 result = result + subform.getFormFields(
                     includesubforms=True,
                     doc=doc,
                     applyhidewhen=applyhidewhen)
             subformsseen.append(subformname)
     return result
Ejemplo n.º 2
0
    def getSubforms(self, doc=None, applyhidewhen=True):
        """return the names of the subforms embedded in the form
        """
        if applyhidewhen:
            if doc == None and hasattr(self, 'REQUEST'):
                doc = TemporaryDocument(self.getParentDatabase(), self,
                                        self.REQUEST)
            html_content = self.applyHideWhen(doc)
        else:
            html_content = self._get_html_content()

        r = re.compile('<span class="plominoSubformClass">([^<]+)</span>')
        return [i.strip() for i in r.findall(html_content)]
Ejemplo n.º 3
0
 def _has_fieldtypes(self, types):
     "Tyeps is an array of strings. Check if any of those types is present"
     tmp = None
     if hasattr(self, 'REQUEST'):
         # hideWhens need a TemporaryDocument
         tmp = TemporaryDocument(self.getParentDatabase(), self,
                                 self.REQUEST)
     fields = self.getFormFields(includesubforms=True,
                                 doc=tmp,
                                 applyhidewhen=True)
     for f in fields:
         if f.getFieldType() in types:
             return True
     return False
Ejemplo n.º 4
0
    def validateInputs(self, REQUEST, doc=None):
        """
        """
        errors = []
        fields = self.getFormFields(includesubforms=True,
                                    doc=doc,
                                    applyhidewhen=True)
        hidden_fields = self._get_js_hidden_fields(REQUEST, doc)
        fields = [
            field for field in fields if field.getId() not in hidden_fields
        ]
        for f in fields:
            fieldname = f.id
            fieldtype = f.getFieldType()
            submittedValue = REQUEST.get(fieldname)

            # STEP 1: check mandatory fields
            if not submittedValue:
                if f.getMandatory() == True:
                    if fieldtype == "ATTACHMENT" and doc:
                        existing_files = doc.getItem(fieldname)
                        if not existing_files:
                            errors.append(
                                f.Title() + " " +
                                PlominoTranslate("is mandatory", self))
                    else:
                        errors.append(f.Title() + " " +
                                      PlominoTranslate("is mandatory", self))
            else:
                # STEP 2: check data types
                errors = errors + f.validateFormat(submittedValue)

        if len(errors) == 0:
            # STEP 3: check validation formula
            tmp = TemporaryDocument(self.getParentDatabase(), self, REQUEST,
                                    doc)
            for f in fields:
                formula = f.getValidationFormula()
                if not formula == '':
                    s = ''
                    try:
                        s = self.runFormulaScript(
                            "field_" + self.id + "_" + f.id +
                            "_ValidationFormula", tmp, f.ValidationFormula)
                    except PlominoScriptException, e:
                        e.reportError('%s validation formula failed' % f.id)
                    if not s == '':
                        errors.append(s)
Ejemplo n.º 5
0
 def getHidewhenAsJSON(self, REQUEST):
     """Return a JSON object to dynamically show or hide hidewhens (works only with isDynamicHidewhen)
     """
     result = {}
     target = TemporaryDocument(self.getParentDatabase(), self, REQUEST)
     for hidewhen in self.getHidewhenFormulas():
         if getattr(hidewhen, 'isDynamicHidewhen', False):
             try:
                 isHidden = self.runFormulaScript(
                     "hidewhen_" + self.id + "_" + hidewhen.id + "_formula",
                     target, hidewhen.Formula)
             except PlominoScriptException, e:
                 e.reportError('%s hide-when formula failed' % hidewhen.id)
                 #if error, we hide anyway
                 isHidden = True
             result[hidewhen.id] = isHidden
Ejemplo n.º 6
0
    def createDocument(self, REQUEST):
        """create a document using the forms submitted content
        """
        db = self.getParentDatabase()

        is_childform = False
        parent_field = REQUEST.get("Plomino_Parent_Field", None)
        parent_form = REQUEST.get("Plomino_Parent_Form", None)

        # Check for None: the request might yield an empty string.
        # TODO: try not to put misleading Plomino_* fields on the request.
        if parent_field is not None:
            is_childform = True

        # validate submitted values
        errors = self.validateInputs(REQUEST)
        if len(errors) > 0:
            if is_childform:
                return """<html><body><span id="plomino_child_errors">%s</span></body></html>""" % " - ".join(
                    errors)
            return self.notifyErrors(errors)

        # if child form
        if is_childform:
            tmp = TemporaryDocument(self.getParentDatabase(), self, REQUEST)
            tmp.setItem("Plomino_Parent_Field", parent_field)
            tmp.setItem("Plomino_Parent_Form", parent_form)
            tmp.setItem(parent_field + "_itemnames", [
                f.getId() for f in self.getFormFields()
                if not f.getFieldMode() == 'DISPLAY'
            ])
            return self.ChildForm(temp_doc=tmp)

        doc = db.createDocument()
        doc.setItem('Form', self.getFormName())

        # execute the onCreateDocument code of the form
        valid = ''
        try:
            valid = self.runFormulaScript("form_" + self.id + "_oncreate", doc,
                                          self.onCreateDocument)
        except PlominoScriptException, e:
            e.reportError('Document is created, but onCreate formula failed')
Ejemplo n.º 7
0
        """
        # execute the beforeCreateDocument code of the form
        invalid = False
        if hasattr(self, 'beforeCreateDocument'
                   ) and self.beforeCreateDocument is not None:
            try:
                invalid = self.runFormulaScript(
                    "form_" + self.id + "_beforecreate", self,
                    self.beforeCreateDocument)
            except PlominoScriptException, e:
                e.reportError('beforeCreate formula failed')

        tmp = None
        if hasattr(self, 'REQUEST'):
            # hideWhens need a TemporaryDocument
            tmp = TemporaryDocument(self.getParentDatabase(), self,
                                    self.REQUEST)
        if (not invalid) or self.hasDesignPermission(self):
            return self.displayDocument(tmp,
                                        editmode=True,
                                        creation=True,
                                        request=request)
        else:
            self.REQUEST.RESPONSE.redirect(
                self.getParentDatabase().absolute_url() +
                "/ErrorMessages?disable_border=1&error=" + invalid)

    security.declarePublic('at_post_edit_script')

    def at_post_edit_script(self):
        """clean up the layout before saving
        """