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): |