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

version 1.47.2.84, 2008/06/24 11:16:26 version 1.47.2.104, 2008/09/08 09:20:26
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
 from types import *  from types import *
Line 19  import logging Line 18  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 bibliography import *  from bibliography import *
 import time  import time
 import xml.dom.minidom  #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 39  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 51  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 editPublication(self,text=None,RESPONSE=None):      def editPublication(self,text=None,image1=None,image2=None,description=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()
   
                 
         self.text=text[0:]          self.text=text[0:]
           self.description=description
           
           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)
                      
   
         if RESPONSE:          if RESPONSE:
             RESPONSE.redirect("../managePublications")              RESPONSE.redirect("../managePublications")
Line 254  class MPIWGProject(CatalogAware,Folder): Line 273  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 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:
               RESPONSE.redirect("managePublications")
   
     def getPublications(self):      def getPublications(self):
         """get all Publications"""          """get all Publications"""
Line 327  class MPIWGProject(CatalogAware,Folder): Line 369  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')              RESPONSE.redirect('manageImages')
   
Line 475  class MPIWGProject(CatalogAware,Folder): Line 520  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 531  class MPIWGProject(CatalogAware,Folder): Line 576  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 594  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:          if date:
             return self.reTransformDate(date);              return self.reTransformDate(date);
         else:          else:
               # test ob parent abgeschlossen ist
               
               ct=self.getContexts(parents=self.getContent('xdata_05'),depth=1)
               if (len(ct)>0): #is there are parent
                   
                   return ct[0][0].getCompletedAt()
               return '';
           
       def getStartedAt(self):
           """gibt das transformierte Datum zurŸck, an dem Projekt begonnen wurde."""
           date=getattr(self,'startedAt','')
           if date:
               return self.reTransformDate(date);
           else:
             return '';              return '';
                   
     def reTransformDate(self,date):      def reTransformDate(self,date):
Line 571  class MPIWGProject(CatalogAware,Folder): Line 640  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);
                   
                   
Line 578  class MPIWGProject(CatalogAware,Folder): Line 652  class MPIWGProject(CatalogAware,Folder):
         """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 angebebenn Werte
         werden auf 0 gesetzt, es wird null zurŸckgegeben falls das Datum ungueltig ist"""           werden auf 0 gesetzt, es wird null zurŸckgegeben 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 731  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  
         ranges=[] #Array mit tupeln x,y wobei x die Position des Anfang und y des Endes der i-ten Umgebung angiebt  
           
         def isInRanges(nr,length):  
             """test ob eine gegeben Position nr schon irgendwo in einer Umgebung ist, gibt den Index des ersten Wertes aus ranges zurueck,   
             -1, wenn kein Treffer  
               
             @param nr: Position die geprueft werden soll  
             @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  
   
             for i in range(n):  
                 pos=txt.lower().find(word.lower(),pos)  
   
                 if pos > 0:  
                     x=max(0,pos-length)  
                     y=min(len(txt),pos+length)  
                     
                       
                     #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]  
                   
                     if nr >=0: # word ist in einer schon gefunden Umgebung  
                         ranges[nr]=(x,y) # neue Position der Umgebung  
   
                         ret[nr]=str # neue Umgebung  
                     else: # andernfalls neue Umgebung hinzufuegen  
                         ranges.append((x,y))  
   
                         ret.append(str)  
                       
                     pos=pos+len(word)  
                 else:  
                     break;  
                   
         # now highlight everything          
         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  
                                                                   
     def harvest_page(self,context=None):      def harvest_page(self,context=None):
         """seite fuer harvesting fuer die Projektsuche"""          """seite fuer harvesting fuer die Projektsuche"""
Line 770  class MPIWGProject(CatalogAware,Folder): Line 759  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 799  class MPIWGProject(CatalogAware,Folder): Line 789  class MPIWGProject(CatalogAware,Folder):
     def getContent(self,field,filter=None):      def getContent(self,field,filter=None):
         """Inhalt des Feldes"""          """Inhalt des Feldes"""
                   
       if field=="short_title":
           text = self.getContent("xdata_07")
           if text=="":
               text = self.getContent("WEB_title")
           return text
   
         text=u''          text=u''
   
         for x in getattr(self,field):          for x in getattr(self,field):
Line 818  class MPIWGProject(CatalogAware,Folder): Line 814  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 872  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 937  class MPIWGProject(CatalogAware,Folder): Line 936  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"""
         tmpPro=getattr(self,"previewTemplate",None)          tmpPro=getattr(self,"previewTemplate",None)
Line 988  class MPIWGProject(CatalogAware,Folder): Line 1034  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 zurŸck (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 1091  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 1114  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))              
             cataloggedNames=self.MembersCatalog(firstName=firstname,lastName=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})
               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 1135  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):
Line 1059  class MPIWGProject(CatalogAware,Folder): Line 1156  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 1183  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 1216  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=""
   
Line 1159  class MPIWGProject(CatalogAware,Folder): Line 1260  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.104


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