--- ECHO_content/ECHO_collection.py 2004/05/10 08:44:19 1.73
+++ ECHO_content/ECHO_collection.py 2004/05/13 20:47:41 1.85
@@ -19,14 +19,18 @@ from Globals import DTMLFile
from OFS.Folder import Folder
from OFS.SimpleItem import SimpleItem
from AccessControl import ClassSecurityInfo
+from AccessControl.User import UserFolder
from Globals import InitializeClass
from Globals import DTMLFile
+import Globals
from Products.PageTemplates.PageTemplateFile import PageTemplateFile
from Products.PageTemplates.PageTemplate import PageTemplate
from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
from Globals import Persistent, package_home
from Acquisition import Implicit
from ECHO_helpers import displayTypes
+
+
try:
from psycopg import libpq
except:
@@ -112,7 +116,7 @@ def sendFile(self, filename, type):
break
if object:
# if the object exists then send it
- object()
+ 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)
@@ -170,7 +174,7 @@ def writeMetadata(url,metadict):
metanode.appendChild(metanodeneu)
- return dom.toxml().encode('utf-8')
+ return dom.topxml().encode('utf-8')
def readMetadata(url):
"""Methode zum Auslesen der Metadateninformation zu einer Resource
@@ -385,7 +389,22 @@ class ECHO_resource(Folder):
return self.viewClassification
else:
return ""
-
+
+ def getFullTextXML(self,noredirect=None):
+ """getFullTextXML"""
+ try:
+ fh=urllib.urlopen(self.metalink)
+ dom=xml.dom.minidom.parse(fh)
+ texttools=dom.getElementsByTagName('texttool')
+ text=texttools[0].getElementsByTagName('text')
+ texturl=getText(text[0].childNodes)
+ if not noredirect:
+ self.REQUEST.RESPONSE.redirect(texturl)
+ else:
+ return texturl
+ except:
+ return None
+
def getCredits(self):
"""Ausgabe der credits"""
if self.credits:
@@ -515,7 +534,10 @@ class ECHO_resource(Folder):
def changeECHO_resource_coords(self,coords,viewClassification,RESPONSE=None):
"""Änderung der Properties - coords"""
- try:
+ if type(coords)==StringType:
+ coords=[coords]
+
+ try:
coordsnew=[ string.split(x,",") for x in coords]
except:
coordsnew=[]
@@ -539,7 +561,7 @@ class ECHO_resource(Folder):
def changeECHO_resource_metadata(self,RESPONSE=None):
"""change metadata"""
tags=self.findTagsFromMapping(self.contentType)
- OSAS_meta={}
+ self.OSAS_meta={}
for field in tags[1]:
try:
self.metaDataHash[self.getFieldTag(tags,field)]=self.REQUEST.form[self.getFieldTag(tags,field)]
@@ -547,13 +569,14 @@ class ECHO_resource(Folder):
except:
"""nothing"""
- return urllib.urlopen('http://localhost:8080/echo_nav/storage/downloadExternalXML?index_meta_url=%s&xml_url=%s'%(self.absolute_url()+'/newMetaXML',self.metalink)).read()
+ return urllib.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 newMetaXML(self):
+ """new index.meta"""
self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
return writeMetadata(self.metalink,self.OSAS_meta)
@@ -867,8 +890,11 @@ class ECHO_link(ECHO_externalLink):
def content_html(self):
- """template fuer content"""
- return content_html(self,'link')
+ """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"""
@@ -889,6 +915,7 @@ def manage_addECHO_link(self,id,title,la
class ECHO_collection(Folder, Persistent, Implicit):
"""ECHO Collection"""
+
security=ClassSecurityInfo()
meta_type='ECHO_collection'
viewClassificationList=viewClassificationListMaster
@@ -908,10 +935,13 @@ class ECHO_collection(Folder, Persistent
"""title"""
return self.label.encode('utf-8')
+
+
def createRessourcesFromXMLForm(self):
"""form"""
pt=PageTemplateFile('Products/ECHO_content/zpt/createRessourcesFromXMLForm.zpt').__of__(self)
return pt()
+
def createRessourcesFromXML(self,fileupload):
"""read an XML file for generating resources"""
dom=xml.dom.minidom.parse(fileupload)
@@ -989,14 +1019,52 @@ class ECHO_collection(Folder, Persistent
return ret
def createJSAreas(self):
- """CreateJava"""
+ """new version of createJavaScript"""
dynamical="\n"
for ob in self.getGraphicCoords():
- if ob[5] == "area":
+ 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):
+ """generate divs"""
+ pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt/ECHO_content_map_frag_js')).__of__(self)
+ return pt()
+
+ def createMapLink(self, ob, text=None):
+ """generate map link"""
+ id = ob[1]
+ link = ob[1]
+ if text == None:
+ text = ob[2]
+ tag = '" + text + ""
+ 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
+
+ tag = ''%(id,id,id,link)
+ if vtype == "view point":
+ rot = ob[4][4]
+ tag += ''%(id,arrowsrc,rot)
+ else:
+ tag += ''
+ tag += ''
+ return tag
+
security.declarePublic('getCreditObject')
def getCreditObject(self,name):
@@ -1180,6 +1248,7 @@ class ECHO_collection(Folder, Persistent
pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_content_overview.zpt').__of__(self)
return pt()
+ security.declareProtected('View','index_html')
def index_html(self):
"""standard page"""
@@ -1211,20 +1280,16 @@ class ECHO_collection(Folder, Persistent
def area_img(self):
"""area image"""
- sendFile(self, 'images/red.gif', 'image/gif')
- return
+ return sendFile(self, 'images/red.gif', 'image/gif')
def hl_lib_js(self):
"""javascript"""
- sendFile(self, 'js/hl_lib.js', 'text/plain')
- return
+ return sendFile(self, 'js/hl_lib.js', 'text/plain')
def js_lib_js(self):
"""javascript"""
- sendFile(self, 'js/js_lib.js', 'text/plain')
- return
+ return sendFile(self, 'js/js_lib.js', 'text/plain')
-
def getGraphicCoords(self):
"""Give list of coordinates"""
subColTypes=['ECHO_collection','ECHO_resource']
@@ -1257,9 +1322,8 @@ class ECHO_collection(Folder, Persistent
getSubCols = ECHO_helpers.getSubCols
-
-
-
+
+Globals.InitializeClass(ECHO_collection)
def manage_addECHO_collectionForm(self):
"""Add collection form"""
@@ -1280,6 +1344,7 @@ def manage_addECHO_collection(self,id,ti
class ECHO_group(ECHO_collection):
"""ECHO Gruppe"""
+ security=ClassSecurityInfo()
meta_type="ECHO_group"
manage_options = Folder.manage_options+(
@@ -1287,7 +1352,8 @@ class ECHO_group(ECHO_collection):
{'label':'Rerender Links','action':'ECHO_rerenderLinksMD'},
{'label':'Graphics','action':'ECHO_graphicEntry'},
)
-
+
+ security.declareProtected('View','index_html')
def index_html(self):
"""standard page"""
displayedObjects=self.ZopeFind(self,obj_metatypes=displayTypes)
@@ -1381,12 +1447,129 @@ def manage_addECHO_group(self,id,title,l
if RESPONSE is not None:
RESPONSE.redirect('manage_main')
+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
+
+Globals.default__class_init__(ECHO_userFolder)
+
+
+
+def manage_addECHO_userFolder(self,dtself=None,REQUEST=None,**ignored):
+ """add a user folder """
+ f=ECHO_userFolder()
+ self=self.this()
+ try: self._setObject('acl_users', f)
+ except: return MessageDialog(
+ title ='Item Exists',
+ message='This object already contains a User Folder',
+ action ='%s/manage_main' % REQUEST['URL1'])
+ self.__allow_groups__=f
+ if REQUEST is not None:
+ REQUEST['RESPONSE'].redirect(self.absolute_url()+'/manage_main')
+
+def manage_addECHO_userFolderForm(self):
+ """add a user folder form"""
+ return manage_addECHO_userFolder(self)
+
class ECHO_root(Folder,Persistent,Implicit):
"""ECHO Root Folder"""
- meta_type="ECHO_root"
+ security=ClassSecurityInfo()
+
+ meta_type="ECHO_root"
+
def getImageTag(self):
"""needed by main_template"""
@@ -1663,7 +1846,79 @@ class ECHO_root(Folder,Persistent,Implic
ret.append((collection[0].getId(),collection[1].getId(),collection[2]))
return ret
-
+ def getResourcesHTML(self,viewerType=None,filter=None):
+ """gebe all ressourcen aus"""
+
+ def sortHTML(x,y):
+ return cmp(x[1].title,y[1].title)
+
+ ret="""