--- zogiLib/zogiLib.py 2004/07/16 13:47:50 1.31 +++ zogiLib/zogiLib.py 2004/07/22 17:19:22 1.35 @@ -1,4 +1,3 @@ - from Products.PageTemplates.PageTemplateFile import PageTemplateFile from Products.PageTemplates.PageTemplate import PageTemplate from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate @@ -7,7 +6,7 @@ from webdav.common import rfc1123_date import xml.dom.minidom from OFS.Folder import Folder -from xml_helpers import getText +from xml_helpers import getUniqueElementText,getText import os import re import string @@ -15,7 +14,7 @@ import urllib import types from Globals import package_home -ZOGIVERSION = "0.9.5 ROC:25.6.2004" +ZOGIVERSION = "0.9.7 ROC:21.7.2004" def cropf(f): """returns a float with reduced precision""" @@ -383,17 +382,19 @@ class zogiLib(Folder): """StandardElement""" meta_type="zogiLib" + #xxxx manage_options = Folder.manage_options+( {'label':'Main Config','action':'changeZogiLibForm'}, ) - def __init__(self, id, title, digilibBaseUrl, localFileBase, version="book", basePath="", dlTarget=None): + def __init__(self, id, title, dlServerURL,localFileBase, version="book", basePath="", dlTarget=None): """init""" self.id=id self.title=title - self.digilibBaseUrl=digilibBaseUrl + self.dlServerURL = dlServerURL + self.localFileBase=localFileBase self.basePath=basePath self.layout=version @@ -406,10 +407,120 @@ class zogiLib(Folder): """version information""" return ZOGIVERSION + def getContextStatic(self): + """get all the contexts which go to static pages""" + + try: + dom=xml.dom.minidom.parse(urllib.urlopen(self.getMetaFileName())) + contexts=dom.getElementsByTagName("context") + + ret=[] + for context in contexts: + name=getUniqueElementText(context.getElementsByTagName("name")) + + link=getUniqueElementText(context.getElementsByTagName("link")) + if name or link: + ret.append((name,link)) + return ret + except: + return [] + + def getContextDatabases(self): + """get all dynamic contexts""" + try: + dom=xml.dom.minidom.parse(urllib.urlopen(self.getMetaFileName())) + contexts=dom.getElementsByTagName("context") + ret=[] + for context in contexts: + metaDataLinks=context.getElementsByTagName("meta-datalink") + for metaDataLink in metaDataLinks: + db=metaDataLink.getAttribute("db") + link=self.REQUEST['URL1']+"/dl_db?db=%s"%db + if db: + ret.append((db,link)) + metaDataLinks=context.getElementsByTagName("meta-baselink") + + for metaDataLink in metaDataLinks: + db=metaDataLink.getAttribute("db") + link=self.REQUEST['URL1']+"/dl_db?db=%s"%db + if db: + ret.append((db,link)) + + return ret + except: + return ret + + def formatHTML(self,url,label=None,viewUrl=None): + + + sets=xml.dom.minidom.parse(urllib.urlopen(url)).getElementsByTagName('dataset') + ret="" + print label + if label: + ret+="""%s"""%(viewUrl,label) + for set in sets: + ret+="" + for node in set.childNodes: + if hasattr(node,'tagName'): + tag=node.tagName + label=node.getAttribute("label") + if not label: + label=tag + text=getText(node.childNodes) + ret+=""""""%(label,text) + ret+="
%s:%s
" + return ret + + def getMetaData(self): + """getMetaData""" + try: + dom=xml.dom.minidom.parse(urllib.urlopen(self.getMetaFileName())) + except: + return "error metadata" + + contexts=dom.getElementsByTagName("context") + ret=[] + db=self.getDLParam("db") + ob=self.getDLParam("object") + + fn=self.getDLParam("fn") + pn=self.getDLParam("pn") + if not fn: + fn="" + if not pn: + pn="" + if not ob: + ob="" + + for context in contexts: + metaDataLinks=context.getElementsByTagName("meta-datalink") + for metaDataLink in metaDataLinks: + + if (db==metaDataLink.getAttribute("db")) or (len(metaDataLinks)==1): + + link=getUniqueElementText(metaDataLink.getElementsByTagName("metadata-url")) + label=getUniqueElementText(metaDataLink.getElementsByTagName("label")) + url=getUniqueElementText(metaDataLink.getElementsByTagName("url")) + + return self.formatHTML(link,label,url) + + metaDataLinks=context.getElementsByTagName("meta-baselink") + + for metaDataLink in metaDataLinks: + + if db==metaDataLink.getAttribute("db") or (len(metaDataLinks)==1): + + link=getUniqueElementText(metaDataLink.getElementsByTagName("metadata-url")) + label=getUniqueElementText(metaDataLink.getElementsByTagName("label")) + url=getUniqueElementText(metaDataLink.getElementsByTagName("url")) + + return self.formatHTML(link+'fn=%s&pn=%s&object=%s'%(fn,pn,ob),label,url) + return ret + def getDLInfo(self): """get DLInfo from digilib server""" paramH={} - baseUrl=re.sub("servlet/Scaler","dlInfo-xml.jsp",self.digilibBaseUrl) + baseUrl=self.dlServerURL+"/dlInfo-xml.jsp" try: url=urllib.urlopen(baseUrl+self.REQUEST['QUERY_STRING']) dom=xml.dom.minidom.parse(url) @@ -418,7 +529,7 @@ class zogiLib(Folder): paramH[param.getAttribute('name')]=param.getAttribute('value') return paramH except: - return null + return {} def createHeadJS(self): @@ -452,7 +563,7 @@ class zogiLib(Folder): # if not explicitly defined take normal request if not requestString: requestString = self.getAllDLParams() - url = self.digilibBaseUrl+requestString + url = self.dlServerURL+'/servlet/Scaler?'+requestString # construct bottom and side insets b_par = "" s_par = "" @@ -512,15 +623,18 @@ class zogiLib(Folder): def dl_lib_js(self): """javascript""" - return sendFile(self, 'js/dl_lib.js', 'text/plain') + return sendFile(self, 'js/dllib.js', 'text/plain') def js_lib_js(self): """javascript""" - return sendFile(self, 'js/js_lib.js', 'text/plain') + return sendFile(self, 'js/baselib.js', 'text/plain') def optionwindow(self): """showoptions""" self.checkQuery() + if self.REQUEST.has_key('frametarget'): + self.dlTarget = self.REQUEST['frametarget'] + print "current dltarget: ", self.dlTarget bt = self.REQUEST.SESSION['browserType'] if bt['staticHTML']: pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt/optionwindow_static.zpt')).__of__(self) @@ -604,10 +718,12 @@ class zogiLib(Folder): self.checkQuery() bt = self.REQUEST.SESSION['browserType'] tp = "zogiLibMainTemplate" + if hasattr(self, tp): pt = getattr(self, tp) else: tpt = self.layout + if bt['staticHTML']: tpt = "static" @@ -722,7 +838,15 @@ class zogiLib(Folder): else: self.REQUEST.RESPONSE.redirect(self.REQUEST['URL1']+'?'+params) - + def getMetaFileName(self): + url=self.dlServerURL+'/dlContext-xml.jsp?'+self.getAllDLParams() + return urlbase + + def getToolbarPageURL(self): + """returns a toolbar-enabled page URL""" + url=self.dlServerURL+'/digimage.jsp?'+self.getAllDLParams() + return url + def getDLTarget(self): """returns dlTarget""" self.checkQuery() @@ -960,17 +1084,20 @@ class zogiLib(Folder): self.setDLParam('mk', mk) return self.display() - + def dl_db(self,db): + """set db""" + self.setDLParam('db',db) + self.display() def changeZogiLibForm(self): """Main configuration""" pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt/changeZogiLibForm.zpt')).__of__(self) return pt() - def changeZogiLib(self,title,digilibBaseUrl, localFileBase, version, basePath, dlTarget, RESPONSE=None): + def changeZogiLib(self,title,dlServerURL, localFileBase, version, basePath, dlTarget, RESPONSE=None): """change it""" self.title=title - self.digilibBaseUrl=digilibBaseUrl + self.dlServerURL=dlServerURL self.localFileBase=localFileBase self.basePath = basePath self.layout=version @@ -982,15 +1109,42 @@ class zogiLib(Folder): if RESPONSE is not None: RESPONSE.redirect('manage_main') + + + ## + ## odd stuff + ## + + def repairZogilib(self, obj=None): + """change stuff that broke on upgrading""" + + msg = "" + + if not obj: + obj = self.getPhysicalRoot() + + print "starting in ", obj + + entries=obj.ZopeFind(obj,obj_metatypes=['zogiLib'],search_sub=1) + + for entry in entries: + print " found ", entry + if hasattr(entry[1], 'digilibBaseUrl'): + msg += " fixing "+entry[0]+"/n" + entry[1].dlServerURL = re.sub('/servlet/Scaler?','',entry[1].digilibBaseUrl) + del entry[1].digilibBaseUrl + + return msg+"\n\nfixed all zogilib instances in: "+obj.title + def manage_addZogiLibForm(self): """interface for adding zogilib""" pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt/addZogiLibForm')).__of__(self) return pt() -def manage_addZogiLib(self,id,title,digilibBaseUrl, localFileBase,version="book",basePath="",dlTarget="digilib",RESPONSE=None): +def manage_addZogiLib(self,id,title,dlServerURL, localFileBase,version="book",basePath="",dlTarget="digilib",RESPONSE=None): """add dgilib""" - newObj=zogiLib(id,title,digilibBaseUrl, localFileBase, version, basePath, dlTarget) + newObj=zogiLib(id,title,dlServerURL, localFileBase, version, basePath, dlTarget) self.Destination()._setObject(id,newObj) if RESPONSE is not None: RESPONSE.redirect('manage_main') @@ -1032,3 +1186,4 @@ def manage_addZogiLibPageTemplate(self, u = "%s/%s" % (u, urllib.quote(id)) REQUEST.RESPONSE.redirect(u+'/manage_main') return '' +