--- ECHO_content/ECHO_helpers.py 2004/12/10 19:33:09 1.32
+++ ECHO_content/ECHO_helpers.py 2005/06/08 10:23:16 1.49
@@ -4,15 +4,16 @@ import socket
import urllib
import string
import xml.dom.minidom
-from types import *
+import types
from Products.PageTemplates.PageTemplateFile import PageTemplateFile
+from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
from OFS.SimpleItem import SimpleItem
from Globals import package_home
import Globals
from AccessControl import ClassSecurityInfo
import os.path
-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']
+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']
def content_html(self,type):
"""template fuer content"""
@@ -25,7 +26,7 @@ def content_html(self,type):
obj=getattr(self,type+"_template")
return obj()
else:
- pt=PageTemplateFile('Products/ECHO_content/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()
@@ -33,17 +34,37 @@ def content_html(self,type):
class ECHO_basis:
"""basis eigenschaften fuer echo objekte"""
+ security=ClassSecurityInfo()
+ security.declarePublic('getImageTag')
+ def getImageTag(self):
+ """sollte uerberschrieben werden, falls von der Klasse eine imagetag zurueckkommt"""
+
+ return ""
+
def showRDF(self):
"""showrdf"""
self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
ret="""\n\n"""
- ret+=self.getRDF(urn="echo:colllectionroot")+"\n"
+
+ ret+=self.getRDF(urn="echo:collectionroot")+"\n"
+
ret+=""""""
return ret
+ def RDF(self):
+ """showrdf"""
+ self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
+ ret="""\n\n"""
+
+ ret+=self.getRDF(urn=self.absolute_url())+"\n"
+
+ ret+=""""""
+ return ret
+
+
def createSubElementRDF(self,urn=None):
"""rdf list"""
if not urn:
@@ -95,6 +116,7 @@ class ECHO_basis:
def getTitle(self):
"""title"""
+ return self.decode(self.title)
try:
return self.title.encode('utf-8','ignore')
except:
@@ -103,6 +125,16 @@ class ECHO_basis:
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:
@@ -234,7 +266,7 @@ class ECHO_basis:
"""generate img-tag for map of parent"""
return self.aq_parent.createMapImg()
- def createMapLink(self, ob, text=None):
+ def createMapLink(self, ob, text=None, target="_blank"):
"""generate map link"""
bt = BrowserCheck(self)
id = ob.getFullId()
@@ -247,17 +279,17 @@ class ECHO_basis:
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"):
+ 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()
@@ -279,7 +311,7 @@ class ECHO_basis:
tag += ''
else:
# create a-element
- tag = ''%(id,id,id,link)
+ tag = ''%(id,id,id,link,target)
if ob.isTypeArrow():
rot = ob.angle
if bt.isIEWin and bt.versIE > 5:
@@ -310,7 +342,7 @@ class ECHO_basis:
def toList(field):
"""Einzelfeld in Liste umwandeln"""
- if type(field)==StringType:
+ if type(field)==types.StringType:
return [field]
else:
return field
@@ -383,47 +415,69 @@ def checkOnlyOneInGroup(object):
return displayedObjects[0][1]
else: return object
-def getSubCols(self,sortfield="weight",subColTypes= displayTypes,sortFieldMD=None):
-
+def getSubCols(self, sortfield=None, subColTypes=displayTypes, sortFieldMD=None,searchMD=None):
+
+
+ def sort(x,y):
+ return cmp(x[0],y[0])
+
def sortfnc(sortfield,x,y):
- xa=x[1].getMDValue(sortfield)
- ya=y[1].getMDValue(sortfield)
- print xa,ya
+ try:
+ xa=x[1].getMDValue(sortfield)
+ except:
+ xa=""
+ try:
+ ya=y[1].getMDValue(sortfield)
+ except:
+ ya=""
return cmp(xa,ya)
sortWithMD = lambda sortfield : (lambda x,y : sortfnc(sortfield,x,y))
ids=[]
displayedObjects=self.ZopeFind(self,obj_metatypes=subColTypes)
-
+
for entry in displayedObjects:
-
- object=entry[1]
- ids.append(object)
- try:
- sortfield=self.sortfield
- except:
- """nothing"""
+
+ object=entry[1]
+ if searchMD and hasattr(object,'getMDValue'):
+ flag=0
+ for field in searchMD.keys():
+ if object.getMDValue(field)==searchMD[field]:
+ flag=1
+ else:
+ flag=0
+ break
+ if flag==1:
+ ids.append(object)
+ else:
+ ids.append(object)
+
+ if not sortfield:
+ sortfield=getattr(self,'sortfield','weight')
+
tmplist=[]
- for x in ids:
- if hasattr(x,sortfield):
- try:
- x=int(x)
- except:
- """nothing"""
- tmp=getattr(x,sortfield)
- else:
- tmp=10000000
- tmplist.append((tmp,x))
+ for x in ids:
+
+ if hasattr(x,sortfield):
+ try:
+ tmp=int(getattr(x,sortfield))
+ except:
+ tmp=getattr(x,sortfield)
+
+ else:
+ tmp=10000000
+
+ tmplist.append((tmp,x))
if not sortFieldMD:
- tmplist.sort()
+ tmplist.sort(sort)
else:
tmplist.sort(sortWithMD(sortFieldMD))
-
+
return [x for (key,x) in tmplist]
def ECHO_rerenderLinksMD(self,obj=None,types=['title','label']):
@@ -460,8 +514,6 @@ def reloadMetaDataFromStorage(self,RESPO
for resource in resources:
x=str(resource[1].copyIndex_meta2echo_resource())+"
"
ret+=x
- #print x
-
if RESPONSE is not None:
#RESPONSE.redirect('./manage_main')
@@ -580,23 +632,47 @@ def checkDiffs(self,metadict):
return diffs
-def zptFile(self, path):
+def zptFile(self, path, orphaned=False):
"""returns a page template file from the product"""
- pt=PageTemplateFile(os.path.join(package_home(globals()), path)).__of__(self)
+ if orphaned:
+ # unusual case
+ pt=PageTemplateFile(os.path.join(package_home(globals()), path))
+ else:
+ pt=PageTemplateFile(os.path.join(package_home(globals()), path)).__of__(self)
return pt
-def sendFile(self, filename, type):
- """sends an object or a local file (in the product) as response"""
+def findObjectPath(startobject, filename):
+ """returns the object with the name filename starting at startobject"""
+ if startobject is None:
+ return None
paths = filename.split('/')
- object = self
- # look for an object called filename
+ object = startobject
for path in paths:
+
if hasattr(object, path):
object = getattr(object, path)
else:
object = None
break
+ return object
+
+
+def zptObjectOrFile(self, filename, localdir='zpt', orphaned=False):
+ """returns a page template instance or a file from the product"""
+ # look for an object called path
+ pt = findObjectPath(self, filename)
+ # the object should also not be a python function
+ if (pt is None) or isinstance(pt, types.FunctionType):
+ # get a ZPT file
+ pt = zptFile(self, localdir+'/'+filename, orphaned=orphaned)
+ return pt
+
+
+def sendFile(self, filename, type):
+ """sends an object or a local file (in the product) as response"""
+ # look for an object called filename
+ object = findObjectPath(self, filename)
if object:
# if the object exists then send it
return object.index_html(self.REQUEST.REQUEST, self.REQUEST.RESPONSE)
@@ -636,7 +712,7 @@ def writeMetadata(url,metadict,project=N
"""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)
@@ -780,7 +856,9 @@ def readMetadata(url):
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))
+ #metadict[re.sub('-','_',node.tagName.lower())]=urllib.unquote(getText(node.childNodes))
+ metadict[re.sub('-','_',node.tagName.lower())]=getText(node.childNodes)
+
except:
"""nothing"""
@@ -896,3 +974,64 @@ class MapArea(SimpleItem):
# call this to initialize framework classes, which
# does the right thing with the security assertions.
Globals.InitializeClass(MapArea)
+
+
+class MapText(ZopePageTemplate):
+ """class to hold text for map areas"""
+
+ meta_type = 'ECHO_mapText'
+ # Create a SecurityInfo for this class.
+ security = ClassSecurityInfo()
+ security.setDefaultAccess("allow")
+
+ _default_content_fn = os.path.join(package_home(globals()),
+ 'zpt', 'ECHO_mapText_default.html')
+
+ def __init__(self, id, text=None, content_type=None):
+ self.id = str(id)
+ self.ZBindings_edit(self._default_bindings)
+ if text is None:
+ text = open(self._default_content_fn).read()
+ self.pt_edit(text, content_type)
+
+# Product registration and Add support
+manage_addMapTextForm = PageTemplateFile(
+ 'zpt/AddECHO_mapText', globals(), __name__='manage_addMapTextForm')
+
+def manage_addMapText(self, id, title=None, text=None,
+ REQUEST=None, submit=None):
+ "Add a Map Text with optional file content."
+
+ id = str(id)
+ if REQUEST is None:
+ self._setObject(id, MapText(id, text))
+ ob = getattr(self, id)
+ if title:
+ ob.pt_setTitle(title)
+ return ob
+ else:
+ file = REQUEST.form.get('file')
+ headers = getattr(file, 'headers', None)
+ if headers is None or not file.filename:
+ zpt = MapText(id, text)
+ else:
+ zpt = MapText(id, file, headers.get('content_type'))
+
+ self._setObject(id, zpt)
+ if title:
+ ob = getattr(self, id)
+ ob.pt_setTitle(title)
+
+ try:
+ u = self.DestinationURL()
+ except AttributeError:
+ u = REQUEST['URL1']
+
+ if submit == " Add and Edit ":
+ u = "%s/%s" % (u, urllib.quote(id))
+ REQUEST.RESPONSE.redirect(u+'/manage_main')
+ return ''
+
+# call this to initialize framework classes, which
+# does the right thing with the security assertions.
+Globals.InitializeClass(MapText)