diff MPIWGStaff.py @ 217:2598210ada7a

ICS calendar for talks.
author casties
date Mon, 07 Oct 2013 19:45:23 +0200
parents 3b517b412f77
children 95e0087b9e19
line wrap: on
line diff
--- 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):