Diff for /MPIWGWeb/MPIWGProjects.py between versions 1.47.2.118 and 1.48

version 1.47.2.118, 2010/09/14 06:22:50 version 1.48, 2009/02/18 13:01:17
Line 25  from AccessControl import getSecurityMan Line 25  from AccessControl import getSecurityMan
 from bibliography import *  from bibliography import *
 import time  import time
 from OFS.Cache import Cacheable  from OFS.Cache import Cacheable
 import xmlrpclib  
 #import xml.dom.minidom  #import xml.dom.minidom
 import sys  import sys
 #from Ft.Xml.XPath import Evaluate  #from Ft.Xml.XPath import Evaluate
Line 73  class MPIWGProject_publication(Folder): Line 72  class MPIWGProject_publication(Folder):
         logging.debug(email.Utils.formatdate()+' GMT')          logging.debug(email.Utils.formatdate()+' GMT')
         RESPONSE.redirect(url+addStr%timeStamp)          RESPONSE.redirect(url+addStr%timeStamp)
   
     def hasLinkToBookPage(self):      def editPublication(self,text=None,image1=None,image2=None,description=None,RESPONSE=None):
         """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 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) and (not description):          if (not text) and (not description):
Line 116  class MPIWGProject_publication(Folder): Line 80  class MPIWGProject_publication(Folder):
             return pt()              return pt()
   
                 
         if text:  
             self.text=text[0:]              self.text=text[0:]
           
         if description:  
             self.description=description              self.description=description
                   
         if link:  
             self.link=link[0:]  
           
         if image1:          if image1:
             if hasattr(self,'publicationImage1'):              if hasattr(self,'publicationImage1'):
                 self.publicationImage1.manage_upload(image1)                  self.publicationImage1.manage_upload(image1)
Line 143  class MPIWGProject_publication(Folder): Line 101  class MPIWGProject_publication(Folder):
         if RESPONSE:          if RESPONSE:
             self.redirect(RESPONSE,"../managePublications")              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;  
          
          
         if RESPONSE:  
             self.redirect(RESPONSE,"../manageRelatedProjects")  
   
 class MPIWGProject_image(Image):  class MPIWGProject_image(Image):
     """Images for Projects"""      """Images for Projects"""
   
Line 225  class MPIWGProject_image(Image): Line 125  class MPIWGProject_image(Image):
             self.caption=caption[0:]              self.caption=caption[0:]
   
         if RESPONSE:          if RESPONSE:
       
             self.redirect(RESPONSE,"../manageImages")              self.redirect(RESPONSE,"../manageImages")
   
 class MPIWGProject(CatalogAware,Folder,Cacheable):  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'
Line 277  class MPIWGProject(CatalogAware,Folder,C Line 176  class MPIWGProject(CatalogAware,Folder,C
             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:
                                   
             self.redirect(RESPONSE,'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):  
         """copy inline images to marginal images"""          """copy inline images to marginal images"""
Line 441  class MPIWGProject(CatalogAware,Folder,C Line 305  class MPIWGProject(CatalogAware,Folder,C
   
         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):      def hasExtendedPublicationList(self):
         """test if extended publication list exists"""          """test if extended publication list exists"""
         if not hasattr(self,"publicationList"):          if not hasattr(self,"publicationList"):
Line 506  class MPIWGProject(CatalogAware,Folder,C Line 340  class MPIWGProject(CatalogAware,Folder,C
         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 534  class MPIWGProject(CatalogAware,Folder,C Line 358  class MPIWGProject(CatalogAware,Folder,C
                   
             self.redirect(RESPONSE,'managePublications')              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  
           
         if RESPONSE is not None:  
           
             self.redirect(RESPONSE,'manageRelatedProjects')  
   
    
           
     def getLastPublicationNumber(self):      def getLastPublicationNumber(self):
         publications=self.getPublications()          publications=self.getPublications()
Line 585  class MPIWGProject(CatalogAware,Folder,C Line 367  class MPIWGProject(CatalogAware,Folder,C
         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])
Line 600  class MPIWGProject(CatalogAware,Folder,C Line 374  class MPIWGProject(CatalogAware,Folder,C
                   
                 self.redirect(RESPONSE,'managePublications')                  self.redirect(RESPONSE,'managePublications')
                               
     def deleteRelatedProject(self,id,RESPONSE=None):  
             """delete Publication id"""  
             self.manage_delObjects([id])  
             if RESPONSE:  
           
                 self.redirect(RESPONSE,'manageRelatedProjects')  
                 
     def getImages(self):      def getImages(self):
         """get all Images"""          """get all Images"""
   
Line 749  class MPIWGProject(CatalogAware,Folder,C Line 516  class MPIWGProject(CatalogAware,Folder,C
                   
     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 915  class MPIWGProject(CatalogAware,Folder,C Line 671  class MPIWGProject(CatalogAware,Folder,C
                 return '';                  return '';
                   
     def getStartedAt(self):      def getStartedAt(self):
         """gibt das transformierte Datum zurueck, an dem Projekt begonnen wurde."""          """gibt das transformierte Datum zurŸck, an dem Projekt begonnen wurde."""
         date=getattr(self,'startedAt','')          date=getattr(self,'startedAt','')
         if date:          if date:
             return self.reTransformDate(date);              return self.reTransformDate(date);
Line 936  class MPIWGProject(CatalogAware,Folder,C Line 692  class MPIWGProject(CatalogAware,Folder,C
                   
                   
     def transformDate(self,date):      def transformDate(self,date):
         """transformiert ein Datum von DD.MM.YYYY, MM.YYYY,YYYY nach  YYYYMMDD, alle nicht angebenen Werte          """transformiert ein Datum von DD.MM.YYYY, MM.YYYY,YYYY nach  YYYYMMDD, alle nicht angebebenn Werte
         werden auf 0 gesetzt, es wird null zurueckgegeben falls das Datum ungueltig ist"""           werden auf 0 gesetzt, es wird null zurŸckgegeben falls das Datum ungueltig ist""" 
         
         if (date==None):          if (date==None):
             return None;              return None;
Line 1061  class MPIWGProject(CatalogAware,Folder,C Line 817  class MPIWGProject(CatalogAware,Folder,C
         security = getSecurityManager()          security = getSecurityManager()
         bound_names['user'] = security.getUser()          bound_names['user'] = security.getUser()
               
         
         # Retrieve the value from the cache.          # Retrieve the value from the cache.
         keyset = None          keyset = None
         if self.ZCacheable_isCachingEnabled():          if self.ZCacheable_isCachingEnabled():
Line 1079  class MPIWGProject(CatalogAware,Folder,C Line 836  class MPIWGProject(CatalogAware,Folder,C
         security.addContext(self)          security.addContext(self)
   
         try:          try:
             #logging.debug("index_html pt=%s"%repr(pt))  
             result = pt.pt_render(extra_context=bound_names)              result = pt.pt_render(extra_context=bound_names)
             #logging.debug("index_html result=%s"%repr(result))  
             if keyset is not None:              if keyset is not None:
                 # Store the result in the cache.                  # Store the result in the cache.
                 self.ZCacheable_set(result, keywords=keyset)                  self.ZCacheable_set(result, keywords=keyset)
Line 1133  class MPIWGProject(CatalogAware,Folder,C Line 888  class MPIWGProject(CatalogAware,Folder,C
   
     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":          if field=="short_title":
                 text = self.getContent("xdata_07")                  text = self.getContent("xdata_07")
Line 1243  class MPIWGProject(CatalogAware,Folder,C Line 997  class MPIWGProject(CatalogAware,Folder,C
                   
     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 1253  class MPIWGProject(CatalogAware,Folder,C Line 1006  class MPIWGProject(CatalogAware,Folder,C
         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()
Line 1334  class MPIWGProject(CatalogAware,Folder,C Line 1088  class MPIWGProject(CatalogAware,Folder,C
   
     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 1343  class MPIWGProject(CatalogAware,Folder,C Line 1096  class MPIWGProject(CatalogAware,Folder,C
             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('zpt/previewFrame.zpt',globals()).__of__(self)          pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','previewFrame.zpt')).__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 1359  class MPIWGProject(CatalogAware,Folder,C Line 1112  class MPIWGProject(CatalogAware,Folder,C
             <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>              <body>%s
             </html>              </html></body>
             """%self.WEB_project_description[0]              """%self.WEB_project_description[0]
                   
         return """          return """
Line 1368  class MPIWGProject(CatalogAware,Folder,C Line 1121  class MPIWGProject(CatalogAware,Folder,C
             <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>              <body>%s
             </html>              </html></body>
             """%self.getContent('WEB_project_description')              """%self.getContent('WEB_project_description')
                   
                   
Line 1394  class MPIWGProject(CatalogAware,Folder,C Line 1147  class MPIWGProject(CatalogAware,Folder,C
             return False              return False
                   
     def getPersonKeyList(self):      def getPersonKeyList(self):
         """gibt die key Liste der beteiligten Personen zurueck (utf8 codiert)"""          """gibt die key Liste der beteiligten Personen zurŸck (utf8 codiert)"""
         #logging.error("getPersonKeyList:%s"%getattr(self,'responsibleScientistsList',[]))          #logging.error("getPersonKeyList:%s"%getattr(self,'responsibleScientistsList',[]))
         try:          try:
             return [utf8ify(x[1]) for x in getattr(self,'responsibleScientistsList',[])]              return [utf8ify(x[1]) for x in getattr(self,'responsibleScientistsList',[])]

Removed from v.1.47.2.118  
changed lines
  Added in v.1.48


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