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())
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())
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())
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())
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)
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())
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())
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())
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