version 1.82, 2007/05/03 14:23:46
|
version 1.101, 2009/04/21 08:12:58
|
Line 17 import ECHO_collection
|
Line 17 import ECHO_collection
|
import base64 |
import base64 |
import bz2 |
import bz2 |
import xmlrpclib |
import xmlrpclib |
|
import sys |
import logging |
import logging |
|
import amara |
|
|
#erstzt logging |
#erstzt logging |
def logger(txt,method,txt2): |
def logger(txt,method,txt2): |
"""logging""" |
"""logging""" |
logging.info(txt+ txt2) |
logging.info(txt+ txt2) |
|
|
displayTypes = ['ZSQLExtendFolder','ZSQLBibliography','ECHO_group','ECHO_collection','ECHO_resource','ECHO_link','ECHO_sqlElement','ECHO_pageTemplate','ECHO_externalLink','ImageCollectionIFrame','VLP_resource','VLP_essay','ECHO_ZCatalogElement','ImageCollection','versionedFileFolder','ECHO_movie'] |
displayTypes = ['ZSQLExtendFolder','ZSQLBibliography','ECHO_group','ECHO_collection','ECHO_resource','ECHO_link','ECHO_sqlElement','ECHO_pageTemplate','ECHO_externalLink','ImageCollectionIFrame','VLP_resource','VLP_essay','ECHO_ZCatalogElement','ImageCollection','versionedFileFolder','extVersionedFileFolder','ECHO_movie'] |
|
|
|
def normalizeCt(str): |
|
"""normalizes content_type""" |
|
#str= str.replace(" ","_") |
|
return str.replace("-"," ").lower() |
|
|
#decode and compress for xmlrpc communication with OSAS_server |
#decode and compress for xmlrpc communication with OSAS_server |
|
|
Line 35 def encodeRPC(string):
|
Line 40 def encodeRPC(string):
|
def decodeRPC(string): |
def decodeRPC(string): |
return bz2.decompress(base64.decodestring(string)) |
return bz2.decompress(base64.decodestring(string)) |
|
|
|
def unicodify(s): |
|
"""decode str (utf-8 or latin-1 representation) into unicode object""" |
|
if not s: |
|
return u"" |
|
if isinstance(s, str): |
|
try: |
|
return s.decode('utf-8') |
|
except: |
|
return s.decode('latin-1') |
|
else: |
|
return s |
|
|
|
def utf8ify(s): |
|
"""encode unicode object or string into byte string in utf-8 representation. |
|
assumes string objects to be utf-8""" |
|
if not s: |
|
return "" |
|
if isinstance(s, str): |
|
return s |
|
else: |
|
return s.encode('utf-8') |
|
|
|
|
def content_html(self,type): |
def content_html(self,type): |
"""template fuer content""" |
"""template fuer content""" |
#templates = self.ZopeFind(self.aq_parent,obj_ids=[type+"_template"]) |
#templates = self.ZopeFind(self.aq_parent,obj_ids=[type+"_template"]) |
Line 43 def content_html(self,type):
|
Line 71 def content_html(self,type):
|
# return templates[0][1]() |
# return templates[0][1]() |
|
|
if hasattr(self,type+"_template"): |
if hasattr(self,type+"_template"): |
logging.info("type: %s"%type) |
|
obj=getattr(self,type+"_template") |
obj=getattr(self,type+"_template") |
return obj() |
return obj() |
else: |
else: |
Line 61 class ECHO_basis:
|
Line 89 class ECHO_basis:
|
management_page_charset="utf-8" |
management_page_charset="utf-8" |
isVisible = True |
isVisible = True |
|
|
|
# Managment for the PID |
|
def setPID(self,pid): |
|
"""set the pid""" |
|
logging.debug(self.getID()+" PID set to "+pid) |
|
self.pid=pid |
|
return True |
|
|
|
def getPID(self): |
|
"""get the pid""" |
|
|
|
pid =getattr(self,'pid',None) |
|
|
|
if pid == self.getParentPID(): |
|
return None |
|
else: |
|
return pid |
|
|
|
|
|
def getParentPID(self): |
|
"""get the PID of the parent""" |
|
parent = self.aq_parent |
|
|
|
pidF = getattr(parent,'getPID',None) |
|
|
|
if pidF is None: |
|
return None |
|
|
|
else: |
|
return pidF() |
|
|
|
def unicodify(self, s): |
|
"""return unicode object for string (utf-8 or latin1) or unicode object s""" |
|
return unicodify(s) |
|
|
|
# compatibility of old decode method |
|
decode = unicodify |
|
|
|
|
|
def utf8ify(self, s): |
|
"""return utf-8 encoded string object for string or unicode object s""" |
|
return utf8ify(s) |
|
|
|
|
def manage_addECHO_locale(self,lang,title,label,text=None,content_type=None,RESPONSE=None): |
def manage_addECHO_locale(self,lang,title,label,text=None,content_type=None,RESPONSE=None): |
return ECHO_collection.manage_addECHO_locale(self,lang,title,label) |
return ECHO_collection.manage_addECHO_locale(self,lang,title,label) |
|
|
Line 72 class ECHO_basis:
|
Line 143 class ECHO_basis:
|
def showRDF(self): |
def showRDF(self): |
"""showrdf""" |
"""showrdf""" |
self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml') |
self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml') |
ret="""<?xml version="1.0" encoding="utf-8"?>\n<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:ECHONAVIGATION="http://www.echo.eu/rdf#">\n""" |
ret="""<?xml version="1.0" encoding="utf-8"?>\n<rdf:rdf xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:ECHONAVIGATION="http://www.echo.eu/rdf#" |
|
xmlns:MPIWG="http://www.mpiwg-berlin.mpg.de/ns/mpiwg">\n""" |
|
|
ret+=self.getRDF(urn="echo:collectionroot")+"\n" |
ret+=self.getRDF(urn="echo:collectionroot")+"\n" |
|
|
|
|
ret+="""</RDF:RDF>""" |
ret+="""</rdf:rdf>""" |
return ret |
return ret |
|
|
|
|
def RDF(self): |
def RDF(self): |
"""showrdf""" |
"""showrdf""" |
self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml') |
self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml') |
ret="""<?xml version="1.0" encoding="utf-8"?>\n<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:ECHONAVIGATION="http://www.echo.eu/rdf#">\n""" |
ret="""<?xml version="1.0" encoding="utf-8"?>\n<rdf:rdf xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:ECHONAVIGATION="http://www.echo.eu/rdf#">\n""" |
|
|
ret+=self.getRDF(urn=self.absolute_url())+"\n" |
ret+=self.getRDF(urn=self.absolute_url())+"\n" |
|
|
|
|
ret+="""</RDF:RDF>""" |
ret+="""</rdf:rdf>""" |
return ret |
return ret |
|
|
|
|
Line 99 class ECHO_basis:
|
Line 171 class ECHO_basis:
|
urn=self.absolute_url() |
urn=self.absolute_url() |
ret="" |
ret="" |
|
|
rettemp="""<RDF:Seq RDF:about="%s">\n"""%urn |
rettemp="""<rdf:Seq rdf:about="%s">\n"""%urn |
flag=0 |
flag=0 |
|
|
li="""<RDF:li RDF:resource="%s" />\n""" |
li="""<rdf:li rdf:resource="%s" />\n""" |
if not ('<error>' in self.getFullTextXML(noredirect='Yes')): |
if not ('<error>' in self.getFullTextXML(noredirect='Yes')): |
nurn=self.absolute_url()+'/getFullTextXML' |
nurn=self.absolute_url()+'/getFullTextXML' |
rettemp+=li%nurn |
rettemp+=li%nurn |
Line 118 class ECHO_basis:
|
Line 190 class ECHO_basis:
|
rettemp+=li%nurn |
rettemp+=li%nurn |
flag=1 |
flag=1 |
|
|
rettemp+="</RDF:Seq>" |
rettemp+="</rdf:Seq>" |
|
|
if flag==1: |
if flag==1: |
ret+=rettemp |
ret+=rettemp |
Line 135 class ECHO_basis:
|
Line 207 class ECHO_basis:
|
nurn=self.absolute_url()+'/showMetaDataXML' |
nurn=self.absolute_url()+'/showMetaDataXML' |
ret+=getRDFDescription(self,self.absolute_url()+'/showMetaDataXML',urn=nurn,nameDef="Metadata",typeName="ECHO_metaData") |
ret+=getRDFDescription(self,self.absolute_url()+'/showMetaDataXML',urn=nurn,nameDef="Metadata",typeName="ECHO_metaData") |
|
|
return ret |
|
|
|
|
return ret |
def content_html_XMLRpc(self): |
def content_html_XMLRpc(self): |
"""xml_rpc_version""" |
"""xml_rpc_version""" |
return encodeRPC(self.content_html()) |
return encodeRPC(self.content_html()) |
Line 170 class ECHO_basis:
|
Line 242 class ECHO_basis:
|
return self.isVisible |
return self.isVisible |
return True |
return True |
|
|
|
def getDescription(self): |
|
"""get content of description field""" |
|
|
|
|
|
return self.unicodify(getattr(self,'description','')); |
|
|
def getTitle(self): |
def getTitle(self): |
"""title""" |
"""title""" |
if hasattr(self,'getLanguage'): |
if hasattr(self,'getLanguage'): |
Line 382 class ECHO_basis:
|
Line 460 class ECHO_basis:
|
"""generate map link""" |
"""generate map link""" |
bt = BrowserCheck(self) |
bt = BrowserCheck(self) |
id = ob.getFullId() |
id = ob.getFullId() |
link = ob.getLinkId() |
url = ob.getTargetUrl() |
|
if url == "": |
|
# ECHOResource with empty link -> no link |
|
href = 'href="#" onclick="return false;"' |
|
else: |
|
href = 'href="%s"'%ob.getLinkId() |
|
|
|
if target is None: |
|
targetattr = "" |
|
else: |
|
targetattr = 'target="%s"'%target |
|
|
if text is None: |
if text is None: |
text = ob.getLabel() |
text = ob.getLabel() |
|
|
if text is None: |
if text is None: |
text = "link" |
text = "link" |
|
|
tiptext = ob.getTip() |
tiptext = ob.getTip() |
tag = "" |
tag = "" |
if bt.isN4: |
if bt.isN4: |
# N4 needs layer for highlighting |
# N4 needs layer for highlighting |
tag += '<ilayer id="a.%s"><a class="maplink" onmouseover="highlightPair(\'%s\', true)" onmouseout="highlightPair(\'%s\', false)" href="%s" target="%s"'%(id,id,id,link,target) |
tag += '<ilayer id="a.%s"><a class="maplink" onmouseover="highlightPair(\'%s\', true)" onmouseout="highlightPair(\'%s\', false)" %s %s'%(id,id,id,href,targetattr) |
tag += ">" + text + "</a></ilayer>" |
tag += ">" + text + "</a></ilayer>" |
else: |
else: |
# a-element |
# a-element |
tag = '<a id="a.%s" class="maplink" onmouseover="highlightPair(\'%s\', true)" onmouseout="highlightPair(\'%s\', false)" href="%s" target="%s"'%(id,id,id,link,target) |
tag = '<a id="a.%s" class="maplink" onmouseover="highlightPair(\'%s\', true)" onmouseout="highlightPair(\'%s\', false)" %s %s'%(id,id,id,href,targetattr) |
if tiptext: |
if tiptext: |
tag += ' title="%s"'%tiptext |
tag += ' title="%s"'%tiptext |
tag += ">" + text + "</a>" |
tag += ">" + text + "</a>" |
Line 406 class ECHO_basis:
|
Line 497 class ECHO_basis:
|
bt = BrowserCheck(self) |
bt = BrowserCheck(self) |
id = ob.getFullId() |
id = ob.getFullId() |
link = ob.getLinkId() |
link = ob.getLinkId() |
|
url = ob.getTargetUrl() |
|
if url == "": |
|
# ECHOResource with empty link -> no link |
|
href = 'href="#" onclick="return false;"' |
|
else: |
|
href = 'href="%s"'%ob.getLinkId() |
|
|
|
if target is None: |
|
targetattr = "" |
|
else: |
|
targetattr = 'target="%s"'%target |
tiptext = ob.getTip() |
tiptext = ob.getTip() |
tag = "" |
tag = "" |
|
|
Line 431 class ECHO_basis:
|
Line 533 class ECHO_basis:
|
|
|
if float(rot) < 0: |
if float(rot) < 0: |
marksrc = circlesrc |
marksrc = circlesrc |
tag += '<a href="%s"><img border="0" src="%s&rot=%s" /></a>'%(link,marksrc,rot) |
tag += '<a %s><img border="0" src="%s&rot=%s" /></a>'%(href,marksrc,rot) |
elif ob.isTypeText(): |
elif ob.isTypeText(): |
# N4 - Text |
# N4 - Text |
tag += '<div id="t.%s" class="maptext"'%(id) |
tag += '<div id="t.%s" class="maptext"'%(id) |
Line 440 class ECHO_basis:
|
Line 542 class ECHO_basis:
|
tag += '</div>' |
tag += '</div>' |
else: |
else: |
# N4 - Area |
# N4 - Area |
tag += '<a href="%s"><img border="0" width="1000" height="1000" src="trans_img"'%(link) |
tag += '<a %s><img border="0" width="1000" height="1000" src="trans_img"'%(href) |
if tiptext: |
if tiptext: |
tag += ' alt="%s"'%tiptext |
tag += ' alt="%s"'%tiptext |
tag += ' /></a>' |
tag += ' /></a>' |
Line 449 class ECHO_basis:
|
Line 551 class ECHO_basis:
|
# |
# |
# (more or less) DOM capable browser |
# (more or less) DOM capable browser |
# |
# |
tag = '<a id="b.%s" class="mapmarklink" onmouseover="highlightPair(\'%s\', true)" onmouseout="highlightPair(\'%s\', false)" href="%s" target="%s">'%(id,id,id,link,target) |
tag = '<a id="b.%s" class="mapmarklink" onmouseover="highlightPair(\'%s\', true)" onmouseout="highlightPair(\'%s\', false)" %s %s>'%(id,id,id,href,targetattr) |
if ob.isTypeArrow(): |
if ob.isTypeArrow(): |
# DOM - Arrow |
# DOM - Arrow |
rot = ob.angle |
rot = ob.angle |
Line 552 def readFieldFromXML(meta_url,parent,fie
|
Line 654 def readFieldFromXML(meta_url,parent,fie
|
|
|
return getText(field[0].childNodes) |
return getText(field[0].childNodes) |
|
|
|
def readFieldFromXML_xpath(meta_url,xpath): |
|
"""xpath auf meta_url""" |
|
#logging.debug("try to parse:"+meta_url) |
|
#logging.debug("Xtry to parse xpath:"+xpath) |
|
doc = amara.parse(meta_url) |
|
#logging.debug("have:"+doc.xml()) |
|
node= doc.xml_xpath(xpath) |
|
if node is None: |
|
return None |
|
|
|
return unicode(node[0]) |
|
|
def urlopen(url): |
def urlopen(url): |
"""urlopen mit timeout""" |
"""urlopen mit timeout""" |
Line 591 def getSubCols(self, sortfield=None,
|
Line 703 def getSubCols(self, sortfield=None,
|
isVisible=True): |
isVisible=True): |
|
|
def sort(x,y): |
def sort(x,y): |
|
try: |
|
if type(x[0])==type(y[0]): |
return cmp(x[0],y[0]) |
return cmp(x[0],y[0]) |
|
else: |
|
if type(x[0])==types.StringType: |
|
tmpX=unicodify(x[0]) |
|
tmpY=y[0] |
|
else: |
|
tmpY=unicodify(y[0]) |
|
tmpX=x[0] |
|
return cmp(tmpX,tmpY) |
|
|
|
except: |
|
logging.error("Error at ECHO_helpers.sort:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA") |
|
logging.error(" : %s %s"%sys.exc_info()[0:2]) |
|
logging.error("Error at ECHO_helpers.sort:"+repr(x)+"--"+repr(type(x[0]))) |
|
logging.error("Error at ECHO_helpers.sort:"+repr(y)+"--"+repr(type(y[0]))) |
|
logging.error("Error at ECHO_helpers.sort:BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB") |
|
return 0 |
def sortfnc(sortfield,x,y): |
def sortfnc(sortfield,x,y): |
try: |
try: |
xa=x[1].getMDValue(sortfield,generic=generic) |
xa=x[1].getMDValue(sortfield,generic=generic) |
Line 704 def reloadMetaDataFromStorage(self,RESPO
|
Line 833 def reloadMetaDataFromStorage(self,RESPO
|
|
|
return ret |
return ret |
|
|
def getRDFDescription(self,linkURL,urn=None,nameDef=None,typeName=None): |
def getRDFDescription(self,linkURL,urn=None,nameDef=None,typeName=None,ap=""): |
"""rdf""" |
"""rdf""" |
|
|
ret="" |
ret="" |
about="""<RDF:Description RDF:about="%s">""" |
about="""<rdf:Description rdf:about="%s">""" |
name="""<ECHONAVIGATION:name>%s</ECHONAVIGATION:name>""" |
name="""<echonavigation:name>%s</echonavigation:name>""" |
link="""<ECHONAVIGATION:link xlink:href="%s">%s</ECHONAVIGATION:link>""" |
link="""<echonavigation:link xlink:href="%s">%s</echonavigation:link>""" |
clickable="""<ECHONAVIGATION:linkClickable>%s</ECHONAVIGATION:linkClickable>""" |
clickable="""<echonavigation:linkClickable>%s</echonavigation:linkClickable>""" |
#link="""<ECHONAVIGATION:link RDF:about="%s"/>""" |
#link="""<echonavigation:link rdf:about="%s"/>""" |
type="""<ECHONAVIGATION:type>%s</ECHONAVIGATION:type>""" |
type="""<echonavigation:type>%s</echonavigation:type>""" |
#xlink="""<ECHONAVIGATION:xlink xlink:href="%s"/>""" |
|
|
#xlink="""<echonavigation:xlink xlink:href="%s"/>""" |
|
|
|
if ap=="": |
|
ap2="" |
|
else: |
|
ap2 = """<mpiwg:archive-path>%s</mpiwg:archive-path>"""%ap |
|
|
if not urn: |
if not urn: |
#urn="urn:"+re.sub('/',':',self.absolute_url()) |
#urn="urn:"+re.sub('/',':',self.absolute_url()) |
urn=self.absolute_url() |
urn=self.absolute_url() |
Line 741 def getRDFDescription(self,linkURL,urn=N
|
Line 877 def getRDFDescription(self,linkURL,urn=N
|
else: |
else: |
type2=type%typeName |
type2=type%typeName |
|
|
#ret=about2+"\n"+name2+"\n"+link2+"\n"+type2+"\n"+clickable2+"\n</RDF:Description>" |
|
ret=about2+"\n"+name2+"\n"+type2+"\n"+clickable2+"\n</RDF:Description>" |
|
|
#ret=about2+"\n"+name2+"\n"+link2+"\n"+type2+"\n"+clickable2+"\n</rdf:Description>" |
|
try: |
|
ret=about2+"\n"+name2+"\n"+type2+"\n"+clickable2+"\n"+ap2+"\n</rdf:Description>" |
|
except: |
|
ret=self.unicodify(about2)+"\n"+self.unicodify(name2)+"\n"+self.unicodify(type2)+"\n"+self.unicodify(clickable2)+"\n"+self.unicodify(ap2)+"\n</rdf:Description>" |
|
|
return ret |
return ret |
|
|
def getCopyrightsFromForm(self,argv): |
def getCopyrightsFromForm(self,argv): |
Line 1175 class MapArea(SimpleItem):
|
Line 1317 class MapArea(SimpleItem):
|
return self.aq_parent.label or self.aq_parent.id |
return self.aq_parent.label or self.aq_parent.id |
return self.label |
return self.label |
|
|
|
def getTargetUrl(self): |
|
"""returns the URL of the linked object""" |
|
if hasattr(self, 'aq_parent'): |
|
p = self.aq_parent |
|
# ECHOResource and ECHOLink have 'link' attribute |
|
if hasattr(p, 'link'): |
|
if p.link is None: |
|
# return empty string for empty link |
|
return "" |
|
else: |
|
return p.link |
|
|
|
# return None for unknown type |
|
return None |
|
|
def setLabel(self, label): |
def setLabel(self, label): |
"""sets the label""" |
"""sets the label""" |
self.label = label |
self.label = label |
Line 1220 class MapText(Folder,ZopePageTemplate):
|
Line 1377 class MapText(Folder,ZopePageTemplate):
|
self.ZBindings_edit(self._default_bindings) |
self.ZBindings_edit(self._default_bindings) |
if text is None: |
if text is None: |
text = open(self._default_content_fn).read() |
text = open(self._default_content_fn).read() |
|
if content_type is None: |
|
content_type = self.content_type |
self.pt_edit(text, content_type) |
self.pt_edit(text, content_type) |
|
|
def createLocale(self): |
def createLocale(self): |