def setUp(self): super(TestReporter, self).setUp() create(Builder('ogds_user').id('test_user_0')) create(Builder('ogds_user').id('test_user_1')) self.request = self.mocker.mock() self.brains = [] for i in range(2): brain = self.stub() self.expect(brain.Title).result('Objekt %i' % (i)) self.expect(brain.missing).result(MissingValue) self.expect(brain.start).result( datetime(2012, 2, 25) + timedelta(i)) self.expect(brain.responsible).result('test_user_%i' % (i)) self.expect(brain.review_state).result('dossier-state-active') self.brains.append(brain) self.replay() translation_request = Environment(('de', 'de')) self.test_attributes = [ {'id': 'Title', 'title': _('label_title', default='Title')}, {'id': 'missing', 'missing': 'Missing', }, {'id': 'start', 'title': _('label_start', default='Start'), 'number_format': DATE_NUMBER_FORMAT}, {'id': 'responsible', 'title': _('label_responsible', default='Responsible'), 'transform': readable_author}, {'id': 'review_state', 'title': _('label_review_state', default='Review state'), 'transform': StringTranslater( translation_request, 'plone').translate}, ]
def __call__(self): objs = Clipboard(self.request).get_objs() if not objs: msg = _(u"msg_empty_clipboard", default=u"Can't paste items; the clipboard is emtpy") api.portal.show_message(message=msg, request=self.request, type='error') return self.redirect() if not self.is_pasting_objects_allowed(objs): msg = _(u"msg_pasting_type_not_allowed", default=u"Can't paste items, it's not allowed to add " "objects of this type.") api.portal.show_message( message=msg, request=self.request, type='error') return self.redirect() if not self.is_pasting_on_context_allowed(): msg = _(u"msg_pasting_not_allowed", default=u"Can't paste items, the context does not allow " "pasting items.") api.portal.show_message( message=msg, request=self.request, type='error') return self.redirect() self.activate_request_layer() self.copy_objects(objs) msg = _(u"msg_successfuly_pasted", default=u"Objects from clipboard successfully pasted.") api.portal.show_message(message=msg, request=self.request, type='info') return self.redirect()
def __call__(self): objs = Clipboard(self.request).get_objs() if not objs: msg = _(u"msg_empty_clipboard", default=u"Can't paste items; the clipboard is emtpy") api.portal.show_message(message=msg, request=self.request, type='error') return self.redirect() if not self.is_pasting_objects_allowed(objs): msg = _(u"msg_pasting_type_not_allowed", default=u"Can't paste items, it's not allowed to add " "objects of this type.") api.portal.show_message(message=msg, request=self.request, type='error') return self.redirect() if not self.is_pasting_on_context_allowed(): msg = _(u"msg_pasting_not_allowed", default=u"Can't paste items, the context does not allow " "pasting items.") api.portal.show_message(message=msg, request=self.request, type='error') return self.redirect() self.activate_request_layer() self.copy_objects(objs) msg = _(u"msg_successfuly_pasted", default=u"Objects from clipboard successfully pasted.") api.portal.show_message(message=msg, request=self.request, type='info') return self.redirect()
def __call__(self): objs = self.extract_selected_objects() if not objs: msg = _(u'error_no_items', default=u'You have not selected any Items.') api.portal.show_message(message=msg, request=self.request, type='error') return self.redirect() if not self.are_copyable(objs): msg = _(u'error_not_copyable', default=u"The item you selected cannot be copied.") api.portal.show_message(message=msg, request=self.request, type='error') return self.redirect() if any(is_or_contains_any_checked_out_document(obj) for obj in objs): msg = _(u'error_checked_out_cannot_be_copied', default=u"Checked out documents cannot be copied.") api.portal.show_message(message=msg, request=self.request, type='error') return self.redirect() Clipboard(self.request).set_objs(objs) msg = _(u'msg_successfuly_copied', default=u"Selected objects successfully copied.") api.portal.show_message(message=msg, request=self.request, type='info') return self.redirect()
class IOpenGeverBase(model.Schema): """ IOpengeverBase contains title and description fields This is a schema interface, not a marker interface! """ model.fieldset( u'common', label=_(u'fieldset_common', default=u'Common'), fields=[ u'title', u'description', ], ) dexteritytextindexer.searchable('title') title = schema.TextLine( title=_(u'label_title', default=u'Title'), required=True ) dexteritytextindexer.searchable('description') description = schema.Text( title=_(u'label_description', default=u'Description'), required=False, missing_value=u'', default=u'', )
def test_excel_reporter_value_rows(self): translation_request = Environment(('de', 'ch')) base_translater = StringTranslater(translation_request, 'opengever.base').translate columns = ( { 'id': 'title', 'title': _('label_title', default='Title') }, { 'id': 'classification', 'title': u'fooclass', 'transform': base_translater }, { 'id': 'Title', 'title': u'footitle', 'callable': True }, { 'id': 'unicorn', 'title': _('label_unicorn', default='Pony'), 'default': u'Rainbows!' }, ) self.login(self.regular_user) reporter = XLSReporter(self.request, columns, (self.document, )) workbook = self.get_workbook(reporter()) expected_row = [ u'Vertr\xe4gsentwurf', u'Nicht klassifiziert', u'Vertr\xe4gsentwurf', u'Rainbows!' ] self.assertEquals( expected_row, [cell.value for cell in list(workbook.active.rows)[-1]])
def translations(self): return json.dumps({ 'label_overview': translate( _(u'label_overview', default=u'Overview'), context=self.request), 'label_no_favorites': translate( _(u'label_no_favorites', default=u'No favorites exists.'), context=self.request) })
class ICreator(form.Schema): form.omitted('creators') creators = schema.Tuple( title=_(u'label_creators', u'Creators'), description=_(u'help_creators', u''), value_type=schema.TextLine(), required=False, missing_value=(), )
def get_items(self): return [ {'class': 'document_created', 'label': _('label_created', default='Created'), 'content': self.created(), 'replace': False}, {'class': 'last_modified', 'label': _('label_last_modified', default='Last modified'), 'content': self.modified(), 'replace': False}, ]
def setUp(self): super(TestReporter, self).setUp() create(Builder('ogds_user').id('test_user_0')) create(Builder('ogds_user').id('test_user_1')) self.request = self.mocker.mock() self.brains = [] for i in range(2): brain = self.stub() self.expect(brain.Title).result('Objekt %i' % (i)) self.expect(brain.missing).result(MissingValue) self.expect( brain.start).result(datetime(2012, 2, 25) + timedelta(i)) self.expect(brain.responsible).result('test_user_%i' % (i)) self.expect(brain.review_state).result('dossier-state-active') self.brains.append(brain) self.replay() translation_request = Environment(('de', 'de')) self.test_attributes = [ { 'id': 'Title', 'title': _('label_title', default='Title') }, { 'id': 'missing', 'missing': 'Missing', }, { 'id': 'start', 'title': _('label_start', default='Start'), 'number_format': DATE_NUMBER_FORMAT }, { 'id': 'responsible', 'title': _('label_responsible', default='Responsible'), 'transform': readable_author }, { 'id': 'review_state', 'title': _('label_review_state', default='Review state'), 'transform': StringTranslater(translation_request, 'plone').translate }, ]
class ITranslatedTitle(model.Schema): """Behavior schema adding translated title fields to dexterity content. """ form.order_before(title_de='*') searchable('title_de') title_de = TextLine(title=_(u'label_title_de', default=u'Title (German)'), required=True) form.order_before(title_fr='*') searchable('title_fr') title_fr = TextLine(title=_(u'label_title_fr', default=u'Title (French)'), required=True)
class ModelAddForm(AutoExtensibleForm, AddForm): """Base add-form for stand-alone model objects. """ ignoreContext = True schema = None model_class = None def __init__(self, context, request): super(ModelAddForm, self).__init__(context, request) self._created_object = None disable_edit_bar() def create(self, data): self.validate(data) return self.model_class(**data) def validate(self, data): """Hook to perform additional input validation.""" pass def add(self, obj): session = create_session() session.add(obj) session.flush() # required to create an autoincremented id self._created_object = obj # this renames the button but otherwise preserves super's behavior @button.buttonAndHandler(_('Save', default=u'Save'), name='save') def handleAdd(self, action): # self as first argument is required by the decorator super(ModelAddForm, self).handleAdd(self, action) if not self._finishedAdd: return api.portal.show_message( _(u'message_record_created', default='Record created'), api.portal.get().REQUEST) return self.request.RESPONSE.redirect(self.nextURL()) @button.buttonAndHandler(_(u'label_cancel', default=u'Cancel'), name='cancel') def cancel(self, action): return self.request.RESPONSE.redirect(self.cancelURL()) def nextURL(self): return self.context.absolute_url() def cancelURL(self): return self.context.absolute_url()
def test_excel_reporter_value_rows(self): translation_request = Environment(('de', 'ch')) base_translater = StringTranslater(translation_request, 'opengever.base').translate columns = ( {'id': 'title', 'title': _('label_title', default='Title')}, {'id': 'classification', 'title': u'fooclass', 'transform': base_translater}, {'id': 'Title', 'title': u'footitle', 'callable': True}, {'id': 'unicorn', 'title': _('label_unicorn', default='Pony'), 'default': u'Rainbows!'}, ) self.login(self.regular_user) reporter = XLSReporter(self.request, columns, (self.document, )) workbook = self.get_workbook(reporter()) expected_row = [u'Vertr\xe4gsentwurf', u'Nicht klassifiziert', u'Vertr\xe4gsentwurf', u'Rainbows!'] self.assertEquals(expected_row, [cell.value for cell in list(workbook.active.rows)[-1]])
def __call__(self): if self.context.cb_isCopyable(): Clipboard(self.request).set_objs([self.context]) msg = _(u'msg_successfuly_copied', default=u"Selected objects successfully copied.") msg_type = 'info' else: msg = _(u'error_not_copyable', default=u"The item you selected cannot be copied.") msg_type = 'error' api.portal.show_message( message=msg, request=self.request, type=msg_type) return self.request.RESPONSE.redirect(self.context.absolute_url())
def get_items(self): return [ { 'class': 'document_created', 'label': _('label_created', default='Created'), 'content': self.created(), 'replace': False }, { 'class': 'last_modified', 'label': _('label_last_modified', default='Last modified'), 'content': self.modified(), 'replace': False }, ]
def translations(self): return json.dumps({ 'label_title': translate(_(u'label_title', default=u'Title'), context=self.request), 'label_save': translate(_(u'Save', default=u'Save'), context=self.request), 'label_cancel': translate(_(u'label_cancel', default=u'Cancel'), context=self.request), 'message_title': translate(_(u'message_title_error', default=u'Error'), context=self.request), 'message_not_saved': translate(_(u'message_not_saved', default='Change could not be saved.'), context=self.request), })
def render_token_radiobutton(self, item, value): """Render the radio-button input element for an item.""" if isinstance(item, NullObject): # XXX - the checkedness persistency does not work as this is not a real value being passed in return ( u'<input id="{id}" name="{name}" value="{value}" title="{title}" type="radio" "{checked}" />' .format( id=u'-'.join((self.id, u'empty-marker')), name=self.name, value=u'--NOVALUE--', checked=u'checked="checked"' if u'--NOVALUE--' in self.value else u'', title=_(u'label_none', default=u'None'), )) term = self.terms.getTerm(item) is_checked = self.is_checked(term) item_id = '%s-%s' % (self.id, term.token) return u'<input id="{id}" name="{name}" value="{value}"'\ 'title="{title}" type="radio" {checked} />'.format( id=item_id, name=escape_html(self.name), value=term.token, checked='checked="checked"' if is_checked else '', title=escape_html(self.render_default_title(item, value)), )
def get_number_mapping(self): items = [] intid_util = getUtility(IIntIds) for prefix, intid in self.get_child_mapping().iteritems(): obj = intid_util.queryObject(intid) if obj: title = ITranslatedTitle(obj).translated_title() active = (self.get_prefix_mapping()[intid] == prefix) else: # if a repositoryfolder is already removed the intid # utility raises an KeyError. But the number should still # be in the list, because it should be available to remove # via the reference prefix manager. active = False title = _('label_already_removed', '-- Already removed object --') items.append({'prefix': prefix, 'title': title, 'active': active}) def key_sorter(obj): key = obj['prefix'] if (key.isdigit()): return int(key) return key return sorted(items, key=key_sorter)
def __call__(self): if self.context.cb_isCopyable(): Clipboard(self.request).set_objs([self.context]) msg = _(u'msg_successfuly_copied', default=u"Selected objects successfully copied.") msg_type = 'info' else: msg = _(u'error_not_copyable', default=u"The item you selected cannot be copied.") msg_type = 'error' api.portal.show_message(message=msg, request=self.request, type=msg_type) return self.request.RESPONSE.redirect(self.context.absolute_url())
def render_table(self): """Render the table that contains the radio-button sequence. Always renders a radio-button column as first column. If the field defines custom columns render these, if it does not render a column with the term's title. While rendering the table we pass only the token-values (i.e. the objects) to the ITableGenerator. This improves compatibility with already existing helpers that expect objects and not vocabulary-terms and with the ITableGenerator itself since it can perform attribe lookups based on the column name. """ generator = getUtility(ITableGenerator, 'ftw.tablegenerator') radio_column = ({ 'transform': self.render_token_radiobutton, 'sortable': False }, ) default_title_colum = ({ 'column_title': _(u'label_title', default=u'Title'), 'transform': self.render_default_title, }, ) return generator.generate([term.value for term in self.terms], radio_column + (self.field.columns or default_title_colum))
def render_token_radiobutton(self, item, value): """Render the radio-button input element for an item.""" if isinstance(item, NullObject): # XXX - the checkedness persistency does not work as this is not a real value being passed in return ( u'<input id="{id}" name="{name}" value="{value}" title="{title}" type="radio" "{checked}" />' .format( id=u'-'.join((self.id, u'empty-marker')), name=self.name, value=u'--NOVALUE--', checked=u'checked="checked"' if u'--NOVALUE--' in self.value else u'', title=_(u'label_none', default=u'None'), ) ) term = self.terms.getTerm(item) is_checked = self.is_checked(term) item_id = '%s-%s' % (self.id, term.token) return u'<input id="{id}" name="{name}" value="{value}"'\ 'title="{title}" type="radio" {checked} />'.format( id=item_id, name=escape_html(self.name), value=term.token, checked='checked="checked"' if is_checked else '', title=escape_html(self.render_default_title(item, value)), )
def render_table(self): """Render the table that contains the radio-button sequence. Always renders a radio-button column as first column. If the field defines custom columns render these, if it does not render a column with the term's title. While rendering the table we pass only the token-values (i.e. the objects) to the ITableGenerator. This improves compatibility with already existing helpers that expect objects and not vocabulary-terms and with the ITableGenerator itself since it can perform attribe lookups based on the column name. """ generator = getUtility(ITableGenerator, 'ftw.tablegenerator') radio_column = ({ 'transform': self.render_token_radiobutton, 'sortable': False },) default_title_colum = ({ 'column_title': _(u'label_title', default=u'Title'), 'transform': self.render_default_title, },) return generator.generate( [term.value for term in self.terms], radio_column + (self.field.columns or default_title_colum))
def validate(self, value): super(BaseRepositoryfolderValidator, self).validate(value) if not self._is_dossier_addable(value): msg = _(u'You cannot add dossiers in the selected repository ' u'folder. Either you do not have the privileges or the ' u'repository folder contains another repository folder.') raise Invalid(msg)
def translations(self): return json.dumps({ 'label_no_checked_out_docs': translate(_(u'label_no_checked_out_docs', default=u'No checked out documents'), context=self.request), 'label_no_recently_touched_docs': translate(_(u'label_no_recently_touched_docs', default=u'No recently touched documents yet'), context=self.request), 'label_checked_out': translate(_(u'label_checked_out', default=u'Checked out'), context=self.request), 'label_recently_touched': translate(_(u'label_recently_touched', default=u'Recently touched'), context=self.request), })
def test_label_row_is_translated_attribute_titles(self): columns = ({ 'id': 'title', 'title': _('label_title', default='Title') }, ) self.login(self.regular_user) reporter = XLSReporter(self.request, columns, (self.document, )) workbook = self.get_workbook(reporter()) self.assertEquals( [u'Title'], [cell.value for cell in list(workbook.active.rows)[0]])
def translations(self): return json.dumps({ 'label_no_checked_out_docs': translate( _(u'label_no_checked_out_docs', default=u'No checked out documents'), context=self.request), 'label_no_recently_touched_docs': translate( _(u'label_no_recently_touched_docs', default=u'No recently touched documents yet'), context=self.request), 'label_checked_out': translate( _(u'label_checked_out', default=u'Checked out'), context=self.request), 'label_recently_touched': translate( _(u'label_recently_touched', default=u'Recently touched'), context=self.request), })
def handleAdd(self, action): # self as first argument is required by the decorator super(ModelAddForm, self).handleAdd(self, action) if not self._finishedAdd: return api.portal.show_message( _(u'message_record_created', default='Record created'), api.portal.get().REQUEST) return self.request.RESPONSE.redirect(self.nextURL())
def __call__(self): portal_catalog = getToolByName(self.context, 'portal_catalog') if 'paths' in self.request.keys(): paths = self.request.paths objlist = [] cplist = [] for path in paths: # getting Objects with catalog obj = portal_catalog(path={ 'query': path, 'depth': 0 })[0].getObject() if not obj.cb_isCopyable(): msg = _(u'error_not_copyable', default=u"The item you selected cannot be copied") IStatusMessage(self.request).addStatusMessage(msg, type='error') return self.request.response.redirect( self.context.absolute_url()) objlist.append(obj) for objid in objlist: cplist.append( aq_parent(aq_inner(objid)).manage_copyObjects(objid.id)) cpstring = ':'.join(cplist) resp = self.request['RESPONSE'] resp.setCookie('__cp', cpstring, path='%s' % self.cookie_path(self.request)) self.request['__cp'] = cpstring else: msg = _(u'error_no_items', default=u'You have not selected any Items') IStatusMessage(self.request).addStatusMessage(msg, type='error') orig_template = self.request.form.get('orig_template') if orig_template: redir_url = orig_template else: # orig_template might not be in the request - fall back to context redir_url = self.context.absolute_url() return self.request.RESPONSE.redirect(redir_url)
def create_initial_version(obj, event): """When a object was copied, create an initial version. """ portal = getSite() pr = portal.portal_repository history = pr.getHistory(obj) if history is not None and not len(history) > 0: comment = _(u"label_initial_version_copied", default="Initial version (document copied)") # Create an initial version pr._recursiveSave(obj, {}, pr._prepareSysMetadata(comment), autoapply=pr.autoapply)
class IChanged(model.Schema): """ IChanged contains the changed field tracking when an object was last changed by a user. """ form.omitted('changed') changed = schema.Datetime( title=_(u'changed_date', default="Date last changed"), required=False, readonly=True, )
def adjust_title_on_language_fields(self): """If there is only one language specific title field available, we ajdust the label to a `Title`. """ supported_languages = set(TranslatedTitle.SUPPORTED_LANGUAGES) supported_active_languages = supported_languages.intersection( set(self.get_active_languages())) if len(supported_active_languages) == 1: fieldname = self.get_title_fieldname( list(supported_active_languages)[0]) self.widgets[fieldname].label = _(u"label_title", default=u"Title")
def __call__(self): objs = self.extract_selected_objects() if not objs: msg = _( u'error_no_items', default=u'You have not selected any Items.') api.portal.show_message( message=msg, request=self.request, type='error') return self.redirect() if not self.are_copyable(objs): msg = _(u'error_not_copyable', default=u"The item you selected cannot be copied.") api.portal.show_message( message=msg, request=self.request, type='error') return self.redirect() Clipboard(self.request).set_objs(objs) msg = _(u'msg_successfuly_copied', default=u"Selected objects successfully copied.") api.portal.show_message(message=msg, request=self.request, type='info') return self.redirect()
def __call__(self): portal_catalog = getToolByName(self.context, 'portal_catalog') if 'paths' in self.request.keys(): paths = self.request.paths objlist = [] cplist = [] for path in paths: # getting Objects with catalog obj = portal_catalog( path={'query': path, 'depth': 0})[0].getObject() if not obj.cb_isCopyable(): msg = _(u'error_not_copyable', default=u"The item you selected cannot be copied") IStatusMessage( self.request).addStatusMessage(msg, type='error') return self.request.response.redirect( self.context.absolute_url()) objlist.append(obj) for objid in objlist: cplist.append( aq_parent(aq_inner(objid)).manage_copyObjects(objid.id)) cpstring = ':'.join(cplist) resp = self.request['RESPONSE'] resp.setCookie( '__cp', cpstring, path='%s' % self.cookie_path(self.request)) self.request['__cp'] = cpstring else: msg = _( u'error_no_items', default=u'You have not selected any Items') IStatusMessage(self.request).addStatusMessage(msg, type='error') orig_template = self.request.form.get('orig_template') if orig_template: redir_url = orig_template else: # orig_template might not be in the request - fall back to context redir_url = self.context.absolute_url() return self.request.RESPONSE.redirect(redir_url)
def render_default_title(self, item, value): """Render the default title colum with the term's title.""" if isinstance(item, NullObject): return _(u'label_none', default=u'None') term = self.terms.getTerm(item) if ITitledTokenizedTerm.providedBy(term): label = translate(term.title, context=self.request, default=term.title) else: label = util.toUnicode(term.value) return label
def error(self, message): """ Append a standardized error message with given message. """ message = { 'messageClass': 'error', 'messageTitle': translate(_('message_title_error', default=u"Error"), context=self.request), 'message': translate(message, context=self.request), } self.response['messages'] = self.response.get('messages', []) + [message] return self
def info(self, message): """ Append a standardized info message with given message. """ message = { 'messageClass': 'info', 'messageTitle': translate(_('message_title_info', default=u"Information"), context=self.request), 'message': translate(message, context=self.request), } self.response['messages'] = self.response.get('messages', []) + [message] return self
def warning(self, message): """ Append a standardized warning message with given message. """ message = { 'messageClass': 'warning', 'messageTitle': translate(_('message_title_warning', default=u"Warning"), context=self.request), 'message': translate(message, context=self.request), } self.response['messages'] = self.response.get('messages', []) + [message] return self
def create_initial_version(obj, event): """When a object was copied, create an initial version. """ portal = getSite() pr = portal.portal_repository history = pr.getHistory(obj) if history is not None and not len(history) > 0: comment = _(u'label_initial_version_copied', default="Initial version (document copied)") # Create an initial version pr._recursiveSave(obj, {}, pr._prepareSysMetadata(comment), autoapply=pr.autoapply)
def return_excel(self, reporter): data = reporter() if not data: msg = _(u'Could not generate the report.') api.portal.show_message(msg, request=self.request, type='error') return self.request.RESPONSE.redirect(self.context.absolute_url()) response = self.request.RESPONSE response.setHeader( 'Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') set_attachment_content_disposition(self.request, self.filename) return data
def render(self): self._init_version_file() if not self.version_file: msg = _(u'No file in in this version') IStatusMessage(self.request).addStatusMessage(msg, type='error') return self.request.RESPONSE.redirect(self.context.absolute_url()) response = self.request.RESPONSE response.setHeader('Content-Type', self.version_file.contentType) response.setHeader('Content-Length', self.version_file.getSize()) set_attachment_content_disposition( self.request, self.version_file.filename.encode('utf-8')) return self.version_file.data
class IClassification(model.Schema): model.fieldset( u'classification', label=_(u'fieldset_classification', default=u'Classification'), fields=[ u'classification', u'privacy_layer', u'public_trial', u'public_trial_statement', ], ) classification = schema.Choice( title=_(u'label_classification', default=u'Classification'), description=_(u'help_classification', default=u''), source=u'classification_classification_vocabulary', required=True, ) privacy_layer = schema.Choice( title=_(u'label_privacy_layer', default=u'Privacy layer'), description=_(u'help_privacy_layer', default=u''), source=u'classification_privacy_layer_vocabulary', required=True, ) public_trial = schema.Choice( title=_(u'label_public_trial', default=u'Public Trial'), description=_(u'help_public_trial', default=u''), source=u'classification_public_trial_vocabulary', required=True, defaultFactory=public_trial_default, ) public_trial_statement = schema.Text( title=_(u'label_public_trial_statement', default=u'Public trial statement'), description=_(u'help_public_trial_statement', default=u''), required=False, default=u'', )
class IClassification(form.Schema): form.fieldset( u'classification', label=_(u'fieldset_classification', default=u'Classification'), fields=[ u'classification', u'privacy_layer', u'public_trial', u'public_trial_statement', ], ) classification = schema.Choice( title=_(u'label_classification', default=u'Classification'), description=_(u'help_classification', default=u''), source=u'classification_classification_vocabulary', required=True, ) #form.widget(privacy_layer=checkbox.SingleCheckBoxFieldWidget) privacy_layer = schema.Choice( title=_(u'label_privacy_layer', default=u'Privacy layer'), description=_(u'help_privacy_layer', default=u''), source=u'classification_privacy_layer_vocabulary', required=True, ) public_trial = schema.Choice( title=_(u'label_public_trial', default=u'Public Trial'), description=_(u'help_public_trial', default=u''), source=u'classification_public_trial_vocabulary', required=True, ) public_trial_statement = schema.Text( title=_(u'label_public_trial_statement', default=u'Public trial statement'), description=_(u'help_public_trial_statement', default=u''), required=False, default=u'', )
def render(self): self._init_version_file() if not self.version_file: msg = _(u'No file in in this version') IStatusMessage(self.request).addStatusMessage( msg, type='error') return self.request.RESPONSE.redirect(self.context.absolute_url()) response = self.request.RESPONSE response.setHeader('Content-Type', self.version_file.contentType) response.setHeader('Content-Length', self.version_file.getSize()) set_attachment_content_disposition( self.request, self.version_file.filename.encode('utf-8')) return self.version_file.data
def handleApply(self, action): data, errors = self.extractData() if errors: self.status = self.formErrorsMessage return self.validate(data) self.applyChanges(data) self.status = self.successMessage api.portal.show_message( _(u'message_changes_saved', default='Changes saved'), api.portal.get().REQUEST) return self.redirect_to_next_url()
def save_new_prefix(self, action): data, errors = self.extractData() if len(errors) > 0: return obj = self.context parent = aq_parent(aq_inner(obj)) new_prefix = unicode(data['prefix']) old_prefix = IReferenceNumberPrefix(parent).get_number(obj) intids = getUtility(IIntIds) intid = intids.getId(aq_base(obj)) prefix_adapter = IReferenceNumberPrefix(parent) # Check if prefix already allocated prefix_mapping = prefix_adapter.get_prefix_mapping(obj) child_mapping = prefix_adapter.get_child_mapping(obj) if new_prefix in prefix_mapping.values() or \ new_prefix in child_mapping.keys(): raise Exception("This prefix is already allocated!") # Save new prefix in both mappings prefix_mapping[intid] = new_prefix child_mapping[new_prefix] = intid # Drop entry for old prefix from child_mapping if old_prefix in child_mapping: child_mapping.pop(old_prefix) if IRepositoryFolder.providedBy(obj): # Also change the prefix on the repo folder behavior rnp_behavior = IReferenceNumberPrefixBehavior(obj) rnp_behavior.reference_number_prefix = new_prefix obj.reindexObject() IStatusMessage(self.request).addStatusMessage( _(u"Reference Number prefix for '%s' " "changed to '%s'" % (obj.id, new_prefix)), 'info') return self.request.RESPONSE.redirect(self.context.absolute_url())
def handleDynamicTypeCopiedEvent(ob, event): # Make sure owner local role is set after pasting # The standard Zope mechanisms take care of executable ownership current_user = _getAuthenticatedUser(ob) if current_user is None: return current_user_id = current_user.getId() if current_user_id is not None: # Customization are_all_local_roles_deleted = RoleAssignmentManager(ob)\ .update_local_roles_after_copying(current_user_id) if not are_all_local_roles_deleted: message = _( 'local_roles_copied', default=u"Some local roles were copied with the objects") api.portal.show_message(message=message, request=getRequest(), type='info')
def public_trial_vocabulary_factory(context): return SimpleVocabulary([ SimpleTerm(msgid, title=_(msgid)) for msgid in PUBLIC_TRIAL_CHOICES])
def title_helper(item, title): if isinstance(item, NullObject): return _(u'label_null', default=u'Null') else: return title
def _handle_form_submitted(self, REQUEST=None): self._delete_objs(self.objs_without_backrefs) api.portal.show_message(_(u'Items successfully deleted.'), self.request, type="info") return self._redirect_to_orig_template()
def __init__(self, title=None, url=None): self.title = _('unauthorized_backreference', default="You are not allowed to see this reference")
def get_unmark_favorite_title(self): return _('tooltip_remove_favorite_action', default=u'Remove from favorites')