--- ECHO_content/ECHO_collection.py 2004/07/20 16:24:44 1.148 +++ ECHO_content/ECHO_collection.py 2004/12/02 17:17:29 1.198 @@ -9,11 +9,20 @@ class ECHO_externalLink contains informa """ +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 @@ -28,8 +37,17 @@ from Products.PageTemplates.PageTemplate from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate from Globals import Persistent, package_home from Acquisition import Implicit -from ECHO_helpers import displayTypes + 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 @@ -45,327 +63,22 @@ import urllib import xml.dom.minidom from ECHO_graphicalOverview import javaHandler,javaScriptMain import ECHO_helpers +from ECHO_helpers import * +from ECHO_language import * -def getRDFDescription(self,linkURL,urn=None,nameDef=None): - """rdf""" - - ret="" - about="""""" - name="""%s""" - link="""%s""" - clickable="""%s""" - #link="""""" - type="""%s""" - #xlink="""""" - if not urn: - #urn="urn:"+re.sub('/',':',self.absolute_url()) - urn=self.absolute_url() - about2=about%urn - if not nameDef: - if hasattr(self,'label') and not (self.label==""): - name2=name%self.label - elif not self.title=="": - name2=name%self.title - else: - name2=name%self.getId() - name2=re.sub('&','&',name2) - else: - name2=name%nameDef +#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) - linkURL=re.sub('http:','',linkURL) - linkURL2=re.sub('&','&',linkURL) - link2=link%(("http:"+linkURL2),("http:"+urllib.quote(linkURL))) - clickable2=clickable%"true" - type2=type%self.meta_type - #ret=about2+"\n"+name2+"\n"+link2+"\n"+type2+"\n"+clickable2+"\n" - ret=about2+"\n"+name2+"\n"+type2+"\n"+clickable2+"\n" - return ret - -def getCopyrightsFromForm(self,argv): - medias={} - partners={} - copyrights={} - - copyrightsFinal=[] - for arg in argv.keys(): - - if arg[0:5]=='media': - nm=int(arg[5:]) - medias[nm]=argv[arg] - elif arg[0:5]=='partn': - nm=int(arg[5:]) - partners[nm]=argv[arg] - elif arg[0:5]=='copyr': - nm=int(arg[5:]) - copyrights[nm]=argv[arg] - - - - copyrightsList=[(medias[nm],partners[nm],copyrights[nm]) for nm in medias.keys()] - for copyright in copyrightsList: - - if copyright[2]=='institution0000': - copyrightsFinal.append((copyright[0],copyright[1],self.getPartnerCopyright(copyright[1],''))) - else: - if not copyright[0]=='': - copyrightsFinal.append(copyright) - - - return copyrightsFinal - -#List of different types for the graphical linking viewer -viewClassificationListMaster=['view point','area'] - - -def checkDiffs(self,metadict): - """check differences""" - - - - - def NoneToEmpty(obj): - if obj: - return obj - else: - return "" - - - - diffs={} - - tags=self.findTagsFromMapping(self.contentType) - self.referencetypes=tags[2] - self.fields=tags[3] - - - for field in tags[1]: - try: - if (NoneToEmpty(self.getFieldValue(self.getFieldTag(tags,field)))==metadict[self.getFieldTag(tags,field)]): - diffs[self.getFieldTag(tags,field)]=1 - else: - - diffs[self.getFieldTag(tags,field)]=0 - except: - diffs[self.getFieldTag(tags,field)]=0 - - return diffs - -def content_html(self,type): - """template fuer content""" - #templates = self.ZopeFind(self.aq_parent,obj_ids=[type+"_template"]) - # - #if templates: - # return templates[0][1]() - - if hasattr(self,type+"_template"): - obj=getattr(self,type+"_template") - return obj() - else: - pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_%s_template_standard.zpt'%type).__of__(self) - pt.content_type="text/html" - return pt() - -def toList(field): - """Einzelfeld in Liste umwandeln""" - if type(field)==StringType: - return [field] - else: - return field - -def getText(nodelist): - - rc = "" - for node in nodelist: - if node.nodeType == node.TEXT_NODE: - rc = rc + node.data - return rc - - -def sendFile(self, filename, type): - """sends an object or a local file (in the product) as response""" - paths = filename.split('/') - object = self - # look for an object called filename - for path in paths: - if hasattr(object, path): - object = getattr(object, path) - else: - object = None - break - if object: - # if the object exists then send it - return object.index_html(self.REQUEST.REQUEST, self.REQUEST.RESPONSE) - else: - # send a local file with the given content-type - fn = os.path.join(package_home(globals()), filename) - self.REQUEST.RESPONSE.setHeader("Content-Type", type) - self.REQUEST.RESPONSE.write(file(fn).read()) - return - -class BrowserCheck: - """check the browsers request to find out the browser type""" - - def __init__(self, zope): - self.ua = zope.REQUEST.get_header("HTTP_USER_AGENT") - self.isN4 = (string.find(self.ua, 'Mozilla/4.') > -1) and (string.find(self.ua, 'MSIE') < 0) - self.isIE = string.find(self.ua, 'MSIE') > -1 - self.nav = self.ua[string.find(self.ua, '('):] - ie = string.split(self.nav, "; ")[1] - if string.find(ie, "MSIE") > -1: - self.versIE = string.split(ie, " ")[1] - self.isMac = string.find(self.ua, 'Macintosh') > -1 - self.isWin = string.find(self.ua, 'Windows') > -1 - self.isIEWin = self.isIE and self.isWin - self.isIEMac = self.isIE and self.isMac - - - - -def writeMetadata(url,metadict,project=None,startpage=None,xslt=None,thumbtemplate=None,topbar=None,digiLibTemplate=None): - """Einlesen der Metadaten und und erstellen des geaenderten XML file""" - def updateTextToolNode(tag,value): - #print dom,tag,value - metanode=dom.getElementsByTagName('texttool')[0] - try: - nodeOld=metanode.getElementsByTagName(tag) - except: - nodeOld=None - - if nodeOld: - metanode.removeChild(nodeOld[0]).unlink() - - node=dom.createElement(tag) - nodetext=dom.createTextNode(value) - node.appendChild(nodetext) - metanode.appendChild(node) - - - try: - geturl="" - for line in urllib.urlopen(url).readlines(): - geturl=geturl+line - - - except: - return (None,"Cannot open: "+url) - - try: - dom=xml.dom.minidom.parseString(geturl) - except: - return (None,"Cannot parse: "+url+"
"+geturl) - - metanodes=dom.getElementsByTagName('bib') - - if not metanodes: - metanodes=dom.getElementsByTagName('archimedes') - - metanode=metanodes[0] - - for metaData in metadict.keys(): - - try: - nodeOld=metanode.getElementsByTagName(metaData) - except: - nodeOld=None - - if nodeOld: - metanode.removeChild(nodeOld[0]).unlink() - else: - # try also old writing rule - instead of _: - try: - nodeOld=metanode.getElementsByTagName(re.sub('_','-',metaData)) - except: - nodeOld=None - - if nodeOld: - metanode.removeChild(nodeOld[0]).unlink() - - metanodeneu=dom.createElement(metaData) - try: - metanodetext=dom.createTextNode(unicode(metadict[metaData],"utf-8")) - except: - metanodetext=dom.createTextNode(metadict[metaData].encode('utf-8')) - metanodeneu.appendChild(metanodetext) - metanode.appendChild(metanodeneu) - - - - - - if project: - updateTextToolNode('project',project) - if startpage: - updateTextToolNode('startpage',startpage) - - if topbar: - updateTextToolNode('toptemplate',topbar) - - if thumbtemplate: - updateTextToolNode('thumbtemplate',thumbtemplate) - - if xslt: - updateTextToolNode('xslt',xslt) - - - - return dom.toxml().encode('utf-8') - - - -def readMetadata(url): - """Methode zum Auslesen der Metadateninformation zu einer Resource - Vorerst noch Typ bib""" - - metadict={} - try: - geturl="" - for line in urllib.urlopen(url).readlines(): - geturl=geturl+line - - - except: - return (None,"Cannot open: "+url) - - try: - dom=xml.dom.minidom.parseString(geturl) - except: - return (None,"Cannot parse: "+url+"
"+geturl) - - metanode=dom.getElementsByTagName('bib') - metadict['bib_type']='Book' - if len(metanode)==0: - metanode=dom.getElementsByTagName('archimedes') - metadict['bib_type']='Archimedes' - - - if not len(metanode)==0: - metacontent=metanode[0].childNodes - - try: - metadict['bib_type']=getText(dom.getElementsByTagName('bib')[0].attributes['type'].childNodes) - except: - """nothing""" - - for node in metacontent: - try: - #print urllib.unquote(getText(node.childNodes)),getText(node.childNodes) - metadict[re.sub('-','_',node.tagName.lower())]=urllib.unquote(getText(node.childNodes)) - except: - """nothing""" - - - return metadict,"" - - -def setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordstrs,viewClassification=""): +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 @@ -374,24 +87,8 @@ def setECHO_collectionInformation(self,t 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): +class ECHO_copyright(Folder,ECHO_basis): """Copyright informationen""" meta_type="ECHO_copyright" @@ -411,9 +108,10 @@ class ECHO_copyright(Folder): {'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=zptFile(self, 'zpt/ChangeECHO_copyright') pt.content_type="text/html" return pt() @@ -429,7 +127,7 @@ class ECHO_copyright(Folder): def manage_addECHO_copyrightForm(self): """Form for adding""" - pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_copyright.zpt').__of__(self) + pt=zptFile(self, 'zpt/AddECHO_copyright.zpt') return pt() def manage_addECHO_copyright(self, id,title,RESPONSE=None): @@ -446,7 +144,7 @@ def manage_addECHO_copyright(self, id,ti if RESPONSE is not None: RESPONSE.redirect('manage_main') -class ECHO_layoutTemplate(ZopePageTemplate): +class ECHO_layoutTemplate(ZopePageTemplate,ECHO_basis): """Create a layout Template for different purposes""" meta_type="ECHO_layoutTemplate" @@ -469,11 +167,9 @@ class ECHO_layoutTemplate(ZopePageTempla def manage_addECHO_layoutTemplateForm(self): """Form for adding""" - pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_layoutTemplate.zpt').__of__(self) + pt=zptFile(self, 'zpt/AddECHO_layoutTemplate.zpt') return pt() -from urllib import quote - def manage_addECHO_layoutTemplate(self, EchoType,title=None,REQUEST=None): "Add a Page Template with optional file content." @@ -514,9 +210,56 @@ def manage_addECHO_layoutTemplate(self, 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()) + +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, urllib.quote(id)) + REQUEST.RESPONSE.redirect(u+'/manage_main') + return '' -class ECHO_resource(Folder,Persistent): + +class ECHO_resource(Folder,Persistent,ECHO_basis): """ECHO Ressource""" security=ClassSecurityInfo() meta_type='ECHO_resource' @@ -527,55 +270,97 @@ class ECHO_resource(Folder,Persistent): security.declareProtected('View','index_html') - def showRDF(self): - """showrdf""" - self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml') - ret="""\n\n""" - ret+=self.getRDF(urn="echo:collectionroot")+"\n" + + + 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() - ret+="""""" - return ret def getRDF(self,urn=None): """rdf""" ret=getRDFDescription(self,self.link,urn=urn) return ret+self.createSubElementRDF(urn=urn) - - def createSubElementRDF(self,urn=None): - """rdf list""" - if not urn: - urn=self.absolute_url() - ret="" - - rettemp="""\n"""%urn - flag=0 - - li="""\n""" - if not ('' in self.getFullTextXML(noredirect='Yes')): - nurn=self.absolute_url()+'/getFullTextXML' - rettemp+=li%nurn - flag=1 - if not ('' in self.getImageView(noredirect='Yes')): - nurn=self.absolute_url()+'/getImageView' - rettemp+=li%nurn - flag=1 - - rettemp+="" - - if flag==1: - ret+=rettemp - - if not ('' in self.getFullTextXML(noredirect='Yes')): - nurn=self.absolute_url()+'/getFullTextXML' - ret+=getRDFDescription(self,self.absolute_url()+'/getFullTextXML',urn=nurn,nameDef="Fulltext") - - if not ('' in self.getImageView(noredirect='Yes')): - nurn=self.absolute_url()+'/getImageView' - ret+=getRDFDescription(self,self.absolute_url()+'/getImageView',urn=nurn,nameDef="Image View") - - return ret - + def getAccessRightSelectorHTML(self,outlook="select"): """htmlselector""" values=['free','mpiwg'] @@ -608,7 +393,7 @@ class ECHO_resource(Folder,Persistent): try: geturl="" - for line in urllib.urlopen(url).readlines(): + for line in ECHO_helpers.urlopen(url).readlines(): geturl=geturl+line @@ -638,10 +423,10 @@ class ECHO_resource(Folder,Persistent): params="accessright=%s"%accessright - #print urllib.urlopen(self.absolute_url()+'/setAccessRightXML'+'?'+params).read() + #print ECHO_helpers.urlopen(self.absolute_url()+'/setAccessRightXML'+'?'+params).read() - urllib.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() + 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: @@ -654,7 +439,7 @@ class ECHO_resource(Folder,Persistent): try: geturl="" - for line in urllib.urlopen(url).readlines(): + for line in ECHO_helpers.urlopen(url).readlines(): geturl=geturl+line @@ -713,49 +498,108 @@ class ECHO_resource(Folder,Persistent): """Form for changing the startpage""" - pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resourceStartPage.zpt').__of__(self) + pt=zptFile(self, 'zpt/ChangeECHO_resourceStartPage.zpt') 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)) and ("__generic" in startpage): # checke ob generic in der liste + 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" - - if (not startpage) or (startpage=="__generic"): - 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 - - urllib.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() + 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) - urllib.urlopen("http://nausikaa2.rz-berlin.mpg.de:86/cgi-bin/toc/admin/reg.cgi?path=%s"%path).readlines() + 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) + pt=zptFile(self, 'zpt/changeResourceViewerTemplateSet') return pt() + def getTextToolsField(self,name,default=''): """Lese Textoolsfelder aus index.meta im path aus""" @@ -774,19 +618,20 @@ class ECHO_resource(Folder,Persistent): return default - def changeViewerTemplateSet(self,project,xslt,thumbtemplate,topbar,digiLibTemplate,RESPONSE=None): + def changeViewerTemplateSet(self,project,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix,RESPONSE=None): """changeit""" - paramList=['project','startpage','xslt','thumbtemplate','topbar','digiLibTemplate'] + 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"%(project,xslt,thumbtemplate,topbar,digiLibTemplate) + params="project=%s&xslt=%s&thumbtemplate=%s&topbar=%s&digiLibTemplate=%s&digiliburlprefix=%s"%(project,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix) - urllib.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() + 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 @@ -803,32 +648,23 @@ class ECHO_resource(Folder,Persistent): 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() - return urllib.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 getTitle(self): - """title""" - try: - return self.title.encode('utf-8','ignore') - except: - self.title=self.title.decode('iso-8859-1','ignore')[0:] #correnct conding error - return self.title.encode('utf-8','ignore') - - def getLabel(self): - """title""" - try: - return self.label.encode('utf-8','ignore') - except: - self.label=self.label.decode('iso-8859-1','ignore')[0:] #correnct conding error - return self.label.encode('utf-8','ignore') + def content_html(self): """template fuer content""" - return content_html(self,'resource') + return ECHO_basis.content_html(self,'resource') def getViewClassification(self): if hasattr(self,'viewClassification'): @@ -838,15 +674,29 @@ class ECHO_resource(Folder,Persistent): def getFullTextXML(self,noredirect=None): """getFullTextXML; gives the FullText as an XML Document, and if somthing goes wrong.""" + try: - fh=urllib.urlopen(self.metalink) + #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 @@ -858,11 +708,14 @@ class ECHO_resource(Folder,Persistent): else: return "no fulltext available" - - def getImageView(self,noredirect=None): + 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=urllib.urlopen(self.metalink) + fh=ECHO_helpers.urlopen(self.metalink) dom=xml.dom.minidom.parse(fh) texttools=dom.getElementsByTagName('texttool') text=texttools[0].getElementsByTagName('image') @@ -872,11 +725,16 @@ class ECHO_resource(Folder,Persistent): 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: - return imageurl + if not onlyPath: + return imageurl + else: + return archivepath+"/"+imagetemp except: if not noredirect: @@ -896,14 +754,19 @@ class ECHO_resource(Folder,Persistent): return "ERROR" ret=[] - for copyright in obj.getCopyrights(): + for copyright in obj.getCopyrights(): #copyright - media / partner / copyrightID - link="copyrightTypes/"+copyright[2]+'/copyright.html' try: - copyrightTypeObj=getattr(self.copyrightTypes,copyright[2]) + 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=copyrightTypeObj.url + url=getattr(copyrightTypeObj, 'url', '') if url!='': ret.append((url,copyright[0],copyright[1],copyright[2],label)) @@ -916,6 +779,17 @@ class ECHO_resource(Folder,Persistent): """nothing""" return ret + + def getInstitutionsHTML(self): + """gibt Liste der foerdernden Institutionen aus""" + + if hasattr(self,'support'): + obj=self.support + ret=obj.getSupporter() + return ret + else: + return '' + def getCredits(self): """Ausgabe der credits""" @@ -923,6 +797,8 @@ class ECHO_resource(Folder,Persistent): return self.credits else: return [] + + def __init__(self,id,link,metalink,resourceID,title,label,description,contentType,renderingType,copyrightType,responsible,credits,weight,coords): @@ -948,18 +824,9 @@ class ECHO_resource(Folder,Persistent): coordsnew=[] self.coords=coordsnew + self.viewClassification="" - 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: @@ -985,34 +852,29 @@ class ECHO_resource(Folder,Persistent): if not hasattr(self,'weight'): self.weight="" - pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resource.zpt').__of__(self) + pt=zptFile(self, 'zpt/ChangeECHO_resource.zpt') 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) + pt=zptFile(self, 'zpt/ChangeECHO_resource_main.zpt') return pt() def ECHO_resource_config_coords(self): """Coords configuration """ - - pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resource_coords.zpt').__of__(self) + pt=zptFile(self, 'zpt/ChangeECHO_resource_coords.zpt') return pt() def ECHO_resource_config_credits(self): """Main configuration""" - - pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resource_credits.zpt').__of__(self) + pt=zptFile(self, 'zpt/ChangeECHO_resource_credits.zpt') 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 @@ -1022,14 +884,14 @@ class ECHO_resource(Folder,Persistent): DataHash[data_neu]=getattr(self,data)[0:] - pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resource_metadata.zpt').__of__(self) + pt=zptFile(self, 'zpt/ChangeECHO_resource_metadata.zpt') return pt() def changeECHO_resource_main(self,metalink,link,title,label,description,contentType,renderingType,weight,resourceID,RESPONSE=None): - """Änderung der Properties""" + """Aenderung der Properties""" self.resourceID=resourceID self.title=title self.label=label @@ -1046,25 +908,34 @@ class ECHO_resource(Folder,Persistent): 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=[] + def changeECHO_resource_coords(self,RESPONSE=None): + """Aenderung der Properties - coords""" + #return self.REQUEST + for area in self.getMapAreas(): + id = area.getId() + if self.REQUEST.has_key('del.'+id): + # delete this area + self._delObject(id) + # return to same menu + if RESPONSE is not None: + RESPONSE.redirect('ECHO_resource_config_coords') + return + # modify this area + coordstring = self.REQUEST.get('coords.'+id, '') + coords = string.split(coordstring, ',') + angle = self.REQUEST.get('angle.'+id, '0') + type = self.REQUEST.get('type.'+id, 'area') + if len(coords) == 4: + area.setCoordString(coordstring) + area.setAngle(angle) + area.setType(type) + # return to main menu + if RESPONSE is not None: + RESPONSE.redirect('manage_main') - 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""" + """Aenderung der Properties""" self.credits=credits self.responsible=responsible self.copyrightType=copyrightType @@ -1095,17 +966,21 @@ class ECHO_resource(Folder,Persistent): except: """nothing""" - urllib.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() + 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): - return self.metaDataHash.get(fieldName,'!!NOT USED HERE in Type: %s'%self.contentType) - - def newMetaXML(self,project=None,startpage=None,xslt=None,thumbtemplate=None,topbar=None,digiLibTemplate=None): + 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') @@ -1113,26 +988,28 @@ class ECHO_resource(Folder,Persistent): self.copyIndex_meta2echo_resource() try: - return writeMetadata(self.metalink,self.OSAS_meta,project,startpage,xslt,thumbtemplate,topbar,digiLibTemplate) + 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) + 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=[] + """Aenderung der Properties""" - setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordsnew) - self.viewClassification=viewClassification - self.coords=coordsnew[0:] + setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight) self.link=link self.metalink=metalink @@ -1143,24 +1020,23 @@ class ECHO_resource(Folder,Persistent): 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':'Edit Coords','action':'ECHO_resource_config_coords'}, + {'label':'Change Coords','action':'ECHO_graphicEntry'}, {'label':'Sync Metadata','action':'ECHO_getResourceMD'}, - {'label':'Change TemplateSets','action':'changeViewerTemplateSetForm'}, + {'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) + pt=zptFile(self, 'zpt/ECHO_draw.zpt') return pt() else: return "NO OVERVIEW GRAPHICS" @@ -1326,7 +1202,7 @@ class ECHO_resource(Folder,Persistent): self.metaDataHash={} if not error=="": #Fehler beim Auslesen des Metafiles - return "ERROR:",error + return "ERROR:",error,self.absolute_url() self.contentType=metadict['bib_type'][0:] fields=self.findTagsFromMapping(self.contentType) @@ -1358,7 +1234,7 @@ class ECHO_resource(Folder,Persistent): self.REQUEST.SESSION['contentStorage']=metadict['bib_type'] self.REQUEST.SESSION['contentZope']=self.contentType - return PageTemplateFile('Products/ECHO_content/zpt/ECHO_getResourceMDErrorContentType.zpt').__of__(self)() + return zptFile(self, 'zpt/ECHO_getResourceMDErrorContentType.zpt')() self.REQUEST.SESSION['metadict']=metadict @@ -1369,7 +1245,7 @@ class ECHO_resource(Folder,Persistent): if template=="yes": - pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_resourceMD.zpt').__of__(self) + pt=zptFile(self, 'zpt/ECHO_resourceMD.zpt') return pt() @@ -1379,10 +1255,27 @@ class ECHO_resource(Folder,Persistent): 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','application/pdf') + self.REQUEST.RESPONSE.write(fh) + self.REQUEST.RESPONSE.close() + return return self.REQUEST.RESPONSE.redirect(self.link) def startpage_html(self): @@ -1395,13 +1288,13 @@ class ECHO_resource(Folder,Persistent): if sp: return sp[1]() - #prüfen ob irgendwo ein template + #pruefen 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=zptFile(self, 'zpt/ECHO_startpage_index_template_standard.zpt') pt.content_type="text/html" return pt() @@ -1436,7 +1329,7 @@ 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) + pt=zptFile(self, 'zpt/AddECHO_resourceForm.zpt') return pt() @@ -1452,30 +1345,15 @@ def manage_addECHO_resource(self,id,titl RESPONSE.redirect('manage_main') -class ECHO_externalLink(Folder): +class ECHO_externalLink(Folder,ECHO_basis): """Link zu einer externen Ressource""" security=ClassSecurityInfo() meta_type='ECHO_externalLink' - def getTitle(self): - """title""" - try: - return self.title.encode('utf-8','ignore') - except: - self.title=self.title.decode('iso-8859-1','ignore')[0:] #correnct conding error - return self.title.encode('utf-8','ignore') - - def getLabel(self): - """title""" - try: - return self.label.encode('utf-8','ignore') - except: - self.label=self.label.decode('iso-8859-1','ignore')[0:] #correnct conding error - return self.label.encode('utf-8','ignore') def content_html(self): """template fuer content""" - return content_html(self,'externalLink') + return ECHO_basis.content_html(self,'externalLink') def __init__(self,id,link,title,label,description,contentType,responsible,credits,weight,coords): @@ -1503,21 +1381,14 @@ class ECHO_externalLink(Folder): self.coords=[''] - pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_externalLink.zpt').__of__(self) + pt=zptFile(self, 'zpt/ChangeECHO_externalLink.zpt') return pt() def changeECHO_externalLink(self,link,title,label,description,contentType,responsible,weight,coords=None,credits=None,RESPONSE=None): + """Aenderung der Properties""" + setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight) - """Ä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') @@ -1535,7 +1406,7 @@ class ECHO_externalLink(Folder): def manage_addECHO_externalLinkForm(self): """Form for external Links""" - pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_externalLinkForm.zpt').__of__(self) + pt=zptFile(self, 'zpt/AddECHO_externalLinkForm.zpt') return pt() @@ -1559,13 +1430,13 @@ class ECHO_link(ECHO_externalLink): def content_html(self): """template fuer link""" if hasattr(self,"link_template"): - return content_html(self,'link') + return ECHO_basis.content_html(self,'link') else: - return content_html(self,'collection') + 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) + pt=zptFile(self, 'zpt/AddECHO_linkForm.zpt') return pt() @@ -1580,7 +1451,7 @@ def manage_addECHO_link(self,id,title,la RESPONSE.redirect('manage_main') -class ECHO_collection(Folder, Persistent, Implicit): +class ECHO_collection(Folder, Persistent, Implicit, Cacheable,ECHO_basis): """ECHO Collection""" security=ClassSecurityInfo() @@ -1612,30 +1483,31 @@ class ECHO_collection(Folder, Persistent ret+=li%nurn return ret+"" - - def showRDF(self): - """showrdf""" - self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml') - ret="""\n\n""" - ret+=self.getRDF(urn="echo:collectionroot")+"\n" - - ret+="""""" - - return ret - + def changeLabels(self): """change form""" - pt=PageTemplateFile('Products/ECHO_content/zpt/changeLabelsForm').__of__(self) + pt=zptFile(self, 'zpt/changeLabelsForm') pt.content_type="text/html" return pt() def changeTitles(self): """change form""" - pt=PageTemplateFile('Products/ECHO_content/zpt/changeTitleForm').__of__(self) + pt=zptFile(self, 'zpt/changeTitleForm') + pt.content_type="text/html" + return pt() + + def changeWeights(self): + """change form""" + pt=zptFile(self, 'zpt/changeWeightForm') pt.content_type="text/html" return pt() + def changeMetaDataLinks(self): + """change form""" + pt=zptFile(self, 'zpt/changeMetaDataLinkForm') + pt.content_type="text/html" + return pt() def changeAccessRightsCollection(self): """change""" ret="" @@ -1651,7 +1523,22 @@ class ECHO_collection(Folder, Persistent """not""" return ret - def changeLabelsInCollection(self): + 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 @@ -1661,7 +1548,22 @@ class ECHO_collection(Folder, Persistent try: ret+=resource[1].getId()+" "+argv[resource[1].getId()]+"
" - resource[1].label=argv[resource[1].getId()][0:] + 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 @@ -1728,10 +1630,10 @@ class ECHO_collection(Folder, Persistent def changeViewerTemplateSetsForm(self): """change the viewer template set""" - pt=PageTemplateFile('Products/ECHO_content/zpt/changeViewerTemplateSet').__of__(self) + pt=zptFile(self, 'zpt/changeViewerTemplateSet') return pt() - def getViewerTemplateSets(self,obj_ids=None): + def getViewerTemplateSets(self,obj_ids=None,RESPONSE=None): """Get the ViewerTemplateSet title for configuration""" ret=[] @@ -1740,7 +1642,7 @@ class ECHO_collection(Folder, Persistent for viewerTemplateSet in viewerTemplateSets: ret.append((viewerTemplateSet[1].title,viewerTemplateSet[0],viewerTemplateSet[1])) - + return ret except: @@ -1753,26 +1655,68 @@ class ECHO_collection(Folder, Persistent def isSelectedViewerTemplateSet(self,obj,id): - """is ausgewählt""" + """is ausgewaehlt""" if self.REQUEST['viewerTemplateSet']==id: return 1 else: return None - def changeViewerTemplateSets(self,project,xslt,thumbtemplate,topbar,digiLibTemplate,RESPONSE=None): + def changeViewerTemplateSets(self,project,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix,RESPONSE=None): """change the templates""" - resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource']) + 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=zptFile(self, 'zpt/ChangeECHO_resourceStartPageFolder.zpt') + 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].changeViewerTemplateSet(project,xslt,thumbtemplate,topbar,digiLibTemplate) + 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']) @@ -1783,21 +1727,19 @@ class ECHO_collection(Folder, Persistent if RESPONSE is not None: RESPONSE.redirect('manage_main') + + def reloadMetaDataFromStorageWarning(self,RESPONSE=None): + """warning""" + pt=zptFile(self, 'zpt/reloadMetaDataFromStorageWarning.zpt') + pt.content_type="text/html" + return pt() def reloadMetaDataFromStorage(self,RESPONSE=None): """copy metadata from the storage to ECHO""" - ret="" - resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource']) - for resource in resources: + return reloadMetaDataFromStorage(self,RESPONSE=None) - ret+=str(resource[1].copyIndex_meta2echo_resource())+"
" - - - if RESPONSE is not None: - # RESPONSE.redirect('manage_main') - return ret - + def getPartnerCopyright(self,name,sonst="generic"): """gibt generisches copyright eines partners aus, sonst behalte jetzige einsteillung""" #print "hi",name,sonst @@ -1832,25 +1774,10 @@ class ECHO_collection(Folder, Persistent else: return "" - def getTitle(self): - """title""" - try: - return self.title.encode('utf-8','ignore') - except: - self.title=self.title.decode('iso-8859-1','ignore')[0:] #correnct conding error - return self.title.encode('utf-8','ignore') - - def getLabel(self): - """title""" - try: - return self.label.encode('utf-8','ignore') - except: - self.label=self.label.decode('iso-8859-1','ignore')[0:] #correnct conding error - return self.label.encode('utf-8','ignore') def createRessourcesFromXMLForm(self): """form""" - pt=PageTemplateFile('Products/ECHO_content/zpt/createRessourcesFromXMLForm.zpt').__of__(self) + pt=zptFile(self, 'zpt/createRessourcesFromXMLForm.zpt') return pt() def createRessourcesFromXML(self,fileupload): @@ -1900,6 +1827,11 @@ class ECHO_collection(Folder, Persistent 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="" @@ -1907,7 +1839,7 @@ class ECHO_collection(Folder, Persistent element=getattr(object,entry) try: if element.meta_type in ["ECHO_collection","ECHO_group"]: - collections+="" + collections+="" collections+=getCollection(element,depth)+"\n" except: """nothing""" @@ -1930,19 +1862,30 @@ class ECHO_collection(Folder, Persistent ret+=javaHandler%dynamical return ret - def createJSAreas(self): + def newMapArea(self, id, coords=None): + """returns a new MapArea""" + if coords is None: + coords = [0,0,0,0] + return MapArea(id, coords) + + def createJSAreas(self, areas): """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]) + for ob in areas: + if ob.isTypeArrow(): + dynamical+="""addArea('%s', 'overview', %s, 'arrow');\n"""%(ob.getFullId(),ob.getCoordString()) else: - dynamical+="""addArea('%s', 'overview', %s, 'arrow');\n"""%(ob[1],ob[0]) + dynamical+="""addArea('%s', 'overview', %s, 'area');\n"""%(ob.getFullId(),ob.getCoordString()) return dynamical + def createAllJSAreas(self): + """create area calls for JavaScript""" + areas = self.getAllMapAreas() + return self.createJSAreas(areas) + 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) + pt=zptFile(self, 'zpt/ECHO_content_map_frag_js') return pt() def createMapImg(self): @@ -1959,46 +1902,46 @@ class ECHO_collection(Folder, Persistent def createMapLink(self, ob, text=None): """generate map link""" bt = BrowserCheck(self) - id = ob[1] - link = ob[1] - if text == None: - text = ob[2] + id = ob.getFullId() + link = ob.getLinkId() + if text is None: + text = ob.getLabel() + if text is None: + text = "link" 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) + id = ob.getFullId() + link = ob.getLinkId() + tiptext = ob.getText() tag = "" if bt.isN4: tag += ''%(id,id,id) - if vtype == "view point": - rot = ob[4][4] + if ob.isTypeArrow(): + rot = ob.angle tag += ''%(link,arrowsrc,rot) else: tag += ''%(id,id,id,link) - if vtype == "view point": - rot = ob[4][4] + if ob.isTypeArrow(): + rot = ob.angle if bt.isIEWin and bt.versIE > 5: tag += ''%(id,arrowsrc,rot,arrowsrc,rot) else: @@ -2008,9 +1951,8 @@ class ECHO_collection(Folder, Persistent tag += '

" - except: - ret+="Error:"+entry[0]+"
" - - else: - self.ECHO_rerenderLinksMD(entry[1]) + def ECHO_rerenderLinksMDWarning(self): + """change form""" + pt=zptFile(self, 'zpt/rerenderLinksWarning') + pt.content_type="text/html" + return pt() - - - return ret+"Rerenderd all links to resources in: "+self.title - security.declarePublic('ECHO_newViewerLink') + security.declarePublic('ECHO_rerenderLinksMD') + def ECHO_rerenderLinksMD(self,obj=None,types=['title','label']): + """Rerender all Links""" + return ECHO_rerenderLinksMD(self,obj,types) - def getCoords(self): - try: - - x= [string.join(x,",") for x in self.coords] - return x - - except: - - return [] - + def __init__(self,id,title,label,description,contentType,responsible,credits,weight,sortfield,coords,secondaryLinkTitle,secondaryLink,imageTag="",bgcolour=""): - self.id = id """Festlegen der ID""" self.credits=toList(credits) @@ -2107,47 +2020,35 @@ class ECHO_collection(Folder, Persistent self.bgcolour=bgcolour - manage_options = Folder.manage_options+( + manage_options = Folder.manage_options+ Cacheable.manage_options+( {'label':'Main Config','action':'ECHO_collection_config'}, {'label':'Change Labels','action':'changeLabels'}, {'label':'Change Titles','action':'changeTitles'}, - {'label':'Rerender Labels and Titles','action':'ECHO_rerenderLinksMD'}, + {'label':'Change Weights','action':'changeWeights'}, + {'label':'Rerender Labels and Titles','action':'ECHO_rerenderLinksMDWarning'}, {'label':'Graphics','action':'ECHO_graphicEntry'}, {'label':'create resources from XML','action':'createRessourcesFromXMLForm'}, - {'label':'Change Viewer Templates','action':'changeViewerTemplateSetsForm'}, - {'label':'Reload Metadata','action':'reloadMetaDataFromStorage'}, + {'label':'Set Startpage','action':'setStartpageFolderForm'}, + {'label':'Change Viewer Templates and Image Viewer','action':'changeViewerTemplateSetsForm'}, + {'label':'Reload Metadata','action':'reloadMetaDataFromStorageWarning'}, {'label':'ImportCollection','action':'updateCollection'}, {'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) + pt=zptFile(self, 'zpt/ECHO_draw.zpt') 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') - security.declarePublic('ECHO_collection_config') def ECHO_collection_config(self): @@ -2159,81 +2060,84 @@ class ECHO_collection(Folder, Persistent if not hasattr(self,'sortfield'): self.sortfield="weight" - if not hasattr(self,'coords'): - self.coords=[] - - pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_collection.zpt').__of__(self) + pt=zptFile(self, 'zpt/ChangeECHO_collection.zpt') return pt() - security.declarePublic('changeECHO_collection') - - def getBgcolour(self): """colour""" if hasattr(self,'bgcolour') and not (self.bgcolour==""): return self.bgcolour else: return "#dddddd" - - def changeECHO_collection(self,title,label,description,contentType,responsible,weight,secondaryLink,secondaryLinkTitle,credits=None,sortfield="weight",coords=None,RESPONSE=None,imageTag="",bgcolour="",viewClassification=None,location=None): + + + security.declarePublic('changeECHO_collection') + def changeECHO_collection(self,title,label,description,contentType,responsible,weight,secondaryLink,secondaryLinkTitle,credits=None,sortfield="weight",coords=None,RESPONSE=None,imageTag="",bgcolour="",viewClassification=None,location=None,isAlwaysClickable=None): """Aenderung der Properties""" self.secondaryLink=secondaryLink self.secondaryLinkTitle=secondaryLinkTitle self.imageTag=imageTag self.bgcolour=bgcolour - self.viewClassification=viewClassification self.location=location - - if coords: - coordsnew=[ string.split(x,",") for x in coords] - self.coords=coordsnew[0:] - else: - coordsnew=None - self.coords=None + self.isAlwaysClickable=isAlwaysClickable - setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordsnew) - try: - self.coords=coordsnew[0:] # HACK fehler in setECHO_collection - except: - """none""" + setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight) self.sortfield=sortfield if RESPONSE is not None: RESPONSE.redirect('manage_main') + def setAlwaysClickable(self,flag="yes"): + """set clickable""" + if flag=="yes": + self.isAlwaysClickable="yes" + else: + self.isAlwaysClickable=None + return flag + def showOverview(self): """overview""" if 'ECHO_overview.html' in self.__dict__.keys(): return getattr(self,'ECHO_overview.html')() - pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_content_overview.zpt').__of__(self) + pt=zptFile(self, 'zpt/ECHO_content_overview.zpt') return pt() security.declareProtected('View','index_html') def index_html(self): """standard page""" - + if self.ZCacheable_isCachingEnabled(): + + result = self.ZCacheable_get() + if result is not None: + # Got a cached value. + return result + if 'index.html' in self.__dict__.keys(): - return getattr(self,'index.html')() + ret=getattr(self,'index.html')() elif 'overview' in self.__dict__.keys(): - return self.showOverview() + ret=self.showOverview() elif hasattr(self,'collection_index_template'): - return self.collection_index_template() + ret=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() + ret=self.main_index_template() + else: + pt=zptFile(self, 'zpt/ECHO_main_index_template_standard.zpt') + pt.content_type="text/html" + ret=pt.render() - def content_html(self): + self.ZCacheable_set(ret) + return ret + + def content_html(self,**argv): """template fuer content""" - return content_html(self,'collection') + #print "NN",argv + return ECHO_basis.content_html(self,'collection') def getCredits(self): """Ausgabe der credits""" @@ -2259,38 +2163,36 @@ class ECHO_collection(Folder, Persistent return sendFile(self, 'js/hl_lib.js', 'text/plain') def js_lib_js(self): + """javascript -- old name""" + return sendFile(self, 'js/baselib.js', 'text/plain') + + def baselib_js(self): """javascript""" - return sendFile(self, 'js/js_lib.js', 'text/plain') + return sendFile(self, 'js/baselib.js', 'text/plain') - def getGraphicCoords(self): + def hl_add_js(self): + """javascript""" + return sendFile(self, 'js/hl_add.js', 'text/plain') + + def getAllMapAreas(self): """Give list of coordinates""" subColTypes=['ECHO_collection','ECHO_resource'] - ids=[] + areas=[] for entrySearch in self.ZopeFind(self,obj_metatypes=subColTypes): object=entrySearch[1] - if hasattr(object,'coords'): - for coordtemp in object.coords: - if len(coordtemp)>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 + areas.extend(object.getMapAreas()) + return areas + def deleteMapAreas(self): + """deletes all map areas from this object""" + for obs in self.ZopeFind(self, obj_metatypes=['MapArea'], search_sub=1): + ob = obs[1] + id = ob.id + parent = ob.aq_parent + print "deleting: ", ob.id + parent._delObject(id) + return "Done" getSubCols = ECHO_helpers.getSubCols @@ -2299,7 +2201,7 @@ Globals.InitializeClass(ECHO_collection) def manage_addECHO_collectionForm(self): """Add collection form""" - pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_collectionForm.zpt').__of__(self) + pt=zptFile(self, 'zpt/AddECHO_collectionForm.zpt') return pt() @@ -2321,21 +2223,12 @@ class ECHO_group(ECHO_collection): manage_options = Folder.manage_options+( {'label':'Main Config','action':'ECHO_group_config'}, - {'label':'Rerender Links','action':'ECHO_rerenderLinksMD'}, + {'label':'Rerender Links','action':'ECHO_rerenderLinksMDWarning'}, {'label':'Graphics','action':'ECHO_graphicEntry'}, ) security.declareProtected('View','index_html') - def showRDF(self): - """showrdf""" - self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml') - ret="""\n\n""" - ret+=self.getRDF(urn="echo:collectionroot")+"\n" - - ret+="""""" - - return ret def getRDF(self,urn=None): """rdf of the collection""" @@ -2376,7 +2269,7 @@ class ECHO_group(ECHO_collection): 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=zptFile(self, 'zpt/ECHO_main_index_template_standard.zpt') pt.content_type="text/html" return pt() @@ -2392,11 +2285,11 @@ class ECHO_group(ECHO_collection): if not hasattr(self,'coords'): self.coords=[] - pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_group.zpt').__of__(self) + pt=zptFile(self, 'zpt/ChangeECHO_group.zpt') 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""" + """Aenderung der Properties""" self.secondaryLink=secondaryLink self.secondaryLinkTitle=secondaryLinkTitle @@ -2404,14 +2297,7 @@ class ECHO_group(ECHO_collection): 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) + setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight) @@ -2429,13 +2315,13 @@ class ECHO_group(ECHO_collection): def content_html(self): """template fuer content""" - return content_html(self,'group') + 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) + pt=zptFile(self, 'zpt/AddECHO_groupForm.zpt') return pt() @@ -2567,22 +2453,233 @@ 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=zptFile(self, 'zpt/generateFromRDFForm') + 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 showRDF(self): - """showrdf""" - self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml') - ret="""\n\n""" - ret+=self.getRDF(urn="echo:collectionroot")+"\n" + - ret+="""""" - return ret + + 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=zptFile(self, 'zpt/changeWeightForm') + 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=zptFile(self, 'zpt/reloadMetaDataFromStorageWarning.zpt') + 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""" @@ -2606,7 +2703,7 @@ class ECHO_root(Folder,Persistent,Implic def showContent(self,path): """return content/html""" - return urllib.urlopen(path+"/content_html").read() + return ECHO_helpers.urlopen(path+"/content_html").read() def getImageViewers(self): """images""" @@ -2615,7 +2712,7 @@ class ECHO_root(Folder,Persistent,Implic def getBibTag(self,tag,content): - """get field tag für index-meta-generation""" + """get field tag for index-meta-generation""" if not content or content=="": return "" ret="<%s>"%tag @@ -2703,7 +2800,7 @@ class ECHO_root(Folder,Persistent,Implic return retStr - def copyrightTypeSelector_HTML(self,selected=None,first=None): + def copyrightTypeSelector_HTML(self, object=None, selected=None,first=None): """give type selector""" if not first: @@ -2724,8 +2821,16 @@ class ECHO_root(Folder,Persistent,Implic retStr+="""