--- ECHO_content/ECHO_helpers.py 2005/06/09 08:34:49 1.50
+++ ECHO_content/ECHO_helpers.py 2005/12/13 12:45:21 1.69
@@ -12,9 +12,22 @@ from Globals import package_home
import Globals
from AccessControl import ClassSecurityInfo
import os.path
+from OFS.Folder import Folder
+import ECHO_collection
+import base64
+import bz2
+import xmlrpclib
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']
+
+#decode and compress for xmlrpc communication with OSAS_server
+
+def encodeRPC(string):
+ return base64.encodestring(bz2.compress(string))
+def decodeRPC(string):
+ return bz2.decompress(base64.decodestring(string))
+
def content_html(self,type):
"""template fuer content"""
#templates = self.ZopeFind(self.aq_parent,obj_ids=[type+"_template"])
@@ -26,7 +39,7 @@ def content_html(self,type):
obj=getattr(self,type+"_template")
return obj()
else:
- pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','ECHO_%s_template_standard.zpt'%type)).__of__(self)
+ pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','ECHO_%s_template_standard.zpt'%type)).__of__(self)
pt.content_type="text/html"
return pt()
@@ -36,112 +49,129 @@ class ECHO_basis:
"""basis eigenschaften fuer echo objekte"""
security=ClassSecurityInfo()
security.declarePublic('getImageTag')
+
+ management_page_charset="utf-8"
+
+ 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)
+
def getImageTag(self):
- """sollte uerberschrieben werden, falls von der Klasse eine imagetag zurueckkommt"""
-
- return ""
+ """sollte uerberschrieben werden, falls von der Klasse eine imagetag zurueckkommt"""
+
+ return ""
def showRDF(self):
- """showrdf"""
+ """showrdf"""
self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
- ret="""\n\n"""
+ ret="""\n\n"""
- ret+=self.getRDF(urn="echo:collectionroot")+"\n"
+ ret+=self.getRDF(urn="echo:collectionroot")+"\n"
- ret+=""""""
- return ret
+ ret+=""""""
+ return ret
def RDF(self):
- """showrdf"""
+ """showrdf"""
self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
- ret="""\n\n"""
+ ret="""\n\n"""
- ret+=self.getRDF(urn=self.absolute_url())+"\n"
+ ret+=self.getRDF(urn=self.absolute_url())+"\n"
- ret+=""""""
- return ret
+ ret+=""""""
+ return ret
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")
+ """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')):
+ 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()):
+ 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")
+ ret+=getRDFDescription(self,self.absolute_url()+'/showMetaDataXML',urn=nurn,nameDef="Metadata",typeName="ECHO_metaData")
- return ret
-
+ return ret
+
+ def content_html_XMLRpc(self):
+ """xml_rpc_version"""
+ return encodeRPC(self.content_html())
+
def content_html(self,type="collection"):
- """template fuer content bei einbau und ECHO_Umgebung"""
-
- return content_html(self,type)
+ """template fuer content bei einbau und ECHO_Umgebung"""
+
+ return content_html(self,type)
def getTitle(self):
- """title"""
- return self.decode(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')
-
+ """title"""
+ lang=self.getLanguage()
+ locale=None
+ if lang and not (lang =="de"):
+ locale=self.ZopeFind(self,obj_ids=["locale_"+lang])
+
+ if locale:
+ return self.decode(locale[0][1].title)
+ else:
+ return self.decode(self.title)
+
+
def getLabel(self):
- """title"""
- if not hasattr(self,'label'):
- self.label=""
-
- if self.label=="":
- ret=self.getTitle()
- if ret=="":
- ret=self.getId()
- return ret
-
- return self.decode(self.label)
- 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')
-
-
+ """title"""
+ lang=self.getLanguage()
+ locale=None
+ if lang and not (lang=="de"):
+ locale=self.ZopeFind(self,obj_ids=["locale_"+lang])
+
+ if locale:
+ return self.decode(locale[0][1].label)
+
+
+ if not hasattr(self,'label'):
+ self.label=""
+
+ if self.label=="":
+ ret=self.getTitle()
+ if ret=="":
+ ret=self.getId()
+ return ret
+
+ return self.decode(self.label)
+
def changeECHOEntriesForm(self):
"""change Entries for the ECHO Navigation environment"""
pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','changeECHOEntriesForm')).__of__(self)
@@ -153,7 +183,7 @@ class ECHO_basis:
self.label=label
self.weight=weight
self.description=description
- self.queryString=queryString
+ self.queryString=queryString
if RESPONSE:
RESPONSE.redirect("manage_main")
@@ -163,45 +193,64 @@ class ECHO_basis:
def hasOverview(self):
"""returns if there is an overview graphics"""
- return hasattr(self, 'overview')
+ return hasattr(self, 'overview')
def hasParentOverview(self):
"""returns if the parent has an overview graphics"""
- return hasattr(self.aq_parent, 'overview')
+ return hasattr(self.aq_parent, 'overview')
def getOverview(self):
"""map overview graphics"""
#return self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['overview'])[0][1]
- if self.hasOverview():
- return getattr(self, 'overview')
- return None
+ if self.hasOverview():
+ return getattr(self, 'overview')
+ return None
def getMapAreas(self):
"""returns the list of MapAreas"""
- # get all contained MapAreas
- areas = [res[1] for res in self.ZopeFind(self, obj_metatypes=('MapArea'))]
- return areas
+ forcetypes = self.REQUEST.get('map_force_types', None)
+ if forcetypes:
+ typelist = forcetypes.split(',')
+ else:
+ typelist = None
+ areas = []
+ # get all contained MapAreas
+ for res in self.ZopeFind(self, obj_metatypes=('MapArea')):
+ area = res[1]
+ # check the allowed types
+ if typelist is not None and area.getType() not in typelist:
+ continue
+ areas.append(area)
+ return areas
def addMapArea(self, newarea):
- """add a map area to this object"""
- if (newarea.id is None):
- # create new id
- ids = [a.id for a in self.getMapAreas()]
- i = len(ids)
- while ("a%02d"%i in ids):
- # if it exists, try the next one
- i += 1
- newarea.id = "a%02d"%i
- self._setObject(newarea.id, newarea)
+ """add a map area to this object"""
+ if (newarea.id is None):
+ # create new id
+ ids = [a.id for a in self.getMapAreas()]
+ i = len(ids)
+ while ("a%02d"%i in ids):
+ # if it exists, try the next one
+ i += 1
+ newarea.id = "a%02d"%i
+ self._setObject(newarea.id, newarea)
def getMapText(self):
"""returns the MapText"""
- # get (the first) contained MapText
- res = self.ZopeFind(self, obj_metatypes=('ECHO_mapText'))
- if len(res) > 0:
- text = res[0][1]
- return text
- return None
+ # get (the first) contained MapText
+ #lang="en"
+ lang=self.getLanguage()
+ res=None
+ if lang and not (lang=="de"):
+ resTmp = self.ZopeFind(self, obj_metatypes=('ECHO_mapText'))
+ res = self.ZopeFind(resTmp[0][1])
+
+ if not res:
+ res = self.ZopeFind(self, obj_metatypes=('ECHO_mapText'))
+ if len(res) > 0:
+ text = res[0][1]
+ return text
+ return None
def ECHO_graphicEntry(self):
"""change map coordinates"""
@@ -213,46 +262,55 @@ class ECHO_basis:
def ECHO_addCoords(self,RESPONSE=None):
"""change or add MapArea"""
- #return self.REQUEST
- # change existing areas
- 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_graphicEntry')
- 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)
- # add new area
- if self.REQUEST.has_key('add'):
- coordstring = self.REQUEST.get('coords.new', '')
- coords = string.split(coordstring, ',')
- angle = self.REQUEST.get('angle.new', '0')
- type = self.REQUEST.get('type.new', 'area')
- if len(coords) == 4:
- coords.append(angle)
- area = MapArea(None, coords, type=type)
- self.addMapArea(area)
- # return to edit area menu
- if RESPONSE is not None:
- RESPONSE.redirect('ECHO_graphicEntry')
+ #return self.REQUEST
+ # change existing areas
+ 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_graphicEntry')
+ 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')
+ permanent = self.REQUEST.get('permanent.'+id, '')
+ if len(coords) == 4:
+ area.setCoordString(coordstring)
+ area.setAngle(angle)
+ area.setType(type)
+ area.setPermanent(permanent)
+ # add the "new" area
+ if self.REQUEST.has_key('add'):
+ coordstring = self.REQUEST.get('coords.new', '')
+ coords = string.split(coordstring, ',')
+ angle = self.REQUEST.get('angle.new', '0')
+ type = self.REQUEST.get('type.new', 'area')
+ permanent = self.REQUEST.get('permanent.new', '')
+ if len(coords) == 4:
+ coords.append(angle)
+ area = MapArea(None, coords, type=type, permanent=permanent)
+ self.addMapArea(area)
+ # return to edit area menu
+ if RESPONSE is not None:
+ RESPONSE.redirect('ECHO_graphicEntry')
def createJSAreas(self, areas):
"""create area calls for JavaScript"""
- dynamical="\n"
+ forceperm = self.REQUEST.get('map_force_permanent', None)
+ js="\n"
for ob in areas:
- dynamical+="""addArea('%s', 'overview', %s, '%s');\n"""%(ob.getFullId(),ob.getCoordString(),ob.getType())
- return dynamical
+ # check for force-permanent
+ if forceperm is not None:
+ perm = forceperm
+ else:
+ perm = ob.isPermanent()
+ js+="""addArea('%s', 'overview', %s, '%s', '%s');\n"""%(ob.getFullId(),ob.getCoordString(),ob.getType(),perm)
+ return js
def createMapHead(self):
"""create javascript include and script tags for head"""
@@ -260,99 +318,145 @@ class ECHO_basis:
return pt()
def createMapImg(self):
- """generate img-tag for map"""
- bt = BrowserCheck(self)
- tag = ""
- src = self.getOverview().absolute_url()
- if bt.isN4:
- # N4 needs ilayer to create an id
- tag += ''%src
- else:
- # img with id
- tag += ''%src
- return tag
+ """generate img-tag for map"""
+ bt = BrowserCheck(self)
+ tag = ""
+ src = self.getOverview().absolute_url()
+ if bt.isN4:
+ # N4 needs ilayer to create an id
+ tag += ''%src
+ else:
+ # img with id
+ tag += ''%src
+ return tag
def createParentMapImg(self):
- """generate img-tag for map of parent"""
- return self.aq_parent.createMapImg()
+ """generate img-tag for map of parent"""
+ return self.aq_parent.createMapImg()
def createMapLink(self, ob, text=None, target="_blank"):
- """generate map link"""
- bt = BrowserCheck(self)
- id = ob.getFullId()
- link = ob.getLinkId()
- if text is None:
- text = ob.getLabel()
- if text is None:
- text = "link"
- tiptext = ob.getTip()
- tag = ""
- if bt.isN4:
- # N4 needs layer for highlighting
- tag += '" + text + ""
- else:
- # a-element
- tag = '" + text + ""
- return tag
-
- def createMapAux(self, ob, arrowsrc="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?dw=15&fn=icons/pfeil",target="_blank"):
- """generate map link image, text and other stuff"""
- bt = BrowserCheck(self)
- id = ob.getFullId()
- link = ob.getLinkId()
- tiptext = ob.getTip()
- tag = ""
-
- if bt.isN4:
- # N4 needs layer and img elements
- tag += ''%(id,id,id)
- if ob.isTypeArrow():
- rot = ob.angle
- tag += ''%(link,arrowsrc,rot)
- else:
- tag += ''
- tag += ''
- else:
- # create a-element
- tag = ''%(id,id,id,link,target)
- if ob.isTypeArrow():
- rot = ob.angle
- if bt.isIEWin and bt.versIE > 5:
- # IE/Win 5.5 has "feature" for PNG transparency
- tag += ''%(id,arrowsrc,rot,arrowsrc,rot)
- else:
- # arrow image
- tag += ''%(id,arrowsrc,rot)
- elif ob.isTypeText():
- # div for area
- tag += '