--- ECHO_content/ECHO_collection.py 2004/10/27 14:53:00 1.183 +++ ECHO_content/ECHO_collection.py 2005/11/10 11:12:12 1.251 @@ -9,7 +9,15 @@ class ECHO_externalLink contains informa """ +try: + from reportlab.pdfgen import canvas + from reportlab.lib.pagesizes import A4 +except: + print "PDF generation will not work" + + import string +import tempfile import re import os import OFS.Image @@ -29,12 +37,14 @@ from Products.PageTemplates.PageTemplate from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate from Globals import Persistent, package_home from Acquisition import Implicit -from ECHO_helpers import displayTypes, getText,readFieldFromXML +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 @@ -42,445 +52,29 @@ 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 import xml.dom.minidom -from ECHO_graphicalOverview import javaHandler,javaScriptMain import ECHO_helpers +from ECHO_helpers import * +from ECHO_language import * +from ECHO_movie import * +import vlp_xmlhelpers #TODO: vlp elemente aus echo herausnehmen -def donatus(txt2): - import xmlrpclib - - server = xmlrpclib.ServerProxy("http://archimedes.fas.harvard.edu/cgi-bin/donatus-rpc") - - txt=txt2.encode('utf-8') - bin=xmlrpclib.Binary(txt) - - - - ret=server.donatus.analyze(bin) - - - return ret['morphData'].data - - -def donatusVariant2Lemma(morphData): - """creates hash variant -> morphdata""" - ret={} - dom=xml.dom.minidom.parseString(morphData) - lemmas=dom.getElementsByTagName('lemma') - for lemma in lemmas: - variants=lemma.getElementsByTagName('variant') - for variant in variants: - atr=variant.getAttribute('form') - if ret.has_key(atr): - ret[atr].append=lemma.getAttribute('form') - else: - ret[atr]=[lemma.getAttribute('form')] - - return ret - -#regexp for extracting elements from xml -patternTXT=r"<\s*txt.*?>(.*?)" -regexpTXT = re.compile(patternTXT, re.IGNORECASE + re.DOTALL) -patternPage=r"<\s*page.*?>(.*?)" -regexpPage = re.compile(patternPage, re.IGNORECASE + re.DOTALL) - - -def ECHO_rerenderLinksMD(self,obj=None,types=['title','label']): - """Rerender all Links""" - ret="" - - if not obj: - obj = self - entries=obj.ZopeFind(obj,obj_metatypes=['ECHO_resource'],search_sub=1) - for entry in entries: - if entry[1].meta_type == 'ECHO_resource': - try: - entry[1].ECHO_getResourceMD(template="no") - if "title" in types: - entry[1].generate_title() - if "label" in types: - entry[1].generate_label() - ret+="OK:"+entry[0]+"-- "+entry[1].getTitle().decode('utf-8')+"-- "+entry[1].getTitle().decode('utf-8')+"
" - except: - ret+="Error:"+entry[0]+"
" - - - - - return ""+ret+"Rerenderd all links to resources in: "+self.title+"" - -def reloadMetaDataFromStorage(self,RESPONSE=None): - """copy metadata from the storage to ECHO""" - ret="" - resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1) - - for resource in resources: - x=str(resource[1].copyIndex_meta2echo_resource())+"
" - ret+=x - #print x - - - if RESPONSE is not None: - #RESPONSE.redirect('./manage_main') - return ""+ret+"" - - return ret - -def getRDFDescription(self,linkURL,urn=None,nameDef=None,typeName=None): - """rdf""" - - ret="" - about="""""" - name="""%s""" - link="""%s""" - clickable="""%s""" - #link="""""" - type="""%s""" - #xlink="""""" - if not urn: - #urn="urn:"+re.sub('/',':',self.absolute_url()) - urn=self.absolute_url() - about2=about%urn - if not nameDef: - if hasattr(self,'label') and not (self.label==""): - name2=name%self.label - elif not self.title=="": - name2=name%self.title - else: - name2=name%self.getId() - - name2=re.sub('&','&',name2) - else: - name2=name%nameDef - - linkURL=re.sub('http:','',linkURL) - linkURL2=re.sub('&','&',linkURL) - link2=link%(("http:"+linkURL2),("http:"+urllib.quote(linkURL))) - clickable2=clickable%"true" - - if not typeName: - type2=type%self.meta_type - else: - type2=type%typeName - - #ret=about2+"\n"+name2+"\n"+link2+"\n"+type2+"\n"+clickable2+"\n" - ret=about2+"\n"+name2+"\n"+type2+"\n"+clickable2+"\n" - return ret - -def getCopyrightsFromForm(self,argv): - medias={} - partners={} - copyrights={} - - copyrightsFinal=[] - for arg in argv.keys(): - - if arg[0:5]=='media': - nm=int(arg[5:]) - medias[nm]=argv[arg] - elif arg[0:5]=='partn': - nm=int(arg[5:]) - partners[nm]=argv[arg] - elif arg[0:5]=='copyr': - nm=int(arg[5:]) - copyrights[nm]=argv[arg] - - - - copyrightsList=[(medias[nm],partners[nm],copyrights[nm]) for nm in medias.keys()] - for copyright in copyrightsList: - - if copyright[2]=='institution0000': - copyrightsFinal.append((copyright[0],copyright[1],self.getPartnerCopyright(copyright[1],''))) - else: - if not copyright[0]=='': - copyrightsFinal.append(copyright) - - - return copyrightsFinal - -#List of different types for the graphical linking viewer -viewClassificationListMaster=['view point','area'] - - -def checkDiffs(self,metadict): - """check differences""" - - - - - def NoneToEmpty(obj): - if obj: - return obj - else: - return "" - - - - diffs={} - - tags=self.findTagsFromMapping(self.contentType) - self.referencetypes=tags[2] - self.fields=tags[3] - - - for field in tags[1]: - try: - if (NoneToEmpty(self.getFieldValue(self.getFieldTag(tags,field)))==metadict[self.getFieldTag(tags,field)]): - diffs[self.getFieldTag(tags,field)]=1 - else: - - diffs[self.getFieldTag(tags,field)]=0 - except: - diffs[self.getFieldTag(tags,field)]=0 - - return diffs - -def content_html(self,type): - """template fuer content""" - #templates = self.ZopeFind(self.aq_parent,obj_ids=[type+"_template"]) - # - #if templates: - # return templates[0][1]() - - if hasattr(self,type+"_template"): - obj=getattr(self,type+"_template") - return obj() - else: - pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_%s_template_standard.zpt'%type).__of__(self) - pt.content_type="text/html" - return pt() - -def toList(field): - """Einzelfeld in Liste umwandeln""" - if type(field)==StringType: - return [field] - else: - return field - - - -def getTextFromNode(nodename): - nodelist=nodename.childNodes - rc = "" - for node in nodelist: - if node.nodeType == node.TEXT_NODE: - rc = rc + node.data - return rc - -def sendFile(self, filename, type): - """sends an object or a local file (in the product) as response""" - paths = filename.split('/') - object = self - # look for an object called filename - for path in paths: - if hasattr(object, path): - object = getattr(object, path) - else: - object = None - break - if object: - # if the object exists then send it - return object.index_html(self.REQUEST.REQUEST, self.REQUEST.RESPONSE) - else: - # send a local file with the given content-type - fn = os.path.join(package_home(globals()), filename) - self.REQUEST.RESPONSE.setHeader("Content-Type", type) - self.REQUEST.RESPONSE.write(file(fn).read()) - return - -class BrowserCheck: - """check the browsers request to find out the browser type""" - - def __init__(self, zope): - self.ua = zope.REQUEST.get_header("HTTP_USER_AGENT") - self.isN4 = (string.find(self.ua, 'Mozilla/4.') > -1) and (string.find(self.ua, 'MSIE') < 0) - self.isIE = string.find(self.ua, 'MSIE') > -1 - self.nav = self.ua[string.find(self.ua, '('):] - ie = string.split(self.nav, "; ")[1] - if string.find(ie, "MSIE") > -1: - self.versIE = string.split(ie, " ")[1] - self.isMac = string.find(self.ua, 'Macintosh') > -1 - self.isWin = string.find(self.ua, 'Windows') > -1 - self.isIEWin = self.isIE and self.isWin - self.isIEMac = self.isIE and self.isMac - - - - -def writeMetadata(url,metadict,project=None,startpage=None,xslt=None,thumbtemplate=None,topbar=None,digiLibTemplate=None,xmlfrag=None,digiliburlprefix=None): - """Einlesen der Metadaten und und erstellen des geaenderten XML file""" - - def updateTextToolNode(tag,value): - #print dom,tag,value - metanode=dom.getElementsByTagName('texttool')[0] - try: - nodeOld=metanode.getElementsByTagName(tag) - except: - nodeOld=None - - if nodeOld: - metanode.removeChild(nodeOld[0]).unlink() - - node=dom.createElement(tag) - nodetext=dom.createTextNode(value) - node.appendChild(nodetext) - metanode.appendChild(node) - - if xmlfrag: - geturl=""" - - - - - - """ - dom=xml.dom.minidom.parseString(geturl) - else: - 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) - except: - return (None,"Cannot parse: "+url+"
"+geturl) - - - - metanodes=dom.getElementsByTagName('bib') - - if not metanodes: - metanodes=dom.getElementsByTagName('archimedes') - - metanode=metanodes[0] - - for metaData in metadict.keys(): - - try: - nodeOld=metanode.getElementsByTagName(metaData) - except: - nodeOld=None - - if nodeOld: - metanode.removeChild(nodeOld[0]).unlink() - else: - # try also old writing rule - instead of _: - try: - nodeOld=metanode.getElementsByTagName(re.sub('_','-',metaData)) - except: - nodeOld=None - - if nodeOld: - metanode.removeChild(nodeOld[0]).unlink() - - metanodeneu=dom.createElement(metaData) - metanodetext=dom.createTextNode(metadict[metaData]) - #try: - #metanodetext=dom.createTextNode(unicode(metadict[metaData],"utf-8")) - #except: - #metanodetext=dom.createTextNode(metadict[metaData].encode('utf-8')) - metanodeneu.appendChild(metanodetext) - metanode.appendChild(metanodeneu) - - - - - - if project: - updateTextToolNode('project',project) - - if startpage: - updateTextToolNode('startpage',startpage) - - if topbar: - updateTextToolNode('toptemplate',topbar) - - if thumbtemplate: - updateTextToolNode('thumbtemplate',thumbtemplate) - - if xslt: - updateTextToolNode('xslt',xslt) - - - if digiliburlprefix: - updateTextToolNode('digiliburlprefix',digiliburlprefix) - - try: - return dom.toxml().encode('utf-8') - except: - return dom.toxml('utf-8') - - - -def readMetadata(url): - """Methode zum Auslesen der Metadateninformation zu einer Resource - Vorerst noch Typ bib""" - - metadict={} - 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) - except: - return (None,"Cannot parse: "+url+"
"+geturl) - - metanode=dom.getElementsByTagName('bib') - metadict['bib_type']='Book' - if len(metanode)==0: - metanode=dom.getElementsByTagName('archimedes') - metadict['bib_type']='Archimedes' - - - if not len(metanode)==0: - metacontent=metanode[0].childNodes - - try: - metadict['bib_type']=getText(dom.getElementsByTagName('bib')[0].attributes['type'].childNodes) - except: - """nothing""" - - for node in metacontent: - try: - #print urllib.unquote(getText(node.childNodes)),getText(node.childNodes) - metadict[re.sub('-','_',node.tagName.lower())]=urllib.unquote(getText(node.childNodes)) - except: - """nothing""" - - - return metadict,"" - - -def setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordstrs,viewClassification=""): +def setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordstrs=""): """Allegemeine Informationen zu einer ECHO Collection""" - self.viewClassification=viewClassification - self.label = label self.title=title self.description=description @@ -489,80 +83,112 @@ def setECHO_collectionInformation(self,t self.credits=toList(credits) self.weight=weight - coords=[] - #coordinates of for rectangles +class ECHO_locale(ZopePageTemplate): + """localisierung""" + 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) + + 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() + +def manage_addECHO_locale(self,lang,title,label,text=None,content_type=None,RESPONSE=None): + """add echo locale""" + + id="locale_"+lang - if coordstrs: - for coordstr in coordstrs: + 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" - try: - temco=coordstr.split(",") - except: - temco=[] - coords.append(temco) - + + def __init__(self,id,title,copyrights): + """init""" + self.title=title + self.id=id + self.copyrights=copyrights[0:] - self.coords=coords[0:] - -class ECHO_copyright(Folder): - """Copyright informationen""" - meta_type="ECHO_copyright" - - - - def __init__(self,id,title,copyrights): - """init""" - self.title=title - self.id=id - self.copyrights=copyrights[0:] - - def getCopyrights(self): - """return coyprights""" - return self.copyrights - - manage_options = Folder.manage_options+( - {'label':'Main Config','action':'ECHO_copyright_configForm'}, - ) - - - def ECHO_copyright_configForm(self): - """change form""" - pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_copyright').__of__(self) - pt.content_type="text/html" - return pt() - - def ECHO_copyright_config(self,title,RESPONSE=None): - """change""" - self.title=title - self.copyrights=[] - self.copyrights=getCopyrightsFromForm(self,self.REQUEST.form)[0:] + 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') + if RESPONSE is not None: + RESPONSE.redirect('manage_main') - + def manage_addECHO_copyrightForm(self): """Form for adding""" - pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_copyright.zpt').__of__(self) + 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') - -class ECHO_layoutTemplate(ZopePageTemplate): + self._setObject(id, ECHO_copyright(id, title,getCopyrightsFromForm(self,self.REQUEST.form))) + + if RESPONSE is not None: + RESPONSE.redirect('manage_main') + +class ECHO_layoutTemplate(ZopePageTemplate,ECHO_basis): """Create a layout Template for different purposes""" meta_type="ECHO_layoutTemplate" @@ -570,26 +196,18 @@ class ECHO_layoutTemplate(ZopePageTempla def __init__(self, id, text=None, content_type=None,EchoType=None): self.id = str(id) - - self.ZBindings_edit(self._default_bindings) if text is None: - self._default_content_fn = os.path.join(package_home(globals()), - 'zpt/ECHO_%s_template_standard.zpt'%EchoType) + self._default_content_fn = os.path.join(package_home(globals()),'zpt','ECHO_%s_template_standard.zpt'%EchoType) text = open(self._default_content_fn).read() self.pt_edit(text, content_type) - - """change form""" - def manage_addECHO_layoutTemplateForm(self): """Form for adding""" - pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt/AddECHO_layoutTemplate.zpt')).__of__(self) + pt=zptFile(self, 'zpt/AddECHO_layoutTemplate.zpt') return pt() -from urllib import quote - def manage_addECHO_layoutTemplate(self, EchoType,title=None,REQUEST=None): "Add a Page Template with optional file content." @@ -630,141 +248,24 @@ def manage_addECHO_layoutTemplate(self, REQUEST.RESPONSE.redirect(u+'/manage_main') return '' -class ECHO_fullText(ZopePageTemplate): - """echo fulltext in xml""" +class ECHO_fullText(ZopePageTemplate,ECHO_basis,ECHO_language): + """echo fulltext in xml""" - meta_type="ECHO_fullText" + meta_type="ECHO_fullText" - def donatusVariant2Lemma(self,nr='1'): - """analyze by donatus""" - return donatusVariant2Lemma(donatus(self.lemmatize(nr))) - - def tagLex(self,nr="1"): - """generate Links""" - global retLex - global toggle - - toggle=0 - retLex="" - - lemmatized=self.lemmatize(nr)[0:] - #print "ho",repr(lemmatized) - variants=donatusVariant2Lemma(donatus(lemmatized)) - - def createTag(name,attrs): - global toggle - - if name=="w": - toggle=1 - return "" - else: - tag="<" - tag+=name - for attr in attrs.keys(): - tag+=""" %s="%s" """%(attr,attrs[attr]) - tag+=">" - return tag - - def createData(data): - global toggle - astring="""%s """ - if toggle: # tag war ein w - toggle=0 - if variants.has_key(data): - return astring%(variants[data][0],data) - else: - return astring%(data,data) - - - - # 3 handler functions - def start_element(name, attrs): - global retLex - - retLex+=createTag(name,attrs) - def end_element(name): - global retLex - if not name=="w": - retLex+=""%(name.encode('utf-8')) - - - def char_data(data): - global retLex - if data: - try: - retLex+=createData(data) - except: - """no""" - - p = xml.parsers.expat.ParserCreate() - - p.StartElementHandler = start_element - p.EndElementHandler = end_element - p.CharacterDataHandler = char_data - - p.Parse(lemmatized.encode('utf-8'),1) - #print repr(lemmatized.encode('utf-8')) - - return retLex - - - def lemmatize(self,nr='1',lang="de"): - """lemmatize""" - global ret - ret="" - - def createTag(name,attrs): - tag="<" - tag+=name - for attr in attrs.keys(): - tag+=""" %s="%s" """%(attr,attrs[attr]) - tag+=">" - return tag - - def insertW(str): - splitted=str.split() - wordlist=["%s"%split for split in splitted] - return string.join(wordlist,'\n') - - # 3 handler functions - def start_element(name, attrs): - global ret - ret+=createTag(name,attrs) - def end_element(name): - global ret - ret+=""%(name.encode('utf-8')) - - def char_data(data): - global ret - ret+=insertW(data) - - p = xml.parsers.expat.ParserCreate() - - p.StartElementHandler = start_element - p.EndElementHandler = end_element - p.CharacterDataHandler = char_data - - p.Parse(self.getPage(nr), 1) - txt=""" -
%s
-
""" - ret=txt%(lang,ret) - - return ret - - def getPage(self,nr='1'): - """get page n""" - dom=xml.dom.minidom.parseString(self()) - pages=dom.getElementsByTagName('page') - - return pages[int(nr)-1].toxml('utf-8') - + + 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()) -from urllib import quote - def manage_addECHO_fullText(self, id, title=None, text=None, REQUEST=None, submit=None): "Add a Page Template with optional file content." @@ -792,303 +293,375 @@ def manage_addECHO_fullText(self, id, ti u = REQUEST['URL1'] if submit == " Add and Edit ": - u = "%s/%s" % (u, quote(id)) + u = "%s/%s" % (u, urllib.quote(id)) REQUEST.RESPONSE.redirect(u+'/manage_main') return '' -class ECHO_resource(Folder,Persistent): + +class ECHO_resource(CatalogAware,Folder,Persistent,ECHO_basis): """ECHO Ressource""" security=ClassSecurityInfo() meta_type='ECHO_resource' + default_catalog='resourceCatalog' + +# viewClassificationList=viewClassificationListMaster - viewClassificationList=viewClassificationListMaster + def PrincipiaSearchSource(self): + """Return cataloguable key for ourselves.""" + return str(self) getSubCols = ECHO_helpers.getSubCols - security.declareProtected('View','index_html') + 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) + - def showRDF(self): - """showrdf""" - self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml') - ret="""\n\n""" - ret+=self.getRDF(urn="echo:colllectionroot")+"\n" + 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) + + tmpPath=tempfile.mkdtemp(dir=tempdir) + + + tmpZip=tempfile.mktemp(dir=tempdir) + + tmpFn=os.path.split(tmpZip)[1] + + + + + if RESPONSE: + RESPONSE.setHeader("Content-Type","text/html") + RESPONSE.write("

I am creating the pdf

") + txt="

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

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

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

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

Click here for download ( %i Byte)

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

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

+

%s?fn=%s\n"""%(tmpFn,downloadUrl,tmpFn)) + RESPONSE.close() + + + def downloadPDF(self,fn): + """download prepared set""" + filename="/tmp/archivesImageServer/"+fn + namePDF=self.getId()+".pdf" + self.REQUEST.RESPONSE.setHeader("Content-Disposition","""attachement; filename="%s" """%namePDF) + self.REQUEST.RESPONSE.setHeader("Content-Type","application/octet-stream") + len=os.stat(filename)[6] + self.REQUEST.RESPONSE.setHeader("Content-Length",len) + images=file(filename).read() + self.REQUEST.RESPONSE.write(images) + self.REQUEST.RESPONSE.close() - ret+="""""" - return ret def getRDF(self,urn=None): - """rdf""" - ret=getRDFDescription(self,self.link,urn=urn) - return ret+self.createSubElementRDF(urn=urn) - - - def createSubElementRDF(self,urn=None): - """rdf list""" - if not urn: - urn=self.absolute_url() - ret="" - - rettemp="""\n"""%urn - flag=0 - - li="""\n""" - if not ('' in self.getFullTextXML(noredirect='Yes')): - nurn=self.absolute_url()+'/getFullTextXML' - rettemp+=li%nurn - flag=1 - if not ('' in self.getImageView(noredirect='Yes')): - nurn=self.absolute_url()+'/getImageView' - rettemp+=li%nurn - flag=1 - - - if not ('' in self.showMetaDataXML()): - nurn=self.absolute_url()+'/showMetaDataXML' - rettemp+=li%nurn - flag=1 - - rettemp+="" - - if flag==1: - ret+=rettemp - - if not ('' in self.getFullTextXML(noredirect='Yes')): - nurn=self.absolute_url()+'/getFullTextXML' - ret+=getRDFDescription(self,self.absolute_url()+'/getFullTextXML',urn=nurn,nameDef="Fulltext",typeName="ECHO_fulltext") - - if not ('' in self.getImageView(noredirect='Yes')): - nurn=self.absolute_url()+'/getImageView' - ret+=getRDFDescription(self,self.absolute_url()+'/getImageView',urn=nurn,nameDef="Image View",typeName="ECHO_imageview") - - if not ('' in self.showMetaDataXML()): - nurn=self.absolute_url()+'/showMetaDataXML' - ret+=getRDFDescription(self,self.absolute_url()+'/showMetaDataXML',urn=nurn,nameDef="Metadata",typeName="ECHO_metaData") + """rdf""" + ret=getRDFDescription(self,self.link,urn=urn) + return ret+self.createSubElementRDF(urn=urn) - return ret - + 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 - try: - geturl="" - for line in ECHO_helpers.urlopen(url).readlines(): - geturl=geturl+line - - - except: - return (None,"Cannot open: "+url) - - try: - dom=xml.dom.minidom.parseString(geturl) - root=dom.getElementsByTagName('resource')[0] - except: - return (None,"Cannot parse: "+url+"
"+geturl) - - internal=dom.getElementsByTagName('internal') - if internal: - institution=dom.getElementsByTagName('institution') - return getText(institution[0].childNodes) - - free=dom.getElementsByTagName('free') - if free: - return "free" - return "free" #default free + except: + return (None,"Cannot open: "+url) + + try: + dom=xml.dom.minidom.parseString(geturl) + root=dom.getElementsByTagName('resource')[0] + except: + return (None,"Cannot parse: "+url+"
"+geturl) + + internal=dom.getElementsByTagName('internal') + if internal: + institution=dom.getElementsByTagName('institution') + return getText(institution[0].childNodes) + + free=dom.getElementsByTagName('free') + if free: + return "free" + + return "free" #default free def changeAccessRightMD(self,accessright,RESPONSE=None): - """change the rights""" - - params="accessright=%s"%accessright + """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') - - 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) + try: + geturl="" + for line in ECHO_helpers.urlopen(url).readlines(): + geturl=geturl+line - return dom.toxml().encode('utf-8') + + except: + return (None,"Cannot open: "+url) + + try: + dom=xml.dom.minidom.parseString(geturl) + root=dom.getElementsByTagName('resource')[0] + except: + return (None,"Cannot parse: "+url+"
"+geturl) + + metanodes=dom.getElementsByTagName('access-conditions') + + if not metanodes: + nodenew=dom.createElement('access-conditions') + root.appendChild(nodenew) + metanode=nodenew + else: + metanode=metanodes[0] + + accesses=metanode.getElementsByTagName('access') + + if not accesses: + nodenew2=dom.createElement('access') + metanode.appendChild(nodenew2) + metanode2=nodenew2 + else: + metanode2=accesses[0] + + internal=metanode.getElementsByTagName('internal') + + if internal: + metanode2.removeChild(internal[0]).unlink() + + free=metanode.getElementsByTagName('free') + + if free: + metanode2.removeChild(internal[0]).unlink() + + + if accessright=='free': + nodenew3=dom.createElement('free') + metanode2.appendChild(nodenew3) + elif accessright=='mpiwg': + nodenew3=dom.createElement('internal') + nodenew4=dom.createElement('institution') + metanodetext=dom.createTextNode('mpiwg') + nodenew4.appendChild(metanodetext) + nodenew3.appendChild(nodenew4) + metanode2.appendChild(nodenew3) + + return dom.toxml().encode('utf-8') def setStartPageForm(self): - """Form for changing the startpage""" + """Form for changing the startpage""" - - pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resourceStartPage.zpt').__of__(self) + + pt=zptFile(self, 'zpt/ChangeECHO_resourceStartPage.zpt') pt.content_type="text/html" return pt() def createImageUrl(self,pn=1): - """create ImageUrl""" - - resourcepath=readFieldFromXML(self.metalink,'resource','archive-path').replace('/mpiwg/online','') - - digiliburlprefix=readFieldFromXML(self.metalink,'texttool','digiliburlprefix') - images=readFieldFromXML(self.metalink,'texttool','image') - - if not digiliburlprefix: digiliburlprefix="http://echo.mpiwg-berlin.mpg.de/zogilib?" + """create ImageUrl""" + + + resourcepath=readFieldFromXML(self.metalink,'resource','archive-path') + + digiliburlprefix=readFieldFromXML(self.metalink,'texttool','digiliburlprefix') + images=readFieldFromXML(self.metalink,'texttool','image') + - if (not images) or (not resourcepath): return None + 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?" - return "%sfn=%s&pn=%i"%(digiliburlprefix,resourcepath+"/"+images,pn) + if (not images) or (not resourcepath): return None + + return "%sfn=%s&pn=%i"%(digiliburlprefix,resourcepath+"/"+images,pn) def copyTitleToInfoXML(self,RESPONSE=None): - """copy title from the resource""" - presentationXML=readFieldFromXML(self.metalink,'texttool','presentation') - resourcepath=readFieldFromXML(self.metalink,'resource','archive-path') - if (not presentationXML) or (not resourcepath): - if RESPONSE: - RESPONSE.write("Error: %s"%self.getId()) - else: - return None,self.getId() - - print os.path.join(resourcepath,presentationXML) - fh=file(os.path.join(resourcepath,presentationXML),'w') - fh.write(""" - - %s - - yes - """%self.title) - fh.close() - return 1,self.getId() - + """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=PageTemplateFile('Products/ECHO_content/zpt/changeResourceViewerTemplateSet').__of__(self) + """change the viewer template set""" + pt=zptFile(self, 'zpt/changeResourceViewerTemplateSet') return pt() @@ -1112,185 +685,177 @@ class ECHO_resource(Folder,Persistent): 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') - def getTitle(self): - """title""" - try: - return self.title.encode('utf-8','ignore') - except: - self.title=self.title.decode('iso-8859-1','ignore')[0:] #correnct conding error - return self.title.encode('utf-8','ignore') - - def getLabel(self): - """title""" - try: - return self.label.encode('utf-8','ignore') - except: - self.label=self.label.decode('iso-8859-1','ignore')[0:] #correnct conding error - return self.label.encode('utf-8','ignore') - + + security.declarePublic('content_html') def content_html(self): """template fuer content""" - return content_html(self,'resource') + return ECHO_basis.content_html(self,'resource') - def getViewClassification(self): - if hasattr(self,'viewClassification'): - return self.viewClassification - else: - return "" +# def getViewClassification(self): +# if hasattr(self,'viewClassification'): +# return self.viewClassification +# else: +# return "" def getFullTextXML(self,noredirect=None): - """getFullTextXML; gives the FullText as an XML Document, and if somthing goes wrong.""" + """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" + + def getImagePath(self): + """gibt pfad zum image aus""" + return self.getImageView(noredirect="yes",onlyPath="yes") + + def getImageView(self,noredirect=None,onlyPath=None): + """getImages; give Imageviewr and if somthing goes wrong.""" + try: + fh=ECHO_helpers.urlopen(self.metalink) + dom=xml.dom.minidom.parse(fh) + texttools=dom.getElementsByTagName('texttool') + text=texttools[0].getElementsByTagName('image') + imagetemp=getText(text[0].childNodes) + + text=dom.getElementsByTagName('archive-path') + archivepath=getText(text[0].childNodes) + archivepath=re.sub('/mpiwg/online/','',archivepath) + imageurl="http://echo.mpiwg-berlin.mpg.de/zogilib?fn="+archivepath+"/"+imagetemp + fh.close() + + if not noredirect: + self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml') + self.REQUEST.RESPONSE.redirect(imageurl) + else: + if not onlyPath: + return imageurl + else: + return archivepath+"/"+imagetemp + except: - if not noredirect: - self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml') - 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 getImageView(self,noredirect=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: - return imageurl - except: - - if not noredirect: - self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml') - self.REQUEST.RESPONSE.write("no fulltext available") - else: - return "no images available" + 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 fšrdernden 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""" @@ -1298,6 +863,8 @@ class ECHO_resource(Folder,Persistent): return self.credits else: return [] + + def __init__(self,id,link,metalink,resourceID,title,label,description,contentType,renderingType,copyrightType,responsible,credits,weight,coords): @@ -1312,47 +879,38 @@ class ECHO_resource(Folder,Persistent): 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="" - def getCoords(self): - """gibt coordinaten als String zurück und löscht zugleich einträge die keine Koordinaten sind, letzteres zur korrektur der Eingabe der alten version""" - retList=[] - if hasattr(self,'coords'): - for x in self.coords: - if len(x)>1: - retList.append(string.join(x,",")) - return retList - - def getContentType(self): - try: - return self.contentType - except: - return "" + 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""" @@ -1360,60 +918,54 @@ class ECHO_resource(Folder,Persistent): if not hasattr(self,'weight'): self.weight="" - pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resource.zpt').__of__(self) + pt=zptFile(self, 'zpt/ChangeECHO_resource.zpt') return pt() def ECHO_resource_config_main(self): """Main configuration""" - if not hasattr(self,'weight'): self.weight="" - - pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resource_main.zpt').__of__(self) + pt=zptFile(self, 'zpt/ChangeECHO_resource_main.zpt') return pt() def ECHO_resource_config_coords(self): """Coords configuration """ - - pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resource_coords.zpt').__of__(self) + pt=zptFile(self, 'zpt/ChangeECHO_resource_coords.zpt') return pt() def ECHO_resource_config_credits(self): """Main configuration""" - - pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resource_credits.zpt').__of__(self) + pt=zptFile(self, 'zpt/ChangeECHO_resource_credits.zpt') return pt() def ECHO_resource_config_metadata(self): """Main configuration""" + if (hasattr(self,'metadata')) and not (hasattr(self,'metaDataHash')): + self.metaDataHash={} + self.contentType=self.bib_type + for data in self.metadata: + data_neu=re.sub('-','_',data) + self.metaDataHash[data_neu]=getattr(self,data)[0:] - if (hasattr(self,'metadata')) and not (hasattr(self,'metaDataHash')): - self.metaDataHash={} - self.contentType=self.bib_type - for data in self.metadata: - data_neu=re.sub('-','_',data) - self.meta - DataHash[data_neu]=getattr(self,data)[0:] - - - pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resource_metadata.zpt').__of__(self) + + pt=zptFile(self, 'zpt/ChangeECHO_resource_metadata.zpt') return pt() def changeECHO_resource_main(self,metalink,link,title,label,description,contentType,renderingType,weight,resourceID,RESPONSE=None): - """Änderung der Properties""" - self.resourceID=resourceID - self.title=title - self.label=label - self.description=description - - self.contentType=contentType - self.renderingType=renderingType - self.weight=weight - + """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.link=link self.metalink=metalink @@ -1421,102 +973,168 @@ class ECHO_resource(Folder,Persistent): RESPONSE.redirect('manage_main') - def changeECHO_resource_coords(self,coords,viewClassification,RESPONSE=None): - """Änderung der Properties - coords""" - - if type(coords)==StringType: - coords=[coords] - - try: - coordsnew=[ string.split(x,",") for x in coords] - except: - coordsnew=[] - - self.coords=coordsnew[0:] - self.viewClassification=viewClassification - + 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') + def changeECHO_resource_credits(self,credits,responsible,copyrightType,RESPONSE=None): - """Änderung der Properties""" - self.credits=credits - self.responsible=responsible - self.copyrightType=copyrightType + """Aenderung der Properties""" + self.credits=credits + self.responsible=responsible + self.copyrightType=copyrightType if RESPONSE is not None: RESPONSE.redirect('manage_main') def changeECHO_resource_metadata_local(self,RESPONSE=None): - """change metadata""" - tags=self.findTagsFromMapping(self.contentType) - for field in tags[1]: - self.metaDataHash[self.getFieldTag(tags,field)]=self.REQUEST.form[self.getFieldTag(tags,field)][0:] - - - - if RESPONSE is not None: - RESPONSE.redirect('manage_main') + """change metadata""" + tags=self.findTagsFromMapping(self.contentType) + for field in tags[1]: + self.metaDataHash[self.getFieldTag(tags,field)]=self.REQUEST.form[self.getFieldTag(tags,field)][0:] + + + + if RESPONSE is not None: + RESPONSE.redirect('manage_main') def changeECHO_resource_metadata(self,RESPONSE=None): - """change metadata""" - tags=self.findTagsFromMapping(self.contentType) - self.OSAS_meta={} - for field in tags[1]: - try: - self.metaDataHash[self.getFieldTag(tags,field)]=self.REQUEST.form[self.getFieldTag(tags,field)] - self.OSAS_meta[self.getFieldTag(tags,field)]=self.REQUEST.form['OSAS_%s'%self.getFieldTag(tags,field)] - except: - """nothing""" - - ECHO_helpers.urlopen('http://xserve02.mpiwg-berlin.mpg.de:18880/echo_nav/storage/downloadExternalXML?index_meta_url=%s&xml_url=%s'%(self.metalink,self.absolute_url()+'/newMetaXML')).read() - - - if RESPONSE is not None: - RESPONSE.redirect('manage_main') - - - def getMDValue(self,fieldName): - return self.metaDataHash.get(fieldName,'!!NOT USED HERE in Type: %s'%self.contentType) - + """change metadata""" + tags=self.findTagsFromMapping(self.contentType) + self.OSAS_meta={} + for field in tags[1]: + try: + self.metaDataHash[self.getFieldTag(tags,field)]=self.REQUEST.form[self.getFieldTag(tags,field)] + self.OSAS_meta[self.getFieldTag(tags,field)]=self.REQUEST.form['OSAS_%s'%self.getFieldTag(tags,field)] + except: + """nothing""" + + ECHO_helpers.urlopen('http://xserve02.mpiwg-berlin.mpg.de:18880/echo_nav/storage/downloadExternalXML?index_meta_url=%s&xml_url=%s'%(self.metalink,self.absolute_url()+'/newMetaXML')).read() + + + if RESPONSE is not None: + RESPONSE.redirect('manage_main') + + + + + def getMDValue(self,fieldNameTest,empty=None,generic=None): + """get md values""" + #TODO: cache mappinghash + + fieldName=None + if generic: + ct=self.contentType.replace(" ","_").lower() + + #caching + if not hasattr(self,'_v_mapHash'): #noch keine cachevariable + self._v_mapHash={} + + tmp=self._v_mapHash.get(ct,None) + if tmp: #teste ob type schon existiert + fieldName=tmp.get(fieldNameTest,None) + else: + self._v_mapHash[ct]={} + + #noch nicht gecached + if not fieldName and hasattr(self.standardMD,ct): + fieldName=getattr(self.standardMD,ct).generateMappingHash()[fieldNameTest][0] + self._v_mapHash[ct][fieldNameTest]=fieldName + if not fieldName: + fieldName=fieldNameTest + if not empty: + #FIXME: warum gibt es manchmal kein metadatahas + try: + return self.metaDataHash.get(fieldName,'!!NOT USED HERE in Type: %s'%self.contentType) + except: + zLOG.LOG("ECHO (line 1069)",zLOG.ERROR,"no md hash for %s"%self.getId()) + return "" + + else: + + return self.metaDataHash.get(fieldNameTest,empty) + + getFieldValue=getMDValue #depricated + 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 getMetaDataXML(self,project=None,startpage=None,xslt=None,thumbtemplate=None,topbar=None,digiLibTemplate=None): - """prints out metadata as stored in the echo environment, format is the index.meta format""" - self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml') - return writeMetadata(self.metalink,self.metaDataHash) + def 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 - def changeECHO_resource(self,metalink,link,title,label,description,contentType,responsible,weight,viewClassification="",coords=None,credits=None,RESPONSE=None): - """Änderung der Properties""" + 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 - try: - coordsnew=[ string.split(x,",") for x in coords] - except: - coordsnew=[] + def getMetaDataXML(self,project=None,startpage=None,xslt=None,thumbtemplate=None,topbar=None,digiLibTemplate=None): + """prints out metadata as stored in the echo environment, format is the index.meta format""" + self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml') + return writeMetadata(self.metalink,self.metaDataHash) + + def changeECHO_resource(self,metalink,link,title,label,description,contentType,responsible,weight,coords=None,credits=None,RESPONSE=None): + """Aenderung der Properties""" - setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordsnew) - self.viewClassification=viewClassification - self.coords=coordsnew[0:] + setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight) self.link=link self.metalink=metalink @@ -1526,50 +1144,23 @@ class ECHO_resource(Folder,Persistent): manage_options = Folder.manage_options+( {'label':'Main Config','action':'ECHO_resource_config_main'}, - {'label':'Change Metadata','action':'ECHO_resource_config_metadata'}, - {'label':'Change Coords','action':'ECHO_resource_config_coords'}, - {'label':'Add coords','action':'ECHO_graphicEntry'}, + {'label':'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'}, - ) - - def getOverview(self): - """overview graphics""" - - return self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['overview'])[0][1] - - def ECHO_graphicEntry(self): - """DO nothing""" - overview = self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['overview']) - if overview: - pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_draw.zpt').__of__(self) - return pt() - else: - return "NO OVERVIEW GRAPHICS" - - def ECHO_enterCoords(self,coordstr,angle="",RESPONSE=None): - """Enter coords""" - coords=self.coords - temco=coordstr.split(",") - temco.append(angle) - coords.append(temco) - - self.coords=coords[0:] - - if RESPONSE is not None: - RESPONSE.redirect('ECHO_graphicEntry') + {'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: @@ -1595,67 +1186,58 @@ class ECHO_resource(Folder,Persistent): return field - - def getFieldValue(self,field): - """get value""" - - try: - - ret=self.metaDataHash[field] - if ret == "": - return None - else: - return ret - except: - return None def getMetaDataHash(self): - """md hash""" - return self.metaDataHash + """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:] - + #TODO: remove setFieldValue + + 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.getMDValue(field,generic="yes")) 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 - - for referenceTypeF in self.referencetypes: - if referenceTypeF[1].title.lower() == referenceType.lower(): - - try: - bibdata[referenceTypeF[1].title]=referenceTypeF[1].fields - referenceType=referenceTypeF[1].title - except: - bibdata[referenceType]=referenceTypeF[1].fields - + tags=self.findTagsFromMapping(self.contentType) + self.referencetypes=tags[2] + for referenceTypeF in self.referencetypes: + + if referenceTypeF[1].title.lower() == referenceType.lower(): + + try: + bibdata[referenceTypeF[1].title]=referenceTypeF[1].fields + referenceType=referenceTypeF[1].title + except: + bibdata[referenceType]=referenceTypeF[1].fields + - bibdata['data']=referenceTypeF[1] - fields=bibdata[referenceType] + bibdata['data']=referenceTypeF[1] + fields=bibdata[referenceType] for field in fieldlist: retdata[field]=referenceTypeF[1].getValue(field)[1] @@ -1663,71 +1245,71 @@ class ECHO_resource(Folder,Persistent): 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') - - def ECHO_getResourceMD(self,template="yes",back=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') + + return "OK:",self.absolute_url(),self.contentType + + def ECHO_getResourceMD(self,template="yes",back=None,overwrite="no"): """Einlesen der Metadaten und Anlegen dieser Metadaten als Informationen zur Resource""" (metadict, error)=readMetadata(self.metalink) @@ -1735,66 +1317,86 @@ class ECHO_resource(Folder,Persistent): self.REQUEST.SESSION['back']=back if not error=="": #Fehler beim Auslesen des Metafiles - return "ERROR:",error - - - if not (metadict['bib_type'].lower()==self.contentType.lower()): - self.REQUEST.SESSION['contentStorage']=metadict['bib_type'] - self.REQUEST.SESSION['contentZope']=self.contentType + return "ERROR:",error + + if (not self.contentType) or (overwrite=="yes"): + 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 PageTemplateFile('Products/ECHO_content/zpt/ECHO_getResourceMDErrorContentType.zpt').__of__(self)() + return zptFile(self, 'zpt/ECHO_getResourceMDErrorContentType.zpt')() - self.REQUEST.SESSION['metadict']=metadict + self.REQUEST.SESSION['metadict']=metadict - - - self.REQUEST.SESSION['diffs']=checkDiffs(self,self.REQUEST.SESSION['metadict']) - + + + self.REQUEST.SESSION['diffs']=checkDiffs(self,self.REQUEST.SESSION['metadict']) + - + if template=="yes": - pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_resourceMD.zpt').__of__(self) - return pt() + pt=zptFile(self, 'zpt/ECHO_resourceMD.zpt') + return pt() - + def ECHO_getMD(self,item): """Ausgabe der MD""" return getattr(self,item) - + + def checkRDF(self,path): + """check if pdf in the path""" + try: + for fileName in os.listdir(path): + if os.path.splitext(fileName)[1]==".pdf": + return os.path.join(path,fileName) + return None + except: + return None + + + 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 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]() - #prüfen ob irgendwo ein template - if hasattr(self,'startpage_index_template'): - return self.startpage_index_template() + #pruefen ob irgendwo ein template + if hasattr(self,'startpage_index_template'): + return self.startpage_index_template() - #generisches template ausgeben - - pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_startpage_index_template_standard.zpt').__of__(self) - pt.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 @@ -1803,7 +1405,7 @@ class ECHO_resource(Folder,Persistent): """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 @@ -1812,21 +1414,21 @@ class ECHO_resource(Folder,Persistent): """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) def manage_addECHO_resourceForm(self): """Form for adding a ressource""" - pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_resourceForm.zpt').__of__(self) + pt=zptFile(self, 'zpt/AddECHO_resourceForm.zpt') return pt() -def manage_addECHO_resource(self,id,title,label,description,responsible,link,metalink,weight,copyrightType=None,resourceID=None,contentType=None,renderingType=None,credits=None,coords=None,RESPONSE=None): - """addaresource""" +def manage_addECHO_resource(self,id,title,label,description="",responsible="",link="",metalink="",weight="",copyrightType=None,resourceID=None,contentType=None,renderingType=None,credits=None,coords=None,RESPONSE=None): + """addresource""" newObj=ECHO_resource(id,link,metalink,resourceID,title,label,description,contentType,renderingType,copyrightType,responsible,credits,weight,coords) @@ -1836,30 +1438,27 @@ def manage_addECHO_resource(self,id,titl RESPONSE.redirect('manage_main') -class ECHO_externalLink(Folder): +class ECHO_externalLink(Folder,ECHO_basis): """Link zu einer externen Ressource""" security=ClassSecurityInfo() meta_type='ECHO_externalLink' - def getTitle(self): - """title""" - try: - return self.title.encode('utf-8','ignore') - except: - self.title=self.title.decode('iso-8859-1','ignore')[0:] #correnct conding error - return self.title.encode('utf-8','ignore') - - def getLabel(self): - """title""" - try: - return self.label.encode('utf-8','ignore') - except: - self.label=self.label.decode('iso-8859-1','ignore')[0:] #correnct conding error - return self.label.encode('utf-8','ignore') - + security.declarePublic('content_html') def content_html(self): """template fuer content""" - return content_html(self,'externalLink') + ret= ECHO_basis.content_html(self,'externalLink') + + try: + print "a" + return ret.decode('utf-8') + + except: + try: + print "b" + return ret.decode('latin-1') + except: + print "c" + return ret def __init__(self,id,link,title,label,description,contentType,responsible,credits,weight,coords): @@ -1887,21 +1486,14 @@ class ECHO_externalLink(Folder): self.coords=[''] - pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_externalLink.zpt').__of__(self) + pt=zptFile(self, 'zpt/ChangeECHO_externalLink.zpt') return pt() def changeECHO_externalLink(self,link,title,label,description,contentType,responsible,weight,coords=None,credits=None,RESPONSE=None): + """Aenderung der Properties""" + setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight) - """Änderung der Properties""" - try: - coordsnew=[ string.split(x,",") for x in coords] - except: - coordsnew=[] - - setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coords) - - self.coords=coordsnew[0:] self.link=link if RESPONSE is not None: RESPONSE.redirect('manage_main') @@ -1909,6 +1501,7 @@ class ECHO_externalLink(Folder): manage_options = Folder.manage_options+( {'label':'Main Config','action':'ECHO_externalLink_config'}, + {'label':'Graphic Coords','action':'ECHO_graphicEntry'}, ) @@ -1919,7 +1512,7 @@ class ECHO_externalLink(Folder): def manage_addECHO_externalLinkForm(self): """Form for external Links""" - pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_externalLinkForm.zpt').__of__(self) + pt=zptFile(self, 'zpt/AddECHO_externalLinkForm.zpt') return pt() @@ -1935,205 +1528,330 @@ def manage_addECHO_externalLink(self,id, class ECHO_link(ECHO_externalLink): - """external_link""" + """external_link""" + + meta_type="ECHO_link" + + manage_options = ECHO_externalLink.manage_options+( + {'label':'add links config','action':'ECHO_link_addLinksForm'}, + ) + + def ECHO_link_addLinksForm(self): + """Main configuration""" + + pt=zptFile(self, 'zpt/ChangeECHO_link_addLinks.zpt') + return pt() + + def ECHO_link_addLinks(self,addLinks,RESPONSE): + """add links""" + self.addLinks=addLinks + if RESPONSE is not None: + RESPONSE.redirect('manage_main') + + def content_html(self): + """template fuer link""" + + + if hasattr(self,"link_template"): + ret=ECHO_basis.content_html(self,'link') + + else: + ret=ECHO_basis.content_html(self,'collection') + + + #return ret + return ret +# +# +# try: +# return ret.decode('utf-8') +# except: +# try: +# return ret.decode('latin-1') +# except: +# +# return ret +# - 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] + + + else: + params={} + + if getattr(self,'addLinks','yes')=="yes": + 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 content_html(self): - """template fuer link""" - if hasattr(self,"link_template"): - return content_html(self,'link') - else: - return content_html(self,'collection') - def manage_addECHO_linkForm(self): """Form for external Links""" - pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_linkForm.zpt').__of__(self) + pt=zptFile(self, 'zpt/AddECHO_linkForm.zpt') return pt() -def manage_addECHO_link(self,id,title,label,description,contentType,responsible,link,weight,coords=None,credits=None,RESPONSE=None): +def manage_addECHO_link(self,id,title,label,description="",contentType="",responsible="",link="",weight="",coords=[],credits=None,RESPONSE=None): """Add an external Link""" newObj=ECHO_link(id,link,title,label,description,contentType,responsible,credits,weight,coords) self._setObject(id,newObj) - + + getattr(self,id).addLinks='no' + if RESPONSE is not None: RESPONSE.redirect('manage_main') - + -class ECHO_collection(Folder, Persistent, Implicit, Cacheable): +class ECHO_collection(Folder, Persistent, Implicit, Cacheable,ECHO_basis): """ECHO Collection""" security=ClassSecurityInfo() meta_type='ECHO_collection' - viewClassificationList=viewClassificationListMaster +# viewClassificationList=viewClassificationListMaster displayTypes=displayTypes path="/mpiwg/online/permanent/shipbuilding" + def getTitleAndLabel(self): + """gibt title und label zurueck""" + return (getattr(self,'title',''),getattr(self,'label','')) + + def localizeObjects(self): + """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() + + + 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') + + 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 showRDF(self): - """showrdf""" - self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml') - ret="""\n\n""" - ret+=self.getRDF(urn="echo:collectionroot")+"\n" + """rdf of the collection""" + + contents=self.ZopeFind(self,obj_metatypes=['ECHO_group','ECHO_resource','ECHO_collection']) - ret+="""""" - - return ret + ret=getRDFDescription(self,self.absolute_url(),urn=urn) + + if not urn: + urn=self.absolute_url() + + li="""\n""" + + for content in contents: + ret+=content[1].getRDF()+"\n" + + ret+="""\n"""%urn + for content in contents: + nurn=content[1].absolute_url() + ret+=li%nurn + return ret+"" + def changeLabels(self): - """change form""" - pt=PageTemplateFile('Products/ECHO_content/zpt/changeLabelsForm').__of__(self) - pt.content_type="text/html" - return pt() + """change form""" + pt=zptFile(self, 'zpt/changeLabelsForm') + pt.content_type="text/html" + return pt() def changeTitles(self): - """change form""" - pt=PageTemplateFile('Products/ECHO_content/zpt/changeTitleForm').__of__(self) - pt.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=PageTemplateFile('Products/ECHO_content/zpt/changeWeightForm').__of__(self) - 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=PageTemplateFile('Products/ECHO_content/zpt/changeMetaDataLinkForm').__of__(self) - 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: - """not""" - 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: - """not""" - 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: - """not""" - 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_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: - """not""" - 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_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_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: - """not""" - 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()]+"
" + resource[1].label=argv[resource[1].getId()][0:] + 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') @@ -2153,33 +1871,33 @@ class ECHO_collection(Folder, Persistent def changeViewerTemplateSetsForm(self): - """change the viewer template set""" - pt=PageTemplateFile('Products/ECHO_content/zpt/changeViewerTemplateSet').__of__(self) + """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): - """is ausgewählt""" + """is ausgewaehlt""" if self.REQUEST['viewerTemplateSet']==id: return 1 @@ -2187,154 +1905,139 @@ 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=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resourceStartPageFolder.zpt').__of__(self) + + 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','ECHO_collection']) + """copy title into the title field of info.xml + author and date werden leer!!! + """ - for resource in resources: - if resource[1].meta_type=="ECHO_collection": - - resource[1].copyTitleToInfoXMLFolder(RESPONSE) - else: - ret,txt=resource[1].copyTitleToInfoXML() - if (not ret) and RESPONSE: - RESPONSE.write("error: %s\n"%txt) + 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",zLOG.INFO,txt) - if RESPONSE is not None: - RESPONSE.redirect('manage_main') - + 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'],search_sub=1) - 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=PageTemplateFile('Products/ECHO_content/zpt/reloadMetaDataFromStorageWarning.zpt').__of__(self) + """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) 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): """GetTag""" try: @@ -2342,6 +2045,23 @@ class ECHO_collection(Folder, Persistent except: return "" + + 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) + + return "changed" + def addResource(self,id,title,label,description,contentType,responsible,link,metalink,weight,credits=None,coords=None,RESPONSE=None): """SSS""" try: @@ -2364,130 +2084,38 @@ class ECHO_collection(Folder, Persistent except: return "" - def getCollectionTreeXML(self): + def getCollectionTreeXML(self,pwstr=None): """Tree as XML""" - def addPassWd(str): - """adds a user/passwd to an url""" - txt2=re.sub(r"(http://)(.*?)","\g<1>www:3333@\g<2>",str) - return txt2 + def 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): + def getCollection(object,depth=0,pwstr=None): depth+=1 collections="" for entry in object.__dict__.keys(): element=getattr(object,entry) try: if element.meta_type in ["ECHO_collection","ECHO_group"]: - collections+="" + collections+="" collections+=getCollection(element,depth)+"\n" except: """nothing""" return collections - ret="""""" - return ret+""+getCollection(self)+"" + ret="""""" + return ret+""+getCollection(self,pwstr=pwstr)+"" - def createJavaScript(self): - """OLD CreateJava""" - ret=javaScriptMain - - dynamical="\n" - for ob in self.getGraphicCoords(): - if ob[4][4] == "": - dynamical+="""Coords.push(new Coord('%s', Img, %s));\n"""%(ob[1],ob[0]) - else: - dynamical+="""Coords.push(new Coord('%s', Img, %s));//%s\n"""%(ob[1],ob[0],ob[4][4]) - dynamical+="ShowArrow(new getObj('i.%s'),Img,%s);\n"%(ob[1],ob[0]) - ret+=javaHandler%dynamical - return ret - - def createJSAreas(self): + def createAllJSAreas(self): """create area calls for JavaScript""" - dynamical="\n" - for ob in self.getGraphicCoords(): - if ob[5] == "area": - dynamical+="""addArea('%s', 'overview', %s, 'area');\n"""%(ob[1],ob[0]) - else: - dynamical+="""addArea('%s', 'overview', %s, 'arrow');\n"""%(ob[1],ob[0]) - return dynamical - - def createMapHead(self): - """create javascript include and script tags for head""" - pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt/ECHO_content_map_frag_js')).__of__(self) - return pt() - - def createMapImg(self): - """generate img-tag for map""" - bt = BrowserCheck(self) - tag = "" - src = self.REQUEST['URL1'] + "/overview" - if bt.isN4: - tag += ''%src - else: - tag += ''%src - return tag - - def createMapLink(self, ob, text=None): - """generate map link""" - bt = BrowserCheck(self) - id = ob[1] - link = ob[1] - if text == None: - text = ob[2] - tag = "" - if bt.isN4: - tag += '" - else: - tag = '" - return tag - - def createMapAux(self, ob, arrowsrc="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?dw=15&fn=icons/pfeil"): - """generate map link image, text and other stuff""" - id = ob[1] - link = ob[1] - vtype = ob[5] - ctype = ob[3].contentType - bt = BrowserCheck(self) - tag = "" - - if bt.isN4: - tag += ''%(id,id,id) - if vtype == "view point": - rot = ob[4][4] - tag += ''%(link,arrowsrc,rot) - else: - tag += ''%(id,id,id,link) - if vtype == "view point": - rot = ob[4][4] - if bt.isIEWin and bt.versIE > 5: - tag += ''%(id,arrowsrc,rot,arrowsrc,rot) - else: - tag += ''%(id,arrowsrc,rot) - else: - if bt.isIEWin: - tag += '
3: - coord=coordtemp[0:4] - label="" - vc="" - if hasattr(object,'label') and not object.label=="": - label=object.label - elif hasattr(object,'title') and not object.title=="": - label=object.title - else: - label=object.getId() - if object.viewClassification != "": - vc=object.viewClassification - else: - if len(coordtemp) > 4 and coordtemp[4] != "": - vc="view point" - else: - vc="area" - ids.append([string.join(coord,", "),object.getId(),label,object,coordtemp,vc]) - return ids - + def hl_add_js(self): + """javascript""" + return sendFile(self, 'js/hl_add.js', 'text/plain') + def getAllMapAreas(self,mapColTypes=['ECHO_collection','ECHO_resource','ECHO_link','ECHO_externalLink']): + """Give list of coordinates""" + + areas=[] + for entry in self.getSubCols(subColTypes=mapColTypes): + object=entry + areas.extend(object.getMapAreas()) + return areas + + + def deleteMapAreas(self): + """deletes all map areas from this object""" + for obs in self.ZopeFind(self, obj_metatypes=['MapArea'], search_sub=1): + ob = obs[1] + id = ob.id + parent = ob.aq_parent + print "deleting: ", ob.id + parent._delObject(id) + return "Done" getSubCols = ECHO_helpers.getSubCols @@ -2777,11 +2360,11 @@ Globals.InitializeClass(ECHO_collection) def manage_addECHO_collectionForm(self): """Add collection form""" - pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_collectionForm.zpt').__of__(self) + pt=zptFile(self, 'zpt/AddECHO_collectionForm.zpt') return pt() -def manage_addECHO_collection(self,id,title,label,description,contentType,responsible,weight,sortfield,coords="",secondaryLinkTitle="",secondaryLink="",credits=None,RESPONSE=None,imageTag="",bgcolour=""): +def manage_addECHO_collection(self,id,title,label,description="",contentType="",responsible="",weight=0,sortfield="weight",coords="",secondaryLinkTitle="",secondaryLink="",credits=None,RESPONSE=None,imageTag="",bgcolour=""): """add a echo collection""" @@ -2793,127 +2376,112 @@ 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':'Graphics','action':'ECHO_graphicEntry'}, - ) - - security.declareProtected('View','index_html') + """ECHO Gruppe""" + security=ClassSecurityInfo() + meta_type="ECHO_group" - def showRDF(self): - """showrdf""" - self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml') - ret="""\n\n""" - ret+=self.getRDF(urn="echo:collectionroot")+"\n" + 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') - ret+="""""" - - return ret - - def getRDF(self,urn=None): - """rdf of the collection""" - contents=self.ZopeFind(self,obj_metatypes=['ECHO_group','ECHO_resource','ECHO_collection']) - - ret=getRDFDescription(self,self.absolute_url(),urn=urn) - - - if not urn: - urn=self.absolute_url() - li="""\n""" - - - for content in contents: - ret+=content[1].getRDF()+"\n" - - ret+="""\n"""%urn - for content in contents: - nurn=content[1].absolute_url() - ret+=li%nurn - return ret+"" - - def index_html(self): - """standard page""" - displayedObjects=self.ZopeFind(self,obj_metatypes=displayTypes) - #if (len(displayedObjects)==1) and (displayedObjects[0][1].meta_type=="ECHO_collection"): # nur ein Object dann redirect auf dieses Object - # return self.REQUEST.RESPONSE.redirect(displayedObjects[0][1].absolute_url()) - - if 'index.html' in self.__dict__.keys(): - return getattr(self,'index.html')() - - elif 'overview' in self.__dict__.keys(): - return self.showOverview() - elif hasattr(self,'group_index_template'): - return self.group_index_template() - elif hasattr(self,'collection_index_template'): - return self.collection_index_template() - elif hasattr(self,'main_index_template'): - return self.main_index_template() - - pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_main_index_template_standard.zpt').__of__(self) - pt.content_type="text/html" - return pt() - - def ECHO_group_config(self): - """Main configuration""" - - if not hasattr(self,'weight'): - self.weight="" - - if not hasattr(self,'sortfield'): - self.sortfield="weight" - - if not hasattr(self,'coords'): - self.coords=[] - - pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_group.zpt').__of__(self) - return pt() - - def changeECHO_group(self,title,label,description,contentType,responsible,weight,secondaryLink,secondaryLinkTitle,credits=None,sortfield="weight",coords=None,RESPONSE=None,imageTag="",bgcolour="",logo=""): - """Änderung der Properties""" - - self.secondaryLink=secondaryLink - self.secondaryLinkTitle=secondaryLinkTitle - self.imageTag=imageTag - self.bgcolour=bgcolour - self.logo=logo + + 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 coords: - coordsnew=[ string.split(x,",") for x in coords] - self.coords=coordsnew[0:] - else: - coordsnew=None - self.coords=None + 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() - setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordsnew) + 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) - 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" - def content_html(self): - """template fuer content""" - return content_html(self,'group') + security.declarePublic('content_html') + def content_html(self): + """template fuer content""" + return ECHO_basis.content_html(self,'group') def manage_addECHO_groupForm(self): """Add group form""" - pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_groupForm.zpt').__of__(self) + pt=zptFile(self, 'zpt/AddECHO_groupForm.zpt') return pt() @@ -2933,96 +2501,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) @@ -3042,41 +2610,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): @@ -3085,209 +2653,305 @@ class ECHO_root(Folder,Persistent,Implic security=ClassSecurityInfo() meta_type="ECHO_root" + + + def findObjectFromFulltext(self,existUri): + ''' + + @param url: + @param existUri: + ''' + + if existUri: + #TODO: at the moment assume that the filename is unique, the whole has to changed to a system of ids. + filename=existUri.split("/")[-1] + + founds=self.resourceCatalog.search({'fullTextUrl':os.path.splitext(filename)[0]}) + + ret=[(found.title,found.getObject().absolute_url(),found.getObject().aq_parent.absolute_url()) for found in founds] + + return ret + + 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] + print txt[2].getImageTag() + print "HO" + return txt[2].getImageTag() + + def printer2(self,txt): + print txt + + + def item2(self,txt): + return txt[2] + + def setLanguage(self,lang): + """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']) + def getLanguage(self): + """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 + + def mapstyle_css(self): + """send mapstyle.css""" + sendFile(self, 'html/ECHO_mapstyle.css', 'text/css') + - ###CDLI adds -> have to be removed + ###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) + + + 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] + 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=PageTemplateFile('Products/ECHO_content/zpt/generateFromRDFForm').__of__(self) - 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: - 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" + seqs[key]=[] - - return "done" + + elif name=="RDF:Description": + key=attrs.get('RDF:about') + + + elif name=="RDF:li": + name=attrs.get('RDF:resource') + seqs[key].append(name) + + elif name=="ECHONAVIGATION:type": + value="type" + + elif name=="ECHONAVIGATION:name": + value="name" + elif name=="ECHONAVIGATION:linkClickable": + value="linkClickable" + + def end_element(name): + """nothing""" + key="" + value="" + + def char_data(data): + """nothing""" + + data=re.sub("\n","",data) + try: + if descrs[key].has_key(value): + descrs[key][value]+=data + else: + descrs[key][value]=data + except: + + descrs[key]={} + descrs[key][value]=data + + p = xml.parsers.expat.ParserCreate() + + p.StartElementHandler = start_element + p.EndElementHandler = end_element + p.CharacterDataHandler = char_data + + + p.ParseFile(file) + self.REQUEST.RESPONSE.write("

Start

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

done

") + #print "done" + + + return "done" - + - + def changeWeightsInCollection(self): - """change all lables of a collection""" - ret="" - argv=self.REQUEST.form - - resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource','ECHO_collection','ECHO_link','ECHO_externalLink']) - for resource in resources: - - try: - ret+=resource[1].getId()+" "+argv[resource[1].getId()]+"
" + """change all lables of a collection""" + ret="" + argv=self.REQUEST.form + + resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource','ECHO_collection','ECHO_link','ECHO_externalLink']) + for resource in resources: + + try: + ret+=resource[1].getId()+" "+argv[resource[1].getId()]+"
" resource[1].weight=argv[resource[1].getId()][0:] - except: - """not""" - return ret + except: + pass + return ret def changeWeights(self): - """change form""" - pt=PageTemplateFile('Products/ECHO_content/zpt/changeWeightForm').__of__(self) - 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 showRDF(self): - """showrdf""" - self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml') - ret="""\n\n""" - ret+=self.getRDF(urn="echo:collectionroot")+"\n" - - ret+="""""" - return ret - def reloadMetaDataFromStorageWarning(self,RESPONSE=None): - """warning""" - pt=PageTemplateFile('Products/ECHO_content/zpt/reloadMetaDataFromStorageWarning.zpt').__of__(self) + """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""" @@ -3296,34 +2960,37 @@ class ECHO_root(Folder,Persistent,Implic def getBibTag(self,tag,content): - """get field tag für index-meta-generation""" - if not content or content=="": - return "" - ret="<%s>"%tag - #ret+=urllib.quote(content) - ret+=content + """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): """give type selector""" if not selected: @@ -3338,120 +3005,103 @@ class ECHO_root(Folder,Persistent,Implic else: retStr+="""

%s

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

%s

"""%(echo_url,title) - - ret +="""\n""" - - #self.REQUEST.RESPONSE.setHeader("Content-Type", "text/html") - #self.REQUEST.RESPONSE.write(ret) - return ret + def sortHTML(x,y): + return cmp(x[1].title,y[1].title) + + ret="""

Resources in ECHO

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

Found %i resources

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

%s

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

%s

"""%(echo_url,title) + + ret +="""\n""" + + #self.REQUEST.RESPONSE.setHeader("Content-Type", "text/html") + #self.REQUEST.RESPONSE.write(ret) + return ret def getResourcesXML(self,viewerType=None,filter=None): - """gebe all ressourcen aus""" - ret=""" - """ - for resource in self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1): - - echo_url=resource[1].absolute_url() - if hasattr(resource[1],'link'): - viewer_url=resource[1].link - else: - viewer_url="NO URL" - if filter: - if re.search(filter,viewer_url): - ret+="""\n"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(viewer_url,safe='/:?')) - else: - ret+="""\n"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(viewer_url,safe='/:?')) - ret +="""\n""" - - self.REQUEST.RESPONSE.setHeader("Content-Type", "text/xml") - self.REQUEST.RESPONSE.write(ret) + """gebe all ressourcen aus""" + ret=""" + """ + for resource in self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1): + + echo_url=resource[1].absolute_url() + if hasattr(resource[1],'link'): + viewer_url=resource[1].link + else: + viewer_url="NO URL" + if filter: + if re.search(filter,viewer_url): + ret+="""\n"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(viewer_url,safe='/:?')) + else: + ret+="""\n"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(viewer_url,safe='/:?')) + ret +="""\n""" + + self.REQUEST.RESPONSE.setHeader("Content-Type", "text/xml") + self.REQUEST.RESPONSE.write(ret) def getFullTextsXML(self,viewerType=None,filter=None): - """gebe all ressourcen aus""" - ret=""" - """ - for resource in self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1): - - echo_url=resource[1].absolute_url() - if resource[1].getFullTextXML(noredirect="yes"): - if hasattr(resource[1],'link'): - viewer_url=echo_url+"/getFullTextXML" - else: - viewer_url="NO URL" - if filter: - if re.search(filter,viewer_url): - ret+="""\n"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(viewer_url,safe='/:?')) - else: - ret+="""\n"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(viewer_url,safe='/:?')) - ret +="""\n""" - - - self.REQUEST.RESPONSE.setHeader("Content-Type", "text/xml") - self.REQUEST.RESPONSE.write(ret) + """gebe all ressourcen aus""" + ret=""" + """ + for resource in self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1): + + echo_url=resource[1].absolute_url() + if resource[1].getFullTextXML(noredirect="yes"): + if hasattr(resource[1],'link'): + viewer_url=echo_url+"/getFullTextXML" + else: + viewer_url="NO URL" + if filter: + if re.search(filter,viewer_url): + ret+="""\n"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(viewer_url,safe='/:?')) + else: + ret+="""\n"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(viewer_url,safe='/:?')) + ret +="""\n""" + + + self.REQUEST.RESPONSE.setHeader("Content-Type", "text/xml") + self.REQUEST.RESPONSE.write(ret) def getMetaDatasXML(self,viewerType=None,filter=None): - """gebe all ressourcen aus""" - # check if the request's host part was OK - http_host = self.REQUEST['HTTP_HOST'] - host_port = self.REQUEST['SERVER_PORT'] - fix_host = None - if http_host and http_host.rfind(host_port) == -1: - print "HTTP_HOST needs fixing!" - fix_host = http_host + ":" + host_port - - ret=""" - """ - for resource in self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1): - - echo_url=resource[1].absolute_url() - if fix_host: - #print "replacing ", http_host, " by ", fix_host - echo_url = string.replace(echo_url, http_host, fix_host, 1) - - if hasattr(resource[1],'link'): - meta_url=echo_url+"/getMetaDataXML" - else: - meta_url="NO_URL" - - if filter and not re.search(filter,viewer_url): - continue - - #modificationDate=time.strptime(str(resource[1].bobobase_modification_time()),"%Y/%m/%d %H:%M:%S %Z") - - modificationDate=resource[1].bobobase_modification_time().strftime("%Y/%m/%d %H:%M:%S") - - ret+="""\n"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(meta_url,safe='/:?'),modificationDate) - - - ret +="""\n""" + """gebe all ressourcen aus""" + # check if the request's host part was OK + http_host = self.REQUEST['HTTP_HOST'] + host_port = self.REQUEST['SERVER_PORT'] + fix_host = None + if http_host and http_host.rfind(host_port) == -1: + print "HTTP_HOST needs fixing!" + fix_host = http_host + ":" + host_port + + ret=""" + """ + for resource in self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1): + + echo_url=resource[1].absolute_url() + if fix_host: + #print "replacing ", http_host, " by ", fix_host + echo_url = string.replace(echo_url, http_host, fix_host, 1) + + if hasattr(resource[1],'link'): + meta_url=echo_url+"/getMetaDataXML" + else: + meta_url="NO_URL" + + if filter and not re.search(filter,viewer_url): + continue + + #modificationDate=time.strptime(str(resource[1].bobobase_modification_time()),"%Y/%m/%d %H:%M:%S %Z") + + modificationDate=resource[1].bobobase_modification_time().strftime("%Y/%m/%d %H:%M:%S") - self.REQUEST.RESPONSE.setHeader("Content-Type", "text/xml") - self.REQUEST.RESPONSE.write(ret) + ret+="""\n"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(meta_url,safe='/:?'),modificationDate) + + + ret +="""\n""" + + self.REQUEST.RESPONSE.setHeader("Content-Type", "text/xml") + self.REQUEST.RESPONSE.write(ret) - - def findPartners(self): + + def findPartners(self): """find all partners in partners""" par=self.ZopeFind(self.partners, obj_metatypes='ECHO_partner') return par @@ -3874,43 +3454,43 @@ def manage_addECHO_root(self,id,title,RE def manage_addECHO_rootForm(self): """Nothing yet""" - pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_root.zpt').__of__(self) + pt=zptFile(self, 'zpt/AddECHO_root.zpt') return pt() -class ECHO_copyrightType(Folder): - """copyright typ""" +class ECHO_copyrightType(Folder,ECHO_basis): + """copyright typ""" - meta_type="ECHO_copyrightType" - - def __init__(self,id,title,label,url): - """init""" - self.id=id - self.title=title - self.label=label - self.url=url + meta_type="ECHO_copyrightType" + + def __init__(self,id,title,label,url): + """init""" + self.id=id + self.title=title + self.label=label + self.url=url - manage_options = Folder.manage_options+( + manage_options = Folder.manage_options+( {'label':'Main Config','action':'ECHO_copyrightType_config_mainForm'}, - ) + ) - def ECHO_copyrightType_config_mainForm(self): - """change form""" - pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_copyrightType').__of__(self) - pt.content_type="text/html" - return pt() - - def ECHO_copyrightType_config_main(self,title,label,url,RESPONSE=None): - """change""" - self.title=title - self.label=label - self.url=url + def ECHO_copyrightType_config_mainForm(self): + """change form""" + pt=zptFile(self, 'zpt/ChangeECHO_copyrightType') + pt.content_type="text/html" + return pt() + + def ECHO_copyrightType_config_main(self,title,label,url,RESPONSE=None): + """change""" + self.title=title + self.label=label + self.url=url - if RESPONSE is not None: - RESPONSE.redirect('manage_main') + if RESPONSE is not None: + RESPONSE.redirect('manage_main') def manage_addECHO_copyrightTypeForm(self): """Form for adding a ressource""" - pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_copyrightTypeForm.zpt').__of__(self) + pt=zptFile(self, 'zpt/AddECHO_copyrightTypeForm.zpt') return pt() @@ -3926,7 +3506,7 @@ def manage_addECHO_copyrightType(self,id -class ECHO_partner(Image,Persistent): +class ECHO_partner(Image,Persistent,ECHO_basis): """ECHO Partner""" meta_type="ECHO_partner" @@ -3967,7 +3547,7 @@ class ECHO_partner(Image,Persistent): """Main configuration""" if not hasattr(self,'url'): self.url="" - pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_partner.zpt').__of__(self) + pt=zptFile(self, 'zpt/ChangeECHO_partner.zpt') return pt() @@ -4010,7 +3590,7 @@ def manage_addECHO_partner(self, id, url REQUEST.RESPONSE.redirect('%s/manage_main' % url) return id -class ECHO_linkList(ZopePageTemplate): +class ECHO_linkList(ZopePageTemplate,ECHO_basis): """LinkList Objekt""" meta_type="ECHO_linkList" @@ -4021,12 +3601,12 @@ class ECHO_linkList(ZopePageTemplate): ) def content_html(self): - """content_html""" - return content_html(self,'pageTemplate') + """content_html""" + return ECHO_basis.content_html(self,'pageTemplate') def changeECHO_linkListWeightForm(self): """change""" - pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_linkListTemplate.zpt').__of__(self) + pt=zptFile(self, 'zpt/ChangeECHO_linkListTemplate.zpt') return pt() def changeECHO_linkListWeight(self,contentType,label,RESPONSE=None): @@ -4064,11 +3644,9 @@ class ECHO_linkList(ZopePageTemplate): def manage_addECHO_linkListForm(self): """Form for adding""" - pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_linkListTemplate.zpt').__of__(self) + pt=zptFile(self, 'zpt/AddECHO_linkListTemplate.zpt') return pt() -from urllib import quote - def manage_addECHO_linkList(self, id, label,contentType=0,title=None, text=None, REQUEST=None, submit=None): @@ -4101,66 +3679,66 @@ def manage_addECHO_linkList(self, id, la u = REQUEST['URL1'] if submit == " Add and Edit ": - u = "%s/%s" % (u, quote(id)) + u = "%s/%s" % (u, urllib.quote(id)) REQUEST.RESPONSE.redirect(u+'/manage_main') return '' -class ECHO_support(Folder): - """gefšrdert durch""" - meta_type="ECHO_support" - - - - def __init__(self,id,institutions=None): - """init""" - self.id=id - self.title='' - self.institutions=toList(institutions) - - def getSupporter(self): - """return institutions""" - if self.institutions: - return self.institutions - else: - return [] - - manage_options = Folder.manage_options+( - {'label':'Main Config','action':'ECHO_support_configForm'}, - ) - - def ECHO_support_configForm(self): - """change form""" - pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_support').__of__(self) - pt.content_type="text/html" - return pt() - - def ECHO_support_config(self,institutions=None,RESPONSE=None): - """change""" - self.institutions=toList(institutions) +class ECHO_support(Folder,ECHO_basis): + """gefoerdert durch""" + meta_type="ECHO_support" + + + + def __init__(self,id,institutions=None): + """init""" + self.id=id + self.title='' + self.institutions=toList(institutions) + + def getSupporter(self): + """return institutions""" + if self.institutions: + return self.institutions + else: + return [] + + manage_options = Folder.manage_options+( + {'label':'Main Config','action':'ECHO_support_configForm'}, + ) + + def ECHO_support_configForm(self): + """change form""" + pt=zptFile(self, 'zpt/ChangeECHO_support') + pt.content_type="text/html" + return pt() + + def ECHO_support_config(self,institutions=None,RESPONSE=None): + """change""" + self.institutions=toList(institutions) - if RESPONSE is not None: - RESPONSE.redirect('manage_main') + if RESPONSE is not None: + RESPONSE.redirect('manage_main') - + def manage_addECHO_supportForm(self): """Form for adding""" - pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_support.zpt').__of__(self) + pt=zptFile(self, 'zpt/AddECHO_support.zpt') return pt() def manage_addECHO_support(self, id,institutions=None,RESPONSE=None): - """add the copyright""" + """add the copyright""" - meta_type="ECHO_support" - - - self._setObject(id, ECHO_support(id,institutions)) - - if RESPONSE is not None: - RESPONSE.redirect('manage_main') - + meta_type="ECHO_support" + + + self._setObject(id, ECHO_support(id,institutions)) -class ECHO_institution(Image,Persistent): + if RESPONSE is not None: + RESPONSE.redirect('manage_main') + + +class ECHO_institution(Image,Persistent,ECHO_basis): """ECHO Institution""" meta_type="ECHO_institution" @@ -4197,7 +3775,7 @@ class ECHO_institution(Image,Persistent) """Main configuration""" if not hasattr(self,'url'): self.url="" - pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_institution.zpt').__of__(self) + pt=zptFile(self, 'zpt/ChangeECHO_institution.zpt') return pt() @@ -4239,3 +3817,43 @@ def manage_addECHO_institution(self, id, except: url=REQUEST['URL1'] REQUEST.RESPONSE.redirect('%s/manage_main' % url) return id + +def repairCoords(self): + """updates map coordinates to new MapArea objects""" + msg = "" + for cols in self.ZopeFind(self, obj_metatypes=['ECHO_collection','ECHO_resource'], search_sub=1): + col = cols[1] + if not hasattr(col, 'coords'): + continue + print "fixing: ", col.id + msg += "fixing: "+col.id+"\n" + coords = col.coords + if len(coords) > 0: + # delete old MapAreas + for areas in self.ZopeFind(col, obj_metatypes=['MapArea']): + #area = areas[1] + id = areas[0] + print " deleting: ", id + msg += " deleting: "+id+"\n" + col._delObject(id) + # add new MapAreas + areacnt = 0 + for coord in coords: + if len(coord) < 4: + continue + type = col.viewClassification + if type == 'view point': + type = 'arrow' + if type is None: + if len(coord) > 4: + type = 'arrow' + else: + type = 'area' + newid = "a%02d"%areacnt + areacnt += 1 + area = MapArea(newid, coord, type=type) + print " adding: ", newid + msg += " adding: "+newid+"\n" + col.addMapArea(area) + msg += "\nDone!" + return msg