Diff for /MPIWGWeb/MPIWGProjects.py between versions 1.47.2.117 and 1.47.2.131

version 1.47.2.117, 2010/09/13 11:23:58 version 1.47.2.131, 2013/05/16 12:40:52
Line 43  import MPIWGRoot Line 43  import MPIWGRoot
 import MPIWGLink  import MPIWGLink
 import MPIWGTemplate  import MPIWGTemplate
   
   import transaction
   
 # die folgenden Klassen sind jetzt in einzelne Files ausgelagert aus Kompatibilitaetsgruenden, 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.
   
Line 73  class MPIWGProject_publication(Folder): Line 75  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 hasLinkToBookPage(self,mode="not_cached"):
         """teste ob eingebener link zu einer MPIWG Book page geht"""          """teste ob eingebener link zu einer MPIWG Book page geht"""
                   
           
           logging.debug("MPIWGProject_publication - begin hasLinkToBookPage")
         if (getattr(self,'link','')==''):          if (getattr(self,'link','')==''):
             return False #es gibt keinen link              return False #es gibt keinen link
                   
           logging.debug("MPIWGProject_publication - begin hasLinkToBookPage:"+self.link)
         server = xmlrpclib.ServerProxy(self.link)          server = xmlrpclib.ServerProxy(self.link)
                   
           if(mode=="cached"):
               if (hasattr(self,"_v_hasLinkToBookPage")):
                   logging.debug("haslink cached")
                   return self._v_hasLinkToBookPage
           
         try:          try:
             server.getImageUrls()              server.getImageUrls()
               logging.debug("MPIWGProject_publication - end TRUE")
               self._v_hasLinkToBookPage=True
             return True              return True
         except:          except:
               logging.debug("MPIWGProject_publication - end FALSE ")
               self._v_hasLinkToBookPage=True
             return False              return False
                   
           
     def getImageUrls(self):      
       def getImageUrls(self,mode="not_cached"):
         """get the image urls"""          """get the image urls"""
                   
         if (getattr(self,'link','')==''):          if (getattr(self,'link','')==''):
             return False #es gibt keinen link              return [] #es gibt keinen link
                   
         server = xmlrpclib.ServerProxy(self.link)          server = xmlrpclib.ServerProxy(self.link)
                   
           
           if(mode=="cached"):
               if (hasattr(self,"_v_imageUrls")):
                   logging.debug("getImageURL cached")
                   return self._v_imageUrls
          
         try:          try:
             urls = server.getImageUrls()              urls = server.getImageUrls()
             ret=[]              ret=[]
Line 104  class MPIWGProject_publication(Folder): Line 125  class MPIWGProject_publication(Folder):
                 ret.append(url)                  ret.append(url)
                         
         except:          except:
               self._v_imageUrls=[]
             return []              return []
                   self._v_imageUrls=ret[0:]
         return ret          return ret
                   
     def editPublication(self,text=None,image1=None,image2=None,description=None,link=None,RESPONSE=None):      def editPublication(self,text=None,image1=None,image2=None,description=None,link=None,RESPONSE=None):
Line 140  class MPIWGProject_publication(Folder): Line 162  class MPIWGProject_publication(Folder):
                 self._setObject('publicationImage2',nO)                  self._setObject('publicationImage2',nO)
                                         
   
           self.ZCacheable_invalidate()
         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;
           self.ZCacheable_invalidate()
          
           if RESPONSE:
               self.redirect(RESPONSE,"../manageRelatedProjects")
   
 class MPIWGProject_image(Image):  class MPIWGProject_image(Image):
     """Images for Projects"""      """Images for Projects"""
   
Line 178  class MPIWGProject(CatalogAware,Folder,C Line 259  class MPIWGProject(CatalogAware,Folder,C
     security=ClassSecurityInfo()      security=ClassSecurityInfo()
     meta_type='MPIWGProject'      meta_type='MPIWGProject'
     default_catalog='ProjectCatalog'      default_catalog='ProjectCatalog'
       
     def redirect(self,RESPONSE,url):      def redirect(self,RESPONSE,url):
         """mache ein redirect mit einem angehaengten time stamp um ein reload zu erzwingen"""          """mache ein redirect mit einem angehaengten time stamp um ein reload zu erzwingen"""
                   
Line 201  class MPIWGProject(CatalogAware,Folder,C Line 283  class MPIWGProject(CatalogAware,Folder,C
         def sort(x,y):          def sort(x,y):
             return cmp(getattr(x[1],'place',0),getattr(y[1],'place',0))              return cmp(getattr(x[1],'place',0),getattr(y[1],'place',0))
   
           logging.debug("MPIWGProjects begin: sorted by place: "+ metatype)
         founds=self.ZopeFind(self,obj_metatypes=[metatype]);          founds=self.ZopeFind(self,obj_metatypes=[metatype]);
                   
         founds.sort(sort)          founds.sort(sort)
                   logging.debug("MPIWGProjects end: sorted by place: "+ metatype)
         return founds          return founds
           
   
Line 250  class MPIWGProject(CatalogAware,Folder,C Line 333  class MPIWGProject(CatalogAware,Folder,C
         """test ob es digital sources gibt"""          """test ob es digital sources gibt"""
                   
                   
         ret = (self.getContent('xdata_11')=='' and self.getContent('xdata_13')=='')          ret = (self.getContent('xdata_11').lstrip().rstrip()=='')
                           
               
               
Line 383  class MPIWGProject(CatalogAware,Folder,C Line 466  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 418  class MPIWGProject(CatalogAware,Folder,C Line 531  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"""
           number=self.getLastPublicationNumber()+1
         name="publication_"+str(self.getLastPublicationNumber()+1)          name="publication_"+str(number)
           while hasattr(self,name):
               number+=1
               name="publication_"+str(number)
                   
         newPublication=MPIWGProject_publication(name)          newPublication=MPIWGProject_publication(name)
   
Line 431  class MPIWGProject(CatalogAware,Folder,C Line 557  class MPIWGProject(CatalogAware,Folder,C
         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:          if RESPONSE is not None:
                   
             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"""
   
           
           
           number=self.getLastPublicationNumber()+1
           name="RelatedProject"+str(number)
           while hasattr(self,name):
               number+=1
               name="RelatedProject_"+str(number)
           
           # 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:
           
               self.redirect(RESPONSE,'manageRelatedProjects')
   
    
     
     def getLastPublicationNumber(self):      def getLastPublicationNumber(self):
         publications=self.getPublications()          publications=self.getPublications()
Line 445  class MPIWGProject(CatalogAware,Folder,C Line 619  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])
               self.ZCacheable_invalidate()
             if RESPONSE:              if RESPONSE:
                   
                 self.redirect(RESPONSE,'managePublications')                  self.redirect(RESPONSE,'managePublications')
                                   
       def deleteRelatedProject(self,id,RESPONSE=None):
               """delete Publication id"""
               self.manage_delObjects([id])
               self.ZCacheable_invalidate()
               if RESPONSE:
           
                   self.redirect(RESPONSE,'manageRelatedProjects')
                 
     def getImages(self):      def getImages(self):
         """get all Images"""          """get all Images"""
   
Line 592  class MPIWGProject(CatalogAware,Folder,C Line 783  class MPIWGProject(CatalogAware,Folder,C
         else:          else:
             return 1              return 1
                   
       def isActualForIndex(self): #isActual kann nicht indiziert werden, da intern fom ZCAtalog verwendete Funktion
           """gibt 1 zurueck wenn aktuell, 0 sonst"""
           actualTime=time.localtime()
           
           
           #print getattr(self,'archiveTime',actualTime)
           if getattr(self,'archiveTime',actualTime)< actualTime:
               return 0
           else:
               return 1
           
     def copyObjectToArchive(self):      def copyObjectToArchive(self):
         """kopiere aktuelles objekt ins archiv"""          """kopiere aktuelles objekt ins archiv"""
         logging.info("copytoarchive 1")          logging.info("copytoarchive 1")
Line 864  class MPIWGProject(CatalogAware,Folder,C Line 1066  class MPIWGProject(CatalogAware,Folder,C
         return pt()          return pt()
           
       
     def harvest_page(self,context=None):      def harvest_page(self,context=None,mode="normal"):
         """seite fuer harvesting fuer die Projektsuche"""          """seite fuer harvesting fuer die Projektsuche"""
          
         if not context:          if not context:
             context=self              context=self
                           
         if self.isActiveProject() and self.isActual():          if self.isActiveProject() and self.isActual():
                templates = self.en.getHarvestCache()
               
              ext=getattr(self,"harvest_main",None)               ext=getattr(self,"harvest_main",None)
              if ext:               if ext:
                  return getattr(self,ext.getId())()                   rendered = getattr(self,ext.getId())()
                    templates[self.absolute_url()]=rendered
                    transaction.commit()
                    return rendered
                    
   
              pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','harvest_main')).__of__(context)                   pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','harvest_main')).__of__(context)    
   
                rendered = pt()
                templates[self.absolute_url()]=rendered
                transaction.commit()
                return rendered
                    
   
              return pt()  
               
     def index_html(self,request=True,context=None):      def index_html(self,request=True,context=None):
         """show homepage"""          """show homepage"""
Line 1108  class MPIWGProject(CatalogAware,Folder,C Line 1321  class MPIWGProject(CatalogAware,Folder,C
                   
         return True          return True
   
     security.declareProtected('View management screens','edit')      security.declareProtected('View management screens','editOldVersion')
     def edit(self,western=None):      def editOldVersion(self,western=None):
         """Edit pages"""          """Edit pages"""
         if western:          if western:
             self.REQUEST.RESPONSE.setCookie("MP_debug_code","western",path="/")              self.REQUEST.RESPONSE.setCookie("MP_debug_code","western",path="/")
Line 1382  class MPIWGProject(CatalogAware,Folder,C Line 1595  class MPIWGProject(CatalogAware,Folder,C
              tmpList.append((unicodify(names[nr]),unicodify(keys.get(nr,""))))               tmpList.append((unicodify(names[nr]),unicodify(keys.get(nr,""))))
                             
         self.responsibleScientistsList=tmpList          self.responsibleScientistsList=tmpList
           
           self.reindex_object()
         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.decode(self.REQUEST.get('xdata_01',''))))              return self.editMPIWGBasisEditor(identifiedNames=self.identifyNames(self.decode(self.REQUEST.get('xdata_01',''))))
Line 1500  class MPIWGProject(CatalogAware,Folder,C Line 1715  class MPIWGProject(CatalogAware,Folder,C
         if RESPONSE is not None:          if RESPONSE is not None:
             RESPONSE.redirect('manage_main')              RESPONSE.redirect('manage_main')
   
       def tagTheProject(self,RESPONSE=None):
           """TAG"""
           id=self.getId();
           tmpl =getattr(self.thesaurus,"main.html")
           if RESPONSE:
               RESPONSE.redirect("./thesaurus/main.html?project="+id)
           return
           
 def manage_addMPIWGProjectForm(self):  def manage_addMPIWGProjectForm(self):
     """form for adding the project"""      """form for adding the project"""
     pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addMPIWGProjectForm.zpt')).__of__(self)      pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addMPIWGProjectForm.zpt')).__of__(self)

Removed from v.1.47.2.117  
changed lines
  Added in v.1.47.2.131


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