--- MPIWGWeb/MPIWGProjects.py 2005/06/20 17:11:46 1.47.2.14 +++ MPIWGWeb/MPIWGProjects.py 2005/09/14 20:45:56 1.47.2.22 @@ -7,6 +7,7 @@ from Products.PageTemplates.PageTemplate from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate from Products.ZSQLExtend.ZSQLExtend import ZSQLExtendFolder from Products.ZCatalog.CatalogPathAwareness import CatalogAware +from OFS.Image import Image from Globals import package_home import urllib import MPIWGStaff @@ -19,7 +20,7 @@ import xmlhelper # Methoden zur Verwaltu from OFS.SimpleItem import SimpleItem from OFS.Folder import Folder from Products.ZSQLMethods.SQL import SQLConnectionIDs - +from AccessControl import ClassSecurityInfo from bibliography import * import time @@ -66,6 +67,14 @@ class MPIWGLink(SimpleItem): meta_type="MPIWGLink" + def isActiveItem(self): + """teste ob ausgewaehlt""" + #url1 beim link anstelle von url1, da link jeweils index_html als url hat. + if self.absolute_url()==self.REQUEST['URL1']: + return "aktiv" + else: + return "" + def __init__(self,id,link,title='',weight=''): """init mpiwglink""" self.id=id @@ -83,10 +92,11 @@ class MPIWGLink(SimpleItem): ## return eval("self"+objpath) - splitted=self.link.split("/") + splitted=self.link.lstrip().split("/") obj=self for x in splitted: - obj=getattr(obj,x) + if not x=="": + obj=getattr(obj,x) return obj @@ -172,7 +182,7 @@ class MPIWGTemplate(ZopePageTemplate): """change form""" - def isActive(self): + def isActiveItem(self): """teste ob ausgewaehlt""" if self.absolute_url()==self.REQUEST['URL']: return "aktiv" @@ -235,7 +245,7 @@ class MPIWGRoot(ZSQLExtendFolder): fieldLabels={'WEB_title':'WEB_Title','xdata_01':'Responsible Scientists','xdata_02':'Department', 'xdata_03':'Historical Persons','xdata_04':'Time period', 'xdata_05':'Sorting number','xdata_06':'Keywords','xdata_07':'Short title', - 'xdata_08':'Other involved scholars' ,'xdata_09':'Part of','xdata_10':'Covered by', + 'xdata_08':'Other involved scholars' ,'xdata_09':'Disciplines','xdata_10':'Themes', 'xdata_11':'Object Digitallibrary','xdata_12':'Cooperation partners', 'xdata_13':'Funding institutions','WEB_project_header':'WEB_project_header', 'WEB_project_description':'WEB_project_description','WEB_related_pub':'WEB_related_pub'} @@ -243,6 +253,26 @@ class MPIWGRoot(ZSQLExtendFolder): folders=['MPIWGProject','Folder','ECHO_Navigation'] meta_type='MPIWGRoot' + def versionHeaderEN(self): + """version header text""" + + date= self.REQUEST.get('date',None) + if date: + txt="""

This pages shows the project which existed at %s

"""%str(date) + return txt + return "" + + def versionHeaderDE(self): + """version header text""" + date= self.REQUEST.get('date',None) + if date: + txt="""

Auf dieser Seite finden Sie die Projekte mit Stand vom %s

"""%str(date) + return "" + + def queryLink(self,link): + """append querystring to the link""" + return "%s?%s"%(link,self.REQUEST.get('QUERY_STRING','')) + def getKategory(self,url): """kategorie""" splitted=url.split("/") @@ -250,14 +280,18 @@ class MPIWGRoot(ZSQLExtendFolder): def generateUrlProject(self,url,project=None): """erzeuge aus absoluter url, relative des Projektes""" - - splitted=url.split("/") - length=len(splitted) - short=splitted[length-2:length] if project: - base=self.REQUEST['URL3']+"/"+"/".join(short) + splitted=url.split("/") + length=len(splitted) + short=splitted[length-2:length] + + base=self.REQUEST['URL3']+"/"+"/".join(short) + else: - base=self.REQUEST['URL1']+"/"+"/".join(short) + findPart=url.find("/projects/") + base=self.REQUEST['URL1']+"/"+url[findPart:] + + return base def isNewCapital(self,text=None,reset=None): @@ -271,15 +305,31 @@ class MPIWGRoot(ZSQLExtendFolder): else: return False - def subNav(self,id): + def subNav(self,obj): """return subnav elemente""" def sortWeight(x,y): x1=int(getattr(x[1],'weight','0')) y1=int(getattr(y[1],'weight','0')) return cmp(x1,y1) - if hasattr(self,id): - subs=self.ZopeFind(getattr(self,id),obj_metatypes=['MPIWGTemplate']) + #if obj.meta_type in ['MPIWGTemplate','MPIWGLink']: + # id=obj.aq_parent.getId() + #else: + + #id=obj.getId() + + + #suche die zweite ebene + if not obj.aq_parent.getId() in ['de','en']: + obj=obj.aq_parent + + while not self.ZopeFind(self,obj_ids=[obj.getId()]): + obj=obj.aq_parent + + if hasattr(self,obj.getId()): + + subs=self.ZopeFind(getattr(self,obj.getId()),obj_metatypes=['MPIWGTemplate','MPIWGLink']) subret=[] + for x in subs: if not(x[1].title==""): subret.append(x) @@ -287,6 +337,7 @@ class MPIWGRoot(ZSQLExtendFolder): return subret else: return None + def isActive(self,name): """teste ob subnavigation aktiv""" for part in self.REQUEST['URL'].split("/"): @@ -491,7 +542,7 @@ class MPIWGRoot(ZSQLExtendFolder): pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','editHistoricalPersonsForm')).__of__(self) return pt() - def getProjectsByFieldContent(self,fieldName,fieldContentsEntry): + def getProjectsByFieldContent(self,fieldName,fieldContentsEntry, date=None): """gib alle Projekte aus mit Value von field mit fieldName enthält ein Element der Liste fieldContents""" def sort(x,y): return cmp(x.WEB_title[0],y.WEB_title[0]) @@ -506,7 +557,15 @@ class MPIWGRoot(ZSQLExtendFolder): fieldContents.append(" AND ".join(x.split())) projects=self.ProjectCatalog({fieldName:string.join(fieldContents,' AND')}) #print projects - ret=[x for x in projects] + #ret=[x for x in projects] + ret=[] + for x in projects: + obj=x.getObject() + obj=obj.getActualVersion(date) + if obj and (not getattr(obj,'invisible',None)): + #if not (x in ret): + ret.append(x) + ret.sort(sort) return ret @@ -539,19 +598,20 @@ class MPIWGRoot(ZSQLExtendFolder): """test""" return self.getProjectsByFieldContent('xdata_09',['biology'])[0].absolute_url - def getContexts(self,childs=None,parents=None,depth=None): + def getContexts(self,childs=None,parents=None,depth=None,date=None): """childs alle childs, alle parents""" ret=[] + if parents: splitted=parents.split(".") parentId=string.join(splitted[0:len(splitted)-1],".") - for project in self.getProjectFields('xdata_05',sort='int'): + for project in self.getProjectFields('xdata_05',sort='int',date=date): if project[1]==parentId: ret.append(project) if childs: - for project in self.getProjectFields('xdata_05',sort='int'): + for project in self.getProjectFields('xdata_05',sort='int',date=date): searchStr=childs+"(\..*)" if re.match(searchStr,project[1]): @@ -564,7 +624,7 @@ class MPIWGRoot(ZSQLExtendFolder): ret.append(project) return ret - def getProjectFields(self,fieldName,actual="yes",folder=None,sort=None): + def getProjectFields(self,fieldName,date=None,folder=None,sort=None): """getListofFieldNames""" ret=[] @@ -573,8 +633,8 @@ class MPIWGRoot(ZSQLExtendFolder): for object in objects: obj=object[1] - - if (not getattr(obj,'invisible',None)) and (obj.isActual()): + obj=obj.getActualVersion(date) + if obj and (not getattr(obj,'invisible',None)): if fieldName=="WEB_title_or_short": if len(obj.getContent('xdata_07'))<3: # hack weil z.Z. manchmal noch ein Trennzeichen ; oder , im Feld statt leer @@ -597,7 +657,7 @@ class MPIWGRoot(ZSQLExtendFolder): def showNewProjects(self): projects=[] for objs in self.getProjectFields('WEB_title_or_short'): # Get all Projets - if objs[0].xdata_05[0] == "": + if objs[0].xdata_05 and (objs[0].xdata_05[0] == ""): projects.append(objs) @@ -711,10 +771,11 @@ class MPIWGRoot(ZSQLExtendFolder): return entry - def getTree(self): + def getTree(self,date=None): """generate Tree from project list""" + returnList=[] - for project in self.getProjectFields('xdata_05',sort="int"): # get Projects sorted by xdata_05 + for project in self.getProjectFields('xdata_05',sort="int",date=date): # get Projects sorted by xdata_05 for idNr in project[1].split(";"): # more than one number if not idNr=="": @@ -777,7 +838,10 @@ class MPIWGRoot(ZSQLExtendFolder): department=element[3].getContent('xdata_05') ret+="""
%s: """%(department,departmentName[department]) - ret+="""%s"""%(self.generateUrlProject(element[3].absolute_url())+"/index.html",element[3].getContent('WEB_title')) + if self.REQUEST.has_key('date'): + ret+="""%s"""%(self.generateUrlProject(element[3].absolute_url())+"/index.html",self.REQUEST['date'],element[3].getContent('WEB_title')) + else: + ret+="""%s"""%(self.generateUrlProject(element[3].absolute_url())+"/index.html",element[3].getContent('WEB_title')) return ret def formatElementForOverview(self,element): @@ -838,8 +902,9 @@ class MPIWGRoot(ZSQLExtendFolder): for idNr in form.keys(): - fields[int(idNr)][3].xdata_05=form[idNr] - + if not (fields[int(idNr)][3].xdata_05==form[idNr]): + fields[int(idNr)][3].xdata_05=form[idNr] + fields[int(idNr)][3].copyObjectToArchive() if RESPONSE is not None: @@ -919,17 +984,17 @@ class MPIWGRoot(ZSQLExtendFolder): ret.append("%s"%person) return string.join(ret,";") - def getProjectsOfMembers(self): + def getProjectsOfMembers(self,date=None): """give tuple member /projects""" ret=[] members=self.getAllMembers() #return str(members) for x in members: - ret+=self.getProjectsOfMember(name=x) + ret+=self.getProjectsOfMember(name=x,date=date) return ret - def getProjectsOfMember(self,name=None,email=None): + def getProjectsOfMember(self,name=None,email=None,date=None): """get project of a member""" def sortP(x,y): """sort by sorting number""" @@ -940,7 +1005,7 @@ class MPIWGRoot(ZSQLExtendFolder): ret=[] splitNeu=[] if email: - print "IIII:",self.getId() + members=self.ZopeFind(self.members,obj_metatypes=['MPIWGStaff'],obj_ids=[email],search_sub=1) name = members[0][1].title.decode('utf-8') @@ -958,8 +1023,7 @@ class MPIWGRoot(ZSQLExtendFolder): if proj: proj2=[] for x in proj: - - if not getattr(x.getObject(),'invisible',None): + if (not getattr(x.getObject(),'invisible',None)) and (getattr(x.getObject(),'archiveTime','')==''): if not((splitted[1]==" Christoph") and (splitted[0]=="Hoffmann") and (str(x.WEB_title).find('Einstein')>0)): proj2.append(x) @@ -970,8 +1034,8 @@ class MPIWGRoot(ZSQLExtendFolder): if proj: names=[x.WEB_title for x in proj] for x in proj: - - if not x.WEB_title in names: + + if (not x.WEB_title in names) and (getattr(x.getObject(),'archiveTime','')==''): proj2.append(x) @@ -1074,12 +1138,248 @@ def manage_addMPIWGRoot(self,id,title,co RESPONSE.redirect('manage_main') +class MPIWGProject_publication(SimpleItem): + """publications object fuer project""" + + meta_type="MPIWGProject_publication" + + def editPublication(self,text=None,RESPONSE=None): + """edit a publication""" + + if (not text): + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','edit_publicationForm.zpt')).__of__(self) + return pt() + + + self.text=text[0:] + + if RESPONSE: + RESPONSE.redirect("../managePublications") + +class MPIWGProject_image(Image): + """Images for Projects""" + + meta_type="MPIWGProject_image" + + 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) + return pt() + + 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) + return pt() + + if file and (not file.filename.lstrip().rstrip()==""): + self.manage_upload(file) + + if caption: + self.caption=caption[0:] + + if RESPONSE: + RESPONSE.redirect("../manageImages") + class MPIWGProject(CatalogAware,Folder): """Class for Projects""" + + security=ClassSecurityInfo() meta_type='MPIWGProject' default_catalog='ProjectCatalog' + + 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)) + + founds=self.ZopeFind(self,obj_metatypes=[metatype]); + + founds.sort(sort) + + return founds + + def copyPublicationsToList(self,RESPONSE=None): + """copy publications in to list""" + + publicationTxt=self.getContent('WEB_related_pub') + + pubSplits=publicationTxt.split("

") + + for pubSplit in pubSplits: + pubSplit=pubSplit.replace("

","") + self.addPublication(pubSplit) + + if RESPONSE: + RESPONSE.redirect('managePublications') + + + def copyImageToMargin(self,RESPONSE=None): + """copy inline images to marginal images""" + self.getContent('WEB_project_description',filter='yes') + + filename=self.imageURL.split("/")[-1] + #lege neues images object an, mit leerem bild + + if self.ZopeFind(self,obj_ids=[filename]): + #existiert das bild schon, dann neueun filenamen + filename="project_image_"+filename + + self.addImage(None,self.imagecap,filename=filename) + #hole die bilddaten aus der url + data=urllib.urlopen(self.absolute_url()+"/"+self.imageURL).read() + + obj=getattr(self,filename) + obj.update_data(data) + + if RESPONSE: + RESPONSE.redirect('manageImages') + + def manageImages(self,imageName=None,op=None): + """managage images""" + + + if imageName and op: + 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 + pass + 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 + pass + + + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','MPIWGProject_manageImagesForm.zpt')).__of__(self) + return pt() + + def managePublications(self,pubName=None,op=None): + """managage images""" + + + if pubName and op: + 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 + pass + 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 + pass + + + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','MPIWGProject_managePublicationsForm.zpt')).__of__(self) + return pt() + + def getPublications(self): + """get all Publications""" + def sort_images(x,y): + return cmp(getattr(x[1],'place',0),getattr(y[1],'place',0)) + print self.getId() + publications=self.ZopeFind(self,obj_metatypes=['MPIWGProject_publication']) + + publications.sort(sort_images) + return publications + + def addPublication(self,text,RESPONSE=None): + """add an MPIWG_Publication""" + + name="publication_"+str(self.getLastPublicationNumber()+1) + + 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 + + if RESPONSE is not None: + RESPONSE.redirect('managePublications') + + + def getLastPublicationNumber(self): + publications=self.getPublications() + + if not publications: + return 0 + else: + return getattr(publications[-1][1],'place',0) + + def deletePublication(self,id,RESPONSE=None): + """delete Publication id""" + self.manage_delObjects([id]) + if RESPONSE: + RESPONSE.redirect('managePublications') + + def getImages(self): + """get all Images""" + def sort_images(x,y): + return cmp(getattr(x[1],'place',0),getattr(y[1],'place',0)) + print self.getId() + images=self.ZopeFind(self,obj_metatypes=['MPIWGProject_image']) + + images.sort(sort_images) + return images + + def getLastImageNumber(self): + images=self.getImages() + + if not images: + return 0 + else: + return getattr(images[-1][1],'place',0) + + def deleteImage(self,id,RESPONSE=None): + """delete Image id""" + self.manage_delObjects([id]) + if RESPONSE: + RESPONSE.redirect('manageImages') + + def addImage(self,fileHd,caption,RESPONSE=None,filename=None): + """add an MPIWG_Project_image""" + + if not filename: + filename=fileHd.filename + + if not fileHd: + fileHd=file(os.path.join(package_home(globals()),'blank.gif')) + + 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 + + if RESPONSE is not None: + RESPONSE.redirect('manageImages') + def PrincipiaSearchSource(self): """Return cataloguable key for ourselves.""" return str(self) @@ -1095,6 +1395,47 @@ class MPIWGProject(CatalogAware,Folder): return retTXT%(s,s) else: return "" + + def getActualVersion(self,date=None): + """actuelle version""" + def sortProjectsByTime(x,y): + return cmp(x[1].archiveTime,y[1].archiveTime) + + if not date: + if self.isActual(): + return self + else: + return None + + #suche ob aeltere versionen vorhanden sind + + finds=self.ZopeFind(self,obj_metatypes=['MPIWGProject']) + if not finds: #wenn nicht dann teste ob die aktuelle version schon existiert hat. + ad=getattr(self,'creationTime','20050101000000') + if int(date)>int(ad): + return self + else: + return None + + + else: + finds.sort(sortProjectsByTime) + + for find in finds: + #gehe durch die alten Projekte und finde das entprechende + if (int(find[1].archiveTime) > int(date)) and (int(date)>int(getattr(find[1],'creationTime','20050101000000'))): + return find[1] + + #kein passendes gefunden, dann teste ob das aktuelle in frage kommt + ad=getattr(self,'creationTime','20050101000000') + + if int(date)>int(ad): + + return self + else: + return None + + def isActual(self): """gibt 1 zurueck wenn aktuell, 0 sonst""" actualTime=time.localtime() @@ -1171,8 +1512,9 @@ class MPIWGProject(CatalogAware,Folder): RESPONSE.redirect('manage_main') def __init__(self, id, argv=None): - """initieriere classe""" - + """initiere classe""" + + self.creationTime=time.strftime("%Y%m%d%H%M%S",time.localtime())[0:] self.id=id self.title=id if argv: @@ -1201,36 +1543,59 @@ class MPIWGProject(CatalogAware,Folder): def sortProjectsByTime(x,y): return cmp(x[1].archiveTime,y[1].archiveTime) - + + #suche ob aeltere versionen vorhanden sind + finds=self.ZopeFind(self,obj_metatypes=['MPIWGProject']) - if not finds: - return self.absolute_url() + if not finds: #wenn nicht dann teste ob die aktuelle version schon existiert hat. + ad=getattr(self,'creationTime','20050101000000') + if int(date)>int(ad): + return self.REQUEST['URL1']+"/"+self.getId() + else: + return self.REQUEST['URL1']+"/no_project" + + else: finds.sort(sortProjectsByTime) for find in finds: - if int(find[1].archiveTime) > int(date): - return find[1].absolute_url() + #gehe durch die alten Projekte und finde das entprechende + if (int(find[1].archiveTime) > int(date)) and (int(date)>int(getattr(find[1],'creationTime','20050101000000'))): + return self.REQUEST['URL1']+"/"+find[1].getId() - return self.absolute_url() + #kein passendes gefunden, dann teste ob das aktuelle in frage kommt + ad=getattr(self,'creationTime','20050101000000') - - - def index_html(self): - """show homepage""" + if int(date)>int(ad): - if self.REQUEST.has_key('date') and self.REQUEST.SESSION.get('MPI_redirected',None)==None: - self.REQUEST.SESSION['MPI_redirected']=1 - self.REQUEST.RESPONSE.redirect(self.checkDate(self.REQUEST['date'])) + return self.REQUEST['URL1']+"/"+self.getId() else: - self.REQUEST.SESSION['MPI_redirected']=None + return self.REQUEST['URL1']+"/no_project" - ext=self.ZopeFind(self.aq_parent,obj_ids=["project_main"]) - + + def no_project(self): + """warnung: project noch nicht existent""" + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','no_project')).__of__(self) + return pt() + + def index_html(self,request=True,context=None): + """show homepage""" + if not context: + context=self + if request: + if self.REQUEST.has_key('date') and self.REQUEST.SESSION.get('MPI_redirected',None)==None: + self.REQUEST.SESSION['MPI_redirected']=1 + self.REQUEST.RESPONSE.redirect(self.checkDate(self.REQUEST['date'])+"?date="+self.REQUEST['date']) + else: + self.REQUEST.SESSION['MPI_redirected']=None + + #ext=self.ZopeFind(self.aq_parent,obj_ids=["project_main"]) + ext=getattr(self,"project_main",None) if ext: - return getattr(self,ext[0][1].getId())() + return getattr(self,ext.getId())() + + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','project_main')).__of__(context) - pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','project_main')).__of__(self) return pt() @@ -1330,19 +1695,74 @@ class MPIWGProject(CatalogAware,Folder): pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','projectImageView.zpt')).__of__(self) return pt() - + def show_html(self): """simple index""" #return "HI" pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','MPIWGProject_index.zpt')).__of__(self) return pt() + def saveFromPreview(self): + """save content aus preview""" + self.WEB_project_description=self.previewTemplate.WEB_project_description[0:] + self.REQUEST.RESPONSE.redirect("./index.html") + + def saveEditedContent(self,kupu=None,preview=None): + """save Edited content""" + + kupu=preview + #find content of body tags + start=kupu.find("") + end=kupu.find("") + newcontent= kupu[start+6:end] + + if preview: + return self.preview(newcontent) + + self.WEB_project_description=newcontent[0:] + + self.REQUEST.RESPONSE.redirect("./edit") + + return True + + security.declareProtected('View managment screens','edit') + def edit(self): + """Edit pages""" + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','edit_MPIWGProjectNeu.zpt')).__of__(self) + return pt() + + def preview(self,description): + """preview""" + tmpPro=getattr(self,"previewTemplate",None) + if not tmpPro: + tmpPro=MPIWGProject("previewTemplate") + self._setObject("previewTemplate",tmpPro) + for field in definedFields: + setattr(tmpPro,field,getattr(self,field)) + tmpPro.WEB_project_description=description[0:] + + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','previewFrame.zpt')).__of__(self) + return pt() + + #return self.REQUEST.RESPONSE.redirect(self.REQUEST['URL1']+"/previewTemplate") + + + def getWebProject_description(self): + """get description""" + + if type(self.WEB_project_description) is ListType: + return ""+self.WEB_project_description[0]+"" + else: + return self.WEB_project_description + + def editMPIWGProjectForm(self): """editform""" pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','edit_MPIWGProject.zpt')).__of__(self) return pt() - def editMPIWGProject(self,RESPONSE=None): + + def editMPIWGProject(self,RESPONSE=None,fromEdit=None): """edit the project and archive the old version""" self.copyObjectToArchive() # archive the object @@ -1353,17 +1773,29 @@ class MPIWGProject(CatalogAware,Folder): setattr(self,x,[self.REQUEST[x].decode('utf-8')]) + if fromEdit and (RESPONSE is not None): + RESPONSE.redirect('./editMPIWGBasisEditor') + + else: + if RESPONSE is not None: + RESPONSE.redirect('manage_main') - - if RESPONSE is not None: - RESPONSE.redirect('manage_main') + + security.declareProtected('View managment screens','editMPIWGDisciplinesThemesEditor') + def editMPIWGDisciplinesThemesEditor(self): + """edit from edit""" + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','edit_MPIWGDisciplinesThemesNeu.zpt')).__of__(self) + return pt() + + def editMPIWGDisciplinesThemesForm(self): """edit the disciplines and themes Form""" + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','edit_MPIWGDisciplinesThemes.zpt')).__of__(self) return pt() - def editMPIWGDisciplinesThemes(self,disciplines=None,themes=None,RESPONSE=None): + def editMPIWGDisciplinesThemes(self,disciplines=None,themes=None,RESPONSE=None,fromEdit=None): """edit disciplin and form""" if disciplines: if type(disciplines) is StringType: @@ -1379,9 +1811,13 @@ class MPIWGProject(CatalogAware,Folder): self.xdata_10=string.join(themes,";") else: self.xdata_10="" - - if RESPONSE is not None: - RESPONSE.redirect('manage_main') + + if fromEdit and (RESPONSE is not None): + RESPONSE.redirect('./editMPIWGDisciplinesThemesEditor') + + else: + if RESPONSE is not None: + RESPONSE.redirect('manage_main') def isChecked(self,wert,list): @@ -1399,11 +1835,20 @@ class MPIWGProject(CatalogAware,Folder): if (not x==u'') and x in wert: return 1 return 0 + + security.declareProtected('View management screens','editMPIWGBasisEditor') + def editMPIWGBasisEditor(self): + """editform""" + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','edit_MPIWGBasisNeu.zpt')).__of__(self) + return pt() + def editMPIWGBasisForm(self): """editform""" pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','edit_MPIWGBasis.zpt')).__of__(self) return pt() + + def editMPIWGRelatedPublicationsForm(self): """Edit related Publications""" pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','edit_MPIWGRelatedPublications.zpt')).__of__(self) @@ -1461,6 +1906,6 @@ def manage_addMPIWGProject(self,id,RESPO self._setObject(id,newObj) - + if RESPONSE is not None: RESPONSE.redirect('manage_main')