"""New version of the product started February, 8th. Without scientific classification, use content-type for further classification.""" """Echo collection provides the classes for the ECHO content web-site. class ECHO_collection is the basis class for an ECHO collection. class ECHO_resource contains information on ECHO resources (e.g. an Display environment for Metadata class ECHO_externalLink contains information on externalLinks """ try: from reportlab.pdfgen import canvas from reportlab.lib.pagesizes import A4 except: print "PDF generation will not work" import string import tempfile import re import os import OFS.Image from types import * from OFS.Cache import Cacheable from OFS.Image import Image from Globals import DTMLFile from OFS.Folder import Folder from OFS.SimpleItem import SimpleItem from AccessControl import ClassSecurityInfo from AccessControl.User import UserFolder from Globals import InitializeClass from Globals import DTMLFile import Globals from Products.PageTemplates.PageTemplateFile import PageTemplateFile from Products.PageTemplates.PageTemplate import PageTemplate from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate from Globals import Persistent, package_home from Acquisition import Implicit import urllib import smtplib import time from Ft.Xml.Domlette import NonvalidatingReader from Ft.Xml.Domlette import PrettyPrint from Ft.Xml import EMPTY_NAMESPACE import Ft.Xml.XPath import cStringIO import zLOG try: from psycopg import libpq except: try: from pyPgSQL import libpq except: print "ECHO_collection: Warning - No libpq imported!" import xml.dom.minidom import urllib import xml.dom.minidom from ECHO_graphicalOverview import javaHandler,javaScriptMain import ECHO_helpers from ECHO_helpers import * from ECHO_language import * #regexp for extracting elements from xml patternTXT=r"<\s*txt.*?>(.*?)" regexpTXT = re.compile(patternTXT, re.IGNORECASE + re.DOTALL) patternPage=r"<\s*page.*?>(.*?)" regexpPage = re.compile(patternPage, re.IGNORECASE + re.DOTALL) def setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordstrs,viewClassification=""): """Allegemeine Informationen zu einer ECHO Collection""" self.viewClassification=viewClassification self.label = label self.title=title self.description=description self.contentType=contentType self.responsible=responsible self.credits=toList(credits) self.weight=weight coords=[] #coordinates of for rectangles if coordstrs: for coordstr in coordstrs: try: temco=coordstr.split(",") except: temco=[] coords.append(temco) self.coords=coords[0:] class ECHO_copyright(Folder,ECHO_basis): """Copyright informationen""" meta_type="ECHO_copyright" def __init__(self,id,title,copyrights): """init""" self.title=title self.id=id self.copyrights=copyrights[0:] def getCopyrights(self): """return coyprights""" return self.copyrights manage_options = Folder.manage_options+( {'label':'Main Config','action':'ECHO_copyright_configForm'}, ) def ECHO_copyright_configForm(self): """change form""" pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_copyright').__of__(self) pt.content_type="text/html" return pt() def ECHO_copyright_config(self,title,RESPONSE=None): """change""" self.title=title self.copyrights=[] self.copyrights=getCopyrightsFromForm(self,self.REQUEST.form)[0:] if RESPONSE is not None: RESPONSE.redirect('manage_main') def manage_addECHO_copyrightForm(self): """Form for adding""" pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_copyright.zpt').__of__(self) return pt() def manage_addECHO_copyright(self, id,title,RESPONSE=None): """add the copyright""" meta_type="ECHO_copyright" #first generate copyrights as list of tripels (mediaType,partner,copyrightType) self._setObject(id, ECHO_copyright(id, title,getCopyrightsFromForm(self,self.REQUEST.form))) if RESPONSE is not None: RESPONSE.redirect('manage_main') class ECHO_layoutTemplate(ZopePageTemplate,ECHO_basis): """Create a layout Template for different purposes""" meta_type="ECHO_layoutTemplate" def __init__(self, id, text=None, content_type=None,EchoType=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/ECHO_%s_template_standard.zpt'%EchoType) text = open(self._default_content_fn).read() self.pt_edit(text, content_type) """change form""" def manage_addECHO_layoutTemplateForm(self): """Form for adding""" pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt/AddECHO_layoutTemplate.zpt')).__of__(self) return pt() from urllib import quote def manage_addECHO_layoutTemplate(self, EchoType,title=None,REQUEST=None): "Add a Page Template with optional file content." if type(EchoType)==StringType: EchoTypes=[EchoType] else: EchoTypes=EchoType for singleType in EchoTypes: id = str(singleType)+"_template" if REQUEST is None: self._setObject(id, ECHO_layoutTemplate(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 = ECHO_layoutTemplate(id,EchoType=singleType) else: zpt = ECHO_layoutTemplate(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'] REQUEST.RESPONSE.redirect(u+'/manage_main') return '' class ECHO_fullText(ZopePageTemplate,ECHO_basis,ECHO_language): """echo fulltext in xml""" meta_type="ECHO_fullText" def getPage(self,nr='1'): """get page n""" dom=xml.dom.minidom.parseString(self()) pages=dom.getElementsByTagName('page') return pages[int(nr)-1].toxml('utf-8') # Product registration and Add support manage_addECHO_fullTextForm = PageTemplateFile( 'zpt/AddECHO_fullText.zpt', globals()) from urllib import quote def manage_addECHO_fullText(self, id, title=None, text=None, REQUEST=None, submit=None): "Add a Page Template with optional file content." id = str(id) if REQUEST is None: self._setObject(id, ECHO_fullText(id, text)) 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 = ECHO_fullText(id) else: zpt = ECHO_fullText(id, file, headers.get('content_type')) self._setObject(id, zpt) try: u = self.DestinationURL() except AttributeError: u = REQUEST['URL1'] if submit == " Add and Edit ": u = "%s/%s" % (u, quote(id)) REQUEST.RESPONSE.redirect(u+'/manage_main') return '' class ECHO_resource(Folder,Persistent,ECHO_basis): """ECHO Ressource""" security=ClassSecurityInfo() meta_type='ECHO_resource' viewClassificationList=viewClassificationListMaster getSubCols = ECHO_helpers.getSubCols security.declareProtected('View','index_html') security.declareProtected('View','createPDF') def createPDF(self,RESPONSE=None,local=None,dpi=150): """erzeuge pdf file""" pages=1 dpi=float(dpi) imagePath=self.getImagePath().replace("/mpiwg/online","") image="http://nausikaa2.mpiwg-berlin.mpg.de/digitallibrary/servlet/Scaler?fn="+imagePath+"&dw=%i&dh=%i&pn=%i" xmlInfo="http://nausikaa2.mpiwg-berlin.mpg.de/digitallibrary/dlInfo-xml.jsp?fn="+imagePath dom=xml.dom.minidom.parse(urllib.urlopen(xmlInfo)) for parameter in dom.getElementsByTagName('parameter'): if parameter.getAttribute('name')=="pt": pages=int(parameter.getAttribute('value')) break tempdir="/tmp/archivesImageServer" if not os.path.exists(tempdir): os.mkdir(tempdir) tmpPath=tempfile.mkdtemp(dir=tempdir) tmpZip=tempfile.mktemp(dir=tempdir) tmpFn=os.path.split(tmpZip)[1] if RESPONSE: RESPONSE.setHeader("Content-Type","text/html") RESPONSE.write("

I am creating the pdf

") txt="

1. step: getting the images( %i pages)

"%pages RESPONSE.write(txt) c=canvas.Canvas(tmpZip) for i in range(1,pages+1): if RESPONSE: RESPONSE.write(str("

Get Page: %i
\n"%i)) faktor=dpi/72.0 fn=tmpPath+"/%i"%i width,height=A4 #print image%(width*faktor,height*faktor,i) url=urllib.urlopen(image%(width*faktor,height*faktor,i)).read() fh=file(fn,"w") fh.write(url) fh.close() c.drawImage(fn,0,0,width=width,height=height) c.showPage() c.save() if RESPONSE: RESPONSE.write("

finished
\n") if RESPONSE: len=os.stat(tmpZip)[6] downloadUrl=self.absolute_url()+"/downloadPDF" RESPONSE.write("""

Click here for download ( %i Byte)

\n"""%(tmpFn,len)) RESPONSE.write("""

The file will be stored for a while, you can download it later, the URL is:

%s?fn=%s\n"""%(tmpFn,downloadUrl,tmpFn)) RESPONSE.close() def downloadPDF(self,fn): """download prepared set""" filename="/tmp/archivesImageServer/"+fn namePDF=self.getId()+".pdf" self.REQUEST.RESPONSE.setHeader("Content-Disposition","""attachement; filename="%s" """%namePDF) self.REQUEST.RESPONSE.setHeader("Content-Type","application/octet-stream") len=os.stat(filename)[6] self.REQUEST.RESPONSE.setHeader("Content-Length",len) images=file(filename).read() self.REQUEST.RESPONSE.write(images) self.REQUEST.RESPONSE.close() def getRDF(self,urn=None): """rdf""" ret=getRDFDescription(self,self.link,urn=urn) return ret+self.createSubElementRDF(urn=urn) def getAccessRightSelectorHTML(self,outlook="select"): """htmlselector""" values=['free','mpiwg'] if outlook=="select": ret="""" else: ret="" for value in values: if value==self.getAccessRightMD(): ret+="""%s"""%(self.getId(),value,value) else: ret+="""%s"""%(self.getId(),value,value) return ret def getAccessRightMD(self): """set accessright""" url=self.metalink try: geturl="" for line in ECHO_helpers.urlopen(url).readlines(): geturl=geturl+line except: return (None,"Cannot open: "+url) try: dom=xml.dom.minidom.parseString(geturl) root=dom.getElementsByTagName('resource')[0] except: return (None,"Cannot parse: "+url+"
"+geturl) internal=dom.getElementsByTagName('internal') if internal: institution=dom.getElementsByTagName('institution') return getText(institution[0].childNodes) free=dom.getElementsByTagName('free') if free: return "free" return "free" #default free def changeAccessRightMD(self,accessright,RESPONSE=None): """change the rights""" params="accessright=%s"%accessright #print ECHO_helpers.urlopen(self.absolute_url()+'/setAccessRightXML'+'?'+params).read() ECHO_helpers.urlopen('http://xserve02.mpiwg-berlin.mpg.de:18880/echo_nav/storage/downloadExternalXML?index_meta_url=%s&xml_url=%s'%(self.metalink,self.absolute_url()+'/setAccessRightXML'+urllib.quote('?'+params))).read() if RESPONSE is not None: RESPONSE.redirect('manage_main') def setAccessRightXML(self,accessright): """set accessright""" url=self.metalink try: geturl="" for line in ECHO_helpers.urlopen(url).readlines(): geturl=geturl+line except: return (None,"Cannot open: "+url) try: dom=xml.dom.minidom.parseString(geturl) root=dom.getElementsByTagName('resource')[0] except: return (None,"Cannot parse: "+url+"
"+geturl) metanodes=dom.getElementsByTagName('access-conditions') if not metanodes: nodenew=dom.createElement('access-conditions') root.appendChild(nodenew) metanode=nodenew else: metanode=metanodes[0] accesses=metanode.getElementsByTagName('access') if not accesses: nodenew2=dom.createElement('access') metanode.appendChild(nodenew2) metanode2=nodenew2 else: metanode2=accesses[0] internal=metanode.getElementsByTagName('internal') if internal: metanode2.removeChild(internal[0]).unlink() free=metanode.getElementsByTagName('free') if free: metanode2.removeChild(internal[0]).unlink() if accessright=='free': nodenew3=dom.createElement('free') metanode2.appendChild(nodenew3) elif accessright=='mpiwg': nodenew3=dom.createElement('internal') nodenew4=dom.createElement('institution') metanodetext=dom.createTextNode('mpiwg') nodenew4.appendChild(metanodetext) nodenew3.appendChild(nodenew4) metanode2.appendChild(nodenew3) return dom.toxml().encode('utf-8') def setStartPageForm(self): """Form for changing the startpage""" pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resourceStartPage.zpt').__of__(self) pt.content_type="text/html" return pt() def createImageUrl(self,pn=1): """create ImageUrl""" resourcepath=readFieldFromXML(self.metalink,'resource','archive-path') digiliburlprefix=readFieldFromXML(self.metalink,'texttool','digiliburlprefix') images=readFieldFromXML(self.metalink,'texttool','image') if (not resourcepath) or (not digiliburlprefix) or (not images): zLOG.LOG("ECHO (createImageUrl)",zLOG.ERROR,"Cannot create ImageUrl for %s"%self.absolute_url()) return None resourcepath=resourcepath.replace('/mpiwg/online','') if not digiliburlprefix: digiliburlprefix="http://echo.mpiwg-berlin.mpg.de/zogilib?" if (not images) or (not resourcepath): return None return "%sfn=%s&pn=%i"%(digiliburlprefix,resourcepath+"/"+images,pn) def copyTitleToInfoXML(self,RESPONSE=None): """copy title from the resource""" presentationXML=readFieldFromXML(self.metalink,'texttool','presentation') resourcepath=readFieldFromXML(self.metalink,'resource','archive-path') if (not presentationXML) or (not resourcepath): if RESPONSE: RESPONSE.write("Error: %s\n"%self.getId()) else: return None,self.absolute_url() try: fh=file(os.path.join(resourcepath,presentationXML),'w') fh.write(""" %s yes """%self.title) fh.close() return 1,self.getId() except: if RESPONSE: RESPONSE.write("Error: %s\n"%self.getId()) else: return None,self.absolute_url() def setStartPage(self,startpage=None,RESPONSE=None): """set start page, if no startpage defined use the generic one of the resource""" if (not (type(startpage)==StringType)): if ("__generic" in startpage): # checke ob generic in der liste startpage=self.absolute_url()+"/startpage_html" elif ("__firstPage" in startpage): # checke ob generic in der liste startpage=self.createImageUrl() if (not startpage): startpage=self.absolute_url()+"/startpage_html" elif (startpage=="__generic"): startpage=self.absolute_url()+"/startpage_html" elif (startpage=="__firstPage"): startpage=self.createImageUrl() params="startpage=%s"%startpage print 'http://xserve02.mpiwg-berlin.mpg.de:18880/echo_nav/storage/downloadExternalXML?index_meta_url=%s&xml_url=%s'%(self.metalink,self.absolute_url()+'/newMetaXML'+urllib.quote('?'+params)) ECHO_helpers.urlopen('http://xserve02.mpiwg-berlin.mpg.de:18880/echo_nav/storage/downloadExternalXML?index_meta_url=%s&xml_url=%s'%(self.metalink,self.absolute_url()+'/newMetaXML'+urllib.quote('?'+params))).read() path=self.metalink path=re.sub(self.REQUEST['SERVER_URL'],'',path) path=re.sub('http://'+self.REQUEST['HTTP_HOST'],'',path) path=re.sub('http://foxridge.mpiwg-berlin.mpg.de:8080','',path) # falls foxridge als server path=re.sub('http://foxridge.mpiwg-berlin.mpg.de','',path) # falls foxridge als server path=re.sub('http://foxridge.rz-berlin.mpg.de:8080','',path) # falls foxridge als server path=re.sub('http://content.mpiwg-berlin.mpg.de','',path) # falls content als server path=re.sub('http://foxridge.rz-berlin.mpg.de','',path) # falls foxridge als server path=re.sub('http://vision.mpiwg-berlin.mpg.de','',path) # falls vision als server path=re.sub('http://xserve02.mpiwg-berlin.mpg.de:18880','',path) # falls vision als server path=re.sub('http://echo.mpiwg-berlin.mpg.de','',path) # falls echo path=re.sub('/index.meta','',path) ECHO_helpers.urlopen("http://nausikaa2.rz-berlin.mpg.de:86/cgi-bin/toc/admin/reg.cgi?path=%s"%path).readlines() if RESPONSE is not None: RESPONSE.redirect('manage_main') def changeViewerTemplateSetForm(self): """change the viewer template set""" pt=PageTemplateFile('Products/ECHO_content/zpt/changeResourceViewerTemplateSet').__of__(self) return pt() def getTextToolsField(self,name,default=''): """Lese Textoolsfelder aus index.meta im path aus""" try: dom=xml.dom.minidom.parse(self.metalink) node=dom.getElementsByTagName('texttool')[0] #getNode subnode=node.getElementsByTagName(name)[0] # bei text wird nur der Folder gebraucht if name=="text": splitted=getText(subnode.childNodes).split("/") return splitted[len(splitted)-2] else: return getText(subnode.childNodes) except: return default def changeViewerTemplateSet(self,project,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix,RESPONSE=None): """changeit""" paramList=['project','startpage','xslt','thumbtemplate','topbar','digiLibTemplate','digiliburlprefix'] #writeMetadata(self.metalink,self.metaDataHash,project,None,xslt,thumbtemplate,topbar,digiLibTemplate) params="project=%s&xslt=%s&thumbtemplate=%s&topbar=%s&digiLibTemplate=%s&digiliburlprefix=%s"%(project,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix) ECHO_helpers.urlopen('http://echo.mpiwg-berlin.mpg.de/echo_nav/storage/downloadExternalXML?index_meta_url=%s&xml_url=%s'%(self.metalink,self.absolute_url()+'/newMetaXML'+urllib.quote('?'+params))).read() #print self.absolute_url()+'/newMetaXML'+urllib.quote'?'+params) # hack Pfad auf die Dokumente path=self.metalink path=re.sub('/index.meta','',path) path=re.sub(self.REQUEST['SERVER_URL'],'',path) path=re.sub('http://'+self.REQUEST['HTTP_HOST'],'',path) path=re.sub('http://foxridge.mpiwg-berlin.mpg.de:8080','',path) # falls foxridge als server path=re.sub('http://foxridge.mpiwg-berlin.mpg.de:8080','',path) # falls foxridge als server path=re.sub('http://foxridge.mpiwg-berlin.mpg.de','',path) # falls foxridge als server path=re.sub('http://foxridge.rz-berlin.mpg.de:8080','',path) # falls foxridge als server path=re.sub('http://foxridge.rz-berlin.mpg.de','',path) # falls foxridge als server path=re.sub('http://content.mpiwg-berlin.mpg.de','',path) # falls content als server path=re.sub('http://echo.mpiwg-berlin.mpg.de','',path) # falls echo path=re.sub('http://vision.rz-berlin.mpg.de','',path) # falls vision als server return ECHO_helpers.urlopen("http://nausikaa2.rz-berlin.mpg.de:86/cgi-bin/toc/admin/reg.cgi?path=%s"%path).readlines() if RESPONSE is not None: RESPONSE.redirect('manage_main') def content_html(self): """template fuer content""" return ECHO_basis.content_html(self,'resource') def getViewClassification(self): if hasattr(self,'viewClassification'): return self.viewClassification else: return "" def getFullTextXML(self,noredirect=None): """getFullTextXML; gives the FullText as an XML Document, and if somthing goes wrong.""" try: #zLOG.LOG("ECHO Fulltext",zLOG.INFO,"open %s"%self.metalink) fh=ECHO_helpers.urlopen(self.metalink) #zLOG.LOG("ECHO Fulltext",zLOG.INFO,"opened %s"%self.metalink) dom=xml.dom.minidom.parse(fh) texttools=dom.getElementsByTagName('texttool') text=texttools[0].getElementsByTagName('text') texturl=getText(text[0].childNodes) #zLOG.LOG("ECHO Fulltext",zLOG.INFO,"found %s"%texturl) fh.close() #zLOG.LOG("ECHO Fulltext",zLOG.INFO,"closed fh") #keine url if not (texturl.split(":")[0] in ['http','ftp','file']): if not noredirect: return file(texturl).read() else: return texturl if not noredirect: self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml') zLOG.LOG("ECHO Fulltext",zLOG.INFO,"redirect to:%s"%texturl) self.REQUEST.RESPONSE.redirect(texturl) else: return texturl except: if not noredirect: self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml') self.REQUEST.RESPONSE.write("no fulltext available") else: return "no fulltext available" def getImagePath(self): """gibt pfad zum image aus""" return self.getImageView(noredirect="yes",onlyPath="yes") def getImageView(self,noredirect=None,onlyPath=None): """getImages; give Imageviewr and if somthing goes wrong.""" try: fh=ECHO_helpers.urlopen(self.metalink) dom=xml.dom.minidom.parse(fh) texttools=dom.getElementsByTagName('texttool') text=texttools[0].getElementsByTagName('image') imagetemp=getText(text[0].childNodes) text=dom.getElementsByTagName('archive-path') archivepath=getText(text[0].childNodes) archivepath=re.sub('/mpiwg/online/','',archivepath) imageurl="http://echo.mpiwg-berlin.mpg.de/zogilib?fn="+archivepath+"/"+imagetemp fh.close() if not noredirect: self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml') self.REQUEST.RESPONSE.redirect(imageurl) else: if not onlyPath: return imageurl else: return archivepath+"/"+imagetemp except: if not noredirect: self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml') self.REQUEST.RESPONSE.write("no fulltext available") else: return "no images available" def getCopyrightsHTML(self): """gib (link auf copyright link, mediatyp, institution, copyrightType, label von copyrightType) aus""" if hasattr(self,'copyrightModel'): obj=self.copyrightModel else: return "ERROR" ret=[] for copyright in obj.getCopyrights(): #copyright - media / partner / copyrightID try: if hasattr(self.copyrightTypes,copyright[2]): copyrightTypeObj=getattr(self.copyrightTypes,copyright[2]) link="copyrightTypes/"+copyright[2]+'/copyright.html' else: copyrightTypeObj=getattr(obj,copyright[2]) link="copyrightModel/"+copyright[2]+'/copyright.html' label=copyrightTypeObj.label url=getattr(copyrightTypeObj, 'url', '') if url!='': ret.append((url,copyright[0],copyright[1],copyright[2],label)) else: if hasattr(copyrightTypeObj, 'copyright.html'): ret.append(("""%s?partner=%s"""%(link,copyright[1]),copyright[0],copyright[1],copyright[2],label)) else: ret.append(('empty',copyright[0],copyright[1],copyright[2],label)) except: """nothing""" return ret def getInstitutionsHTML(self): """gibt Liste der fšrdernden Institutionen aus""" if hasattr(self,'support'): obj=self.support ret=obj.getSupporter() return ret else: return '' def getCredits(self): """Ausgabe der credits""" if self.credits: return self.credits else: return [] def __init__(self,id,link,metalink,resourceID,title,label,description,contentType,renderingType,copyrightType,responsible,credits,weight,coords): self.id = id """Festlegen der ID""" self.label = label self.link= link self.metalink=metalink self.title=title self.weight=weight self.credits=toList(credits) self.description=description self.contentType=contentType self.copyrightType=copyrightType self.renderingType=renderingType self.responsible=responsible self.resourceID=resourceID if coords: coordsnew=[ string.split(x,",") for x in coords] else: coordsnew=[] self.coords=coordsnew def getCoords(self): """gibt coordinaten als String zurück und löscht zugleich einträge die keine Koordinaten sind, letzteres zur korrektur der Eingabe der alten version""" retList=[] if hasattr(self,'coords'): for x in self.coords: if len(x)>1: retList.append(string.join(x,",")) return retList def getContentType(self): try: return self.contentType except: return "" def getCopyrightType(self): try: return self.copyrightType except: return "" def getRenderingType(self): try: return self.renderingType except: return "" def ECHO_resource_config(self): """Main configuration""" if not hasattr(self,'weight'): self.weight="" pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resource.zpt').__of__(self) return pt() def ECHO_resource_config_main(self): """Main configuration""" if not hasattr(self,'weight'): self.weight="" pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resource_main.zpt').__of__(self) return pt() def ECHO_resource_config_coords(self): """Coords configuration """ pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resource_coords.zpt').__of__(self) return pt() def ECHO_resource_config_credits(self): """Main configuration""" pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resource_credits.zpt').__of__(self) return pt() def ECHO_resource_config_metadata(self): """Main configuration""" if (hasattr(self,'metadata')) and not (hasattr(self,'metaDataHash')): self.metaDataHash={} self.contentType=self.bib_type for data in self.metadata: data_neu=re.sub('-','_',data) self.meta DataHash[data_neu]=getattr(self,data)[0:] pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resource_metadata.zpt').__of__(self) return pt() def changeECHO_resource_main(self,metalink,link,title,label,description,contentType,renderingType,weight,resourceID,RESPONSE=None): """Änderung der Properties""" self.resourceID=resourceID self.title=title self.label=label self.description=description self.contentType=contentType self.renderingType=renderingType self.weight=weight self.link=link self.metalink=metalink if RESPONSE is not None: RESPONSE.redirect('manage_main') def changeECHO_resource_coords(self,coords,viewClassification,RESPONSE=None): """Änderung der Properties - coords""" if type(coords)==StringType: coords=[coords] try: coordsnew=[ string.split(x,",") for x in coords] except: coordsnew=[] self.coords=coordsnew[0:] self.viewClassification=viewClassification if RESPONSE is not None: RESPONSE.redirect('manage_main') def changeECHO_resource_credits(self,credits,responsible,copyrightType,RESPONSE=None): """Änderung der Properties""" self.credits=credits self.responsible=responsible self.copyrightType=copyrightType if RESPONSE is not None: RESPONSE.redirect('manage_main') def changeECHO_resource_metadata_local(self,RESPONSE=None): """change metadata""" tags=self.findTagsFromMapping(self.contentType) for field in tags[1]: self.metaDataHash[self.getFieldTag(tags,field)]=self.REQUEST.form[self.getFieldTag(tags,field)][0:] if RESPONSE is not None: RESPONSE.redirect('manage_main') def changeECHO_resource_metadata(self,RESPONSE=None): """change metadata""" tags=self.findTagsFromMapping(self.contentType) self.OSAS_meta={} for field in tags[1]: try: self.metaDataHash[self.getFieldTag(tags,field)]=self.REQUEST.form[self.getFieldTag(tags,field)] self.OSAS_meta[self.getFieldTag(tags,field)]=self.REQUEST.form['OSAS_%s'%self.getFieldTag(tags,field)] except: """nothing""" ECHO_helpers.urlopen('http://xserve02.mpiwg-berlin.mpg.de:18880/echo_nav/storage/downloadExternalXML?index_meta_url=%s&xml_url=%s'%(self.metalink,self.absolute_url()+'/newMetaXML')).read() if RESPONSE is not None: RESPONSE.redirect('manage_main') def getMDValue(self,fieldName,empty=None): if empty: return self.metaDataHash.get(fieldName,'!!NOT USED HERE in Type: %s'%self.contentType) else: return self.metaDataHash.get(fieldName,empty) def newMetaXML(self,project=None,startpage=None,xslt=None,thumbtemplate=None,topbar=None,digiLibTemplate=None,digiliburlprefix=None): """new index.meta""" self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml') if not hasattr(self,'metaDataHash'): self.copyIndex_meta2echo_resource() try: return writeMetadata(self.metalink,self.OSAS_meta,project,startpage,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix=digiliburlprefix) except: return writeMetadata(self.metalink,self.metaDataHash,project,startpage,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix=digiliburlprefix) def showMetaDataXML(self,project=None,startpage=None,xslt=None,thumbtemplate=None,topbar=None,digiLibTemplate=None): """schreibe md""" try: return writeMetadata(self.metalink,self.metaDataHash,project,startpage,xslt,thumbtemplate,topbar,digiLibTemplate,xmlfrag="yes") except: return " no metadata stored" def getMetaDataXML(self,project=None,startpage=None,xslt=None,thumbtemplate=None,topbar=None,digiLibTemplate=None): """prints out metadata as stored in the echo environment, format is the index.meta format""" self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml') return writeMetadata(self.metalink,self.metaDataHash) def changeECHO_resource(self,metalink,link,title,label,description,contentType,responsible,weight,viewClassification="",coords=None,credits=None,RESPONSE=None): """Änderung der Properties""" try: coordsnew=[ string.split(x,",") for x in coords] except: coordsnew=[] setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordsnew) self.viewClassification=viewClassification self.coords=coordsnew[0:] self.link=link self.metalink=metalink if RESPONSE is not None: RESPONSE.redirect('manage_main') manage_options = Folder.manage_options+( {'label':'Main Config','action':'ECHO_resource_config_main'}, {'label':'Change Metadata','action':'ECHO_resource_config_metadata'}, {'label':'Change Coords','action':'ECHO_resource_config_coords'}, {'label':'Add coords','action':'ECHO_graphicEntry'}, {'label':'Sync Metadata','action':'ECHO_getResourceMD'}, {'label':'Change TemplateSets and Image Viewer','action':'changeViewerTemplateSetForm'}, {'label':'set/change startpage','action':'setStartPageForm'}, {'label':'Copy MD for indexing and search','action':'copySearchFields'}, ) def getOverview(self): """overview graphics""" return self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['overview'])[0][1] def ECHO_graphicEntry(self): """DO nothing""" overview = self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['overview']) if overview: pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_draw.zpt').__of__(self) return pt() else: return "NO OVERVIEW GRAPHICS" def ECHO_enterCoords(self,coordstr,angle="",RESPONSE=None): """Enter coords""" coords=self.coords temco=coordstr.split(",") temco.append(angle) coords.append(temco) self.coords=coords[0:] if RESPONSE is not None: RESPONSE.redirect('ECHO_graphicEntry') def isDefinedInThisSet(self,fields,field): """checks if field is defined in fields""" if (fields[0].has_key(field)) and not (fields[0][field]==""): return 1 else: return 0 def getFieldLabel(self,fields,field): """get labels""" try: ret =fields[0][field] if ret == "": return field else: return ret except: return field def getFieldTag(self,fields,field): """get labels""" try: ret =fields[0][field] if ret == "": return field else: return ret except: return field def getFieldValue(self,field): """get value""" try: ret=self.metaDataHash[field] if ret == "": return None else: return ret except: return None def getMetaDataHash(self): """md hash""" return self.metaDataHash def setFieldValue(self,field,value): """get value""" if not hasattr(self,'metaDataHash'): setattr(self,'metaDataHash',{}) self.metaDataHash[field]=value[0:] def copySearchFields(self): """copys metadatafields to the object""" fields=['author','title','year'] for field in fields: setattr(self,'MD_'+field,self.getFieldValue(field)) def findLabelsFromMapping(self,referenceType): """gib hash mit label -> generic zurueck""" #return {},[] temp=self.ZopeFind(self.standardMD) if referenceType=="": referenceType="book" bibdata={} retdata={} fields=[] fieldlist=self.standardMD.fieldList for referenceTypeF in self.referencetypes: if referenceTypeF[1].title.lower() == referenceType.lower(): try: bibdata[referenceTypeF[1].title]=referenceTypeF[1].fields referenceType=referenceTypeF[1].title except: bibdata[referenceType]=referenceTypeF[1].fields bibdata['data']=referenceTypeF[1] fields=bibdata[referenceType] for field in fieldlist: retdata[field]=referenceTypeF[1].getValue(field)[1] return retdata,fieldlist,temp,fields def findTagsFromMapping(self,referenceType): """gib hash mit label -> generic zurueck""" if referenceType=="": referenceType="book" temp = self.ZopeFind(self.standardMD)[0:] #self.referencetypes=temp[0:] bibdata={} retdata={} fieldlist=self.standardMD.fieldList fields=[] for referenceTypeF in temp: #print referenceType if referenceTypeF[1].title.lower() == referenceType.lower(): try: bibdata[referenceTypeF[1].title]=referenceTypeF[1].fields referenceType=referenceTypeF[1].title except: bibdata[referenceType]=referenceTypeF[1].fields bibdata['data']=referenceTypeF[1] fields=bibdata[referenceType] for field in fieldlist: retdata[field]=referenceTypeF[1].getValue(field)[0] return retdata,fieldlist,temp,fields security.declarePublic('copyIndex_meta2echo_resource') # has to be change, presentlyset because of OSAS koordination def copyIndex_meta2echo_resource(self,RESPONSE=None): """copy MD von Index_meta to the echo_resource""" (metadict, error)=readMetadata(self.metalink) self.metaDataHash={} if not error=="": #Fehler beim Auslesen des Metafiles return "ERROR:",error,self.absolute_url() self.contentType=metadict['bib_type'][0:] fields=self.findTagsFromMapping(self.contentType) #fields=self.findLabelsFromMapping(self.contentType) for field in fields[1]: if self.isDefinedInThisSet(fields,field): #print urllib.unquote(metadict.get(self.getFieldTag(fields,field),'')) self.setFieldValue(self.getFieldTag(fields,field),metadict.get(self.getFieldTag(fields,field),'')) if RESPONSE: return RESPONSE.redirect('manage_main') def ECHO_getResourceMD(self,template="yes",back=None): """Einlesen der Metadaten und Anlegen dieser Metadaten als Informationen zur Resource""" (metadict, error)=readMetadata(self.metalink) if back: self.REQUEST.SESSION['back']=back if not error=="": #Fehler beim Auslesen des Metafiles return "ERROR:",error if not (metadict['bib_type'].lower()==self.contentType.lower()): self.REQUEST.SESSION['contentStorage']=metadict['bib_type'] self.REQUEST.SESSION['contentZope']=self.contentType return PageTemplateFile('Products/ECHO_content/zpt/ECHO_getResourceMDErrorContentType.zpt').__of__(self)() self.REQUEST.SESSION['metadict']=metadict self.REQUEST.SESSION['diffs']=checkDiffs(self,self.REQUEST.SESSION['metadict']) if template=="yes": pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_resourceMD.zpt').__of__(self) return pt() def ECHO_getMD(self,item): """Ausgabe der MD""" return getattr(self,item) def checkRDF(self,path): """check if pdf in the path""" try: for fileName in os.listdir(path): if os.path.splitext(fileName)[1]==".pdf": return os.path.join(path,fileName) return None except: return None def index_html(self): """standard page""" pdf=self.checkRDF(self.link) if pdf: fh=file(pdf,'r').read() self.REQUEST.RESPONSE.setHeader('Content-Type','x-Application/pdf') self.REQUEST.RESPONSE.write(fh) self.REQUEST.RESPONSE.close() return return self.REQUEST.RESPONSE.redirect(self.link) def startpage_html(self): """prints out a startpage for a resource for use e.g. in the BVE""" # suche ob startpage.html in dem Ordner vorhanden ist, dann wir diese angezeigt sp=self.ZopeFind(self,obj_ids=['startpage.html']) if sp: return sp[1]() #prüfen ob irgendwo ein template if hasattr(self,'startpage_index_template'): return self.startpage_index_template() #generisches template ausgeben pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_startpage_index_template_standard.zpt').__of__(self) pt.content_type="text/html" return pt() def toc_html(self): sp=self.ZopeFind(self,obj_ids=['toc.html']) if sp: return sp[0][1]() security.declarePublic('generate_label') # has to be change, presentlyset because of OSAS koordination def generate_label(self): """Erzeugt_standard_Label aus Template""" pt=getattr(self,"label_template_"+self.contentType.lower()) self.label=pt()[0:] return pt() security.declarePublic('generate_title') # has to be change, presentlyset because of OSAS koordination def generate_title(self,RESPONSE=None): """Erzeugt_standard_Label aus Template""" pt=getattr(self,"label_template_"+self.contentType.lower()) self.title=pt()[0:] return pt() Globals.InitializeClass(ECHO_resource) def manage_addECHO_resourceForm(self): """Form for adding a ressource""" pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_resourceForm.zpt').__of__(self) return pt() def manage_addECHO_resource(self,id,title,label,description,responsible,link,metalink,weight,copyrightType=None,resourceID=None,contentType=None,renderingType=None,credits=None,coords=None,RESPONSE=None): """addaresource""" newObj=ECHO_resource(id,link,metalink,resourceID,title,label,description,contentType,renderingType,copyrightType,responsible,credits,weight,coords) self._setObject(id,newObj) if RESPONSE is not None: RESPONSE.redirect('manage_main') class ECHO_externalLink(Folder,ECHO_basis): """Link zu einer externen Ressource""" security=ClassSecurityInfo() meta_type='ECHO_externalLink' def content_html(self): """template fuer content""" return ECHO_basis.content_html(self,'externalLink') def __init__(self,id,link,title,label,description,contentType,responsible,credits,weight,coords): self.id = id """Festlegen der ID""" self.credits=toList(credits) self.label = label self.link= link self.title=title self.weight=weight self.description=description self.contentType=contentType self.responsible=responsible coordsnew=[ string.split(x,",") for x in coords] self.coords=coordsnew def ECHO_externalLink_config(self): """Main configuration""" if not hasattr(self,'weight'): self.weight="" if not hasattr(self,'coords'): self.coords=[''] pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_externalLink.zpt').__of__(self) return pt() def changeECHO_externalLink(self,link,title,label,description,contentType,responsible,weight,coords=None,credits=None,RESPONSE=None): """Änderung der Properties""" try: coordsnew=[ string.split(x,",") for x in coords] except: coordsnew=[] setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coords) self.coords=coordsnew[0:] self.link=link if RESPONSE is not None: RESPONSE.redirect('manage_main') manage_options = Folder.manage_options+( {'label':'Main Config','action':'ECHO_externalLink_config'}, ) def index_html(self): """standard page""" return self.REQUEST.RESPONSE.redirect(self.link) def manage_addECHO_externalLinkForm(self): """Form for external Links""" pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_externalLinkForm.zpt').__of__(self) return pt() def manage_addECHO_externalLink(self,id,title,label,description,contentType,responsible,link,weight,coords=None,credits=None,RESPONSE=None): """Add an external Link""" newObj=ECHO_externalLink(id,link,title,label,description,contentType,responsible,credits,weight,coords) self._setObject(id,newObj) if RESPONSE is not None: RESPONSE.redirect('manage_main') class ECHO_link(ECHO_externalLink): """external_link""" meta_type="ECHO_link" def content_html(self): """template fuer link""" if hasattr(self,"link_template"): return ECHO_basis.content_html(self,'link') else: return ECHO_basis.content_html(self,'collection') def manage_addECHO_linkForm(self): """Form for external Links""" pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_linkForm.zpt').__of__(self) return pt() def manage_addECHO_link(self,id,title,label,description,contentType,responsible,link,weight,coords=None,credits=None,RESPONSE=None): """Add an external Link""" newObj=ECHO_link(id,link,title,label,description,contentType,responsible,credits,weight,coords) self._setObject(id,newObj) if RESPONSE is not None: RESPONSE.redirect('manage_main') class ECHO_collection(Folder, Persistent, Implicit, Cacheable,ECHO_basis): """ECHO Collection""" security=ClassSecurityInfo() meta_type='ECHO_collection' viewClassificationList=viewClassificationListMaster displayTypes=displayTypes path="/mpiwg/online/permanent/shipbuilding" def getRDF(self,urn=None): """rdf of the collection""" contents=self.ZopeFind(self,obj_metatypes=['ECHO_group','ECHO_resource','ECHO_collection']) ret=getRDFDescription(self,self.absolute_url(),urn=urn) if not urn: urn=self.absolute_url() li="""\n""" for content in contents: ret+=content[1].getRDF()+"\n" ret+="""\n"""%urn for content in contents: nurn=content[1].absolute_url() ret+=li%nurn return ret+"" def changeLabels(self): """change form""" pt=PageTemplateFile('Products/ECHO_content/zpt/changeLabelsForm').__of__(self) pt.content_type="text/html" return pt() def changeTitles(self): """change form""" pt=PageTemplateFile('Products/ECHO_content/zpt/changeTitleForm').__of__(self) pt.content_type="text/html" return pt() def changeWeights(self): """change form""" pt=PageTemplateFile('Products/ECHO_content/zpt/changeWeightForm').__of__(self) pt.content_type="text/html" return pt() def changeMetaDataLinks(self): """change form""" pt=PageTemplateFile('Products/ECHO_content/zpt/changeMetaDataLinkForm').__of__(self) pt.content_type="text/html" return pt() def changeAccessRightsCollection(self): """change""" ret="" argv=self.REQUEST.form resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource']) for resource in resources: try: ret+=resource[1].getId()+" "+argv[resource[1].getId()]+"
" resource[1].changeAccessRightMD(argv[resource[1].getId()]) except: """not""" return ret def changeMetaDataLinkInCollection(self): """change all lables of a collection""" ret="" argv=self.REQUEST.form resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource']) for resource in resources: try: ret+=resource[1].getId()+" "+argv[resource[1].getId()]+"
" resource[1].metalink=argv[resource[1].getId()][0:] except: """not""" return ret def changeMetaDataLinkInCollection(self): """change all lables of a collection""" ret="" argv=self.REQUEST.form resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource']) for resource in resources: try: ret+=resource[1].getId()+" "+argv[resource[1].getId()]+"
" resource[1].metalink=argv[resource[1].getId()][0:] except: """not""" return ret def changeWeightsInCollection(self): """change all lables of a collection""" ret="" argv=self.REQUEST.form resources=self.ZopeFind(self,obj_metatypes=['ECHO_pageTemplate','ECHO_resource','ECHO_collection','ECHO_link','ECHO_externalLink']) for resource in resources: try: ret+=resource[1].getId()+" "+argv[resource[1].getId()]+"
" resource[1].weight=argv[resource[1].getId()][0:] except: """not""" return ret def changeTitlesInCollection(self): """change all lables of a collection""" ret="" argv=self.REQUEST.form resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource']) for resource in resources: try: ret+=resource[1].getId()+" "+argv[resource[1].getId()]+"
" resource[1].title=argv[resource[1].getId()][0:] except: """not""" return ret def updateCollection(self,RESPONSE=None): """liest verzeichnisse aus dem pfad und legt sie dann als objekte in den ordner""" files=os.listdir(self.path) ret="" for fileName in files: if fileName: tempPath=re.sub("/mpiwg/online","",self.path) link="http://echo.mpiwg-berlin.mpg.de/zogilib_book?fn="+tempPath+"/"+fileName+"/pageimg" metalink=self.path+"/"+fileName+"/index.meta" try: #link="http://nausikaa2.mpiwg-berlin.mpg.de/cgi-bin/toc/toc.x.cgi?dir="+fileName+"&step=thumb" newObj=ECHO_resource(fileName,link,metalink,fileName,fileName,fileName,'generated','book','','','','','','') self._setObject(fileName,newObj) genObj=getattr(self,fileName) #genObj.createIndexFile() ret+="OK:"+fileName+"
" except: print "ERROR" ret+="ERROR:"+fileName+"
" return ret if RESPONSE is not None: RESPONSE.redirect('manage_main') def updateCollectionMD(self,RESPONSE=None): """updateMD""" files=os.listdir(self.path) for fileName in files: if fileName: genObj=getattr(self,fileName) genObj.copyIndex_meta2echo_resource() genObj.generate_title() if RESPONSE is not None: RESPONSE.redirect('manage_main') def changeViewerTemplateSetsForm(self): """change the viewer template set""" pt=PageTemplateFile('Products/ECHO_content/zpt/changeViewerTemplateSet').__of__(self) return pt() def getViewerTemplateSets(self,obj_ids=None,RESPONSE=None): """Get the ViewerTemplateSet title for configuration""" ret=[] try: viewerTemplateSets=self.ZopeFind(self.viewerTemplateSets,obj_metatypes=['OSAS_viewerTemplateSet'],obj_ids=obj_ids)#assumes viewerTemplateSets folder somewhere in the hierarchie. for viewerTemplateSet in viewerTemplateSets: ret.append((viewerTemplateSet[1].title,viewerTemplateSet[0],viewerTemplateSet[1])) return ret except: return [('no ViewerTemplateSetfolders','')] def getTextToolsField(self,name,default=''): """Lese viewerTemplateSet der Collection not implemented yet!""" return default def isSelectedViewerTemplateSet(self,obj,id): """is ausgewählt""" if self.REQUEST['viewerTemplateSet']==id: return 1 else: return None def changeViewerTemplateSets(self,project,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix,RESPONSE=None): """change the templates""" resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1) for resource in resources: resource[1].changeViewerTemplateSet(project,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix) if RESPONSE is not None: RESPONSE.redirect('manage_main') def setStartpageFolderForm(self): """Form for changing the startpage""" pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resourceStartPageFolder.zpt').__of__(self) pt.content_type="text/html" return pt() def setStartpageFolder(self,startpage=None,RESPONSE=None): """change the templates""" resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1) for resource in resources: resource[1].setStartPage(startpage) if RESPONSE is not None: RESPONSE.redirect('manage_main') def copyTitleToInfoXMLFolder(self,RESPONSE=None): """copy title into the title field of info.xml author and date werden leer!!! """ resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1) for resource in resources: ret,txt=resource[1].copyTitleToInfoXML() if (not ret) and RESPONSE: RESPONSE.write("error: %s\n"%txt) if ret and RESPONSE: RESPONSE.write("ok: %s\n"%txt) #zLOG.LOG("ECHO (copyTitleToInfoXMLFolder)",zLOG.INFO,txt) if RESPONSE is not None: RESPONSE.write("done!\n") RESPONSE.close() RESPONSE.redirect('manage_main') def copySearchFields(self,RESPONSE=None): """copys import metadatafields to the object""" resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource']) for resource in resources: resource[1].copySearchFields() if RESPONSE is not None: RESPONSE.redirect('manage_main') def reloadMetaDataFromStorageWarning(self,RESPONSE=None): """warning""" pt=PageTemplateFile('Products/ECHO_content/zpt/reloadMetaDataFromStorageWarning.zpt').__of__(self) pt.content_type="text/html" return pt() def reloadMetaDataFromStorage(self,RESPONSE=None): """copy metadata from the storage to ECHO""" return reloadMetaDataFromStorage(self,RESPONSE=None) def getPartnerCopyright(self,name,sonst="generic"): """gibt generisches copyright eines partners aus, sonst behalte jetzige einsteillung""" #print "hi",name,sonst #print getattr(self.partners,name).copyrightType try: partner=getattr(self.partners,name) return partner.copyrightType except: print "error" return sonst def partnerSelector_HTML(self,selected=None): """give type selector""" if not selected: retStr="

Added

" for resource in dom.getElementsByTagName('resource'): link=getText(resource.getElementsByTagName('link')[0].childNodes) label=getText(resource.getElementsByTagName('label')[0].childNodes) #splitted=link.split("?")[0].split("/") #id=splitted[len(splitted)-1].encode('ascii') id=re.sub(" ","_",label).encode('ascii') ret+="

"+label+"

" manage_addECHO_resource(self,id,label.encode('ascii'),label.encode('ascii'),"","","",link.encode('ascii'),"","") return ret def getImageTag(self): """GetTag""" try: return self.imageTag except: return "" def addResource(self,id,title,label,description,contentType,responsible,link,metalink,weight,credits=None,coords=None,RESPONSE=None): """SSS""" try: manage_addECHO_resource(self,id,title,label,description,responsible,link,metalink,weight,credits=None,coords=None,RESPONSE=None) return "done" except: return None def getSecondaryLink(self): """secondary link""" try: return self.secondaryLink except: return "" def getSecondaryLinkTitle(self): """secondary link""" try: return self.secondaryLinkTitle except: return "" def getCollectionTreeXML(self): """Tree as XML""" def addPassWd(str): """adds a user/passwd to an url""" txt2=re.sub(r"(http://)(.*?)","\g<1>www:3333@\g<2>",str) return txt2 def getCollection(object,depth=0): depth+=1 collections="" for entry in object.__dict__.keys(): element=getattr(object,entry) try: if element.meta_type in ["ECHO_collection","ECHO_group"]: collections+="" collections+=getCollection(element,depth)+"\n" except: """nothing""" return collections ret="""""" return ret+""+getCollection(self)+"" def createJavaScript(self): """OLD CreateJava""" ret=javaScriptMain dynamical="\n" for ob in self.getGraphicCoords(): if ob[4][4] == "": dynamical+="""Coords.push(new Coord('%s', Img, %s));\n"""%(ob[1],ob[0]) else: dynamical+="""Coords.push(new Coord('%s', Img, %s));//%s\n"""%(ob[1],ob[0],ob[4][4]) dynamical+="ShowArrow(new getObj('i.%s'),Img,%s);\n"%(ob[1],ob[0]) ret+=javaHandler%dynamical return ret def createJSAreas(self): """create area calls for JavaScript""" dynamical="\n" for ob in self.getGraphicCoords(): if ob[5] == "area": dynamical+="""addArea('%s', 'overview', %s, 'area');\n"""%(ob[1],ob[0]) else: dynamical+="""addArea('%s', 'overview', %s, 'arrow');\n"""%(ob[1],ob[0]) return dynamical def createMapHead(self): """create javascript include and script tags for head""" pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt/ECHO_content_map_frag_js')).__of__(self) return pt() def createMapImg(self): """generate img-tag for map""" bt = BrowserCheck(self) tag = "" src = self.REQUEST['URL1'] + "/overview" if bt.isN4: tag += ''%src else: tag += ''%src return tag def createMapLink(self, ob, text=None): """generate map link""" bt = BrowserCheck(self) id = ob[1] link = ob[1] if text == None: text = ob[2] tag = "" if bt.isN4: tag += '" else: tag = '" return tag def createMapAux(self, ob, arrowsrc="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?dw=15&fn=icons/pfeil"): """generate map link image, text and other stuff""" id = ob[1] link = ob[1] vtype = ob[5] ctype = ob[3].contentType bt = BrowserCheck(self) tag = "" if bt.isN4: tag += ''%(id,id,id) if vtype == "view point": rot = ob[4][4] tag += ''%(link,arrowsrc,rot) else: tag += ''%(id,id,id,link) if vtype == "view point": rot = ob[4][4] if bt.isIEWin and bt.versIE > 5: tag += ''%(id,arrowsrc,rot,arrowsrc,rot) else: tag += ''%(id,arrowsrc,rot) else: if bt.isIEWin: tag += '
3: coord=coordtemp[0:4] label="" vc="" if hasattr(object,'label') and not object.label=="": label=object.label elif hasattr(object,'title') and not object.title=="": label=object.title else: label=object.getId() if object.viewClassification != "": vc=object.viewClassification else: if len(coordtemp) > 4 and coordtemp[4] != "": vc="view point" else: vc="area" ids.append([string.join(coord,", "),object.getId(),label,object,coordtemp,vc]) return ids getSubCols = ECHO_helpers.getSubCols Globals.InitializeClass(ECHO_collection) def manage_addECHO_collectionForm(self): """Add collection form""" pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_collectionForm.zpt').__of__(self) return pt() def manage_addECHO_collection(self,id,title,label,description,contentType,responsible,weight,sortfield,coords="",secondaryLinkTitle="",secondaryLink="",credits=None,RESPONSE=None,imageTag="",bgcolour=""): """add a echo collection""" newObj=ECHO_collection(id,title,label,description,contentType,responsible,credits,weight,sortfield,coords,secondaryLinkTitle=secondaryLinkTitle,secondaryLink=secondaryLink,imageTag=imageTag,bgcolour="") self._setObject(id,newObj) if RESPONSE is not None: RESPONSE.redirect('manage_main') class ECHO_group(ECHO_collection): """ECHO Gruppe""" security=ClassSecurityInfo() meta_type="ECHO_group" manage_options = Folder.manage_options+( {'label':'Main Config','action':'ECHO_group_config'}, {'label':'Rerender Links','action':'ECHO_rerenderLinksMDWarning'}, {'label':'Graphics','action':'ECHO_graphicEntry'}, ) security.declareProtected('View','index_html') def getRDF(self,urn=None): """rdf of the collection""" contents=self.ZopeFind(self,obj_metatypes=['ECHO_group','ECHO_resource','ECHO_collection']) ret=getRDFDescription(self,self.absolute_url(),urn=urn) if not urn: urn=self.absolute_url() li="""\n""" for content in contents: ret+=content[1].getRDF()+"\n" ret+="""\n"""%urn for content in contents: nurn=content[1].absolute_url() ret+=li%nurn return ret+"" def index_html(self): """standard page""" displayedObjects=self.ZopeFind(self,obj_metatypes=displayTypes) #if (len(displayedObjects)==1) and (displayedObjects[0][1].meta_type=="ECHO_collection"): # nur ein Object dann redirect auf dieses Object # return self.REQUEST.RESPONSE.redirect(displayedObjects[0][1].absolute_url()) if 'index.html' in self.__dict__.keys(): return getattr(self,'index.html')() elif 'overview' in self.__dict__.keys(): return self.showOverview() elif hasattr(self,'group_index_template'): return self.group_index_template() elif hasattr(self,'collection_index_template'): return self.collection_index_template() elif hasattr(self,'main_index_template'): return self.main_index_template() pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_main_index_template_standard.zpt').__of__(self) pt.content_type="text/html" return pt() def ECHO_group_config(self): """Main configuration""" if not hasattr(self,'weight'): self.weight="" if not hasattr(self,'sortfield'): self.sortfield="weight" if not hasattr(self,'coords'): self.coords=[] pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_group.zpt').__of__(self) return pt() def changeECHO_group(self,title,label,description,contentType,responsible,weight,secondaryLink,secondaryLinkTitle,credits=None,sortfield="weight",coords=None,RESPONSE=None,imageTag="",bgcolour="",logo=""): """Änderung der Properties""" self.secondaryLink=secondaryLink self.secondaryLinkTitle=secondaryLinkTitle self.imageTag=imageTag self.bgcolour=bgcolour self.logo=logo if coords: coordsnew=[ string.split(x,",") for x in coords] self.coords=coordsnew[0:] else: coordsnew=None self.coords=None setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordsnew) self.sortfield=sortfield if RESPONSE is not None: RESPONSE.redirect('manage_main') def getLogo(self): """logo ausgeben""" try: return self.logo except: return "ECHO_groups" def content_html(self): """template fuer content""" return ECHO_basis.content_html(self,'group') def manage_addECHO_groupForm(self): """Add group form""" pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_groupForm.zpt').__of__(self) return pt() def manage_addECHO_group(self,id,title,label,description,contentType,responsible,weight,sortfield,coords="",secondaryLinkTitle="",secondaryLink="",credits=None,RESPONSE=None,imageTag="",bgcolour="",logo=""): """add a echo group""" newObj=ECHO_group(id,title,label,description,contentType,responsible,credits,weight,sortfield,coords,secondaryLinkTitle=secondaryLinkTitle,secondaryLink=secondaryLink,imageTag=imageTag,bgcolour="") setattr(newObj,'logo',logo) self._setObject(id,newObj) if RESPONSE is not None: RESPONSE.redirect('manage_main') Globals.InitializeClass(ECHO_group) class ECHO_userFolder(UserFolder): """User folder for Intranet""" _domain_auth_mode=1 # Identification via domain meta_type="ECHO_userFolder" def authenticate(self, name, password, request): emergency = self._emergency_user if name is None: return None if emergency and name==emergency.getUserName(): user = emergency else: user = self.getUser(name) if user is not None and user.authenticate(password, request): return user else: return None def domainSpecMatch(self,spec, request): host='' addr='' # Fast exit for the match-all case if len(spec) == 1 and spec[0] == '*': return 1 if request.has_key('REMOTE_HOST'): host=request['REMOTE_HOST'] if request.has_key('REMOTE_ADDR'): addr=request['REMOTE_ADDR'] if request.has_key('HTTP_X_FORWARDED_FOR'): addr=request['HTTP_X_FORWARDED_FOR'] if not host and not addr: return 0 if not host: try: host=socket.gethostbyaddr(addr)[0] except: pass if not addr: try: addr=socket.gethostbyname(host) except: pass _host=host.split('.') _addr=addr.split('.') _hlen=len(_host) _alen=len(_addr) for ob in spec: sz=len(ob) _ob=ob.split('.') _sz=len(_ob) mo = addr_match(ob) if mo is not None: if mo.end(0)==sz: fail=0 for i in range(_sz): a=_addr[i] o=_ob[i] if (o != a) and (o != '*'): fail=1 break if fail: continue return 1 mo = host_match(ob) if mo is not None: if mo.end(0)==sz: if _hlen < _sz: continue elif _hlen > _sz: _item=_host[-_sz:] else: _item=_host fail=0 for i in range(_sz): h=_item[i] o=_ob[i] if (o != h) and (o != '*'): fail=1 break if fail: continue return 1 return 0 Globals.default__class_init__(ECHO_userFolder) def manage_addECHO_userFolder(self,dtself=None,REQUEST=None,**ignored): """add a user folder """ f=ECHO_userFolder() self=self.this() try: self._setObject('acl_users', f) except: return MessageDialog( title ='Item Exists', message='This object already contains a User Folder', action ='%s/manage_main' % REQUEST['URL1']) self.__allow_groups__=f if REQUEST is not None: REQUEST['RESPONSE'].redirect(self.absolute_url()+'/manage_main') def manage_addECHO_userFolderForm(self): """add a user folder form""" return manage_addECHO_userFolder(self) def createNode(self,descrs,node): name=descrs[node]['name'] type=descrs[node]['type'] urn=node #print " will create",node.encode('utf-8') id=re.sub('[^a-zA-Z0-9]','',name).encode('ascii','ignore') #print "id",id #print type #self.REQUEST.RESPONSE.write("

%s

\n"%id) if type=="CDLI_group": try: manage_addECHO_collection(self,id,name,name,"","","","","") except: self.REQUEST.RESPONSE.write("

Error%s

\n"%id) self.REQUEST.RESPONSE.write("

Creates:%s

\n"%getattr(self,id).absolute_url()) return type,getattr(self,id),urn if type=="CDLI_item": try: manage_addECHO_resource(self,id,name,name,"","",urn,"","") except: self.REQUEST.RESPONSE.write("

Error%s

\n"%id) self.REQUEST.RESPONSE.write("

Creates:%s

\n"%getattr(self,id).absolute_url()) return "XX" class ECHO_root(Folder,Persistent,Implicit): """ECHO Root Folder""" security=ClassSecurityInfo() meta_type="ECHO_root" ###CDLI adds -> have to be removed def getTablet(self,item): #print "getTablet" try: read=urllib.urlopen("http://enlil.museum.upenn.edu/cgi-bin/cdlget.plx?item=%s&project=ncdl"%item).read() read=re.sub("\[search\]","search",read) return read[read.find("")+6:read.rfind("")] except: return "

Sorry no connection to the data server enlil.museum.upenn.edu

" #return "http://enlil.museum.upenn.edu/cgi-bin/cdlget.plx?item=%s&project=ncdl" ###END CDLI add def checkResource(self,id): """checks if a resource is in the tree, gives back none or list of resources""" if hasattr(self,"_v_checkResource") and self._v_checkResource.has_key(id): #existiert ein cache und id ist bereits drin? return self._v_checkResource[id] else: resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'],obj_ids=[id],search_sub=1) if not hasattr(self,"_v_checkResource"): self._v_checkResource={}#lege cache an falls nicht existent if resources: self._v_checkResource[id]=resources[0:] # slicing to be sure that data is stabil else: self._v_checkResource[id]=None return self._v_checkResource[id] def sendForm(self,fromaddr,content,server='mail.mpiwg-berlin.mpg.de'): """sendform""" toaddrs=["dwinter@mpiwg-berlin.mpg.de"] msg = ("From: %s\r\nTo: %s\r\nSubject: %s\r\n\r\n" % (fromaddr, ", ".join(toaddrs),"testsub")) server = smtplib.SMTP(server) #server.set_debuglevel(1) msg=msg+content server.sendmail(fromaddr, toaddrs, msg) server.quit() def generateFromRDFForm(self): """change form""" pt=PageTemplateFile('Products/ECHO_content/zpt/generateFromRDFForm').__of__(self) pt.content_type="text/html" return pt() def generateFromRDF(self,file,startNode="/Cuneiform Corpus"): """generate from RDF""" global seqs seqs={} global descrs descrs={} global key key="" global value value="" def getEdges(seqs,urn): """edges""" ret=[] return seqs[urn] def createSubs(self,seqs,descrs,urn,level=0): """create subs""" for edge in getEdges(seqs,urn): cn=createNode(self,descrs,edge) if cn[0]=="CDLI_group": createSubs(cn[1],seqs,descrs,cn[2],level+1) return def start_element(name,attrs): global seqs global descrs global key global value seq="" if name=="RDF:Seq": key=attrs.get('RDF:about') try: # teste ob liste x=seqs[key][0] except: seqs[key]=[] elif name=="RDF:Description": key=attrs.get('RDF:about') elif name=="RDF:li": name=attrs.get('RDF:resource') seqs[key].append(name) elif name=="ECHONAVIGATION:type": value="type" elif name=="ECHONAVIGATION:name": value="name" elif name=="ECHONAVIGATION:linkClickable": value="linkClickable" def end_element(name): """nothing""" key="" value="" def char_data(data): """nothing""" data=re.sub("\n","",data) try: if descrs[key].has_key(value): descrs[key][value]+=data else: descrs[key][value]=data except: descrs[key]={} descrs[key][value]=data p = xml.parsers.expat.ParserCreate() p.StartElementHandler = start_element p.EndElementHandler = end_element p.CharacterDataHandler = char_data p.ParseFile(file) self.REQUEST.RESPONSE.write("

Start

") createSubs(self,seqs,descrs,startNode) self.REQUEST.RESPONSE.write("

done

") #print "done" return "done" def changeWeightsInCollection(self): """change all lables of a collection""" ret="" argv=self.REQUEST.form resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource','ECHO_collection','ECHO_link','ECHO_externalLink']) for resource in resources: try: ret+=resource[1].getId()+" "+argv[resource[1].getId()]+"
" resource[1].weight=argv[resource[1].getId()][0:] except: """not""" return ret def changeWeights(self): """change form""" pt=PageTemplateFile('Products/ECHO_content/zpt/changeWeightForm').__of__(self) pt.content_type="text/html" return pt() getSubCols = ECHO_helpers.getSubCols manage_options=Folder.manage_options+( {'label':'Main Config','action':'ECHO_copyright_configForm'}, {'label':'Reload Metadata','action':'reloadMetaDataFromStorageWarning'}, {'label':'Change Weights','action':'changeWeights'}, {'label':'Generate from RDF','action':'generateFromRDFForm'}, ) def reloadMetaDataFromStorageWarning(self,RESPONSE=None): """warning""" pt=PageTemplateFile('Products/ECHO_content/zpt/reloadMetaDataFromStorageWarning.zpt').__of__(self) pt.content_type="text/html" return pt() def reloadMetaDataFromStorage(self,RESPONSE=None): """reload MD from Storage""" return reloadMetaDataFromStorage(self,RESPONSE) def getRDF(self,urn=None): """rdf of the collection""" contents=self.ZopeFind(self,obj_metatypes=['ECHO_group','ECHO_resource','ECHO_collection']) ret=getRDFDescription(self,self.absolute_url(),urn=urn) li="""\n""" for content in contents: ret+=content[1].getRDF()+"\n" ret+="""\n"""%urn for content in contents: nurn=content[1].absolute_url() ret+=li%nurn return ret+"" def showContent(self,path): """return content/html""" return ECHO_helpers.urlopen(path+"/content_html").read() def getImageViewers(self): """images""" viewers=self.ZopeFind(self.standardImageViewer,obj_metatypes=['OSAS_ViewerObject']) return viewers def getBibTag(self,tag,content): """get field tag für index-meta-generation""" if not content or content=="": return "" ret="<%s>"%tag #ret+=urllib.quote(content) ret+=content ret+=""%tag return ret def getValueFromClass(self,field,found): """retattribute falss existing""" try: return getattr(found,field).decode('ascii','ignore') except: return "" def getImageTag(self): """needed by main_template""" return "" secondaryLink="" #needed by main_template secondaryLinkTitle="" #needed by main_template def getBgcolour(self): """hack""" return "#dddddd" def contentTypeSelector_HTML(self,selected=None): """give type selector""" if not selected: retStr="
%s
"""%(strUrl,word) str=retStr if str: return re.sub(r"[\n]","
",str) else: return "" def link2html(self,str): """link2html fuer VLP muss hier noch raus""" if str: str=re.sub("\&","&",str) dom=xml.dom.minidom.parseString(""+str+"") links=dom.getElementsByTagName("link") for link in links: link.tagName="a" ref=link.getAttribute("ref") pn=link.getAttribute("page") if self.checkRef(ref): if pn: link.setAttribute("href",self.aq_parent.absolute_url()+"/references?id="+ref+"&p="+pn) else: link.setAttribute("href",self.aq_parent.absolute_url()+"/references?id="+ref) newxml=dom.toxml('utf-8') retStr=regexpTXT.search(newxml) return retStr.group(1) return "" def xml2html(self,str,quote="yes"): """link2html fuer VLP muss hier noch raus""" if str: if quote=="yes2": str=re.sub("\&","&",str) #dom=xml.dom.minidom.parseString(str) dom = NonvalidatingReader.parseString(str,"http://www.mpiwg-berlin.mpg.de/") #links=dom.getElementsByTagName("link") links=Ft.Xml.XPath.Evaluate(".//link", contextNode=dom) for link in links: #link.tagName="a" ref=link.getAttributeNS(EMPTY_NAMESPACE,"ref") pn=link.getAttributeNS(EMPTY_NAMESPACE,"page") cns=link.childNodes[0:] newLink=dom.createElementNS(EMPTY_NAMESPACE,"a") for x in cns: newLink.appendChild(x) link.parentNode.replaceChild(newLink,link) if self.checkRef(ref): if pn: newLink.setAttributeNS(EMPTY_NAMESPACE,"href",self.aq_parent.absolute_url()+"/vlp_coll?id="+ref+"&p="+pn) else: newLink.setAttributeNS(EMPTY_NAMESPACE,"href",self.aq_parent.absolute_url()+"/vlp_coll?id="+ref) #str= dom.toxml('utf-8') buf = cStringIO.StringIO() PrettyPrint(dom, stream=buf, encoding='UTF-8') str = buf.getvalue() buf.close() #str=PrettyPrint(dom.documentElement,encoding='UTF-8') #print link.toxml('utf-8') #print type(str) retStr=regexpPage.search(str) try: # hack warum fehtl manchmal page?? return retStr.group(1) except: return str return "" def checkRef(self,ref): if ref[0:3]=='lit': if len(self.library_data({ 'id':ref}))>0: return 1 try: if ref[0:7]=="tec_cat": return 1 except: """nothing""" dbs={'vl_technology':'','vl_people':'','vl_sites':''} res=None for db in dbs.keys(): res=res or self.search(var=str("select reference from %s where reference =\'%s\' %s"%(db,ref,dbs[db]))) return res #Ende Methode fuer vlp def PgQuoteString(self,string): """Quote string""" return libpq.PgQuoteString(string) def getPartners(self): """Get list of Partners. Presently only from a subfolder partners""" if hasattr(self,'partners'): return [ item[1] for item in self.partners.ZopeFind(self.partners,obj_metatypes=['ECHO_partner'])] else: return [] def getInstitutions(self): """Get list of Partners. Presently only from a subfolder partners""" return [ item[1] for item in self.institutions.ZopeFind(self.institutions,obj_metatypes=['ECHO_institution'])] def getPartnersXML(self): """partner liste als xml""" partners=self.getPartners() ret=""" """ for partner in partners: ret+="""\n"""%(partner.getId(),partner.title) return ret+"\n" def getCollectionTree(self): """get the collection tree (list of triples (parent,child, depth)""" def getCollection(object,depth=0): depth+=1 collections=[] for entry in object.__dict__.keys(): element=getattr(object,entry) try: if element.meta_type=="ECHO_collection": collections.append((object,element,depth)) collections+=getCollection(element,depth) except: """nothing""" return collections return getCollection(self) def getCollectionTreeIds(self): """Show the IDs of the Tree""" ret=[] for collection in self.getCollectionTree(): ret.append((collection[0].getId(),collection[1].getId(),collection[2])) return ret def getResourcesHTML(self,viewerType=None,filter=None): """gebe all ressourcen aus""" def sortHTML(x,y): return cmp(x[1].title,y[1].title) ret="""

Resources in ECHO

""" resources = self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1) ret+="""

Found %i resources

"""%len(resources) resources.sort(sortHTML) for resource in resources: echo_url=resource[1].absolute_url() if hasattr(resource[1],'title'): title=resource[1].title else: title="None" if filter: if re.search(filter,title): ret+="""\n

%s

"""%(echo_url,title) else: ret+="""\n

%s

"""%(echo_url,title) ret +="""\n""" #self.REQUEST.RESPONSE.setHeader("Content-Type", "text/html") #self.REQUEST.RESPONSE.write(ret) return ret def getResourcesXML(self,viewerType=None,filter=None): """gebe all ressourcen aus""" ret=""" """ for resource in self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1): echo_url=resource[1].absolute_url() if hasattr(resource[1],'link'): viewer_url=resource[1].link else: viewer_url="NO URL" if filter: if re.search(filter,viewer_url): ret+="""\n"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(viewer_url,safe='/:?')) else: ret+="""\n"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(viewer_url,safe='/:?')) ret +="""\n""" self.REQUEST.RESPONSE.setHeader("Content-Type", "text/xml") self.REQUEST.RESPONSE.write(ret) def getFullTextsXML(self,viewerType=None,filter=None): """gebe all ressourcen aus""" ret=""" """ for resource in self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1): echo_url=resource[1].absolute_url() if resource[1].getFullTextXML(noredirect="yes"): if hasattr(resource[1],'link'): viewer_url=echo_url+"/getFullTextXML" else: viewer_url="NO URL" if filter: if re.search(filter,viewer_url): ret+="""\n"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(viewer_url,safe='/:?')) else: ret+="""\n"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(viewer_url,safe='/:?')) ret +="""\n""" self.REQUEST.RESPONSE.setHeader("Content-Type", "text/xml") self.REQUEST.RESPONSE.write(ret) def getMetaDatasXML(self,viewerType=None,filter=None): """gebe all ressourcen aus""" # check if the request's host part was OK http_host = self.REQUEST['HTTP_HOST'] host_port = self.REQUEST['SERVER_PORT'] fix_host = None if http_host and http_host.rfind(host_port) == -1: print "HTTP_HOST needs fixing!" fix_host = http_host + ":" + host_port ret=""" """ for resource in self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1): echo_url=resource[1].absolute_url() if fix_host: #print "replacing ", http_host, " by ", fix_host echo_url = string.replace(echo_url, http_host, fix_host, 1) if hasattr(resource[1],'link'): meta_url=echo_url+"/getMetaDataXML" else: meta_url="NO_URL" if filter and not re.search(filter,viewer_url): continue #modificationDate=time.strptime(str(resource[1].bobobase_modification_time()),"%Y/%m/%d %H:%M:%S %Z") modificationDate=resource[1].bobobase_modification_time().strftime("%Y/%m/%d %H:%M:%S") ret+="""\n"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(meta_url,safe='/:?'),modificationDate) ret +="""\n""" self.REQUEST.RESPONSE.setHeader("Content-Type", "text/xml") self.REQUEST.RESPONSE.write(ret) def findPartners(self): """find all partners in partners""" par=self.ZopeFind(self.partners, obj_metatypes='ECHO_partner') return par def getPartnerFromID(self): """find partner form ID return object""" pa=self.REQUEST['partner'] par=self.ZopeFind(self.partners, obj_ids=[pa]) return par def getPartnerFromIDParameter(self, id): """ find partners from ID""" par=self.ZopeFind(self.partners, obj_ids=[id]) return par def getInstitutionFromID(self,id): """ find institution from id """ inst=self.ZopeFind(self.institutions, obj_ids=[id]) return inst def manage_addECHO_root(self,id,title,RESPONSE=None): """Add an ECHO_root""" self._setObject(id,ECHO_root(id,title)) if RESPONSE is not None: RESPONSE.redirect('manage_main') def manage_addECHO_rootForm(self): """Nothing yet""" pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_root.zpt').__of__(self) return pt() class ECHO_copyrightType(Folder,ECHO_basis): """copyright typ""" meta_type="ECHO_copyrightType" def __init__(self,id,title,label,url): """init""" self.id=id self.title=title self.label=label self.url=url manage_options = Folder.manage_options+( {'label':'Main Config','action':'ECHO_copyrightType_config_mainForm'}, ) def ECHO_copyrightType_config_mainForm(self): """change form""" pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_copyrightType').__of__(self) pt.content_type="text/html" return pt() def ECHO_copyrightType_config_main(self,title,label,url,RESPONSE=None): """change""" self.title=title self.label=label self.url=url if RESPONSE is not None: RESPONSE.redirect('manage_main') def manage_addECHO_copyrightTypeForm(self): """Form for adding a ressource""" pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_copyrightTypeForm.zpt').__of__(self) return pt() def manage_addECHO_copyrightType(self,id,title,label,url,RESPONSE=None): """addaresource""" newObj=ECHO_copyrightType(id,title,label,url) self._setObject(id,newObj) if RESPONSE is not None: RESPONSE.redirect('manage_main') class ECHO_partner(Image,Persistent,ECHO_basis): """ECHO Partner""" meta_type="ECHO_partner" def __init__(self, id, title,url, file, copyrightType, person, email, country, color, content_type='', precondition=''): self.__name__=id self.title=title self.url=url self.person=person self.email=email self.country=country self.color=color self.precondition=precondition self.copyrightType=copyrightType data, size = self._read_data(file) content_type=self._get_content_type(file, data, id, content_type) self.update_data(data, content_type, size) manage_options = Image.manage_options+( {'label':'Partner Information','action':'ECHO_partner_config'}, ) def changeECHO_partner(self,url,copyrightType,person, email, country, color, RESPONSE=None): """Change main information""" self.url=url self.person=person self.email=email self.country=country self.color=color self.copyrightType=copyrightType if RESPONSE is not None: RESPONSE.redirect('manage_main') def ECHO_partner_config(self): """Main configuration""" if not hasattr(self,'url'): self.url="" pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_partner.zpt').__of__(self) return pt() manage_addECHO_partnerForm=DTMLFile('dtml/ECHO_partnerAdd',globals(), Kind='ECHO_partner',kind='ECHO_partner') def manage_addECHO_partner(self, id, url, person, email, country, color, file=None, copyrightType='', title='', precondition='', content_type='', REQUEST=None): """ Add a new ECHO_partner object. Creates a new ECHO_partner object 'id' with the contents of 'file'. Based on Image.manage_addImage """ id=str(id) title=str(title) content_type=str(content_type) precondition=str(precondition) id, title = OFS.Image.cookId(id, title, file) self=self.this() # First, we create the image without data: self._setObject(id, ECHO_partner(id,title,url,'',copyrightType, person, email, country, color, content_type, precondition)) # Now we "upload" the data. By doing this in two steps, we # can use a database trick to make the upload more efficient. if file: self._getOb(id).manage_upload(file) if content_type: self._getOb(id).content_type=content_type if REQUEST is not None: try: url=self.DestinationURL() except: url=REQUEST['URL1'] REQUEST.RESPONSE.redirect('%s/manage_main' % url) return id class ECHO_linkList(ZopePageTemplate,ECHO_basis): """LinkList Objekt""" meta_type="ECHO_linkList" _default_content_fn = os.path.join(package_home(globals()), 'html/ECHO_pageTemplateDefault.html') manage_options = ZopePageTemplate.manage_options+( {'label':'Main Config','action':'changeECHO_linkListWeightForm'}, ) def content_html(self): """content_html""" return ECHO_basis.content_html(self,'pageTemplate') def changeECHO_linkListWeightForm(self): """change""" pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_linkListTemplate.zpt').__of__(self) return pt() def changeECHO_linkListWeight(self,contentType,label,RESPONSE=None): """change""" self.contentType=contentType self.label=label if RESPONSE is not None: RESPONSE.redirect('manage_main') def getLabel(self): if hasattr(self,'label'): return self.label.encode('utf-8') else: return 0 def getcontentType(self): """get contentType""" if hasattr(self,'contentType'): return self.contentType else: return 0 def __init__(self, id, label, title=None, text=None, contentType=None): self.id = str(id) self.title=title self.label=label self.ZBindings_edit(self._default_bindings) if text is None: text = '' self.pt_edit(text, contentType) def manage_addECHO_linkListForm(self): """Form for adding""" pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_linkListTemplate.zpt').__of__(self) return pt() from urllib import quote def manage_addECHO_linkList(self, id, label,contentType=0,title=None, text=None, REQUEST=None, submit=None): """Add a LinkList with optional file content.""" id = str(id) if REQUEST is None: self._setObject(id, ECHO_linkList(id, label, text)) ob = getattr(self, id) setattr(ob,'contentType',contentType) 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 = ECHO_linkList(id, file) else: zpt = ECHO_linkList(id, label,'', file, headers.get('contentType')) self._setObject(id, zpt) ob = getattr(self, id) if title: ob.pt_setTitle(title) try: u = self.DestinationURL() except AttributeError: u = REQUEST['URL1'] if submit == " Add and Edit ": u = "%s/%s" % (u, quote(id)) REQUEST.RESPONSE.redirect(u+'/manage_main') return '' class ECHO_support(Folder,ECHO_basis): """gefoerdert durch""" meta_type="ECHO_support" def __init__(self,id,institutions=None): """init""" self.id=id self.title='' self.institutions=toList(institutions) def getSupporter(self): """return institutions""" if self.institutions: return self.institutions else: return [] manage_options = Folder.manage_options+( {'label':'Main Config','action':'ECHO_support_configForm'}, ) def ECHO_support_configForm(self): """change form""" pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_support').__of__(self) pt.content_type="text/html" return pt() def ECHO_support_config(self,institutions=None,RESPONSE=None): """change""" self.institutions=toList(institutions) if RESPONSE is not None: RESPONSE.redirect('manage_main') def manage_addECHO_supportForm(self): """Form for adding""" pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_support.zpt').__of__(self) return pt() def manage_addECHO_support(self, id,institutions=None,RESPONSE=None): """add the copyright""" meta_type="ECHO_support" self._setObject(id, ECHO_support(id,institutions)) if RESPONSE is not None: RESPONSE.redirect('manage_main') class ECHO_institution(Image,Persistent,ECHO_basis): """ECHO Institution""" meta_type="ECHO_institution" def __init__(self, id, title,url, file, person, email, country, content_type='', precondition=''): self.__name__=id self.title=title self.url=url self.person=person self.email=email self.country=country self.precondition=precondition data, size = self._read_data(file) content_type=self._get_content_type(file, data, id, content_type) self.update_data(data, content_type, size) manage_options = Image.manage_options+( {'label':'Institution Information','action':'ECHO_institution_config'}, ) def changeECHO_institution(self,url,person, email, country,RESPONSE=None): """Change main information""" self.url=url self.person=person self.email=email self.country=country if RESPONSE is not None: RESPONSE.redirect('manage_main') def ECHO_institution_config(self): """Main configuration""" if not hasattr(self,'url'): self.url="" pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_institution.zpt').__of__(self) return pt() manage_addECHO_institutionForm=DTMLFile('dtml/ECHO_institutionAdd',globals(), Kind='ECHO_institution',kind='ECHO_institution') def manage_addECHO_institution(self, id, url, person, email, country, file=None, title='', precondition='', content_type='', REQUEST=None): """ Add a new ECHO_institution object. Creates a new ECHO_institution object 'id' with the contents of 'file'. Based on Image.manage_addImage """ id=str(id) title=str(title) content_type=str(content_type) precondition=str(precondition) id, title = OFS.Image.cookId(id, title, file) self=self.this() # First, we create the image without data: self._setObject(id, ECHO_institution(id,title,url,'', person, email, country, content_type, precondition)) # Now we "upload" the data. By doing this in two steps, we # can use a database trick to make the upload more efficient. if file: self._getOb(id).manage_upload(file) if content_type: self._getOb(id).content_type=content_type if REQUEST is not None: try: url=self.DestinationURL() except: url=REQUEST['URL1'] REQUEST.RESPONSE.redirect('%s/manage_main' % url) return id