handle informing more than one person or group (#3825)
This commit is contained in:
parent
a93b525dcf
commit
475bbc7463
|
@ -22,26 +22,35 @@ class AddInformation(DefaultAddForm):
|
|||
self.status = self.formErrorsMessage
|
||||
return
|
||||
|
||||
responsible = data['responsible'][0]
|
||||
group = api.group.get(responsible)
|
||||
if group is not None:
|
||||
# responsible is a group, create an Information by user in this group
|
||||
groupname = group.getId()
|
||||
users = _recursiveGetMembersFromIds(portal, [groupname])
|
||||
objs = []
|
||||
for user in users:
|
||||
username = user.getId()
|
||||
objs = []
|
||||
seen = {}
|
||||
for responsible in data['responsible']:
|
||||
group = api.group.get(responsible)
|
||||
if group is not None:
|
||||
# responsible is a group, create an Information by user in this group
|
||||
groupname = group.getId()
|
||||
users = _recursiveGetMembersFromIds(portal, [groupname])
|
||||
for user in users:
|
||||
username = user.getId()
|
||||
if username in seen:
|
||||
continue
|
||||
_data = deepcopy(data)
|
||||
_data['responsible'] = [username]
|
||||
obj = self.createAndAdd(_data)
|
||||
if obj is not None:
|
||||
objs.append(obj)
|
||||
seen[username] = True
|
||||
else:
|
||||
# responsible is a user
|
||||
if responsible in seen:
|
||||
continue
|
||||
_data = deepcopy(data)
|
||||
_data['responsible'] = [username]
|
||||
_data['responsible'] = [responsible]
|
||||
obj = self.createAndAdd(_data)
|
||||
if obj is not None:
|
||||
objs.append(obj)
|
||||
if objs:
|
||||
# mark only as finished if we get the new object
|
||||
self._finishedAdd = True
|
||||
else:
|
||||
# responsible is a user
|
||||
obj = self.createAndAdd(data)
|
||||
if obj is not None:
|
||||
# mark only as finished if we get the new object
|
||||
self._finishedAdd = True
|
||||
seen[responsible] = True
|
||||
|
||||
if objs:
|
||||
# mark only as finished if we get the new object
|
||||
self._finishedAdd = True
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
from zope.interface import implements
|
||||
from zope import schema
|
||||
|
||||
from plone.autoform import directives as form
|
||||
from plone.dexterity.content import Item
|
||||
|
@ -6,11 +7,26 @@ from plone.directives.form import default_value
|
|||
|
||||
from collective.task.interfaces import IBaseTask
|
||||
|
||||
from collective.z3cform.rolefield.field import LocalRolesToPrincipals
|
||||
from collective.dms.basecontent.widget import AjaxChosenMultiFieldWidget
|
||||
|
||||
from collective.task import _
|
||||
|
||||
class IInformation(IBaseTask):
|
||||
"""Schema for information"""
|
||||
form.mode(title='hidden')
|
||||
|
||||
responsible = LocalRolesToPrincipals(
|
||||
title=_(u"Addressees"),
|
||||
roles_to_assign=('Editor',),
|
||||
value_type=schema.Choice(
|
||||
vocabulary="dms.principals"
|
||||
),
|
||||
min_length=1,
|
||||
required=True,
|
||||
)
|
||||
form.widget(responsible=AjaxChosenMultiFieldWidget)
|
||||
|
||||
|
||||
class Information(Item):
|
||||
"""Information content type"""
|
||||
|
|
Reference in New Issue