changeset 36:dbe037d2f574

working on projects.
author casties
date Fri, 26 Apr 2013 11:02:02 +0200
parents 38cbbeaf266b
children 9b38ba45773b
files MPIWGProjects.py
diffstat 1 files changed, 80 insertions(+), 65 deletions(-) [+]
line wrap: on
line diff
--- a/MPIWGProjects.py	Thu Apr 25 21:39:57 2013 +0200
+++ b/MPIWGProjects.py	Fri Apr 26 11:02:02 2013 +0200
@@ -313,8 +313,11 @@
         # {'label':'Edit Themes & Disciplines','action':'editMPIWGDisciplinesThemesForm'},
         # {'label':'Versionmanager','action':'versionManageForm'},
 
-    # enthaelt die Lister der verantwortlichen Wissenschaftler in der Form (NAME, KEY), key ist "" falls Wissenschaftler nicht an unserem Haus
+    # list of responsible scientists. entries are dicts with name, key, and username.
     responsibleScientistsList = []
+    
+    # thumbnail image
+    projectThumb = None
 
     #
     # templates
@@ -804,14 +807,20 @@
               
     def getThumbUrl(self, default='http://defaultthumb.jpg'):
         """returns the URL of the project thumbnail image"""
-        # TODO: improve this
-        imgs = self.getImageList()
-        url = default
-        if len(imgs) > 0:
-            img = imgs[0]
-            url = img.absolute_url()
-            
-        return url
+        thumb = self.projectThumb
+        if thumb is None:
+            # get thumb from list
+            imgs = self.getImageList()
+            url = default
+            if len(imgs) > 0:
+                thumb = imgs[0]
+                self.projectThumb = thumb
+
+        if thumb is None:
+            return None
+        
+        return thumb.absolute_url()
+
               
     def getImageList(self):
         """returns the sorted list of images for this project"""
@@ -1824,6 +1833,67 @@
         if RESPONSE:
             RESPONSE.redirect("./thesaurus/main.html?project=" + id)
         return
+    
+    
+    def updateProjectMembers(self, updateResponsibleScientistsList=False):
+        """updates project-member table"""
+        if updateResponsibleScientistsList:
+            # create responsibleScientistsList automatically
+            newScientists = {}
+            names = p.identifyNames(p.getResponsibleScientists())
+            for name in names.keys():
+                logging.debug("updateAllProjectMembers: name=%s" % repr(name))
+                members = names[name]
+                if len(members) > 0:
+                    # take the first matching name
+                    newScientists[name] = {'name': name, 'key' : members[0].key, 'username' : re.sub('@mpiwg-berlin\.mpg\.de', '', members[0].e_mail)}
+                
+            self.setResponsibleScientistsList(newScientists)
+            
+        memberlist = self.getResponsibleScientistsList()
+           
+        # clear projects_members table
+        pNum = self.getNumber()
+        if not pNum or not isinstance(pNum, basestring):
+            logging.error("updateProjectMembers: not a valid project number: %s" % repr(pNum))
+            return
+
+        if len(memberlist) == 0:
+            return
+         
+        # update old format responsibleScientistsList
+        if isinstance(memberlist[0], tuple):
+            logging.debug("updateAllProjectMembers: updating memberlist for project %s" % self)
+            newScientists = {}
+            for m in memberlist:
+                name = m[0]
+                key = m[1] 
+                username = None
+                if key:
+                    if isinstance(key, list):
+                        key = key[0]
+                        
+                    # get username from db
+                    member = self.executeZSQL("select * from personal_www where lower(key) = %s", [key.lower()])
+                    if len(member) > 0:
+                        username = re.sub('@mpiwg-berlin\.mpg\.de', '', member[0].e_mail)
+                        
+                newScientists[name] = {'name': name, 'key' : key, 'username' : username}
+                
+            # set and re-read new list
+            self.setResponsibleScientistsList(newScientists)
+            memberlist = self.getResponsibleScientistsList()
+        
+        # fill projects_members table
+        self.executeZSQL("delete from projects_members where project_number = %s", [pNum])
+        for m in memberlist:
+            memberKey = m.get('key')
+            if not memberKey or not isinstance(memberKey, basestring):
+                logging.error("updateProjectMembers: not a valid member key: %s" % repr(memberKey))
+                continue
+                        
+            self.executeZSQL("insert into projects_members (project_number, member_key) values (%s, %s)", (pNum, memberKey))
+
         
 def manage_addMPIWGProjectForm(self):
     """form for adding the project"""
@@ -1936,59 +2006,7 @@
             cnt += 1
             memberlist = []
             logging.debug("updateAllProjectMembers: updating project %s" % p)
-            if updateResponsibleScientistsList:
-                newScientists = {}
-                names = p.identifyNames(p.getResponsibleScientists())
-                for name in names.keys():
-                    logging.debug("updateAllProjectMembers: name=%s" % repr(name))
-                    members = names[name]
-                    if len(members) > 0:
-                        # take the first matching name
-                        newScientists[name] = {'name': name, 'key' : members[0].key, 'username' : re.sub('@mpiwg-berlin\.mpg\.de', '', members[0].e_mail)}
-                    
-                p.setResponsibleScientistsList(newScientists)
-            
-            memberlist = p.getResponsibleScientistsList()
-               
-            if len(memberlist) == 0:
-                continue
-             
-            # update old format responsibleScientistsList
-            if isinstance(memberlist[0], tuple):
-                logging.debug("updateAllProjectMembers: updating memberlist for project %s" % p)
-                newScientists = {}
-                for m in memberlist:
-                    name = m[0]
-                    key = m[1] 
-                    username = None
-                    if key:
-                        if isinstance(key, list):
-                            key = key[0]
-                            
-                        # get username from db
-                        member = self.executeZSQL("select * from personal_www where lower(key) = %s", [key.lower()])
-                        if len(member) > 0:
-                            username = re.sub('@mpiwg-berlin\.mpg\.de', '', member[0].e_mail)
-                            
-                    newScientists[name] = {'name': name, 'key' : key, 'username' : username}
-                    
-                # set and re-read new list
-                p.setResponsibleScientistsList(newScientists)
-                memberlist = p.getResponsibleScientistsList()
-                
-            # add members to table
-            for m in memberlist:
-                memberKey = m.get('key')
-                if not memberKey or not isinstance(memberKey, basestring):
-                    logging.error("updateAllProjectMembers: not a valid member key: %s" % repr(memberKey))
-                    continue
-                
-                pNum = p.getNumber()
-                if not pNum or not isinstance(pNum, basestring):
-                    logging.error("updateAllProjectMembers: not a valid project number: %s" % repr(pNum))
-                    continue
-                
-                self.executeZSQL('insert into projects_members (project_number, member_key) values (%s, %s)', (pNum, memberKey))
+            p.updateProjectMembers(updateResponsibleScientistsList=updateResponsibleScientistsList)
 
         return "updated %s projects!" % cnt
 
@@ -2007,6 +2025,3 @@
     if RESPONSE is not None:
         RESPONSE.redirect('manage_main')
 
-
-        
-