Beispiel #1
0
    def render(self):

        if not self.request.get('paths'):
            msg = _(u'error_no_items',
                    default=u'You have not selected any items.')
            IStatusMessage(self.request).addStatusMessage(msg, type='error')
            return_temp = self.request.get('orig_template',
                                           self.context.absolute_url())

            return self.request.RESPONSE.redirect(return_temp)

        dossiers = self.get_selected_dossiers()

        # generate the xls data with the XLSReporter
        reporter = XLSReporter(self.request, self.get_dossier_attributes(),
                               dossiers)

        data = reporter()
        if not data:
            msg = _(u'Could not generate the report.')
            IStatusMessage(self.request).addStatusMessage(msg, type='error')
            return self.request.RESPONSE.redirect(self.context.absolute_url())

        response = self.request.RESPONSE

        response.setHeader(
            'Content-Type',
            'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
        )
        set_attachment_content_disposition(self.request, "dossier_report.xlsx")

        return data
Beispiel #2
0
 def _prepare_response(self):
     self.response.setHeader('X-Theme-Disabled', 'True')
     self.response.setHeader('Content-type', OCM_MIMETYPE)
     filename = '{}.{}'.format(self.document.getId(), OCM_FILE_EXTENSION)
     set_attachment_content_disposition(self.request,
                                        filename=filename,
                                        file=None)
Beispiel #3
0
    def __call__(self):
        if not self.request.get('paths'):
            msg = _(
                u'error_no_items', default=u'You have not selected any Items')
            IStatusMessage(self.request).addStatusMessage(msg, type='error')
            return_temp = self.request.get(
                'orig_template', self.context.absolute_url())

            return self.request.RESPONSE.redirect(return_temp)

        documents = self.get_selected_documents()

        # generate the xls data with the XLSReporter
        reporter = XLSReporter(
            self.request, self.get_document_attributes(), documents)

        data = reporter()
        if not data:
            msg = _(u'Could not generate the report.')
            IStatusMessage(self.request).addStatusMessage(
                msg, type='error')
            return self.request.RESPONSE.redirect(self.context.absolute_url())

        response = self.request.RESPONSE

        response.setHeader(
            'Content-Type',
            'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
        set_attachment_content_disposition(self.request, "document_report.xlsx")

        return data
Beispiel #4
0
    def render(self):

        tasks = get_selected_items(self.context, self.request)
        tasks = [tt for tt in tasks]

        if not tasks:
            msg = _(
                u'error_no_items', default=u'You have not selected any Items')
            IStatusMessage(self.request).addStatusMessage(msg, type='error')
            if self.request.get('orig_template'):
                return self.request.RESPONSE.redirect(
                    self.request.form['orig_template'])
            else:
                return self.request.RESPONSE.redirect(
                    self.context.absolute_url())

        task_attributes = [
            {'id':'title', 'title':_('label_task_title')},
            {'id':'review_state', 'title':_('review_state'),
             'transform':StringTranslater(
                self.context.REQUEST, 'plone').translate},
            {'id':'deadline', 'title':_('label_deadline'),
             'transform':format_datetime, 'style':get_date_style()},
            {'id':'completed', 'title':_('label_completed'),
             'transform':format_datetime, 'style':get_date_style()},
            {'id': 'containing_dossier', 'title':_('label_dossier_title')},
            {'id':'issuer', 'title':_('label_issuer'),
             'transform':readable_author},
            {'id':'responsible', 'title':_('label_responsible'),
             'transform':readable_author},
            {'id':'task_type', 'title':_('label_task_type'),
             'transform':task_type_helper},
            {'id':'client_id', 'title':_('label_client_id')},
            {'id':'sequence_number', 'title':_('label_sequence_number')},
        ]

        reporter = XLSReporter(
            self.context.REQUEST,
            task_attributes,
            tasks,
            sheet_title=translate(
                _('label_tasks', default=u'Tasks'), context=self.request),
            footer='%s %s' % (
                datetime.now().strftime('%d.%m.%Y %H:%M'), get_client_id())
            )

        data = reporter()
        if not data:
            msg = _(u'Could not generate the report')
            IStatusMessage(self.request).addStatusMessage(
                msg, type='error')
            return self.request.RESPONSE.redirect(self.context.absolute_url())

        response = self.request.RESPONSE

        response.setHeader('Content-Type', 'application/vnd.ms-excel')
        set_attachment_content_disposition(self.request, "task_report.xls")

        return data
Beispiel #5
0
    def __call__(self):
        job_id = require_job_id_parameter(self.request)
        job = require_job(self.request, self.model, job_id)

        zip_file = job.get_zip_file()
        filename = u'{}.zip'.format(normalize_path(self.model.title))
        set_attachment_content_disposition(
            self.request, filename, file=zip_file)
        return stream_data(zip_file)
Beispiel #6
0
    def test_set_empty_filename(self):

        self.request['HTTP_USER_AGENT'] = ''

        self.replay()

        set_attachment_content_disposition(self.request, '')

        self.assertTrue(len(self.header) == 0)
    def render(self):
        """ Copied from ftw.mail.attachment:
        Just add the contenttype-check (see l.51)
        """

        if self.message is None:
            raise NotFound
        message = email.message_from_string(self.message.data)

        # we need an int value for the position
        pos = 0
        try:
            pos = int(self.position)
        except ValueError:
            raise NotFound

        # get attachment at position pos
        attachment = None
        for i, part in enumerate(message.walk()):
            if i == pos:
                attachment = part
                continue

        if attachment is not None:
            content_type = attachment.get_content_type()
            filename = utils.get_filename(attachment)
            if filename is None:
                raise NotFound

            # the the konsul migrated mails, often has a wrong
            # content-type for word documents, therefore we check the
            # content-type, in this case we guess it over the filename
            if content_type == 'application/octet-stream':
                mtr = getToolByName(self.context, 'mimetypes_registry')
                content_type = mtr.globFilename(filename)

            # make sure we have a unicode string
            if not isinstance(filename, unicode):
                filename = filename.decode('utf-8', 'ignore')
            # internet explorer and safari don't like rfc encoding of filenames
            # and they don't like utf encoding too.
            # therefore we first try to encode the filename in iso-8859-1
            try:
                filename = filename.encode('iso-8859-1')
            except ConflictError:
                raise
            except Exception:
                filename = filename.encode('utf-8', 'ignore')

            self.request.response.setHeader('Content-Type', content_type)
            set_attachment_content_disposition(self.request, filename)

            if content_type == 'message/rfc822':
                return attachment.as_string()
            return attachment.get_payload(decode=1)

        raise NotFound
    def test_set_empty_filename(self):

        self.request['HTTP_USER_AGENT'] = ''

        self.replay()

        set_attachment_content_disposition(self.request, '')

        self.assertEqual(len(self.header), 0)
 def __call__(self):
     data = generate_report(self.request, self.context)
     if not data:
         msg = StringTranslater(self.request, 'opengever.repository').translate(_(u'Could not generate the report.'))
         IStatusMessage(self.request).addStatusMessage(msg, type='error')
         return self.request.RESPONSE.redirect(self.context.absolute_url())
     response = self.request.RESPONSE
     response.setHeader('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
     set_attachment_content_disposition(self.request, "repository_report.xlsx")
     return data
Beispiel #10
0
    def test_filename(self):
        """ Normaly we have the filename in quotes
        """

        self.expect(self.request.get('HTTP_USER_AGENT', ANY)).result('DEF')

        self.replay()

        set_attachment_content_disposition(self.request, 'Default Name')

        self.assertEquals(self.header[0],
                          'attachment; filename="%s"' % 'Default Name')
Beispiel #11
0
    def test_set_ms_filename(self):
        """ In Ms we must remove the quotes.
        """

        self.expect(self.request.get('HTTP_USER_AGENT', ANY)).result('MSIE')

        self.replay()

        set_attachment_content_disposition(self.request, 'MS Name')

        self.assertEquals(self.header[0],
                          'attachment; filename=%s' % quote('MS Name'))
Beispiel #12
0
    def __call__(self):

        named_file = self._getFile()
        if not self.filename:
            self.filename = getattr(named_file, "filename", self.fieldname)

        if self.filename:
            self.filename = self.filename.encode("utf-8")

        set_attachment_content_disposition(self.request, self.filename, named_file)
        notify(FileCopyDownloadedEvent(self.context))
        return stream_data(named_file)
    def test_with_file(self):
        self.expect(self.request.get('HTTP_USER_AGENT', ANY)).result('DEF')

        monk_file = NamedFile('bla bla', filename=u'test.txt')

        self.replay()

        set_attachment_content_disposition(
            self.request, 'Default Name', file=monk_file)

        self.assertEquals(
            self.header,
            ['text/plain', 7, 'attachment; filename="Default Name"'])
Beispiel #14
0
    def test_filename(self):
        """ Normaly we have the filename in quotes
        """

        self.expect(self.request.get('HTTP_USER_AGENT', ANY)).result('DEF')

        self.replay()

        set_attachment_content_disposition(self.request, 'Default Name')

        self.assertEquals(
            self.header[0],
            'attachment; filename="%s"' % 'Default Name')
Beispiel #15
0
    def test_with_file(self):
        self.expect(self.request.get('HTTP_USER_AGENT', ANY)).result('DEF')

        monk_file = NamedFile('bla bla', filename=u'test.txt')

        self.replay()

        set_attachment_content_disposition(
            self.request, 'Default Name', file=monk_file)

        self.assertEquals(
            self.header,
            ['text/plain', 7, 'attachment; filename="Default Name"'])
Beispiel #16
0
    def test_set_ms_filename(self):
        """ In Ms we must remove the quotes.
        """

        self.expect(self.request.get('HTTP_USER_AGENT', ANY)).result('MSIE')

        self.replay()

        set_attachment_content_disposition(self.request, 'MS Name')

        self.assertEquals(
            self.header[0],
            'attachment; filename=%s' % quote('MS Name'))
    def render(self):
        self._init_version_file()
        if not self.version_file:
            msg = _(u'No file in in this version')
            IStatusMessage(self.request).addStatusMessage(msg, type='error')
            return self.request.RESPONSE.redirect(self.context.absolute_url())

        response = self.request.RESPONSE
        response.setHeader('Content-Type', self.version_file.contentType)
        response.setHeader('Content-Length', self.version_file.getSize())
        set_attachment_content_disposition(
            self.request, self.version_file.filename.encode('utf-8'))

        return self.version_file.data
    def return_excel(self, reporter):
        data = reporter()
        if not data:
            msg = _(u'Could not generate the report.')
            api.portal.show_message(msg, request=self.request, type='error')
            return self.request.RESPONSE.redirect(self.context.absolute_url())

        response = self.request.RESPONSE
        response.setHeader(
            'Content-Type',
            'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
        set_attachment_content_disposition(self.request, self.filename)

        return data
Beispiel #19
0
    def render(self):
        self._init_version_file()
        if not self.version_file:
            msg = _(u'No file in in this version')
            IStatusMessage(self.request).addStatusMessage(
                msg, type='error')
            return self.request.RESPONSE.redirect(self.context.absolute_url())

        response = self.request.RESPONSE
        response.setHeader('Content-Type', self.version_file.contentType)
        response.setHeader('Content-Length', self.version_file.getSize())
        set_attachment_content_disposition(
            self.request, self.version_file.filename.encode('utf-8'))

        return self.version_file.data
    def return_excel(self, reporter):
        data = reporter()
        if not data:
            msg = _(u'Could not generate the report.')
            api.portal.show_message(msg, request=self.request, type='error')
            return self.request.RESPONSE.redirect(self.context.absolute_url())

        response = self.request.RESPONSE
        response.setHeader(
            'Content-Type',
            'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
        )
        set_attachment_content_disposition(self.request, self.filename)

        return data
Beispiel #21
0
 def __call__(self):
     data = generate_report(self.request, self.context)
     if not data:
         msg = StringTranslater(self.request,
                                'opengever.repository').translate(
                                    _(u'Could not generate the report.'))
         IStatusMessage(self.request).addStatusMessage(msg, type='error')
         return self.request.RESPONSE.redirect(self.context.absolute_url())
     response = self.request.RESPONSE
     response.setHeader(
         'Content-Type',
         'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
     )
     set_attachment_content_disposition(self.request,
                                        "repository_report.xlsx")
     return data
Beispiel #22
0
    def __call__(self):
        response = self.request.response

        with ZipGenerator() as generator:
            zipper = MeetingDocumentZipper(self.model, generator)
            zip_file = zipper.get_zip_file()

            filename = '{}.zip'.format(normalize_path(self.model.title))
            set_attachment_content_disposition(self.request, filename)

            # the following headers must be set manually as
            # set_attachment_content_disposition expects a Named(Blob)File
            response.setHeader(
                'Content-type', 'application/zip')
            response.setHeader(
                'Content-Length', os.stat(zip_file.name).st_size)

            return filestream_iterator(zip_file.name, 'rb')
Beispiel #23
0
    def __call__(self):
        reporter = XLSReporter(
            self.request, self.get_attributes(),
            self.context.get_dossier_representations(),
            sheet_title=self.get_sheet_title())

        response = self.request.RESPONSE
        data = reporter()
        if not data:
            msg = _(u'The report could not been generated.')
            api.portal.show_message(
                message=msg, request=self.request, type='error')
            return response.redirect(self.context.absolute_url())

        response.setHeader(
            'Content-Type',
            'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
        set_attachment_content_disposition(
            self.request, "disposition_report.xlsx")

        return data
    def __call__(self):
        reporter = XLSReporter(self.request,
                               self.get_attributes(),
                               self.context.get_dossier_representations(),
                               sheet_title=self.get_sheet_title())

        response = self.request.RESPONSE
        data = reporter()
        if not data:
            msg = _(u'The report could not been generated.')
            api.portal.show_message(message=msg,
                                    request=self.request,
                                    type='error')
            return response.redirect(self.context.absolute_url())

        response.setHeader(
            'Content-Type',
            'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
        )
        set_attachment_content_disposition(self.request, self.get_file_name())

        return data
Beispiel #25
0
    def __call__(self):
        DownloadConfirmationHelper(self.context).process_request_form()

        try:
            named_file = self._getFile()
        except NotFound:
            msg = _(u'The Document ${title} has no File.',
                    mapping={'title': self.context.Title().decode('utf-8')})
            api.portal.show_message(msg, self.request, type='error')
            return self.request.RESPONSE.redirect(
                get_redirect_url(self.context))

        if not self.filename:
            self.filename = getattr(named_file, 'filename', self.fieldname)

        if self.filename:
            self.filename = self.filename.encode('utf-8')

        set_attachment_content_disposition(self.request, self.filename,
                                           named_file)
        notify(FileCopyDownloadedEvent(self.context))

        return self.stream_data(named_file)
Beispiel #26
0
    def __call__(self):
        DownloadConfirmationHelper().process_request_form()

        try:
            named_file = self._getFile()
        except NotFound:
            msg = _(
                u'The Document ${title} has no File',
                mapping={'title': self.context.Title().decode('utf-8')})
            api.portal.show_message(msg, self.request, type='error')
            return self.request.RESPONSE.redirect(
                get_redirect_url(self.context))

        if not self.filename:
            self.filename = getattr(named_file, 'filename', self.fieldname)

        if self.filename:
            self.filename = self.filename.encode('utf-8')

        set_attachment_content_disposition(self.request, self.filename,
                                           named_file)
        notify(FileCopyDownloadedEvent(self.context))

        return self.stream_data(named_file)
Beispiel #27
0
    def render(self):

        tasks = get_selected_items(self.context, self.request)
        tasks = [tt for tt in tasks]

        if not tasks:
            msg = _(u'error_no_items',
                    default=u'You have not selected any items.')
            IStatusMessage(self.request).addStatusMessage(msg, type='error')
            if self.request.get('orig_template'):
                return self.request.RESPONSE.redirect(
                    self.request.form['orig_template'])
            else:
                return self.request.RESPONSE.redirect(
                    self.context.absolute_url())

        task_attributes = [
            {
                'id': 'title',
                'title': _('label_task_title')
            },
            {
                'id':
                'review_state',
                'title':
                _('review_state'),
                'transform':
                StringTranslater(self.context.REQUEST, 'plone').translate
            },
            {
                'id': 'deadline',
                'title': _('label_deadline'),
                'number_format': DATE_NUMBER_FORMAT
            },
            {
                'id': 'completed',
                'title': _('label_completed'),
                'number_format': DATE_NUMBER_FORMAT
            },
            {
                'id': 'containing_dossier',
                'title': _('label_dossier_title')
            },
            {
                'id': 'issuer',
                'title': _('label_issuer'),
                'transform': readable_author
            },
            {
                'id': 'issuing_org_unit_label',
                'title': _('label_issuing_org_unit')
            },
            {
                'id': 'responsible',
                'title': _('label_responsible'),
                'transform': readable_author
            },
            {
                'id': 'task_type',
                'title': _('label_task_type'),
                'transform': task_type_helper
            },
            {
                'id': 'admin_unit_id',
                'title': _('label_admin_unit_id')
            },
            {
                'id': 'sequence_number',
                'title': _('label_sequence_number')
            },
        ]

        reporter = XLSReporter(self.context.REQUEST,
                               task_attributes,
                               tasks,
                               sheet_title=translate(_('label_tasks',
                                                       default=u'Tasks'),
                                                     context=self.request),
                               footer='%s %s' %
                               (datetime.now().strftime('%d.%m.%Y %H:%M'),
                                get_current_admin_unit().id()))

        data = reporter()
        if not data:
            msg = _(u'Could not generate the report.')
            IStatusMessage(self.request).addStatusMessage(msg, type='error')
            return self.request.RESPONSE.redirect(self.context.absolute_url())

        response = self.request.RESPONSE

        response.setHeader(
            'Content-Type',
            'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
        )
        set_attachment_content_disposition(self.request, "task_report.xlsx")

        return data
Beispiel #28
0
 def _prepare_response(self):
     self.response.setHeader('X-Theme-Disabled', 'True')
     self.response.setHeader('Content-type', OCM_MIMETYPE)
     filename = '{}.{}'.format(self.document.getId(), OCM_FILE_EXTENSION)
     set_attachment_content_disposition(
         self.request, filename=filename, file=None)