def update(self):
        request = self.request
        context = self.context

        if 'form.button.remove' in request:
            ids = request.get('draftId', ())
            if not ids:
                IStatusMessage(request).add(_('Please select draft items.'))
            else:
                for id in request.get('draftId', ()):
                    if id in context:
                        del context[id]

                IStatusMessage(request).add(
                    _('Selected draft items have been removed.'))

        if 'form.button.publish' in request:
            ids = request.get('draftId', ())
            if not ids:
                IStatusMessage(request).add(_('Please select draft items.'))
            else:
                for id in request.get('draftId', ()):
                    if id in context:
                        draft = context[id]
                        try:
                            content = draft.publish()
                        except DraftException, err:
                            IStatusMessage(request).add(str(err), 'error')
                            return
                
                        draft = removeAllProxies(draft)
                        del draft.__parent__[draft.__name__]

                IStatusMessage(request).add(
                    _('Selected draft items have been published.'))
    def listDrafts(self):
        ids = getUtility(IIntIds)
        request = self.request
        context = self.context

        drafts = []
        for name in context:
            draft = context[name]
            if not checkPermission('zope.View', draft):
                continue

            try:
                loc = ids.queryObject(draft.location)
                locTitle = loc.title
                locUrl = '%s/'%absoluteURL(loc, request)
            except:
                locTitle = _('Unknown')
                locUrl = u''

            dc = ICMFDublinCore(draft.content)

            info = {'name': name,
                    'title': draft.title or _('[No title]'),
                    'description': draft.description,
                    'url': '%s/'%absoluteURL(draft, request),
                    'location': locTitle,
                    'locationURL': locUrl,
                    'icon': queryMultiAdapter((draft, request), name='zmi_icon'),
                    'draft': draft,
                    'modified': dc.modified,
                    'status': ISubmittedDraftContent.providedBy(draft),
                    'contentType': IContentType(draft.content)}
            drafts.append(info)

        return drafts
Example #3
0
    def handlePublish(self, action):
        errorSteps = []
        for step in self.steps:
            if not step.isComplete():
                errorSteps.append(step)

        if errorSteps:
            IStatusMessage(self.request).add(errorSteps, 'wizardError')
            return

        draft = self.draft
        request = self.request
        try:
            content = draft.publish()
            IStatusMessage(self.request).add(
                _(u'Your ${type_title} has been published.',
                  mapping={'type_title': IContentType(content).title}))

            view = queryMultiAdapter((content, request), IContentViewView)
            if view is not None:
                self.redirect('%s/%s'%(absoluteURL(content,request), view.name))
            else:
                self.redirect('%s/'%absoluteURL(content, request))

            del draft.__parent__[draft.__name__]
        except DraftException, err:
            IStatusMessage(request).add(str(err), 'error')
            self.wizard.setCurrentStep('content')
            self.redirect('%s/index.html'%absoluteURL(draft, request))
Example #4
0
 def handleRetract(self, action):
     self.draft.retract()
     self.redirect('../')
     event.notify(ObjectModifiedEvent(self.draft))
     IStatusMessage(self.request).add(
         _(u'Your ${type_title} has been retracted.',
           mapping={'type_title': IContentType(self.draft.content).title}))
Example #5
0
    def handleSaveContinueDraft(self, action):
        draft = self.draft
        ct = IContentType(draft)

        if not ct.saveable:
            raise DraftException("Saving draft is not allowed.")

        errorSteps = []
        for step in self.steps:
            if not step.isComplete():
                errorSteps.append(step)

        if errorSteps:
            IStatusMessage(self.request).add(errorSteps, 'wizardError')
            return

        draft = removeAllProxies(self.draft)
        draftContainer = self.getDraftContainer()

        name = INameChooser(draftContainer).chooseName(u'', draft)
        name = IObjectMover(draft).moveTo(draftContainer, name)

        draft = draftContainer[name]

        self.clear()
        self.redirect('%s/'%absoluteURL(draft, self.request))
        IStatusMessage(self.request).add(
            _(u'Your ${type_title} draft has been added.',
              mapping={'type_title': IContentType(draft.content).title}))
Example #6
0
    def handleRemove(self, action):
        container = self.draft.__parent__

        del container[self.draft.__name__]

        IStatusMessage(self.request).add(
            _(u'${type_title} draft has been removed.',
              mapping={'type_title': IContentType(self.draft.content).title}))

        self.redirect('../../../')
Example #7
0
    def handleReject(self, action):
        comment = self.request.get('form.action.comment', u'')
        self.draft.reject(comment)

        event.notify(ObjectModifiedEvent(self.draft))

        IStatusMessage(self.request).add(
            _(u'${type_title} has been rejected.',
              mapping={'type_title': IContentType(self.draft.content).title}))

        self.redirect('../../')
Example #8
0
    def handleSubmit(self, action):
        errorSteps = []
        for step in self.steps:
            if not step.isComplete():
                errorSteps.append(step)

        if errorSteps:
            IStatusMessage(self.request).add(errorSteps, 'wizardError')
            return

        self.draft.submit()
        IStatusMessage(self.request).add(
            _(u'Your ${type_title} draft has been submitted.',
              mapping={'type_title': IContentType(self.draft.content).title}))

        self.redirect('../')
Example #9
0
            self.redirect('%s/index.html'%absoluteURL(draft, self.request))
            return

        self.clear()

        view = queryMultiAdapter((content, self.request), IContentViewView)
        if self.request.response.getStatus() in (302, 303):
            self.redirect(self.request.response.getHeader('location'))
        else:
            if view is not None:
                self.redirect('%s/%s'%(absoluteURL(content,self.request),view.name))
            else:
                self.redirect('%s/'%absoluteURL(content, self.request))

        IStatusMessage(self.request).add(
            _(u'Your ${type_title} has been published.',
              mapping={'type_title': IContentType(content).title}))

    def clear(self):
        container = self.getDraftContainer()
        if 'draft' in container:
            del container['draft']

    def getDraftContainer(self):
        return self.context.__parent__.__parent__

    def nextURL(self):
        return '%s/'%absoluteURL(
            self.context.__parent__.__parent__, self.request)

    def cancelURL(self):
        return '%s/'%absoluteURL(