# HG changeset patch # User casties # Date 1366918797 -7200 # Node ID 38cbbeaf266b911e75f166e3fe69bd1f8600e4cb # Parent b8ced08ebea9f71117d34098fb59fa0b1c59f147 more work on projects. responsibleScientistsList has new format. diff -r b8ced08ebea9 -r 38cbbeaf266b MPIWGProjects.py --- a/MPIWGProjects.py Thu Apr 25 12:07:56 2013 +0200 +++ b/MPIWGProjects.py Thu Apr 25 21:39:57 2013 +0200 @@ -20,7 +20,7 @@ import re import os import email -import xmlhelper # Methoden zur Verwaltung der projekt xml +import xmlhelper # Methoden zur Verwaltung der projekt xml import xmlrpclib import sys from types import * @@ -31,15 +31,15 @@ from Products.MPIWGBibliography.BibliographyManager import BibliographyManager from bibliography import * from Products.ZDBInterface.ZDBInterfaceFolder import ZDBInterfaceFolder -#import xml.dom.minidom -#from Ft.Xml.XPath import Evaluate -#from Ft.Xml.XPath.Context import Context -#from Ft.Xml.Domlette import NonvalidatingReader,PrettyPrint, Print -#from Ft.Xml import EMPTY_NAMESPACE -#import copy -#import updatePersonalWWW +# import xml.dom.minidom +# from Ft.Xml.XPath import Evaluate +# from Ft.Xml.XPath.Context import Context +# from Ft.Xml.Domlette import NonvalidatingReader,PrettyPrint, Print +# from Ft.Xml import EMPTY_NAMESPACE +# import copy +# import updatePersonalWWW -#import MPIWGStaff +# import MPIWGStaff from HashTree import HashTree from MPIWGHelper import * @@ -52,7 +52,25 @@ # TODO: fix this -fieldLabels={'WEB_title':'WEB_Title', +definedFields = ['WEB_title', + 'xdata_01', + 'xdata_02', + 'xdata_03', + 'xdata_04', + 'xdata_05', + 'xdata_06', + 'xdata_07', + 'xdata_08', + 'xdata_09', + 'xdata_10', + 'xdata_11', + 'xdata_12', + 'xdata_13', + 'WEB_project_header', + 'WEB_project_description', + 'WEB_related_pub'] + +fieldLabels = {'WEB_title':'WEB_Title', 'xdata_01':'Responsible Scientists', 'xdata_02':'Department', 'xdata_03':'Historical Persons', @@ -88,136 +106,136 @@ class MPIWGProject_publication(Folder): """publications object fuer project""" - meta_type="MPIWGProject_publication" - def redirect(self,RESPONSE,url): + meta_type = "MPIWGProject_publication" + def redirect(self, RESPONSE, url): """mache ein redirect mit einem angehaengten time stamp um ein reload zu erzwingen""" - timeStamp=time.time() + timeStamp = time.time() - if url.find("?")>-1: #giebt es schon parameter - addStr="&time=%s" + if url.find("?") > -1: # giebt es schon parameter + addStr = "&time=%s" else: - addStr="?time=%s" + addStr = "?time=%s" - RESPONSE.setHeader('Last-Modified',email.Utils.formatdate().split("-")[0]+'GMT') - logging.debug(email.Utils.formatdate()+' GMT') - RESPONSE.redirect(url+addStr%timeStamp) + RESPONSE.setHeader('Last-Modified', email.Utils.formatdate().split("-")[0] + 'GMT') + logging.debug(email.Utils.formatdate() + ' GMT') + RESPONSE.redirect(url + addStr % timeStamp) - def hasLinkToBookPage(self,mode="not_cached"): + 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 + if (getattr(self, 'link', '') == ''): + return False # es gibt keinen link - logging.debug("MPIWGProject_publication - begin hasLinkToBookPage:"+self.link) + logging.debug("MPIWGProject_publication - begin hasLinkToBookPage:" + self.link) server = xmlrpclib.ServerProxy(self.link) - if(mode=="cached"): - if (hasattr(self,"_v_hasLinkToBookPage")): + 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 + self._v_hasLinkToBookPage = True return True except: logging.debug("MPIWGProject_publication - end FALSE ") - self._v_hasLinkToBookPage=True + self._v_hasLinkToBookPage = True return False - def getImageUrls(self,mode="not_cached"): + def getImageUrls(self, mode="not_cached"): """get the image urls""" - if (getattr(self,'link','')==''): - return [] #es gibt keinen link + if (getattr(self, 'link', '') == ''): + return [] # es gibt keinen link server = xmlrpclib.ServerProxy(self.link) - if(mode=="cached"): - if (hasattr(self,"_v_imageUrls")): + if(mode == "cached"): + if (hasattr(self, "_v_imageUrls")): logging.debug("getImageURL cached") return self._v_imageUrls try: urls = server.getImageUrls() - ret=[] + ret = [] for url in urls: - url = os.path.join(self.link,url) + url = os.path.join(self.link, url) ret.append(url) except: - self._v_imageUrls=[] + self._v_imageUrls = [] return [] - self._v_imageUrls=ret[0:] + 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, link=None, RESPONSE=None): """edit a publication""" 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() if text: - self.text=text[0:] + self.text = text[0:] if description: - self.description=description + self.description = description if link: - self.link=link[0:] + self.link = link[0:] if image1: - if hasattr(self,'publicationImage1'): + if hasattr(self, 'publicationImage1'): self.publicationImage1.manage_upload(image1) else: - nO = Image('publicationImage1','',image1) - self._setObject('publicationImage1',nO) + nO = Image('publicationImage1', '', image1) + self._setObject('publicationImage1', nO) if image2: - if hasattr(self,'publicationImage2'): + if hasattr(self, 'publicationImage2'): self.publicationImage2.manage_upload(image2) else: - nO = Image('publicationImage2','',image2) - self._setObject('publicationImage2',nO) + nO = Image('publicationImage2', '', image2) + self._setObject('publicationImage2', nO) self.ZCacheable_invalidate() 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): + 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() + timeStamp = time.time() - if url.find("?")>-1: #giebt es schon parameter - addStr="&time=%s" + if url.find("?") > -1: # giebt es schon parameter + addStr = "&time=%s" else: - addStr="?time=%s" + addStr = "?time=%s" - RESPONSE.setHeader('Last-Modified',email.Utils.formatdate().split("-")[0]+'GMT') - logging.debug(email.Utils.formatdate()+' GMT') - RESPONSE.redirect(url+addStr%timeStamp) + 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): + 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) + pt = PageTemplateFile(os.path.join(package_home(globals()), 'zpt', 'edit_relatedProjectForm.zpt')).__of__(self) return pt() @@ -225,78 +243,78 @@ # hole die id des projektes - splitted=link.split("/") + splitted = link.split("/") - #teste ob es das project gibt - if len(splitted)<1: - self.redirect(RESPONSE,'errorRelatedProjects?link='+link) + # 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) + objid = splitted[-1] + object = getattr(self.projects, objid, None) - if object==None: - self.redirect(RESPONSE,'errorRelatedProjects?link='+link) + if object == None: + self.redirect(RESPONSE, 'errorRelatedProjects?link=' + link) - self.orginallink=link[0:] - self.objid=objid[0:] + self.orginallink = link[0:] + self.objid = objid[0:] - self.projectWEB_title=object.getContent('WEB_title')[0:] + self.projectWEB_title = object.getContent('WEB_title')[0:] - self.enabled=True; + self.enabled = True; self.ZCacheable_invalidate() if RESPONSE: - self.redirect(RESPONSE,"../manageRelatedProjects") + self.redirect(RESPONSE, "../manageRelatedProjects") class MPIWGProject_image(Image): """Images for Projects""" - meta_type="MPIWGProject_image" + meta_type = "MPIWGProject_image" - def showImage(self,imageUrl=None): + def showImage(self, imageUrl=None): """show Images at an extra page""" - self.getContent('WEB_project_description',filter='yes') #get the content and store image infos into session - pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','projectImageView.zpt')).__of__(self) + self.getContent('WEB_project_description', filter='yes') # get the content and store image infos into session + pt = PageTemplateFile(os.path.join(package_home(globals()), 'zpt', 'projectImageView.zpt')).__of__(self) return pt() - def editImage(self,file=None,caption=None,RESPONSE=None): + def editImage(self, file=None, caption=None, RESPONSE=None): """edit the Image""" if (not file) and (not caption): - pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','edit_imageForm.zpt')).__of__(self) + pt = PageTemplateFile(os.path.join(package_home(globals()), 'zpt', 'edit_imageForm.zpt')).__of__(self) return pt() - if file and (not file.filename.lstrip().rstrip()==""): + if file and (not file.filename.lstrip().rstrip() == ""): self.manage_upload(file) if caption: - self.caption=caption[0:] + self.caption = caption[0:] if RESPONSE: - self.redirect(RESPONSE,"../manageImages") + self.redirect(RESPONSE, "../manageImages") -class MPIWGProject(CatalogAware,Folder,Cacheable): +class MPIWGProject(CatalogAware, Folder, Cacheable): """Class for Projects""" security = ClassSecurityInfo() meta_type = 'MPIWGProject' - manage_options = Folder.manage_options+( - {'label':'Load New File','action':'loadNewFileForm'}, - {'label':'Edit','action':'editForm'}, + manage_options = Folder.manage_options + ( + {'label':'Load New File', 'action':'loadNewFileForm'}, + {'label':'Edit', 'action':'editForm'}, ) - #{'label':'Edit ProjectInfo','action':'editMPIWGProjectForm'}, - #{'label':'Edit BasisInfo','action':'editMPIWGBasisForm'}, - #{'label':'Edit Publications','action':'editMPIWGRelatedPublicationsForm'}, - #{'label':'Edit Themes & Disciplines','action':'editMPIWGDisciplinesThemesForm'}, - #{'label':'Versionmanager','action':'versionManageForm'}, + # {'label':'Edit ProjectInfo','action':'editMPIWGProjectForm'}, + # {'label':'Edit BasisInfo','action':'editMPIWGBasisForm'}, + # {'label':'Edit Publications','action':'editMPIWGRelatedPublicationsForm'}, + # {'label':'Edit Themes & Disciplines','action':'editMPIWGDisciplinesThemesForm'}, + # {'label':'Versionmanager','action':'versionManageForm'}, # enthaelt die Lister der verantwortlichen Wissenschaftler in der Form (NAME, KEY), key ist "" falls Wissenschaftler nicht an unserem Haus - responsibleScientistsList=[] + responsibleScientistsList = [] # # templates @@ -304,102 +322,112 @@ edit_css = ImageFile('css/edit.css', globals()) # make css refreshable for development edit_css.index_html = refreshingImageFileIndexHtml + edit_basic = PageTemplateFile('zpt/project/edit_basic', globals()) editForm = PageTemplateFile('zpt/project/edit_description', globals()) edit_template = PageTemplateFile('zpt/project/edit_template', globals()) + project_template = PageTemplateFile('zpt/project/project_template', globals()) + # TODO: compat edit_MPIWGProject_main = edit_template def __init__(self, id, argv=None): """initiere classe""" - - self.creationTime=time.strftime("%Y%m%d%H%M%S",time.localtime())[0:] - self.id=id - self.title=id - self.isActiveFlag=True #Flag is true is the project is still active, False if accomplished - self.responsibleScientistsList=[] # enthaelt die Lister der verantwortlichen Wissenschaftler in der Form (NAME, KEY), key ist "" flass Wissenschaftler nicht an unserem Haus + self.creationTime = time.strftime("%Y%m%d%H%M%S", time.localtime())[0:] + self.id = id + self.title = id + self.isActiveFlag = True # Flag is true is the project is still active, False if accomplished + self.responsibleScientistsList = [] # enthaelt die Lister der verantwortlichen Wissenschaftler in der Form (NAME, KEY), key ist "" flass Wissenschaftler nicht an unserem Haus if argv: for arg in definedFields: try: - setattr(self,arg,argv[arg]) + setattr(self, arg, argv[arg]) except: - setattr(self,arg,"") + setattr(self, arg, "") else: for arg in definedFields: - setattr(self,arg,'') + setattr(self, arg, '') - def redirect(self,RESPONSE,url): + def index_html(self): + """default html representation""" + # TODO: do we need to do date-stuff? + # get template + pt = getattr(self, 'project_template') + # render template + return pt() + + def redirect(self, RESPONSE, url): """mache ein redirect mit einem angehaengten time stamp um ein reload zu erzwingen""" - timeStamp=time.time() + timeStamp = time.time() - if url.find("?")>-1: #giebt es schon parameter - addStr="&time=%s" + if url.find("?") > -1: # giebt es schon parameter + addStr = "&time=%s" else: - addStr="?time=%s" + addStr = "?time=%s" - RESPONSE.setHeader('Last-Modified',email.Utils.formatdate().split("-")[0]+'GMT') - logging.debug(email.Utils.formatdate()+' GMT') - RESPONSE.redirect(url+addStr%timeStamp) + RESPONSE.setHeader('Last-Modified', email.Utils.formatdate().split("-")[0] + 'GMT') + logging.debug(email.Utils.formatdate() + ' GMT') + RESPONSE.redirect(url + addStr % timeStamp) - def decode(self,str): + def decode(self, str): """return unicode object""" return unicodify(str) - def isCheckField(self,fieldname): + def isCheckField(self, fieldname): """return chechfield""" return (fieldname in checkFields) - def sortedByPlace(self,metatype): + def sortedByPlace(self, metatype): """find metatype and sort by place""" - def sort(x,y): - return cmp(getattr(x[1],'place',0),getattr(y[1],'place',0)) + 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]); + 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) + logging.debug("MPIWGProjects end: sorted by place: " + metatype) return founds - def copyPublicationsToList(self,RESPONSE=None): + def copyPublicationsToList(self, RESPONSE=None): """copy publications in to list""" - publicationTxt=self.getContent('WEB_related_pub') + publicationTxt = self.getContent('WEB_related_pub') - pubSplits=publicationTxt.split("
") + pubSplits = publicationTxt.split("
") for pubSplit in pubSplits: - pubSplit=pubSplit.replace("
","") + pubSplit = pubSplit.replace("", "") self.addPublication(pubSplit) - setattr(self,"WEB_related_pub_copied",True); + setattr(self, "WEB_related_pub_copied", True); 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 + 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']); + 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 + if(len(publications) > 0): + ret = False; # es gibt publicationen in der neuen liste - logging.debug("len(publ)"+repr(ret)) + logging.debug("len(publ)" + repr(ret)) return ret; @@ -407,7 +435,7 @@ """test ob es digital sources gibt""" - ret = (self.getContent('xdata_11').lstrip().rstrip()=='') + ret = (self.getContent('xdata_11').lstrip().rstrip() == '') @@ -416,21 +444,21 @@ - def copyImageToMargin(self,RESPONSE=None): + def copyImageToMargin(self, RESPONSE=None): """copy inline images to marginal images""" - #getImages from WEB_project_description - description=self.getContent('WEB_project_description') + # getImages from WEB_project_description + description = self.getContent('WEB_project_description') - text2=description - splitted=text2.split("""""") + text2 = description + splitted = text2.split("""
""") - imageURLs=[] - imageCaptions=[] + imageURLs = [] + imageCaptions = [] for split in splitted[1:]: - tmp=split.split("
") - #return repr(splitted[1]) + tmp = split.split("") + # return repr(splitted[1]) try: imageURLs.append(tmp[0].split("\"")[1].encode('utf-8')) @@ -441,144 +469,144 @@ except: imageURLs.append("") - split2="".join(tmp[1:]) + split2 = "".join(tmp[1:]) - splitted=split2.split("""""") - if len(splitted)>1: - tmp=splitted[1].split("
") + splitted = split2.split("""""") + if len(splitted) > 1: + tmp = splitted[1].split("
") imageCaptions.append(tmp[0].encode('utf-8')) else: - #keine caption + # keine caption imageCaptions.append("") - #eintragen: + # eintragen: for imageURL in imageURLs: - filename=imageURL.split("/")[-1] - #lege neues images object an, mit leerem bild + filename = imageURL.split("/")[-1] + # lege neues images object an, mit leerem bild - if self.ZopeFind(self,obj_ids=[filename]): - #existiert das bild schon, dann neuen filenamen - filename="project_image_"+filename + if self.ZopeFind(self, obj_ids=[filename]): + # existiert das bild schon, dann neuen filenamen + filename = "project_image_" + filename - self.addImage(None,imageCaptions[imageURLs.index(imageURL)],filename=filename) - #hole die bilddaten aus der url - url=self.absolute_url()+"/"+imageURL - #url=self.absolute_url()+"/"+filename + self.addImage(None, imageCaptions[imageURLs.index(imageURL)], filename=filename) + # hole die bilddaten aus der url + url = self.absolute_url() + "/" + imageURL + # url=self.absolute_url()+"/"+filename - try:#relative url - data=urllib.urlopen(url).read() + try: # relative url + data = urllib.urlopen(url).read() except: - try:#absolute - data=urllib.urlopen(self.imageURL).read() + try: # absolute + data = urllib.urlopen(self.imageURL).read() except: - logger("MPIWG Project",logging.ERROR,"can't open: %s"%url) + logger("MPIWG Project", logging.ERROR, "can't open: %s" % url) - obj=getattr(self,filename) + obj = getattr(self, filename) obj.update_data(data) if RESPONSE: - self.redirect(RESPONSE,'manageImages') + self.redirect(RESPONSE, 'manageImages') - def manageImages(self,imageName=None,op=None): + def manageImages(self, imageName=None, op=None): """managage images""" if imageName and op: - if op=='up': - images=self.getImages() + if op == 'up': + images = self.getImages() for image in images: - if image[0]==imageName: - nr=images.index(image) - if not nr==0: - images[nr-1][1].place+=1 - images[nr][1].place-=1 + if image[0] == imageName: + nr = images.index(image) + if not nr == 0: + images[nr - 1][1].place += 1 + images[nr][1].place -= 1 pass - elif op=='down': - images=self.getImages() + elif op == 'down': + images = self.getImages() for image in images: - if image[0]==imageName: - nr=images.index(image) - if not (nr==len(images)-1): - images[nr+1][1].place-=1 - images[nr][1].place+=1 + if image[0] == imageName: + nr = images.index(image) + if not (nr == len(images) - 1): + images[nr + 1][1].place -= 1 + images[nr][1].place += 1 pass pt = PageTemplateFile('zpt/project/edit_images', globals()).__of__(self) return pt() - def managePublications(self,pubName=None,op=None): + def managePublications(self, pubName=None, op=None): """managage images""" if pubName and op: - if op=='up': - publications=self.getPublications() + if op == 'up': + publications = self.getPublications() for publication in publications: - if publication[0]==pubName: - nr=publications.index(publication) - if not nr==0: - publications[nr-1][1].place+=1 - publications[nr][1].place-=1 + if publication[0] == pubName: + nr = publications.index(publication) + if not nr == 0: + publications[nr - 1][1].place += 1 + publications[nr][1].place -= 1 pass - elif op=='down': - publications=self.getPublications() + elif op == 'down': + publications = self.getPublications() for publication in publications: - if publication[0]==pubName: - nr=publications.index(publication) - if not (nr==len(publications)-1): - publications[nr+1][1].place-=1 - publications[nr][1].place+=1 + if publication[0] == pubName: + nr = publications.index(publication) + if not (nr == len(publications) - 1): + publications[nr + 1][1].place -= 1 + publications[nr][1].place += 1 pass - pt=PageTemplateFile('zpt/project/edit_publications', globals()).__of__(self) + pt = PageTemplateFile('zpt/project/edit_publications', globals()).__of__(self) return pt() - def manageRelatedProjects(self,pubName=None,op=None): + def manageRelatedProjects(self, pubName=None, op=None): """managage relatedProjectd""" if pubName and op: - if op=='up': - relatedProjects=self.getRelatedProjects() + 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 + 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() + 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 + 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('zpt/project/edit_related_projects', globals()).__of__(self) + pt = PageTemplateFile('zpt/project/edit_related_projects', globals()).__of__(self) return pt() def hasExtendedPublicationList(self): """test if extended publication list exists""" - if not hasattr(self,"publicationList"): + if not hasattr(self, "publicationList"): return False else: return True - def createExtendedPublicationList(self,RESPONSE=None): + def createExtendedPublicationList(self, RESPONSE=None): """erzeuge erweiterte publications liste""" - pl = BibliographyManager("publicationList","","institutsbiblio",self.connection_id) + pl = BibliographyManager("publicationList", "", "institutsbiblio", self.connection_id) self._setObject("publicationList", pl) - zt=ZopePageTemplate('index.html') - pl._setObject('index.html',zt) + 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() @@ -586,126 +614,126 @@ if RESPONSE: - self.redirect(RESPONSE,"managePublications") + self.redirect(RESPONSE, "managePublications") def getPublications(self): """get all Publications""" - def sort_images(x,y): - return cmp(getattr(x[1],'place',0),getattr(y[1],'place',0)) + def sort_images(x, y): + return cmp(getattr(x[1], 'place', 0), getattr(y[1], 'place', 0)) - publications=self.ZopeFind(self,obj_metatypes=['MPIWGProject_publication']) + publications = self.ZopeFind(self, obj_metatypes=['MPIWGProject_publication']) 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)) + 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 = 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""" - number=self.getLastPublicationNumber()+1 - name="publication_"+str(number) - while hasattr(self,name): - number+=1 - name="publication_"+str(number) + number = 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) - self._setObject(name,newPublication) - obj=getattr(self,name) - obj.text=text[0:] - obj.enabled=True; - obj.place=self.getLastPublicationNumber()+1 - obj.id=name + self._setObject(name, newPublication) + obj = getattr(self, name) + obj.text = text[0:] + obj.enabled = True; + obj.place = self.getLastPublicationNumber() + 1 + obj.id = name self.ZCacheable_invalidate() if RESPONSE is not None: - self.redirect(RESPONSE,'managePublications') + self.redirect(RESPONSE, 'managePublications') - def errorRelatedProjects(self,link): + 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) + 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): + 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) + 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("/") + splitted = link.split("/") - #teste ob es das project gibt - if len(splitted)<1: - self.redirect(RESPONSE,'errorRelatedProjects?link='+link) + # 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) + objid = splitted[-1] + object = getattr(self.projects, objid, None) - if object==None: - self.redirect(RESPONSE,'errorRelatedProjects?link='+link) + if object == None: + self.redirect(RESPONSE, 'errorRelatedProjects?link=' + link) return - newPublication=MPIWGProject_relatedProject(name) + 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._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, 'manageRelatedProjects') def getLastPublicationNumber(self): - publications=self.getPublications() + publications = self.getPublications() if not publications: return 0 else: - return getattr(publications[-1][1],'place',0) + return getattr(publications[-1][1], 'place', 0) def getLastRelatedProjectNumber(self): - publications=self.getRelatedProjects() + publications = self.getRelatedProjects() if not publications: return 0 else: - return getattr(publications[-1][1],'place',0) + return getattr(publications[-1][1], 'place', 0) - def deletePublication(self,id,RESPONSE=None): + def deletePublication(self, id, RESPONSE=None): """delete Publication id""" self.manage_delObjects([id]) self.ZCacheable_invalidate() if RESPONSE: - self.redirect(RESPONSE,'managePublications') + self.redirect(RESPONSE, 'managePublications') - def deleteRelatedProject(self,id,RESPONSE=None): + def deleteRelatedProject(self, id, RESPONSE=None): """delete Publication id""" self.manage_delObjects([id]) self.ZCacheable_invalidate() if RESPONSE: - self.redirect(RESPONSE,'manageRelatedProjects') + self.redirect(RESPONSE, 'manageRelatedProjects') def getNumber(self): @@ -717,13 +745,61 @@ else: return n + + def getProjectTitle(self): + """returns the project title""" + t = getattr(self, 'WEB_title', None) + if isinstance(t, list): + # compat with old lists + return t[0] + else: + return t + + def getResponsibleScientists(self): + """returns the responsible scientists as string""" + t = getattr(self, 'xdata_01', None) + if isinstance(t, list): + # compat with old lists + return t[0] + else: + return t + + + def getResponsibleScientistsList(self): + """returns a list with the responsible scientists as dicts with name, key, and shortname""" + return self.responsibleScientistsList + + + def setResponsibleScientistsList(self, nameDict): + """sets the responsibleScientistsList from nameDict. + List will be ordered like the responsible scientists field.""" + names = self.getResponsibleScientists() + if names.find(";") > -1: # rate Trenner ist ; + nameList = names.split(";") + else: + nameList = names.split(",") + + scientistsList = [] + for name in nameList: + name = unicodify(name.strip()) + logging.debug("setResponsibleScientistsList: name=%s"%repr(name)) + if name in nameDict: + # found in data + data = nameDict[name] + scientistsList.append({'name': name, 'key': data['key'], 'username': data['username']}) + else: + scientistsList.append({'name': name}) + + logging.debug("setResponsibleScientistsList: nameDict=%s new list=%s"%(repr(nameDict),repr(scientistsList))) + self.responsibleScientistsList = scientistsList + def getUrl(self, baseUrl=None): """returns URL to this Project""" if baseUrl is None: return self.absolute_url() - return '%s/%s'%(baseUrl, self.getId()) + return '%s/%s' % (baseUrl, self.getId()) def getThumbUrl(self, default='http://defaultthumb.jpg'): @@ -741,99 +817,99 @@ """returns the sorted list of images for this project""" items = self.objectValues(spec='MPIWGProject_image')[:] # sort by place - items.sort(key=lambda x:int(getattr(x,'place',0))) + items.sort(key=lambda x:int(getattr(x, 'place', 0))) return items def getImages(self): """get all Images""" - def sort_images(x,y): - return cmp(getattr(x[1],'place',0),getattr(y[1],'place',0)) + def sort_images(x, y): + return cmp(getattr(x[1], 'place', 0), getattr(y[1], 'place', 0)) - if (getattr(self,'imageURL','')!='') or (getattr(self,'imagecap','')!='') : + if (getattr(self, 'imageURL', '') != '') or (getattr(self, 'imagecap', '') != '') : try: - self.addImage(None,getattr(self,'imagecap',''),RESPONSE=None,filename=getattr(self,'imageURL','')) + self.addImage(None, getattr(self, 'imagecap', ''), RESPONSE=None, filename=getattr(self, 'imageURL', '')) except: pass - self.imageURL='' - self.imagecap='' + self.imageURL = '' + self.imagecap = '' - images=self.ZopeFind(self,obj_metatypes=['MPIWGProject_image']) + images = self.ZopeFind(self, obj_metatypes=['MPIWGProject_image']) images.sort(sort_images) return images def getLastImageNumber(self): - images=self.getImages() + images = self.getImages() if not images: return 0 else: - return getattr(images[-1][1],'place',0) + return getattr(images[-1][1], 'place', 0) - def deleteImage(self,id,RESPONSE=None): + def deleteImage(self, id, RESPONSE=None): """delete Image id""" try: self.manage_delObjects([id]) except: - logging.error("ERROR MPIWG: %s %s"%sys.exc_info()[0:2]) + logging.error("ERROR MPIWG: %s %s" % sys.exc_info()[0:2]) if RESPONSE: - self.redirect(RESPONSE,'manageImages') + self.redirect(RESPONSE, 'manageImages') - def hasChildren(self,date=None,onlyActive=1,onlyArchived=1): + def hasChildren(self, date=None, onlyActive=1, onlyArchived=1): """check if project has children""" - ct=self.getContexts(childs=self.getContent('xdata_05'), - depth=1,date=date,onlyActive=onlyActive) + ct = self.getContexts(childs=self.getContent('xdata_05'), + depth=1, date=date, onlyActive=onlyActive) - if ct and len(ct)>0: + if ct and len(ct) > 0: return True else: return False - def addImage(self,fileHd,caption,RESPONSE=None,filename=None): + def addImage(self, fileHd, caption, RESPONSE=None, filename=None): """add an MPIWG_Project_image""" if not filename: - filename=fileHd.filename + filename = fileHd.filename if not fileHd: - fileHd=file(os.path.join(package_home(globals()),'blank.gif')) + fileHd = file(os.path.join(package_home(globals()), 'blank.gif')) - newImage=MPIWGProject_image(filename,filename,fileHd) + newImage = MPIWGProject_image(filename, filename, fileHd) - self._setObject(filename,newImage) - obj=getattr(self,filename) - obj.caption=caption[0:] - obj.enabled=True; - obj.place=self.getLastImageNumber()+1 - obj.id=filename + self._setObject(filename, newImage) + obj = getattr(self, filename) + obj.caption = caption[0:] + obj.enabled = True; + obj.place = self.getLastImageNumber() + 1 + obj.id = filename if RESPONSE is not None: - self.redirect(RESPONSE,'manageImages') + self.redirect(RESPONSE, 'manageImages') def versionHeader(self): """version Header, gibt header text entsprechend der aktuellen version aus""" - actualTime=time.localtime() - retTXT="""""") - if len(splitted)>1: - tmp=splitted[1].split("
") - #return repr(splitted[1]) + splitted = text2.split("""""") + if len(splitted) > 1: + tmp = splitted[1].split("
") + # return repr(splitted[1]) try: - self.imageURL=tmp[0].split("\"")[1].encode('utf-8') + self.imageURL = tmp[0].split("\"")[1].encode('utf-8') except: try: - self.imageURL=tmp[0].split("src=")[1].split(" ")[0].encode('utf-8') + self.imageURL = tmp[0].split("src=")[1].split(" ")[0].encode('utf-8') except: - self.imageURL="" + self.imageURL = "" - split2="".join(tmp[1:]) + split2 = "".join(tmp[1:]) - text3=splitted[0]+split2 + text3 = splitted[0] + split2 - splitted=text3.split("""""") - if len(splitted)>1: - tmp=splitted[1].split("
") - self.imagecap=tmp[0].encode('utf-8') + splitted = text3.split("""""") + if len(splitted) > 1: + tmp = splitted[1].split("
") + self.imagecap = tmp[0].encode('utf-8') - split4="".join(tmp[1:]) + split4 = "".join(tmp[1:]) - text5=splitted[0]+split4 + text5 = splitted[0] + split4 else: - #keine caption - text5=text3 + # keine caption + text5 = text3 else: - #kein bild - text5=text2 + # kein bild + text5 = text2 else: - text5=text2 + text5 = text2 - #teste ob WEB_project_description und keine fuehrenden p tags - if (len(text5)>4) and (not text5[0:3]=='') and (field=='WEB_project_description'): - text5= "
"+text5+"
" + # teste ob WEB_project_description und keine fuehrenden p tags + if (len(text5) > 4) and (not text5[0:3] == '') and (field == 'WEB_project_description'): + text5 = "
" + text5 + "
" - #filter image + # filter image - text5=text5.lstrip().rstrip() #loescher leerzeichen und einzelndes br - if (text5=="