diff --git a/src/pfwbged/policy/browser/add_multi_information.py b/src/pfwbged/policy/browser/add_multi_information.py new file mode 100644 index 0000000..7c664b3 --- /dev/null +++ b/src/pfwbged/policy/browser/add_multi_information.py @@ -0,0 +1,66 @@ +from copy import deepcopy +import z3c.form +from z3c.form import button + +import zope.event +from zope.i18nmessageid.message import MessageFactory + +from plone import api +from plone.dexterity.browser.add import DefaultAddForm +from plone.dexterity.utils import createContentInContainer +from plone.stringinterp.adapters import _recursiveGetMembersFromIds + +from collective.task import _ + + +class AddInformation(DefaultAddForm): + """Custom add information view""" + + portal_type = "information" + + @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 + + for document_id in self.request.documents.split(','): + base_document = api.content.get(str(document_id)) + self.add_info(base_document, data) + + self._finishedAdd = True + return + + def add_info(self, base_document, data): + portal = api.portal.get() + 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] + createContentInContainer(base_document, 'information', **_data) + seen[username] = True + else: + # responsible is a user + if responsible in seen: + continue + _data = deepcopy(data) + _data['responsible'] = [responsible] + createContentInContainer(base_document, 'information', **_data) + seen[responsible] = True + + print 'seen:', seen diff --git a/src/pfwbged/policy/browser/configure.zcml b/src/pfwbged/policy/browser/configure.zcml index 0a070af..1504a97 100644 --- a/src/pfwbged/policy/browser/configure.zcml +++ b/src/pfwbged/policy/browser/configure.zcml @@ -57,6 +57,13 @@ permission="zope2.View" /> + +