Diff for /MPIWGWeb/MPIWGProjects.py between versions 1.47.2.84 and 1.47.2.119

version 1.47.2.84, 2008/06/24 11:16:26 version 1.47.2.119, 2010/09/14 06:46:33
Line 1 Line 1
 """This contains the class MPIWG Projects  """This contains the class MPIWG Projects
 for organizing and maintaining the different project pages  for organizing and maintaining the different project pages
   
   $author dwinter   - last change  26.06.2008
   
 """  """
 from Products.PageTemplates.PageTemplateFile import PageTemplateFile  from Products.PageTemplates.PageTemplateFile import PageTemplateFile
 from Products.PageTemplates.PageTemplate import PageTemplate  
 from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate  from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
 from Products.ZSQLExtend.ZSQLExtend import ZSQLExtendFolder  
 from Products.ZCatalog.CatalogPathAwareness import CatalogAware  from Products.ZCatalog.CatalogPathAwareness import CatalogAware
   from Products.MPIWGBibliography.BibliographyManager import BibliographyManager
 from OFS.Image import Image  from OFS.Image import Image
 from Globals import package_home  from Globals import package_home
 import urllib  import urllib
 import MPIWGStaff  
 import string  
 import re  import re
 import os  import os
   import email
 from types import *  from types import *
 import logging  import logging
 import xmlhelper # Methoden zur Verwaltung der projekt xml  import xmlhelper # Methoden zur Verwaltung der projekt xml
 from OFS.SimpleItem import SimpleItem  from OFS.SimpleItem import SimpleItem
 from OFS.Folder import Folder  from OFS.Folder import Folder
 from Products.ZSQLMethods.SQL import SQLConnectionIDs  from OFS.Image import Image
 from AccessControl import ClassSecurityInfo  from AccessControl import ClassSecurityInfo
   from AccessControl import getSecurityManager
 from bibliography import *  from bibliography import *
 import time  import time
 import xml.dom.minidom  from OFS.Cache import Cacheable
   import xmlrpclib
   #import xml.dom.minidom
 import sys  import sys
 from Ft.Xml.XPath import Evaluate  #from Ft.Xml.XPath import Evaluate
 from Ft.Xml.XPath.Context import Context  #from Ft.Xml.XPath.Context import Context
 from Ft.Xml.Domlette import NonvalidatingReader,PrettyPrint, Print  #from Ft.Xml.Domlette import NonvalidatingReader,PrettyPrint, Print
 from Ft.Xml import EMPTY_NAMESPACE  #from Ft.Xml import EMPTY_NAMESPACE
 import copy  #import copy
 import updatePersonalWWW  #import updatePersonalWWW
 import MPIWGStaff  
   #import MPIWGStaff
   
 from MPIWGHelper import *  from MPIWGHelper import *
   
Line 39  import MPIWGRoot Line 43  import MPIWGRoot
 import MPIWGLink  import MPIWGLink
 import MPIWGTemplate  import MPIWGTemplate
   
   # die folgenden Klassen sind jetzt in einzelne Files ausgelagert aus Kompatibilitaetsgruenden, bleiben die Klassen hier noch drin.
   # Sonst funktionieren die alten Webseiten nicht mehr.
   
 class MPIWGRoot(MPIWGRoot.MPIWGRoot):  class MPIWGRoot(MPIWGRoot.MPIWGRoot):
     """depricated"""      """depricated"""
           
Line 48  class MPIWGLink(MPIWGLink.MPIWGLink): Line 55  class MPIWGLink(MPIWGLink.MPIWGLink):
 class MPIWGTemplate(MPIWGTemplate.MPIWGTemplate):  class MPIWGTemplate(MPIWGTemplate.MPIWGTemplate):
     """depricated"""      """depricated"""
           
 class MPIWGProject_publication(SimpleItem):  class MPIWGProject_publication(Folder):
     """publications object fuer project"""      """publications object fuer project"""
   
     meta_type="MPIWGProject_publication"      meta_type="MPIWGProject_publication"
       def redirect(self,RESPONSE,url):
           """mache ein redirect mit einem angehaengten time stamp um ein reload zu erzwingen"""
           
           timeStamp=time.time()
           
           if url.find("?")>-1: #giebt es schon parameter
               addStr="&time=%s"
           else:
               addStr="?time=%s"
               
           RESPONSE.setHeader('Last-Modified',email.Utils.formatdate().split("-")[0]+'GMT')
           logging.debug(email.Utils.formatdate()+' GMT')
           RESPONSE.redirect(url+addStr%timeStamp)
   
       def hasLinkToBookPage(self):
           """teste ob eingebener link zu einer MPIWG Book page geht"""
           
           if (getattr(self,'link','')==''):
               return False #es gibt keinen link
           
           server = xmlrpclib.ServerProxy(self.link)
           
           try:
               server.getImageUrls()
               return True
           except:
               return False
   
     def editPublication(self,text=None,RESPONSE=None):      
       def getImageUrls(self):
           """get the image urls"""
           
           if (getattr(self,'link','')==''):
               return False #es gibt keinen link
           
           server = xmlrpclib.ServerProxy(self.link)
           
           try:
               urls = server.getImageUrls()
               ret=[]
               for url in urls:
                   url = os.path.join(self.link,url)
                   ret.append(url)
              
           except:
               return []
           
           return ret
           
       def editPublication(self,text=None,image1=None,image2=None,description=None,link=None,RESPONSE=None):
         """edit a publication"""          """edit a publication"""
   
         if (not text):          if (not text) and (not description):
             pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','edit_publicationForm.zpt')).__of__(self)              pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','edit_publicationForm.zpt')).__of__(self)
             return pt()              return pt()
   
                 
           if text:
         self.text=text[0:]          self.text=text[0:]
   
           if description:
               self.description=description
           
           if link:
               self.link=link[0:]
           
           if image1:
               if hasattr(self,'publicationImage1'):
                   self.publicationImage1.manage_upload(image1)
               else:
                   nO = Image('publicationImage1','',image1)
                   self._setObject('publicationImage1',nO)
                   
           if image2:
               if hasattr(self,'publicationImage2'):
                   self.publicationImage2.manage_upload(image2)
               else:
                   nO = Image('publicationImage2','',image2)
                   self._setObject('publicationImage2',nO)
                      
   
           self.ZCacheable_invalidate()
           if RESPONSE:
               self.redirect(RESPONSE,"../managePublications")
   
   class MPIWGProject_relatedProject(Folder):
       """publications object fuer project"""
   
       meta_type="MPIWGProject_relatedProject"
       def redirect(self,RESPONSE,url):
           """mache ein redirect mit einem angehaengten time stamp um ein reload zu erzwingen"""
           
           timeStamp=time.time()
           
           if url.find("?")>-1: #giebt es schon parameter
               addStr="&time=%s"
           else:
               addStr="?time=%s"
               
           RESPONSE.setHeader('Last-Modified',email.Utils.formatdate().split("-")[0]+'GMT')
           logging.debug(email.Utils.formatdate()+' GMT')
           RESPONSE.redirect(url+addStr%timeStamp)
   
           
       def editRelatedProject(self,link=None,RESPONSE=None):
           """edit a publication"""
   
           if (not link):
               pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','edit_relatedProjectForm.zpt')).__of__(self)
               return pt()
   
          
          
         
           
           # hole die id des projektes
           splitted=link.split("/")
           
           #teste ob es das project gibt
           if len(splitted)<1:
               self.redirect(RESPONSE,'errorRelatedProjects?link='+link)
           
           objid=splitted[-1]
           object = getattr(self.projects,objid,None)
           
           if object==None:
               self.redirect(RESPONSE,'errorRelatedProjects?link='+link)
           
         
   
           
          
           self.orginallink=link[0:]
           self.objid=objid[0:]
       
           self.projectWEB_title=object.getContent('WEB_title')[0:]
          
           self.enabled=True;
           self.ZCacheable_invalidate()
          
         if RESPONSE:          if RESPONSE:
             RESPONSE.redirect("../managePublications")              self.redirect(RESPONSE,"../manageRelatedProjects")
                           
 class MPIWGProject_image(Image):  class MPIWGProject_image(Image):
     """Images for Projects"""      """Images for Projects"""
Line 90  class MPIWGProject_image(Image): Line 226  class MPIWGProject_image(Image):
             self.caption=caption[0:]              self.caption=caption[0:]
   
         if RESPONSE:          if RESPONSE:
             RESPONSE.redirect("../manageImages")              self.redirect(RESPONSE,"../manageImages")
   
 class MPIWGProject(CatalogAware,Folder):  class MPIWGProject(CatalogAware,Folder,Cacheable):
     """Class for Projects"""      """Class for Projects"""
   
       def _p_resolveConflict(self, oldState, savedState, newState):
           return newState
   
     security=ClassSecurityInfo()      security=ClassSecurityInfo()
     meta_type='MPIWGProject'      meta_type='MPIWGProject'
     default_catalog='ProjectCatalog'      default_catalog='ProjectCatalog'
       def redirect(self,RESPONSE,url):
           """mache ein redirect mit einem angehaengten time stamp um ein reload zu erzwingen"""
           
           timeStamp=time.time()
           
           if url.find("?")>-1: #giebt es schon parameter
               addStr="&time=%s"
           else:
               addStr="?time=%s"
               
           RESPONSE.setHeader('Last-Modified',email.Utils.formatdate().split("-")[0]+'GMT')
           logging.debug(email.Utils.formatdate()+' GMT')
           RESPONSE.redirect(url+addStr%timeStamp)
   
     def decode(self,str):      def decode(self,str):
         """return unicode object"""          """return unicode object"""
Line 127  class MPIWGProject(CatalogAware,Folder): Line 278  class MPIWGProject(CatalogAware,Folder):
             pubSplit=pubSplit.replace("</p>","")              pubSplit=pubSplit.replace("</p>","")
             self.addPublication(pubSplit)              self.addPublication(pubSplit)
   
           setattr(self,"WEB_related_pub_copied",True);
           
         if RESPONSE:          if RESPONSE:
             RESPONSE.redirect('managePublications')                  
               self.redirect(RESPONSE,'managePublications')
           
       def hasRelatedPublicationsOldVersion(self):
           """teste ob es related publications gibt"""
           
           ret = True;
           if (self.getContent('WEB_related_pub')==''):
               ret=False;  #nichts im alten feld
           logging.debug("webrel:"+repr(ret))
           if (getattr(self,'WEB_related_pub_copied',False)):
               ret=False; # alte daten sind schon kopiert worden
           
           logging.debug("webrel_copied:"+repr(ret))
           publications=self.ZopeFind(self,obj_metatypes=['MPIWGProject_publication']);
           
           if(len(publications)>0):
               ret=False; # es gibt publicationen in der neuen liste
         
           
           logging.debug("len(publ)"+repr(ret))
           
           return ret;
       
       def hasRelatedDigitalSources(self):
           """test ob es digital sources gibt"""
           
           
           ret = (self.getContent('xdata_11')=='' and self.getContent('xdata_13')=='')
               
         
         
           return not ret;
               
           
                   
           
     def copyImageToMargin(self,RESPONSE=None):        def copyImageToMargin(self,RESPONSE=None):  
Line 197  class MPIWGProject(CatalogAware,Folder): Line 384  class MPIWGProject(CatalogAware,Folder):
             obj.update_data(data)              obj.update_data(data)
                   
         if RESPONSE:          if RESPONSE:
             RESPONSE.redirect('manageImages')          
               self.redirect(RESPONSE,'manageImages')
                           
     def manageImages(self,imageName=None,op=None):      def manageImages(self,imageName=None,op=None):
         """managage images"""          """managage images"""
Line 255  class MPIWGProject(CatalogAware,Folder): Line 443  class MPIWGProject(CatalogAware,Folder):
         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','MPIWGProject_managePublicationsForm.zpt')).__of__(self)          pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','MPIWGProject_managePublicationsForm.zpt')).__of__(self)
         return pt()          return pt()
   
       def manageRelatedProjects(self,pubName=None,op=None):
           """managage relatedProjectd"""
   
   
           if pubName and op:
               if op=='up':
                   relatedProjects=self.getRelatedProjects()
                   for project in relatedProjects:
                       if project[0]==pubName:
                           nr=relatedProjects.index(project)
                           if not nr==0:
                               relatedProjects[nr-1][1].place+=1
                               relatedProjects[nr][1].place-=1
                           pass
               elif op=='down':
                   relatedProjects=self.getRelatedProjects()
                   for project in relatedProjects:
                       if project[0]==pubName:
                           nr=relatedProjects.index(project)
                           if not (nr==len(relatedProjects)-1):
                               relatedProjects[nr+1][1].place-=1
                               relatedProjects[nr][1].place+=1
                           pass
   
   
           pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','MPIWGProject_manageRelatedProjectsForm.zpt')).__of__(self)
           return pt()
       
       
       def hasExtendedPublicationList(self):
           """test if extended publication list exists"""
           if not hasattr(self,"publicationList"):
               return False
           else:
               return True
           
       def createExtendedPublicationList(self,RESPONSE=None):
           """erzeuge erweiterte publications liste"""
           pl = BibliographyManager("publicationList","","institutsbiblio",self.connection_id)
           self._setObject("publicationList", pl)
           
       
           zt=ZopePageTemplate('index.html')
           pl._setObject('index.html',zt)
           default_content_fn = os.path.join(package_home(globals()),
                                                 'zpt/showExtendedProjectBibliography.zpt')
           text = open(default_content_fn).read()
           zt.pt_edit(text, 'text/html')
   
       
           if RESPONSE:
               self.redirect(RESPONSE,"managePublications")
   
               
     def getPublications(self):      def getPublications(self):
         """get all Publications"""          """get all Publications"""
         def sort_images(x,y):          def sort_images(x,y):
Line 265  class MPIWGProject(CatalogAware,Folder): Line 507  class MPIWGProject(CatalogAware,Folder):
         publications.sort(sort_images)          publications.sort(sort_images)
         return publications          return publications
   
       def getRelatedProjects(self):
           """get all Publications"""
           def sort_images(x,y):
               return cmp(getattr(x[1],'place',0),getattr(y[1],'place',0))
   
           publications=self.ZopeFind(self,obj_metatypes=['MPIWGProject_relatedProject'])
           
           publications.sort(sort_images)
           return publications
   
     def addPublication(self,text,RESPONSE=None):      def addPublication(self,text,RESPONSE=None):
         """add an MPIWG_Publication"""          """add an MPIWG_Publication"""
   
Line 278  class MPIWGProject(CatalogAware,Folder): Line 530  class MPIWGProject(CatalogAware,Folder):
         obj.enabled=True;          obj.enabled=True;
         obj.place=self.getLastPublicationNumber()+1          obj.place=self.getLastPublicationNumber()+1
         obj.id=name          obj.id=name
           self.ZCacheable_invalidate()
           if RESPONSE is not None:
           
               self.redirect(RESPONSE,'managePublications')
   
       def errorRelatedProjects(self,link):
           """error creating a related project"""
           pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','edit_project_error_relatedProject.zpt')).__of__(self)
           return pt(link=link)
   
       def addRelatedProject(self,link,RESPONSE=None):
           """add an MPIWG_Publication"""
   
           name="RelatedProject"+str(self.getLastRelatedProjectNumber()+1)
           
           # hole die id des projektes
           splitted=link.split("/")
           
           #teste ob es das project gibt
           if len(splitted)<1:
               self.redirect(RESPONSE,'errorRelatedProjects?link='+link)
           
           objid=splitted[-1]
           object = getattr(self.projects,objid,None)
                   
           if object==None:
               self.redirect(RESPONSE,'errorRelatedProjects?link='+link)
               return
           
           newPublication=MPIWGProject_relatedProject(name)
   
           self._setObject(name,newPublication)
           obj=getattr(self,name)
           obj.orginallink=link[0:]
           obj.objid=objid[0:]
           logging.debug("add relobj:objid"+repr(obj.objid))
           obj.projectWEB_title=object.getContent('WEB_title')[0:]
           logging.debug("add relobj:webtitle"+repr(obj.projectWEB_title))
           obj.enabled=True;
           obj.place=self.getLastRelatedProjectNumber()+1
           obj.id=name
           self.ZCacheable_invalidate()
         if RESPONSE is not None:          if RESPONSE is not None:
             RESPONSE.redirect('managePublications')          
               self.redirect(RESPONSE,'manageRelatedProjects')
   
   
     
     def getLastPublicationNumber(self):      def getLastPublicationNumber(self):
Line 291  class MPIWGProject(CatalogAware,Folder): Line 586  class MPIWGProject(CatalogAware,Folder):
         else:          else:
             return getattr(publications[-1][1],'place',0)              return getattr(publications[-1][1],'place',0)
                   
       def getLastRelatedProjectNumber(self):
           publications=self.getRelatedProjects()
           
           if not publications:
               return 0
           else:
               return getattr(publications[-1][1],'place',0)
           
     def deletePublication(self,id,RESPONSE=None):      def deletePublication(self,id,RESPONSE=None):
             """delete Publication id"""              """delete Publication id"""
             self.manage_delObjects([id])              self.manage_delObjects([id])
               self.ZCacheable_invalidate()
               if RESPONSE:
           
                   self.redirect(RESPONSE,'managePublications')
                 
       def deleteRelatedProject(self,id,RESPONSE=None):
               """delete Publication id"""
               self.manage_delObjects([id])
               self.ZCacheable_invalidate()
             if RESPONSE:              if RESPONSE:
                 RESPONSE.redirect('managePublications')          
                   self.redirect(RESPONSE,'manageRelatedProjects')
                                   
     def getImages(self):      def getImages(self):
         """get all Images"""          """get all Images"""
Line 327  class MPIWGProject(CatalogAware,Folder): Line 640  class MPIWGProject(CatalogAware,Folder):
                   
     def deleteImage(self,id,RESPONSE=None):      def deleteImage(self,id,RESPONSE=None):
         """delete Image id"""          """delete Image id"""
           try:
         self.manage_delObjects([id])          self.manage_delObjects([id])
           except:
                   logging.error("ERROR MPIWG: %s %s"%sys.exc_info()[0:2])
         if RESPONSE:          if RESPONSE:
             RESPONSE.redirect('manageImages')              self.redirect(RESPONSE,'manageImages')
   
   
     
     def hasChildren(self,date=None,onlyActive=1,onlyArchived=1):      def hasChildren(self,date=None,onlyActive=1,onlyArchived=1):
         """check if project has children"""          """check if project has children"""
           
         ct=self.getContexts(childs=self.getContent('xdata_05'),          ct=self.getContexts(childs=self.getContent('xdata_05'),
                                  depth=1,date=date,onlyActive=onlyActive)                                   depth=1,date=date,onlyActive=onlyActive)
                   
Line 362  class MPIWGProject(CatalogAware,Folder): Line 680  class MPIWGProject(CatalogAware,Folder):
         obj.id=filename          obj.id=filename
   
         if RESPONSE is not None:          if RESPONSE is not None:
             RESPONSE.redirect('manageImages')              
               self.redirect(RESPONSE,'manageImages')
   
     def PrincipiaSearchSource(self):      def PrincipiaSearchSource(self):
         """Return cataloguable key for ourselves."""          """Return cataloguable key for ourselves."""
Line 433  class MPIWGProject(CatalogAware,Folder): Line 752  class MPIWGProject(CatalogAware,Folder):
                   
     def copyObjectToArchive(self):      def copyObjectToArchive(self):
         """kopiere aktuelles objekt ins archiv"""          """kopiere aktuelles objekt ins archiv"""
           logging.info("copytoarchive 1")
         cb=self.aq_parent.manage_copyObjects(self.getId())          cb=self.aq_parent.manage_copyObjects(self.getId())
           logging.info("copytoarchive 2")
         self.manage_pasteObjects(cb)          self.manage_pasteObjects(cb)
           logging.info("copytoarchive 3")
         actualTime=time.localtime()          actualTime=time.localtime()
                   
         self.manage_renameObject(self.getId(),self.getId()+"_"+time.strftime("%Y%m%d%H%M%S",actualTime))          self.manage_renameObject(self.getId(),self.getId()+"_"+time.strftime("%Y%m%d%H%M%S",actualTime))
           logging.info("copytoarchive 4")
         obj=getattr(self,self.getId()+"_"+time.strftime("%Y%m%d%H%M%S",actualTime))          obj=getattr(self,self.getId()+"_"+time.strftime("%Y%m%d%H%M%S",actualTime))
         obj.setArchiveTime(time.strftime("%Y%m%d%H%M%S",actualTime))          obj.setArchiveTime(time.strftime("%Y%m%d%H%M%S",actualTime))
           logging.info("copytoarchive 5")
         ids=[x[0] for x in self.ZopeFind(obj,obj_metatypes=['MPIWGProject'])]          ids=[x[0] for x in self.ZopeFind(obj,obj_metatypes=['MPIWGProject'])]
           logging.info("copytoarchive 6")
         obj.manage_delObjects(ids)          obj.manage_delObjects(ids)
           logging.info("copytoarchive 7")
                   
     def setArchiveTime(self,time):      def setArchiveTime(self,time):
         """set Archive Time"""          """set Archive Time"""
         self.archiveTime=time[0:]          self.archiveTime=time[0:]
                   
       def delArchiveTime(self):
           """delete archive time"""
           del self.archiveTime
   
     def versionManageForm(self):      def versionManageForm(self):
         """version Manage form:currently only set to invisible"""          """version Manage form:currently only set to invisible"""
         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','MPIWGProject_versionManageForm.zpt')).__of__(self)          pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','MPIWGProject_versionManageForm.zpt')).__of__(self)
Line 457  class MPIWGProject(CatalogAware,Folder): Line 787  class MPIWGProject(CatalogAware,Folder):
         self.invisible=invisible          self.invisible=invisible
   
         if RESPONSE is not None:          if RESPONSE is not None:
             RESPONSE.redirect('manage_main')              
               self.redirect(RESPONSE,'manage_main')
   
         
     def crossLinker(self):      def crossLinker(self):
Line 475  class MPIWGProject(CatalogAware,Folder): Line 806  class MPIWGProject(CatalogAware,Folder):
                     new.append(split)                      new.append(split)
             except:              except:
                 new.append(split)                  new.append(split)
         return string.join(new)          return " ".join(new)
                           
                           
   
Line 493  class MPIWGProject(CatalogAware,Folder): Line 824  class MPIWGProject(CatalogAware,Folder):
         self._setObject(id,newObj)          self._setObject(id,newObj)
         #self.manage_addPageTemplate(id,title)          #self.manage_addPageTemplate(id,title)
         if RESPONSE is not None:          if RESPONSE is not None:
             RESPONSE.redirect('manage_main')              self.redirect(RESPONSE,'manage_main')
                           
     def __init__(self, id, argv=None):      def __init__(self, id, argv=None):
         """initiere classe"""          """initiere classe"""
Line 531  class MPIWGProject(CatalogAware,Folder): Line 862  class MPIWGProject(CatalogAware,Folder):
     def isArchivedProject(self):      def isArchivedProject(self):
         """check if the project is archived"""          """check if the project is archived"""
                   
         completed=getattr(self,'completedAt',0)          completed=self.getCompletedAt()
                 
        #completed leer          #completed leer 
         if completed=="" :          if completed=="" :
Line 549  class MPIWGProject(CatalogAware,Folder): Line 880  class MPIWGProject(CatalogAware,Folder):
                   
     def setCompletedAt(self,date):      def setCompletedAt(self,date):
         """set the date of completion, date should be in the form DD.MM.YYYY or MM.YYYY or YYYY"""          """set the date of completion, date should be in the form DD.MM.YYYY or MM.YYYY or YYYY"""
         logging.info("DATE:"+repr(date))          #logging.info("DATE:"+repr(date))
         transformedDate=self.transformDate(date);          transformedDate=self.transformDate(date);
         logging.info("transformed"+repr(transformedDate))          #logging.info("transformed"+repr(transformedDate))
         if transformedDate is not None:          if transformedDate is not None:
             setattr(self,"completedAt",transformedDate)              setattr(self,"completedAt",transformedDate)
             return True;              return True;
         else:          else:
             return False;              return False;
           
       def setStartedAt(self,date):
           """set the date of start, 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,"startedAt",transformedDate)
               return True;
           else:
               return False;
   
     def getCompletedAt(self):      def getCompletedAt(self):
         """gibt das transformierte Datum zurŸck"""          """gibt das transformierte Datum zurueck, an dem das Projekt beendet wurde."""
         date=getattr(self,'completedAt','')          date=getattr(self,'completedAt','')
         
           if date:
               return self.reTransformDate(date);
           else:
               return ""
               # test ob parent abgeschlossen ist
               try:          #TODO: ersetzte try except durch vernuenftige abfrage  
                   ct=self.getContexts(parents=self.getContent('xdata_05'),depth=1)
                   if (len(ct)>0): #is there are parent
                           return ct[0][0].getCompletedAt()
                   return '';
               except:
                   return '';
           
       def getStartedAt(self):
           """gibt das transformierte Datum zurueck, an dem Projekt begonnen wurde."""
           date=getattr(self,'startedAt','')
         if date:          if date:
             return self.reTransformDate(date);              return self.reTransformDate(date);
         else:          else:
Line 571  class MPIWGProject(CatalogAware,Folder): Line 930  class MPIWGProject(CatalogAware,Folder):
         year=int(date/10000)          year=int(date/10000)
         month=int((date-year*10000)/100)          month=int((date-year*10000)/100)
         day=int((date-year*10000-month*100))          day=int((date-year*10000-month*100))
           if (day==0) and (month==0):
               return """%s"""%year;
           if day==0 :
               return """%s.%s"""%(month,year);
           
         return """%s.%s.%s"""%(day,month,year);          return """%s.%s.%s"""%(day,month,year);
                   
                   
     def transformDate(self,date):      def transformDate(self,date):
         """transformiert ein Datum von DD.MM.YYYY, MM.YYYY,YYYY nach  YYYYMMDD, alle nicht angebebenn Werte          """transformiert ein Datum von DD.MM.YYYY, MM.YYYY,YYYY nach  YYYYMMDD, alle nicht angebenen Werte
         werden auf 0 gesetzt, es wird null zurŸckgegeben falls das Datum ungueltig ist"""           werden auf 0 gesetzt, es wird null zurueckgegeben falls das Datum ungueltig ist""" 
           
         if (date=="" ) :  
             return "";  
                   
         if (date==None):          if (date==None):
             return None;              return None;
                   
             
           if (date.lstrip().rstrip()=="" ) :
               return "";
           
         splitted=date.split(".")          splitted=date.split(".")
         length=len(splitted)          length=len(splitted)
         year=0          year=0
Line 656  class MPIWGProject(CatalogAware,Folder): Line 1021  class MPIWGProject(CatalogAware,Folder):
         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','no_project')).__of__(self)          pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','no_project')).__of__(self)
         return pt()          return pt()
             
     def getGetNeighbourhood(self,wordStr, length=100,tagging=True):  
         """finde umgebung um die worte in wordStr, zurueckgegeben wird eine Array mit den Umgebungen von Fundstellen der Worte  
         alle Tags werden entfernt, die Fundstellen werden mit <span class="found">XX</span> getaggt, die Umgebungen werden   
         case insensitive gesucht  
         @param wordStr: string mit Worten getrennt durch Leerzeichen, Phrasen sind mit " gekennzeichnet  
                         "eine phrase", "*"  bezeichnet wildcards und wird ignoriert"  
         @param length: optional, default wert 100, 2*length ist die groesse der Umgebung  
         @param tagging: optional default wert true, kein span tag wird erzweugt falls tag=false  
         """  
                   
         ret=[] # nimmt das Array auf, dass spaeter zurueckgegeben wird      def harvest_page(self,context=None):
         ranges=[] #Array mit tupeln x,y wobei x die Position des Anfang und y des Endes der i-ten Umgebung angiebt          """seite fuer harvesting fuer die Projektsuche"""
           if not context:
               context=self
                   
         def isInRanges(nr,length):          if self.isActiveProject() and self.isActual():
             """test ob eine gegeben Position nr schon irgendwo in einer Umgebung ist, gibt den Index des ersten Wertes aus ranges zurueck,                ext=getattr(self,"harvest_main",None)
             -1, wenn kein Treffer               if ext:
                    return getattr(self,ext.getId())()
                           
             @param nr: Position die geprueft werden soll               pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','harvest_main')).__of__(context)    
             @param length: Laenge des Wortes das geprueft werden soll  
             """  
             for x in ranges:  
                 if (x[0]<=nr) and (nr < (x[1]-length)):  
                     return ranges.index(x)  
             return -1  
                   
         # deal with phrases, in Phrasen werden die Leerzeichen durch "_" ersetzt.  
         def rep_empty(str):  
             x= re.sub(" ","_",str.group(0))  
             return re.sub("\"","",x)  
               
         wordStr=re.sub("\".*?\"", rep_empty,wordStr)#ersetze leerzeichen in " " durch "_" und loesche "  
           
         #deal with wildcards, for our purposes it is enough to delete the wildcard   
         wordStr=wordStr.replace("*","")  
           
         words=wordStr.split(" ")  
         #if not words is ListType:  
         #   words=[words]  
                           
         txt=self.harvest_page()  
         if not txt:  
             return ret  
         txt=re.sub("<.*?>", "", txt) # loesche alle Tags  
         for word in words:  
             word=re.sub("_"," ",word) # ersetze zurueck "_" durch " "  
             pos=0  
                           
             n=txt.lower().count(word.lower()) # wie oft tritt das Wort auf               return pt()
         
       def index_html(self,request=True,context=None):
           """show homepage"""
   
             for i in range(n):          bound_names={}
                 pos=txt.lower().find(word.lower(),pos)  
   
                 if pos > 0:          if not context:
                     x=max(0,pos-length)              context=self
                     y=min(len(txt),pos+length)          if request:
               if self.REQUEST.has_key('date') and self.REQUEST.SESSION.get('MPI_redirected',None)==None:
                   self.REQUEST.SESSION['MPI_redirected']=1
                   self.REQUEST.RESPONSE.redirect(self.checkDate(self.REQUEST['date'])+"?date="+self.REQUEST['date'])
               else:
                   self.REQUEST.SESSION['MPI_redirected']=None
                                       
           #ext=self.ZopeFind(self.aq_parent,obj_ids=["project_main"])
                                           
                     #is word already in one of the results  
                     nr=isInRanges(pos,len(word))  
                     if nr >=0:# word ist in einer schon gefunden Umgebung, dann vergroessere diese  
                         x=min(ranges[nr][0],x)  
                         y=max(ranges[nr][1],y)  
                               
                     str=txt[x:y]          request2=getattr(self,'REQUEST',None)
                                   
                     if nr >=0: # word ist in einer schon gefunden Umgebung          if request2 is not None:
                         ranges[nr]=(x,y) # neue Position der Umgebung              response = request2.response
               if not response.headers.has_key('content-type'):
                   response.setHeader('content-type', 'text/html')
   
                         ret[nr]=str # neue Umgebung          security = getSecurityManager()
                     else: # andernfalls neue Umgebung hinzufuegen          bound_names['user'] = security.getUser()
                         ranges.append((x,y))  
   
                         ret.append(str)          # Retrieve the value from the cache.
           keyset = None
           if self.ZCacheable_isCachingEnabled():
                                           
                     pos=pos+len(word)              # Prepare a cache key.
                 else:              keyset = {'here': self, 'params':request2['QUERY_STRING']}
                     break;  
                                   
         # now highlight everything                      result = self.ZCacheable_get(keywords=keyset)
         if tagging:  
             for x in range(len(ret)):  
                 for word in words:  
                     repl=re.compile(word,re.IGNORECASE)  
                     ret[x]=repl.sub(""" <span class="found">%s</span>"""%word.upper(),ret[x])  
   
         return ret              if result is not None:
                   # Got a cached value.
                   return result
                                                                   
     def harvest_page(self,context=None):          pt = getTemplate(self, "project_main")
         """seite fuer harvesting fuer die Projektsuche"""           # Execute the template in a new security context.
         if not context:          security.addContext(self)
             context=self  
                           
         if self.isActiveProject() and self.isActual():          try:
              ext=getattr(self,"harvest_main",None)              #logging.debug("index_html pt=%s"%repr(pt))
              if ext:              result = pt.pt_render(extra_context=bound_names)
                  return getattr(self,ext.getId())()              #logging.debug("index_html result=%s"%repr(result))
               if keyset is not None:
                   # Store the result in the cache.
                   self.ZCacheable_set(result, keywords=keyset)
   
              pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','harvest_main')).__of__(context)                  return result
           finally:
               security.removeContext(self)
   
   
              return pt()  
                     
     def index_html(self,request=True,context=None):      def index_html_old(self,request=True,context=None):
         """show homepage"""          """show homepage"""
         if not context:          if not context:
             context=self              context=self
Line 770  class MPIWGProject(CatalogAware,Folder): Line 1107  class MPIWGProject(CatalogAware,Folder):
                 self.REQUEST.SESSION['MPI_redirected']=None                  self.REQUEST.SESSION['MPI_redirected']=None
                   
         #ext=self.ZopeFind(self.aq_parent,obj_ids=["project_main"])          #ext=self.ZopeFind(self.aq_parent,obj_ids=["project_main"])
         
         ext=getattr(self,"project_main",None)          ext=getattr(self,"project_main",None)
         if ext:          if ext:
             return getattr(self,ext.getId())()              return getattr(self,ext.getId())()
Line 798  class MPIWGProject(CatalogAware,Folder): Line 1136  class MPIWGProject(CatalogAware,Folder):
   
     def getContent(self,field,filter=None):      def getContent(self,field,filter=None):
         """Inhalt des Feldes"""          """Inhalt des Feldes"""
           #logging.debug("getContent field=%s filter=%s"%(field,filter))
           
           if field=="short_title":
                   text = self.getContent("xdata_07")
                   if text=="":
                           text = self.getContent("WEB_title")
                   return text
                   
         text=u''          text=u''
   
Line 818  class MPIWGProject(CatalogAware,Folder): Line 1163  class MPIWGProject(CatalogAware,Folder):
         except:          except:
             pass              pass
                   
         if text=='':          if text=='': ## wozu die folgenden Zeilen??
             text2=text              text2=text
         else:          else:
             text2=re.sub(r';([^\s])','; \g<1>',text)              text2=re.sub(r';([^\s])','; \g<1>',text)
   
           if field=="WEB_project_description":##Jedenfalls darf letzteres nicht gemacht werden, falls normaler text
               text2=text
               
         #teste ob ergebnis leer und header dann nehme title          #teste ob ergebnis leer und header dann nehme title
                   
         if (text2=='') and (field=='WEB_project_header'):          if (text2=='') and (field=='WEB_project_header'):
Line 873  class MPIWGProject(CatalogAware,Folder): Line 1221  class MPIWGProject(CatalogAware,Folder):
         if (text5=="<br>") or (text5=="<br/>"):          if (text5=="<br>") or (text5=="<br/>"):
             text5=""              text5=""
   
         logging.debug("getcontent: field=%s filter=%s -> %s"%(field,filter,repr(text5)))          #logging.debug("getcontent: field=%s filter=%s -> %s"%(field,filter,repr(text5)))
         #return unicodify(text5)          return unicodify(text5)
         return utf8ify(text5) # return as utf-8 byte string          #return utf8ify(text5) # return as utf-8 byte string
   
   
     def showImagesOfPage(self,imageUrl=None):      def showImagesOfPage(self,imageUrl=None):
Line 898  class MPIWGProject(CatalogAware,Folder): Line 1246  class MPIWGProject(CatalogAware,Folder):
                   
     def saveEditedContent(self,kupu=None,preview=None):      def saveEditedContent(self,kupu=None,preview=None):
         """save Edited content"""          """save Edited content"""
           #logging.debug("saveEditedContent kupu=%s preview=%s"%(kupu,preview))
   
         if preview:          if preview:
             kupu=preview              kupu=preview
Line 907  class MPIWGProject(CatalogAware,Folder): Line 1256  class MPIWGProject(CatalogAware,Folder):
         newcontent= kupu[start+6:end]          newcontent= kupu[start+6:end]
                   
         if preview:          if preview:
               
             return self.preview(newcontent)              return self.preview(newcontent)
   
         self.copyObjectToArchive()          self.copyObjectToArchive()
           self.ZCacheable_invalidate()
         self.WEB_project_description=newcontent[0:]          self.WEB_project_description=newcontent[0:]
   
         self.REQUEST.RESPONSE.redirect("./index.html")          self.REQUEST.RESPONSE.redirect("./index.html")
Line 937  class MPIWGProject(CatalogAware,Folder): Line 1286  class MPIWGProject(CatalogAware,Folder):
         else:          else:
             return style                  return style    
   
       def getLabel(self):
           """returns label (or title) of this project"""
           l = self.getContent('xdata_07')
           if l:
               return l
           l = self.getContent('WEB_title')
           if l:
               return l
           return self.title
   
       def getBreadcrumbs(self):
           """return list of breadcrumbs from here to the root"""
           crumbs = []
           # skip direct parent Folder /projects/
           parent = self.aq_parent.aq_parent
           # get parents breadcrumbs
           if hasattr(parent, 'getBreadcrumbs'):
               crumbs = parent.getBreadcrumbs()
           
           # try to get acquisition URL from parent
           if hasattr(parent, 'absolute_url'):
               baseUrl = "%s/%s/"%(parent.absolute_url(), 'projects')
           else:
               baseUrl = "/en/research/projects/"
               
           # add in the internal project hierarchy
           
           ct=self.getContexts(parents=self.getContent('xdata_05'))
           # start with grandparents
           ct.reverse()
           for c in ct:
               label = shortenString(c[0].getLabel(), 13)
               crumbs.append((label, baseUrl+c[0].getId(), c[0]))            
   
           # add this project
           crumbs.append((self.getLabel(), baseUrl+self.getId(), self))
               
           return crumbs
   
       def getRootProject(self):
           """returns the root (=top level) project of the current project"""
           
           ct=self.getContexts(parents=self.getContent('xdata_05'))
           if len(ct) > 0:
               return ct[-1][0]
           else:
               return self        
   
   
     def preview(self,description):      def preview(self,description):
         """preview"""          """preview"""
           #logging.debug("preview description=%s"%description)
         tmpPro=getattr(self,"previewTemplate",None)          tmpPro=getattr(self,"previewTemplate",None)
         if not tmpPro:          if not tmpPro:
             tmpPro=MPIWGProject("previewTemplate")              tmpPro=MPIWGProject("previewTemplate")
Line 947  class MPIWGProject(CatalogAware,Folder): Line 1346  class MPIWGProject(CatalogAware,Folder):
             setattr(tmpPro,field,getattr(self,field))              setattr(tmpPro,field,getattr(self,field))
         tmpPro.WEB_project_description=description[0:]          tmpPro.WEB_project_description=description[0:]
         tmpPro.invisible=True          tmpPro.invisible=True
         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','previewFrame.zpt')).__of__(self)          pt=PageTemplateFile('zpt/previewFrame.zpt',globals()).__of__(self)
         return pt()          return pt()
   
         #return self.REQUEST.RESPONSE.redirect(self.REQUEST['URL1']+"/previewTemplate")          #return self.REQUEST.RESPONSE.redirect(self.REQUEST['URL1']+"/previewTemplate")
Line 963  class MPIWGProject(CatalogAware,Folder): Line 1362  class MPIWGProject(CatalogAware,Folder):
             <head>              <head>
             <meta http-equiv="Content-Type" content="text/html; charset=utf-8">              <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
             </head>              </head>
             <body>%s              <body>%s</body>
             </html></body>              </html>
             """%self.WEB_project_description[0]              """%self.WEB_project_description[0]
                   
         return """          return """
Line 972  class MPIWGProject(CatalogAware,Folder): Line 1371  class MPIWGProject(CatalogAware,Folder):
             <head>              <head>
             <meta http-equiv="Content-Type" content="text/html; charset=utf-8">              <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
             </head>              </head>
             <body>%s              <body>%s</body>
             </html></body>              </html>
             """%self.getContent('WEB_project_description')              """%self.getContent('WEB_project_description')
                   
                   
Line 988  class MPIWGProject(CatalogAware,Folder): Line 1387  class MPIWGProject(CatalogAware,Folder):
         #logging.info("XXXXXXXXXXXXX"+repr(self.responsibleScientistsList))          #logging.info("XXXXXXXXXXXXX"+repr(self.responsibleScientistsList))
       
                   
         keys = [x[1] for x in getattr(self,"responsibleScientistsList",[])]          keys = [unicodify(x[1]) for x in getattr(self,"responsibleScientistsList",[])]
           #logging.error("RESP. SCIEN:%s"%getattr(self,"responsibleScientistsList",[]))
           #logging.error("RESP. SCIEN:%s"%unicodify(key))
                           
         if key in keys:          if unicodify(key) in keys:
             return True              return True
         else:          else:
             return False              return False
                   
     def getPersonKeyList(self):      def getPersonKeyList(self):
         """gibt die key Lister der beteiligten Personen zurŸck"""          """gibt die key Liste der beteiligten Personen zurueck (utf8 codiert)"""
         return [x[1] for x in getattr(self,'responsibleScientistsList',[])]          #logging.error("getPersonKeyList:%s"%getattr(self,'responsibleScientistsList',[]))
           try:
               return [utf8ify(x[1]) for x in getattr(self,'responsibleScientistsList',[])]
           except:
               return[]
           
          
       def myCapitalize(self,txt):
           """kapitalisiere auch Namen mit -"""
           splitted=[x.capitalize() for x in txt.split("-")]
           return "-".join(splitted)
       
       def getNamesOrdered(self,list):
           """Sortiert die Liste nach der Reihenfolge in xdata_01"""
           
           nameList=self.getContent('xdata_01')
           if nameList.find(";")>-1: # rate Trenner ist ;
               names=nameList.split(";")  
           else:
               names=nameList.split(",")
               
           self._v_names=[]
           for name in names:
               self._v_names.append(name.rstrip().lstrip())
               
               
           def sort(x,y):
               try:
                   return cmp(self._v_names.index(x[0]),self._v_names.index(y[0]))
               except:
                   return 0
               
           list.sort(sort)
           
           return list
           
           ##nameList=nameList.replace(";",",") # falls ; als Trenner ersetze    
                 
                   
                 
Line 1007  class MPIWGProject(CatalogAware,Folder): Line 1444  class MPIWGProject(CatalogAware,Folder):
         und ordnet diese dann Mitarbeiter IDs zu falls es schone eine Liste gibt wird im Projekte gibt wird diese Upgedated.          und ordnet diese dann Mitarbeiter IDs zu falls es schone eine Liste gibt wird im Projekte gibt wird diese Upgedated.
         @param nameList          @param nameList
         """          """
         nameList=nameList.replace(";",",") # falls ; als Trenner ersetze          
           if nameList.find(";")>-1: # rate Trenner ist ;
             names=nameList.split(";")  
             
           else:
         names=nameList.split(",")          names=nameList.split(",")
                   
           ##nameList=nameList.replace(";",",") # falls ; als Trenner ersetze    
         returnNamesDict={}          returnNamesDict={}
   
                 
Line 1025  class MPIWGProject(CatalogAware,Folder): Line 1467  class MPIWGProject(CatalogAware,Folder):
                 lastname=nameSplitted[0]                  lastname=nameSplitted[0]
                                 
             #finde Mitarbeiter mit den entsprechenden Name              #finde Mitarbeiter mit den entsprechenden Name
             logging.info("Search: %s %s %s"%(name,firstname,lastname))              
               firstname=self.myCapitalize(firstname).encode('utf-8')
               lastname=self.myCapitalize(lastname).encode('utf-8')
               logging.info("Search: %s %s %s"%(name,repr(firstname),repr(lastname)))
               try:
             cataloggedNames=self.MembersCatalog(firstName=firstname,lastName=lastname)              cataloggedNames=self.MembersCatalog(firstName=firstname,lastName=lastname)
               except:
                   cataloggedNames=[]
                   logging.error("ERROR: identifyNames %s %s"%sys.exc_info()[0:2])
                           
             #Teste ob die ensprechenden Namen schon der Liste zu geordnet sind              #Teste ob die ensprechenden Namen schon der Liste zu geordnet sind
             #if not hasattr(self,'responsibleScientistsList'):              #if not hasattr(self,'responsibleScientistsList'):
Line 1039  class MPIWGProject(CatalogAware,Folder): Line 1488  class MPIWGProject(CatalogAware,Folder):
             else:              else:
                 returnNamesDict[name]=[]                  returnNamesDict[name]=[]
                 
           logging.error("id: %s"%repr(returnNamesDict))
         return returnNamesDict          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"""
                   
         self.copyObjectToArchive() # archive the object          self.copyObjectToArchive() # archive the object
           self.ZCacheable_invalidate()
   
         for x in definedFields:          for x in definedFields:
             if self.REQUEST.has_key(x):              if self.REQUEST.has_key(x):
Line 1059  class MPIWGProject(CatalogAware,Folder): Line 1509  class MPIWGProject(CatalogAware,Folder):
         if not self.setCompletedAt(completedAt):          if not self.setCompletedAt(completedAt):
             RESPONSE.redirect('./editMPIWGBasisEditor?error="dateWrong')              RESPONSE.redirect('./editMPIWGBasisEditor?error="dateWrong')
                   
           startedAt = self.REQUEST.get('startedAt')
           if not self.setStartedAt(startedAt):
               RESPONSE.redirect('./editMPIWGBasisEditor?error="dateWrong')
           
         if self.REQUEST.has_key('historicalNames'):          if self.REQUEST.has_key('historicalNames'):
             self.en.changeHistoricalNames(self.getId(),self.REQUEST['historicalNames'].split("\n"))              self.en.changeHistoricalNames(self.getId(),self.REQUEST['historicalNames'].split("\n"))
                   
Line 1082  class MPIWGProject(CatalogAware,Folder): Line 1536  class MPIWGProject(CatalogAware,Folder):
                     keys[nr]=self.REQUEST[key]                      keys[nr]=self.REQUEST[key]
                                   
                     
         for nr in names.keys():          for nr in names.keys():#schreibe keys und namen in die Liste, stelle ausserdem sicher, dass name unicode
              tmpList.append((names[nr],keys.get(nr,"")))               tmpList.append((unicodify(names[nr]),unicodify(keys.get(nr,""))))
                             
         self.responsibleScientistsList=tmpList          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','')))              return self.editMPIWGBasisEditor(identifiedNames=self.identifyNames(self.decode(self.REQUEST.get('xdata_01',''))))
                           
         else:          else:
             if RESPONSE is not None:              if RESPONSE is not None:
Line 1115  class MPIWGProject(CatalogAware,Folder): Line 1569  class MPIWGProject(CatalogAware,Folder):
             if type(disciplines) is StringType:              if type(disciplines) is StringType:
                 self.xdata_09=disciplines                  self.xdata_09=disciplines
             else:              else:
                 self.xdata_09=string.join(disciplines,";")                  self.xdata_09=";".join(disciplines)
         else:          else:
                 self.xdata_09=""                  self.xdata_09=""
         if themes:          if themes:
             if type(themes) is StringType:              if type(themes) is StringType:
                 self.xdata_10=themes                  self.xdata_10=themes
             else:              else:
                 self.xdata_10=string.join(themes,";")                  self.xdata_10=";".join(themes)
         else:          else:
             self.xdata_10=""              self.xdata_10=""
   
         if fromEdit and (RESPONSE is not None):          if fromEdit and (RESPONSE is not None):
             RESPONSE.redirect('./editMPIWGDisciplinesThemesEditor')              self.redirect(RESPONSE,'./editMPIWGDisciplinesThemesEditor')
   
         else:          else:
             if RESPONSE is not None:              if RESPONSE is not None:
Line 1159  class MPIWGProject(CatalogAware,Folder): Line 1613  class MPIWGProject(CatalogAware,Folder):
             identifiedNames=self.identifyNames(self.getContent('xdata_01'))              identifiedNames=self.identifyNames(self.getContent('xdata_01'))
            # identifiedNames=self.getFullNameEntries()             # identifiedNames=self.getFullNameEntries()
                           
           logging.error("IdentifiedNames: %s"% repr(identifiedNames))
         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(identifiedNames=identifiedNames)          return pt(identifiedNames=identifiedNames)
   

Removed from v.1.47.2.84  
changed lines
  Added in v.1.47.2.119


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>