handle informing more than one person or group (#3825)

This commit is contained in:
Frédéric Péters 2014-02-12 11:48:51 +01:00
parent a93b525dcf
commit 475bbc7463
2 changed files with 44 additions and 19 deletions

View File

@ -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

View File

@ -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"""