--- ECHO_content/ECHO_collection.py 2005/09/12 22:23:44 1.235 +++ ECHO_content/ECHO_collection.py 2005/10/10 19:11:12 1.236 @@ -10,11 +10,11 @@ class ECHO_externalLink contains informa """ try: - from reportlab.pdfgen import canvas - from reportlab.lib.pagesizes import A4 + from reportlab.pdfgen import canvas + from reportlab.lib.pagesizes import A4 except: - print "PDF generation will not work" - + print "PDF generation will not work" + import string import tempfile @@ -37,13 +37,14 @@ from Products.PageTemplates.PageTemplate from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate from Globals import Persistent, package_home from Acquisition import Implicit +from Products.ZCatalog.CatalogPathAwareness import CatalogAware import urllib import cgi import smtplib import time from Ft.Xml.Domlette import NonvalidatingReader -from Ft.Xml.Domlette import PrettyPrint +from Ft.Xml.Domlette import PrettyPrint, Print from Ft.Xml import EMPTY_NAMESPACE import Ft.Xml.XPath @@ -51,13 +52,13 @@ import cStringIO import zLOG try: - from psycopg import libpq + from psycopg import libpq except: - try: - from pyPgSQL import libpq - except: - print "ECHO_collection: Warning - No libpq imported!" - + try: + from pyPgSQL import libpq + except: + print "ECHO_collection: Warning - No libpq imported!" + import xml.dom.minidom import urllib @@ -73,7 +74,7 @@ regexpTXT = re.compile(patternTXT, re.IG patternPage=r"<\s*page.*?>(.*?)" regexpPage = re.compile(patternPage, re.IGNORECASE + re.DOTALL) - + def setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordstrs=""): @@ -88,110 +89,110 @@ def setECHO_collectionInformation(self,t self.weight=weight class ECHO_locale(ZopePageTemplate): - """localisierung""" + """localisierung""" - meta_type="ECHO_locale" + meta_type="ECHO_locale" - def __init__(self,id,lang,title,label,text=None,content_type=None): - self.lang=lang - self.title=title - self.label=label - if text: - self.pt_edit(text, content_type) - self.id=id - - manage_options = ZopePageTemplate.manage_options+( - {'label':'Main Config','action':'change_ECHO_localeForm'}, - ) - - def change_ECHO_localeForm(self): - """change form""" - pt=zptFile(self, 'zpt/ChangeECHO_localeForm.zpt') - return pt() - - def change_ECHO_locale(self,lang,title,label,text=None,content_type=None,RESPONSE=None): - """change echo locale""" - self.lang=lang - self.title=title - self.label=label - if not text is None: - self.pt_edit(text, content_type) + def __init__(self,id,lang,title,label,text=None,content_type=None): + self.lang=lang + self.title=title + self.label=label + if text: + self.pt_edit(text, content_type) + self.id=id + + manage_options = ZopePageTemplate.manage_options+( + {'label':'Main Config','action':'change_ECHO_localeForm'}, + ) + + def change_ECHO_localeForm(self): + """change form""" + pt=zptFile(self, 'zpt/ChangeECHO_localeForm.zpt') + return pt() + + def change_ECHO_locale(self,lang,title,label,text=None,content_type=None,RESPONSE=None): + """change echo locale""" + self.lang=lang + self.title=title + self.label=label + if not text is None: + self.pt_edit(text, content_type) - if RESPONSE is not None: - RESPONSE.redirect('manage_main') + if RESPONSE is not None: + RESPONSE.redirect('manage_main') - + def manage_addECHO_localeForm(self): - """Form for adding""" - pt=zptFile(self, 'zpt/AddECHO_localeForm.zpt') - return pt() + """Form for adding""" + pt=zptFile(self, 'zpt/AddECHO_localeForm.zpt') + return pt() def manage_addECHO_locale(self,lang,title,label,text=None,content_type=None,RESPONSE=None): - """add echo locale""" + """add echo locale""" - id="locale_"+lang - - self._setObject(id, ECHO_locale(id,lang,title,label,text,content_type)) - if RESPONSE is not None: - RESPONSE.redirect('manage_main') + id="locale_"+lang + + self._setObject(id, ECHO_locale(id,lang,title,label,text,content_type)) + if RESPONSE is not None: + RESPONSE.redirect('manage_main') 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=zptFile(self, 'zpt/ChangeECHO_copyright') - 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:] + """Copyright informationen""" + meta_type="ECHO_copyright" + + + + def __init__(self,id,title,copyrights): + """init""" + self.title=title + self.id=id + self.copyrights=copyrights[0:] - if RESPONSE is not None: - RESPONSE.redirect('manage_main') + 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=zptFile(self, 'zpt/ChangeECHO_copyright') + 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=zptFile(self, 'zpt/AddECHO_copyright.zpt') return pt() def manage_addECHO_copyright(self, id,title,RESPONSE=None): - """add the copyright""" + """add the copyright""" + + meta_type="ECHO_copyright" + + #first generate copyrights as list of tripels (mediaType,partner,copyrightType) + + - 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') - + 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""" @@ -253,19 +254,19 @@ def manage_addECHO_layoutTemplate(self, return '' class ECHO_fullText(ZopePageTemplate,ECHO_basis,ECHO_language): - """echo fulltext in xml""" + """echo fulltext in xml""" - meta_type="ECHO_fullText" + meta_type="ECHO_fullText" - - def getPage(self,nr='1'): - """get page n""" - #return self().encode('latin-1','ignore') - dom=xml.dom.minidom.parseString(self().encode('utf-8','ignore')) - pages=dom.getElementsByTagName('page') - - return pages[int(nr)-1].toxml() - + + def getPage(self,nr='1'): + """get page n""" + #return self().encode('latin-1','ignore') + dom=xml.dom.minidom.parseString(self().encode('utf-8','ignore')) + pages=dom.getElementsByTagName('page') + + return pages[int(nr)-1].toxml() + # Product registration and Add support manage_addECHO_fullTextForm = PageTemplateFile( 'zpt/AddECHO_fullText.zpt', globals()) @@ -302,340 +303,370 @@ def manage_addECHO_fullText(self, id, ti return '' -class ECHO_resource(Folder,Persistent,ECHO_basis): +class ECHO_resource(CatalogAware,Folder,Persistent,ECHO_basis): """ECHO Ressource""" security=ClassSecurityInfo() meta_type='ECHO_resource' - + default_catalog='resourceCatalog' + # viewClassificationList=viewClassificationListMaster + def PrincipiaSearchSource(self): + """Return cataloguable key for ourselves.""" + return str(self) + getSubCols = ECHO_helpers.getSubCols + def reindex(self): + """generate fields for indexing and reindex""" + import urlparse + #TODO: korrigieren des metalink pfades konfigurierbar machen + splitted= [x for x in urlparse.urlparse(self.metalink)] + splitted[1]="foxridge.mpiwg-berlin.mpg.de"[0:] + + if splitted[0]=="http": + self.metalink=urlparse.urlunparse(splitted) + + + self.fullTextUrl=self.getFullTextXML(noredirect="yes") + + #TODO: korrigieren relative url to absoluter url volltexten, konfigurierbar? + splitted= [x for x in urlparse.urlparse(self.fullTextUrl)] + if splitted[0]=="": + splitted[0]="http" + splitted[1]="foxridge.mpiwg-berlin.mpg.de"[0:] + + self.fullTextUrl=urlparse.urlunparse(splitted) + + self.imagePath=self.getImagePath() + + self.reindex_object() + 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) + """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) - + tmpPath=tempfile.mkdtemp(dir=tempdir) + - tmpZip=tempfile.mktemp(dir=tempdir) + tmpZip=tempfile.mktemp(dir=tempdir) - tmpFn=os.path.split(tmpZip)[1] + 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) + 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 + 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() + 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() + 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() + """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) + """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 + """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 + """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) - 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" + 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 + return "free" #default free def changeAccessRightMD(self,accessright,RESPONSE=None): - """change the rights""" - - params="accessright=%s"%accessright + """change the rights""" + + params="accessright=%s"%accessright - #print ECHO_helpers.urlopen(self.absolute_url()+'/setAccessRightXML'+'?'+params).read() + #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() + + 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') + + if RESPONSE is not None: + RESPONSE.redirect('manage_main') - + def setAccessRightXML(self,accessright): - """set accessright""" - url=self.metalink + """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') - 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) + 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() - return dom.toxml().encode('utf-8') + 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""" + """Form for changing the startpage""" - - pt=zptFile(self, 'zpt/ChangeECHO_resourceStartPage.zpt') + + pt=zptFile(self, 'zpt/ChangeECHO_resourceStartPage.zpt') pt.content_type="text/html" return pt() def createImageUrl(self,pn=1): - """create ImageUrl""" + """create ImageUrl""" - - resourcepath=readFieldFromXML(self.metalink,'resource','archive-path') - - digiliburlprefix=readFieldFromXML(self.metalink,'texttool','digiliburlprefix') - images=readFieldFromXML(self.metalink,'texttool','image') + + 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 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 + if (not images) or (not resourcepath): return None - return "%sfn=%s&pn=%i"%(digiliburlprefix,resourcepath+"/"+images,pn) + 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() + """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""" + """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 + 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) + 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() + 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') + if RESPONSE is not None: + RESPONSE.redirect('manage_main') def changeViewerTemplateSetForm(self): - """change the viewer template set""" - pt=zptFile(self, 'zpt/changeResourceViewerTemplateSet') + """change the viewer template set""" + pt=zptFile(self, 'zpt/changeResourceViewerTemplateSet') return pt() @@ -659,49 +690,49 @@ class ECHO_resource(Folder,Persistent,EC def changeViewerTemplateSet(self,project,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix,RESPONSE=None): - """changeit""" + """changeit""" - paramList=['project','startpage','xslt','thumbtemplate','topbar','digiLibTemplate','digiliburlprefix'] + paramList=['project','startpage','xslt','thumbtemplate','topbar','digiLibTemplate','digiliburlprefix'] - - #writeMetadata(self.metalink,self.metaDataHash,project,None,xslt,thumbtemplate,topbar,digiLibTemplate) + + #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) + 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() + + 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 - - + #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('/index.meta','',path) - path=re.sub(self.REQUEST['SERVER_URL'],'',path) - path=re.sub('http://'+self.REQUEST['HTTP_HOST'],'',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.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://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 + 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 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') + if RESPONSE is not None: + RESPONSE.redirect('manage_main') - security.declarePublic('content_html') + security.declarePublic('content_html') def content_html(self): """template fuer content""" return ECHO_basis.content_html(self,'resource') @@ -713,123 +744,123 @@ class ECHO_resource(Folder,Persistent,EC # return "" def getFullTextXML(self,noredirect=None): - """getFullTextXML; gives the FullText as an XML Document, and if somthing goes wrong.""" + """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) + 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) + #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() + #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 + 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" + 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") + """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" + """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 - + """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 foerdernden Institutionen aus""" - - if hasattr(self,'support'): - obj=self.support - ret=obj.getSupporter() - return ret - else: - return '' - + """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""" @@ -853,38 +884,38 @@ class ECHO_resource(Folder,Persistent,EC self.credits=toList(credits) self.description=description self.contentType=contentType - self.copyrightType=copyrightType - self.renderingType=renderingType + 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 -# self.viewClassification="" +# self.viewClassification="" def getContentType(self): - try: - return self.contentType - except: - return "" + try: + return self.contentType + except: + return "" def getCopyrightType(self): - try: - return self.copyrightType - except: - return "" + try: + return self.copyrightType + except: + return "" def getRenderingType(self): - try: - return self.renderingType - except: - return "" + try: + return self.renderingType + except: + return "" def ECHO_resource_config(self): """Main configuration""" @@ -915,15 +946,15 @@ class ECHO_resource(Folder,Persistent,EC 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 + 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=zptFile(self, 'zpt/ChangeECHO_resource_metadata.zpt') return pt() @@ -932,15 +963,15 @@ class ECHO_resource(Folder,Persistent,EC def changeECHO_resource_main(self,metalink,link,title,label,description,contentType,renderingType,weight,resourceID,RESPONSE=None): """Aenderung der Properties""" - self.resourceID=resourceID - self.title=title - self.label=label - self.description=description - - self.contentType=contentType - self.renderingType=renderingType - self.weight=weight - + 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 @@ -950,101 +981,128 @@ class ECHO_resource(Folder,Persistent,EC 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') + #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') def changeECHO_resource_credits(self,credits,responsible,copyrightType,RESPONSE=None): """Aenderung der Properties""" - self.credits=credits - self.responsible=responsible - self.copyrightType=copyrightType + 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') + """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""" + """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() + 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') + if RESPONSE is not None: + RESPONSE.redirect('manage_main') def getMDValue(self,fieldName,empty=None): - if not empty: - return self.metaDataHash.get(fieldName,'!!NOT USED HERE in Type: %s'%self.contentType) - - else: - return self.metaDataHash.get(fieldName,empty) - + if not 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') + """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) + 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" - + """return bibliographical metadata as stored in the object""" + + try: + + return writeMetadata(self.metalink,self.metaDataHash,project,startpage,xslt,thumbtemplate,topbar,digiLibTemplate,xmlfrag="yes") + except: + return " no metadata stored" + + def getXQueryMetaData(self,xquery): + ''' + execute an xquery on the metadata and returns a list of tuples, + each tuple represent the content of the node as text and the whole node as xml-fragment + @param xquery: xquery auf den metadaten + ''' + + try: + md=writeMetadata(self.metalink,self.metaDataHash,xmlfrag="yes") + except: + return None + + dom = NonvalidatingReader.parseString(md,"http://www.mpiwg-berlin.mpg.de/") + + results=Ft.Xml.XPath.Evaluate(xquery, contextNode=dom) + + ret=[] + for result in results: + + buf = cStringIO.StringIO() + PrettyPrint(result, stream=buf) + str = buf.getvalue()[0:] + buf.close() + ret.append((getTextFromNode(result),str)) + + return ret + 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) + """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,coords=None,credits=None,RESPONSE=None): """Aenderung der Properties""" @@ -1059,23 +1117,23 @@ class ECHO_resource(Folder,Persistent,EC manage_options = Folder.manage_options+( {'label':'Main Config','action':'ECHO_resource_config_main'}, - {'label':'Change Metadata','action':'ECHO_resource_config_metadata'}, - {'label':'Graphic Coords','action':'ECHO_graphicEntry'}, + {'label':'Change Metadata','action':'ECHO_resource_config_metadata'}, + {'label':'Graphic 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'}, - ) + {'label':'Change TemplateSets and Image Viewer','action':'changeViewerTemplateSetForm'}, + {'label':'set/change startpage','action':'setStartPageForm'}, + {'label':'Copy MD for indexing and search','action':'copySearchFields'}, + ) 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 - + """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: @@ -1104,67 +1162,67 @@ class ECHO_resource(Folder,Persistent,EC def getFieldValue(self,field): """get value""" - + try: - + ret=self.metaDataHash[field] if ret == "": return None else: - - return ret + + return ret except: return None def getMetaDataHash(self): - """md hash""" - return self.metaDataHash + """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:] - + + 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)) + """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 {},[] + #return {},[] temp=self.ZopeFind(self.standardMD) - if referenceType=="": - referenceType="book" - - + if referenceType=="": + referenceType="book" + + bibdata={} retdata={} - fields=[] + fields=[] fieldlist=self.standardMD.fieldList tags=self.findTagsFromMapping(self.contentType) - self.referencetypes=tags[2] - for referenceTypeF in self.referencetypes: + self.referencetypes=tags[2] + for referenceTypeF in self.referencetypes: - if referenceTypeF[1].title.lower() == referenceType.lower(): + 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 - + 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] + bibdata['data']=referenceTypeF[1] + fields=bibdata[referenceType] for field in fieldlist: retdata[field]=referenceTypeF[1].getValue(field)[1] @@ -1172,70 +1230,70 @@ class ECHO_resource(Folder,Persistent,EC def findTagsFromMapping(self,referenceType): """gib hash mit label -> generic zurueck""" - + - if referenceType=="": - referenceType="book" - - temp = self.ZopeFind(self.standardMD)[0:] - - - #self.referencetypes=temp[0:] - - - + 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 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') - + """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) @@ -1244,30 +1302,30 @@ class ECHO_resource(Folder,Persistent,EC self.REQUEST.SESSION['back']=back if not error=="": #Fehler beim Auslesen des Metafiles - return "ERROR:",error - - if not self.contentType: - self.contentType=metadict['bib_type'].lower() - - if not (metadict['bib_type'].lower()==self.contentType.lower()): - self.REQUEST.SESSION['contentStorage']=metadict['bib_type'] - self.REQUEST.SESSION['contentZope']=self.contentType - - return zptFile(self, 'zpt/ECHO_getResourceMDErrorContentType.zpt')() - - self.REQUEST.SESSION['metadict']=metadict - - - - self.REQUEST.SESSION['diffs']=checkDiffs(self,self.REQUEST.SESSION['metadict']) - + return "ERROR:",error + + if not self.contentType: + self.contentType=metadict['bib_type'].lower() + + if not (metadict['bib_type'].lower()==self.contentType.lower()): + self.REQUEST.SESSION['contentStorage']=metadict['bib_type'] + self.REQUEST.SESSION['contentZope']=self.contentType + + return zptFile(self, 'zpt/ECHO_getResourceMDErrorContentType.zpt')() + + self.REQUEST.SESSION['metadict']=metadict + + + + self.REQUEST.SESSION['diffs']=checkDiffs(self,self.REQUEST.SESSION['metadict']) + - + if template=="yes": - pt=zptFile(self, 'zpt/ECHO_resourceMD.zpt') - return pt() + pt=zptFile(self, 'zpt/ECHO_resourceMD.zpt') + return pt() - + @@ -1276,54 +1334,54 @@ class ECHO_resource(Folder,Persistent,EC 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 - - + """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 + + security.declareProtected('View','index_html') 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 + 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): - """prints out a startpage for a resource for use e.g. in the BVE""" + """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 + # suche ob startpage.html in dem Ordner vorhanden ist, dann wir diese angezeigt - sp=self.ZopeFind(self,obj_ids=['startpage.html']) + sp=self.ZopeFind(self,obj_ids=['startpage.html']) - if sp: - return sp[1]() + if sp: + return sp[1]() #pruefen ob irgendwo ein template - if hasattr(self,'startpage_index_template'): - return self.startpage_index_template() + if hasattr(self,'startpage_index_template'): + return self.startpage_index_template() - #generisches template ausgeben - - pt=zptFile(self, 'zpt/ECHO_startpage_index_template_standard.zpt') - pt.content_type="text/html" - return pt() + #generisches template ausgeben + + pt=zptFile(self, 'zpt/ECHO_startpage_index_template_standard.zpt') + 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]() + + 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 @@ -1332,7 +1390,7 @@ class ECHO_resource(Folder,Persistent,EC """Erzeugt_standard_Label aus Template""" pt=getattr(self,"label_template_"+self.contentType.lower()) - self.label=pt()[0:] + self.label=pt()[0:] return pt() security.declarePublic('generate_title') # has to be change, presentlyset because of OSAS koordination @@ -1341,8 +1399,8 @@ class ECHO_resource(Folder,Persistent,EC """Erzeugt_standard_Label aus Template""" pt=getattr(self,"label_template_"+self.contentType.lower()) - self.title=pt()[0:] - + self.title=pt()[0:] + return pt() Globals.InitializeClass(ECHO_resource) @@ -1416,7 +1474,7 @@ class ECHO_externalLink(Folder,ECHO_basi manage_options = Folder.manage_options+( {'label':'Main Config','action':'ECHO_externalLink_config'}, - {'label':'Graphic Coords','action':'ECHO_graphicEntry'}, + {'label':'Graphic Coords','action':'ECHO_graphicEntry'}, ) @@ -1443,40 +1501,40 @@ def manage_addECHO_externalLink(self,id, class ECHO_link(ECHO_externalLink): - """external_link""" + """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') - meta_type="ECHO_link" - + def index_html(self): + """standard link""" + if self.link: + splitted=self.link.split("?") + if len(splitted)>1: + params=cgi.parse_qs(splitted[1]) + + for x in params.keys(): + if type(params[x]) is ListType: + params[x]=params[x][0] - 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 index_html(self): - """standard link""" - if self.link: - splitted=self.link.split("?") - if len(splitted)>1: - params=cgi.parse_qs(splitted[1]) - - for x in params.keys(): - if type(params[x]) is ListType: - params[x]=params[x][0] - - - else: - params={} - - params['backLink']=self.aq_parent.absolute_url() - params['startLink']=splitted[0]+"?"+urllib.urlencode(params) - - - return self.REQUEST.RESPONSE.redirect(splitted[0]+"?"+urllib.urlencode(params)) - else: - return "" + + else: + params={} + + params['backLink']=self.aq_parent.absolute_url() + params['startLink']=splitted[0]+"?"+urllib.urlencode(params) + + + return self.REQUEST.RESPONSE.redirect(splitted[0]+"?"+urllib.urlencode(params)) + else: + return "" def manage_addECHO_linkForm(self): """Form for external Links""" @@ -1493,7 +1551,7 @@ def manage_addECHO_link(self,id,title,la if RESPONSE is not None: RESPONSE.redirect('manage_main') - + class ECHO_collection(Folder, Persistent, Implicit, Cacheable,ECHO_basis): """ECHO Collection""" @@ -1506,226 +1564,226 @@ class ECHO_collection(Folder, Persistent path="/mpiwg/online/permanent/shipbuilding" def localizeObjects(self): - """localize all objects""" - contents=self.ZopeFind(self,obj_metatypes=['ECHO_externalLink','ECHO_link','ECHO_mapText']) + """localize all objects""" + contents=self.ZopeFind(self,obj_metatypes=['ECHO_externalLink','ECHO_link','ECHO_mapText']) - find=self.ZopeFind(self,obj_ids=('locale_en')) - if not find: - self.manage_addECHO_locale("en",'','') - for content in contents: - - if content[1].meta_type in ['ECHO_link','ECHO_externalLink']: - - find=content[1].ZopeFind(content[1],obj_metatypes=('ECHO_mapText')) - if find: - root=find[0][1] - - locale=find[0][1].ZopeFind(find[0][1],obj_ids=('locale_en')) - else: - root=None - else: - root=content[1] - locale=content[1].ZopeFind(content[1],obj_ids=('locale_en')) - if root and not locale: - root.manage_addECHO_locale("en",'','') - - pt=zptFile(self, 'zpt/localizeObjects.zpt') - return pt() + find=self.ZopeFind(self,obj_ids=('locale_en')) + if not find: + self.manage_addECHO_locale("en",'','') + for content in contents: + + if content[1].meta_type in ['ECHO_link','ECHO_externalLink']: + + find=content[1].ZopeFind(content[1],obj_metatypes=('ECHO_mapText')) + if find: + root=find[0][1] + + locale=find[0][1].ZopeFind(find[0][1],obj_ids=('locale_en')) + else: + root=None + else: + root=content[1] + locale=content[1].ZopeFind(content[1],obj_ids=('locale_en')) + if root and not locale: + root.manage_addECHO_locale("en",'','') + + pt=zptFile(self, 'zpt/localizeObjects.zpt') + return pt() def localize(self,REQUEST,RESPONSE): - """localize""" - for key in REQUEST.form.keys(): - splitted=key.split("!") - - if splitted[0]=="" or splitted[0]=="en" or splitted[0]=="title" or splitted[0]=="label": - if splitted[0]=="en": - setattr(self.locale_en,splitted[1],REQUEST.form[key]) - else: - setattr(self,splitted[0],REQUEST.form[key]) - else: - obj=getattr(self,splitted[0]) - - if obj.meta_type=="ECHO_mapText": - if splitted[1]=="en": - obj.locale_en.pt_edit(REQUEST.form[key],None) - else: - obj.pt_edit(REQUEST.form[key],None) - else: - text=obj.ZopeFind(obj,obj_metatypes=['ECHO_mapText']) - if splitted[1]=="en": - - text[0][1].locale_en.pt_edit(REQUEST.form[key],None) - else: - text[0][1].pt_edit(REQUEST.form[key],None) - if RESPONSE is not None: - RESPONSE.redirect('manage_main') + """localize""" + for key in REQUEST.form.keys(): + splitted=key.split("!") + + if splitted[0]=="" or splitted[0]=="en" or splitted[0]=="title" or splitted[0]=="label": + if splitted[0]=="en": + setattr(self.locale_en,splitted[1],REQUEST.form[key]) + else: + setattr(self,splitted[0],REQUEST.form[key]) + else: + obj=getattr(self,splitted[0]) + + if obj.meta_type=="ECHO_mapText": + if splitted[1]=="en": + obj.locale_en.pt_edit(REQUEST.form[key],None) + else: + obj.pt_edit(REQUEST.form[key],None) + else: + text=obj.ZopeFind(obj,obj_metatypes=['ECHO_mapText']) + if splitted[1]=="en": + + text[0][1].locale_en.pt_edit(REQUEST.form[key],None) + else: + text[0][1].pt_edit(REQUEST.form[key],None) + if RESPONSE is not None: + RESPONSE.redirect('manage_main') 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+"" - + """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=zptFile(self, 'zpt/changeLabelsForm') - pt.content_type="text/html" - return pt() + """change form""" + pt=zptFile(self, 'zpt/changeLabelsForm') + pt.content_type="text/html" + return pt() def changeTitles(self): - """change form""" - pt=zptFile(self, 'zpt/changeTitleForm') - pt.content_type="text/html" - return pt() + """change form""" + 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() + """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() + """change form""" + pt=zptFile(self, 'zpt/changeMetaDataLinkForm') + 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: - pass - return ret + """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: + pass + 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()]+"
" + """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: - pass - return ret + except: + pass + 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()]+"
" + """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: - pass - return ret + except: + pass + 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_movie','ECHO_resource','ECHO_collection','ECHO_link','ECHO_externalLink']) - for resource in resources: - - try: - ret+=resource[1].getId()+" "+argv[resource[1].getId()]+"
" + """change all lables of a collection""" + ret="" + argv=self.REQUEST.form + + resources=self.ZopeFind(self,obj_metatypes=['ECHO_pageTemplate','ECHO_movie','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: - pass - return ret + except: + pass + return ret def changeTitlesInCollection(self): - """change all lables of a collection""" - ret="" - argv=self.REQUEST.form - - resources=self.ZopeFind(self,obj_metatypes=['ECHO_pageTemplate','ECHO_movie','ECHO_resource','ECHO_collection','ECHO_link','ECHO_externalLink']) - for resource in resources: - - try: - ret+=resource[1].getId()+" "+argv[resource[1].getId()]+"
" + """change all lables of a collection""" + ret="" + argv=self.REQUEST.form + + resources=self.ZopeFind(self,obj_metatypes=['ECHO_pageTemplate','ECHO_movie','ECHO_resource','ECHO_collection','ECHO_link','ECHO_externalLink']) + for resource in resources: + + try: + ret+=resource[1].getId()+" "+argv[resource[1].getId()]+"
" resource[1].title=argv[resource[1].getId()][0:] - except: - pass - return ret + except: + pass + return ret def changeLabelsInCollection(self): - """change all lables of a collection""" - ret="" - argv=self.REQUEST.form - - resources=self.ZopeFind(self,obj_metatypes=['ECHO_pageTemplate','ECHO_movie','ECHO_resource','ECHO_collection','ECHO_link','ECHO_externalLink']) - for resource in resources: - - try: - ret+=resource[1].getId()+" "+argv[resource[1].getId()]+"
" + """change all lables of a collection""" + ret="" + argv=self.REQUEST.form + + resources=self.ZopeFind(self,obj_metatypes=['ECHO_pageTemplate','ECHO_movie','ECHO_resource','ECHO_collection','ECHO_link','ECHO_externalLink']) + for resource in resources: + + try: + ret+=resource[1].getId()+" "+argv[resource[1].getId()]+"
" resource[1].label=argv[resource[1].getId()][0:] - except: - pass - return ret + except: + pass + 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="" + 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" + + 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) + #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=getattr(self,fileName) #genObj.createIndexFile() - ret+="OK:"+fileName+"
" - except: - print "ERROR" - ret+="ERROR:"+fileName+"
" + ret+="OK:"+fileName+"
" + except: + print "ERROR" + ret+="ERROR:"+fileName+"
" - return ret + return ret if RESPONSE is not None: RESPONSE.redirect('manage_main') @@ -1745,29 +1803,29 @@ class ECHO_collection(Folder, Persistent def changeViewerTemplateSetsForm(self): - """change the viewer template set""" - pt=zptFile(self, 'zpt/changeViewerTemplateSet') + """change the viewer template set""" + pt=zptFile(self, 'zpt/changeViewerTemplateSet') 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','')] + """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 + """Lese viewerTemplateSet der Collection not implemented yet!""" + + return default def isSelectedViewerTemplateSet(self,obj,id): @@ -1779,110 +1837,110 @@ class ECHO_collection(Folder, Persistent return None def changeViewerTemplateSets(self,project,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix,RESPONSE=None): - """change the templates""" + """change the templates""" - resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1) + resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1) - for resource in resources: + for resource in resources: - resource[1].changeViewerTemplateSet(project,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix) + resource[1].changeViewerTemplateSet(project,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix) - if RESPONSE is not None: - RESPONSE.redirect('manage_main') + if RESPONSE is not None: + RESPONSE.redirect('manage_main') def setStartpageFolderForm(self): - """Form for changing the startpage""" + """Form for changing the startpage""" - - pt=zptFile(self, 'zpt/ChangeECHO_resourceStartPageFolder.zpt') + + pt=zptFile(self, 'zpt/ChangeECHO_resourceStartPageFolder.zpt') pt.content_type="text/html" return pt() def setStartpageFolder(self,startpage=None,RESPONSE=None): - """change the templates""" + """change the templates""" - resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1) + resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1) - for resource in resources: + for resource in resources: - resource[1].setStartPage(startpage) + resource[1].setStartPage(startpage) - if RESPONSE is not None: - RESPONSE.redirect('manage_main') + 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') - + """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']) + """copys import metadatafields to the object""" + resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource']) - for resource in resources: + for resource in resources: - resource[1].copySearchFields() + resource[1].copySearchFields() - if RESPONSE is not None: - RESPONSE.redirect('manage_main') - + if RESPONSE is not None: + RESPONSE.redirect('manage_main') + def reloadMetaDataFromStorageWarning(self,RESPONSE=None): - """warning""" - pt=zptFile(self, 'zpt/reloadMetaDataFromStorageWarning.zpt') + """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""" + """copy metadata from the storage to ECHO""" - return reloadMetaDataFromStorage(self,RESPONSE=None) + 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 + """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 + """read an XML file for generating resources""" + dom=xml.dom.minidom.parse(fileupload) + ret="

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 security.declarePublic('getImageTag') def getImageTag(self): @@ -1923,18 +1981,18 @@ class ECHO_collection(Folder, Persistent def addMovie(self,id,title,label,description,contentType,responsible,link,thumbUrl,rawFile,lowresFile,metalink,weight,credits=None,coords=None,RESPONSE=None): """SSS""" - #manage_addECHO_movie(self,id,title,label,description,responsible,link,thumbUrl,rawFile,metalink,weight,credits=None,coords=None,RESPONSE=None) - if not hasattr(self,id): - try: - manage_addECHO_movie(self,id,title,label,description,responsible,link,thumbUrl,rawFile,lowresFile,metalink,weight,credits=None,coords=None,RESPONSE=None) - return "done" - except: - return None - else: - obj=getattr(self,id) - obj.changeECHO_movie_main(metalink,link,rawFile,lowresFile,thumbUrl,title,label,description,contentType,weight=weight) + #manage_addECHO_movie(self,id,title,label,description,responsible,link,thumbUrl,rawFile,metalink,weight,credits=None,coords=None,RESPONSE=None) + if not hasattr(self,id): + try: + manage_addECHO_movie(self,id,title,label,description,responsible,link,thumbUrl,rawFile,lowresFile,metalink,weight,credits=None,coords=None,RESPONSE=None) + return "done" + except: + return None + else: + obj=getattr(self,id) + obj.changeECHO_movie_main(metalink,link,rawFile,lowresFile,thumbUrl,title,label,description,contentType,weight=weight) - return "changed" + return "changed" def addResource(self,id,title,label,description,contentType,responsible,link,metalink,weight,credits=None,coords=None,RESPONSE=None): """SSS""" @@ -1961,13 +2019,13 @@ class ECHO_collection(Folder, Persistent def getCollectionTreeXML(self,pwstr=None): """Tree as XML""" - def addPassWd(str,pwstr=None): - """adds a user/passwd to an url""" - if pwstr: - txt2=re.sub(r"(http://)(.*?)","\g<1>%s@\g<2>"%pwstr,str) - else: - txt2=re.sub(r"(http://)(.*?)","\g<1>www:3333@\g<2>",str) - return txt2 + def addPassWd(str,pwstr=None): + """adds a user/passwd to an url""" + if pwstr: + txt2=re.sub(r"(http://)(.*?)","\g<1>%s@\g<2>"%pwstr,str) + else: + txt2=re.sub(r"(http://)(.*?)","\g<1>www:3333@\g<2>",str) + return txt2 def getCollection(object,depth=0,pwstr=None): depth+=1 @@ -1982,13 +2040,13 @@ class ECHO_collection(Folder, Persistent """nothing""" return collections - ret="""""" + ret="""""" return ret+""+getCollection(self,pwstr=pwstr)+"" def createAllJSAreas(self): """create area calls for JavaScript""" areas = self.getAllMapAreas() - return self.createJSAreas(areas) + return self.createJSAreas(areas) security.declarePublic('getCreditObject') def getCreditObject(self,name): @@ -2019,19 +2077,19 @@ class ECHO_collection(Folder, Persistent def ECHO_rerenderLinksMDWarning(self): - """change form""" - pt=zptFile(self, 'zpt/rerenderLinksWarning') - pt.content_type="text/html" - return pt() + """change form""" + pt=zptFile(self, 'zpt/rerenderLinksWarning') + pt.content_type="text/html" + return pt() security.declarePublic('ECHO_rerenderLinksMD') def ECHO_rerenderLinksMD(self,obj=None,types=['title','label']): """Rerender all Links""" - return ECHO_rerenderLinksMD(self,obj,types) + return ECHO_rerenderLinksMD(self,obj,types) - + def __init__(self,id,title,label,description="",contentType="",responsible="",credits="",weight="",sortfield="",coords=[],secondaryLinkTitle="",secondaryLink="",imageTag="",bgcolour=""): self.id = id @@ -2049,23 +2107,23 @@ class ECHO_collection(Folder, Persistent self.coords=coordsnew self.secondaryLinkTitle=secondaryLinkTitle self.secondaryLink=secondaryLink - self.bgcolour=bgcolour + self.bgcolour=bgcolour 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':'Localize','action':'localizeObjects'}, - {'label':'Change Weights','action':'changeWeights'}, + {'label':'Localize','action':'localizeObjects'}, + {'label':'Change Weights','action':'changeWeights'}, {'label':'Rerender Labels and Titles','action':'ECHO_rerenderLinksMDWarning'}, {'label':'Graphic Coords','action':'ECHO_graphicEntry'}, - {'label':'create resources from XML','action':'createRessourcesFromXMLForm'}, - {'label':'Set Startpage','action':'setStartpageFolderForm'}, + {'label':'create resources from XML','action':'createRessourcesFromXMLForm'}, + {'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'}, + {'label':'Reload Metadata','action':'reloadMetaDataFromStorageWarning'}, + {'label':'ImportCollection','action':'updateCollection'}, + {'label':'Copy MD for indexing and search','action':'copySearchFields'}, ) @@ -2084,41 +2142,41 @@ class ECHO_collection(Folder, Persistent def getBgcolour(self): - """colour""" - if hasattr(self,'bgcolour') and not (self.bgcolour==""): - return self.bgcolour - else: - return "#dddddd" + """colour""" + if hasattr(self,'bgcolour') and not (self.bgcolour==""): + return self.bgcolour + else: + return "#dddddd" - - security.declarePublic('changeECHO_collection') + + 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="",location=None,isAlwaysClickable=None,prefix="",suffix=""): """Aenderung der Properties""" self.secondaryLink=secondaryLink self.secondaryLinkTitle=secondaryLinkTitle self.imageTag=imageTag - self.bgcolour=bgcolour + self.bgcolour=bgcolour self.location=location - self.isAlwaysClickable=isAlwaysClickable - self.prefix=prefix[0:] - self.suffix=suffix[0:] - + self.isAlwaysClickable=isAlwaysClickable + self.prefix=prefix[0:] + self.suffix=suffix[0:] + 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 + """set clickable""" + if flag=="yes": + self.isAlwaysClickable="yes" + else: + self.isAlwaysClickable=None - return flag + return flag def showOverview(self): """overview""" @@ -2137,7 +2195,7 @@ class ECHO_collection(Folder, Persistent if result is not None: # Got a cached value. return result - + if 'index.html' in self.__dict__.keys(): ret=getattr(self,'index.html')() @@ -2149,17 +2207,17 @@ class ECHO_collection(Folder, Persistent ret=self.main_index_template.__of__(self)(self.main_template) else: - pt=zptFile(self, 'zpt/ECHO_main_index_template_standard.zpt') - pt.content_type="text/html" - ret=pt.render() + pt=zptFile(self, 'zpt/ECHO_main_index_template_standard.zpt') + pt.content_type="text/html" + ret=pt.render() - self.ZCacheable_set(ret) + self.ZCacheable_set(ret) return ret security.declarePublic('content_html') def content_html(self,**argv): """template fuer content""" - #print "NN",argv + #print "NN",argv return ECHO_basis.content_html(self,'collection') def getCredits(self): @@ -2171,11 +2229,11 @@ class ECHO_collection(Folder, Persistent def area_img(self): """area image""" - bt = BrowserCheck(self) - if bt.isIE or bt.isN4: - return sendFile(self, 'images/red.gif', 'image/gif') - else: - return sendFile(self, 'images/reda.png', 'image/png') + bt = BrowserCheck(self) + if bt.isIE or bt.isN4: + return sendFile(self, 'images/red.gif', 'image/gif') + else: + return sendFile(self, 'images/reda.png', 'image/png') def trans_img(self): """empty image""" @@ -2203,19 +2261,19 @@ class ECHO_collection(Folder, Persistent areas=[] for entry in self.getSubCols(subColTypes=mapColTypes): object=entry - areas.extend(object.getMapAreas()) + 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" + """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 @@ -2240,106 +2298,106 @@ def manage_addECHO_collection(self,id,ti 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':'Graphic Coords','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=zptFile(self, 'zpt/ECHO_main_index_template_standard.zpt') - 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=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=""): - """Aenderung der Properties""" - - self.secondaryLink=secondaryLink - self.secondaryLinkTitle=secondaryLinkTitle - self.imageTag=imageTag - self.bgcolour=bgcolour + """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':'Graphic Coords','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=zptFile(self, 'zpt/ECHO_main_index_template_standard.zpt') + 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=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=""): + """Aenderung der Properties""" + + self.secondaryLink=secondaryLink + self.secondaryLinkTitle=secondaryLinkTitle + self.imageTag=imageTag + self.bgcolour=bgcolour self.logo=logo - setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight) + setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight) - self.sortfield=sortfield + self.sortfield=sortfield - if RESPONSE is not None: - RESPONSE.redirect('manage_main') + if RESPONSE is not None: + RESPONSE.redirect('manage_main') - def getLogo(self): - """logo ausgeben""" + def getLogo(self): + """logo ausgeben""" try: return self.logo except: return "ECHO_groups" security.declarePublic('content_html') - def content_html(self): - """template fuer content""" - return ECHO_basis.content_html(self,'group') + def content_html(self): + """template fuer content""" + return ECHO_basis.content_html(self,'group') @@ -2365,96 +2423,96 @@ 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 + """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) @@ -2474,41 +2532,41 @@ def manage_addECHO_userFolder(self,dtsel REQUEST['RESPONSE'].redirect(self.absolute_url()+'/manage_main') def manage_addECHO_userFolderForm(self): - """add a user folder form""" - return manage_addECHO_userFolder(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" + 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): @@ -2517,7 +2575,33 @@ class ECHO_root(Folder,Persistent,Implic security=ClassSecurityInfo() meta_type="ECHO_root" - + + def findObjectFromFulltext(self,url=None,existUri=None): + ''' + + @param url: + @param existUri: + ''' + #TODO: at the moment assume that the filename is unique, the whole has to changed to a system of ids. + return None + + def reindex(self,RESPONSE=None): + """indiziere alle Objecte neu""" + + if RESPONSE: + RESPONSE.write("") + + resources=self.ZopeFind(self,obj_metatypes=["ECHO_resource"], search_sub=1) + + for resource in resources: + resource[1].reindex() + print "

done %s

\n" + if RESPONSE: + RESPONSE.write("

done %s

\n"%resource[0]) + + if RESPONSE: + RESPONSE.write("

ok

\n") + def printer(self,txt): print txt print txt[2] @@ -2533,29 +2617,29 @@ class ECHO_root(Folder,Persistent,Implic return txt[2] def setLanguage(self,lang): - """Set language cookie""" - self.REQUEST.RESPONSE.setCookie('lang_exhibition',lang,path="/") + """Set language cookie""" + self.REQUEST.RESPONSE.setCookie('lang_exhibition',lang,path="/") def switchLanguage(self): - """Set language cookie""" - if self.getLanguage()=="en": - lang="de" - else: - lang="en" - - self.REQUEST.RESPONSE.setCookie('lang_exhibition',lang,path="/") - self.REQUEST.RESPONSE.redirect(self.REQUEST['URL1']) + """Set language cookie""" + if self.getLanguage()=="en": + lang="de" + else: + lang="en" + + self.REQUEST.RESPONSE.setCookie('lang_exhibition',lang,path="/") + self.REQUEST.RESPONSE.redirect(self.REQUEST['URL1']) def getLanguage(self): - """get language cookie""" - lang= self.REQUEST.cookies.get('lang_exhibition','de') - if lang == '': - lang="de" - return lang + """get language cookie""" + lang= self.REQUEST.cookies.get('lang_exhibition','de') + if lang == '': + lang="de" + return lang def getContentOverviewTemplate(self): - """produces overview template with macro""" - pt = zptObjectOrFile(self, 'content_overview_template') - return pt + """produces overview template with macro""" + pt = zptObjectOrFile(self, 'content_overview_template') + return pt def mapstyle_css(self): """send mapstyle.css""" @@ -2565,222 +2649,222 @@ class ECHO_root(Folder,Persistent,Implic ###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() + 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" + 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 URLquote(self, text): """urllib.quote fuer Michael""" - return urllib.quote(text) + return urllib.quote(text) def checkResource(self,id): - """checks if a resource is in the tree, gives back none or list of resources""" - if not id: - id="" - splitted=id.split("/") - id=splitted[len(splitted)-1] - 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] - + """checks if a resource is in the tree, gives back none or list of resources""" + if not id: + id="" + splitted=id.split("/") + id=splitted[len(splitted)-1] + 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() - + """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() + """change form""" + pt=zptFile(self, 'zpt/generateFromRDFForm') + pt.content_type="text/html" + return pt() def generateFromRDF(self,file,startNode="/Cuneiform Corpus"): - """generate from RDF""" + """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""" - 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" + 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" + + 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()]+"
" + """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: - pass - return ret + except: + pass + return ret def changeWeights(self): - """change form""" - pt=zptFile(self, 'zpt/changeWeightForm') - pt.content_type="text/html" - return pt() + """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'}, + {'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') + """warning""" + pt=zptFile(self, 'zpt/reloadMetaDataFromStorageWarning.zpt') pt.content_type="text/html" return pt() def reloadMetaDataFromStorage(self,RESPONSE=None): - """reload MD from Storage""" + """reload MD from Storage""" - return reloadMetaDataFromStorage(self,RESPONSE) + return reloadMetaDataFromStorage(self,RESPONSE) def getRDF(self,urn=None): - """rdf of the collection""" + """rdf of the collection""" - contents=self.ZopeFind(self,obj_metatypes=['ECHO_group','ECHO_resource','ECHO_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+"" - + 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() + """return content/html""" + + return ECHO_helpers.urlopen(path+"/content_html").read() def getImageViewers(self): """images""" @@ -2789,35 +2873,35 @@ class ECHO_root(Folder,Persistent,Implic def getBibTag(self,tag,content): - """get field tag for index-meta-generation""" - if not content or content=="": - return "" - ret="<%s>"%tag - #ret+=urllib.quote(content) - ret+=content + """get field tag for index-meta-generation""" + if not content or content=="": + return "" + ret="<%s>"%tag + #ret+=urllib.quote(content) + ret+=content - ret+=""%tag - return ret + ret+=""%tag + return ret def getValueFromClass(self,field,found): - """retattribute falss existing""" - try: - - return getattr(found,field).decode('ascii','ignore') - except: - return "" + """retattribute falss existing""" + try: + + return getattr(found,field).decode('ascii','ignore') + except: + return "" security.declarePublic('getImageTag') def getImageTag(self): - """needed by main_template""" - return "" + """needed by main_template""" + return "" secondaryLink="" #needed by main_template secondaryLinkTitle="" #needed by main_template def getBgcolour(self): - """hack""" - return "#dddddd" + """hack""" + return "#dddddd" security.declareProtected('View','contentTypeSelector_HTML') def contentTypeSelector_HTML(self,selected=None): @@ -2834,103 +2918,103 @@ class ECHO_root(Folder,Persistent,Implic else: retStr+="""