"""This contains the class MPIWG Projects for organizing and maintaining the different project pages """ #TODO: mechanismus fur links to personen ueberarbeiten, da jetzt alle e_mails als members auftauchen unabhaengig vom status publish_the_data from Products.PageTemplates.PageTemplateFile import PageTemplateFile from Products.PageTemplates.PageTemplate import 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 import string import re import os from types import * import zLOG import xmlhelper # Methoden zur Verwaltung der projekt xml 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 import xml.dom.minidom import sys 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'] checkFields = ['xdata_01'] def getTextFromNode(nodename): nodelist=nodename.childNodes rc = "" for node in nodelist: if node.nodeType == node.TEXT_NODE: rc = rc + node.data return rc def sortF(x,y): try: return cmp(x[1],y[1]) except: try: return cmp(str(x[1]),str(y[1])) except: return 0 def sortI(x,y): xsplit=x[1].split(".") ysplit=y[1].split(".") xret="" yret="" try: for i in range(5): try: yret=yret+"%04i"%int(xsplit[i]) except: yret=yret+"%04i"%0 try: xret=xret+"%04i"%int(ysplit[i]) except: xret=xret+"%04i"%0 return cmp(int(yret),int(xret)) except: return cmp(x[1],y[1]) class MPIWGLink(SimpleItem): """create a symbolic link to another page""" 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 self.link=link self.title=title self.weight=weight def getObj(self): """bekomme original""" ## objpath=self.link.replace("/",".") ## if objpath[0]!=".": ## objpath="."+objpath ## print objpath ## return eval("self"+objpath) splitted=self.link.lstrip().split("/") obj=self for x in splitted: if not x=="": obj=getattr(obj,x) return obj def getWeight(self): if self.linkWeight and linkWeight!="": return self.linkWeight else: return self.getObj().weight manage_options=SimpleItem.manage_options+( {'label':'main config','action':'changeLinkForm'}, ) def changeLinkForm(self): """change MPIWG link""" pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','MPIWGLinkChange.zpt')).__of__(self) return pt() def changeLink(self,link,title,weight,RESPONSE=None): """change links""" self.link=link self.title=title self.weight=weight if RESPONSE is not None: RESPONSE.redirect('manage') def index_html(self): """index""" return self.getObj().pt_render(extra_context={'here':self}) def manage_addMPIWGLinkForm(self): """Form for adding link""" pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt/AddMPIWGLink.zpt')).__of__(self) return pt() def manage_addMPIWGLink(self,id,link,title,weight,RESPONSE=None): """add link""" newObj=MPIWGLink(id,link,title,weight) self._setObject(id,newObj) if RESPONSE is not None: RESPONSE.redirect('manage_main') class MPIWGTemplate(ZopePageTemplate): """Create a layout Template for different purposes""" meta_type="MPIWGTemplate" manage_options=ZopePageTemplate.manage_options+( {'label':'Change Weight','action':'changeWeightForm'}, ) def changeWeightForm(self): """change weight form""" pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','MPIWGTemplateChangeWeight.zpt')).__of__(self) return pt() def changeWeight(self,weight,RESPONSE=None): """change weight""" self.weight=weight if RESPONSE is not None: RESPONSE.redirect('manage') def __init__(self, id, text=None, content_type=None,MPIWGType=None): self.id = str(id) self.ZBindings_edit(self._default_bindings) if text is None: self._default_content_fn = os.path.join(package_home(globals()), 'zpt/MPIWG_%s_template_standard.zpt'%MPIWGType) text = open(self._default_content_fn).read() self.pt_edit(text, content_type) """change form""" def isActiveItem(self): """teste ob ausgewaehlt""" if self.absolute_url()==self.REQUEST['URL']: return "aktiv" else: return "" def manage_addMPIWGTemplateForm(self): """Form for adding""" pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt/AddMPIWGTemplate.zpt')).__of__(self) return pt() from urllib import quote def manage_addMPIWGTemplate(self, MPIWGType,id, title=None,weight=0,REQUEST=None): "Add a Page Template with optional file content." if type(MPIWGType)==StringType: MPIWGTypes=[MPIWGType] else: MPIWGTypes=MPIWGType for singleType in MPIWGTypes: if REQUEST is None: self._setObject(id, MPIWGTemplate(id, text,EchoType=singleType)) ob = getattr(self, id) if title: ob.pt_setTitle(title) return ob else: file = REQUEST.form.get('file') headers = getattr(file, 'headers', None) if headers is None or not file.filename: zpt = MPIWGTemplate(id,MPIWGType=singleType) else: zpt = MPIWGTemplate(id, file, headers.get('content_type')) self._setObject(id, zpt) ob = getattr(self, id) if title: ob.pt_setTitle(title) try: u = self.DestinationURL() except AttributeError: u = REQUEST['URL1'] ob = getattr(self, id) ob.weight=weight REQUEST.RESPONSE.redirect(u+'/manage_main') return '' class MPIWGRoot(ZSQLExtendFolder): """Stammordner für den Web-Server""" 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':'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'} folders=['MPIWGProject','Folder','ECHO_Navigation'] meta_type='MPIWGRoot' def versionHeaderEN(self): """version header text""" date= self.REQUEST.get('date',None) if date: txt="""
%s
\n"%project[0]) def replaceNotEmpty(self,format,field): """replace not empty""" if field and (not field.lstrip()==''): return format%field else: return "" def isActual(self,project): """checke if project is actual""" actualTime=time.localtime() obj= project.getObject() if getattr(obj,'archiveTime',actualTime)< actualTime: return False else: return True def redirectIndex_html(self,request): #return request['URL1']+'/index_html' return urllib.urlopen(request['URL1']+'/index_html').read() def formatBibliography(self,here,found): """format""" return formatBibliography(here,found) def getValue(self,fieldStr): """Inhalt des Feldes""" if type(fieldStr)==StringType: field=fieldStr else: field=fieldStr[0] try: if field[len(field)-1]==";": field=field[0:len(field)-1] except: """nothing""" field=re.sub(r';([^\s])','; \g<1>',field) return field.encode('utf-8') def sortedNames(self,list): """sort names""" def sortLastName(x_c,y_c): try: x=urllib.unquote(x_c).encode('utf-8','ignore') except: x=urllib.unquote(x_c) try: y=urllib.unquote(y_c).encode('utf-8','ignore') except: x=urllib.unquote(y_c) try: last_x=x.split()[len(x.split())-1] last_y=y.split()[len(y.split())-1] except: last_x="" last_y="" if last_xnew:%s
\n"%username.encode('utf-8')) obj=getattr(memberFolder,username) obj.createNewDBEntry(publish_the_data,id,name, vorname,title,e_mail, e_mail_p,date_from,date_to, abteilung,heimat_inst,funded_by, e_mail2,txt,txt_p) except: RESPONSE.write("ERROR:%s %s %s
\n"%(username.encode('utf-8'),name.encode('utf-8'),vorname.encode('utf-8'))) RESPONSE.write(": %s %s"%sys.exc_info()[:2]) else: RESPONSE.write("
update:%s
\n"%username.encode('utf-8')) self.ZSQLChange(_table="personal_www",_identify="id=%s"%id,publish_the_data=publish_the_data, date_from=date_from, date_to=date_to) return True def updateHomepages(self,RESPONSE): """lege members an""" self.upDateSQL('personalwww.xml') founds=self.ZSQLInlineSearch(_table='personal_www',publish_the_data='yes') project=getattr(self,'members') for found in founds: if not (found.e_mail==""): newObj=MPIWGStaff.MPIWGStaff(found.username,found.name,found.vorname) try: project._setObject(found.username,newObj) RESPONSE.write("new:%s
\n"%found.username) except: RESPONSE.write("old:%s (%s,%s)
\n"%(found.username,found.name,found.vorname)) #delete non existing foundUserNames=[x.username for x in founds] for member in self.ZopeFind(self,obj_metatypes=["MPIWGStaff"],search_sub=1): if member[1].getId() not in foundUserNames: member[1].aq_parent.manage_delObjects(ids=[member[1].getId()]) RESPONSE.write("deleted:%s
\n"%member[1].getId()) try: self.MembersCatalog.manage_catalogReindex(self.REQUEST,RESPONSE,self.REQUEST['URL1']) except: pass self.ProjectCatalog.manage_catalogReindex(self.REQUEST,RESPONSE,self.REQUEST['URL1']) self.updatePublicationDB() if RESPONSE is not None: RESPONSE.redirect('manage_main') def getAllMembers(self): """give list of all members""" ret=[] #for x in self.members.objectValues('MPIWGStaff'): #print x.title # ret.append(x.title.decode('utf-8')) for x in self.ZopeFind(self.members,obj_metatypes=['MPIWGStaff']): ret.append(x[1].title.decode('utf-8')) ret.sort() #print ret return ret def printAllMembers(self): """prin""" members=self.getAllMembers() ret="" for x in members: ret+="%s
"%x return ret def makeList(self,entry): """makes a list out of one entry or repeat a list""" if type(entry) is StringType: return [entry] else: return entry def getTree(self,date=None): """generate Tree from project list""" returnList=[] 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=="": splittedId=idNr.split(".") depth=len(splittedId) nr=idNr #title=project[0].WEB_title title=[project[0].getContent('WEB_title')] #print title if idNr[0]!="x": returnList.append((depth,nr,title,project[0])) return returnList def formatElementsAsList(self,elements): """formatiere tree als liste""" actualDepth=0 ret="" for element in elements: if (element[0]>actualDepth): #fuege soviele ul ein wie unterschied in tiefe if element[0]==1: ret+=""""""%(element[3].absolute_url()+"/index.html",element[3].getContent('WEB_title')) elif element[0]==3: return """
"""%(element[3].absolute_url()+"/index.html",element[3].getContent('WEB_title')) def changePosition(self,treeId,select,RESPONSE=None): """Change Postion Entry""" numbers=[] # Suche hoechste bisherige nummer projects=self.getProjectFields('xdata_05') # get Projects sorted by xdata_05 #print "pj",projects for project in projects: #suche alle subtrees der treeId #print treeId founds=re.match(treeId+"\.(.*)",project[1].split(";")[0]) if founds: #print "x",founds.group(0),len(founds.group(0).split(".")) if len(founds.group(0).split("."))==len(treeId.split("."))+1: # nur ein punkt mehr, d.h. untere ebene try: numbers.append(int(founds.group(0).split(".")[len(founds.group(0).split("."))-1])) except: numbers.append(int(0)) try: highest=max(numbers) except: highest=0 projects=self.showNewProjects() for i in self.makeList(select): highest+=10 projects[int(i)][0].xdata_05=treeId+"."+str(highest) if RESPONSE is not None: RESPONSE.redirect('showTree') def changeTree(self,RESPONSE=None): """change the complete tree""" form=self.REQUEST.form hashList={} fields=self.getTree() for idNr in form.keys(): 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: RESPONSE.redirect('showTree') def getProjectWithId(self,id): fields=self.getProjectFields('xdata_05') for field in fields: if field[1]==id: return field[0] return None def getRelativeUrlFromPerson(self,list): """get urls to person list""" ret=[] persons=list.split(";") for person in persons: if len(person)>1: #nicht nur Trennzeichen splitted=person.split(",") if len(splitted)==1: splitted=person.split(" ") splittedNew=[re.sub(r'\s(.*)','$1',split) for split in splitted] if splittedNew[0]=='': del splittedNew[0] search=string.join(splittedNew,' AND ') if not search=='': try: proj=self.MembersCatalog({'title':search}) except: proj=None if proj: #ret.append("%s"%(proj[0].absolute_url,person.encode('utf-8'))) ret.append("%s"%('members/'+proj[0].id+'/index.html',person)) else: #ret.append("%s"%person.encode('utf-8')) ret.append("%s"%person) return string.join(ret,";") def getUrlFromPerson(self,list): """get urls to person list""" ret=[] persons=list.split(";") for person in persons: if len(person)>1: #nicht nur Trennzeichen splitted=person.split(",") if len(splitted)==1: splitted=person.lstrip().rstrip().split(" ") splittedNew=[re.sub(r'\s(.*)','$1',split) for split in splitted] if splittedNew[0]=='': del splittedNew[0] search=string.join(splittedNew,' AND ') if not search=='': try: proj=self.MembersCatalog({'title':search}) except: proj=None if proj: if person =="Otto Sibum" : person="H. Otto Sibum" if person =="Norton Wise" : person="M. Norton Wise" #ret.append("%s"%(proj[0].absolute_url,person.encode('utf-8'))) ret.append("%s"%(proj[0].absolute_url+"/index.html",person)) else: #ret.append("%s"%person.encode('utf-8')) ret.append("%s"%person) return string.join(ret,";") 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,date=date) return ret def getProjectsOfMember(self,name=None,email=None,date=None): """get project of a member""" def sortP(x,y): """sort by sorting number""" #print x.xdata_05,y.xdata_05 return cmp(x.WEB_title,y.WEB_title) ret=[] splitNeu=[] if email: members=self.ZopeFind(self.members,obj_metatypes=['MPIWGStaff'],obj_ids=[email],search_sub=1) name = members[0][1].title.decode('utf-8') y=name splitted=y.split(",") #XXXX splitNeu=["\'"+splitted[1]+" "+splitted[0]+"\'"] #for s in splitted: # splitNeu.append("\""+s+"\"") search=string.join(splitNeu,' AND ') proj=self.ProjectCatalog({'xdata_01':search}) if proj: proj2=[] for x in proj: 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) else: proj2=[] proj=self.ProjectCatalog({'xdata_08':search}) if proj: names=[x.WEB_title for x in proj] for x in proj: if (not x.WEB_title in names) and (getattr(x.getObject(),'archiveTime','')==''): proj2.append(x) proj2.sort(sortP) if len(proj2)>0: ret.append((y,proj2)) return ret def givePersonList(self,name): """check if person is in personfolder and return list of person objects""" splitted=name.split(",") if len(splitted)==1: splitted=name.lstrip().rstrip().split(" ") splittedNew=[split.lstrip() for split in splitted] if splittedNew[0]=='': del splittedNew[0] search=string.join(splittedNew,' AND ') if not search=='': proj=self.MembersCatalog({'title':search}) if proj: return [[x.lastName,x.firstName] for x in proj] else: return [] ## splitted=name.split(",") # version nachname, vorname... ## if len(splitted)>1: ## lastName=splitted[0] ## firstName=splitted[1] ## else: ## splitted=name.split(" ") #version vorname irgenwas nachnamae ## lastName=splitted[len(splitted)-1] ## firstName=string.join(splitted[0:len(splitted)-1]) ## objs=[] #print self.members ## for x in self.members.__dict__: ## obj=getattr(self.members,x) ## if hasattr(obj,'lastName') and hasattr(obj,'firstName'): ## if (re.match(".*"+obj.lastName+".*",lastName) or re.match(".*"+lastName+".*",obj.lastName)) and (re.match(".*"+obj.firstName+".*",firstName) or re.match(".*"+firstName+".*",obj.firstName)): ## objs.append((obj,lastName+", "+firstName)) return objs def personCheck(self,names): """all persons for list""" #print "names",names splitted=names.split(";") ret={} for name in splitted: if not (name==""): try: ret[name]=self.givePersonList(name) except: """NOTHIHN""" #print "RET",ret return ret def giveCheckList(self,person,fieldname): """return checklist""" #print "GCL",fieldname if fieldname=='xdata_01': x=self.personCheck(person.getContent(fieldname)) #print "GCLBACKX",x return x def isCheckField(self,fieldname): """return chechfield""" return (fieldname in checkFields) def manage_addMPIWGRootForm(self): """form for adding the root""" pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addMPIWGRootForm.zpt')).__of__(self) return pt() def manage_addMPIWGRoot(self,id,title,connection_id="",RESPONSE=None): """add a root folder""" newObj=MPIWGRoot(id,title) self._setObject(id,newObj) ob=getattr(self,id) setattr(ob,'connection_id',connection_id) if RESPONSE is not None: 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)) 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)) 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) 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]) try: self.imageURL=tmp[0].split("\"")[1].encode('utf-8') except: self.imageURL=tmp[0].split("src=")[1].split(" ")[0].encode('utf-8') split2="".join(tmp[1:]) text3=splitted[0]+split2 splitted=text3.split("""""") if len(splitted)>1: tmp=splitted[1].split("
") self.imagecap=tmp[0].encode('utf-8') split4="".join(tmp[1:]) text5=splitted[0]+split4 else: #keine caption text5=text3 else: #kein bild text5=text2 else: text5=text2 #teste ob WEB_project_description und keine führenden p tags if (len(text5)>4) and (not text5[0:3]=='') and (field=='WEB_project_description'): text5= "
"+text5+"
" #filter image return text5.encode('utf-8') def showImagesOfPage(self,imageUrl=None): """show Images of project""" 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 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""" if preview: 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.copyObjectToArchive() self.WEB_project_description=newcontent[0:] self.REQUEST.RESPONSE.redirect("./index.html") return True security.declareProtected('View managment screens','edit') def edit(self,western=None): """Edit pages""" if western: self.REQUEST.RESPONSE.setCookie("MP_debug_code","western",path="/") 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""" debug= self.REQUEST.cookies.get("MP_debug_code",None) if debug and debug=="western": return """ %s """%self.WEB_project_description[0] return """ %s """%self.getContent('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,fromEdit=None): """edit the project and archive the old version""" self.copyObjectToArchive() # archive the object for x in definedFields: if self.REQUEST.has_key(x): 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') 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,fromEdit=None): """edit disciplin and form""" if disciplines: if type(disciplines) is StringType: self.xdata_09=disciplines else: self.xdata_09=string.join(disciplines,";") else: self.xdata_09="" if themes: if type(themes) is StringType: self.xdata_10=themes else: self.xdata_10=string.join(themes,";") else: self.xdata_10="" 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): """check if wert is in ; seperated list""" #felder sind manchmnal als liste mit einem element definiert if type(list) is StringType or UnicodeType: splitted=list.split(";") else: splitted=list[0].split(";") splitted=[y.rstrip().lstrip() for y in splitted] for x in splitted: 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) return pt() def loadNewFileForm(self): """Neues XML-File einlesen""" pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','MPIWGProject_newfile.zpt')).__of__(self) return pt() def loadNewFile(self,RESPONSE=None): """einlesen des neuen files""" fileupload=self.REQUEST['fileupload'] if fileupload: file_name=fileupload.filename filedata=fileupload.read() argv=xmlhelper.proj2hash(filedata) #print argv.keys() for arg in definedFields: #print arg,argv[arg],getattr(self,arg) try: temp=argv[arg][0:] #old=getattr(self,arg) setattr(self,arg,temp) #print old,getattr(self,arg) except: """nothing""" if RESPONSE is not None: RESPONSE.redirect('manage_main') def manage_addMPIWGProjectForm(self): """form for adding the project""" pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addMPIWGProjectForm.zpt')).__of__(self) return pt() def manage_addMPIWGProject(self,id,RESPONSE=None): """method to add a project""" #print argv fileupload=self.REQUEST.get('fileupload',None) if fileupload: file_name=fileupload.filename filedata=fileupload.read() argv=xmlhelper.proj2hash(filedata) #print argv newObj=MPIWGProject(id,argv) else: newObj=MPIWGProject(id) self._setObject(id,newObj) if RESPONSE is not None: RESPONSE.redirect('manage_main')