class ICategorization(model.Schema): # categorization fieldset model.fieldset( 'categorization', label=_PMF(u'label_schema_categorization', default=u'Categorization'), fields=['subjects', 'language'], ) subjects = schema.Tuple( title=_PMF(u'label_tags', default=u'Tags'), description=_PMF( u'help_tags', default= u'Tags are commonly used for ad-hoc organization of content.'), value_type=schema.TextLine(), required=False, missing_value=(), ) form.widget(subjects=TextLinesFieldWidget) language = schema.Choice( title=_PMF(u'label_language', default=u'Language'), vocabulary='plone.app.vocabularies.AvailableContentLanguages', required=False, missing_value='', ) form.omitted('subjects', 'language') form.no_omit(IEditForm, 'subjects', 'language') form.no_omit(IAddForm, 'subjects', 'language')
class IAudio(form.Schema): """ Audio: only audio files are permitted """ fieldset('audio', label=_(u'Tab audio'), fields=['title', 'description', 'file'] ) dexteritytextindexer.searchable('title') title = schema.TextLine( title=_PMF(u'label_title', default=u'Title'), required=True ) dexteritytextindexer.searchable('description') description = schema.Text( title=_PMF(u'label_description', default=u'Summary'), description=_PMF( u'help_description', default=u'Used in item listings and search results.' ), required=False, missing_value=u'', ) file = NamedBlobFile( title=_(u"Please upload a media file"), description=_(u"Only audio files are permitted."), required=True, )
class IPublicationOffer(model.Schema): form.widget('fieldset_opt', FieldsetFieldWidget) fieldset_opt = schema.Text( default=_(u'Dates'), required=False, ) effective = schema.Datetime( title=_PMF(u'label_effective_date', u'Publishing Date'), description=_( u'help_effective_date', default=u"The date the item will be published."), required=False ) expired = schema.Datetime( title=_PMF(u'label_expiration_date', u'Expiration Date'), description=_( u'help_expiration_date', default=u"The date that the item will expire."), required=False, defaultFactory=expiresDefaultValue, ) form.omitted('effective') form.no_omit(IEditForm, 'expired') form.no_omit(IAddForm, 'expired')
class IFile(form.Schema): """ File: Per adjuntar els fitxers públics i/o privats A la part pública només fitxers PDF """ fieldset('file', label=_(u'Tab file'), fields=['title', 'description', 'visiblefile', 'hiddenfile']) dexteritytextindexer.searchable('title') title = schema.TextLine(title=_PMF(u'label_title', default=u'Title'), required=True) dexteritytextindexer.searchable('description') description = schema.Text( title=_PMF(u'label_description', default=u'Summary'), description=_PMF(u'help_description', default=u'Used in item listings and search results.'), required=False, missing_value=u'', ) visiblefile = NamedBlobFile( title=_(u"Please upload a public file"), description=_(u"Published file description"), required=False, ) hiddenfile = NamedBlobFile( title=_(u"Please upload a reserved file"), description=_(u"Reserved file description"), required=False, )
class IBasic(model.Schema): # default fieldset title = schema.TextLine( title=_PMF(u'label_title', default=u'Title'), required=True ) description = schema.Text( title=_PMF(u'label_description', default=u'Summary'), description=_PMF( u'help_description', default=u'Used in item listings and search results.' ), min_length=5, max_length=100, required=True, missing_value=u'', ) directives.order_before(description='*') directives.order_before(title='*') directives.omitted('title', 'description') directives.no_omit(IEditForm, 'title', 'description') directives.no_omit(IAddForm, 'title', 'description')
class IPublication(model.Schema): # dates fieldset model.fieldset( 'dates', label=_PMF(u'label_schema_dates', default=u'Dates'), fields=['effective', 'expires'], ) effective = schema.Datetime( title=_PMF(u'label_effective_date', u'Publishing Date'), description=_PMF( u'help_effective_date', default=u"If this date is in the future, the content will " "not show up in listings and searches until this date."), required=False) expires = schema.Datetime( title=_PMF(u'label_expiration_date', u'Expiration Date'), description=_PMF( u'help_expiration_date', default=u"When this date is reached, the content will no" "longer be visible in listings and searches."), required=False) form.omitted('effective', 'expires') form.no_omit(IEditForm, 'effective', 'expires') form.no_omit(IAddForm, 'effective', 'expires')
class ITaskContent(model.Schema): """ Interface for task content type """ title = schema.TextLine(title=_PMF(u'label_title', default=u'Title'), required=True) parents_assigned_groups = LocalRolesField( title=_(u"Parents assigned groups"), required=False, value_type=schema.Choice(vocabulary=u'collective.task.AssignedGroups')) # must change widget to hide it, because default widget (orderedselect) doesn't have hidden widget template directives.widget('parents_assigned_groups', SelectFieldWidget, multiple='multiple', size=10) directives.mode(parents_assigned_groups='hidden') parents_enquirers = LocalRolesField( title=_(u"Parents enquirers"), required=False, value_type=schema.Choice(vocabulary=u'collective.task.Enquirer')) # must change widget to hide it, because default widget (orderedselect) doesn't have hidden widget template directives.widget('parents_enquirers', SelectFieldWidget, multiple='multiple', size=10) directives.mode(parents_enquirers='hidden')
class IOwnership(model.Schema): # ownership fieldset model.fieldset( 'ownership', label=_PMF( 'label_schema_ownership', default=u'Ownership' ), fields=['creators', 'contributors', 'rights'], ) creators = schema.Tuple( title=_PMF(u'label_creators', u'Creators'), description=_PMF( u'help_creators', default=u"Persons responsible for creating the content of " u"this item. Please enter a list of user names, one " u"per line. The principal creator should come first." ), value_type=schema.TextLine(), required=False, missing_value=(), ) directives.widget( 'creators', AjaxSelectFieldWidget, vocabulary='plone.app.vocabularies.Users' ) contributors = schema.Tuple( title=_PMF(u'label_contributors', u'Contributors'), description=_PMF( u'help_contributors', default=u"The names of people that have contributed " u"to this item. Each contributor should " u"be on a separate line."), value_type=schema.TextLine(), required=False, missing_value=(), ) directives.widget( 'contributors', AjaxSelectFieldWidget, vocabulary='plone.app.vocabularies.Users' ) rights = schema.Text( title=_PMF(u'label_copyrights', default=u'Rights'), description=_PMF( u'help_copyrights', default=u'Copyright statement or other rights information on this ' u'item.' ), required=False, ) directives.omitted('creators', 'contributors', 'rights') directives.no_omit(IEditForm, 'creators', 'contributors', 'rights') directives.no_omit(IAddForm, 'creators', 'contributors', 'rights')
class IBasic(model.Schema): # default fieldset title = schema.TextLine(title=_PMF(u'label_title', default=u'Title'), required=True) description = schema.Text( title=_PMF(u'label_description', default=u'Description'), description=_PMF(u'help_description', default=u'A short summary of the content.'), required=False, missing_value=u'', ) form.order_before(description='*') form.order_before(title='*') form.omitted('title', 'description') form.no_omit(IEditForm, 'title', 'description') form.no_omit(IAddForm, 'title', 'description')
class IPaneSchema(Schema): title = schema.TextLine( title=_PMF(u'label_title', default=u'Title'), required=True ) show_title = schema.Bool( title=_(u'label_show_title', default=u'Show title'), required=False, default=False, missing_value=False, ) text = RichText( title=_(u'label_text', default=u'Text'), description=_(u'help_text', default=u''), required=False, ) model.primary('image') image = NamedImage( title=_(u'label_image', default='Image'), required=True, ) image_alt_text = schema.TextLine( title=_(u'label_image_alt_text', default=u'Image alt text'), required=False ) form.widget(link=ReferenceWidgetFactory) link = schema.TextLine( title=_(u'label_link', default=u'Link'), description=_(u'help_link', default=u''), required=False, ) external_url = schema.URI( title=_(u'label_external_url', default=u'External URL'), required=False, ) @invariant def validate_links(data): """ It is not allowed to add a link and an external url at the same time. """ if data.link and data.external_url: raise Invalid(_( u'error_message_links', default=u'It\'s not possible to add a link and an ' u'external url at the same time') )
class INoticePublication(model.Schema): directives.widget(effective=DateTimePickerWidgetFactory) effective = schema.Datetime( title=_PMF(u'label_effective_date', u'Publishing Date'), description=_PMF( u'help_effective_date', default=u"If this date is in the future, the content will " u"not show up in listings and searches until this date."), required=True, defaultFactory=start_date) directives.widget(expires=DateTimePickerWidgetFactory) expires = schema.Datetime( title=_PMF(u'label_expiration_date', u'Expiration Date'), description=_PMF( u'help_expiration_date', default=u"When this date is reached, the content will no" u"longer be visible in listings and searches."), required=True, defaultFactory=end_date)
class IPublication(model.Schema): # dates fieldset model.fieldset( 'dates', label=_PMF(u'label_schema_dates', default=u'Dates'), fields=['effective', 'expires'], ) effective = schema.Datetime( title=_PMF(u'label_effective_date', u'Publishing Date'), description=_PMF( u'help_effective_date', default=u"If this date is in the future, the content will " u"not show up in listings and searches until this date."), required=False ) directives.widget('effective', DatetimeFieldWidget) expires = schema.Datetime( title=_PMF(u'label_expiration_date', u'Expiration Date'), description=_PMF( u'help_expiration_date', default=u"When this date is reached, the content will no" u"longer be visible in listings and searches."), required=False ) directives.widget('expires', DatetimeFieldWidget) @invariant def validate_start_end(data): if data.effective and data.expires and data.effective > data.expires: raise EffectiveAfterExpires( _("error_expiration_must_be_after_effective_date", default=u"Expiration date must be after publishing date.") ) directives.omitted('effective', 'expires') directives.no_omit(IEditForm, 'effective', 'expires') directives.no_omit(IAddForm, 'effective', 'expires')
class IDocument(form.Schema): """ Document: Per marcar si són públics o privats """ fieldset( 'document', label=_(u'Tab document'), fields=['title', 'description', 'defaultContent', 'alternateContent']) dexteritytextindexer.searchable('title') title = schema.TextLine(title=_PMF(u'label_title', default=u'Title'), required=True) dexteritytextindexer.searchable('title') description = schema.Text( title=_PMF(u'label_description', default=u'Summary'), description=_PMF(u'help_description', default=u'Used in item listings and search results.'), required=False, missing_value=u'', ) directives.widget(defaultContent=WysiwygFieldWidget) dexteritytextindexer.searchable('defaultContent') defaultContent = schema.Text( title=_(u"Contingut public"), description=_(u"Default content shown in the document view"), required=False, ) directives.widget(alternateContent=WysiwygFieldWidget) dexteritytextindexer.searchable('alternateContent') alternateContent = schema.Text( title=_(u"Alternate description"), description=_(u"Content used to hide protected content"), required=False, )
class IActa(form.Schema): """ ACTA """ fieldset('acta', label=_(u'Tab acta'), fields=['title', 'horaInici', 'horaFi', 'llocConvocatoria', 'ordenDelDia', 'enllacVideo'] ) fieldset('assistents', label=_(u'Assistents'), fields=['membresConvocats', 'membresConvidats', 'llistaExcusats', 'llistaNoAssistens'] ) dexteritytextindexer.searchable('title') title = schema.TextLine( title=_PMF(u'label_title', default=u'Title'), required=True ) horaInici = schema.Datetime( title=_(u"Session start time"), required=False, ) horaFi = schema.Datetime( title=_(u"Session end time"), required=False, ) llocConvocatoria = schema.TextLine( title=_(u"Session location"), required=False, ) directives.widget(membresConvocats=WysiwygFieldWidget) dexteritytextindexer.searchable('membresConvocats') membresConvocats = schema.Text( title=_(u"Assistants"), description=_(u"Assistants help"), required=False, ) directives.widget(membresConvidats=WysiwygFieldWidget) dexteritytextindexer.searchable('membresConvidats') membresConvidats = schema.Text( title=_(u"Invited members"), description=_(u"Invited members help"), required=False, ) directives.widget(llistaExcusats=WysiwygFieldWidget) dexteritytextindexer.searchable('llistaExcusats') llistaExcusats = schema.Text( title=_(u"Excused members"), description=_(u"Excused members help"), required=False, ) directives.widget(llistaNoAssistens=WysiwygFieldWidget) dexteritytextindexer.searchable('llistaNoAssistens') llistaNoAssistens = schema.Text( title=_(u"No assistents"), description=_(u"No assistents help"), required=False, ) directives.widget(ordenDelDia=WysiwygFieldWidget) dexteritytextindexer.searchable('ordenDelDia') ordenDelDia = schema.Text( title=_(u"Session order"), description=_(u"Session order description"), required=False, ) enllacVideo = schema.TextLine( title=_(u"Video link"), description=_(u"If you want to add a video file, not a url, there is a trick, you must add an Audio Type and leave this field empty."), required=False, )
def isEmail(value): prog = re.compile('^'+EMAIL_RE) result = prog.match(value) if result is None: raise Invalid(_PMF(u'is not a valid email address.')) return True
def isHTTP(value): if not value.startswith('http://') and not value.startswith('https://'): raise Invalid(_PMF(u'web address must start with http:// or https://')) return True
class IFoundationMember(Schema): """A foundation member""" fieldset('Contact', label=u'Contact', fields=[ 'fname', 'lname', 'email', 'address', 'city', 'state', 'postalCode', 'country', 'organization', ]) fieldset('Merit', label=u'Merit', fields=[ 'merit', ]) fieldset('Survey', label=u'Survey', fields=[ 'orgsize', 'ploneuse', ]) fname = schema.TextLine(title=_PMF(u'First name', default=u'First name'), required=True) lname = schema.TextLine(title=_PMF(u'Last name', default=u'Last name'), required=True) read_permission(email='ploneorg.core.foundationmember.view') email = schema.TextLine(title=_PMF(u'Email', default=u'Email'), required=True) read_permission(address='ploneorg.core.foundationmember.view') address = schema.TextLine(title=_PMF(u'Address', default=u'Address'), required=True) city = schema.TextLine(title=_PMF(u'City', default=u'City'), required=True) read_permission(state='ploneorg.core.foundationmember.view') state = schema.TextLine(title=_PMF(u'State', default=u'State'), required=True) read_permission(postalCode='ploneorg.core.foundationmember.view') postalCode = schema.TextLine(title=_PMF(u'Postal code', default=u'Postal code'), required=True) country = schema.Choice(title=_PMF(u'Country', default=u'Country'), vocabulary=country_vocabulary, required=True) organization = schema.TextLine(title=_PMF(u'Organization', default=u'Organization'), required=True) read_permission(merit='ploneorg.core.foundationmember.view') merit = RichText( title=_(u'Contributions'), description=_(u'Describe your contributions to the project.'), required=True) read_permission(orgsize='ploneorg.core.foundationmember.view') orgsize = schema.Int( title=_(u'Organization size'), description=_( u'Number of people in your organization. It\'s fine to estimate.'), required=False) read_permission(ploneuse='ploneorg.core.foundationmember.view') ploneuse = RichText( title=_(u'Plone use'), description=_(u'How is Plone used by your organization?'), required=False)
class IProject(model.Schema): """Project schema, field ordering.""" dexteritytextindexer.searchable('description_rich') description_rich = RichText( title=_PMF(u'label_description', default=u'Summary'), required=False, ) dexteritytextindexer.searchable('reference_number') reference_number = schema.Int( title=_(u"Reference number"), # description=_(u"Unique identification"), required=False, default=0, ) categories = schema.List( title=_(u'Categories'), # description=_(u"Choose categories."), required=False, value_type=schema.Choice( source='imio.project.core.content.project.categories_vocabulary'), defaultFactory=default_categories, ) directives.widget('categories', AjaxChosenMultiFieldWidget, populate_select=True) priority = schema.Choice( title=_(u'Priority'), # description=_(u"Choose a priority."), vocabulary=u'imio.project.core.content.project.priority_vocabulary', ) budget = schema.List( title=_(u'Budget'), # description=_(u"Enter budget details. If you have comments about budget, " # "use the field here above."), required=False, value_type=DictRow(title=_("Budget"), schema=IBudgetSchema, required=False), ) directives.widget('budget', BudgetInfosDataGridFieldFactory, display_table_css_class='listing nosort') budget_comments = RichText( title=_(u"Budget comments"), # description=_(u"Write here comments you have about budget."), required=False, allowed_mime_types=('text/html', ), ) manager = LocalRolesField( title=_(u"Manager"), # description=_(u"Choose principals that will manage this project."), value_type=schema.Choice( vocabulary='imio.project.core.content.project.manager_vocabulary'), required=True, min_length=1, ) directives.widget('manager', AjaxChosenMultiFieldWidget, populate_select=True) visible_for = LocalRolesField( title=_(u"Visible for"), # description=_(u"Choose principals that can see this project."), required=False, value_type=schema.Choice( vocabulary= 'imio.project.core.content.project.visible_for_vocabulary'), ) extra_concerned_people = schema.Text( title=_(u"Extra concerned people"), # description=_(u"Specify here concerned people that do not have access " # "to the application, this will just be informational."), required=False, ) result_indicator = schema.List( title=_(u'Result indicator'), description=_(u"Enter one indicator by row. Value is a number. " "Label must precise the signification of this number."), required=False, value_type=DictRow(title=_("Result indicator"), schema=IResultIndicatorSchema, required=False), ) directives.widget('result_indicator', DataGridFieldFactory, display_table_css_class='listing nosort') planned_begin_date = schema.Date( title=_(u'Planned begin date'), # description=_(u"Enter the planned begin date."), required=False, # defaultFactory=datetime.date.today, ) directives.widget(planned_begin_date=DateFieldWidget) effective_begin_date = schema.Date( title=_(u'Effective begin date'), # description=_(u"Enter the effective begin date."), required=False, # defaultFactory=datetime.date.today, ) directives.widget(effective_begin_date=DateFieldWidget) planned_end_date = schema.Date( title=_(u'Planned end date'), # description=_(u"Enter the planned end date."), required=False, # defaultFactory=datetime.date.today, ) directives.widget(planned_end_date=DateFieldWidget) effective_end_date = schema.Date( title=_(u'Effective end date'), # description=_(u"Enter the effective end date."), required=False, # defaultFactory=datetime.date.today, ) directives.widget(effective_end_date=DateFieldWidget) progress = schema.Int( title=_(u"Progress"), description=_(u"Progress estimation in %."), required=False, default=0, ) observation = RichText( title=_(u"Observation"), # description=_(u"Prior determination"), required=False, allowed_mime_types=('text/html', ), ) comments = RichText( title=_(u"Comments"), # description=_(u"Various comments"), required=False, allowed_mime_types=('text/html', ), ) plan = schema.List( title=_(u'Plan'), # description=_(u"Choose plan."), required=False, value_type=schema.Choice( source='imio.project.core.content.project.plan_vocabulary'), defaultFactory=default_plan, ) directives.widget('plan', AjaxChosenMultiFieldWidget, populate_select=True)