Пример #1
0
    def vcard_view(self, REQUEST, RESPONSE):
        """vCard 3.0 output
        """
        RESPONSE.setHeader('Content-Type', 'text/x-vcard')
        RESPONSE.setHeader('Content-Disposition', 'attachment; filename="%s.vcf"' % self.getId())
        out = StringIO()

        # Get the fields using the accessors, so they're properly Unicode encoded.
        out.write("BEGIN:VCARD\nVERSION:3.0\n")
        out.write("FN:%s\n" % self.Title())
        out.write("N:%s;%s\n" % (self.getLastName(), self.getFirstName()))
        out.write(foldLine("TITLE:%s\n" % '\\n'.join(self.getJobTitles())))
        out.write(foldLine("ADR;TYPE=dom,postal,parcel,work:;;%s;%s;%s;%s\n" % (self.getOfficeAddress().replace('\r\n','\\n'), self.getOfficeCity(), self.getOfficeState(), self.getOfficePostalCode())))
        out.write("TEL;WORK:%s\n" % self.getOfficePhone())
        out.write("EMAIL;TYPE=internet:%s\n" % self.getEmail())

        #Add the Person page to the list of URLs
        urls = list(self.getWebsites())
        urls.append(self.absolute_url())
        for url in urls:
            out.write(foldLine("URL:%s\n" % url))
        if self.getImage():
            encData = self.image_thumb.data.encode('base-64')
            # indent the data block:
            indentedData = '\n  '.join(encData.strip().split('\n'))
            out.write("PHOTO;ENCODING=BASE64;TYPE=JPEG:\n  %s\n" % indentedData)
        out.write("REV:%s\n" % DateTime(self.ModificationDate()).ISO8601())
        out.write("PRODID:WebLion Faculty/Staff Directory\nEND:VCARD")
        return n2rn(out.getvalue())
Пример #2
0
    def vcard_view(self, REQUEST, RESPONSE):
        """vCard 3.0 output
        """
        RESPONSE.setHeader('Content-Type', 'text/x-vcard')
        RESPONSE.setHeader('Content-Disposition',
                           'attachment; filename="%s.vcf"' % self.getId())
        out = StringIO()

        # Get the fields using the accessors, so they're properly Unicode encoded.
        out.write("BEGIN:VCARD\nVERSION:3.0\n")
        out.write("FN:%s\n" % self.Title())
        out.write("N:%s;%s\n" % (self.getLastName(), self.getFirstName()))
        out.write(foldLine("TITLE:%s\n" % '\\n'.join(self.getJobTitles())))
        out.write(
            foldLine("ADR;TYPE=dom,postal,parcel,work:;;%s;%s;%s;%s\n" %
                     (self.getOfficeAddress().replace(
                         '\r\n', '\\n'), self.getOfficeCity(),
                      self.getOfficeState(), self.getOfficePostalCode())))
        out.write("TEL;WORK:%s\n" % self.getOfficePhone())
        out.write("EMAIL;TYPE=internet:%s\n" % self.getEmail())

        #Add the Person page to the list of URLs
        urls = list(self.getWebsites())
        urls.append(self.absolute_url())
        for url in urls:
            out.write(foldLine("URL:%s\n" % url))
        if self.getImage():
            encData = self.image_thumb.data.encode('base-64')
            # indent the data block:
            indentedData = '\n  '.join(encData.strip().split('\n'))
            out.write("PHOTO;ENCODING=BASE64;TYPE=JPEG:\n  %s\n" %
                      indentedData)
        out.write("REV:%s\n" % DateTime(self.ModificationDate()).ISO8601())
        out.write("PRODID:WebLion Faculty/Staff Directory\nEND:VCARD")
        return n2rn(out.getvalue())
Пример #3
0
 def render(self):
     """vCalendar output
     """
     response = self.request.response
     response.setHeader("Content-Type", "text/x-vCalendar")
     response.setHeader("Content-Disposition", 'attachment; filename="%s.vcs"' % self.context.getId())
     out = StringIO()
     out.write(VCS_HEADER % {"prodid": PROJECTNAME})
     out.write(self.getVCal())
     out.write(VCS_FOOTER)
     return n2rn(out.getvalue())
Пример #4
0
 def render(self):
     """vCalendar output
     """
     response = self.request.response
     response.setHeader('Content-Type', 'text/calendar')
     response.setHeader('Content-Disposition',
                        'attachment; filename="%s.ics"' % self.context.getId())
     out = StringIO()
     out.write(ICS_HEADER % {'prodid': PROJECTNAME})
     out.write(self.getICal())
     out.write(ICS_FOOTER)
     return n2rn(out.getvalue())
Пример #5
0
 def __call__(self, **kwargs):
     """ vCard output  """
     out = StringIO()
     out.write(VC_HEADER)
     out.write(self.getVCard())
     out.write(VC_FOOTER)
     vcard = out.getvalue()
     self.request.RESPONSE.setHeader('Content-Type', 'text/x-vcard')
     self.request.RESPONSE.setHeader('Content-Length', len(vcard))
     self.request.RESPONSE.setHeader('Content-Disposition', 
                                     'attachment; filename="%s.vcf"' % self.context.getId())
     return n2rn(vcard)
Пример #6
0
 def render(self):
     """vCalendar output
     """
     response = self.request.response
     response.setHeader('Content-Type', 'text/calendar')
     response.setHeader(
         'Content-Disposition',
         'attachment; filename="%s.ics"' % self.context.getId())
     out = StringIO()
     out.write(ICS_HEADER % {'prodid': PROJECTNAME})
     out.write(self.getICal())
     out.write(ICS_FOOTER)
     return n2rn(out.getvalue())
Пример #7
0
 def __call__(self):
     """iCalendar output
     """
     self.request.response.setHeader('Content-Type', 'text/calendar')
     self.request.response.setHeader(
         'Content-Disposition',
         'attachment; filename="isaw_%s.ics"' % self.context.getId())
     out = StringIO()
     out.write(ICS_HEADER % {'prodid': PRODID})
     results = self.context.listFolderContents(
         contentFilter={"portal_type": "Event"})
     for result in results:
         out.write(get_ical(result))
     out.write(ICS_FOOTER)
     return n2rn(out.getvalue())
Пример #8
0
 def __call__(self):
     """iCalendar output
     """
     self.request.response.setHeader('Content-Type', 'text/calendar')
     self.request.response.setHeader('Content-Disposition',
                                     'attachment; filename="isaw_%s.ics"'
                                     % self.context.getId())
     out = StringIO()
     out.write(ICS_HEADER % {'prodid': PRODID})
     results = self.context.listFolderContents(
         contentFilter={"portal_type": "Event"})
     for result in results:
         out.write(get_ical(result))
     out.write(ICS_FOOTER)
     return n2rn(out.getvalue())
Пример #9
0
 def _vcal(self):
     """
     Make vCal file stream for item context. VCS is modified with use
     of the icalendar library to inject URL to event into the
     description (generate, then parse, modify, reserialize).
     Uses: http://codespeak.net/icalendar/
     """
     url = self.context.absolute_url()
     out = StringIO()
     out.write(VCS_HEADER % { 'prodid' : PRODID })
     out.write(self.context.getVCal())
     out.write(VCS_FOOTER)
     vcs = n2rn(out.getvalue())
     parsed = icalendar.Event.from_string(vcs)
     journal = [c for c in parsed.subcomponents
                 if isinstance(c, icalendar.Journal)]
     if journal:
         description = journal[0].get(
             'description',
             icalendar.vText(), #default empty, if empty desc in vcs
             ).format()
         description = '%s\n\n  More info:\n\n  %s\n\n' % (description, url)
         journal[0].set('description', description)
     return str(parsed) #return modified (description) vcs