Add multi-action to create links #32829

This commit is contained in:
Nicolas Demonte 2020-01-24 09:11:05 +01:00
parent 3987ec9e82
commit c555b03dec
2 changed files with 75 additions and 0 deletions

View File

@ -0,0 +1,60 @@
# -*- coding: utf-8 -*-
from Products.Five.browser import BrowserView
from collective.task import _
from collective.taskqueue import taskqueue
from plone import api
from plone.dexterity.browser.add import DefaultAddForm
from plone.dexterity.utils import createContentInContainer
from z3c.form import button
from z3c.relationfield.relation import RelationValue
from zope.component import getUtility
from zope.intid import IIntIds
class BackgroundAddLinkView(BrowserView):
def __call__(self):
base_document = self.context
folder_path = self.request.form['folder']
portal = api.portal.get()
folder = portal.restrictedTraverse(folder_path)
intids = getUtility(IIntIds)
relation = RelationValue(to_id=intids.getId(folder))
new_link = createContentInContainer(
base_document,
'pfwbgedlink',
folder=relation,
)
class AddLinks(DefaultAddForm):
"Add multiple pfwbgedlinks"
portal_type = "pfwbgedlink"
@property
def label(self):
return u"Classer dans un dossier"
@property
def action(self):
return self.request.getURL() + '?documents=' + self.request.documents
@button.buttonAndHandler(_('Add'), name='add')
def handleAdd(self, action):
data, errors = self.extractData()
if errors:
self.status = self.formErrorsMessage
return
folder_path = data['folder'].absolute_url_path()
for document_id in self.request.documents.split(','):
taskqueue.add(
'{}/background_add_link'.format(document_id),
params={'folder': folder_path},
)
self._finishedAdd = True
return

View File

@ -87,6 +87,21 @@
layer="collective.taskqueue.interfaces.ITaskQueueLayer"
/>
<browser:page
name="add_multi_link"
for="*"
class=".add_multi_link.AddLinks"
permission="cmf.AddPortalContent"
/>
<browser:page
name="background_add_link"
class=".add_multi_link.BackgroundAddLinkView"
for="*"
permission="cmf.AddPortalContent"
layer="collective.taskqueue.interfaces.ITaskQueueLayer"
/>
<browser:page
name="ask_multi_validation"
for="*"