--- MPIWGWeb/MPIWGProjects.py 2007/05/02 18:38:41 1.47.2.77
+++ MPIWGWeb/MPIWGProjects.py 2008/06/24 07:55:05 1.47.2.83
@@ -110,6 +110,29 @@ def sortI(x,y):
except:
return cmp(x[1],y[1])
+
+def unicodify(str):
+ """decode str (utf-8 or latin-1 representation) into unicode object"""
+ if not str:
+ return ""
+ if type(str) is StringType:
+ try:
+ return str.decode('utf-8')
+ except:
+ return str.decode('latin-1')
+ else:
+ return str
+
+def utf8ify(str):
+ """encode unicode object or string into byte string in utf-8 representation"""
+ if not str:
+ return ""
+ if type(str) is StringType:
+ return str
+ else:
+ return str.encode('utf-8')
+
+
class MPIWGLink(SimpleItem):
"""create a symbolic link to another page"""
@@ -307,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"
@@ -507,6 +553,8 @@ class MPIWGRoot(ZSQLExtendFolder):
"""returns the current section name"""
root = self.absolute_url()
url = self.REQUEST['URL']
+ if not url:
+ return None
path = string.replace(url, root, '')
paths = path.split('/')
if len(paths) > 0:
@@ -556,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:
@@ -844,14 +896,13 @@ class MPIWGRoot(ZSQLExtendFolder):
ret+="Created %s \n"%e_mail
created=True
except:
-
msg="Cannot create new user %s (%s %s)"%(e_mail,sys.exc_info()[0],sys.exc_info()[1])
logging.error(msg)
ret+=msg+"\n"
created=False
if created:
- qstr="update personal_www set web_object_created='yes',e_mail='%s' where key=%s"%(e_mail,self.ZSQLQuote(k))
+ qstr="update personal_www set web_object_created='yes',e_mail='%s@mpiwg-berlin.mpg.de' where key=%s"%(e_mail,self.ZSQLQuote(k))
self.ZSQLQuery(qstr)
return ret
@@ -1039,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()
@@ -1062,10 +1118,21 @@ class MPIWGRoot(ZSQLExtendFolder):
return entry
- def getTree(self,dep=None,date=None,onlyActive=None):
- """generate Tree from project list"""
+ def getTree(self,dep=None,date=None,onlyActive=0,onlyArchived=0):
+ """generate Tree from project list
+ als Liste, jeder Eintrag ist ein Tupel ,(Tiefe, ProjektNummer,ProjektObject
+ onlyActive = 0 : alle Projekte
+ onlyActive = 1 : nur active Projekte
+ onlyActive = 2: nur inactive Projekte
+
+ onlyArchived=0: alle Projekte
+ onlyArchived= 1 : nur aktuelle Projekte
+ onlyArchived = 2: nur archivierte Projekte
+ """
+ returnListTmp=[]
returnList=[]
+
for project in self.getProjectFields('xdata_05',sort="int",date=date): # get Projects sorted by xdata_05
for idNr in project[1].split(";"): # more than one number
@@ -1081,10 +1148,25 @@ class MPIWGRoot(ZSQLExtendFolder):
project[0].setActiveFlag(False)
if (not dep) or (idNr[0]==dep): #falls dep gesetzt ist nur dieses hinzufuegen.
- if onlyActive and project[0].isActiveProject(): #nur active projekte
- returnList.append((depth,nr,title,project[0]))
- elif not onlyActive:
- returnList.append((depth,nr,title,project[0]))
+
+ if (onlyActive==0):
+ returnListTmp.append((depth,nr,title,project[0]))
+ elif (onlyActive==1) and project[0].isActiveProject(): #nur active projekte
+ returnListTmp.append((depth,nr,title,project[0]))
+ elif (onlyActive==2) and (not project[0].isActiveProject()): #nur active projekte
+ returnListTmp.append((depth,nr,title,project[0]))
+
+
+ #filter jetzt die Liste nach Archived oder nicht
+ for entry in returnListTmp:
+ if (onlyArchived==0):
+ returnList.append(entry)
+ elif (onlyArchived==1) and (not entry[3].isArchivedProject()): #nur active projekte
+ returnList.append(entry)
+ elif (onlyArchived==2) and (entry[3].isArchivedProject()): #nur active projekte
+ returnList.append(entry)
+
+
return returnList
@@ -1125,24 +1207,49 @@ class MPIWGRoot(ZSQLExtendFolder):
"""change the complete tree"""
form=self.REQUEST.form
hashList={}
- fields=self.getTree()
-
+ onlyArchived=int(form.get("onlyArchived",0))
+ onlyActive=int(form.get("onlyActive",0))
+
- for idNr in form.keys():
+ fields=self.getTree(onlyArchived=onlyArchived,onlyActive=onlyActive)
+
+ logging.info("GOT TREE!----------------------------------------------------")
+ for field in form.keys():
- splitted=idNr.split('_')
+ splitted=field.split('_')
+ if (len(splitted)>1) and (splitted[1]=="runningNumber"): #feld hat die Form Nummer_name und runnignNumber
- if len(splitted)==1: # name des Feldes = idNr, dann Aendere id_nr
- if not (fields[int(idNr)][3].xdata_05==form[idNr]):
- fields[int(idNr)][3].xdata_05=form[idNr]
- fields[int(idNr)][3].copyObjectToArchive()
-
- if form.has_key(idNr+'_active'): # active flag is set
-
- fields[int(splitted[0])][3].setActiveFlag(True)
+
+ nr=int(splitted[0]) # nummer des Datensatzes
+ currentEntry = fields[nr]
+
+ if form.has_key(str(nr)+'_active'): # active flag is set
+ fields[nr][3].setActiveFlag(True)
else:
-
- fields[int(splitted[0])][3].setActiveFlag(False)
+ fields[nr][3].setActiveFlag(False)
+
+ #nummer hat sich geŠndert
+
+ entryChanged = False;
+
+
+ if not (fields[nr][3].xdata_05==form[str(nr)+'_number']):
+ logging.info("Changed!Number+++++++++++++++++++++++++++++++++")
+ fields[nr][3].xdata_05=form[str(nr)+'_number']
+ entryChanged = True
+
+ #completed har sich geaendert
+
+ if not (fields[nr][3].getCompletedAt()==fields[nr][3].transformDate(form[str(nr)+'_completed'])):
+ fields[nr][3].setCompletedAt(form[str(nr)+'_completed'])
+ logging.info("Changed!Completed+++++++++++++++++++++++++++++++++")
+ entryChanged = True
+
+
+ if entryChanged:
+ logging.info("Changed!+++++++++++++++++++++++++++++++++")
+ fields[nr][3].copyObjectToArchive()
+
if RESPONSE is not None:
RESPONSE.redirect('showTree')
@@ -1188,73 +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
+ 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 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 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=[]
@@ -1262,76 +1385,78 @@ 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):
+ 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:
+ onlyArchived=0: alle Projekte
+ onlyArchived= 1 : nur aktuelle Projekte
+ onlyArchived = 2: nur archivierte Projekte
"""
# TODO: Die ganze Loesung
def sortP(x,y):
"""sort by sorting number"""
- #print x.xdata_05,y.xdata_05
return cmp(x.WEB_title,y.WEB_title)
-
- ret=[]
- logging.error("XXXXXXXXXXXXXXXXX")
- if key:
-
- #members=self.ZopeFind(self.members,obj_metatypes=['MPIWGStaff'],obj_ids=[email],search_sub=1)
- members=self.MembersCatalog({'getKey':key})
- if len(members)==0:
- return ret
-
- splitted = [members[0].lastName,members[0].firstName]
-
- elif name:
-
- splitted=name.split(",")
+ ret=[]
+ if key:
+ proj=self.ProjectCatalog({'getPersonKeyList':key})
else:
- return ret # name oder key mussen definiert sein
-
- #XXXX
- splitNeu=["\'"+splitted[1]+" "+splitted[0]+"\'"]
+ return ret # key muss definiert sein
- #for s in splitted:
- # splitNeu.append("\""+s+"\"")
- search=string.join(splitNeu,' AND ')
-
- proj=self.ProjectCatalog({'xdata_01':search})
- logging.error("XXXXXXXXXXX %s"%proj)
+
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 (str(x.WEB_title).find('Einstein')>0)):
- 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)
- if len(proj2)>0:
- ret.append((name,proj2))
-
- return ret
+ projectListe=[]
+
+ for proj in proj2:
+ obj=proj.getObject()
+ add=False
+ if onlyArchived==1: #nur aktuell projecte
+ if not obj.isArchivedProject():
+ add=True
+ elif onlyArchived==2: #nur archivierte
+ if obj.isArchivedProject():
+ add=True
+ else: #alle
+ add=True
+
+ if onlyActive==1: #nur active projecte
+ if obj.isActiveProject():
+ add=add & True
+ else:
+ add=add & False
+
+ elif onlyArchived==2: #nur nicht aktvive
+ if not obj.isActiveProject():
+ add=add & True
+ else: #alle
+ add=add & True
+
+ if add:
+ projectListe.append(obj)
+
+
+ return projectListe
def givePersonList(self,name):
"""check if person is in personfolder and return list of person objects"""
@@ -1595,6 +1720,9 @@ class MPIWGProject(CatalogAware,Folder):
meta_type='MPIWGProject'
default_catalog='ProjectCatalog'
+ def decode(self,str):
+ """return unicode object"""
+ return unicodify(str)
def sortedByPlace(self,metatype):
"""find metatype and sort by place"""
@@ -1824,7 +1952,7 @@ class MPIWGProject(CatalogAware,Folder):
RESPONSE.redirect('manageImages')
- def hasChildren(self,date=None,onlyActive=True):
+ def hasChildren(self,date=None,onlyActive=1,onlyArchived=1):
"""check if project has children"""
ct=self.getContexts(childs=self.getContent('xdata_05'),
depth=1,date=date,onlyActive=onlyActive)
@@ -1994,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:
@@ -2018,11 +2147,94 @@ class MPIWGProject(CatalogAware,Folder):
def isActiveProject(self):
"""check if the project is still active, default is true, set to false is the project is accomplished"""
return getattr(self,'isActiveFlag',True)
+
+ def isArchivedProject(self):
+ """check if the project is archived"""
+
+ completed=getattr(self,'completedAt',0)
+
+ #completed leer
+ if completed=="" :
+ return False;
+ if completed == 0:
+ return False;
+
+
+ return True
+
def setActiveFlag(self,status=True):
"""set the active flag"""
self.isActiveFlag=status
+ def setCompletedAt(self,date):
+ """set the date of completion, date should be in the form DD.MM.YYYY or MM.YYYY or YYYY"""
+ logging.info("DATE:"+repr(date))
+ transformedDate=self.transformDate(date);
+ logging.info("transformed"+repr(transformedDate))
+ if transformedDate is not None:
+ setattr(self,"completedAt",transformedDate)
+ return True;
+ else:
+ return False;
+
+ def getCompletedAt(self):
+ """gibt das transformierte Datum zurŸck"""
+ date=getattr(self,'completedAt','')
+ if date:
+ return self.reTransformDate(date);
+ else:
+ return '';
+
+ def reTransformDate(self,date):
+ """transformiert , transformdate zurueck"""
+ year=int(date/10000)
+ month=int((date-year*10000)/100)
+ day=int((date-year*10000-month*100))
+ return """%s.%s.%s"""%(day,month,year);
+
+
+ def transformDate(self,date):
+ """transformiert ein Datum von DD.MM.YYYY, MM.YYYY,YYYY nach YYYYMMDD, alle nicht angebebenn Werte
+ werden auf 0 gesetzt, es wird null zurŸckgegeben falls das Datum ungueltig ist"""
+
+ if (date=="" ) :
+ return "";
+
+ if (date==None):
+ return None;
+
+ splitted=date.split(".")
+ length=len(splitted)
+ year=0
+ month=0
+ day=0
+ if length > 3:
+ return "";
+ if length==3:
+ day = int(splitted[0])
+ if length>1:
+ month=int(splitted[length-2])
+
+ if length > 0:
+ try:
+ year = int(splitted[length-1])
+ except:
+ pass
+
+ ## logging.info("month:"+(month))
+ if not (0<=month<13):
+ return None;
+
+ if not(0<=day<32):
+ return None;
+
+ if (year>0) and (year<1900): #jahr nicht vierstellig eingegeben
+ year=2000+year;
+ return year*10000+month*100+day
+
+
+
def checkDate(self,date):
"""teste ob zum Zeitpunkt date eine andere version existierte"""
@@ -2281,7 +2493,10 @@ class MPIWGProject(CatalogAware,Folder):
if (text5=="
") or (text5=="
"):
text5=""
- return text5.encode('utf-8')
+ logging.debug("getcontent: field=%s filter=%s -> %s"%(field,filter,repr(text5)))
+ #return unicodify(text5)
+ return utf8ify(text5) # return as utf-8 byte string
+
def showImagesOfPage(self,imageUrl=None):
"""show Images of project"""
@@ -2388,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"""
@@ -2400,7 +2672,13 @@ class MPIWGProject(CatalogAware,Folder):
setattr(self,x,[self.REQUEST[x].decode('utf-8')])
+
+
+ completedAt = self.REQUEST.get('completedAt')
+ if not self.setCompletedAt(completedAt):
+ RESPONSE.redirect('./editMPIWGBasisEditor?error="dateWrong')
+
if self.REQUEST.has_key('historicalNames'):
self.en.changeHistoricalNames(self.getId(),self.REQUEST['historicalNames'].split("\n"))
@@ -2408,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')
@@ -2473,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):