Diff for /MPIWGWeb/MPIWGProjects.py between versions 1.47.2.86 and 1.47.2.97

version 1.47.2.86, 2008/08/18 13:27:56 version 1.47.2.97, 2008/09/02 12:00:06
Line 7  $author dwinter   - last change  26.06.2 Line 7  $author dwinter   - last change  26.06.2
 from Products.PageTemplates.PageTemplateFile import PageTemplateFile  from Products.PageTemplates.PageTemplateFile import PageTemplateFile
 from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate  from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
 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
Line 17  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 OFS.Image import Image
 from AccessControl import ClassSecurityInfo  from AccessControl import ClassSecurityInfo
 from bibliography import *  from bibliography import *
 import time  import time
Line 38  import MPIWGRoot Line 39  import MPIWGRoot
 import MPIWGLink  import MPIWGLink
 import MPIWGTemplate  import MPIWGTemplate
   
 # die folgenden Klassen sind jetzt in einzelne Files ausgelagert aus KompatibilitŠtsgrŸnden, bleiben die Klassen hier noch drin.  # die folgenden Klassen sind jetzt in einzelne Files ausgelagert aus Kompatibilitaetsgruenden, bleiben die Klassen hier noch drin.
 # Sonst funktionieren die alten Webseiten nicht mehr.  # Sonst funktionieren die alten Webseiten nicht mehr.
   
 class MPIWGRoot(MPIWGRoot.MPIWGRoot):  class MPIWGRoot(MPIWGRoot.MPIWGRoot):
Line 50  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 256  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 551  class MPIWGProject(CatalogAware,Folder): Line 591  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 573  class MPIWGProject(CatalogAware,Folder): Line 637  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 580  class MPIWGProject(CatalogAware,Folder): Line 649  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 875  class MPIWGProject(CatalogAware,Folder): Line 945  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 939  class MPIWGProject(CatalogAware,Folder): Line 1009  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 current root (=top level) 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 990  class MPIWGProject(CatalogAware,Folder): Line 1107  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 identifyNames(self,nameList):      def identifyNames(self,nameList):
         """Bekommt eine Komma oder Semikolon getrennte Liste mit Name der Form Vorname MittelName(n) Nachname          """Bekommt eine Komma oder Semikolon getrennte Liste mit Name der Form Vorname MittelName(n) Nachname
         und ordnet diese dann Mitarbeiter IDs zu falls es schone eine Liste gibt wird im Projekte gibt wird diese Upgedated.          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 1027  class MPIWGProject(CatalogAware,Folder): Line 1158  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 1061  class MPIWGProject(CatalogAware,Folder): Line 1199  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 1084  class MPIWGProject(CatalogAware,Folder): Line 1226  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 1161  class MPIWGProject(CatalogAware,Folder): Line 1303  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.86  
changed lines
  Added in v.1.47.2.97


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