--- ECHO_content/ECHO_helpers.py 2007/05/03 14:23:46 1.82
+++ ECHO_content/ECHO_helpers.py 2008/09/08 19:23:18 1.91
@@ -17,7 +17,7 @@ import ECHO_collection
import base64
import bz2
import xmlrpclib
-
+import sys
import logging
#erstzt logging
@@ -25,7 +25,7 @@ def logger(txt,method,txt2):
"""logging"""
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']
#decode and compress for xmlrpc communication with OSAS_server
@@ -35,6 +35,29 @@ def encodeRPC(string):
def decodeRPC(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):
"""template fuer content"""
#templates = self.ZopeFind(self.aq_parent,obj_ids=[type+"_template"])
@@ -43,7 +66,7 @@ def content_html(self,type):
# return templates[0][1]()
if hasattr(self,type+"_template"):
- logging.info("type: %s"%type)
+
obj=getattr(self,type+"_template")
return obj()
else:
@@ -61,6 +84,20 @@ class ECHO_basis:
management_page_charset="utf-8"
isVisible = True
+
+ 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):
return ECHO_collection.manage_addECHO_locale(self,lang,title,label)
@@ -147,28 +184,28 @@ class ECHO_basis:
return content_html(self,type)
def getIsVisible(self):
- """return if object and all parents are visible"""
-
- # if object is not visible return False
- if hasattr(self,'isVisible'):
- if not self.isVisible : return False
-
- # else if parent of object is not ECHO_root, ECHO_basis or None
- if not self.aq_parent.meta_type in ['ECHO_root','ECHO_basis',None] :
- return self.aq_parent.getIsVisible()
+ """return if object and all parents are visible"""
+
+ # if object is not visible return False
+ if hasattr(self,'isVisible'):
+ if not self.isVisible : return False
+
+ # else if parent of object is not ECHO_root, ECHO_basis or None
+ if not self.aq_parent.meta_type in ['ECHO_root','ECHO_basis',None] :
+ return self.aq_parent.getIsVisible()
- # else return True
- return True
+ # else return True
+ return True
def setIsVisible(self, isVisible):
- """ set object attribute isVisible"""
- self.isVisible = isVisible
+ """ set object attribute isVisible"""
+ self.isVisible = isVisible
def getAttributeIsVisible(self):
- """ return object attribute isVisible"""
- if hasattr(self,'isVisible'):
- return self.isVisible
- return True
+ """ return object attribute isVisible"""
+ if hasattr(self,'isVisible'):
+ return self.isVisible
+ return True
def getTitle(self):
"""title"""
@@ -382,20 +419,33 @@ class ECHO_basis:
"""generate map link"""
bt = BrowserCheck(self)
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:
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 + ""
@@ -591,8 +641,25 @@ def getSubCols(self, sortfield=None,
isVisible=True):
def sort(x,y):
- return cmp(x[0],y[0])
-
+ try:
+ if type(x[0])==type(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):
try:
xa=x[1].getMDValue(sortfield,generic=generic)
@@ -1175,6 +1242,21 @@ class MapArea(SimpleItem):
return self.aq_parent.label or self.aq_parent.id
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):
"""sets the label"""
self.label = label
@@ -1220,6 +1302,8 @@ class MapText(Folder,ZopePageTemplate):
self.ZBindings_edit(self._default_bindings)
if text is None:
text = open(self._default_content_fn).read()
+ if content_type is None:
+ content_type = self.content_type
self.pt_edit(text, content_type)
def createLocale(self):