Ejemplo n.º 1
0
    def get_mail_body(self, fields, request, context):
        """Returns the mail-body with footer.
        """

        schema = get_fields(context)
        all_fields = [f for f in fields
                      # TODO
                      # if not (f.isLabel() or f.isFileField()) and not (getattr(self,
                      # 'showAll', True) and f.getServerSide())]
                      if not (INamedFile.providedBy(fields[f])) and not (getattr(self, 'showAll', True) and IFieldExtender(schema[f]).serverSide)
                      ]

        # which fields should we show?
        if getattr(self, 'showAll', True):
            live_fields = all_fields
        else:
            live_fields = [
                f for f in all_fields if f in getattr(self, 'showFields', ())]

        if not getattr(self, 'includeEmpties', True):
            all_fields = live_fields
            live_fields = [f for f in all_fields if fields[f]]
            for f in all_fields:
                value = fields[f]
                if value:
                    live_fields.append(f)

        #bare_fields = [schema[f] for f in live_fields]
        bare_fields = dict([(f, fields[f]) for f in live_fields])
        bodyfield = self.body_pt

        # pass both the bare_fields (fgFields only) and full fields.
        # bare_fields for compatability with older templates,
        # full fields to enable access to htmlValue
        replacer = DollarVarReplacer(fields).sub
        extra = {
            'data': bare_fields,
            'fields': dict([(i, j.title) for i, j in getFieldsInOrder(schema)]),
            'mailer': self,
            'body_pre': self.body_pre and replacer(self.body_pre),
            'body_post': self.body_post and replacer(self.body_post),
            'body_footer': self.body_footer and replacer(self.body_footer),
        }
        template = ZopePageTemplate(self.__name__)
        template.write(bodyfield)
        template = template.__of__(context)
        body = template.pt_render(extra_context=extra)

        # if isinstance(body, unicode):
            #body = body.encode("utf-8")

        #keyid = getattr(self, 'gpg_keyid', None)
        #encryption = gpg and keyid

        # if encryption:
            #bodygpg = gpg.encrypt(body, keyid)
            # if bodygpg.strip():
                #body = bodygpg

        return body
Ejemplo n.º 2
0
 def __init__(self, context, request):
     self.schema = get_fields(context)
     super(EasyFormFieldsView, self).__init__(
         self.schema,
         request,
         name='fields'
     )
 def __init__(self, context, request):
     self.schema = get_fields(context)
     super(EasyFormFieldsView, self).__init__(
         self.schema,
         request,
         name='fields'
     )
Ejemplo n.º 4
0
    def testFgFieldsDisplayOnly(self):
        """ test EasyForm's fgFields displayOnly option """

        ff = self.ff1
        fields = get_fields(ff)
        res = dict([(i, fields[i]) for i in fields])
        len1 = len(res)

        # TODO add label fields
        # ff.invokeFactory('FormLabelField', 'lf')
        # ff.invokeFactory('FormRichLabelField', 'rlf')

        # when displayOnly==True, fgFields should not return label fields
        self.assertEqual(len(get_fields(ff)), len1)
        # when displayOnly is omitted, all fields should be returned
        self.assertEqual(len(ff.fgFields()), len1 + 2)
Ejemplo n.º 5
0
    def testDeleteSavedFormInput(self):
        ''' test manage_deleteData functionality '''

        # set up saver
        self.createSaver()
        self.assertTrue('saver' in get_actions(self.ff1))
        saver = get_actions(self.ff1)['saver']

        # save a few rows
        fields = list(get_fields(self.ff1))
        saver.addDataRow(dict(zip(fields, ['one', 'two', 'three'])))
        saver.addDataRow(dict(zip(fields, ['four', 'five', 'six'])))
        saver.addDataRow(dict(zip(fields, ['seven', 'eight', 'nine'])))
        self.assertEqual(saver.itemsSaved(), 3)

        # saver.manage_deleteData(saver._storage.keys()[1])
        saver.delDataRow(saver.getSavedFormInputItems()[1][0])
        self.assertEqual(saver.itemsSaved(), 2)
        items = saver.getSavedFormInputItems()
        self.assertEqual(
            items[0][1],
            dict(zip(['id'] + fields, [items[0][0], 'one', 'two', 'three'])))
        self.assertEqual(
            items[1][1],
            dict(zip(['id'] + fields,
                     [items[1][0], 'seven', 'eight', 'nine'])))
    def testFgFieldsDisplayOnly(self):
        """ test EasyForm's fgFields displayOnly option """

        ff = self.ff1
        fields = get_fields(ff)
        res = dict([(i, fields[i]) for i in fields])
        len1 = len(res)

        # TODO add label fields
        # ff.invokeFactory('FormLabelField', 'lf')
        # ff.invokeFactory('FormRichLabelField', 'rlf')

        # when displayOnly==True, fgFields should not return label fields
        self.assertEqual(len(get_fields(ff)), len1)
        # when displayOnly is omitted, all fields should be returned
        self.assertEqual(len(ff.fgFields()), len1 + 2)
Ejemplo n.º 7
0
    def testSetSavedFormInput(self):
        ''' test setSavedFormInput functionality '''

        # set up saver
        self.createSaver()
        self.assertTrue('saver' in get_actions(self.ff1))
        saver = get_actions(self.ff1)['saver']
        self.assertEqual(saver.getSavedFormInputForEdit(), '')

        # save a row
        fields = list(get_fields(self.ff1))
        saver.addDataRow(dict(zip(fields, ['one', 'two', 'three'])))
        self.assertEqual(saver.itemsSaved(), 1)
        items = saver.getSavedFormInputItems()
        self.assertEqual(
            items[0][1], dict(zip(['id'] + fields, [items[0][0], 'one', 'two', 'three'])))
        self.assertEqual(saver.getSavedFormInputForEdit(), 'one,two,three\r\n')

        # save a couple of \n-delimited rows - \n eol
        saver.addDataRow(dict(zip(fields, ['four', 'five', 'six'])))
        self.assertEqual(saver.itemsSaved(), 2)
        items = saver.getSavedFormInputItems()
        self.assertEqual(
            items[0][1], dict(zip(['id'] + fields, [items[0][0], 'one', 'two', 'three'])))
        self.assertEqual(
            items[1][1], dict(zip(['id'] + fields, [items[1][0], 'four', 'five', 'six'])))
        self.assertEqual(
            saver.getSavedFormInputForEdit(), 'one,two,three\r\nfour,five,six\r\n')

        # save empty string
        saver.clearSavedFormInput()
        self.assertEqual(saver.itemsSaved(), 0)
        self.assertEqual(saver.getSavedFormInputForEdit(), '')
Ejemplo n.º 8
0
 def testActiveAdaptersNotDuplicatedOnFormCopy(self):
     # self.loginAsPortalOwner()
     copy = self.folder.manage_copyObjects('ff1')
     new_id = self.folder.manage_pasteObjects(copy)[0]['new_id']
     ff2 = getattr(self.folder, new_id)
     active_adapters = tuple(get_actions(ff2))
     self.assertEqual(active_adapters, ('mailer',))
     active_fields = tuple(get_fields(ff2))
     self.assertEqual(active_fields, ('replyto', 'topic', 'comments'))
    def test_basevalidator2(self):
        fields = get_fields(self.ff1)
        IFieldExtender(fields['comments']).validators = ["isInt", "isURL"]
        set_fields(self.ff1, fields)
        view = self.ff1.restrictedTraverse('view')
        form = view.form_instance
        form.update()

        data, errors = form.extractData()
        self.assertEqual(len(errors), 1)
    def test_talvalidator2(self):
        fields = get_fields(self.ff1)
        IFieldExtender(fields['comments']).TValidator = "python: !value"
        set_fields(self.ff1, fields)
        view = self.ff1.restrictedTraverse('view')
        form = view.form_instance
        form.update()

        data, errors = form.extractData()
        self.assertEqual(len(errors), 1)
Ejemplo n.º 11
0
    def test_basevalidator2(self):
        fields = get_fields(self.ff1)
        IFieldExtender(fields['comments']).validators = ["isInt", "isURL"]
        set_fields(self.ff1, fields)
        view = self.ff1.restrictedTraverse('view')
        form = view.form_instance
        form.update()

        data, errors = form.extractData()
        self.assertEqual(len(errors), 1)
Ejemplo n.º 12
0
    def test_talvalidator2(self):
        fields = get_fields(self.ff1)
        IFieldExtender(fields['comments']).TValidator = "python: !value"
        set_fields(self.ff1, fields)
        view = self.ff1.restrictedTraverse('view')
        form = view.form_instance
        form.update()

        data, errors = form.extractData()
        self.assertEqual(len(errors), 1)
Ejemplo n.º 13
0
    def testFgFieldsDisplayList(self):
        """ test EasyForm's fgFieldsDisplayList """

        # in v 1.0.2, this caused "'unicode' object has no attribute 'decode'"
        # w/ Plone 2.5.1 and Zope 2.8.7
        fields = get_fields(self.ff1)
        res = dict([(i, fields[i]) for i in fields])

        self.assertEqual(len(res), 3)
        self.assertEqual(res.keys()[0], 'replyto')
        self.assertEqual(res.values()[0]._type, unicode)
Ejemplo n.º 14
0
    def testFgFieldsDisplayList(self):
        """ test EasyForm's fgFieldsDisplayList """

        # in v 1.0.2, this caused "'unicode' object has no attribute 'decode'"
        # w/ Plone 2.5.1 and Zope 2.8.7
        fields = get_fields(self.ff1)
        res = dict([(i, fields[i]) for i in fields])

        self.assertEqual(len(res), 3)
        self.assertEqual(res.keys()[0], 'replyto')
        self.assertEqual(res.values()[0]._type, unicode)
Ejemplo n.º 15
0
    def test_basevalidator(self):
        fields = get_fields(self.ff1)
        IFieldExtender(fields['replyto']).validators = ["isEmail"]
        set_fields(self.ff1, fields)
        view = self.ff1.restrictedTraverse('view')
        form = view.form_instance
        form.update()

        data, errors = form.extractData()
        self.assertEqual(errors, ())
        self.assertEqual(data, FORM_DATA)
    def test_basevalidator(self):
        fields = get_fields(self.ff1)
        IFieldExtender(fields['replyto']).validators = ["isEmail"]
        set_fields(self.ff1, fields)
        view = self.ff1.restrictedTraverse('view')
        form = view.form_instance
        form.update()

        data, errors = form.extractData()
        self.assertEqual(errors, ())
        self.assertEqual(data, FORM_DATA)
Ejemplo n.º 17
0
 def getColumnNames(self):
     # """Returns a list of column names"""
     context = get_context(self)
     showFields = getattr(self, 'showFields', [])
     names = [
         name for name, field in getFieldsInOrder(get_fields(context))
         if not showFields or name in showFields
     ]
     if self.ExtraData:
         for f in self.ExtraData:
             names.append(f)
     return names
Ejemplo n.º 18
0
 def __call__(self, context):
     terms = []
     if hasattr(context, "interface"):
         form = get_context(context)
     elif hasattr(context, "fields_model"):
         form = context
     else:
         return SimpleVocabulary(terms)
     fields = getFieldsInOrder(get_fields(form))
     for name, field in fields:
         terms.append(SimpleVocabulary.createTerm(name, str(name), field.title))
     return SimpleVocabulary(terms)
Ejemplo n.º 19
0
 def getColumnTitles(self):
     # """Returns a list of column titles"""
     context = get_context(self)
     showFields = getattr(self, 'showFields', [])
     names = [
         field.title
         for name, field in getFieldsInOrder(get_fields(context))
         if not showFields or name in showFields
     ]
     if self.ExtraData:
         for f in self.ExtraData:
             names.append(IExtraData[f].title)
     return names
 def __call__(self, context):
     terms = []
     if hasattr(context, 'interface'):
         form = get_context(context)
     elif hasattr(context, 'fields_model'):
         form = context
     else:
         return SimpleVocabulary(terms)
     fields = getFieldsInOrder(get_fields(form))
     for name, field in fields:
         terms.append(
             SimpleVocabulary.createTerm(name, str(name), field.title))
     return SimpleVocabulary(terms)
Ejemplo n.º 21
0
 def getColumnNames(self):
     # """Returns a list of column names"""
     context = get_context(self)
     showFields = getattr(self, 'showFields', [])
     if showFields is None:
         showFields = []
     names = [
         name
         for name, field in getFieldsInOrder(get_fields(context))
         if not showFields or name in showFields
     ]
     if self.ExtraData:
         for f in self.ExtraData:
             names.append(f)
     return names
Ejemplo n.º 22
0
    def testEditSavedFormInput(self):
        ''' test manage_saveData functionality '''

        # set up saver
        self.createSaver()
        self.assertTrue('saver' in get_actions(self.ff1))
        saver = get_actions(self.ff1)['saver']

        # save a row
        fields = list(get_fields(self.ff1))
        #saver.savedFormInput = 'one,two,three'
        saver.addDataRow(dict(zip(fields, ['one', 'two', 'three'])))
        self.assertEqual(saver.itemsSaved(), 1)
        items = saver.getSavedFormInputItems()
        self.assertEqual(
            items[0][1], dict(zip(['id'] + fields, [items[0][0], 'one', 'two', 'three'])))
Ejemplo n.º 23
0
    def getColumnTitles(self):
        # """Returns a list of column titles"""
        context = get_context(self)
        showFields = getattr(self, 'showFields', [])
        if showFields is None:
            showFields = []

        names = [
            field.title
            for name, field in getFieldsInOrder(get_fields(context))
            if not showFields or name in showFields
        ]
        if self.ExtraData:
            for f in self.ExtraData:
                names.append(IExtraData[f].title)
        return names
Ejemplo n.º 24
0
    def testDeleteSavedFormInput(self):
        ''' test manage_deleteData functionality '''

        # set up saver
        self.createSaver()
        self.assertTrue('saver' in get_actions(self.ff1))
        saver = get_actions(self.ff1)['saver']

        # save a few rows
        fields = list(get_fields(self.ff1))
        saver.addDataRow(dict(zip(fields, ['one', 'two', 'three'])))
        saver.addDataRow(dict(zip(fields, ['four', 'five', 'six'])))
        saver.addDataRow(dict(zip(fields, ['seven', 'eight', 'nine'])))
        self.assertEqual(saver.itemsSaved(), 3)

        # saver.manage_deleteData(saver._storage.keys()[1])
        saver.delDataRow(saver.getSavedFormInputItems()[1][0])
        self.assertEqual(saver.itemsSaved(), 2)
        items = saver.getSavedFormInputItems()
        self.assertEqual(
            items[0][1], dict(zip(['id'] + fields, [items[0][0], 'one', 'two', 'three'])))
        self.assertEqual(
            items[1][1], dict(zip(['id'] + fields, [items[1][0], 'seven', 'eight', 'nine'])))
 def get_fields(self):
     return get_fields(get_context(self.field))
Ejemplo n.º 26
0
 def schema(self):
     return get_fields(self.context)
Ejemplo n.º 27
0
 def get_fields(self):
     return get_fields(get_context(self.field))
Ejemplo n.º 28
0
    def get_mail_body(self, fields, request, context):
        """Returns the mail-body with footer.
        """

        schema = get_fields(context)
        all_fields = [
            f for f in fields
            # TODO
            # if not (f.isLabel() or f.isFileField()) and not (getattr(self,
            # 'showAll', True) and f.getServerSide())]
            if not (self._is_file_data(fields[f]))
            and not (getattr(self, 'showAll', True)
                     and IFieldExtender(schema[f]).serverSide)
        ]

        # which fields should we show?
        if getattr(self, 'showAll', True):
            live_fields = all_fields
        else:
            showFields = getattr(self, 'showFields', [])
            if showFields is None:
                showFields = []

            live_fields = [f for f in all_fields if f in showFields]

        if not getattr(self, 'includeEmpties', True):
            all_fields = live_fields
            live_fields = [f for f in all_fields if fields[f]]
            for f in all_fields:
                value = fields[f]
                if value:
                    live_fields.append(f)

        # bare_fields = [schema[f] for f in live_fields]
        bare_fields = OrderedDict([(f, fields[f]) for f in live_fields])
        bodyfield = self.body_pt

        # pass both the bare_fields (fgFields only) and full fields.
        # bare_fields for compatability with older templates,
        # full fields to enable access to htmlValue
        replacer = DollarVarReplacer(fields).sub
        extra = {
            'data':
            bare_fields,
            'fields':
            OrderedDict([(i, j.title) for i, j in getFieldsInOrder(schema)]),
            'mailer':
            self,
            'body_pre':
            self.body_pre and replacer(self.body_pre),
            'body_post':
            self.body_post and replacer(self.body_post),
            'body_footer':
            self.body_footer and replacer(self.body_footer),
        }
        template = ZopePageTemplate(self.__name__)
        template.write(bodyfield)
        template = template.__of__(context)
        body = template.pt_render(extra_context=extra)

        # if isinstance(body, unicode):
        # body = body.encode("utf-8")

        # keyid = getattr(self, 'gpg_keyid', None)
        # encryption = gpg and keyid

        # if encryption:
        # bodygpg = gpg.encrypt(body, keyid)
        # if bodygpg.strip():
        # body = bodygpg

        return body
Ejemplo n.º 29
0
    def test_selectiveFieldMailing(self):
        """ Test selective inclusion of fields in the mailing """

        mailer = get_actions(self.ff1)['mailer']
        request = self.LoadRequestForm(
            topic='test subject', replyto='*****@*****.**', comments='test comments')

        # make sure all fields are sent unless otherwise specified
        self.messageText = ''
        mailer.onSuccess(request.form, request)
        self.assertTrue(
            self.messageBody.find('test subject') > 0 and
            self.messageBody.find('*****@*****.**') > 0 and
            self.messageBody.find('test comments') > 0
        )

        # setting some show fields shouldn't change that
        mailer.showFields = ('topic', 'comments',)
        self.messageText = ''
        mailer.onSuccess(request.form, request)
        self.assertTrue(
            self.messageBody.find('test subject') > 0 and
            self.messageBody.find('*****@*****.**') > 0 and
            self.messageBody.find('test comments') > 0
        )

        # until we turn off the showAll flag
        mailer.showAll = False
        self.messageText = ''
        mailer.onSuccess(request.form, request)
        self.assertTrue(
            self.messageBody.find('test subject') > 0 and
            self.messageBody.find('*****@*****.**') < 0 and
            self.messageBody.find('test comments') > 0
        )

        # check includeEmpties
        mailer.includeEmpties = False

        # first see if everything's still included
        mailer.showAll = True
        self.messageText = ''
        mailer.onSuccess(request.form, request)
        # look for labels
        self.assertTrue(
            self.messageBody.find('Subject') > 0 and
            self.messageBody.find('Your E-Mail Address') > 0 and
            self.messageBody.find('Comments') > 0
        )

        # now, turn off required for a field and leave it empty
        fields = get_fields(self.ff1)
        fields['comments'].required = False
        set_fields(self.ff1, fields)
        request = self.LoadRequestForm(
            topic='test subject', replyto='*****@*****.**',)
        self.messageText = ''
        mailer.onSuccess(request.form, request)
        self.assertTrue(
            self.messageBody.find('Subject') > 0 and
            self.messageBody.find('Your E-Mail Address') > 0 and
            self.messageBody.find('Comments') < 0
        )