Ejemplo n.º 1
0
    def check_form(self):
        """ Checks the form submitted when the user clicks on
        the 'send by mail' button.
        """
        form = self.request.form
        user = self.get_user()
        self.check_pdf_accessibility()

        fields = ["name_recipient", "email_recipient", "title", "text"]
        if not user:
            fields.extend(["name", "email"])

        # All fields are mandatory
        for field in fields:
            if not form.get(field):
                self.errors.append(field)

        # We check that emails are real emails.
        email_validator = validation.validatorFor("isEmail")
        email_fields = ["email_recipient"]
        if not user:
            email_fields.append("email")

        for field in email_fields:
            value = form.get(field)
            if not value:
                continue
            if not email_validator(value) == 1:
                self.errors.append("invalid_" + field)
Ejemplo n.º 2
0
 def test_registration(self):
     from Products.validation import validation
     v = validation.validatorFor('isDataGridFilled')
     self.failUnlessEqual(v((0, 1)), 1)
     self.failUnlessEqual(v([0, 1]), 1)
     self.failIfEqual(v([1]), 1)
     self.failIfEqual(v(0), 1)
Ejemplo n.º 3
0
def _validateEmail(value):
    validator_function = validation.validatorFor('isEmail')

    if validator_function(str(value)) != 1:
        raise Invalid(_(u'The email entered is not valid'))

    return True
Ejemplo n.º 4
0
    def test_isValidId_plone(self):
        from Products.validation.validators import IdValidator
        try:
            from Products.CMFPlone.utils import check_id
        except ImportError:
            return

        v = validation.validatorFor('isValidId')
        obj = Dummy('foo')
        obj2 = Dummy('foo2')
        parent = Dummy('parent')
        parent.add(obj)
        parent.add(obj2)

        self.assertEqual(v('good', obj), 1)
        self.assertEqual(v('foo', obj), 1)
        # This error message would be translated usually, but we do not care.
        self.assertEqual(
            v('foo', obj2),
            u'There is already an item named ${name} in this folder.')
        # Plone seems to allow spaces.
        self.assertEqual(v('a b', obj), 1)
        # Some ids are forbidden in Plone.  We get an i18n message back.
        # Problem: on Plone 5.1, utils.check_id simply looks for a
        # check_id script/attribute on the context.  This will fail.
        # So only test this in Plone 5.2+, not on 5.1.
        import pkg_resources
        version = pkg_resources.get_distribution('Products.CMFPlone').version
        if version.startswith('5.1'):
            return
        self.assertEqual(v('layout', obj), '${name} is reserved.')
Ejemplo n.º 5
0
    def test_FormulaValidator(self):
        login(self.portal, TEST_USER_NAME)

        v = validationService.validatorFor('formulavalidator')
        calcs = self.portal.bika_setup.bika_calculations
        calc1 = calcs['calculation-1']

        interim_fields = [
            {'keyword': 'TV',
             'title': 'Titration Volume',
             'unit': '',
             'default': ''},
            {'keyword': 'TF', 'title': 'Titration Factor', 'unit': '', 'default': ''}]
        self.portal.REQUEST.form['InterimFields'] = interim_fields

        formula = "[TV] * [TF] * [Wrong]"
        self.failUnlessEqual(
            v(formula, instance=calc1, field=calc1.schema.get(
                'Formula'), REQUEST=self.portal.REQUEST),
            "Validation failed: Keyword 'Wrong' is invalid")

        formula = "[TV] * [TF]"
        self.assertEqual(
            True,
            v(formula,
              instance=calc1,
              field=calc1.schema.get('Formula'),
              REQUEST=self.portal.REQUEST))
Ejemplo n.º 6
0
def validate_email(value):
    ''' Validate email using Products.validation

        >>> validate_email('*****@*****.**') == 1
        True

        >>> validate_email('*****@*****.**') == 1
        True

        >>> validate_email('*****@*****.**') == 1
        True

        >>> validate_email('*****@*****.**') == 1
        True

        >>> try:
        ...     validate_email('@bar.com')
        ... except Invalid:
        ...     print 'Invalid email'
        Invalid email

    '''
    v = validation.validatorFor('isEmail')
    if v(str(value)) == 1:
        return True
    else:
        raise Invalid(_(u"The informed email is invalid."))
Ejemplo n.º 7
0
 def ttest_isNotTooLong(self):
     v = validation.validatorFor('isNotTooLong')
     self.assertEqual(v('', maxlength=20), 1)
     self.assertEqual(v('1234567890', maxlength=20), 1)
     self.assertEqual(v('1234567890', maxlength=10), 1)
     self.assertEqual(v('1234567890', maxlength=0), 1)
     self.assertNotEqual(v('1234567890', maxlength=9), 1)
     self.assertNotEqual(v('1234567890', maxlength=1), 1)
 def test_phone_registration(self):
     from Products.validation import validation
     v = validation.validatorFor('isBrPhone')
     self.failUnlessEqual(v('(11)38982121'), 1)
     self.failIfEqual(v('113898-212121'), 1)
     self.failUnlessEqual(v('11987772121'), 1)
     self.failIfEqual(v('11887772121'), 1)
     self.failIfEqual(v('21987772121'), 1)
 def test_isUnixLikeName(self):
     v = validationService.validatorFor('isUnixLikeName')
     self.assertEqual(v('abcd'), 1)
     self.assertEqual(v('a_123456'), 1)
     self.assertNotEqual(v('123'), 1)
     self.assertNotEqual(v('ab.c'), 1)
     self.assertNotEqual(v('ab,c'), 1)
     self.assertNotEqual(v('aaaaaaaab'), 1)  # too long
Ejemplo n.º 10
0
    def test_isUSPhoneNumber(self):
        v = validation.validatorFor('isUSPhoneNumber')
        self.failUnlessEqual(v('(212) 555-1212',
                               ignore=r'[\s\(\)\-]'), 1)
        self.failUnlessEqual(v('2125551212',
                               ignore=r'[\s\(\)\-]'), 1)

        self.failUnlessEqual(v('(212) 555-1212'), 1)
Ejemplo n.º 11
0
 def test_isURL(self):
     v = validation.validatorFor('isURL')
     self.failUnlessEqual(v('http://foo.bar:8080/manage'), 1)
     self.failUnlessEqual(v('https://foo.bar:8080/manage'), 1)
     self.failUnlessEqual(v('irc://[email protected]:6667/#plone'), 1)
     self.failUnlessEqual(v('fish://*****:*****@myserver/~/'), 1)
     self.failUnlessEqual(v('http://\n'), u"Validation failed(isURL): 'http://\n' is not a valid url.")
     self.failIfEqual(v('../foo/bar'), 1)
Ejemplo n.º 12
0
 def test_isMailto(self):
     v = validation.validatorFor('isMailto')
     self.failUnlessEqual(v('mailto:[email protected]'), 1)
     self.failIfEqual(v('*****@*****.**'), 1)
     self.failIfEqual(v('mailto:@foo.bar'), 1)
     self.failIfEqual(v('@foo.bar'), 1)
     self.failIfEqual(v('mailto:'), 1)
     self.failIfEqual(v('me'), 1)
Ejemplo n.º 13
0
 def test_isUnixLikeName(self):
     v = validation.validatorFor('isUnixLikeName')
     self.failUnlessEqual(v('abcd'), 1)
     self.failUnless(v('a_123456'), 1)
     self.failIfEqual(v('123'), 1)
     self.failIfEqual(v('ab.c'), 1)
     self.failIfEqual(v('ab,c'), 1)
     self.failIfEqual(v('aaaaaaaab'), 1) # too long
Ejemplo n.º 14
0
 def test_isMailto(self):
     v = validation.validatorFor('isMailto')
     self.failUnlessEqual(v('mailto:[email protected]'), 1)
     self.failIfEqual(v('*****@*****.**'), 1)
     self.failIfEqual(v('mailto:@foo.bar'), 1)
     self.failIfEqual(v('@foo.bar'), 1)
     self.failIfEqual(v('mailto:'), 1)
     self.failUnlessEqual(v('me'), u"Validation failed(isMailto): 'me' is not a valid email address.")
Ejemplo n.º 15
0
 def test_isNotTooLong(self):
     v = validation.validatorFor('isNotTooLong')
     self.failUnlessEqual(v('', maxlength=20), 1)
     self.failUnlessEqual(v('1234567890', maxlength=20), 1)
     self.failUnlessEqual(v('1234567890', maxlength=10), 1)
     self.failUnlessEqual(v('1234567890', maxlength=0), 1)
     self.failIfEqual(v('1234567890', maxlength=9), 1)
     self.failIfEqual(v('1234567890', maxlength=1), 1)
Ejemplo n.º 16
0
 def test_isUnixLikeName(self):
     v = validation.validatorFor('isUnixLikeName')
     self.failUnlessEqual(v('abcd'), 1)
     self.failUnless(v('a_123456'), 1)
     self.failIfEqual(v('123'), 1)
     self.failIfEqual(v('ab.c'), 1)
     self.failUnlessEqual(v('ab,c'), u"Validation failed(isUnixLikeName): 'ab,c' this name is not a valid identifier")
     self.failIfEqual(v('aaaaaaaab'), 1) # too long
 def test_isNotTooLong(self):
     v = validation.validatorFor("isNotTooLong")
     self.failUnlessEqual(v("", maxlength=20), 1)
     self.failUnlessEqual(v("1234567890", maxlength=20), 1)
     self.failUnlessEqual(v("1234567890", maxlength=10), 1)
     self.failUnlessEqual(v("1234567890", maxlength=0), 1)
     self.failIfEqual(v("1234567890", maxlength=9), 1)
     self.failIfEqual(v("1234567890", maxlength=1), 1)
Ejemplo n.º 18
0
 def validateQuestion(self, value):
     """Return a list of validators"""
     validator = self.getValidation()
     if validator:
         v = validation.validatorFor(validator)
         return v(value)
     else:
         return True
    def test_isUSPhoneNumber(self):
        v = validationService.validatorFor('isUSPhoneNumber')
        self.assertEqual(v('(212) 555-1212',
                           ignore=r'[\s\(\)\-]'), 1)
        self.assertEqual(v('2125551212',
                           ignore=r'[\s\(\)\-]'), 1)

        self.assertEqual(v('(212) 555-1212'), 1)
 def test_inExNumericRange(self):
     v = validation.validatorFor('inExNumericRange')
     self.failUnlessEqual(v(10, minval=1, maxval=20), 1)
     self.failUnlessEqual(v('10', minval=1, maxval=20), 1)
     self.failUnlessEqual(v('1', minval=1, maxval=20), 1)
     self.failUnlessEqual(v('20', minval=1, maxval=20), 1)
     self.failIfEqual(v(0, minval=1, maxval=5), 1)
     self.failIfEqual(v(6, minval=1, maxval=5), 1)
     self.failIfEqual(v(4, minval=5, maxval=3), 1)
Ejemplo n.º 21
0
 def ttest_inExNumericRange(self):
     v = validation.validatorFor('inExNumericRange')
     self.assertEqual(v(10, minval=1, maxval=20), 1)
     self.assertEqual(v('10', minval=1, maxval=20), 1)
     self.assertEqual(v('1', minval=1, maxval=20), 1)
     self.assertEqual(v('20', minval=1, maxval=20), 1)
     self.assertNotEqual(v(0, minval=1, maxval=5), 1)
     self.assertNotEqual(v(6, minval=1, maxval=5), 1)
     self.assertNotEqual(v(4, minval=5, maxval=3), 1)
Ejemplo n.º 22
0
 def test_isMailto(self):
     v = validation.validatorFor('isMailto')
     self.assertEqual(v('mailto:[email protected]'), 1)
     self.assertEqual(v('mailto:[email protected]'), 1)
     self.assertNotEqual(v('*****@*****.**'), 1)
     self.assertNotEqual(v('mailto:@foo.bar'), 1)
     self.assertNotEqual(v('@foo.bar'), 1)
     self.assertNotEqual(v('mailto:'), 1)
     self.assertEqual(v('me'), u"Validation failed(isMailto): 'me' is not a valid email address.")
 def test_inExNumericRange(self):
     v = validation.validatorFor("inExNumericRange")
     self.failUnlessEqual(v(10, minval=1, maxval=20), 1)
     self.failUnlessEqual(v("10", minval=1, maxval=20), 1)
     self.failUnlessEqual(v("1", minval=1, maxval=20), 1)
     self.failUnlessEqual(v("20", minval=1, maxval=20), 1)
     self.failIfEqual(v(0, minval=1, maxval=5), 1)
     self.failIfEqual(v(6, minval=1, maxval=5), 1)
     self.failIfEqual(v(4, minval=5, maxval=3), 1)
    def test_isItalianNIN(self):
        v = validation.validatorFor('isItalianNIN')
        self.failUnlessEqual(v('FBBLCU80E24C814Q'), 1)
        # works also lowecase
        self.failUnlessEqual(v('fbblcu80e24c814q'), 1)
        # works also with mized case        
        self.failUnlessEqual(v('FbbLCU80e24C814Q'), 1)

        self.failUnlessEqual(v('FbbLCU80z24C814Q'),
                             u"Validation failed(isItalianNIN): 'FbbLCU80z24C814Q' is not a valid National Insurance Number.")
Ejemplo n.º 25
0
    def test_isValidId_basic(self):
        from Products.validation.validators import IdValidator

        v = validation.validatorFor('isValidId')
        obj = Dummy('foo')

        # Use a specific checker.
        obj.check_id = obj.dummy_checker
        self.assertEqual(v('good', obj), 1)
        self.assertEqual(v('a b', obj), 'bad id')
Ejemplo n.º 26
0
    def test_UncertaintyValidator(self):
        login(self.portal, TEST_USER_NAME)
        services = self.portal.bika_setup.bika_analysisservices
        serv1 = services['analysisservice-1']
        v = validationService.validatorFor('uncertainties_validator')
        field = serv1.schema['Uncertainties']
        key = serv1.id + field.getName()

        uncertainties = [{'intercept_min': '100.01', 'intercept_max': '200', 'errorvalue': '200%'}]
        self.portal.REQUEST['Uncertainties'] = uncertainties
        res = v(uncertainties, instance=serv1, field=field, REQUEST=self.portal.REQUEST)
        self.failUnlessEqual(res, "Validation failed: Error percentage must be between 0 and 100")

        uncertainties = [{'intercept_min': 'a', 'intercept_max': '200', 'errorvalue': '10%'}]
        self.portal.REQUEST['Uncertainties'] = uncertainties
        if key in self.portal.REQUEST:
            self.portal.REQUEST[key] = False
        res = v(uncertainties, instance=serv1, field=field, REQUEST=self.portal.REQUEST)
        self.failUnlessEqual(res, "Validation failed: Min values must be numeric")

        uncertainties = [{'intercept_min': '100.01', 'intercept_max': 'a', 'errorvalue': '10%'}]
        self.portal.REQUEST['Uncertainties'] = uncertainties
        if key in self.portal.REQUEST:
            self.portal.REQUEST[key] = False
        res = v(uncertainties, instance=serv1, field=field, REQUEST=self.portal.REQUEST)
        self.failUnlessEqual(res, "Validation failed: Max values must be numeric")

        uncertainties = [{'intercept_min': '100.01', 'intercept_max': '200', 'errorvalue': 'a%'}]
        self.portal.REQUEST['Uncertainties'] = uncertainties
        if key in self.portal.REQUEST:
            self.portal.REQUEST[key] = False
        res = v(uncertainties, instance=serv1, field=field, REQUEST=self.portal.REQUEST)
        self.failUnlessEqual(res, "Validation failed: Error values must be numeric")

        uncertainties = [{'intercept_min': '200', 'intercept_max': '100', 'errorvalue': '10%'}]
        self.portal.REQUEST['Uncertainties'] = uncertainties
        if key in self.portal.REQUEST:
            self.portal.REQUEST[key] = False
        res = v(uncertainties, instance=serv1, field=field, REQUEST=self.portal.REQUEST)
        self.failUnlessEqual(res, "Validation failed: Max values must be greater than Min values")

        uncertainties = [{'intercept_min': '100', 'intercept_max': '200', 'errorvalue': '-5%'}]
        self.portal.REQUEST['Uncertainties'] = uncertainties
        if key in self.portal.REQUEST:
            self.portal.REQUEST[key] = False
        res = v(uncertainties, instance=serv1, field=field, REQUEST=self.portal.REQUEST)
        self.failUnlessEqual(res, "Validation failed: Error percentage must be between 0 and 100")

        uncertainties = [{'intercept_min': '100', 'intercept_max': '200', 'errorvalue': '-5'}]
        self.portal.REQUEST['Uncertainties'] = uncertainties
        if key in self.portal.REQUEST:
            self.portal.REQUEST[key] = False
        res = v(uncertainties, instance=serv1, field=field, REQUEST=self.portal.REQUEST)
        self.failUnlessEqual(res, "Validation failed: Error value must be 0 or greater")
    def update_address(self, name, data):
        """Update address of cart and return message if there are one

        :param name: Name of address, such as billing and shipping.
        :type name: str

        :param data: Form data.
        :type data: dict

        :rtype: unicode or None
        """
        message = None

        items = data
        data = {}
        for key in items:
            text = '{}_'.format(name)
            if key.startswith(text):
                data[key[len(text):]] = items.get(key)

        if not data.get('first_name'):
            message = _(u'First name is missing.')

        elif not data.get('last_name'):
            message = _(u'Last name is missing.')

        elif not data.get('email') or validation.validatorFor('isEmail')(data.get('email')) != 1:
            message = _(u'Invalid e-mail address.')

        elif not data.get('street'):
            message = _(u'Street address is missing.')

        elif not data.get('post'):
            message = _(u'Post code is missing.')

        elif not data.get('city'):
            message = _(u'City is missing.')

        elif not data.get('phone'):
            message = _(u'Phone number is missing.')

        else:
            address = self.get_address(name)
            if address is not None:
                for key in data:
                    value = data.get(key)
                    if address.get(key) != value:
                        address[key] = value
            else:
                address = data
            self.update_cart(name, address)

        return message
 def test_isCAP(self):
     v = validation.validatorFor('isCAP')
     self.failUnlessEqual(v('44021'), 1)
     self.failUnlessEqual(v('00100'), 1)
     self.failUnlessEqual(v('010001'),
                          u"Validation failed(isCAP): '010001' is not a valid CAP.")
     self.failUnlessEqual(v('100'),
                          u"Validation failed(isCAP): '100' is not a valid CAP.")
     self.failUnlessEqual(v('44b50'),
                          u"Validation failed(isCAP): '44b50' is not a valid CAP.")
     self.failUnlessEqual(v('44 21'),
                          u"Validation failed(isCAP): '44 21' is not a valid CAP.")
Ejemplo n.º 29
0
    def update(self):
        form = self.request.form
        url = self.context.restrictedTraverse('@@plone_context_state').current_base_url()
        stock = IStock(self.context)

        if form.get('form.buttons.QuickAdd') is not None:
            value = form.get('quick-add')
            validate = validation.validatorFor('isInt')
            maximum = self.add()['max']
            if validate(value) != 1:
                message = _(u'add_less_than_number', default=u'Add less than ${number}.', mapping={'number': maximum})
                IStatusMessage(self.request).addStatusMessage(message, type='warn')
            else:
                value = int(value)
                message = _(u'successfully_added_number', default=u'Successfully added ${number} pc(s).', mapping={
                    'number': stock.add_stock(value)})
                IStatusMessage(self.request).addStatusMessage(message, type='info')
            return self.request.response.redirect(url)

        elif form.get('form.buttons.QuickSubtract') is not None:
            value = form.get('quick-subtract')
            validate = validation.validatorFor('isInt')
            maximum = self.subtract()['max']
            if validate(value) != 1:
                message = _(u'subtract_less_than_number', default=u'Subtract less than ${number}.', mapping={'number': maximum})
                IStatusMessage(self.request).addStatusMessage(message, type='warn')
            else:
                value = int(value)
                message = _(u'successfully_subtracted_number', default=u'Successfully subtracted ${number} pc(s).', mapping={
                    'number': stock.sub_stock(value)})
                IStatusMessage(self.request).addStatusMessage(message, type='info')
            return self.request.response.redirect(url)

        elif form.get('form.buttons.AddNewStock') is not None:
            url = '{}/++add++collective.cart.stock.Stock'.format(self.context.absolute_url())
            return self.request.response.redirect(url)
Ejemplo n.º 30
0
 def test_isPrintable(self):
     v = validation.validatorFor('isPrintable')
     self.assertEqual(v('text'), 1)
     self.assertEqual(
         v('\\u203'),
         u"Validation failed(isPrintable): '\\u203' contains unprintable characters"
     )
     if six.PY3:
         int_type = "<class 'int'>"
     else:
         int_type = "<type 'int'>"
     self.assertEqual(
         v(10),
         u"Validation failed(isPrintable): 10 of type {0}, expected 'string'".format(int_type)
     )
Ejemplo n.º 31
0
    def sendWaitForConfirmationEmail(self, signupSheet, slotTitleLabel,
                                     person):
        url = signupSheet.absolute_url()

        lang = ILanguage(signupSheet).get_language()
        if len(lang) == 0:
            lang = 'de'

        extraInfoStr = ''
        for (fieldStr, fieldTrans) in self.extra_fields():
            value = getattr(self, fieldStr, '')
            if len(value) > 0:
                extraInfoStr += u'{0}: {1}\n'.format(
                    translate(fieldTrans, target_language=lang), value)

        # mail to person who signed up to waiting list
        contactInfo = signupSheet.getContactInfo()
        toEmail = self.email
        fromEmail = signupSheet.getContactInfo()

        subject = signupSheet.getEmailWaitForConfirmationSubject()
        if len(subject) == 0:
            subject = u'{0} - {1}'.format(
                signupSheet.Title(),
                translate(_('Wait For Confirmation'), target_language=lang))
        else:
            subject = replaceCustomMailPlaceholders(subject, person.Title(),
                                                    signupSheet.Title(), url,
                                                    slotTitleLabel,
                                                    extraInfoStr)

        content = signupSheet.getEmailWaitForConfirmationContent()
        if len(content) > 0:
            message = replaceCustomMailPlaceholders(content, person.Title(),
                                                    signupSheet.Title(), url,
                                                    slotTitleLabel,
                                                    extraInfoStr)
        else:
            # default message if no content has been specified
            message = translate(
                _('Hello'),
                target_language=lang) + ' ' + person.Title() + ',\n\n'
            message += translate(_('You signed up for following slot:'),
                                 target_language=lang) + '\n'  # noqa: E501
            message += slotTitleLabel + '\n'
            message += translate(_(
                'You will receive another email as soon as your registration has been confirmed (or rejected).'
            ),
                                 target_language=lang) + '\n\n'  # noqa: E501

            if len(extraInfoStr) > 0:
                message += translate(_(u'Additional information'),
                                     target_language=lang) + '\n'  # noqa: E501
                message += extraInfoStr + '\n\n'

            if len(contactInfo) > 0:
                message += translate(
                    _('If you have any questions please contact:'),
                    target_language=lang
                ) + ' ' + contactInfo + '\n\n'  # noqa: E501

            message += url + '\n\n'

        mailHost = self.context.MailHost
        mailHost.secureSend(message,
                            toEmail,
                            fromEmail,
                            subject,
                            charset='utf-8')

        # mail to contact person of the signup sheet
        isEmail = validation.validatorFor('isEmail')
        if signupSheet.getNotifyContactInfo(
        ) and len(contactInfo) > 0 and isEmail(contactInfo):
            toEmail = contactInfo
            fromEmail = signupSheet.getContactInfo()

            subject = u'{0} - {1}'.format(
                signupSheet.Title(),
                translate(_('Wait For Confirmation'), target_language=lang))

            message = translate(_('Hello'), target_language=lang) + ',\n\n'
            message += translate(
                _('A new signup is waiting for confirmation'),
                target_language=lang) + ' (' + person.absolute_url(
                ) + '):\n'  # noqa: E501
            message += slotTitleLabel + '\n'
            message += translate(
                _(u'Name'),
                target_language=lang) + ': ' + person.Title() + '\n'
            message += translate(
                _(u'E-Mail'),
                target_language=lang) + ': ' + self.email + '\n\n'

            if len(extraInfoStr) > 0:
                message += translate(_(u'Additional information'),
                                     target_language=lang) + '\n'  # noqa: E501
                message += extraInfoStr + '\n\n'

            message += '\nURL: ' + person.absolute_url() + '\n\n'

            mailHost = self.context.MailHost
            mailHost.secureSend(message,
                                toEmail,
                                fromEmail,
                                subject,
                                charset='utf-8')
Ejemplo n.º 32
0
 def test_isSSN(self):
     v = validationService.validatorFor('isSSN')
     self.assertEqual(v('111223333'), 1)
     self.assertEqual(v('111-22-3333', ignore=r'-'), 1)
Ejemplo n.º 33
0
 def test_inNumericRange(self):
     v = validationService.validatorFor('inNumericRange')
     self.assertEqual(v(10, 1, 20), 1)
     self.assertEqual(v('10', 1, 20), 1)
     self.assertNotEqual(v(0, 4, 5), 1)
Ejemplo n.º 34
0
def sendWaitingListConfirmationEmail(person):
    isEmail = validation.validatorFor('isEmail')

    timeSlot = person.aq_parent
    day = timeSlot.aq_parent
    signupSheet = day.aq_parent

    lang = ILanguage(signupSheet).get_language()
    if len(lang) == 0:
        lang = 'de'

    extraInfoStr = person.getExtraInfoAsString()
    contactInfo = signupSheet.contactInfo
    fromEmail = signupSheet.contactInfo

    if isEmail(person.email) != 1:
        return

    url = signupSheet.absolute_url()
    toEmail = person.email

    subject = signupSheet.emailWaitinglistSubject
    if subject is None or len(subject) == 0:
        subject = signupSheet.Title() + ' - ' \
            + translate(_('Waiting List Confirmation'), target_language=lang)
    else:
        subject = replaceCustomMailPlaceholders(
            subject, person.Title(), signupSheet.Title(), url,
            timeSlot.getLabel(), extraInfoStr)

    content = signupSheet.emailWaitinglistContent
    if content is not None and len(content) > 0:
        message = replaceCustomMailPlaceholders(
            content, person.Title(), signupSheet.Title(), url,
            timeSlot.getLabel(), extraInfoStr)
    else:
        # default message if no content has been specified
        message = translate(_('Hello'), target_language=lang) + ' ' + person.Title() + ',\n\n'
        message += translate(_('This message is to confirm that you have been added to the waiting list for:'), target_language=lang) + '\n'  # noqa: E501
        message += timeSlot.getLabel() + '\n\n'

        if len(extraInfoStr) > 0:
            message += translate(_(u'Additional information'),
                                 target_language=lang) + '\n'
            message += extraInfoStr + '\n\n'

        if len(contactInfo) > 0:
            message += translate(_('If you have any questions please contact:'),
                                 target_language=lang) + ' ' + contactInfo + '\n\n'

        message += url + '\n\n'

    api.portal.send_email(recipient=toEmail, sender=fromEmail,
                          subject=subject, body=message)

    # mail to contact person of the signup sheet
    if signupSheet.notifyContactInfo and len(contactInfo) > 0 and isEmail(contactInfo):
        toEmail = contactInfo
        subject = signupSheet.Title() + ' - ' \
            + translate(_('Waiting List Notification'), target_language=lang)

        message = translate(_('Hello'), target_language=lang) + ',\n\n'
        message += translate(_('A new signup has been added to the waiting list for:'),
                             target_language=lang) + '\n'
        message += timeSlot.getLabel() + '\n\n'

        message += translate(_(u'Name'), target_language=lang) + ': ' + person.Title() + '\n'
        message += translate(_(u'E-Mail'), target_language=lang) + ': ' + person.email + '\n\n'

        if len(extraInfoStr) > 0:
            message += translate(_(u'Additional information'), target_language=lang) + '\n'
            message += extraInfoStr + '\n\n'

        message += '\nURL: ' + person.absolute_url() + '\n\n'

        api.portal.send_email(recipient=toEmail, sender=fromEmail,
                              subject=subject, body=message)
Ejemplo n.º 35
0
    def test_isUSPhoneNumber(self):
        v = validation.validatorFor('isUSPhoneNumber')
        self.failUnlessEqual(v('(212) 555-1212', ignore=r'[\s\(\)\-]'), 1)
        self.failUnlessEqual(v('2125551212', ignore=r'[\s\(\)\-]'), 1)

        self.failUnlessEqual(v('(212) 555-1212'), 1)
Ejemplo n.º 36
0
 def test_isEmail(self):
     v = validation.validatorFor('isEmail')
     self.failUnlessEqual(v('*****@*****.**'), 1)
     self.failUnlessEqual(v('*****@*****.**'), 1)
     self.failIfEqual(v('@there.com'), 1)
Ejemplo n.º 37
0
 def test_isDecimal(self):
     v = validation.validatorFor('isDecimal')
     self.assertEqual(v('1.5'), 1)
     self.assertEqual(v('1,5'), 1)
     self.assertEqual(v('NaN'), u"Validation failed(isDecimal): 'NaN' is not a decimal number.")
Ejemplo n.º 38
0
 def test_isURL(self):
     v = validationService.validatorFor('isURL')
     self.assertEqual(v('http://foo.bar:8080/manage'), 1)
     self.assertNotEqual(v('http://\n'), 1)
     self.assertNotEqual(v('../foo/bar'), 1)
            i18n_domain='FacultyStaffDirectory',
        ),
        schemata="Professional Information",
        searchable=True
    ),

    atapi.LinesField(
        name='websites',
        widget=atapi.LinesField._properties['widget'](
            label=_(u"FacultyStaffDirectory_label_websites", default=u"Web Sites"),
            description=_(u"FacultyStaffDirectory_description_websites",
                          default=u"One per line. Example: http://www.example.com/"),
            i18n_domain='FacultyStaffDirectory',
        ),
        schemata="Professional Information",
        validators = SequenceValidator('isURLs', validation.validatorFor('isURL'))
    ),

    atapi.StringField(
        name='id',
        widget=atapi.StringWidget(
            label=_(u"FacultyStaffDirectory_label_id", default=u"Access Account ID"),
            i18n_domain='FacultyStaffDirectory',
            description=_(u"FacultyStaffDirectory_description_id", default=u"Example: abc123"),
        ),
        required=True,
        user_property=True,
        schemata="Basic Information",
        write_permission=CHANGE_PERSON_IDS,
    ),
Ejemplo n.º 40
0
                         focus_handler="triggerOnFocusStyles",
                         class_no=None,
                         class_changed="changed-title-field",
                         class_not_changed="not-changed-title-field"),
            'link':
            BlockColumn("Link",
                        column_on_class="hidden-field",
                        columns=['link', 'uid'],
                        read_only=True),
            'uid':
            HiddenColumn("UID", visible=False)
        },
    })


isURL = validation.validatorFor('isURL')


class ReferenceDataGridField(DataGridField, ReferenceField):
    _properties = ReferenceField._properties.copy()
    _properties.update(DataGridField._properties.copy())
    _properties.update({
        'columns': ('title', 'link', 'uid'),
        'widget': ReferenceDataGridWidget,
        'multiValued': True,
    })

    security = ClassSecurityInfo()

    security.declarePrivate('isRemoteURL')
Ejemplo n.º 41
0
        """Constructor
        
        validator - a validator (or ValidatorChain) to run against each item in
        the sequence. For reasonable results, make sure your chain cites the bad
        input in its error message. Otherwise, the user won't know what the
        error message applies to.
        """
        self.name = name
        self.title = kw.get('title', name)
        self.description = description
        self.validator = validator

    def __call__(self, values, *args, **kwargs):
        errors = [self.validator(v) for v in values]
        errors = [x for x in errors
                  if x not in (True, 1)]  # Filter out non-errors.
        if errors:
            return '\n\n'.join(errors)
        else:
            # Not sure why this needs to be True, but returning 1 (like
            # RegexValidator) throws an Unsubscriptable Object exception. [Ed:
            # It's because that's what the IValidator interface proclaims. The
            # stock validators are just nonconformant.]
            return True


classImplements(SequenceValidator, IValidator)

# Change some error messages to improve grammar
validation.validatorFor('isURL').errmsg = _(u'is not a valid URL.'),
Ejemplo n.º 42
0
 def secureSend(self, message, mto=None, mfrom=None, subject=None, encode=None):
     isEmail = validation.validatorFor('isEmail')
     if (isEmail(mto) == 1):
         return
     else:
         raise SMTPRecipientsRefused
Ejemplo n.º 43
0
 def test_isUnchecked(self):
     v = validation.validatorFor('isUnchecked')
     self.failUnlessEqual(v('0'), 1)
     self.failIfEqual(v('1'), 1)
Ejemplo n.º 44
0
 def test_pm_IsValidCertifiedSignaturesValidatorFailIfUsingDuplicatedEntries(
         self):
     '''Test the 'isCertifiedSignaturesValidator' validator.
        It fails if 2 entries use exactly same signatureNumber/date_from/date_to.'''
     v = validation.validatorFor('isValidCertifiedSignatures')
     # test first without dates, row 3 is wrong
     certified = [
         {
             'signatureNumber': '1',
             'name': '',
             'function': '',
             'date_from': '',
             'date_to': '',
         },
         {
             'signatureNumber': '2',
             'name': '',
             'function': '',
             'date_from': '',
             'date_to': '',
         },
         {
             'signatureNumber': '2',
             'name': '',
             'function': '',
             'date_from': '',
             'date_to': '',
         },
     ]
     duplicated_entries_error_msg = translate(
         'error_certified_signatures_duplicated_entries',
         mapping={'row_number': 3},
         domain='PloneMeeting',
         context=self.portal.REQUEST)
     self.assertEquals(v(certified), duplicated_entries_error_msg)
     # test with dates, row 2 is wrong
     certified = [
         {
             'signatureNumber': '1',
             'name': '',
             'function': '',
             'date_from': '2015/01/01',
             'date_to': '2015/02/02',
         },
         {
             'signatureNumber': '1',
             'name': '',
             'function': '',
             'date_from': '2015/01/01',
             'date_to': '2015/02/02',
         },
         {
             'signatureNumber': '2',
             'name': '',
             'function': '',
             'date_from': '',
             'date_to': '',
         },
     ]
     duplicated_entries_error_msg2 = translate(
         'error_certified_signatures_duplicated_entries',
         mapping={'row_number': 2},
         domain='PloneMeeting',
         context=self.portal.REQUEST)
     self.assertEquals(v(certified), duplicated_entries_error_msg2)
Ejemplo n.º 45
0
 def test_isCommaSeparatedEmails(self):
     v = validation.validatorFor('pfgv_isCommaSeparatedEmails')
     self.failUnlessEqual(v('[email protected],[email protected]'), 1)
     self.failUnlessEqual(v('[email protected],  [email protected]'),
                          1)
     self.failIfEqual(v('[email protected]; [email protected]'), 1)
Ejemplo n.º 46
0
 def test_inNumericRange(self):
     v = validation.validatorFor('inNumericRange')
     self.assertEqual(v(10, 1, 20), 1)
     self.assertEqual(v('10', 1, 20), 1)
     self.assertEqual(v(0, 4, 5), u"Validation failed(inNumericRange): '0' out of range(4, 5)")
Ejemplo n.º 47
0
 def test_isSSN(self):
     v = validation.validatorFor('isSSN')
     self.failUnlessEqual(v('111223333'), 1)
     self.failUnlessEqual(v('111-22-3333', ignore=r'-'), 1)
 def test_isEmail(self):
     v = validationService.validatorFor('isEmail')
     self.assertEqual(v('*****@*****.**'), 1)
     self.assertNotEqual(v('@foo.bar'), 1)
     self.assertNotEqual(v('me'), 1)
Ejemplo n.º 49
0
 def test_isValidId(self):
     v = validation.validatorFor("isValidId")
     self.failUnlessEqual(v("a b", object()),
                          u"Spaces are not allowed in ids")
Ejemplo n.º 50
0
def isEmail(input):
    validator = validation.validatorFor('isEmail')
    return validator(str(input)) == 1
Ejemplo n.º 51
0
    def test_pm_IsValidCertifiedSignaturesValidatorFailsIfWrongDateFormat(
            self):
        '''Test the 'isCertifiedSignaturesValidator' validator.
           It fails if signatures use wrong format for dates.'''
        v = validation.validatorFor('isValidCertifiedSignatures')
        # check date format
        # wrong date
        certified = [
            {
                'signatureNumber': '1',
                'name': '',
                'function': '',
                'date_from': '2015/02/00',
                'date_to': '2015/02/15',
            },
        ]
        invalid_dates_error_msg = translate(
            'error_certified_signatures_invalid_dates',
            mapping={'row_number': 1},
            domain='PloneMeeting',
            context=self.portal.REQUEST)
        self.assertEquals(v(certified), invalid_dates_error_msg)
        # wrong date format, not respecting YYYY/MM/DD
        certified = [
            {
                'signatureNumber': '1',
                'name': '',
                'function': '',
                'date_from': '2015/15/01',
                'date_to': '2015/20/01',
            },
        ]
        self.assertEquals(v(certified), invalid_dates_error_msg)
        # date_from must be <= date_to
        certified = [
            {
                'signatureNumber': '1',
                'name': '',
                'function': '',
                'date_from': '2015/01/15',
                'date_to': '2015/01/10',
            },
        ]
        self.assertEquals(v(certified), invalid_dates_error_msg)

        # row number is displayed in the error message, check that it works
        # here, row 2 is wrong
        certified = [
            {
                'signatureNumber': '1',
                'name': '',
                'function': '',
                'date_from': '',
                'date_to': '',
            },
            {
                'signatureNumber': '1',
                'name': '',
                'function': '',
                'date_from': 'wrong_date',
                'date_to': '2015/01/01',
            },
            {
                'signatureNumber': '2',
                'name': '',
                'function': '',
                'date_from': '',
                'date_to': '',
            },
        ]
        invalid_dates_error_msg2 = translate(
            'error_certified_signatures_invalid_dates',
            mapping={'row_number': 2},
            domain='PloneMeeting',
            context=self.portal.REQUEST)
        self.assertEquals(v(certified), invalid_dates_error_msg2)
Ejemplo n.º 52
0
    def test_pm_IsValidCertifiedSignaturesValidatorWorking(self):
        '''Test the 'isCertifiedSignaturesValidator' validator.
           Here we are testing that working cases are actually working..."""
           It fails if :
           - signatures are not ordered by signature number;
           - both date_from/date_to are not provided together (if provided);
           - date format is wrong (respect YYYY/DD/MM, valid DateTime, date_from <= date_to).'''
        v = validation.validatorFor('isValidCertifiedSignatures')
        # if nothing is defined, validation is successful
        self.failIf(v([]))
        # nothing is required, except signatureNumber
        # here is a working sample
        certified = [
            {
                'signatureNumber': '1',
                'name': 'Name1a',
                'function': 'Function1a',
                'date_from': '2015/01/01',
                'date_to': '2015/02/02',
            },
            {
                'signatureNumber': '1',
                'name': 'Name1b',
                'function': 'Function1b',
                'date_from': '2015/02/15',
                'date_to': '2015/02/15',
            },
            {
                'signatureNumber': '1',
                'name': 'Name1',
                'function': 'Function1',
                'date_from': '',
                'date_to': '',
            },
            {
                'signatureNumber': '2',
                'name': 'Name2a',
                'function': 'Function2a',
                'date_from': '2015/01/01',
                'date_to': '2015/01/15',
            },
            {
                'signatureNumber': '2',
                'name': 'Name2',
                'function': 'Function2',
                'date_from': '',
                'date_to': '',
            },
        ]
        self.failIf(v(certified))

        # every signatures are not mandatorily redefined
        # this is the case especially while overriding for example signature 2
        # on a MeetingGroup and keep signature 1 from the MeetingConfig
        # fails if signatureNumber are not ordered
        certified = [
            {
                'signatureNumber': '2',
                'name': '',
                'function': '',
                'date_from': '',
                'date_to': '',
            },
        ]
        self.failIf(v(certified))
Ejemplo n.º 53
0
 def test_isPrintable(self):
     v = validationService.validatorFor('isPrintable')
     self.assertEqual(v('text'), 1)
     self.assertNotEqual(v('\u203'), 1)
     self.assertNotEqual(v(10), 1)
    def test_isUSPhoneNumber(self):
        v = validationService.validatorFor('isUSPhoneNumber')
        self.assertEqual(v('(212) 555-1212', ignore=r'[\s\(\)\-]'), 1)
        self.assertEqual(v('2125551212', ignore=r'[\s\(\)\-]'), 1)

        self.assertEqual(v('(212) 555-1212'), 1)
def isEmail(value):
    if validation.validatorFor('isEmail')(value) == 1:
        return True
    else:
        return False
Ejemplo n.º 56
0
 def isEmailValid(self):
     isEmail = validation.validatorFor('isEmail')
     return isEmail(self.email) == 1
Ejemplo n.º 57
0
    def test_UncertaintyValidator(self):
        login(self.portal, TEST_USER_NAME)
        services = self.portal.bika_setup.bika_analysisservices
        serv1 = services['analysisservice-1']
        v = validationService.validatorFor('uncertainties_validator')
        field = serv1.schema['Uncertainties']
        key = serv1.id + field.getName()

        uncertainties = [{
            'intercept_min': '100.01',
            'intercept_max': '200',
            'errorvalue': '200%'
        }]
        self.portal.REQUEST['Uncertainties'] = uncertainties
        res = v(uncertainties,
                instance=serv1,
                field=field,
                REQUEST=self.portal.REQUEST)
        self.failUnlessEqual(
            res,
            "Validation failed: Error percentage must be between 0 and 100")

        uncertainties = [{
            'intercept_min': 'a',
            'intercept_max': '200',
            'errorvalue': '10%'
        }]
        self.portal.REQUEST['Uncertainties'] = uncertainties
        if key in self.portal.REQUEST:
            self.portal.REQUEST[key] = False
        res = v(uncertainties,
                instance=serv1,
                field=field,
                REQUEST=self.portal.REQUEST)
        self.failUnlessEqual(res,
                             "Validation failed: Min values must be numeric")

        uncertainties = [{
            'intercept_min': '100.01',
            'intercept_max': 'a',
            'errorvalue': '10%'
        }]
        self.portal.REQUEST['Uncertainties'] = uncertainties
        if key in self.portal.REQUEST:
            self.portal.REQUEST[key] = False
        res = v(uncertainties,
                instance=serv1,
                field=field,
                REQUEST=self.portal.REQUEST)
        self.failUnlessEqual(res,
                             "Validation failed: Max values must be numeric")

        uncertainties = [{
            'intercept_min': '100.01',
            'intercept_max': '200',
            'errorvalue': 'a%'
        }]
        self.portal.REQUEST['Uncertainties'] = uncertainties
        if key in self.portal.REQUEST:
            self.portal.REQUEST[key] = False
        res = v(uncertainties,
                instance=serv1,
                field=field,
                REQUEST=self.portal.REQUEST)
        self.failUnlessEqual(
            res, "Validation failed: Error values must be numeric")

        uncertainties = [{
            'intercept_min': '200',
            'intercept_max': '100',
            'errorvalue': '10%'
        }]
        self.portal.REQUEST['Uncertainties'] = uncertainties
        if key in self.portal.REQUEST:
            self.portal.REQUEST[key] = False
        res = v(uncertainties,
                instance=serv1,
                field=field,
                REQUEST=self.portal.REQUEST)
        self.failUnlessEqual(
            res,
            "Validation failed: Max values must be greater than Min values")

        uncertainties = [{
            'intercept_min': '100',
            'intercept_max': '200',
            'errorvalue': '-5%'
        }]
        self.portal.REQUEST['Uncertainties'] = uncertainties
        if key in self.portal.REQUEST:
            self.portal.REQUEST[key] = False
        res = v(uncertainties,
                instance=serv1,
                field=field,
                REQUEST=self.portal.REQUEST)
        self.failUnlessEqual(
            res,
            "Validation failed: Error percentage must be between 0 and 100")

        uncertainties = [{
            'intercept_min': '100',
            'intercept_max': '200',
            'errorvalue': '-5'
        }]
        self.portal.REQUEST['Uncertainties'] = uncertainties
        if key in self.portal.REQUEST:
            self.portal.REQUEST[key] = False
        res = v(uncertainties,
                instance=serv1,
                field=field,
                REQUEST=self.portal.REQUEST)
        self.failUnlessEqual(
            res, "Validation failed: Error value must be 0 or greater")
Ejemplo n.º 58
0
 def validateQuestion(self, value):
     """Return a list of validators"""
     validator = self.getValidation()
     v = validation.validatorFor(validator)
     return v(value)
def isUrlList(data):
    verify=validation.validatorFor("isURL")
    for url in (x.strip() for x in data.split()):
        if verify(url)!=True:
            return False
    return True
Ejemplo n.º 60
0
 def test_isEmail(self):
     v = validation.validatorFor('isEmail')
     self.assertEqual(v('*****@*****.**'), 1)
     self.assertEqual(v('*****@*****.**'), 1)
     self.assertNotEqual(v('@foo.bar'), 1)
     self.assertEqual(v('me'), u"Validation failed(isEmail): 'me' is not a valid email address.")