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())
Esempio n. 2
0
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),
        ]
Esempio n. 9
0
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
Esempio n. 11
0
 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)
Esempio n. 12
0
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
Esempio n. 13
0
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'
Esempio n. 14
0
class EditPublicationFactsStep(EditOptionalStep):

    label = _('zblx-editpublicationfactsstep-label', u"Publication Facts")

    _myflds = 'publication_facts'
Esempio n. 15
0
 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})
Esempio n. 16
0
class EditShorteningStep(EditOptionalStep):

    label = _('zblx-editshorteningstep-label', u"Shortening")

    _myflds = 'shortening'
Esempio n. 17
0
class EditSortingStep(EditOptionalStep):

    label = _('zblx-editsortingstep-label', u"Sorting")

    _myflds = 'sorting'
Esempio n. 18
0
class EditLinkingStep(EditOptionalStep):

    label = _('zblx-editlinkingstep-label', u"Linking")

    _myflds = 'linking'
Esempio n. 19
0
class EditCompatStep(EditOptionalStep):

    label = _('zblx-editcompatstep-label', u"Compat")

    _myflds = 'compat'
Esempio n. 20
0
class EditGeneralStep(EditOptionalStep):

    label = _('zblx-editgeneralstep-label', u"General")

    _myflds = 'general'
Esempio n. 21
0
class EditRolesStep(EditOptionalStep):

    label = _('zblx-editrolesstep-label', u"Roles")

    _myflds = 'roles'