# HG changeset patch
# User casties
# Date 1367318966 -7200
# Node ID d456fe185649a9d30d55bbbfc0dcf0e5b8b7589b
# Parent e30a4bd074db4b95122cf449aa14b63bffc345b5
more work on projects. more cleanup.
diff -r e30a4bd074db -r d456fe185649 MPIWGProjects.py
--- a/MPIWGProjects.py Mon Apr 29 20:34:17 2013 +0200
+++ b/MPIWGProjects.py Tue Apr 30 12:49:26 2013 +0200
@@ -584,6 +584,8 @@
pass
+ # invalidate thumbnail
+ self.projectThumb = None
pt = PageTemplateFile('zpt/project/edit_images', globals()).__of__(self)
return pt()
@@ -832,8 +834,7 @@
# invalidate thumbnail
self.projectThumb = None
- if RESPONSE is not None:
-
+ if RESPONSE is not None:
self.redirect(RESPONSE, 'manageImages')
@@ -1684,6 +1685,7 @@
if tree is None:
tree = HashTree(keySeparator='.', keyFn=getInt)
for p in self.objectValues(spec='MPIWGProject'):
+ # add all projects
tree.add(p.getNumber(), p)
self._v_projectTree = tree
@@ -1692,7 +1694,7 @@
return tree
- def getProjectsAsList(self, start, active=1, archived=1):
+ def getProjectsAsList(self, start=None, active=1, archived=1):
"""Return flattened list of projects, starting from start.
active = 0 : all projects
@@ -1749,6 +1751,76 @@
return projects
+ security.declareProtected('View management screens', 'changeProjectTree')
+ def changeProjectTree(self, RESPONSE=None):
+ """change the complete tree"""
+ form=self.REQUEST.form
+ hashList={}
+ onlyArchived=int(form.get("onlyArchived",0))
+ onlyActive=int(form.get("onlyActive",0))
+ dep=form.get("dep",None)
+
+ fields = self.getProjectsAsList(start=dep, archived=onlyArchived, active=onlyActive)
+
+ logging.info("GOT TREE!----------------------------------------------------")
+ for field in form.keys():
+
+ splitted=field.split('_')
+ if (len(splitted)>1) and (splitted[1]=="runningNumber"):
+ #feld hat die Form Nummer_name und runnignNumber
+ nr=int(splitted[0]) # nummer des Datensatzes
+ project = fields[nr]
+
+ #
+ # change active
+ #
+ if form.has_key('%s_active'%nr): # active flag is set
+ project.setActiveFlag(True)
+ else:
+ project.setActiveFlag(False)
+
+ #
+ # nummer hat sich geaendert
+ #
+ entryChanged = False;
+ pronum = project.getNumber()
+ formnum = form['%s_number'%nr]
+
+ if not (pronum == formnum):
+ logging.debug("Changed!Number+++++++++++++++++++++++++++++++++")
+ logging.debug(repr(fields[nr].xdata_05)+" ---> "+ repr(form[str(nr)+'_number']))
+ entryChanged = True
+
+ #
+ # completed hat sich geaendert
+ #
+ td = project.transformDate # hole die funktion zum transformieren des datums
+ formstarted = form[str(nr)+'_started']
+ formcompleted = form[str(nr)+'_completed']
+
+ if not (td(project.getCompletedAt()) == td(formcompleted)):
+ logging.info(repr(td(project.getCompletedAt()))+" ---> "+ repr(td(form[str(nr)+'_completed'])))
+ logging.info("Changed!Completed+++++++++++++++++++++++++++++++++")
+ entryChanged = True
+
+ if not (td(project.getStartedAt()) == td(formstarted)):
+ logging.info(repr(td(project.getStartedAt()))+" ---> "+ repr(td(form[str(nr)+'_started'])))
+ logging.info("Changed!Started+++++++++++++++++++++++++++++++++")
+ entryChanged = True
+
+ if entryChanged:
+ logging.info("Changed!+++++++++++++++++++++++++++++++++")
+ project.copyObjectToArchive()
+ project.xdata_05 = formnum
+ project.setCompletedAt(formcompleted)
+ project.setStartedAt(formstarted)
+ # reset tree
+ self._v_projectTree = None
+
+ if RESPONSE is not None:
+ RESPONSE.redirect(self.en.MPIWGrootURL()+'/admin/showTree')
+
+
security.declareProtected('View management screens', 'updateAllProjectMembers')
def updateAllProjectMembers(self, updateResponsibleScientistsList=False):
"""Re-create responsibleScientistsLists and projects_members table from all current projects."""
diff -r e30a4bd074db -r d456fe185649 MPIWGRoot.py
--- a/MPIWGRoot.py Mon Apr 29 20:34:17 2013 +0200
+++ b/MPIWGRoot.py Tue Apr 30 12:49:26 2013 +0200
@@ -121,23 +121,6 @@
return bt
- def versionHeaderEN(self):
- """version header text"""
-
- date= self.REQUEST.get('date',None)
- if date:
- txt="""
This pages shows the project which existed at %s
"""%str(date)
- return txt
- return ""
-
- def versionHeaderDE(self):
- """version header text"""
- date= self.REQUEST.get('date',None)
- if date:
- txt="""Auf dieser Seite finden Sie die Projekte mit Stand vom %s
"""%str(date)
- return ""
-
-
def createOrUpdateId_raw(self):
"""create sequence to create ids for bibliography"""
debug=None
@@ -165,22 +148,6 @@
splitted=url.split("/")
return splitted[4]
- def generateUrlProject(self,url,project=None):
- """erzeuge aus absoluter url, relative des Projektes"""
- if project:
- splitted=url.split("/")
- length=len(splitted)
- short=splitted[length-2:length]
-
- base=self.REQUEST['URL3']+"/"+"/".join(short)
-
- else:
- findPart=url.find("/projects/")
- base=self.REQUEST['URL1']+"/"+url[findPart:]
-
-
- return base
-
def isNewCapital(self,text=None,reset=None):
if text:
@@ -406,34 +373,6 @@
"""quote"""
return urllib.unquote(str)
-
-
- def getProjectsByFieldContent(self,fieldName,fieldContentsEntry, date=None):
- """gib alle Projekte aus mit Value von field mit fieldName enthaelt ein Element der Liste fieldContents"""
- def sort(x,y):
- return cmp(x.WEB_title[0],y.WEB_title[0])
-
- if type(fieldContentsEntry) is StringType:
- fieldContentsTmp=[fieldContentsEntry]
- else:
- fieldContentsTmp=fieldContentsEntry
-
- fieldContents=[]
- for x in fieldContentsTmp:
- fieldContents.append(" AND ".join(x.split()))
- projects=self.ProjectCatalog({fieldName:string.join(fieldContents,' AND')})
- #print projects
- #ret=[x for x in projects]
- ret=[]
- for x in projects:
- obj=x.getObject()
- obj=obj.getActualVersion(date)
- if obj and (not getattr(obj,'invisible',None)):
- #if not (x in ret):
- ret.append(x)
-
- ret.sort(sort)
- return ret
def changeMPIWGRootForm(self):
"""edit"""
@@ -534,50 +473,6 @@
-
- def getProjectFields(self,fieldName,date=None,folder=None,sort=None):
- """getListofFieldNames"""
- ret=[]
-
- objects=self.ZopeFind(self.projects,obj_metatypes=['MPIWGProject'],search_sub=0)
-
-
- for object in objects:
- obj=object[1]
- obj=obj.getActualVersion(date)
- if obj and (not getattr(obj,'invisible',None)):
- if fieldName=="WEB_title_or_short":
-
- if len(obj.getContent('xdata_07'))<3: # hack weil z.Z. manchmal noch ein Trennzeichen ; oder , im Feld statt leer
- fieldNameTmp="WEB_title"
- else:
- fieldNameTmp="xdata_07"
- else:
- fieldNameTmp=fieldName
-
- ret.append((obj,obj.getContent(fieldNameTmp)))
-
-
- if sort=="int":
- ret.sort(sortI)
- elif sort=="stopWords":
-
- ret.sort(sortStopWords(self))
-
- else:
- ret.sort(sortF)
-
- return ret
-
- def showNewProjects(self):
- projects=[]
- for objs in self.getProjectFields('WEB_title_or_short'): # Get all Projets
- if objs[0].xdata_05 and (objs[0].xdata_05[0] == ""):
-
- projects.append(objs)
-
- return projects
-
def updatePublicationDB(self,personId=None):
"""updates the publication db, i.e. copy year and type into the main table"""
@@ -814,43 +709,6 @@
- def reindexCatalogs(self,RESPONSE=None):
- """reindex members and project catalog"""
-
-
- try:
-
- self.ProjectCatalog.manage_catalogReindex(self.REQUEST,RESPONSE,self.REQUEST['URL1'])
- logger("MPIWG Root (reindexCatalog: projects)",logging.INFO,"DONE")
- except:
- logger("MPIWG Root (reindexCatalog: projects)",logging.WARNING," %s %s"%sys.exc_info()[:2])
-
- try:
-
- self.MembersCatalog.manage_catalogReindex(self.REQUEST,RESPONSE,self.REQUEST['URL1'])
- logger("MPIWG Root (reindexCatalog: members)",logging.INFO,"DONE")
- except:
- logger("MPIWG Root (reindexCatalog: members)",logging.WARNING," %s %s"%sys.exc_info()[:2])
-
-
-#
-# try:
-#
-# self.fulltextProjectsMembers.manage_catalogReindex(self.REQUEST,RESPONSE,self.REQUEST['URL1'])
-# logger("MPIWG Root (reindexCatalog: fulltextProjectsMembers)",logging.INFO,"DONE")
-# except:
-# logger("MPIWG Root (reindexCatalog: fulltextProjectsMembers)",logging.WARNING," %s %s"%sys.exc_info()[:2])
-#
-#
-#
-#
-
-
- if RESPONSE:
- RESPONSE.redirect('manage_main')
-
-
-
def getAllMembers(self):
#ret=[]
@@ -900,171 +758,8 @@
rss+="""
"""
-
return rss
- 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
-
- department fuer das Tree geholt werden soll
- """
- logging.debug("MPIWGRoot.getTree()")
-
- 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
- if not idNr=="":
- splittedId=idNr.split(".")
- depth=len(splittedId)
- nr=idNr
- #title=project[0].WEB_title
- title=[project[0].getContent('WEB_title')]
- #print title
-
- if idNr[0]=="x": # kompatibilitaet mit alter Konvention, x vor der Nummer macht project inactive
- project[0].setActiveFlag(False)
-
- if (not dep) or (splittedId[0]==dep): #falls dep gesetzt ist nur dieses hinzufuegen.
-
- 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
-
-
-
- def changePosition(self,treeId,select,RESPONSE=None):
- """Change Postion Entry"""
- numbers=[]
-
- # Suche hoechste bisherige nummer
- projects=self.getProjectFields('xdata_05') # get Projects sorted by xdata_05
- #print "pj",projects
- for project in projects: #suche alle subtrees der treeId
- #print treeId
-
- founds=re.match(treeId+"\.(.*)",project[1].split(";")[0])
- if founds:
- #print "x",founds.group(0),len(founds.group(0).split("."))
- if len(founds.group(0).split("."))==len(treeId.split("."))+1: # nur ein punkt mehr, d.h. untere ebene
- try:
- numbers.append(int(founds.group(0).split(".")[len(founds.group(0).split("."))-1]))
- except:
- numbers.append(int(0))
-
- try:
- highest=max(numbers)
- except:
- highest=0
- projects=self.showNewProjects()
- for i in self.makeList(select):
- highest+=10
- projects[int(i)][0].xdata_05=treeId+"."+str(highest)
-
-
- if RESPONSE is not None:
- RESPONSE.redirect('showTree')
-
- def changeTree(self,RESPONSE=None):
- """change the complete tree"""
- form=self.REQUEST.form
- hashList={}
- onlyArchived=int(form.get("onlyArchived",0))
- onlyActive=int(form.get("onlyActive",0))
- dep=form.get("dep",None)
-
- fields=self.getTree(dep=dep,onlyArchived=onlyArchived,onlyActive=onlyActive)
-
- logging.info("GOT TREE!----------------------------------------------------")
- for field in form.keys():
-
- splitted=field.split('_')
- if (len(splitted)>1) and (splitted[1]=="runningNumber"): #feld hat die Form Nummer_name und runnignNumber
-
-
- 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[nr][3].setActiveFlag(False)
-
- #nummer hat sich geaendert
-
- entryChanged = False;
-
- if isinstance(fields[nr][3].xdata_05,list): #for some reasons somtimes the content of the field is a list with one entry.
- fields[nr][3].xdata_05=fields[nr][3].xdata_05[0]
-
- if not (fields[nr][3].xdata_05==form[str(nr)+'_number']):
- logging.info("Changed!Number+++++++++++++++++++++++++++++++++")
- logging.info(repr(fields[nr][3].xdata_05)+" ---> "+ repr(form[str(nr)+'_number']))
- fields[nr][3].xdata_05=form[str(nr)+'_number']
- entryChanged = True
-
- #completed har sich geaendert
-
- td = fields[nr][3].transformDate # hole die funktion zum transformieren des datums
-
- if not (td(fields[nr][3].getCompletedAt())==td(form[str(nr)+'_completed'])):
- fields[nr][3].setCompletedAt(form[str(nr)+'_completed'])
- logging.info(repr(td(fields[nr][3].getCompletedAt()))+" ---> "+ repr(td(form[str(nr)+'_completed'])))
- logging.info("Changed!Completed+++++++++++++++++++++++++++++++++")
- entryChanged = True
-
- if not (td(fields[nr][3].getStartedAt())==td(form[str(nr)+'_started'])):
- fields[nr][3].setStartedAt(form[str(nr)+'_started'])
-
- logging.info(repr(td(fields[nr][3].getStartedAt()))+" ---> "+ repr(td(form[str(nr)+'_started'])))
- logging.info("Changed!Started+++++++++++++++++++++++++++++++++")
- entryChanged = True
-
-
- if entryChanged:
- logging.info("Changed!+++++++++++++++++++++++++++++++++")
- fields[nr][3].copyObjectToArchive()
-
-
- if RESPONSE is not None:
- RESPONSE.redirect('showTree')
-
- def getProjectWithId(self,id):
- fields=self.getProjectFields('xdata_05')
- for field in fields:
- if field[1]==id:
- return field[0]
-
- return None
-
-
-
def getRelativeUrlFromPerson(self,list):
"""get urls to person list"""
diff -r e30a4bd074db -r d456fe185649 MPIWGRoot_deleted_methods.py
--- a/MPIWGRoot_deleted_methods.py Mon Apr 29 20:34:17 2013 +0200
+++ b/MPIWGRoot_deleted_methods.py Tue Apr 30 12:49:26 2013 +0200
@@ -508,3 +508,308 @@
else:
return True
+
+ 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, Titel, 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
+
+ department fuer das Tree geholt werden soll
+ """
+ logging.debug("MPIWGRoot.getTree()")
+
+ 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
+ if not idNr=="":
+ splittedId=idNr.split(".")
+ depth=len(splittedId)
+ nr=idNr
+ #title=project[0].WEB_title
+ title=[project[0].getContent('WEB_title')]
+ #print title
+
+ if idNr[0]=="x": # kompatibilitaet mit alter Konvention, x vor der Nummer macht project inactive
+ project[0].setActiveFlag(False)
+
+ if (not dep) or (splittedId[0]==dep): #falls dep gesetzt ist nur dieses hinzufuegen.
+
+ 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
+
+ def changePosition(self,treeId,select,RESPONSE=None):
+ """Change Postion Entry"""
+ numbers=[]
+
+ # Suche hoechste bisherige nummer
+ projects=self.getProjectFields('xdata_05') # get Projects sorted by xdata_05
+ #print "pj",projects
+ for project in projects: #suche alle subtrees der treeId
+ #print treeId
+
+ founds=re.match(treeId+"\.(.*)",project[1].split(";")[0])
+ if founds:
+ #print "x",founds.group(0),len(founds.group(0).split("."))
+ if len(founds.group(0).split("."))==len(treeId.split("."))+1: # nur ein punkt mehr, d.h. untere ebene
+ try:
+ numbers.append(int(founds.group(0).split(".")[len(founds.group(0).split("."))-1]))
+ except:
+ numbers.append(int(0))
+
+ try:
+ highest=max(numbers)
+ except:
+ highest=0
+ projects=self.showNewProjects()
+ for i in self.makeList(select):
+ highest+=10
+ projects[int(i)][0].xdata_05=treeId+"."+str(highest)
+
+ if RESPONSE is not None:
+ RESPONSE.redirect('showTree')
+
+ def changeTree(self,RESPONSE=None):
+ """change the complete tree"""
+ form=self.REQUEST.form
+ hashList={}
+ onlyArchived=int(form.get("onlyArchived",0))
+ onlyActive=int(form.get("onlyActive",0))
+ dep=form.get("dep",None)
+
+ fields=self.getTree(dep=dep,onlyArchived=onlyArchived,onlyActive=onlyActive)
+
+ logging.info("GOT TREE!----------------------------------------------------")
+ for field in form.keys():
+
+ splitted=field.split('_')
+ if (len(splitted)>1) and (splitted[1]=="runningNumber"): #feld hat die Form Nummer_name und runnignNumber
+
+
+ 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[nr][3].setActiveFlag(False)
+
+ #nummer hat sich geaendert
+
+ entryChanged = False;
+
+ if isinstance(fields[nr][3].xdata_05,list): #for some reasons somtimes the content of the field is a list with one entry.
+ fields[nr][3].xdata_05=fields[nr][3].xdata_05[0]
+
+ if not (fields[nr][3].xdata_05==form[str(nr)+'_number']):
+ logging.info("Changed!Number+++++++++++++++++++++++++++++++++")
+ logging.info(repr(fields[nr][3].xdata_05)+" ---> "+ repr(form[str(nr)+'_number']))
+ fields[nr][3].xdata_05=form[str(nr)+'_number']
+ entryChanged = True
+
+ #completed har sich geaendert
+
+ td = fields[nr][3].transformDate # hole die funktion zum transformieren des datums
+
+ if not (td(fields[nr][3].getCompletedAt())==td(form[str(nr)+'_completed'])):
+ fields[nr][3].setCompletedAt(form[str(nr)+'_completed'])
+ logging.info(repr(td(fields[nr][3].getCompletedAt()))+" ---> "+ repr(td(form[str(nr)+'_completed'])))
+ logging.info("Changed!Completed+++++++++++++++++++++++++++++++++")
+ entryChanged = True
+
+ if not (td(fields[nr][3].getStartedAt())==td(form[str(nr)+'_started'])):
+ fields[nr][3].setStartedAt(form[str(nr)+'_started'])
+
+ logging.info(repr(td(fields[nr][3].getStartedAt()))+" ---> "+ repr(td(form[str(nr)+'_started'])))
+ logging.info("Changed!Started+++++++++++++++++++++++++++++++++")
+ entryChanged = True
+
+
+ if entryChanged:
+ logging.info("Changed!+++++++++++++++++++++++++++++++++")
+ fields[nr][3].copyObjectToArchive()
+
+
+ if RESPONSE is not None:
+ RESPONSE.redirect('showTree')
+
+
+
+ def getProjectWithId(self,id):
+ fields=self.getProjectFields('xdata_05')
+ for field in fields:
+ if field[1]==id:
+ return field[0]
+
+ return None
+
+
+
+ def reindexCatalogs(self,RESPONSE=None):
+ """reindex members and project catalog"""
+
+
+ try:
+
+ self.ProjectCatalog.manage_catalogReindex(self.REQUEST,RESPONSE,self.REQUEST['URL1'])
+ logger("MPIWG Root (reindexCatalog: projects)",logging.INFO,"DONE")
+ except:
+ logger("MPIWG Root (reindexCatalog: projects)",logging.WARNING," %s %s"%sys.exc_info()[:2])
+
+ try:
+
+ self.MembersCatalog.manage_catalogReindex(self.REQUEST,RESPONSE,self.REQUEST['URL1'])
+ logger("MPIWG Root (reindexCatalog: members)",logging.INFO,"DONE")
+ except:
+ logger("MPIWG Root (reindexCatalog: members)",logging.WARNING," %s %s"%sys.exc_info()[:2])
+
+
+#
+# try:
+#
+# self.fulltextProjectsMembers.manage_catalogReindex(self.REQUEST,RESPONSE,self.REQUEST['URL1'])
+# logger("MPIWG Root (reindexCatalog: fulltextProjectsMembers)",logging.INFO,"DONE")
+# except:
+# logger("MPIWG Root (reindexCatalog: fulltextProjectsMembers)",logging.WARNING," %s %s"%sys.exc_info()[:2])
+#
+#
+#
+#
+
+
+ if RESPONSE:
+ RESPONSE.redirect('manage_main')
+
+
+
+ def getProjectsByFieldContent(self,fieldName,fieldContentsEntry, date=None):
+ """gib alle Projekte aus mit Value von field mit fieldName enthaelt ein Element der Liste fieldContents"""
+ def sort(x,y):
+ return cmp(x.WEB_title[0],y.WEB_title[0])
+
+ if type(fieldContentsEntry) is StringType:
+ fieldContentsTmp=[fieldContentsEntry]
+ else:
+ fieldContentsTmp=fieldContentsEntry
+
+ fieldContents=[]
+ for x in fieldContentsTmp:
+ fieldContents.append(" AND ".join(x.split()))
+ projects=self.ProjectCatalog({fieldName:string.join(fieldContents,' AND')})
+ #print projects
+ #ret=[x for x in projects]
+ ret=[]
+ for x in projects:
+ obj=x.getObject()
+ obj=obj.getActualVersion(date)
+ if obj and (not getattr(obj,'invisible',None)):
+ #if not (x in ret):
+ ret.append(x)
+
+ ret.sort(sort)
+ return ret
+
+
+ def getProjectFields(self,fieldName,date=None,folder=None,sort=None):
+ """getListofFieldNames"""
+ ret=[]
+
+ objects=self.ZopeFind(self.projects,obj_metatypes=['MPIWGProject'],search_sub=0)
+
+
+ for object in objects:
+ obj=object[1]
+ obj=obj.getActualVersion(date)
+ if obj and (not getattr(obj,'invisible',None)):
+ if fieldName=="WEB_title_or_short":
+
+ if len(obj.getContent('xdata_07'))<3: # hack weil z.Z. manchmal noch ein Trennzeichen ; oder , im Feld statt leer
+ fieldNameTmp="WEB_title"
+ else:
+ fieldNameTmp="xdata_07"
+ else:
+ fieldNameTmp=fieldName
+
+ ret.append((obj,obj.getContent(fieldNameTmp)))
+
+
+ if sort=="int":
+ ret.sort(sortI)
+ elif sort=="stopWords":
+
+ ret.sort(sortStopWords(self))
+
+ else:
+ ret.sort(sortF)
+
+ return ret
+
+ def showNewProjects(self):
+ projects=[]
+ for objs in self.getProjectFields('WEB_title_or_short'): # Get all Projets
+ if objs[0].xdata_05 and (objs[0].xdata_05[0] == ""):
+
+ projects.append(objs)
+
+ return projects
+
+ def generateUrlProject(self,url,project=None):
+ """erzeuge aus absoluter url, relative des Projektes"""
+ if project:
+ splitted=url.split("/")
+ length=len(splitted)
+ short=splitted[length-2:length]
+
+ base=self.REQUEST['URL3']+"/"+"/".join(short)
+
+ else:
+ findPart=url.find("/projects/")
+ base=self.REQUEST['URL1']+"/"+url[findPart:]
+
+
+ return base
+
+
+ def versionHeaderEN(self):
+ """version header text"""
+
+ date= self.REQUEST.get('date',None)
+ if date:
+ txt="""This pages shows the project which existed at %s
"""%str(date)
+ return txt
+ return ""
+
+ def versionHeaderDE(self):
+ """version header text"""
+ date= self.REQUEST.get('date',None)
+ if date:
+ txt="""Auf dieser Seite finden Sie die Projekte mit Stand vom %s
"""%str(date)
+ return ""
+
+
+