def setup_form(self): self.buttons = button.Buttons() self.handlers = button.Handlers() if self.form_type() == 'addform': preview = button.Button(title=_(u'Continue'), name='save') self.buttons += button.Buttons(preview) preview_handler = button.Handler(preview, self.__class__.handle_preview) self.handlers.addHandler(preview, preview_handler) self.ignoreContext = True self.ignoreReadonly = True else: update = button.Button(title=_(u'Continue'), name='save') self.buttons += button.Buttons(update) update_handler = button.Handler(update, self.__class__.handle_update) self.handlers.addHandler(update, update_handler) self.context = self.event cancel = button.Button(title=_(u'Cancel'), name='cancel') self.buttons += button.Buttons(cancel) cancel_handler = button.Handler(cancel, self.__class__.handle_cancel) self.handlers.addHandler(cancel, cancel_handler)
class SelectedPeriodsAddView(form.AddForm): template = ViewPageTemplateFile('templates/selected_periods_add.pt') fields = field.Fields(ISelectedPeriodsAddForm) _object_added = None buttons = button.Buttons( button.Button('add', title=_('Add')), button.Button('cancel', title=_('Cancel'))) @property def owner(self): return IHaveSchedule(self.context) @property def term(self): return ITerm(self.owner, None) @button.handler(buttons["add"]) def handleAdd(self, action): return form.AddForm.handleAdd.func(self, action) @button.handler(buttons["cancel"]) def handleCancel(self, action): url = absoluteURL(self.context, self.request) self.request.response.redirect(url) def updateActions(self): super(SelectedPeriodsAddView, self).updateActions() self.actions['add'].addClass('button-ok') self.actions['cancel'].addClass('button-cancel') def create(self, data): timetable = data['timetable'] schedule = SelectedPeriodsSchedule( timetable, data['first'], data['last'], title=timetable.title, timezone=timetable.timezone) return schedule def add(self, schedule): chooser = INameChooser(self.context) name = chooser.chooseName('', schedule) self.context[name] = schedule self._object_added = schedule def nextURL(self): if self._object_added is not None: return '%s/edit.html' % ( absoluteURL(self._object_added, self.request)) return absoluteURL(self.context, self.request)
def updateActions(self): btn = button.Button(name='save', title=_(u'Save')) self.buttons += button.Buttons(btn) self.handlers.addHandler(btn, self.handleApply) if ISaveAndActionButtons.providedBy(self.context): append_action_buttons(self) if ICancelButton.providedBy(self.context): btn = button.Button(name='cancel', title=_(u'Cancel')) self.buttons += button.Buttons(btn) self.handlers.addHandler(btn, self.handleCancel) super(SubmissionEditForm, self).updateActions()
class IWizardButtons(zope.interface.Interface): """Wizard button interfaces.""" back = button.Button( title=_('Back'), condition=lambda form: form.showBackButton) zope.interface.alsoProvides(back, (IBackButton,)) next = button.Button( title=_('Next'), condition=lambda form: form.showNextButton) zope.interface.alsoProvides(next, (INextButton,)) complete = button.Button( title=_('Complete'), condition=lambda form: form.showCompleteButton) zope.interface.alsoProvides(complete, (INextButton,))
def setup_form(self): self.buttons = button.Buttons() self.handlers = button.Handlers() save = button.Button(title=_(u'Save Event'), name='save') self.buttons += button.Buttons(save) save_handler = button.Handler(save, self.__class__.handle_save) self.handlers.addHandler(save, save_handler) self.event = self.context cancel = button.Button(title=_(u'Cancel Event Submission'), name='cancel') self.buttons += button.Buttons(cancel) cancel_handler = button.Handler(cancel, self.__class__.handle_cancel) self.handlers.addHandler(cancel, cancel_handler)
def append_action_buttons(form): # Get currently available workflow actions (re-use from menu) actions = {} menu = getUtility(IBrowserMenu, name='plone_contentmenu_workflow') def lower_first(s): if s and isinstance(s, unicode) and len(s) > 1: return s[0].lower() + s[1:] elif s and isinstance(s, unicode): return s.lower() return s for action in menu.getMenuItems(form.context, form.request): item_id = action.get('extra', {}).get('id', u'') or u'' action_id = re.sub('^workflow-transition-(.*)', '\\1', item_id) actions[action_id] = action for action in ['advanced', 'policy']: # blacklisted menuitems if action in actions: del actions[action] form.buttons = form.buttons.copy() for action_id, action in actions.iteritems(): new_button = button.Button( name=re.sub('^workflow-transition-(.*)', '\\1', action_id), title=u' '.join([ translate( _(u'Save and'), context=form.request, ), lower_first( translate( action['title'], domain='plone', context=form.request, ), ), ]), ) form.buttons += button.Buttons(new_button) form.handlers.addHandler( new_button, button.Handler( new_button, functools.partial(form.redirect, action['action']), ), )
class EditForm(edit.DefaultEditForm): """ """ buttons = edit.DefaultEditForm.buttons preview = button.Buttons( button.Button('preview', title=u'Save and preview')) buttons = preview + buttons buttons['cancel'].title = _(u'Clear unsaved changes') handlers = edit.DefaultEditForm.handlers def nextURL(self): return 'edit' @button.handler(buttons['preview']) def handle_preview(self, action): data, errors = self.extractData() if errors: self.status = self.formErrorsMessage return self.applyChanges(data) self.request.response.redirect('nuplone-view') notify(EditFinishedEvent(self.context))
class FieldsSchemaListing(SchemaListing): template = ViewPageTemplateFile('fields_listing.pt') @property def default_fieldset_label(self): return (self.context.aq_parent.default_fieldset_label or super(FieldsSchemaListing, self).default_fieldset_label) def handleModelEdit(self, action): self.request.response.redirect('@@modeleditor') if HAVE_RESOURCE_EDITOR: but = button.Button("modeleditor", title=_(u'Edit XML Fields Model')) FieldsSchemaListing.buttons += button.Buttons(but) handler = button.Handler(but, FieldsSchemaListing.handleModelEdit) FieldsSchemaListing.handlers.addHandler(but, handler) class EasyFormFieldsListingPage(SchemaListingPage): """ Form wrapper so we can get a form with layout. We define an explicit subclass rather than using the wrap_form method from plone.z3cform.layout so that we can inject the schema name into the form label. """ form = FieldsSchemaListing index = ViewPageTemplateFile('model_listing.pt')
class ActionEditView(layout.FormWrapper): form = ActionEditForm def __init__(self, context, request): super(ActionEditView, self).__init__(context, request) self.field = context.field @lazy_property def label(self): return _(u"Edit Action '${fieldname}'", mapping={'fieldname': self.field.__name__}) if HAVE_RESOURCE_EDITOR: but = button.Button("modeleditor", title=_(u'Edit XML Actions Model')) EasyFormActionsListing.buttons += button.Buttons(but) handler = button.Handler(but, EasyFormActionsListing.handleModelEdit) EasyFormActionsListing.handlers.addHandler(but, handler) class ModelEditorView(BrowserView): """ editor view """ title = _(u'Edit XML Actions Model') def modelSource(self): return self.context.aq_parent.actions_model class AjaxSaveHandler(AjaxSaveHandler): """ handle AJAX save posts """
class IXMPPUserSetup(Interface): """ """ users = schema.List( title=_(u"label_users", default=u"Choose Users"), description=_(u"help_user_setup", default=u"Choose here the users you'd like to register " u"or deregister from the XMPP server."), value_type=schema.TextLine(), required=True, ) register_selected = button.Button( title=_(u'label_register_selected', default=u"Register Selected Users"), description=_(u"help_register_selected", default=u"Click this button to let the above " "selected users be registered on the XMPP " "server. Already registered users will be " "ignored."), required=False, ) deregister_selected = button.Button( title=_(u'label_deregister_selected', default=u"Deregister Selected Users"), description=_(u"help_deregister_selected", default=u"Click this button to deregister the " "above selected users from the XMPP server."), required=False, ) update_selected_vcards = button.Button( title=_(u'label_update_selected_vcards', default=u"Update selected users' vCards"), description=_( u"help_update_selected_vcards", default=u"Click here to update the vCards of the above selected " "users in the site."), required=False, ) register_all = button.Button( title=_(u'label_register_all', default=u"Register ALL Users"), description=_(u"help_register_all", default=u"Click this button to register ALL " "the users in the site on the XMPP " "server. Already registered users will be " "ignored. BE AWARE: if you register lots " "of users and have auto-subscribe turned on, " "your Plone server will be very busy with multiple " "threads and may become unresponsive for some " "minutes."), required=False, ) deregister_all = button.Button( title=_(u'label_deregister_all', default=u"Deregister ALL Users"), description=_(u"help_deregister_all", default=u"Click this button to deregister ALL " "the users in the site from the XMPP server."), required=False, ) update_vcards = button.Button( title=_(u'label_update_vcards', default=u"Update ALL Users' vCards"), description=_(u"help_update_vcards", default=u"Click here to update the vCards of ALL " "the users in the site."), required=False, ) # XXX: Useful in certain circumstances, but dangerous and should probably # not be available by default. # clear_all_passwords = button.Button( title=_(u'label_clear_passwords', default=u"Completely wipe password storage"), description=_(u"help_clear_passwords", default=u"DON'T CLICK THIS UNLESS YOU KNOW WHAT " u"YOU'RE DOING! This will remove ALL the " u"entries in the XMPP password storage " u"utility in Plone and should only be useful " u"in very rare cases or while developing."), required=False, )
class FlourishSelectedPeriodsAddTermsView(FlourishSelectedPeriodsAddView): fields = field.Fields(ISelectedPeriodsAddTermsForm) _objects_added = None _objects_created = None buttons = button.Buttons( button.Button('add', title=_('Add')), button.Button('cancel', title=_('Cancel'))) @property def owner(self): return IHaveSchedule(self.context) @button.handler(buttons["add"]) def handleAdd(self, action): return form.AddForm.handleAdd.func(self, action) @button.handler(buttons["cancel"]) def handleCancel(self, action): url = absoluteURL(self.context, self.request) self.request.response.redirect(url) def updateActions(self): super(SelectedPeriodsAddView, self).updateActions() self.actions['add'].addClass('button-ok') self.actions['cancel'].addClass('button-cancel') def create(self, data): section = self.owner linked = section.linked_sections terms = [(ITerm(s), s) for s in linked] terms = [(term, section) for term, section in terms if (term.first >= data['first'].first and term.last <= data['last'].last)] self._objects_created = [] timetable = data['timetable'] for term, section in terms: schedule = SelectedPeriodsSchedule( timetable, term.first, term.last, title=timetable.title, timezone=timetable.timezone) self._objects_created.append((section, schedule)) return self._objects_created def add(self, schedules): self._objects_added = [] for section, schedule in self._objects_created: schedules = IScheduleContainer(section) chooser = INameChooser(schedules) name = chooser.chooseName('', schedule) schedules[name] = schedule self._objects_added.append(schedule) def nextURL(self): if self._objects_added: int_ids = getUtility(IIntIds) also_apply = '' this_section = self.owner n = 0 for schedule in self._objects_added: section = IHaveSchedule(schedule) if sameProxiedObjects(this_section, section): continue also_apply = '&'.join( [also_apply, 'section-%d=%s&schedule-%d=%s' % ( n, int_ids.getId(removeSecurityProxy(section)), n, urllib.quote(schedule.__name__)), ]) n += 1 if also_apply: also_apply = '?' + also_apply return '%s/edit_multi.html%s' % ( absoluteURL(self._objects_added[0], self.request), also_apply) return absoluteURL(self.context, self.request)
def update(self): self.buttons = button.Buttons( self.buttons, button.Button('catalogupdate', _(u'Catalog Update')), button.Button('reindex', _(u'Catalog Reindex')), button.Button('unindex', _(u'Catalog Unindex'))) super(SQLTypeOverviewForm, self).update()
def update(self): self.form.buttons = button.Buttons( self.form.buttons, button.Button('cancel', _(u'Cancel'))) super(CancelActions, self).update()
class IPopulateFormButtons(interface.Interface): """ """ create = button.Button(title=_(u"Create the dummy content"))
import pkg_resources # We want to add a Plone-specific feature to the SchemaListing # form from plone.schemaeditor. We'll do this by subclassing, then # adding the plone-specific button for the ace model editor. class EnhancedSchemaListing(SchemaListing): def handleModelEdit(self, action): self.request.response.redirect('@@modeleditor') if pkg_resources.get_distribution('plone.resourceeditor'): but = button.Button('modeleditor', title=u'Edit XML Field Model') EnhancedSchemaListing.buttons += button.Buttons(but) handler = button.Handler(but, EnhancedSchemaListing.handleModelEdit) EnhancedSchemaListing.handlers.addHandler(but, handler) class TypeFieldsPage(TypeFormLayout): label = _(u'Fields') @property def form(self): if self.context.fti.hasDynamicSchema: return EnhancedSchemaListing else: return ReadOnlySchemaListing
HAVE_RESOURCE_EDITOR = True except ImportError: HAVE_RESOURCE_EDITOR = False # We want to add a Plone-specific feature to the SchemaListing # form from plone.schemaeditor. We'll do this by subclassing, then # adding the plone-specific button for the ace model editor. class EnhancedSchemaListing(SchemaListing): def handleModelEdit(self, action): self.request.response.redirect('@@modeleditor') if HAVE_RESOURCE_EDITOR: but = button.Button("modeleditor", title=u'Edit XML Field Model') EnhancedSchemaListing.buttons += button.Buttons(but) handler = button.Handler(but, EnhancedSchemaListing.handleModelEdit) EnhancedSchemaListing.handlers.addHandler(but, handler) class TypeFieldsPage(TypeFormLayout): label = _(u'Fields') @property def form(self): if self.context.fti.hasDynamicSchema: return EnhancedSchemaListing else: return ReadOnlySchemaListing
def updateActions(self): # override to re-title save button and remove the cancel button btn = button.Button(name='submit', title=self.submit_label) self.buttons += button.Buttons(btn) self.handlers.addHandler(btn, self.handleAdd) super(FlowSubmitForm, self).updateActions()