--- MPIWGWeb/MPIWGProjects.py 2008/06/20 07:45:57 1.47.2.82
+++ MPIWGWeb/MPIWGProjects.py 2008/06/24 07:55:05 1.47.2.83
@@ -330,7 +330,30 @@ class MPIWGRoot(ZSQLExtendFolder):
folders=['MPIWGProject','Folder','ECHO_Navigation']
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):
"""harvest"""
folder="/tmp"
@@ -581,8 +604,12 @@ class MPIWGRoot(ZSQLExtendFolder):
def isActual(self,project):
"""checke if project is actual"""
actualTime=time.localtime()
- obj= project.getObject()
+ if hasattr(project,'getObject'): #obj ist aus einer catalogTrefferList
+ obj=project.getObject()
+ else:
+ obj=project
+
if getattr(obj,'archiveTime',actualTime)< actualTime:
return False
else:
@@ -1063,12 +1090,17 @@ class MPIWGRoot(ZSQLExtendFolder):
def getAllMembers(self):
#ret=[]
+ def sorter(x,y):
+ return cmp(x[0],y[0])
+
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
+
+
def printAllMembers(self):
"""print"""
members=self.getAllMembers()
@@ -1263,77 +1295,89 @@ class MPIWGRoot(ZSQLExtendFolder):
ret.append("%s"%person)
return string.join(ret,";")
-
- def getMembersFromList(self,list):
- """get member names from person full text list"""
- memberlist=[]
- 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:
-
- 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("%s"%(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
+ def getMemberIdFromKey(self,key):
+ """gibt die ensprechende id im members Ordner zum key"""
+
+ if key=="":
+ return ""
+ catalogged=self.MembersCatalog({'getKey':key})
+ if len(catalogged)==0:
+ return ""
+ else:
+ return catalogged[0].getObject().getId()
+
- 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("%s"%(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("%s"%(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 getMembersFromList(self,list):
+# """get member names from person full text list"""
+# memberlist=[]
+# 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:
+#
+# 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("%s"%(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("%s"%(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("%s"%(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):
"""give tuple member /projects"""
ret=[]
@@ -1341,14 +1385,15 @@ class MPIWGRoot(ZSQLExtendFolder):
#return str(members)
for x in members:
-
- ret+=self.getProjectsOfMember(name=x,date=date)
+ projects=self.getProjectsOfMember(key=x[1],date=date)
+ if len(projects)>0:
+ ret.append((x[0],projects))
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
- @param name: (optional)Vorname + Nachname
+
@param key: (optional) Key zur Idenfikation des Benutzer
@param date: (optional) Version die zum Zeitpunkt date gueltig war
@param onlyArchived:
@@ -1362,48 +1407,23 @@ class MPIWGRoot(ZSQLExtendFolder):
return cmp(x.WEB_title,y.WEB_title)
ret=[]
- if key:
-
- members=self.MembersCatalog({'getKey':key})
- if len(members)==0:
- return ret
- splitted = [members[0].lastName,members[0].firstName]
-
- elif name:
-
- splitted=name.split(",")
+ if key:
+ proj=self.ProjectCatalog({'getPersonKeyList':key})
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:
proj2=[]
for x in proj:
- 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)
+ if (not getattr(x.getObject(),'invisible',None)) and (getattr(x.getObject(),'archiveTime','')==''):
+ proj2.append(x)
else:
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)
projectListe=[]
@@ -1433,12 +1453,10 @@ class MPIWGRoot(ZSQLExtendFolder):
add=add & True
if add:
- projectListe.append(proj)
+ projectListe.append(obj)
- if len(projectListe)>0:
- ret.append((name,projectListe))
-
- return ret
+
+ return projectListe
def givePersonList(self,name):
"""check if person is in personfolder and return list of person objects"""
@@ -2104,6 +2122,7 @@ class MPIWGProject(CatalogAware,Folder):
self.id=id
self.title=id
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:
for arg in definedFields:
@@ -2584,7 +2603,64 @@ class MPIWGProject(CatalogAware,Folder):
pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','edit_MPIWGProject.zpt')).__of__(self)
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):
"""edit the project and archive the old version"""
@@ -2596,6 +2672,8 @@ class MPIWGProject(CatalogAware,Folder):
setattr(self,x,[self.REQUEST[x].decode('utf-8')])
+
+
completedAt = self.REQUEST.get('completedAt')
if not self.setCompletedAt(completedAt):
@@ -2608,9 +2686,30 @@ class MPIWGProject(CatalogAware,Folder):
self.setActiveFlag(True)
else:
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):
- RESPONSE.redirect('./editMPIWGBasisEditor')
-
+ #RESPONSE.redirect('./editMPIWGBasisEditor')
+ return self.editMPIWGBasisEditor(identifiedNames=self.identifyNames(self.REQUEST.get('xdata_01','')))
+
else:
if RESPONSE is not None:
RESPONSE.redirect('manage_main')
@@ -2673,10 +2772,15 @@ class MPIWGProject(CatalogAware,Folder):
return 0
security.declareProtected('View management screens','editMPIWGBasisEditor')
- def editMPIWGBasisEditor(self):
+ def editMPIWGBasisEditor(self, identifiedNames=None):
+
"""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)
- return pt()
+ return pt(identifiedNames=identifiedNames)
security.declareProtected('View management screens','editMPIWGBasisForm')
def editMPIWGBasisForm(self):