class ITimeSeriesChart(IBaseChart, ITimeSeriesCollection): """Chart content item; container for sequences""" form.order_after(auto_crop='frequency') auto_crop = schema.Bool( title=u'Auto-crop to completed data?', description=u'If data contains sequential null values (incomplete ' u'or no data calculable) on the right-hand of a ' u'time-series plot, should that right-hand side ' u'be cropped to only show the latest meaningful ' u'data? The default is to crop automatically.', default=True, ) form.order_after(force_crop='auto_crop') force_crop = schema.Bool( title=u'Forced crop of data?', description=u'If data points are available before a specified ' u'start date or after a specified end-date, should ' u'those points be excluded from the visualization?', default=False, ) form.omitted('label_overrides') label_overrides = schema.Dict( key_type=schema.Date(), value_type=schema.BytesLine(), required=False, ) def series(): """
class IDossierTemplateSchema(form.Schema): """Schema interface for dossier template types. Use this type of dossier to create a reusable template structures. """ form.fieldset( u'common', label=base_mf(u'fieldset_common', default=u'Common'), fields=[ u'title_help', u'predefined_keywords', u'restrict_keywords', ], ) title_help = schema.TextLine( title=_(u'label_title_help', default=u'Title help'), description=_(u'help_title_help', default=u'Recommendation for the title. Will be ' u'displayed as a help text if you create ' u'a dossier from template'), required=False, ) form.order_after(predefined_keywords='IDossierTemplate.keywords') predefined_keywords = schema.Bool( title=_(u'label_predefined_keywords', default=u'Predefined Keywords'), description=_(u'description_predefined_keywords', default=u'The defined keywords will be preselected for ' u'new dossies from template.'), required=False, missing_value=True, default=True, ) form.order_after(restrict_keywords='predefined_keywords') restrict_keywords = schema.Bool( title=_(u'label_restrict_keywords', default=u'Restrict Keywords'), description=_( u'description_restrict_keywords', default=u'The user can choose only from the defined keywords ' u'in a new dossier from template. It also prevents ' u'the user for creating new keywords'), required=False, missing_value=False, default=False, )
class IRichDescription(form.Schema): """Simple behaviour for content types with a HTML description. Replaces the standard description field with a rich text version. """ description = schema.Text( title=_(u"Summary"), description=_(u'A short summary of the content.'), required=False) form.widget(description=WysiwygFieldWidget) form.order_after(description="title")
class IOpenLinkInNewWindow(form.Schema): """Add open in new window field to link content """ form.order_after(open_link_in_new_window='remoteUrl') open_link_in_new_window = schema.Bool( title=_(u"open_link_in_new_window"), description=_(u"help_open_link_in_new_window"), required=False, default=False )
class IDummy(form.Schema): form.omitted('foo') form.omitted('bar') form.widget(foo='some.dummy.Widget') form.widget(baz='other.Widget') form.mode(bar='hidden') form.mode(foo='display') form.order_before(baz='title') form.order_after(baz='qux') form.order_after(qux='bar') form.order_before(foo='body') form.read_permission(foo='zope2.View', bar='zope2.View') form.read_permission(baz='random.Permission') form.write_permission(foo='cmf.ModifyPortalContent') form.write_permission(baz='another.Permission') foo = zope.schema.TextLine(title=u"Foo") bar = zope.schema.TextLine(title=u"Bar") baz = zope.schema.TextLine(title=u"Baz") qux = zope.schema.TextLine(title=u"Qux")
class ISector(form.Schema, IUser, IBasic): """Sector object. A sector is a national organisation for a specific type of industry. """ form.order_before(title="*") dexterity.write_permission(title="euphorie.content.ManageCountry") form.order_after(login="******") dexterity.write_permission(login="******") form.order_before(password="******") form.order_after(locked="password") dexterity.write_permission(locked="euphorie.content.ManageCountry") contact_name = schema.TextLine(title=_("label_contact_name", default=u"Contact name"), required=True) form.order_after(contact_email="contact_name") logo = filefield.NamedBlobImage( title=_("label_logo", default=u"Logo"), description=_( "help_image_upload", default=u"Upload an image. Make sure your image is of format " u"png, jpg or gif and does not contain any special " u"characters."), required=False) main_colour = colour.Colour(title=_("label_main_colour", default=u"Main colour"), required=False) support_colour = colour.Colour(title=_("label_support_colour", default=u"Support colour"), required=False)
class IPage(form.Schema, IRichDescription, IBasic): """A basic page. """ description = HtmlText( title=_("label_module_description", u"Description"), description=_("help_module_description", default=u"Include any relevant information that may be " u"helpful for the end-user."), required=True) form.widget(description=WysiwygFieldWidget) form.order_after(description="title") body = HtmlText(title=_("label_body", u"Page content"), required=True) form.widget(body=WysiwygFieldWidget)
class ISolution(form.Schema): """A standard solution for a risk. Risk questions can have standard solutions that can be applied in most environments. """ description = schema.Text( title=_("label_module_description", u"Description"), description=_("help_module_description", default=u"Include any relevant information that may be " u"helpful for the end-user."), required=True) form.order_after(description="title") action_plan = schema.Text( title=_("label_measure_action_plan", default=u"General approach (to eliminate or reduce the risk)"), description=_( "help_measure_action_plan", default=u"Describe your general approach to eliminate or (if " u"the risk is not avoidable) reduce the risk."), required=True) prevention_plan = schema.Text( title=_("label_measure_prevention_plan", default=u"Specific action(s) required to implement this " u"approach"), description=_( "help_measure_prevention_plan", default=u"Describe the specific action(s) required to " u"implement this approach (to eliminate or to reduce the risk)."), required=False) requirements = schema.Text( title=_("label_measure_requirements", default=u"Level of expertise and/or requirements needed"), description=_( "help_measure_requirements", default=u'Describe the level of expertise needed to implement ' u'the measure, for instance "common sense (no OSH knowledge ' u'required)", "no specific OSH expertise, but minimum OSH ' u'knowledge or training and/or consultation of OSH guidance ' u'required", or "OSH expert". You can also describe here ' u'any other additional requirement (if any).'), required=False)
class IBar(IFoo): form.order_after(foo='bar') bar = zope.schema.TextLine()
class IChartDisplay(form.Schema): """ Display configuration for chart settings (as a whole). """ width = schema.Int( title=_(u'Width'), description=_(u'Display width of chart, including Y-axis labels, ' u'grid, and legend (if applicable) in units ' u'configured.'), default=100, ) width_units = schema.Choice( title=_(u'Units of width'), vocabulary=WIDTH_UNITS, default='%', ) height = schema.Int( title=_(u'Height'), description=_(u'Display height of chart in units configured ' u'(either as percentage of width, or in pixels).'), default=50, ) height_units = schema.Choice( title=_(u'Units of height'), vocabulary=HEIGHT_UNITS, default='2:1', ) show_goal = schema.Bool( title=_(u'Show goal-line?'), description=_(u'If defined, show (constant horizontal) goal line?'), default=False, ) form.widget(goal_color=ColorpickerFieldWidget) goal_color = schema.TextLine( title=_(u'Goal-line color'), description=_(u'If omitted, color will be selected from defaults.'), required=False, default=u'Auto', ) form.order_after(chart_type='description') chart_type = schema.Choice( title=_(u'Chart type'), description=_(u'Type of chart to display.'), vocabulary=VOCAB_PLOT_TYPES, default=u'line', ) legend_placement = schema.Choice( title=_(u'Legend placement'), description=_( u'Where to place legend in relationship to the grid.' u'Note: the legend is disabled for less than two ' u'series/line unless the tabular legend is selected.' ), vocabulary=SimpleVocabulary(( SimpleTerm(value=None, token=str(None), title=u'Legend disabled'), SimpleTerm(value='outside', title=_(u'Outside grid')), SimpleTerm(value='inside', title=_(u'Inside grid')), SimpleTerm(value='tabular', title=_( u'Tabular legend with data, below plot')), )), required=False, default='outside', ) legend_location = schema.Choice( title=_(u'Legend location'), description=_(u'Select a directional position for legend. ' u'This setting is ignored if either the tabular ' u'legend placement is selected or if the ' u'legend is hidden (for less than two series).'), vocabulary=SimpleVocabulary(( SimpleTerm(value='nw', title=_(u'Top left')), SimpleTerm(value='n', title=_(u'Top')), SimpleTerm(value='ne', title=_(u'Top right')), SimpleTerm(value='e', title=_(u'Right')), SimpleTerm(value='se', title=_(u'Bottom right')), SimpleTerm(value='s', title=_(u'Bottom')), SimpleTerm(value='sw', title=_(u'Bottom left')), SimpleTerm(value='w', title=_(u'Left')), )), required=False, default='e', # right hand side ) x_label = schema.TextLine( title=_(u'X axis label'), default=u'', required=False, ) y_label = schema.TextLine( title=_(u'Y axis label'), default=u'', required=False, ) form.widget(chart_styles=TextAreaFieldWidget) chart_styles = schema.Bytes( title=_(u'Chart styles'), description=_(u'CSS stylesheet rules for chart (optional).'), required=False, ) point_labels = schema.Choice( title=u'Show point labels?', description=u'Show labels above data-point markers? ' u'This may be overridden on individual lines/series.', default='show', vocabulary=SimpleVocabulary([ SimpleTerm('show', title=u'Show labels'), SimpleTerm('omit', title=u'Omit labels'), ]) )
class IClaim(model.Schema): """A claim to the Ombudsman.""" kind = schema.Choice( title=_(u'Tipos de solicitação'), description=_( u'help_kind', default=u'Selecione o tipo de solicitação.', ), required=True, vocabulary=u'interlegis.portalmodelo.ombudsman.ClaimTypes') area = schema.Choice( title=_(u'Area'), description=_( u'help_area', default=u'Selecione a área para a qual a solicitação será enviada.', ), required=True, vocabulary=u'interlegis.portalmodelo.ombudsman.Areas') title = schema.TextLine( title=_(u'Topic'), description=_(u''), required=True, ) form.widget('description', rows=20) description = schema.Text( title=_(u'Details'), description=_( u'help_description', default=u'Por favor, informe detalhes adicionais.', ), required=True, ) form.read_permission( email='interlegis.portalmodelo.ombudsman.ViewClaimPersonalInfo') name = schema.TextLine( title=_(u'Name'), description=_(u'help_name', default=u''), required=True, ) form.read_permission( email='interlegis.portalmodelo.ombudsman.ViewClaimPersonalInfo') cpf = schema.TextLine( title=_(u'CPF'), description=_(u'help_CPF', default=u''), required=True, ) form.read_permission( email='interlegis.portalmodelo.ombudsman.ViewClaimPersonalInfo') rg = schema.TextLine( title=_(u'RG'), description=_(u'help_rg', default=u''), required=False, ) form.read_permission( email='interlegis.portalmodelo.ombudsman.ViewClaimPersonalInfo') email = schema.ASCIILine( title=_(u'Email'), description=_( u'help_email', default= u'Informe o email para onde serão enviadas informações sobre a solicitação.', ), required=True, ) form.read_permission( email='interlegis.portalmodelo.ombudsman.ViewClaimPersonalInfo') address = schema.TextLine( title=_(u'Address'), description=_(u'help_address', default=u'Informe seu endereço.'), required=False, ) form.read_permission( email='interlegis.portalmodelo.ombudsman.ViewClaimPersonalInfo') postal_code = schema.TextLine( title=_(u'Postal code'), description=_(u'help_postal_code', default=u''), required=False, ) city = schema.TextLine( title=_(u'City'), description=_(u'help_city', default=u'Informe sua cidade.'), required=False, ) state = schema.Choice( title=_(u'State'), description=_(u'help_state', default=u'Informe seu estado.'), required=False, vocabulary=u'brasil.estados', ) form.order_after(captcha='state') form.mode(captcha='hidden') captcha = schema.TextLine(title=u"ReCaptcha", required=False)
class IISAWPublication(form.Schema): short_title = TextLine(title=_(u'Short Title')) form.order_after(short_title='IBibliographicItem.title') tag_line = TextLine(title=_(u'Tag Line'), required=False) form.order_after(tag_line='IBibliographicItem.description') authors = Tuple( title=_(u'Authors'), description=_(u'Enter username or plain-text name, one per line'), value_type=TextLine(), required=False, missing_value=(), ) form.order_before(authors='IBibliographicItem.citation_detail') editors = Tuple( title=_(u'Editors'), description=_(u'Enter username or plain-text name, one per line'), value_type=TextLine(), required=False, missing_value=(), ) form.order_before(editors='IBibliographicItem.citation_detail') contributors = Tuple( title=_(u'Contributors'), description=_(u'Enter username or plain-text name, one per line'), value_type=TextLine(), required=False, missing_value=(), ) form.order_before(contributors='IBibliographicItem.citation_detail') alt_bib_uri = URI(title=_(u'Alternate Bibliographic URI'), required=False) form.order_after(alt_bib_uri='IBibliographicItem.bibliographic_uri') publisher = TextLine(title=_(u'Publisher'), required=False) form.order_after(publisher='IBibliographicItem.alternate_uri') publisher_uri = URI(title=_(u'Publisher URI'), required=False) form.order_after(publisher_uri='publisher') review_uri = URI(title=_(u'Review URI'), required=False) form.order_after(review_uri='publisher_uri') isbn = TextLine(title=_(u'ISBN'), required=False) form.order_after(isbn='review_uri') issn = TextLine(title=_(u'ISSN'), required=False) form.order_after(issn='isbn') doi = TextLine(title=_(u'DOI'), required=False) form.order_after(doi='issn') text = RichText( title=_(u'Body'), default_mime_type='text/html', allowed_mime_types=('text/html', ), output_mime_type='text/x-safe-html', required=False, ) form.order_after(text='doi') date_of_publication = TextLine( title=_(u'Publication Date'), description=_(u'Enter the date on which this publication was issued'), required=False) form.order_after(date_of_publication='text') loc_subjects = List(title=_(u'LOC Subjects'), value_type=DictRow(title=u'Subject', schema=ILOCSubject), required=False) form.widget(loc_subjects=DataGridFieldFactory) form.order_after(loc_subjects='*')
class IModule(form.Schema, IRichDescription, IBasic): """Survey Module. A module is (hierarchical) grouping in a survey. """ description = HtmlText( title=_("label_module_description", u"Description"), description=_("help_module_description", default=u"Include any relevant information that may be " u"helpful for the end-user."), required=False) form.widget(description=WysiwygFieldWidget) form.order_after(description="title") optional = schema.Bool( title=_("label_module_optional", default=u"This module is optional"), description=_("help_module_optional", default=u"Allows the end-user to skip this module and " u"everything inside it."), required=False, default=False) depends("question", "optional", "on") question = ConditionalTextLine( title=_("label_module_question", default=u"Question"), description=_( "help_module_question", default=u"The question to ask the end-user if this module is " u"optional. It must be formulated so that it is answerable " u"with YES (the end-user will have to tick a box) or NO"), required=True) image = filefield.NamedBlobImage( title=_("label_image", default=u"Image file"), description=_( "help_image_upload", default=u"Upload an image. Make sure your image is of format " u"png, jpg or gif and does not contain any special " u"characters."), required=False) caption = schema.TextLine(title=_("label_caption", default=u"Image caption"), required=False) solution_direction = HtmlText( title=_("label_solution_direction", default=u"Solution"), description=_( "help_solution_direction", default=u"This information will appear in the Action plan step " u"and should include an overview of general solution(s) " u"related to this module."), required=False) form.widget(solution_direction=WysiwygFieldWidget) form.fieldset( "additional_content", label=_("header_additional_content", default=u"Additional content"), description=_( "intro_additional_content", default=u"Attach any additional content you consider helpful " "for the user"), fields=[ "file1", "file1_caption", "file2", "file2_caption", "file3", "file3_caption", "file4", "file4_caption" ]) file1 = filefield.NamedBlobFile( title=_("label_file", default=u"Content file"), description=_( "help_content_upload", default=u"Upload a file that contains additional information, " u"like a PDF, Word document or spreadsheet. Optionally provide " u"a descriptive caption for your file."), required=False) file1_caption = schema.TextLine(title=_("label_file_caption", default=u"Content caption"), required=False) file2 = filefield.NamedBlobFile( title=_("label_file", default=u"Content file"), description=_( "help_content_upload", default=u"Upload a file that contains additional information, " u"like a PDF, Word document or spreadsheet. Optionally provide " u"a descriptive caption for your file."), required=False) file2_caption = schema.TextLine(title=_("label_file_caption", default=u"Content caption"), required=False) file3 = filefield.NamedBlobFile( title=_("label_file", default=u"Content file"), description=_( "help_content_upload", default=u"Upload a file that contains additional information, " u"like a PDF, Word document or spreadsheet. Optionally provide " u"a descriptive caption for your file."), required=False) file3_caption = schema.TextLine(title=_("label_file_caption", default=u"Content caption"), required=False) file4 = filefield.NamedBlobFile( title=_("label_file", default=u"Content file"), description=_( "help_content_upload", default=u"Upload a file that contains additional information, " u"like a PDF, Word document or spreadsheet. Optionally provide " u"a descriptive caption for your file."), required=False) file4_caption = schema.TextLine(title=_("label_file_caption", default=u"Content caption"), required=False)
class IRisk(form.Schema, IRichDescription, IBasic): """A possible risk that can be present in an organisation. """ title = schema.TextLine( title=_("label_statement", default=u"Affirmative statement"), description=_( "help_statement", default=u"This is a short affirmative statement about a " u"possible risk (e.g. The building is well maintained.)"), required=True) form.widget(title="euphorie.content.risk.TextLines4Rows") form.order_before(title="*") problem_description = schema.TextLine( title=_("label_problem_description", default=u"Negative statement"), description=_( "help_problem_description", default=u"This is the inverse of the affirmative " u"statement (e.g. The building is not well maintained.)"), required=True) form.widget(problem_description="euphorie.content.risk.TextLines4Rows") form.order_after(problem_description="title") description = HtmlText( title=_("label_description", default=u"Description"), description=_( "help_risk_description", default=u"Describe the risk. Include any relevant information " u"that may be helpful for the end-user."), required=True) form.widget(description="plone.app.z3cform.wysiwyg.WysiwygFieldWidget") form.order_after(description="problem_description") existing_measures = TextLinesWithBreaks( title=_("label_existing_measures", default=u"Existing measures"), description=_( "help_existing_measures", default=u"Use this field to define (common) existing measures." u" Separate measures with a line break (Enter). The user will be " u"able to deselect those measures that are not applicable to their" u" situation."), required=False) form.widget(existing_measures="euphorie.content.risk.TextLines8Rows") form.order_after(existing_measures="description") legal_reference = HtmlText(title=_("label_legal_reference", default=u"Legal and policy references"), required=False) form.widget(legal_reference="plone.app.z3cform.wysiwyg.WysiwygFieldWidget") form.order_after(legal_reference="description") form.fieldset("identification", label=_("header_identification", default=u"Identification"), fields=["show_notapplicable"]) show_notapplicable = schema.Bool( title=_("label_show_notapplicable", default=u"Show `not applicable' option"), description=_("help_show_notapplicable", default=u"Offer a `not applicable' option in addition " u"to the standard yes/no options."), default=False) type = schema.Choice( title=_("label_risk_type", default=u"Risk type"), description=_( "help_risk_type", default=u'"Priority risk" is one of the high risks in the ' u'sector. "Risk" is related to the workplace or to the work ' u'carried out. "Policy" refers to agreements, procedures, ' u'and management decisions.'), vocabulary=SimpleVocabulary([ SimpleTerm(u"top5", title=_("risktype_top5", default=u"Priority risk")), SimpleTerm(u"risk", title=_("risktype_risk", default="Risk")), SimpleTerm(u"policy", title=_("risktype_policy", default=u"Policy")), ]), default=u"risk", required=True) depends("risk_always_present", "type", "==", "risk") risk_always_present = schema.Bool( title=_("label_risk_always_present", default=u"Risk is always present"), description=_( "description_risk_always_present", default=u'If selected, the user will not be able to answer "Yes" or ' '"No", since the risk is considered to be always present. The ' 'Evaluation and Action Plan will behave in the same way as for ' 'regular risks.'), required=False, default=False, ) depends("evaluation_method", "type", "==", "risk") evaluation_method = schema.Choice( title=_("label_evaluation_method", default=u"Evaluation method"), description=_( "help_evaluation_method", default=u"Select 'estimated' if calcuation is not necessary " u"or not possible."), vocabulary=SimpleVocabulary([ SimpleTerm(u"direct", title=_("evalmethod_direct", default=u"Estimated")), SimpleTerm(u"calculated", title=_("evalmethod_calculated", default=u"Calculated")), SimpleTerm(u"fixed", title=_("evalmethod_fixed", default=u"Skip evaluation")), ]), default=u"calculated", required=False) depends("fixed_priority", "type", "==", "risk") depends("fixed_priority", "evaluation_method", "==", "fixed") fixed_priority = schema.Choice(title=_("report_timeline_priority", default=u"Priority"), vocabulary=SimpleVocabulary([ SimpleTerm("low", title=_("priority_low", default=u"Low")), SimpleTerm("medium", title=_("priority_medium", default=u"Medium")), SimpleTerm("high", title=_("priority_high", default="High")), ]), required=False, default="low") depends("default_priority", "type", "==", "risk") depends("default_priority", "evaluation_method", "==", "direct") default_priority = schema.Choice( title=_("label_default_priority", default=u"Default priority"), description=_( "help_default_priority", default=u"You can help the end-user by selecting a default " u"priority. He/she can still change the priority."), vocabulary=SimpleVocabulary([ SimpleTerm("none", title=_("no_default", default=u"No default")), SimpleTerm("low", title=_("priority_low", default=u"Low")), SimpleTerm("medium", title=_("priority_medium", default=u"Medium")), SimpleTerm("high", title=_("priority_high", default="High")), ]), required=False, default="low") form.fieldset( "main_image", label=_("header_main_image", default=u"Main image"), description=_( "intro_main_image", default=u"The main image will get a more prominent position " u"in the client than the other images."), fields=["image", "caption"]) image = filefield.NamedBlobImage( title=_("label_image", default=u"Image file"), description=_( "help_image_upload", default=u"Upload an image. Make sure your image is of format " u"png, jpg or gif and does not contain any special " u"characters."), required=False) caption = schema.TextLine(title=_("label_caption", default=u"Image caption"), required=False) form.fieldset("secondary_images", label=_("header_secondary_images", default=u"Secondary images"), fields=[ "image2", "caption2", "image3", "caption3", "image4", "caption4" ]) image2 = filefield.NamedBlobImage( title=_("label_image", default=u"Image file"), description=_( "help_image_upload", default=u"Upload an image. Make sure your image is of format " u"png, jpg or gif and does not contain any special " u"characters."), required=False) caption2 = schema.TextLine(title=_("label_caption", default=u"Image caption"), required=False) image3 = filefield.NamedBlobImage( title=_("label_image", default=u"Image file"), description=_( "help_image_upload", default=u"Upload an image. Make sure your image is of format " u"png, jpg or gif and does not contain any special " u"characters."), required=False) caption3 = schema.TextLine(title=_("label_caption", default=u"Image caption"), required=False) image4 = filefield.NamedBlobImage( title=_("label_image", default=u"Image file"), description=_( "help_image_upload", default=u"Upload an image. Make sure your image is of format " u"png, jpg or gif and does not contain any special " u"characters."), required=False) caption4 = schema.TextLine(title=_("label_caption", default=u"Image caption"), required=False) form.fieldset( "additional_content", label=_("header_additional_content", default=u"Additional content"), description=_( "intro_additional_content", default=u"Attach any additional content you consider helpful " "for the user"), fields=[ "file1", "file1_caption", "file2", "file2_caption", "file3", "file3_caption", "file4", "file4_caption" ]) file1 = filefield.NamedBlobFile( title=_("label_file", default=u"Content file"), description=_( "help_content_upload", default=u"Upload a file that contains additional information, " u"like a PDF, Word document or spreadsheet. Optionally provide " u"a descriptive caption for your file."), required=False) file1_caption = schema.TextLine(title=_("label_file_caption", default=u"Content caption"), required=False) file2 = filefield.NamedBlobFile( title=_("label_file", default=u"Content file"), description=_( "help_content_upload", default=u"Upload a file that contains additional information, " u"like a PDF, Word document or spreadsheet. Optionally provide " u"a descriptive caption for your file."), required=False) file2_caption = schema.TextLine(title=_("label_file_caption", default=u"Content caption"), required=False) file3 = filefield.NamedBlobFile( title=_("label_file", default=u"Content file"), description=_( "help_content_upload", default=u"Upload a file that contains additional information, " u"like a PDF, Word document or spreadsheet. Optionally provide " u"a descriptive caption for your file."), required=False) file3_caption = schema.TextLine(title=_("label_file_caption", default=u"Content caption"), required=False) file4 = filefield.NamedBlobFile( title=_("label_file", default=u"Content file"), description=_( "help_content_upload", default=u"Upload a file that contains additional information, " u"like a PDF, Word document or spreadsheet. Optionally provide " u"a descriptive caption for your file."), required=False) file4_caption = schema.TextLine(title=_("label_file_caption", default=u"Content caption"), required=False)
class IFormSeries(form.Schema, IPeriodicSeries): """ A time-series container of related periodic forms, may contain shared metadata about that group of forms. """ form.fieldset('Display', label=u"Form display metadata", fields=['contact', 'logo', 'form_css']) form.fieldset('Review', label=u"Review information", fields=['notes']) title = schema.TextLine( title=_(u'Title'), description=_(u'Series title or heading; displayed on forms.'), required=True, ) subhead = schema.TextLine( title=_(u'Sub-heading'), description=_(u'Second-level title/heading for form display.'), required=False, ) description = schema.Text( title=u'Description', description=_(u'Series description; may be displayed on forms.'), required=False, ) contact = RichText( title=_(u'Contact'), description=_(u'Project manager or coordinator contact information.'), required=False, ) series_info = RichText( title=_(u'Series info'), description=_( u'Series information for display on series summary page.'), required=False, ) logo = NamedImage( title=_(u'Logo'), description=_(u'Optionally upload a logo image for display on the ' u'form. If present, overrides any logo from form ' u'definitions on the display of contained forms'), required=False, ) form.widget(form_css=TextAreaFieldWidget) form_css = schema.Bytes( title=_(u'Form styles'), description=_(u'Additional CSS stylesheet rules for forms contained ' u'within this series (optional).'), required=False, ) dexterity.read_permission(notes='cmf.ReviewPortalContent') dexterity.write_permission(notes='cmf.ReviewPortalContent') notes = schema.Text( title=_(u'Notes'), description=_(u'Administrative, review notes about series.'), required=False, ) form.order_after(frequency='description') form.order_after(start='frequency') form.order_after(end='start') form.order_after(active_weekdays='end') @invariant def validate_start_end(obj): if not (obj.start is None or obj.end is None) and obj.start > obj.end: raise Invalid(_(u"Start date cannot be after end date."))