Diff for /MPIWGWeb/MPIWGProjects.py between versions 1.47.2.82 and 1.47.2.83

version 1.47.2.82, 2008/06/20 07:45:57 version 1.47.2.83, 2008/06/24 07:55:05
Line 330  class MPIWGRoot(ZSQLExtendFolder): Line 330  class MPIWGRoot(ZSQLExtendFolder):
     folders=['MPIWGProject','Folder','ECHO_Navigation']      folders=['MPIWGProject','Folder','ECHO_Navigation']
     meta_type='MPIWGRoot'      meta_type='MPIWGRoot'
   
       def transformProjectsToId(self):
           """trnasformiere zu ID, Hilfsfunktion die die alten Templates analysiert und mit der neuen Liste
           verantwortlicher Personen versieht"""
           projects=self.getTree()
           ret=""
           for project in projects:
               proj=project[3]
               persons=proj.identifyNames(proj.getContent('xdata_01'))
               if not hasattr(proj,'responsibleScientistsList'):
                           proj.responsibleScientistsList=[]
                           
               for person in persons.items():
                   logging.info("XXXX"+repr(person))
                   if len(person[1]) >1: #nicht eindeutig
                       ret+="nicht eindeutig ---  %s:  %s\n"%(proj.getId(),person[0])
                       
                   elif len(person[1]) ==0: #kein eintrage
                       ret+="kein eintrag---  %s:  %s\n"%(proj.getId(),person[0])
                       proj.responsibleScientistsList.append((person[0],""))
                   else:           
                       proj.responsibleScientistsList.append((person[0],person[1][0].getObject().getKey()))
           
           return ret
           
     def harvestProjects(self):      def harvestProjects(self):
         """harvest"""          """harvest"""
Line 581  class MPIWGRoot(ZSQLExtendFolder): Line 604  class MPIWGRoot(ZSQLExtendFolder):
     def isActual(self,project):      def isActual(self,project):
         """checke if project is actual"""          """checke if project is actual"""
         actualTime=time.localtime()          actualTime=time.localtime()
           
           if hasattr(project,'getObject'): #obj ist aus einer catalogTrefferList
         obj= project.getObject()          obj= project.getObject()
           else:
               obj=project
                   
         if getattr(obj,'archiveTime',actualTime)< actualTime:          if getattr(obj,'archiveTime',actualTime)< actualTime:
             return False              return False
Line 1063  class MPIWGRoot(ZSQLExtendFolder): Line 1090  class MPIWGRoot(ZSQLExtendFolder):
     def getAllMembers(self):      def getAllMembers(self):
         #ret=[]          #ret=[]
                   
           def sorter(x,y):
               return cmp(x[0],y[0])
                       
         results=self.MembersCatalog({'isPublished':True})          results=self.MembersCatalog({'isPublished':True})
     
         ret=[", ".join([proj.lastName, proj.firstName]).decode('utf-8') for proj in results]          ret=[(", ".join([proj.lastName, proj.firstName]).decode('utf-8'),proj.getKey) for proj in results]
                   
     ret.sort()          ret.sort(sorter)
         return ret          return ret
       
       
     def printAllMembers(self):      def printAllMembers(self):
         """print"""          """print"""
         members=self.getAllMembers()          members=self.getAllMembers()
Line 1263  class MPIWGRoot(ZSQLExtendFolder): Line 1295  class MPIWGRoot(ZSQLExtendFolder):
                     ret.append("%s"%person)                      ret.append("%s"%person)
         return string.join(ret,";")          return string.join(ret,";")
                   
       def getMemberIdFromKey(self,key):
           """gibt die ensprechende id  im members Ordner zum key"""
                           
     def getMembersFromList(self,list):          if key=="":
         """get member names from person full text list"""              return ""
         memberlist=[]          catalogged=self.MembersCatalog({'getKey':key})
         persons=list.split(";")          if len(catalogged)==0:
         for person in persons:              return ""
             if len(person)>1: #nicht nur Trennzeichen  
                 splitted=person.split(",")  
                 if len(splitted)==1:  
                     splitted=person.lstrip().rstrip().split(" ")  
                 splittedNew=[re.sub(r'\s(.*)','$1',split) for split in splitted]  
                 if splittedNew[0]=='':  
                     del splittedNew[0]  
                 search=string.join(splittedNew,' AND ')  
                   
                 if not search=='':  
                     try:  
                          
                         member=self.MembersCatalog({'title':search})  
                     
                     except:  
                         member=None  
                 if member:  
                    logging.error("search publ %s:"%member[0].getObject().isPublished())  
                 if member and (member[0].getObject().isPublished()):  
                     if person =="Otto Sibum" : person="H. Otto Sibum"  
                     if person =="Norton Wise" : person="M. Norton Wise"  
                       
                     #memberlist.append("<a href=%s >%s</a>"%(member[0].absolute_url,person.encode('utf-8')))  
                     memberlist.append((person, member[0].getObject().getId()))  
                 else:                  else:
                     #memberlist.append("%s"%person.encode('utf-8'))              return catalogged[0].getObject().getId()
                     memberlist.append((person,None))  
         return memberlist  
                                                     
     def getUrlFromPerson(self,list):  
         """get urls to person list"""  
         ret=[]  
         persons=list.split(";")  
         for person in persons:  
                           
             if len(person)>1: #nicht nur Trennzeichen  
                 splitted=person.split(",")  
                 if len(splitted)==1:  
                     splitted=person.lstrip().rstrip().split(" ")  
                 splittedNew=[re.sub(r'\s(.*)','$1',split) for split in splitted]  
                 if splittedNew[0]=='':  
                     del splittedNew[0]  
                 search=string.join(splittedNew,' AND ')  
                   
                 if not search=='':  
   
                     try:  #    def getMembersFromList(self,list):
                         proj=self.MembersCatalog({'title':search})  #        """get member names from person full text list"""
                     except:  #        memberlist=[]
                         proj=None  #        persons=list.split(";")
   #        for person in persons:
                 if proj and (proj[0].getObject().isPublished()):  #            if len(person)>1: #nicht nur Trennzeichen
                     if person =="Otto Sibum" : person="H. Otto Sibum"  #                splitted=person.split(",")
                     if person =="Norton Wise" : person="M. Norton Wise"  #                if len(splitted)==1:
                     #ret.append("<a href=%s >%s</a>"%(proj[0].absolute_url,person.encode('utf-8')))  #                    splitted=person.lstrip().rstrip().split(" ")
             if self.MPIWGrootURL().split("/")[-1]=='en':  #                splittedNew=[re.sub(r'\s(.*)','$1',split) for split in splitted]
             tmpPath="/en/staff/members/"  #                if splittedNew[0]=='':
             else:  #                    del splittedNew[0]
                         tmpPath="/de/mitarbeiter/members/"  #                search=string.join(splittedNew,' AND ')
                     ret.append("<a href=%s >%s</a>"%(tmpPath+proj[0].getObject().getId()+"/index.html",person))  #                
                 else:  #                if not search=='':
                     #ret.append("%s"%person.encode('utf-8'))  #                    try:
                     ret.append("%s"%person)  #                       
         return string.join(ret,";")  #                        member=self.MembersCatalog({'title':search})
   #                  
   #                    except:
   #                        member=None
   #                if member:
   #                   logging.error("search publ %s:"%member[0].getObject().isPublished())
   #                if member and (member[0].getObject().isPublished()):
   #                    if person =="Otto Sibum" : person="H. Otto Sibum"
   #                    if person =="Norton Wise" : person="M. Norton Wise"
   #                    
   #                    #memberlist.append("<a href=%s >%s</a>"%(member[0].absolute_url,person.encode('utf-8')))
   #                    memberlist.append((person, member[0].getObject().getId()))
   #                else:
   #                    #memberlist.append("%s"%person.encode('utf-8'))
   #                    memberlist.append((person,None))
   #        return memberlist
                                                     
   #    def getUrlFromPerson(self,list):
   #        """get urls to person list"""
   #        ret=[]
   #        persons=list.split(";")
   #        for person in persons:
   #            
   #            if len(person)>1: #nicht nur Trennzeichen
   #                splitted=person.split(",")
   #                if len(splitted)==1:
   #                    splitted=person.lstrip().rstrip().split(" ")
   #                splittedNew=[re.sub(r'\s(.*)','$1',split) for split in splitted]
   #                if splittedNew[0]=='':
   #                    del splittedNew[0]
   #                search=string.join(splittedNew,' AND ')
   #                
   #                if not search=='':
   #
   #                    try:
   #                        proj=self.MembersCatalog({'title':search})
   #                    except:
   #                        proj=None
   #
   #                if proj and (proj[0].getObject().isPublished()):
   #                    if person =="Otto Sibum" : person="H. Otto Sibum"
   #                    if person =="Norton Wise" : person="M. Norton Wise"
   #                    #ret.append("<a href=%s >%s</a>"%(proj[0].absolute_url,person.encode('utf-8')))
   #           if self.MPIWGrootURL().split("/")[-1]=='en':
   #           tmpPath="/en/staff/members/"
   #           else:
   #                        tmpPath="/de/mitarbeiter/members/"
   #                    ret.append("<a href=%s >%s</a>"%(tmpPath+proj[0].getObject().getId()+"/index.html",person))
   #                else:
   #                    #ret.append("%s"%person.encode('utf-8'))
   #                    ret.append("%s"%person)
   #        return string.join(ret,";")
   #                         
     def getProjectsOfMembers(self,date=None):      def getProjectsOfMembers(self,date=None):
         """give tuple member /projects"""          """give tuple member /projects"""
         ret=[]          ret=[]
Line 1341  class MPIWGRoot(ZSQLExtendFolder): Line 1385  class MPIWGRoot(ZSQLExtendFolder):
                 
         #return str(members)          #return str(members)
         for x in members:          for x in members:
                        projects=self.getProjectsOfMember(key=x[1],date=date)
             ret+=self.getProjectsOfMember(name=x,date=date)              if len(projects)>0:
                   ret.append((x[0],projects))
                           
         return ret          return ret
   
     def getProjectsOfMember(self,name=None,key=None,date=None,onlyArchived=1,onlyActive=1):      def getProjectsOfMember(self,key=None,date=None,onlyArchived=1,onlyActive=1):
         """get projects of a member          """get projects of a member
         @param name: (optional)Vorname + Nachname      
         @param key: (optional) Key zur Idenfikation des Benutzer          @param key: (optional) Key zur Idenfikation des Benutzer
         @param date: (optional) Version die zum Zeitpunkt date gueltig war          @param date: (optional) Version die zum Zeitpunkt date gueltig war
         @param onlyArchived:           @param onlyArchived: 
Line 1363  class MPIWGRoot(ZSQLExtendFolder): Line 1408  class MPIWGRoot(ZSQLExtendFolder):
                   
         ret=[]            ret=[]  
         if key:          if key:
                 proj=self.ProjectCatalog({'getPersonKeyList':key})
             members=self.MembersCatalog({'getKey':key})  
             if len(members)==0:  
                 return ret            
             splitted =  [members[0].lastName,members[0].firstName]  
           
         elif name:  
               
             splitted=name.split(",")  
         else:          else:
             return ret # name oder key mussen definiert sein              return ret # key muss definiert sein
           
        
         splitNeu=["\'"+splitted[1]+" "+splitted[0]+"\'"]  
                   
         search=string.join(splitNeu,' AND ')  
           
         proj=self.ProjectCatalog({'xdata_01':search})  
           
         if proj:          if proj:
             proj2=[]              proj2=[]
             for x in proj:              for x in proj:
                 if (not getattr(x.getObject(),'invisible',None)) and (getattr(x.getObject(),'archiveTime','')==''):                  if (not getattr(x.getObject(),'invisible',None)) and (getattr(x.getObject(),'archiveTime','')==''):
                     # furchtbarer hack um sicher zustellen dass christoph hoffmann nicht mit Dieter Hoffmann verwechselt wird.  
                
                     if not((splitted[1]=="Christoph") and (splitted[0]=="Hoffmann") and (  (("%s"%x.WEB_title).find('Einstein')>0) or (("%s"%x.WEB_title).find('Quantum')>0))):  
                        logging.info("XXXXXXXXXXXXXXXXXXXXXXXX")  
                        proj2.append(x)                         proj2.append(x)
   
         else:          else:
             proj2=[]              proj2=[]
                           
         proj=self.ProjectCatalog({'xdata_08':search})  
         if proj:  
             names=[x.WEB_title for x in proj]  
             for x in proj:  
                   
                 if (not x.WEB_title in names) and (getattr(x.getObject(),'archiveTime','')==''):  
                     proj2.append(x)  
   
   
         proj2.sort(sortP)          proj2.sort(sortP)
Line 1433  class MPIWGRoot(ZSQLExtendFolder): Line 1453  class MPIWGRoot(ZSQLExtendFolder):
                add=add & True                 add=add & True
                                           
             if add:              if add:
                 projectListe.append(proj)                  projectListe.append(obj)
                                   
         if len(projectListe)>0:  
             ret.append((name,projectListe))  
   
         return ret          return projectListe
             
     def givePersonList(self,name):      def givePersonList(self,name):
         """check if person is in personfolder and return list of person objects"""          """check if person is in personfolder and return list of person objects"""
Line 2104  class MPIWGProject(CatalogAware,Folder): Line 2122  class MPIWGProject(CatalogAware,Folder):
         self.id=id          self.id=id
         self.title=id          self.title=id
         self.isActiveFlag=True #Flag is true is the project is still active, False if accomplished          self.isActiveFlag=True #Flag is true is the project is still active, False if accomplished
           self.responsibleScientistsList=[] # enthaelt die Lister der verantwortlichen Wissenschaftler in der Form (NAME, KEY), key ist "" flass Wissenschaftler nicht an unserem Haus
                   
         if argv:          if argv:
             for arg in definedFields:              for arg in definedFields:
Line 2584  class MPIWGProject(CatalogAware,Folder): Line 2603  class MPIWGProject(CatalogAware,Folder):
         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','edit_MPIWGProject.zpt')).__of__(self)          pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','edit_MPIWGProject.zpt')).__of__(self)
         return pt()          return pt()
   
       def isResponsibleScientist(self,key):
           """teste ob eine Person in der Liste der respl. scientists auftaucht"""
           #logging.info("XXXXXXXXXXXXX"+repr(self.responsibleScientistsList))
     
           
           keys = [x[1] for x in getattr(self,"responsibleScientistsList",[])]
               
           if key in keys:
               return True
           else:
               return False
           
       def getPersonKeyList(self):
           """gibt die key Lister der beteiligten Personen zurŸck"""
           return [x[1] for x in getattr(self,'responsibleScientistsList',[])]
          
           
          
               
       def identifyNames(self,nameList):
           """Bekommt eine Komma oder Semikolon getrennte Liste mit Name der Form Vorname MittelName(n) Nachname
           und ordnet diese dann Mitarbeiter IDs zu falls es schone eine Liste gibt wird im Projekte gibt wird diese Upgedated.
           @param nameList
           """
           nameList=nameList.replace(";",",") # falls ; als Trenner ersetze
           names=nameList.split(",")
           
           returnNamesDict={}
   
          
           for name in names:
               name=name.lstrip().rstrip()
               nameSplitted = name.split(" ")
               if len(nameSplitted)>1:  #vor und nachname angegeben)
                 
                   lastname=nameSplitted[-1]
                   firstname=nameSplitted[0]
               else:
                   firstname =""
                   lastname=nameSplitted[0]
                  
               #finde Mitarbeiter mit den entsprechenden Name
               logging.info("Search: %s %s %s"%(name,firstname,lastname))
               cataloggedNames=self.MembersCatalog(firstName=firstname,lastName=lastname)
               
               #Teste ob die ensprechenden Namen schon der Liste zu geordnet sind
               #if not hasattr(self,'responsibleScientistsList'):
               #     self.responsibleScientistsList={}
               # 
               # if name in self.responsibleScientistsList.values()
               
               if len(cataloggedNames)>0:
                  returnNamesDict[name]=cataloggedNames
               else:
                   returnNamesDict[name]=[]
          
           return returnNamesDict
           
     def editMPIWGProject(self,RESPONSE=None,fromEdit=None):      def editMPIWGProject(self,RESPONSE=None,fromEdit=None):
         """edit the project and archive the old version"""          """edit the project and archive the old version"""
Line 2597  class MPIWGProject(CatalogAware,Folder): Line 2673  class MPIWGProject(CatalogAware,Folder):
                 setattr(self,x,[self.REQUEST[x].decode('utf-8')])                  setattr(self,x,[self.REQUEST[x].decode('utf-8')])
   
   
          
   
         completedAt = self.REQUEST.get('completedAt')          completedAt = self.REQUEST.get('completedAt')
         if not self.setCompletedAt(completedAt):          if not self.setCompletedAt(completedAt):
             RESPONSE.redirect('./editMPIWGBasisEditor?error="dateWrong')              RESPONSE.redirect('./editMPIWGBasisEditor?error="dateWrong')
Line 2608  class MPIWGProject(CatalogAware,Folder): Line 2686  class MPIWGProject(CatalogAware,Folder):
             self.setActiveFlag(True)              self.setActiveFlag(True)
         else:          else:
             self.setActiveFlag(False)              self.setActiveFlag(False)
           
           self.responsibleScientistsList=[] # setze die Liste der verantwortlichen Wissenschaftler zurueck
           
           names={}
           keys={}
           tmpList=[]
           for key in self.REQUEST.keys(): #gehe durch das Formular
               splitted=key.split("_")
               if splitted[0]=="responsibleScientist": #wenn es ein Feld der Form reponsibleScientist_nr_KEY gibt
                   nr=splitted[2]
                   if splitted[1]=="name":
                       names[nr]=self.REQUEST[key]
                   elif splitted[1]=="key":
                       keys[nr]=self.REQUEST[key]
                   
            
           for nr in names.keys():
                tmpList.append((names[nr],keys.get(nr,"")))
                
           self.responsibleScientistsList=tmpList
         if fromEdit and (RESPONSE is not None):          if fromEdit and (RESPONSE is not None):
             RESPONSE.redirect('./editMPIWGBasisEditor')              #RESPONSE.redirect('./editMPIWGBasisEditor')
               return self.editMPIWGBasisEditor(identifiedNames=self.identifyNames(self.REQUEST.get('xdata_01','')))
   
         else:          else:
             if RESPONSE is not None:              if RESPONSE is not None:
Line 2673  class MPIWGProject(CatalogAware,Folder): Line 2772  class MPIWGProject(CatalogAware,Folder):
         return 0          return 0
   
     security.declareProtected('View management screens','editMPIWGBasisEditor')      security.declareProtected('View management screens','editMPIWGBasisEditor')
     def editMPIWGBasisEditor(self):      def editMPIWGBasisEditor(self, identifiedNames=None):
                               
         """editform"""          """editform"""
           if not identifiedNames:
               identifiedNames=self.identifyNames(self.getContent('xdata_01'))
              # identifiedNames=self.getFullNameEntries()
               
         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','edit_MPIWGBasisNeu.zpt')).__of__(self)          pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','edit_MPIWGBasisNeu.zpt')).__of__(self)
         return pt()          return pt(identifiedNames=identifiedNames)
   
     security.declareProtected('View management screens','editMPIWGBasisForm')      security.declareProtected('View management screens','editMPIWGBasisForm')
     def editMPIWGBasisForm(self):      def editMPIWGBasisForm(self):

Removed from v.1.47.2.82  
changed lines
  Added in v.1.47.2.83


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>