--- MPIWGWeb/MPIWGProjects.py 2013/05/16 12:40:52 1.47.2.131 +++ MPIWGWeb/MPIWGProjects.py 2009/02/18 13:01:17 1.48 @@ -25,7 +25,6 @@ from AccessControl import getSecurityMan from bibliography import * import time from OFS.Cache import Cacheable -import xmlrpclib #import xml.dom.minidom import sys #from Ft.Xml.XPath import Evaluate @@ -43,8 +42,6 @@ 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. @@ -75,62 +72,7 @@ class MPIWGProject_publication(Folder): logging.debug(email.Utils.formatdate()+' GMT') RESPONSE.redirect(url+addStr%timeStamp) - 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,mode="not_cached"): - """get the image urls""" - - if (getattr(self,'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=[] - for url in urls: - url = os.path.join(self.link,url) - 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): + def editPublication(self,text=None,image1=None,image2=None,description=None,RESPONSE=None): """edit a publication""" if (not text) and (not description): @@ -138,14 +80,8 @@ class MPIWGProject_publication(Folder): return pt() - if text: - self.text=text[0:] - - if description: - self.description=description - - if link: - self.link=link[0:] + self.text=text[0:] + self.description=description if image1: if hasattr(self,'publicationImage1'): @@ -162,67 +98,8 @@ 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") + self.redirect(RESPONSE,"../managePublications") class MPIWGProject_image(Image): """Images for Projects""" @@ -248,18 +125,16 @@ class MPIWGProject_image(Image): self.caption=caption[0:] if RESPONSE: + self.redirect(RESPONSE,"../manageImages") class MPIWGProject(CatalogAware,Folder,Cacheable): """Class for Projects""" - - def _p_resolveConflict(self, oldState, savedState, newState): - return newState + 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""" @@ -283,11 +158,10 @@ 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 @@ -302,45 +176,10 @@ class MPIWGProject(CatalogAware,Folder,C pubSplit=pubSplit.replace("

","") self.addPublication(pubSplit) - setattr(self,"WEB_related_pub_copied",True); - if RESPONSE: - + 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').lstrip().rstrip()=='') - - - - return not ret; - - - def copyImageToMargin(self,RESPONSE=None): """copy inline images to marginal images""" @@ -408,7 +247,7 @@ class MPIWGProject(CatalogAware,Folder,C obj.update_data(data) if RESPONSE: - + self.redirect(RESPONSE,'manageImages') def manageImages(self,imageName=None,op=None): @@ -466,36 +305,6 @@ 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"): @@ -518,7 +327,7 @@ class MPIWGProject(CatalogAware,Folder,C if RESPONSE: - self.redirect(RESPONSE,"managePublications") + self.redirect(RESPONSE,"managePublications") def getPublications(self): @@ -531,23 +340,10 @@ 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""" - number=self.getLastPublicationNumber()+1 - name="publication_"+str(number) - while hasattr(self,name): - number+=1 - name="publication_"+str(number) + + name="publication_"+str(self.getLastPublicationNumber()+1) newPublication=MPIWGProject_publication(name) @@ -557,70 +353,14 @@ 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') + + self.redirect(RESPONSE,'managePublications') - 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 @@ -630,19 +370,10 @@ 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""" @@ -678,7 +409,7 @@ class MPIWGProject(CatalogAware,Folder,C except: logging.error("ERROR MPIWG: %s %s"%sys.exc_info()[0:2]) if RESPONSE: - self.redirect(RESPONSE,'manageImages') + self.redirect(RESPONSE,'manageImages') @@ -783,44 +514,22 @@ 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") cb=self.aq_parent.manage_copyObjects(self.getId()) - logging.info("copytoarchive 2") self.manage_pasteObjects(cb) - logging.info("copytoarchive 3") actualTime=time.localtime() 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.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'])] - logging.info("copytoarchive 6") obj.manage_delObjects(ids) - logging.info("copytoarchive 7") def setArchiveTime(self,time): """set Archive Time""" self.archiveTime=time[0:] - def delArchiveTime(self): - """delete archive time""" - del self.archiveTime - def versionManageForm(self): """version Manage form:currently only set to invisible""" pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','MPIWGProject_versionManageForm.zpt')).__of__(self) @@ -831,7 +540,7 @@ class MPIWGProject(CatalogAware,Folder,C self.invisible=invisible if RESPONSE is not None: - + self.redirect(RESPONSE,'manage_main') @@ -953,16 +662,16 @@ class MPIWGProject(CatalogAware,Folder,C else: return "" # test ob parent abgeschlossen ist - try: #TODO: ersetzte try except durch vernuenftige abfrage + try: #TODO: ersetzte try except durch vernuenftige abfrage ct=self.getContexts(parents=self.getContent('xdata_05'),depth=1) if (len(ct)>0): #is there are parent return ct[0][0].getCompletedAt() return ''; - except: + except: return ''; 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','') if date: return self.reTransformDate(date); @@ -983,8 +692,8 @@ class MPIWGProject(CatalogAware,Folder,C def transformDate(self,date): - """transformiert ein Datum von DD.MM.YYYY, MM.YYYY,YYYY nach YYYYMMDD, alle nicht angebenen Werte - werden auf 0 gesetzt, es wird null zurueckgegeben falls das Datum ungueltig ist""" + """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""" if (date==None): return None; @@ -1066,31 +775,20 @@ class MPIWGProject(CatalogAware,Folder,C return pt() - def harvest_page(self,context=None,mode="normal"): + def harvest_page(self,context=None): """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: - rendered = getattr(self,ext.getId())() - templates[self.absolute_url()]=rendered - transaction.commit() - return rendered - + return getattr(self,ext.getId())() 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): """show homepage""" @@ -1118,6 +816,7 @@ class MPIWGProject(CatalogAware,Folder,C security = getSecurityManager() bound_names['user'] = security.getUser() + # Retrieve the value from the cache. keyset = None @@ -1137,9 +836,7 @@ class MPIWGProject(CatalogAware,Folder,C security.addContext(self) try: - #logging.debug("index_html pt=%s"%repr(pt)) result = pt.pt_render(extra_context=bound_names) - #logging.debug("index_html result=%s"%repr(result)) if keyset is not None: # Store the result in the cache. self.ZCacheable_set(result, keywords=keyset) @@ -1191,13 +888,12 @@ class MPIWGProject(CatalogAware,Folder,C def getContent(self,field,filter=None): """Inhalt des Feldes""" - #logging.debug("getContent field=%s filter=%s"%(field,filter)) - if field=="short_title": - text = self.getContent("xdata_07") - if text=="": - text = self.getContent("WEB_title") - return text + if field=="short_title": + text = self.getContent("xdata_07") + if text=="": + text = self.getContent("WEB_title") + return text text=u'' @@ -1301,7 +997,6 @@ class MPIWGProject(CatalogAware,Folder,C def saveEditedContent(self,kupu=None,preview=None): """save Edited content""" - #logging.debug("saveEditedContent kupu=%s preview=%s"%(kupu,preview)) if preview: kupu=preview @@ -1311,6 +1006,7 @@ class MPIWGProject(CatalogAware,Folder,C newcontent= kupu[start+6:end] if preview: + return self.preview(newcontent) self.copyObjectToArchive() @@ -1321,8 +1017,8 @@ class MPIWGProject(CatalogAware,Folder,C return True - security.declareProtected('View management screens','editOldVersion') - def editOldVersion(self,western=None): + security.declareProtected('View management screens','edit') + def edit(self,western=None): """Edit pages""" if western: self.REQUEST.RESPONSE.setCookie("MP_debug_code","western",path="/") @@ -1392,7 +1088,6 @@ class MPIWGProject(CatalogAware,Folder,C def preview(self,description): """preview""" - #logging.debug("preview description=%s"%description) tmpPro=getattr(self,"previewTemplate",None) if not tmpPro: tmpPro=MPIWGProject("previewTemplate") @@ -1401,7 +1096,7 @@ class MPIWGProject(CatalogAware,Folder,C setattr(tmpPro,field,getattr(self,field)) tmpPro.WEB_project_description=description[0:] 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 self.REQUEST.RESPONSE.redirect(self.REQUEST['URL1']+"/previewTemplate") @@ -1409,7 +1104,7 @@ class MPIWGProject(CatalogAware,Folder,C def getWebProject_description(self): """get description""" - debug = self.REQUEST.cookies.get("MP_debug_code",None) + debug= self.REQUEST.cookies.get("MP_debug_code",None) if debug and debug=="western": return """ @@ -1417,8 +1112,8 @@ class MPIWGProject(CatalogAware,Folder,C - %s - + %s + """%self.WEB_project_description[0] return """ @@ -1426,8 +1121,8 @@ class MPIWGProject(CatalogAware,Folder,C - %s - + %s + """%self.getContent('WEB_project_description') @@ -1452,7 +1147,7 @@ class MPIWGProject(CatalogAware,Folder,C return False 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',[])) try: return [utf8ify(x[1]) for x in getattr(self,'responsibleScientistsList',[])] @@ -1474,9 +1169,9 @@ class MPIWGProject(CatalogAware,Folder,C else: names=nameList.split(",") - self._v_names=[] - for name in names: - self._v_names.append(name.rstrip().lstrip()) + self._v_names=[] + for name in names: + self._v_names.append(name.rstrip().lstrip()) def sort(x,y): @@ -1595,8 +1290,6 @@ 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','')))) @@ -1715,14 +1408,6 @@ 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)