# HG changeset patch # User casties # Date 1381167923 -7200 # Node ID 2598210ada7a776a0eb8c2a4c018512bd3dde7d6 # Parent 3b517b412f7744ba4e29543848e6e2e97d36abf3 ICS calendar for talks. diff -r 3b517b412f77 -r 2598210ada7a MPIWGStaff.py --- a/MPIWGStaff.py Wed Oct 02 14:40:50 2013 +0200 +++ b/MPIWGStaff.py Mon Oct 07 19:45:23 2013 +0200 @@ -16,8 +16,10 @@ import logging import email import re +import datetime from Products.ZDBInterface.ZDBInterfaceFolder import ZDBInterfaceFolder +from Products.MPIWGManager.MPIWGIcsManager import MPIWGIcsManager from SrvTxtUtils import getInt, unicodify, utf8ify, sqlName import MPIWGHelper @@ -36,6 +38,12 @@ manage_addMPIWGStaffForm = MPIWGStaff_old.manage_addMPIWGStaffForm manage_addMPIWGStaff = MPIWGStaff_old.manage_addMPIWGStaff +# MPIWGManager properties for ICS-calendars +# (ID_EN, ID_DE, VALUE_EN, VALUE_DE, WEIGHT, ID) +calendar_props = [('Description', 'Beschreibung', None, None, 0, 'description'), + ('Location', 'Ort', None, None, 0, 'location'), + ('URL', 'URL', None, None, 0, 'url'), + ('Time', 'Zeit', None, None, 0, 'time')] class MPIWGStaffFolder(ZDBInterfaceFolder): @@ -353,7 +361,7 @@ def getUsername(self): """returns the username""" id = re.sub('@mpiwg-berlin\.mpg\.de', '', self.content.e_mail) - return id + return str(id) getId = getUsername @@ -414,7 +422,17 @@ if sortBy == 'priority': query += " order by priority" - return self.folder.executeZSQL(query, [self.content.key]) + return self.folder.executeZSQL(query, [self.getKey()]) + + + def getTalksCal(self): + """Return the talks calendar object (MPIWGIcsManager)""" + try: + cal = self.folder.get('calendars').get("%s_talks"%self.getUsername()) + return cal + except: + return None + def getTeaching(self, published=True, sortBy='priority'): """Return the list of teaching activities""" @@ -425,16 +443,14 @@ if sortBy == 'priority': query += " ORDER BY priority" - return self.folder.executeZSQL(query,[self.content.key]) + return self.folder.executeZSQL(query,[self.getKey()]) def getLastUpdateCV(self): """getDate of Last Update""" try: - fname="%s_cv.pdf"%self.getUsername().encode('utf-8') - logging.debug(fname) - ob=self.folder._getOb("downloadableFiles")._getOb(fname) - return ob.bobobase_modification_time() + ob=self.folder.get("downloadableFiles").get("%s_cv.pdf"%self.getUsername()) + return datetime.datetime.fromtimestamp(ob._p_mtime) except: return "No file yet!" @@ -442,24 +458,21 @@ def getLastUpdatePublications(self): """getDate of Last Update""" try: - ob=self.folder._getOb("downloadableFiles")._getOb("%s_publications.pdf"%self.getUsername().encode('utf-8')) - return ob.bobobase_modification_time() + ob=self.folder.get("downloadableFiles").get("%s_publications.pdf"%self.getUsername()) + return datetime.datetime.fromtimestamp(ob._p_mtime) except: return "No file yet!" def downloadCV(self,REQUEST): """download the cv""" - fname="%s_cv.pdf"%self.getUsername().encode('utf-8') - logging.debug(fname) - ob=self.folder._getOb("downloadableFiles")._getOb(fname) - + ob=self.folder.get("downloadableFiles").get("%s_cv.pdf" % self.getUsername()) REQUEST.RESPONSE.redirect(ob.absolute_url()) + def downloadPublications(self,REQUEST): """donwload the publication list""" - ob=self.folder._getOb("downloadableFiles")._getOb("%s_publications.pdf"%self.getUsername().encode('utf-8')) - + ob=self.folder.get("downloadableFiles").get("%s_publications.pdf"%self.getUsername()) REQUEST.RESPONSE.redirect(ob.absolute_url()) @@ -526,20 +539,40 @@ pt = PageTemplateFile('zpt/staff/edit_profile.zpt', globals()).__of__(self) return pt() - security.declareProtected('View management screens','editTalks') def editTalks(self,REQUEST): """edit talks""" + pt=PageTemplateFile('zpt/staff/edit_talks.zpt', globals()).__of__(self) + if REQUEST: argv=REQUEST.form - if argv.has_key('main_fields'): #got data to change + # ICS URL driven talks + url = argv.get('ics_url', None) + if url: + cal_id = "%s_talks"%self.getUsername() + # use ICS calendar + cal = self.getTalksCal() + if cal is not None: + # calendar exists + if cal.url == url: + # same url + return pt() + else: + # remove + del self.folder.get('calendars')[cal_id] + + # create new calendar + cal = MPIWGIcsManager(cal_id, '', url, defaultProps=calendar_props) + self.folder.get('calendars')[cal_id] = cal + + # manually edited talks + elif argv.has_key('main_fields'): #got data to change self.invalidate_cache() self.changeAdditionalData(argv); - pt=PageTemplateFile('zpt/staff/edit_talks.zpt', globals()).__of__(self) return pt() @@ -617,7 +650,7 @@ data=REQUEST.form - ob = self.folder._getOb("downloadableFiles") + ob = self.folder.get("downloadableFiles") if data.get('cv_publish',None): diff -r 3b517b412f77 -r 2598210ada7a zpt/staff/edit_downloads.zpt --- a/zpt/staff/edit_downloads.zpt Wed Oct 02 14:40:50 2013 +0200 +++ b/zpt/staff/edit_downloads.zpt Mon Oct 07 19:45:23 2013 +0200 @@ -28,7 +28,7 @@ tal:content="here/getLastUpdateCV" />)
- publish:
+ Show CV download:
- publish:
+ Show publication list download:
+ Calendar URL:
+ (public iCalendar ICS calendar format).
+
+ Remove URL to enter talks manually. +
+diff -r 3b517b412f77 -r 2598210ada7a zpt/staff/member_index_html.zpt --- a/zpt/staff/member_index_html.zpt Wed Oct 02 14:40:50 2013 +0200 +++ b/zpt/staff/member_index_html.zpt Mon Oct 07 19:45:23 2013 +0200 @@ -71,29 +71,49 @@ More publications - + -
- - | -- - - | -
- More -
++ | + + | +
+ More +
++ | + | +
+ More +
+- - | -- - - - | -
+ | + | +
+ | + + | +