class RunLatexViewlet(ViewletForm): zope.interface.implements(IViewlet) label = _(u"Run LaTeX on all bibliographic items") info = _( u"This is a very expensive task. So you should only do it if it is really required." ) ignoreContext = True prefix = 'RunLaTeX' def __init__(self, context, request, view, manager): """ See zope.viewlet.viewlet.ViewletBase""" self.__parent__ = view self.context = context self.request = request self.manager = manager fields = field.Fields() @button.buttonAndHandler(_(u"Run LaTeX"), name="runlatex") def handleRunlatex(self, action): for entry in self.context.values(): if interfaces.IBiblatexEntry.providedBy(entry): setFormattedStrings(entry, object())
class EditWizard(wizard.Wizard): zope.interface.implements( IEditWizard, ITabbedContentLayout, ) label = _('zblx-editwizard-label', u"Edit Bibliographic Entry") def setUpSteps(self): return [ step.addStep(self, 'entry_type', weight=1), step.addStep(self, 'required', weight=10), step.addStep(self, 'optional', weight=20), step.addStep(self, 'roles', weight=30), step.addStep(self, 'shortening', weight=40), step.addStep(self, 'sorting', weight=50), step.addStep(self, 'linking', weight=60), step.addStep(self, 'compat', weight=100), step.addStep(self, 'publication_facts', weight=25), step.addStep(self, 'general', weight=28), ] def OFFnextURL(self): return absoluteURL(self.context, self.request)
class AddViewlet(ViewletForm): zope.interface.implements(IViewlet) ignoreContext = True @property def action(self): return absoluteURL(self.context, self.request) + '/@@addBiblatexEntry.html' def __init__(self, context, request, view, manager): """ See zope.viewlet.viewlet.ViewletBase""" self.__parent__ = view self.context = context self.request = request self.manager = manager fields = field.Fields(interfaces.IBiblatexEntry).select('entry_type') @button.buttonAndHandler(_('Add Entry'), name='next') def handleNext(self, action): """ We won't see this action (except abuse) because the action url points to a different url.""" data, errors = self.extractData() if errors: self.status = self.formErrorMessage return
class OptionalStep(RequiredStep): step_flieds = 'optional' label = _('zblx-addwizard-optionalstep-label' u"Optional") more_fields_in_form = ()
class SimpleAddForm(form.AddForm): """A very simple add form for entry type objects. """ label = _('biblatexentry-simpleaddform-label', u"Add Entry") fields = field.Fields(interfaces.IBiblatexEntry).omit( 'options', '__name__', '__parent__') def create(self, data): obj = zope.component.createObject( 'quotationtool.biblatex.biblatexentry.BiblatexEntry') form.applyChanges(self, obj, data) # Grant the current user the Edit permission by assigning him # the quotationtool.Creator role, but only locally in the # context of the newly created object. manager = IPrincipalRoleManager(obj) manager.assignRoleToPrincipal('quotationtool.Creator', self.request.principal.id) return obj def add(self, obj): self._name = INameChooser(self.context).chooseName(None, obj) self.context[self._name] = self._obj = obj def nextURL(self): return absoluteURL(self._obj, self.request)
class RequiredStep(step.Step): zope.interface.implements(IAddWizard) label = _('zblx-addwizard-requiredstep-label' u"Required") ignoreContext = True handleApplyOnNext = False step_flieds = 'required' # additional fields to setup more_fields = ( 'crossref', 'xref', 'hyphenation', ) # additional fields to show up in form more_fields_in_form = more_fields @property def fields(self): helper_widget = zope.component.getMultiAdapter( (interfaces.IBiblatexEntry['entry_type'], self.request), IFieldWidget) helper_widget.name = self.prefix + 'widgets.entry_type' if not helper_widget.name in self.request.form: raise UserError( _("You have to choose an entry type. " + unicode(helper_widget.name) + unicode(self.request.form))) helper_widget.update() _type = helper_widget.value[0] # we get a list from request.form try: interfaces.IBiblatexEntry['entry_type'].validate(_type) except Exception: raise UserError(_("Invalid entry type.")) self.type = getEntryTypeSafely(_type) flds = ('entry_type', ) flds += getRequiredTuple(self.type.required) flds += getTuple(self.type.optional) flds += self.more_fields return field.Fields(interfaces.IBiblatexEntry).select(*flds) def updateWidgets(self): super(RequiredStep, self).updateWidgets() self.widgets['entry_type'].mode = HIDDEN_MODE if self.step_flieds == 'required': flds = getRequiredTuple(self.type.required) else: flds = getTuple(getattr(self.type, self.step_flieds, [])) flds += self.more_fields_in_form for name in self.widgets.keys(): if name not in flds: self.widgets[name].mode = HIDDEN_MODE
def fields(self): helper_widget = zope.component.getMultiAdapter( (interfaces.IBiblatexEntry['entry_type'], self.request), IFieldWidget) helper_widget.name = self.prefix + 'widgets.entry_type' if not helper_widget.name in self.request.form: raise UserError( _("You have to choose an entry type." + unicode(self.request.form))) helper_widget.update() _type = helper_widget.value[0] # we get a list from request.form try: interfaces.IBiblatexEntry['entry_type'].validate(_type) except Exception: raise UserError(_("Invalid entry type.")) self.type = getEntryTypeSafely(_type) flds = ('entry_type', ) flds += getRequiredTuple(self.type.required) flds += getTuple(self.type.optional) flds += self.more_fields return field.Fields(interfaces.IBiblatexEntry).select(*flds)
class AddWizard(wizard.Wizard): zope.interface.implements(IAddWizard) label = _('zblx-addwizard-label', u"Add bibliographic entry") ignoreContext = True def setUpSteps(self): return [ step.addStep(self, 'Required', weight=10), step.addStep(self, 'Optional', weight=20), ]
class EditOptionalStep(step.EditStep): zope.interface.implements(ITabbedContentLayout, IEditStep) label = _('zblx-editoptionalstep-label', u"Optional") _myflds = 'optional' @property def fields(self): _type = getEntryTypeSafely(getattr(self.context, 'entry_type')) flds = getTuple(getattr(_type, self._myflds)) return field.Fields(interfaces.IBiblatexEntry).select(*flds)
class BiblatexConfigViewlet(ViewletForm): label = _('biblatexconfig-label', u"BibLaTeX Configuration") mode = DISPLAY_MODE fields = field.Fields(interfaces.IBiblatexConfiguration) def getContent(self): config = zope.component.queryUtility( interfaces.IBiblatexConfiguration, context=self.context, ) return config
def fields(self): # use a widget to get the entry type from the request helper_widget = zope.component.getMultiAdapter( (interfaces.IBiblatexEntry['entry_type'], self.request), IFieldWidget) helper_widget.name = self.prefix + 'widgets.entry_type' if helper_widget.name in self.request.form: helper_widget.update() _type = helper_widget.value[0] # we get a list from request.form try: interfaces.IBiblatexEntry['entry_type'].validate(_type) except Exception: raise UserError( _("Wrong entry type: ${TYPE}", mapping={'TYPE': _type})) else: _type = getattr(self.context, 'entry_type') self.type = getEntryTypeSafely(_type) flds = getRequiredTuple(self.type.required) + ('entry_type', ) return field.Fields(interfaces.IBiblatexEntry).select(*flds)
class EditRequiredStep(step.EditStep): """ Edit required field. We have to get the entry type ether from the request (from step 1) or from the context. We have to get that from the request: request.form = {u'form.widgets.entry_type-empty-marker': u'1', u'form.buttons.next': u'Next', u'form.widgets.entry_type': [u'Book']} """ zope.interface.implements(ITabbedContentLayout, IEditStep) label = _('zblx-editrequiredstep-label', u"Required") @property def fields(self): # use a widget to get the entry type from the request helper_widget = zope.component.getMultiAdapter( (interfaces.IBiblatexEntry['entry_type'], self.request), IFieldWidget) helper_widget.name = self.prefix + 'widgets.entry_type' if helper_widget.name in self.request.form: helper_widget.update() _type = helper_widget.value[0] # we get a list from request.form try: interfaces.IBiblatexEntry['entry_type'].validate(_type) except Exception: raise UserError( _("Wrong entry type: ${TYPE}", mapping={'TYPE': _type})) else: _type = getattr(self.context, 'entry_type') self.type = getEntryTypeSafely(_type) flds = getRequiredTuple(self.type.required) + ('entry_type', ) return field.Fields(interfaces.IBiblatexEntry).select(*flds) def update(self): super(EditRequiredStep, self).update() self.widgets['entry_type'].mode = HIDDEN_MODE
class EditEntryTypeStep(step.Step): """ Step for changing the entry type. This is a bit complicated, because we do not want to get an ivalid object after changing the entry type. So we don't apply the change to the object, but send the form data to the required step. We don't want the Apply button in this step, so we do not inherit form EditStep. """ zope.interface.implements(ITabbedContentLayout, IEditStep) handleApplyOnNext = False label = _('zblx-editentrytypestep-label', u"Entry Type") fields = field.Fields(interfaces.IBiblatexEntry['entry_type']) @property def action(self): # we send it to the edit required step return absoluteURL(self.context, self.request) + '/@@edit.html/required'
class EditPublicationFactsStep(EditOptionalStep): label = _('zblx-editpublicationfactsstep-label', u"Publication Facts") _myflds = 'publication_facts'
def label(self): # TODO: translate this message instead of using the default _type = self.type.title.default return _('zblx-addrequiredform-label', u"Add '$TYPE' entry.", mapping={'TYPE': _type})
class EditShorteningStep(EditOptionalStep): label = _('zblx-editshorteningstep-label', u"Shortening") _myflds = 'shortening'
class EditSortingStep(EditOptionalStep): label = _('zblx-editsortingstep-label', u"Sorting") _myflds = 'sorting'
class EditLinkingStep(EditOptionalStep): label = _('zblx-editlinkingstep-label', u"Linking") _myflds = 'linking'
class EditCompatStep(EditOptionalStep): label = _('zblx-editcompatstep-label', u"Compat") _myflds = 'compat'
class EditGeneralStep(EditOptionalStep): label = _('zblx-editgeneralstep-label', u"General") _myflds = 'general'
class EditRolesStep(EditOptionalStep): label = _('zblx-editrolesstep-label', u"Roles") _myflds = 'roles'