Skip to content

Commit

Permalink
short number type changed to int, added validation and widget for dis…
Browse files Browse the repository at this point in the history
…playing the information
  • Loading branch information
Teppo Naakka committed Mar 22, 2013
1 parent f85da34 commit b551473
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 3 deletions.
1 change: 1 addition & 0 deletions src/collective/roster/behaviors/configure.zcml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
<grok:grok package=".indexers" />
<grok:grok package=".viewlets" />
<grok:grok package=".adapters" />
<grok:grok package=".widgets" />

<plone:behavior
title="Related persons"
Expand Down
22 changes: 19 additions & 3 deletions src/collective/roster/behaviors/interfaces.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,26 @@

from collective.roster import _

from collective.roster.behaviors.widgets import ShortNumberFieldWidget
import re


class InvalidEmailAddress(ValidationError):
"""Invalid email address.
"""


class InvalidShortNumber(ValidationError):
"""Invalid short number.
"""


def checkShortNumber(value):
if value < 999 or value > 9999:
raise InvalidShortNumber(value)
return True


def isEmailAddress(value):
try:
checkEmailAddress(value)
Expand Down Expand Up @@ -62,12 +76,14 @@ class IContactInfo(form.Schema):

phone_number = schema.TextLine(
title=_(u"Phone"),
required=False
required=False,
)

short_number = schema.TextLine(
form.widget(short_number=ShortNumberFieldWidget)
short_number = schema.Int(
title=_(u"Short number"),
required=False
required=False,
constraint=checkShortNumber
)

form.fieldset(
Expand Down
29 changes: 29 additions & 0 deletions src/collective/roster/behaviors/widgets.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# -*- coding: utf-8 -*-

from five import grok
from zope.schema.interfaces import IInt
from z3c.form.widget import FieldWidget
from z3c.form.interfaces import IDataConverter
from z3c.form.browser.text import TextWidget
from z3c.form.converter import IntegerDataConverter


class ShortNumberWidget(TextWidget):
""" Widget for displaying short numbers properly """


def ShortNumberFieldWidget(field, request):
return FieldWidget(field, ShortNumberWidget(request))


class ShortNumberDataConverter(IntegerDataConverter, grok.MultiAdapter):
grok.provides(IDataConverter)
grok.adapts(IInt, ShortNumberWidget)

def toWidgetValue(self, value):
""" Adapts value to widget value without localized formatting """

if value is self.field.missing_value:
return u''

return unicode(value)

0 comments on commit b551473

Please sign in to comment.