--- MPIWGWeb/MPIWGProjects.py 2010/09/13 11:23:58 1.47.2.117 +++ MPIWGWeb/MPIWGProjects.py 2013/05/16 12:40:52 1.47.2.131 @@ -43,6 +43,8 @@ import MPIWGRoot import MPIWGLink import MPIWGTemplate +import transaction + # die folgenden Klassen sind jetzt in einzelne Files ausgelagert aus Kompatibilitaetsgruenden, bleiben die Klassen hier noch drin. # Sonst funktionieren die alten Webseiten nicht mehr. @@ -73,29 +75,48 @@ class MPIWGProject_publication(Folder): logging.debug(email.Utils.formatdate()+' GMT') RESPONSE.redirect(url+addStr%timeStamp) - def hasLinkToBookPage(self): + def hasLinkToBookPage(self,mode="not_cached"): """teste ob eingebener link zu einer MPIWG Book page geht""" + + logging.debug("MPIWGProject_publication - begin hasLinkToBookPage") if (getattr(self,'link','')==''): return False #es gibt keinen link + logging.debug("MPIWGProject_publication - begin hasLinkToBookPage:"+self.link) server = xmlrpclib.ServerProxy(self.link) + if(mode=="cached"): + if (hasattr(self,"_v_hasLinkToBookPage")): + logging.debug("haslink cached") + return self._v_hasLinkToBookPage + try: server.getImageUrls() + logging.debug("MPIWGProject_publication - end TRUE") + self._v_hasLinkToBookPage=True return True except: + logging.debug("MPIWGProject_publication - end FALSE ") + self._v_hasLinkToBookPage=True return False - def getImageUrls(self): + + def getImageUrls(self,mode="not_cached"): """get the image urls""" if (getattr(self,'link','')==''): - return False #es gibt keinen link + return [] #es gibt keinen link server = xmlrpclib.ServerProxy(self.link) + + if(mode=="cached"): + if (hasattr(self,"_v_imageUrls")): + logging.debug("getImageURL cached") + return self._v_imageUrls + try: urls = server.getImageUrls() ret=[] @@ -104,8 +125,9 @@ class MPIWGProject_publication(Folder): ret.append(url) except: + self._v_imageUrls=[] return [] - + self._v_imageUrls=ret[0:] return ret def editPublication(self,text=None,image1=None,image2=None,description=None,link=None,RESPONSE=None): @@ -140,9 +162,68 @@ class MPIWGProject_publication(Folder): self._setObject('publicationImage2',nO) + self.ZCacheable_invalidate() if RESPONSE: self.redirect(RESPONSE,"../managePublications") +class MPIWGProject_relatedProject(Folder): + """publications object fuer project""" + + meta_type="MPIWGProject_relatedProject" + def redirect(self,RESPONSE,url): + """mache ein redirect mit einem angehaengten time stamp um ein reload zu erzwingen""" + + timeStamp=time.time() + + if url.find("?")>-1: #giebt es schon parameter + addStr="&time=%s" + else: + addStr="?time=%s" + + RESPONSE.setHeader('Last-Modified',email.Utils.formatdate().split("-")[0]+'GMT') + logging.debug(email.Utils.formatdate()+' GMT') + RESPONSE.redirect(url+addStr%timeStamp) + + + def editRelatedProject(self,link=None,RESPONSE=None): + """edit a publication""" + + if (not link): + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','edit_relatedProjectForm.zpt')).__of__(self) + return pt() + + + + + + # hole die id des projektes + splitted=link.split("/") + + #teste ob es das project gibt + if len(splitted)<1: + self.redirect(RESPONSE,'errorRelatedProjects?link='+link) + + objid=splitted[-1] + object = getattr(self.projects,objid,None) + + if object==None: + self.redirect(RESPONSE,'errorRelatedProjects?link='+link) + + + + + + self.orginallink=link[0:] + self.objid=objid[0:] + + self.projectWEB_title=object.getContent('WEB_title')[0:] + + self.enabled=True; + self.ZCacheable_invalidate() + + if RESPONSE: + self.redirect(RESPONSE,"../manageRelatedProjects") + class MPIWGProject_image(Image): """Images for Projects""" @@ -178,6 +259,7 @@ class MPIWGProject(CatalogAware,Folder,C security=ClassSecurityInfo() meta_type='MPIWGProject' default_catalog='ProjectCatalog' + def redirect(self,RESPONSE,url): """mache ein redirect mit einem angehaengten time stamp um ein reload zu erzwingen""" @@ -201,10 +283,11 @@ class MPIWGProject(CatalogAware,Folder,C def sort(x,y): 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.sort(sort) - + logging.debug("MPIWGProjects end: sorted by place: "+ metatype) return founds @@ -250,7 +333,7 @@ class MPIWGProject(CatalogAware,Folder,C """test ob es digital sources gibt""" - ret = (self.getContent('xdata_11')=='' and self.getContent('xdata_13')=='') + ret = (self.getContent('xdata_11').lstrip().rstrip()=='') @@ -383,6 +466,36 @@ class MPIWGProject(CatalogAware,Folder,C pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','MPIWGProject_managePublicationsForm.zpt')).__of__(self) return pt() + + def manageRelatedProjects(self,pubName=None,op=None): + """managage relatedProjectd""" + + + if pubName and op: + if op=='up': + relatedProjects=self.getRelatedProjects() + for project in relatedProjects: + if project[0]==pubName: + nr=relatedProjects.index(project) + if not nr==0: + relatedProjects[nr-1][1].place+=1 + relatedProjects[nr][1].place-=1 + pass + elif op=='down': + relatedProjects=self.getRelatedProjects() + for project in relatedProjects: + if project[0]==pubName: + nr=relatedProjects.index(project) + if not (nr==len(relatedProjects)-1): + relatedProjects[nr+1][1].place-=1 + relatedProjects[nr][1].place+=1 + pass + + + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','MPIWGProject_manageRelatedProjectsForm.zpt')).__of__(self) + return pt() + + def hasExtendedPublicationList(self): """test if extended publication list exists""" if not hasattr(self,"publicationList"): @@ -418,10 +531,23 @@ class MPIWGProject(CatalogAware,Folder,C publications.sort(sort_images) 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): """add an MPIWG_Publication""" - - name="publication_"+str(self.getLastPublicationNumber()+1) + number=self.getLastPublicationNumber()+1 + name="publication_"+str(number) + while hasattr(self,name): + number+=1 + name="publication_"+str(number) newPublication=MPIWGProject_publication(name) @@ -431,14 +557,70 @@ class MPIWGProject(CatalogAware,Folder,C obj.enabled=True; obj.place=self.getLastPublicationNumber()+1 obj.id=name - + self.ZCacheable_invalidate() if RESPONSE is not None: self.redirect(RESPONSE,'managePublications') + def errorRelatedProjects(self,link): + """error creating a related project""" + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','edit_project_error_relatedProject.zpt')).__of__(self) + return pt(link=link) + + def addRelatedProject(self,link,RESPONSE=None): + """add an MPIWG_Publication""" + + + + 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): publications=self.getPublications() + + if not publications: + return 0 + else: + return getattr(publications[-1][1],'place',0) + + def getLastRelatedProjectNumber(self): + publications=self.getRelatedProjects() if not publications: return 0 @@ -448,10 +630,19 @@ class MPIWGProject(CatalogAware,Folder,C def deletePublication(self,id,RESPONSE=None): """delete Publication id""" self.manage_delObjects([id]) + self.ZCacheable_invalidate() if RESPONSE: self.redirect(RESPONSE,'managePublications') - + + def deleteRelatedProject(self,id,RESPONSE=None): + """delete Publication id""" + self.manage_delObjects([id]) + self.ZCacheable_invalidate() + if RESPONSE: + + self.redirect(RESPONSE,'manageRelatedProjects') + def getImages(self): """get all Images""" @@ -592,6 +783,17 @@ class MPIWGProject(CatalogAware,Folder,C else: 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): """kopiere aktuelles objekt ins archiv""" logging.info("copytoarchive 1") @@ -864,20 +1066,31 @@ class MPIWGProject(CatalogAware,Folder,C return pt() - def harvest_page(self,context=None): + def harvest_page(self,context=None,mode="normal"): """seite fuer harvesting fuer die Projektsuche""" + if not context: context=self if self.isActiveProject() and self.isActual(): + templates = self.en.getHarvestCache() + ext=getattr(self,"harvest_main",None) 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) - - - return pt() + + rendered = pt() + templates[self.absolute_url()]=rendered + transaction.commit() + return rendered + + def index_html(self,request=True,context=None): """show homepage""" @@ -1108,8 +1321,8 @@ class MPIWGProject(CatalogAware,Folder,C return True - security.declareProtected('View management screens','edit') - def edit(self,western=None): + security.declareProtected('View management screens','editOldVersion') + def editOldVersion(self,western=None): """Edit pages""" if western: self.REQUEST.RESPONSE.setCookie("MP_debug_code","western",path="/") @@ -1382,6 +1595,8 @@ class MPIWGProject(CatalogAware,Folder,C tmpList.append((unicodify(names[nr]),unicodify(keys.get(nr,"")))) self.responsibleScientistsList=tmpList + + self.reindex_object() if fromEdit and (RESPONSE is not None): #RESPONSE.redirect('./editMPIWGBasisEditor') return self.editMPIWGBasisEditor(identifiedNames=self.identifyNames(self.decode(self.REQUEST.get('xdata_01','')))) @@ -1500,6 +1715,14 @@ class MPIWGProject(CatalogAware,Folder,C if RESPONSE is not None: 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): """form for adding the project""" pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addMPIWGProjectForm.zpt')).__of__(self)