changeset 51:d456fe185649

more work on projects. more cleanup.
author casties
date Tue, 30 Apr 2013 12:49:26 +0200
parents e30a4bd074db
children 1ed79b33200c
files MPIWGProjects.py MPIWGRoot.py MPIWGRoot_deleted_methods.py
diffstat 3 files changed, 380 insertions(+), 308 deletions(-) [+]
line wrap: on
line diff
--- 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."""
--- 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="""<h2>This pages shows the project which existed at %s</h2>"""%str(date)
-            return txt
-        return ""
-
-    def versionHeaderDE(self):
-        """version header text"""
-        date= self.REQUEST.get('date',None)
-        if date:
-            txt="""<h2>Auf dieser Seite finden Sie die Projekte mit Stand vom %s</h2>"""%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+="""</channel>
         </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"""
--- 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="""<h2>This pages shows the project which existed at %s</h2>"""%str(date)
+            return txt
+        return ""
+
+    def versionHeaderDE(self):
+        """version header text"""
+        date= self.REQUEST.get('date',None)
+        if date:
+            txt="""<h2>Auf dieser Seite finden Sie die Projekte mit Stand vom %s</h2>"""%str(date)
+        return ""
+    
+        
+