Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
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)
Ejemplo n.º 3
0
    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()
Ejemplo n.º 4
0
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,))
Ejemplo n.º 5
0
    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)
Ejemplo n.º 6
0
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']),
            ),
        )
Ejemplo n.º 7
0
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))
Ejemplo n.º 8
0

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')
Ejemplo n.º 9
0
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 """
Ejemplo n.º 10
0
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,
    )
Ejemplo n.º 11
0
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)
Ejemplo n.º 12
0
 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()
Ejemplo n.º 13
0
 def update(self):
     self.form.buttons = button.Buttons(
         self.form.buttons, button.Button('cancel', _(u'Cancel')))
     super(CancelActions, self).update()
Ejemplo n.º 14
0
class IPopulateFormButtons(interface.Interface):
    """ """
    create = button.Button(title=_(u"Create the dummy content"))
Ejemplo n.º 15
0
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
Ejemplo n.º 16
0
    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
Ejemplo n.º 17
0
 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()