def __call__(self):
        jsondata = self.request.get(REQUEST_KEY)
        data = encode_after_json(json.loads(jsondata))
        committee = Oguid.parse(data['committee_oguid']).resolve_object()
        proposal_oguid = Oguid.parse(data['proposal_oguid'])
        proposal = meeting_service().fetch_proposal_by_oguid(proposal_oguid)

        with elevated_privileges():
            submitted_proposal = SubmittedProposal.create(proposal, committee)

            # XXX use Transporter API?
            collector = getMultiAdapter((submitted_proposal, ),
                                        IDataCollector,
                                        name='field-data')
            data['field-data']['ISubmittedProposal'] = data['field-data'].pop(
                'IProposal')
            collector.insert(data['field-data'])
            # XXX fix data types in transporter
            submitted_proposal.date_of_submission = date.today()

            # sync data to proposal after inserting field data
            submitted_proposal.sync_model(proposal_model=proposal)

            submitted_proposal.create_proposal_document(
                filename=data['file']['filename'],
                content_type=data['file']['contentType'].encode('utf-8'),
                data=base64.decodestring(data['file']['data']))

            history_data = advancedjson.loads(self.request.get('history_data'))
            IHistory(submitted_proposal).append_record(
                u'submitted', uuid=history_data['uuid'])

            self.request.response.setHeader("Content-type", "application/json")
            return json.dumps(
                {'path': '/'.join(submitted_proposal.getPhysicalPath())})
    def __call__(self):
        jsondata = self.request.get(REQUEST_KEY)
        data = encode_after_json(json.loads(jsondata))
        committee = Oguid.parse(data['committee_oguid']).resolve_object()
        proposal_oguid = Oguid.parse(data['proposal_oguid'])
        proposal = meeting_service().fetch_proposal_by_oguid(proposal_oguid)

        with elevated_privileges():
            submitted_proposal = SubmittedProposal.create(proposal, committee)

            # XXX use Transporter API?
            collector = getMultiAdapter((submitted_proposal,), IDataCollector,
                                        name='field-data')
            data['field-data']['ISubmittedProposal'] = data['field-data'].pop(
                'IProposal')
            collector.insert(data['field-data'])
            # XXX fix data types in transporter
            submitted_proposal.date_of_submission = date.today()

            # sync data to proposal after inserting field data
            submitted_proposal.sync_model(proposal_model=proposal)

            submitted_proposal.create_proposal_document(
                filename=data['file']['filename'],
                content_type=data['file']['contentType'].encode('utf-8'),
                data=base64.decodestring(data['file']['data']))

            history_data = advancedjson.loads(self.request.get('history_data'))
            IHistory(submitted_proposal).append_record(
                u'submitted', uuid=history_data['uuid'])

            self.request.response.setHeader("Content-type", "application/json")
            return json.dumps(
                {'path': '/'.join(submitted_proposal.getPhysicalPath())})
Example #3
0
 def _extract_data(self, task):
     data = remote_json_request(task.client_id,
                                '@@transporter-extract-object-json',
                                task.physical_path)
     data = encode_after_json(data)
     data = data.get(u'field-data').get('ITask')
     return data
Example #4
0
 def _extract_data(self, task):
     data = remote_json_request(
         task.client_id,
         '@@transporter-extract-object-json',
         task.physical_path)
     data = encode_after_json(data)
     data = data.get(u'field-data').get('ITask')
     return data
Example #5
0
    def render(self):
        data = self.request.get('data', None)
        assert data is not None, 'Bad request: no delivery data found'
        data = json.loads(data)

        if self.is_already_delivered(data):
            # Set correct content type for text response
            self.request.response.setHeader("Content-type", "tex/plain")
            return 'OK'

        mtool = getToolByName(self.context, 'portal_membership')
        member = mtool.getAuthenticatedMember()

        if not member.checkPermission('Add portal content', self.context):
            raise Unauthorized()

        # Set the "X-CREATING-SUCCESSOR" flag for preventing the event
        # handler from creating additional responses per added document.
        self.request.set('X-CREATING-SUCCESSOR', True)

        # Create the delivered documents:
        transporter = getUtility(ITransporter)
        documents = []

        message = _(u'version_message_resolved_task',
                    default=u'Document copied from task (task resolved)')

        if data.get('transition'
                    ) == 'task-transition-in-progress-tested-and-closed':
            message = _(u'version_message_closed_task',
                        default=u'Document copied from task (task closed)')

        with CustomInitialVersionMessage(message, self.context.REQUEST):
            for item in encode_after_json(data['documents']):
                doc = transporter._create_object(self.context, item)

                # append `RE:` prefix to the document title
                doc.title = '%s: %s' % (translate(
                    _(u'answer_prefix', default=u'RE'),
                    context=self.context.REQUEST), doc.title)

                documents.append(doc)
                notify(ObjectAddedEvent(doc))

        # Change workflow state of predecessor task:
        util.change_task_workflow_state(self.context,
                                        data['transition'],
                                        text=data['text'],
                                        added_object=documents)

        # Set correct content type for text response
        self.request.response.setHeader("Content-type", "tex/plain")
        return 'OK'
Example #6
0
    def transport_from(self, container, source_cid, path):
        """ Copies the object under *path* from client with *source_cid* into
        the local folder *container*
        *path* is the relative path of the object to its plone site root.
        """

        data = remote_json_request(source_cid,
                                   '@@transporter-extract-object-json',
                                   path=path)
        data = encode_after_json(data)

        obj = self._create_object(container, data)
        return obj
Example #7
0
    def transport_from(self, container, source_cid, path):
        """ Copies the object under *path* from client with *source_cid* into
        the local folder *container*
        *path* is the relative path of the object to its plone site root.
        """

        data = remote_json_request(source_cid,
                                   '@@transporter-extract-object-json',
                                   path=path)
        data = encode_after_json(data)

        obj = self._create_object(container, data)
        return obj
Example #8
0
    def render(self):
        data = self.request.get("data", None)
        assert data is not None, "Bad request: no delivery data found"
        data = json.loads(data)

        if self.is_already_delivered(data):
            # Set correct content type for text response
            self.request.response.setHeader("Content-type", "tex/plain")
            return "OK"

        mtool = getToolByName(self.context, "portal_membership")
        member = mtool.getAuthenticatedMember()

        if not member.checkPermission("Add portal content", self.context):
            raise Unauthorized()

        # Set the "X-CREATING-SUCCESSOR" flag for preventing the event
        # handler from creating additional responses per added document.
        self.request.set("X-CREATING-SUCCESSOR", True)

        # Create the delivered documents:
        transporter = getUtility(ITransporter)
        documents = []

        message = _(u"version_message_resolved_task", default=u"Document copied from task (task resolved)")

        if data.get("transition") == "task-transition-in-progress-tested-and-closed":
            message = _(u"version_message_closed_task", default=u"Document copied from task (task closed)")

        with CustomInitialVersionMessage(message, self.context.REQUEST):
            for item in encode_after_json(data["documents"]):
                doc = transporter._create_object(self.context, item)

                # append `RE:` prefix to the document title
                doc.title = "%s: %s" % (
                    translate(_(u"answer_prefix", default=u"RE"), context=self.context.REQUEST),
                    doc.title,
                )

                documents.append(doc)
                notify(ObjectAddedEvent(doc))

        # Change workflow state of predecessor task:
        util.change_task_workflow_state(self.context, data["transition"], text=data["text"], added_object=documents)

        # Set correct content type for text response
        self.request.response.setHeader("Content-type", "tex/plain")
        return "OK"
Example #9
0
    def copy_documents_from_remote_task(self, task, target, documents=None):
        transporter = getUtility(ITransporter)
        data = remote_json_request(task.client_id,
                                   '@@task-documents-extract',
                                   path=task.physical_path,
                                   data={'documents': json.dumps(documents)})

        intids_mapping = {}
        intids = getUtility(IIntIds)

        for item in data:
            item = encode_after_json(item)
            obj = transporter._create_object(target, item)

            oldintid = IAnnotations(obj)[ORIGINAL_INTID_ANNOTATION_KEY]
            newintid = intids.getId(obj)
            intids_mapping[oldintid] = newintid

            # fire the added Event to automaticly create a inital version
            notify(ObjectAddedEvent(obj))

        return intids_mapping
Example #10
0
    def copy_documents_from_remote_task(self, task, target, documents=None):
        transporter = getUtility(ITransporter)
        data = remote_json_request(
            task.client_id,
            '@@task-documents-extract',
            path=task.physical_path,
            data={'documents': json.dumps(documents)})

        intids_mapping = {}
        intids = getUtility(IIntIds)

        for item in data:
            item = encode_after_json(item)
            obj = transporter._create_object(target, item)

            oldintid = IAnnotations(obj)[ORIGINAL_INTID_ANNOTATION_KEY]
            newintid = intids.getId(obj)
            intids_mapping[oldintid] = newintid

            # fire the added Event to automaticly create a inital version
            notify(ObjectAddedEvent(obj))

        return intids_mapping
Example #11
0
 def __init__(self, data):
     self.data = encode_after_json(data)
     self.portal_type = self.data[BASEDATA_KEY]['portal_type']
     self.title = self.data[BASEDATA_KEY].pop('title')
     if not isinstance(self.title, unicode):
         self.title = self.title.decode('utf-8')
Example #12
0
 def __init__(self, data):
     self.data = encode_after_json(data)
     self.portal_type = self.data[BASEDATA_KEY]['portal_type']
     self.title = self.data[BASEDATA_KEY].pop('title')
     if not isinstance(self.title, unicode):
         self.title = self.title.decode('utf-8')
Example #13
0
 def receive(self, container, request):
     jsondata = request.get(REQUEST_KEY)
     data = json.loads(jsondata)
     data = encode_after_json(data)
     obj = self._create_object(container, data)
     return obj
Example #14
0
 def receive(self, container, request):
     jsondata = request.get(REQUEST_KEY)
     data = json.loads(jsondata)
     data = encode_after_json(data)
     obj = self._create_object(container, data)
     return obj