class IReservation(Interface): """ A reservation of an allocation (may be pending or approved). """ id = schema.Int(title=_(u'Id'), default=-1, required=False) day = schema.Date(title=_(u'Day'), required=False) start_time = schema.Time(title=_(u'Start'), required=False) end_time = schema.Time(title=_(u'End'), required=False) quota = schema.Int(title=_(u'Reservation Quota'), required=False, default=1) email = EmailField(title=_(u'Email'), required=True) description = schema.TextLine( title=_(u'Description'), description=_('Visible on the calendar'), required=False, ) recurrence = schema.Text( title=_(u'Recurrence'), required=False, )
class ISearchAndReserveForm(model.Schema): """ Search form for search & reserve view. """ form.mode(timeframes='hidden') timeframes = schema.Text(title=_(u'Timeframes'), default=u'', required=False) recurrence_start = schema.Date(title=_(u"Start date"), required=True) recurrence_end = schema.Date(title=_(u"End date"), required=True) whole_day = schema.Bool(title=_(u"Whole day"), required=False, default=False) start_time = schema.Time(title=_(u"Start time"), required=False) end_time = schema.Time(title=_(u"End time"), required=False) form.widget(days=CheckBoxFieldWidget) days = schema.List(title=_(u"Days"), value_type=schema.Choice(vocabulary=weekdays), required=False) minspots = schema.Int(title=_(u"Spots"), required=False) available_only = schema.Bool(title=_(u"Available only"), required=False, default=True)
class ISelectionReservation(Interface): """ A reservation of a selected number of allocations. """ # hidden ids = schema.TextLine( title=_(u'Ids'), required=False ) start_time = schema.Time( title=_(u'Start'), required=False ) end_time = schema.Time( title=_(u'End'), required=False ) quota = schema.Int( title=_(u'Number of Reservations'), required=False, default=1 ) email = Email( title=_(u'Email'), required=True )
class IReservationEditTimeForm(IReservationTargetForm): start_time = schema.Time( title=_(u'Start'), required=True ) end_time = schema.Time( title=_(u'End'), required=True ) send_email = schema.Bool( title=_(u"Send Email"), description=_( u"Send an email to the reservee informing him of the change" ), default=True ) reason = schema.Text( title=_(u'Reason'), description=_( u"Optional reason for the change. Sent to the reservee. " u"e.g. 'Your reservation has to be adjusted because the meeting " "room has been flooded.'" ), required=False )
class IReservation(Interface): """ A reservation of an allocation (may be pending or approved). """ id = schema.Int( title=_(u'Id'), default=-1, required=False ) day = schema.Date( title=_(u'Day'), required=False ) start_time = schema.Time( title=_(u'Start'), required=False ) end_time = schema.Time( title=_(u'End'), required=False ) quota = schema.Int( title=_(u'Number of Reservations'), required=False, default=1 ) email = Email( title=_(u'Email'), required=True )
class IDateAndTimeSchema(form.Schema): form.primary('datetime') zope_datetime = schema.Datetime(title=u'Zope Datetime') datetime = schema.Datetime(title=u'Datetime') date = schema.Date(title=u'Date') time = schema.Time(title=u'Time')
class IRequestForm(interface.Interface): rf_title = schema.TextLine(title=u"Title of Event", required=True) rf_sponsor = schema.TextLine(title=u"Sponsoring Department/Faculty", required=False) # Event Date, Time and Location rf_esd = schema.Date(title=u"Event Start Date", required=True) rf_eed = schema.Date(title=u"Event End Date", required=True) rf_start_time = schema.Time(title=u"Start Time", required=False) rf_end_time = schema.Time(title=u"End Time", required=False) rf_number_of_attendees = schema.TextLine(title=u"Number of Attendees", required=False) rf_rooms_used = schema.TextLine(title=u"Rooms Used", required=False) # Contact Information rf_contact_phone = schema.TextLine(title=u"Contact Phone", required=False) rf_contact_fax = schema.TextLine(title=u"Contact Fax", required=False) rf_contact_email = schema.TextLine(title=u"Contact Email", required=False) rf_contact_street_address = schema.TextLine( title=u"Contact Street Address", required=False) rf_contact_city = schema.TextLine(title=u"Contact City", required=False) rf_contact_state = schema.TextLine(title=u"Contact State", required=False) rf_contact_zip = schema.TextLine(title=u"Contact Zip", required=False) # Payment Information # this is 1 to 1'd only for the sake of capturing the data we need # this is not enabled and should never be activated in this current manner # Chartfield # Type of Card # Card Number # Security Code # Additional Information rf_url_info = schema.URI(title=u"URL with more info", required=False) rf_vips_attending = schema.TextLine(title=u"VIPs in attendance", required=False) rf_vips_name = schema.TextLine(title=u"Name of VIPs", required=False) rf_special_instructions = schema.TextLine(title=u"Special Instructions", required=False)
class IDXItemSchema(Schema): bool_field = schema.Bool(title=u'Bool Field', default=False) choice_field = schema.Choice(title=u'Choice Field', vocabulary=COLORS) date_field = schema.Date(title=u'Date Field') datetime_field = schema.Datetime(title=u'Datetime Field') decimal_field = schema.Decimal(title=u'Float Field') dottedname_field = schema.URI(title=u'DottedName Field') file_field = NamedFile(title=u'File Field') float_field = schema.Float(title=u'Float Field') image_field = NamedImage(title=u'Image Field') list_field = schema.List(title=u'List Field') richtext_field = RichText(title=u'Rich Text Field') text_field = schema.Text(title=u'Text Field') time_field = schema.Time(title=u'Time Field') timedelta_field = schema.Timedelta(title=u'Timedelta Field') uri_field = schema.URI(title=u'URI Field')
class ISchedule(model.Schema): title = schema.TextLine( title=(u'Semester'), description=(u'Ex: Fall Semester'), required=True, ) testDate = schema.Time( title=u'This is a Timedelta field', required=False ) # Data grid for Daytime Course requests form.widget(dayCourses=DataGridFieldFactory) dayCourses = schema.List( title=(u'Please submit your requests for daytime courses'), value_type=DictRow( title=(u'Courses'), schema=ICourses ), required=False, )
def test_all(self): mapping = [ (schema.Object(schema=IResource), serialize_schema_field.DefaultSchemaFieldSerializer), (schema.Text(), serialize_schema_field.DefaultTextSchemaFieldSerializer), (schema.TextLine(), serialize_schema_field.DefaultTextLineSchemaFieldSerializer), (schema.Float(), serialize_schema_field.DefaultFloatSchemaFieldSerializer), (schema.Int(), serialize_schema_field.DefaultIntSchemaFieldSerializer), (schema.Bool(), serialize_schema_field.DefaultBoolSchemaFieldSerializer), (schema.List(), serialize_schema_field.DefaultCollectionSchemaFieldSerializer), (schema.Choice(values=('one', 'two')), serialize_schema_field.DefaultChoiceSchemaFieldSerializer), (schema.Object(schema=IResource), serialize_schema_field.DefaultObjectSchemaFieldSerializer), (RichText(), serialize_schema_field.DefaultRichTextSchemaFieldSerializer), (schema.Date(), serialize_schema_field.DefaultDateSchemaFieldSerializer), (schema.Time(), serialize_schema_field.DefaultTimeSchemaFieldSerializer), (schema.Dict(), serialize_schema_field.DefaultDictSchemaFieldSerializer), (schema.Datetime(), serialize_schema_field.DefaultDateTimeSchemaFieldSerializer), ] root = self.layer.new_root() site = root['plone'] for field, klass in mapping: adapter = getMultiAdapter((field, site, self.request), interface=ISchemaFieldSerializeToJson) self.assertTrue(isinstance(adapter, klass))
class IDXTestDocumentSchema(model.Schema): # zope.schema fields test_ascii_field = schema.ASCII(required=False) test_asciiline_field = schema.ASCIILine(required=False) test_bool_field = schema.Bool(required=False) test_bytes_field = schema.Bytes(required=False) test_bytesline_field = schema.BytesLine(required=False) test_choice_field = schema.Choice(values=[u"foo", u"bar"], required=False) test_choice_field_with_vocabulary = schema.Choice( vocabulary=SimpleVocabulary([ SimpleTerm(u"value1", "token1", u"title1"), SimpleTerm(u"value2", "token2", u"title2"), ]), required=False, ) test_date_field = schema.Date(required=False) test_datetime_field = schema.Datetime(required=False) test_datetime_tz_field = schema.Datetime( required=False, defaultFactory=lambda: timezone("Europe/Zurich").localize( datetime(2017, 10, 31, 10, 0)), ) test_decimal_field = schema.Decimal(required=False) test_dict_field = schema.Dict(required=False) test_float_field = schema.Float(required=False) test_frozenset_field = schema.FrozenSet(required=False) test_int_field = schema.Int(required=False) test_list_field = schema.List(required=False) test_list_field_with_choice_with_vocabulary = schema.List( value_type=schema.Choice(vocabulary=SimpleVocabulary([ SimpleTerm(u"value1", "token1", u"title1"), SimpleTerm(u"value2", "token2", u"title2"), SimpleTerm(u"value3", "token3", u"title3"), ])), required=False, ) test_set_field = schema.Set(required=False) test_text_field = schema.Text(required=False) test_textline_field = schema.TextLine(required=False) test_time_field = schema.Time(required=False) test_timedelta_field = schema.Timedelta(required=False) test_tuple_field = schema.Tuple(required=False) test_nested_list_field = schema.List(required=False, value_type=schema.Tuple()) test_nested_dict_field = schema.Dict(required=False, key_type=schema.ASCIILine(), value_type=schema.Tuple()) test_list_choice_with_context_vocabulary_field = schema.List( title=u"Field", value_type=schema.Choice( vocabulary="plone.restapi.testing.context_vocabulary"), required=False, ) # plone.app.textfield test_richtext_field = RichText( required=False, allowed_mime_types=["text/html", "text/plain"]) # plone.namedfile fields test_namedfile_field = namedfile.NamedFile(required=False) test_namedimage_field = namedfile.NamedImage(required=False) test_namedblobfile_field = namedfile.NamedBlobFile(required=False) test_namedblobimage_field = namedfile.NamedBlobImage(required=False) # z3c.relationfield test_relationchoice_field = RelationChoice( required=False, source=CatalogSource(id=["doc1", "doc2"])) test_relationlist_field = RelationList( required=False, value_type=RelationChoice(vocabulary="plone.app.vocabularies.Catalog"), ) # Test fields for validation test_required_field = schema.TextLine(required=True) test_readonly_field = schema.TextLine(required=False, readonly=True) test_maxlength_field = schema.TextLine(required=False, max_length=10) test_constraint_field = schema.TextLine(required=False, constraint=lambda x: u"00" in x) test_datetime_min_field = schema.Datetime(required=False, min=datetime(2000, 1, 1)) test_time_min_field = schema.Time(required=False, min=time(1)) test_timedelta_min_field = schema.Timedelta(required=False, min=timedelta(100)) test_list_value_type_field = schema.List(required=False, value_type=schema.Int()) test_dict_key_type_field = schema.Dict(required=False, key_type=schema.Int()) read_permission(test_read_permission_field="cmf.ManagePortal") test_read_permission_field = schema.TextLine(required=False) write_permission(test_write_permission_field="cmf.ManagePortal") test_write_permission_field = schema.TextLine(required=False) read_permission(test_read_permission_field="cmf.ManagePortal") test_read_permission_field = schema.TextLine(required=False) test_invariant_field1 = schema.TextLine(required=False) test_invariant_field2 = schema.TextLine(required=False) test_missing_value_field = schema.TextLine(required=False, missing_value=u"missing", default=u"default") test_missing_value_required_field = schema.TextLine( required=True, missing_value=u"missing", default=u"some value") @invariant def validate_same_value(data): if data.test_invariant_field1 != data.test_invariant_field2: raise Invalid(u"Must have same values") # Test fields with default values test_default_value_field = schema.TextLine(required=True, default=u"Default") @provider(IContextAwareDefaultFactory) def default_factory(context): return u"DefaultFactory" test_default_factory_field = schema.TextLine( required=True, defaultFactory=default_factory)
class IReserve(form.Schema): """ Reserve Folder for Events """ frequency = schema.Choice( title=_(u"Frequência"), description=_(u"Informe a frequência com que os eventos ocorrem."), values=['semanal', 'quinzenal', 'mensal'], default=_(u"semanal"), ) local = schema.TextLine( title=_(u"Local"), description=_(u"Informe o local onde os eventos deverão ocorrer."), ) duration = schema.Time( title=_(u"Duração"), description=_( u"Informe a duração dos eventos. Ex.: 01:00 (uma hora)."), ) contact = schema.TextLine( title=_(u"Contato"), description= _(u"Insira o email do usuário que vai receber notificações das reservas efetuadas." ), required=False, ) form.widget(additional_items=DataGridFieldFactory) additional_items = schema.List( title=u"Itens da reserva corporativa", description=_( u"Informe os itens que podem conter na reserva corporativa."), required=False, value_type=DictRow(title=u"Itens", schema=ITableRowSchema)) mult_horarios = schema.Bool( title=_(u"Permitir mais de um horário"), description= _(u"Selecione se essa reserva irá permitir que o usuário selecione mais de um horário por reserva." ), required=False, ) recurrent = schema.Bool( title=_(u"Permitir agendamento recorrente"), description= _(u"Selecione se essa reserva irá permitir que o usuário um agendamento recorrente nessa reserva." ), required=False, ) replic_semana = schema.Bool( title=_(u"Replicar na semana"), description= _(u"Selecione esta opção caso haja reservas disponíveis para todos os dias da semana, informando nos campos abaixo os horários de inicio e término.\ Caso não deseje esta opção desconsidere os dois próximos campos abaixo." ), required=False, ) replic_start = schema.Time( title=_(u"Hora que começa (Replicar na semana)"), required=False, ) replic_end = schema.Time( title=_(u"Hora que termina (Replicar na semana)"), required=False, ) # Monday monday = schema.Bool( title=_(u"Segunda"), description= _(u"Selecione a opção caso haja reservas disponíveis nas segundas e indique os horários de início e término." ), ) mon_start = schema.Time( title=_(u"Hora que começa"), required=False, ) mon_end = schema.Time( title=_(u"Hora que termina"), required=False, ) # Tuesday tuesday = schema.Bool( title=_(u"Terça"), description= _(u"Selecione a opção caso haja reservas disponíveis nas terças e indique os horários de início e término." ), default=False) tue_start = schema.Time( title=_(u"Hora que começa"), required=False, ) tue_end = schema.Time( title=_(u"Hora que termina"), required=False, ) # Wednesday wednesday = schema.Bool( title=_(u"Quarta"), description= _(u"Selecione a opção caso haja reservas disponíveis nas quartas e indique os horários de início e término." ), default=False) wed_start = schema.Time( title=_(u"Hora que começa"), required=False, ) wed_end = schema.Time( title=_(u"Hora que termina"), required=False, ) # Thursday thursday = schema.Bool( title=_(u"Quinta"), description= _(u"Selecione a opção caso haja reservas disponíveis nas quintas e indique os horários de início e término." ), default=False) thu_start = schema.Time( title=_(u"Hora que começa"), required=False, ) thu_end = schema.Time( title=_(u"Hora que termina"), required=False, ) # Friday friday = schema.Bool( title=_(u"Sexta"), description= _(u"Selecione a opção caso haja reservas disponíveis nas sextas e indique os horários de início e término." ), default=False) fri_start = schema.Time( title=_(u"Hora que começa"), required=False, ) fri_end = schema.Time( title=_(u"Hora que termina"), required=False, ) # Saturday saturday = schema.Bool( title=_(u"Sábado"), description= _(u"Selecione a opção caso haja reservas disponíveis nos sábados e indique os horários de início e término." ), default=False) sat_start = schema.Time( title=_(u"Hora que começa"), required=False, ) sat_end = schema.Time( title=_(u"Hora que termina"), required=False, ) # Sunday sunday = schema.Bool( title=_(u"Domingo"), description= _(u"Selecione a opção caso haja reservas disponíveis nos domingos e indique os horários de início e término." ), default=False) sun_start = schema.Time( title=_(u"Hora que começa"), required=False, ) sun_end = schema.Time( title=_(u"Hora que termina"), required=False, ) obj_contentcore = RelationChoice( title=_(u"Vincular com um formulario basico"), description=_( u"Selecione o objeto de formulario para ser exibido com a reserva" ), source=ObjPathSourceBinder(review_state='published'), required=False, ) form.fieldset('Horarios', fields=[ 'monday', 'mon_start', 'mon_end', 'tuesday', 'tue_start', 'tue_end', 'wednesday', 'wed_start', 'wed_end', 'thursday', 'thu_start', 'thu_end', 'friday', 'fri_start', 'fri_end', 'saturday', 'sat_start', 'sat_end', 'sunday', 'sun_start', 'sun_end' ]) form.fieldset('Avançado', fields=['additional_items', 'recurrent', 'obj_contentcore'])
class IDXTestDocumentSchema(model.Schema): # zope.schema fields test_ascii_field = schema.ASCII(required=False) test_asciiline_field = schema.ASCIILine(required=False) test_bool_field = schema.Bool(required=False) test_bytes_field = schema.Bytes(required=False) test_bytesline_field = schema.BytesLine(required=False) test_choice_field = schema.Choice(values=[u'foo', u'bar'], required=False) test_date_field = schema.Date(required=False) test_datetime_field = schema.Datetime(required=False) test_datetime_tz_field = schema.Datetime( required=False, defaultFactory=lambda: timezone("Europe/Zurich").localize( datetime(2017, 10, 31, 10, 0))) test_decimal_field = schema.Decimal(required=False) test_dict_field = schema.Dict(required=False) test_float_field = schema.Float(required=False) test_frozenset_field = schema.FrozenSet(required=False) test_int_field = schema.Int(required=False) test_list_field = schema.List(required=False) test_set_field = schema.Set(required=False) test_text_field = schema.Text(required=False) test_textline_field = schema.TextLine(required=False) test_time_field = schema.Time(required=False) test_timedelta_field = schema.Timedelta(required=False) test_tuple_field = schema.Tuple(required=False) test_nested_list_field = schema.List( required=False, value_type=schema.Tuple()) test_nested_dict_field = schema.Dict( required=False, key_type=schema.ASCIILine(), value_type=schema.Tuple()) test_list_choice_with_context_vocabulary_field = schema.List( title=u'Field', value_type=schema.Choice( vocabulary='plone.restapi.testing.context_vocabulary'), required=False) # plone.app.textfield test_richtext_field = RichText( required=False, allowed_mime_types=['text/html', 'text/plain']) # plone.namedfile fields test_namedfile_field = namedfile.NamedFile(required=False) test_namedimage_field = namedfile.NamedImage(required=False) test_namedblobfile_field = namedfile.NamedBlobFile(required=False) test_namedblobimage_field = namedfile.NamedBlobImage(required=False) # z3c.relationfield test_relationchoice_field = RelationChoice( required=False, source=CatalogSource(id=['doc1', 'doc2'])) test_relationlist_field = RelationList( required=False, value_type=RelationChoice( vocabulary="plone.app.vocabularies.Catalog")) # Test fields for validation test_required_field = schema.TextLine(required=True) test_readonly_field = schema.TextLine(required=False, readonly=True) test_maxlength_field = schema.TextLine(required=False, max_length=10) test_constraint_field = schema.TextLine(required=False, constraint=lambda x: u'00' in x) test_datetime_min_field = schema.Datetime(required=False, min=datetime(2000, 1, 1)) test_time_min_field = schema.Time(required=False, min=time(1)) test_timedelta_min_field = schema.Timedelta(required=False, min=timedelta(100)) test_list_value_type_field = schema.List(required=False, value_type=schema.Int()) test_dict_key_type_field = schema.Dict(required=False, key_type=schema.Int()) read_permission(test_read_permission_field='cmf.ManagePortal') test_read_permission_field = schema.TextLine(required=False) write_permission(test_write_permission_field='cmf.ManagePortal') test_write_permission_field = schema.TextLine(required=False) read_permission(test_read_permission_field='cmf.ManagePortal') test_read_permission_field = schema.TextLine(required=False) test_invariant_field1 = schema.TextLine(required=False) test_invariant_field2 = schema.TextLine(required=False) @invariant def validate_same_value(data): if data.test_invariant_field1 != data.test_invariant_field2: raise Invalid(u'Must have same values') # Test fields with default values test_default_value_field = schema.TextLine( required=True, default=u'Default') @provider(IContextAwareDefaultFactory) def default_factory(context): return u'DefaultFactory' test_default_factory_field = schema.TextLine( required=True, defaultFactory=default_factory)
class IExample(model.Schema): """Dexterity-Schema with all field-types.""" # The most used fields # textline, text, bool, richtext, email fieldset( "numberfields", label=u"Number fields", fields=("int_field", "float_field"), ) fieldset( "datetimefields", label=u"Date and time fields", fields=( "datetime_field", "date_field", "time_field", "timedelta_field", ), ) fieldset( "choicefields", label=u"Choice and Multiple Choice fields", fields=( "choice_field", "choice_field_radio", "choice_field_select", "choice_field_voc", "list_field", "list_field_checkbox", "list_field_select", "list_field_voc_unconstrained", "tuple_field", "set_field", "set_field_checkbox", ), ) fieldset( "relationfields", label=u"Relation fields", fields=( "relationchoice_field", "relationlist_field", "relationchoice_field_constrained", "relationlist_field_constrained", "relationlist_field_search_mode", "relationchoice_field_select", "relationchoice_field_radio", "relationlist_field_select", "relationlist_field_checkbox", "relationchoice_field_ajax_select", "relationlist_field_ajax_select", ), ) fieldset( "uuidrelationfields", label=u"Relation widgets with uuids", fields=( "uuid_choice_field", "uuid_list_field", "uuid_choice_field_constrained", "uuid_list_field_constrained", "uuid_list_field_search_mode", "uuid_choice_field_select", "uuid_choice_field_radio", "uuid_list_field_select", "uuid_list_field_checkbox", "uuid_choice_field_ajax_select", "uuid_list_field_ajax_select", ), ) fieldset( "filefields", label=u"File fields", fields=("file_field", "image_field"), ) fieldset( "otherfields", label=u"Other fields", fields=( "uri_field", "sourcetext_field", "ascii_field", "bytesline_field", "asciiline_field", "pythonidentifier_field", "dottedname_field", # 'dict_field', # "vocabularyterms_field", # "vocabularytermstranslation_field", # 'dict_field_with_choice', ), ) fieldset( "datagrid", label=u"Datagrid field", fields=("datagrid_field", ), ) primary("title") title = schema.TextLine( title=u"Primary Field (Textline)", description=u"zope.schema.TextLine", required=True, ) description = schema.TextLine( title=u"Description (Textline)", description=u"zope.schema.TextLine", required=False, ) text_field = schema.Text( title=u"Text Field", description=u"zope.schema.Text", required=False, missing_value=u"", ) textline_field = schema.TextLine( title=u"Textline field", description=u"A simple input field (schema.TextLine)", required=False, ) bool_field = schema.Bool( title=u"Boolean field", description=u"zope.schema.Bool", required=False, ) choice_field = schema.Choice( title=u"Choice field", description=u"zope.schema.Choice", values=[u"One", u"Two", u"Three"], required=True, ) directives.widget(choice_field_radio=RadioFieldWidget) choice_field_radio = schema.Choice( title=u"Choice field with radio boxes", description=u"zope.schema.Choice", values=[u"One", u"Two", u"Three"], required=False, ) choice_field_voc = schema.Choice( title=u"Choicefield with values from named vocabulary", description=u"zope.schema.Choice", vocabulary="plone.app.vocabularies.PortalTypes", required=False, ) directives.widget(choice_field_select=SelectFieldWidget) choice_field_select = schema.Choice( title=u"Choicefield with select2 widget", description=u"zope.schema.Choice", vocabulary="plone.app.vocabularies.PortalTypes", required=False, ) list_field = schema.List( title=u"List field", description=u"zope.schema.List", value_type=schema.Choice( values=[u"Beginner", u"Advanced", u"Professional"], ), required=False, missing_value=[], ) directives.widget(list_field_checkbox=CheckBoxFieldWidget) list_field_checkbox = schema.List( title=u"List field with checkboxes", description=u"zope.schema.List", value_type=schema.Choice( values=[u"Beginner", u"Advanced", u"Professional"], ), required=False, missing_value=[], ) directives.widget(list_field_select=SelectFieldWidget) list_field_select = schema.List( title=u"List field with select widget", description=u"zope.schema.List", value_type=schema.Choice( values=[u"Beginner", u"Advanced", u"Professional"], ), required=False, missing_value=[], ) list_field_voc_unconstrained = schema.List( title= u"List field with values from vocabulary but not constrained to them.", description=u"zope.schema.List", value_type=schema.TextLine(), required=False, missing_value=[], ) directives.widget( "list_field_voc_unconstrained", AjaxSelectFieldWidget, vocabulary="plone.app.vocabularies.PortalTypes", pattern_options={ "closeOnSelect": False, # Select2 option to leave dropdown open for multiple selection }, ) tuple_field = schema.Tuple( title=u"Tuple field", description=u"zope.schema.Tuple", value_type=schema.Choice( values=[u"Beginner", u"Advanced", u"Professional"], ), required=False, missing_value=(), ) set_field = schema.Set( title=u"Set field", description=u"zope.schema.Set", value_type=schema.Choice( values=[u"Beginner", u"Advanced", u"Professional"], ), required=False, missing_value={}, ) directives.widget(set_field_checkbox=CheckBoxFieldWidget) set_field_checkbox = schema.Set( title=u"Set field with checkboxes", description=u"zope.schema.Set", value_type=schema.Choice( values=[u"Beginner", u"Advanced", u"Professional"], ), required=False, missing_value={}, ) # File fields image_field = NamedBlobImage( title=u"Image field", description= u"A upload field for images (plone.namedfile.field.NamedBlobImage)", required=False, ) file_field = NamedBlobFile( title=u"File field", description= u"A upload field for files (plone.namedfile.field.NamedBlobFile)", required=False, ) # Date and Time fields datetime_field = schema.Datetime( title=u"Datetime field", description=u"Uses a date and time picker (zope.schema.Datetime)", required=False, ) date_field = schema.Date( title=u"Date field", description=u"Uses a date picker (zope.schema.Date)", required=False, ) time_field = schema.Time( title=u"Time field", description=u"zope.schema.Time", required=False, ) timedelta_field = schema.Timedelta( title=u"Timedelta field", description=u"zope.schema.Timedelta", required=False, ) # Relation Fields relationchoice_field = RelationChoice( title=u"Relationchoice field", description=u"z3c.relationfield.schema.RelationChoice", vocabulary="plone.app.vocabularies.Catalog", required=False, ) relationlist_field = RelationList( title=u"Relationlist Field", description=u"z3c.relationfield.schema.RelationList", default=[], value_type=RelationChoice(vocabulary="plone.app.vocabularies.Catalog"), required=False, missing_value=[], ) relationchoice_field_constrained = RelationChoice( title=u"Relationchoice field (only allows Documents)", description=u"z3c.relationfield.schema.RelationChoice", vocabulary="plone.app.vocabularies.Catalog", required=False, ) directives.widget( "relationchoice_field_constrained", RelatedItemsFieldWidget, pattern_options={"selectableTypes": ["Document"]}, ) relationlist_field_constrained = RelationList( title=u"Relationlist Field (only allows Documents and Events)", description=u"z3c.relationfield.schema.RelationList", default=[], value_type=RelationChoice(vocabulary="plone.app.vocabularies.Catalog"), required=False, missing_value=[], ) directives.widget( "relationlist_field_constrained", RelatedItemsFieldWidget, pattern_options={"selectableTypes": ["Document", "Event"]}, ) relationlist_field_search_mode = RelationList( title= u"Relationlist Field in Search Mode (constrained to published Documents and Events)", description=u"z3c.relationfield.schema.RelationList", default=[], value_type=RelationChoice(source=CatalogSource( portal_type=["Document", "Event"], review_state="published")), required=False, missing_value=[], ) directives.widget( "relationlist_field_search_mode", RelatedItemsFieldWidget, pattern_options={ "baseCriteria": [ # This is a optimization that limits the catalog-query { "i": "portal_type", "o": "plone.app.querystring.operation.selection.any", "v": ["Document", "Event"], }, { "i": "review_state", "o": "plone.app.querystring.operation.selection.any", "v": "published", }, ], "mode": "search", }, ) # From here on we use other widgets than the default RelatedItemsFieldWidget # This one also works in Volto! # All other options use the default ObjectWidget in Volto so far. relationchoice_field_select = RelationChoice( title=u"RelationChoice with Select Widget", vocabulary=StaticCatalogVocabulary({ "portal_type": ["Document", "Event"], "review_state": "published", }), required=False, ) directives.widget( "relationchoice_field_select", SelectFieldWidget, ) relationchoice_field_radio = RelationChoice( title= u"RelationChoice with Radio Widget (and customized title-template)", vocabulary=StaticCatalogVocabulary( { "portal_type": ["Document", "Event"], "review_state": "published", }, title_template="{brain.Title}", ), # Set a custom vocabulary item title required=False, ) directives.widget( "relationchoice_field_radio", RadioFieldWidget, ) relationlist_field_select = RelationList( title= u"RelationList with select widget with items from a named vocabulary", value_type=RelationChoice( vocabulary="example.vocabularies.documents", ), required=False, ) directives.widget( "relationlist_field_select", SelectFieldWidget, pattern_options={ "closeOnSelect": False, # Select2 option to leave dropdown open for multiple selection }, ) relationlist_field_checkbox = RelationList( title=u"RelationList with Checkboxes", value_type=RelationChoice( vocabulary="example.vocabularies.documents", ), required=False, ) directives.widget( "relationlist_field_checkbox", CheckBoxFieldWidget, ) relationchoice_field_ajax_select = RelationChoice( title=u"Relationchoice Field with AJAXSelect", description=u"z3c.relationfield.schema.RelationChoice", vocabulary=StaticCatalogVocabulary({ "portal_type": ["Document", "Event"], }), required=False, ) directives.widget( "relationchoice_field_ajax_select", AjaxSelectFieldWidget, vocabulary=StaticCatalogVocabulary({ "portal_type": ["Document", "Event"], }), pattern_options={ # Options for Select2 "minimumInputLength": 2, # - Don't query until at least two characters have been typed "ajax": { "quietMillis": 500 }, # - Wait 500ms after typing to make query }, ) relationlist_field_ajax_select = RelationList( title=u"Relationlist Field with AJAXSelect", description=u"z3c.relationfield.schema.RelationList", value_type=RelationChoice(vocabulary=StaticCatalogVocabulary({ "portal_type": ["Document", "Event"], "review_state": "published", })), required=False, ) directives.widget( "relationlist_field_ajax_select", AjaxSelectFieldWidget, vocabulary=StaticCatalogVocabulary( { "portal_type": ["Document", "Event", "Folder"], }, title_template="{brain.Type}: {brain.Title} at {path}", ), # Custom item rendering pattern_options={ # Options for Select2 "minimumInputLength": 2, # - Don't query until at least two characters have been typed "ajax": { "quietMillis": 500 }, # - Wait 500ms after typing to make query }, ) # These look like relationsfields (see above) but only store the uuid(s) of the selected target # as a string in a the field instead of a RelationValue. # A good way to use these is in combination with a index that allows you to query these connenctions. uuid_choice_field = schema.Choice( title=u"Choice field with RelatedItems widget storing uuids", description=u"schema.Choice", vocabulary="plone.app.vocabularies.Catalog", required=False, ) directives.widget("uuid_choice_field", RelatedItemsFieldWidget) uuid_list_field = schema.List( title=u"List Field with RelatedItems widget storing uuids", description=u"schema.List", default=[], value_type=schema.Choice(vocabulary="plone.app.vocabularies.Catalog"), required=False, missing_value=[], ) directives.widget("uuid_list_field", RelatedItemsFieldWidget) uuid_choice_field_constrained = schema.Choice( title= u"Choice field with RelatedItems widget storing uuids (only allows Documents)", description=u"schema.Choice", vocabulary="plone.app.vocabularies.Catalog", required=False, ) directives.widget( "uuid_choice_field_constrained", RelatedItemsFieldWidget, pattern_options={"selectableTypes": ["Document"]}, ) uuid_list_field_constrained = schema.List( title= u"List Field with RelatedItems widget storing uuids (only allows Documents and Events)", description=u"schema.List", default=[], value_type=schema.Choice(vocabulary="plone.app.vocabularies.Catalog"), required=False, missing_value=[], ) directives.widget( "uuid_list_field_constrained", RelatedItemsFieldWidget, pattern_options={"selectableTypes": ["Document", "Folder"]}, ) uuid_list_field_search_mode = schema.List( title= u"List Field with RelatedItems widget in Search Mode storing uuids", description=u"schema.List", default=[], value_type=schema.Choice(source=CatalogSource( portal_type=["Document", "Event"], review_state="published")), required=False, missing_value=[], ) directives.widget( "uuid_list_field_search_mode", RelatedItemsFieldWidget, pattern_options={ "selectableTypes": ["Document", "Folder"], "basePath": "", # Start the search at the portal root "mode": "search", }, ) # From here on we use other widgets than the default RelatedItemsFieldWidget uuid_choice_field_select = schema.Choice( title=u"UUID Choice with select widget storing uuids", vocabulary=StaticCatalogVocabulary({ "portal_type": ["Document", "Event"], "review_state": "published", }), required=False, ) directives.widget( "uuid_choice_field_select", SelectFieldWidget, ) uuid_choice_field_radio = schema.Choice( title=u"RelationChoice with Radio widget storing uuids", vocabulary=StaticCatalogVocabulary( { "portal_type": ["Document", "Event"], "review_state": "published", }, title_template="{brain.Title}", ), # Set a custom vocabulary item title required=False, ) directives.widget( "uuid_choice_field_radio", RadioFieldWidget, ) uuid_list_field_select = schema.List( title= u"RelationList with select widget with items from a named vocabulary storing uuids", value_type=schema.Choice( vocabulary="example.vocabularies.documents", ), required=False, ) directives.widget( "uuid_list_field_select", SelectFieldWidget, pattern_options={ "closeOnSelect": False, # Select2 option to leave dropdown open for multiple selection }, ) uuid_list_field_checkbox = schema.List( title=u"RelationList with Checkboxes storing uuids", value_type=schema.Choice( vocabulary="example.vocabularies.documents", ), required=False, ) directives.widget( "uuid_list_field_checkbox", CheckBoxFieldWidget, ) uuid_choice_field_ajax_select = schema.Choice( title=u"Relationchoice Field with AJAXSelect storing uuids", description=u"z3c.relationfield.schema.RelationChoice", vocabulary=StaticCatalogVocabulary({ "portal_type": ["Document", "Event"], }), required=False, ) directives.widget( "uuid_choice_field_ajax_select", AjaxSelectFieldWidget, vocabulary=StaticCatalogVocabulary({ "portal_type": ["Document", "Event"], }), pattern_options={ # Options for Select2 "minimumInputLength": 2, # - Don't query until at least two characters have been typed "ajax": { "quietMillis": 500 }, # - Wait 500ms after typing to make query }, ) uuid_list_field_ajax_select = schema.List( title=u"Relationlist Field with AJAXSelect storing uuids", description=u"z3c.relationfield.schema.RelationList", value_type=schema.Choice(vocabulary=StaticCatalogVocabulary({ "portal_type": ["Document", "Event"], "review_state": "published", })), required=False, ) directives.widget( "uuid_list_field_ajax_select", AjaxSelectFieldWidget, vocabulary=StaticCatalogVocabulary( { "portal_type": ["Document", "Event"], }, title_template="{brain.Type}: {brain.Title} at {path}", ), # Custom item rendering pattern_options={ # Options for Select2 "minimumInputLength": 2, # - Don't query until at least two characters have been typed "ajax": { "quietMillis": 500 }, # - Wait 500ms after typing to make query "closeOnSelect": False, # - Leave dropdown open for multiple selection }, ) # Number fields int_field = schema.Int( title=u"Integer Field (e.g. 12)", description=u"zope.schema.Int", required=False, ) float_field = schema.Float( title=u"Float field, e.g. 12.7", description=u"zope.schema.Float", required=False, ) # Text fields email_field = Email( title=u"Email field", description= u"A simple input field for a email (plone.schema.email.Email)", required=False, ) uri_field = schema.URI( title=u"URI field", description=u"A simple input field for a URLs (zope.schema.URI)", required=False, ) richtext_field = RichText( title=u"RichText field", description= u"This uses a richtext editor. (plone.app.textfield.RichText)", max_length=2000, required=False, ) sourcetext_field = schema.SourceText( title=u"SourceText field", description=u"zope.schema.SourceText", required=False, ) ascii_field = schema.ASCII( title=u"ASCII field", description=u"zope.schema.ASCII", required=False, ) bytesline_field = schema.BytesLine( title=u"BytesLine field", description=u"zope.schema.BytesLine", required=False, ) asciiline_field = schema.ASCIILine( title=u"ASCIILine field", description=u"zope.schema.ASCIILine", required=False, ) pythonidentifier_field = schema.PythonIdentifier( title=u"PythonIdentifier field", description=u"zope.schema.PythonIdentifier", required=False, ) dottedname_field = schema.DottedName( title=u"DottedName field", description=u"zope.schema.DottedName", required=False, ) # dict_field = schema.Dict( # title=u'Dict field', # description=u"zope.schema.Dict", # required=False, # key_type=schema.TextLine( # title=u'Key', # required=False, # ), # value_type=schema.TextLine( # title=u'Value', # required=False, # ), # ) # vocabularyterms_field = Dict( # we use the plone.schema field Dict not zope.schema field to use the attribute 'widget' # title=u"Vocabulary terms field", # description=u"plone.schema.Dict field with value_type schema.TextLine and frontend widget 'VocabularyTermsWidget'", # required=False, # key_type=schema.TextLine( # title=u"Key", # required=False, # ), # value_type=schema.TextLine( # title=u"Value", # required=False, # ), # widget="vocabularyterms", # we use the widget attribute to apply the frontend widget VocabularyWidget # ) # vocabularytermstranslation_field = Dict( # we use the plone.schema field Dict not zope.schema field to use the attribute 'widget' # title=u"Vocabulary terms field with translations", # description=u"plone.schema.Dict field with value_type Dict and frontend widget 'VocabularyTermsWidget'", # required=False, # key_type=schema.TextLine( # title=u"Key", # required=False, # ), # value_type=Dict( # we use the plone.schema field Dict not zope.schema field to use the attribute 'widget' # title=u"Term translation", # description=u"plone.schema.Dict field for translations of vocabulary term", # required=True, # key_type=schema.TextLine( # title=u"Key", # required=False, # ), # value_type=schema.TextLine( # title=u"Value", # required=False, # ), # ), # widget="vocabularyterms", # we use the widget attribute to apply the frontend widget VocabularyWidget # ) # dict_field_with_choice = schema.Dict( # title=u'Dict field with key and value as choice', # description=u"zope.schema.Dict", # required=False, # key_type=schema.Choice( # title=u'Key', # values=[u'One', u'Two', u'Three'], # required=False, # ), # value_type=schema.Set( # title=u'Value', # value_type=schema.Choice( # values=[u'Beginner', u'Advanced', u'Professional'], # ), # required=False, # missing_value={}, # ), # ) datagrid_field = schema.List( title=u"Datagrid field", description=u"schema.List", value_type=DictRow(title=u"Table", schema=IMyRowSchema), default=[], required=False, ) directives.widget("datagrid_field", DataGridFieldFactory)
class IAllocation(IResourceAllocationDefaults): """ An reservable time-slot within a calendar. """ id = schema.Int( title=_(u'Id'), default=-1, required=False, ) group = schema.Text(title=_(u'Recurrence'), default=u'', required=False) timeframes = schema.Text(title=_(u'Timeframes'), default=u'', required=False) start_time = schema.Time( title=_(u'Start'), description=_( u'Allocations may start every 5 minutes if the allocation ' u'is not partly available. If it is partly available the start ' u'time may be every x minute where x equals the given raster.')) end_time = schema.Time( title=_(u'End'), description=_( u'Allocations may end every 5 minutes if the allocation ' u'is not partly available. If it is partly available the start ' u'time may be every x minute where x equals the given raster. ' u'The minimum length of an allocation is also either 5 minutes ' u'or whatever the value of the raster is.')) whole_day = schema.Bool( title=_(u'Whole Day'), description=_(u'The allocation spans the whole day.'), required=False, default=False) recurrence = schema.Text( title=_(u'Recurrence'), required=False, ) day = schema.Date(title=_(u'Day'), ) days = schema.List(title=_(u'Days'), value_type=schema.Choice(vocabulary=days), required=False) separately = schema.Bool( title=_(u'Separately reservable'), description=_( u'If checked parts of the recurrance may be reserved. ' u'If not checked the recurrance must be reserved as a whole.'), required=False, default=False) @invariant def isValidRange(Allocation): start, end = utils.get_date_range(Allocation.day, Allocation.start_time, Allocation.end_time) if not Allocation.whole_day and abs((end - start).seconds // 60) < 5: raise Invalid(_(u'The allocation must be at least 5 minutes long')) @invariant def isValidOption(Allocation): if Allocation.recurrence: if Allocation.partly_available and not Allocation.separately: raise Invalid( _(u'Partly available allocations can only be reserved ' u'separately'))