def handleApply(self, action):
        data, errors = self.extractData()
        typestool = getToolByName(self.context, 'portal_types')
        # wftool = getToolByName(self.context, 'portal_workflow')
        plone_utils = getToolByName(self.context, 'plone_utils')
        # if not self.context.has_key('registrations'):
        if 'registrations' not in self.context:
            unrestrictedExec(
                typestool.constructContent,
                type_name='Folder',
                container=self.context,
                id='registrations'
            )
            unrestrictedExec(
                self.context['registrations'].setTitle,
                'Registrations'
            )
            cschema = self.context['registrations'].Schema()
            cschema['excludeFromNav'].set(
                self.context['registrations'],
                True
            )
            self.context['registrations'].reindexObject()
        container = self.context['registrations']
        identifier = str(len(container.keys()) + 1)

        unrestrictedExec(
            typestool.constructContent,
            type_name='BarcampParticipant',
            container=container,
            id=identifier,
            **data
        )
        plone_utils.addPortalMessage(
            _(u'Thank you for your submission. You are now registered'),
            'info'
        )
        self.request.response.redirect(self.context.absolute_url())
from zope.interface import implements

BarcampEventSchema = folder.ATFolderSchema.copy() + atapi.Schema(
    (
        # -*- Your Archetypes field definitions here ... -*-
        atapi.TextField(
            "text",
            required=False,
            searchable=True,
            storage=atapi.AnnotationStorage(),
            allowable_content_types=("text/plain", "text/structured", "text/html", "application/msword"),
            validators=("isTidyHtmlWithCleanup",),
            # validators=('isTidyHtml',),
            default_output_type="text/html",
            widget=atapi.RichWidget(description=_(u""), label=_(u"Body Text"), rows=25, allow_file_upload=False),
        ),
        atapi.DateTimeField(
            "startDate",
            required=True,
            searchable=False,
            storage=atapi.AnnotationStorage(),
            default_method=DateTime,
            widget=atapi.CalendarWidget(description="", label=_(u"Event Starts")),
        ),
        atapi.DateTimeField(
            "endDate",
            required=True,
            searchable=False,
            storage=atapi.AnnotationStorage(),
            default_method=DateTime,
from collective.barcamp import barcampMessageFactory as _
from collective.barcamp.unrestrictor import unrestrictedExec
from plone.i18n.normalizer.interfaces import IIDNormalizer
from plone.z3cform.layout import wrap_form

from z3c.form import button
from z3c.form import field
from z3c.form import form
from zope import interface
from zope import schema
from zope.component import queryUtility
from zope.schema.vocabulary import SimpleTerm
from zope.schema.vocabulary import SimpleVocabulary

LEVEL_VOCAB = SimpleVocabulary([
    SimpleTerm(value=u'beginner', title=_(u'Beginner')),
    SimpleTerm(value=u'intermediate', title=_(u'Intermediate')),
    SimpleTerm(value=u'advanced', title=_(u'Advanced'))
])

STYPE_VOCAB = SimpleVocabulary([
    SimpleTerm(value=u'talk', title=_(u'Talk')),
    SimpleTerm(value=u'hackfest', title=_(u'Hackfest')),
    SimpleTerm(value=u'workshop', title=_(u'Workshop')),
    SimpleTerm(value=u'discussion', title=_(u'Discussion'))
])


class ISessionSubmissionForm(interface.Interface):
    title = schema.TextLine(title=_(u'Title'))
    description = schema.Text(title=_(u'Description'), required=True)
from cioppino.twothumbs.interfaces import ILoveThumbsDontYou
# -*- Message Factory Imported Here -*-
from collective.barcamp import barcampMessageFactory as _
from collective.barcamp.config import PROJECTNAME
from collective.barcamp.interfaces import IBarcampSession
from zope.interface import implements

BarcampSessionSchema = ATEventSchema.copy() + atapi.Schema((

    # -*- Your Archetypes field definitions here ... -*-
    atapi.StringField(
        'speaker',
        storage=atapi.AnnotationStorage(),
        widget=atapi.StringWidget(
            label=_(u'Speaker'),
        ),
    ),
    atapi.StringField(
        'level',
        storage=atapi.AnnotationStorage(),
        widget=atapi.SelectionWidget(
            format='select',
            label=_(u'Level'),
        ),
        vocabulary=[_(u'Beginner'), _(u'Intermediate'), _(u'Advanced')]
    ),
    atapi.StringField(
        'session_type',
        storage=atapi.AnnotationStorage(),
        widget=atapi.SelectionWidget(