--- zogiLib/zogiLib.py 2005/11/08 18:10:10 1.60 +++ zogiLib/zogiLib.py 2008/07/31 15:21:59 1.69 @@ -18,34 +18,13 @@ import string import urllib import xml.dom.minidom -ZOGIVERSION = "0.10.1b ROC 8.11.2005" +ZOGIVERSION = "0.10.4b ROC 13.11.2006" def cropf(f): """returns a float with reduced precision""" return float(int(f * 10000)/10000.0) -def sendFile(self, filename, type): - """sends an object or a local file (from the product) as response""" - paths = filename.split('/') - object = self - # look for an object called filename - for path in paths: - if hasattr(object, path): - object = getattr(object, path) - else: - object = None - break - if object: - # if the object exists then send it - 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) - self.REQUEST.RESPONSE.setHeader("Content-Type", type) - self.REQUEST.RESPONSE.write(file(fn).read()) - return - def browserCheck(self): """check the browsers request to find out the browser type""" bt = {} @@ -78,9 +57,9 @@ class zogiImage(SimpleItem): """einzelnes Image""" meta_type="zogiImage" - manage_options=SimpleItem.manage_options+( + manage_options=( {'label':'Main config','action':'changeZogiImageForm'}, - ) + )+SimpleItem.manage_options def __init__(self,id,title,baseUrl,queryString,content_type='',precondition=''): @@ -100,25 +79,15 @@ class zogiImage(SimpleItem): # """getUrlData""" # return urllib.urlopen(self.baseUrl+self.queryString) - def changeZogiImageForm(self): - """Main configuration""" - pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt/changeZogiImageForm.zpt')).__of__(self) - return pt() + changeZogiImageForm = PageTemplateFile('zpt/changeZogiImageForm.zpt', globals()) - def changeZogiImage(self,title,baseUrl, queryString,RESPONSE=None): - """change it""" - self.title=title - self.baseUrl=baseUrl - self.queryString=queryString - - if RESPONSE is not None: - RESPONSE.redirect('manage_main') - def index_html(self, REQUEST, RESPONSE): """service the request by redirecting to digilib server""" - RESPONSE.redirect(self.baseUrl+self.queryString) + # use status 307 = moved temporarily + RESPONSE.redirect(self.baseUrl+self.queryString, status=307) return '' + def rescale(self,width=None,height=None): """andere parameter im querystring""" qs=cgi.parse_qs(self.queryString) @@ -130,22 +99,56 @@ class zogiImage(SimpleItem): qs['dw']=width if height: qs['dh']=height - qsneu=urllib.urlencode(qs) self.queryString=qsneu return "done" + + def setWithDigilibURL(self,digilibUrl): + """take all parameters from digilib URL string""" + base = re.match('(.*?/Scaler\?)(.*)', digilibUrl) + if base is not None: + params = base.group(2).split('&') + newparams = [] + # filter out the parameters we want + for p in params: + (key, val) = p.split('=') + if key in ['fn','pn','dw','dh','ww','wh','wx','wy','mo']: + newparams.append(p) + # set the new parameters + if len(newparams) > 1: + self.baseUrl = base.group(1) + self.queryString = '&'.join(newparams) + return True + + return False + + + def changeZogiImage(self,title,baseUrl, queryString, digilibUrl=None, RESPONSE=None): + """change it""" + self.title=title + self.baseUrl=baseUrl + self.queryString=queryString + if digilibUrl is not None and len(digilibUrl) > 0: + self.setWithDigilibURL(digilibUrl) + + if RESPONSE is not None: + RESPONSE.redirect('manage_main') + + def manage_addZogiImageForm(self): """Form for adding""" pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt/addZogiImage.zpt')).__of__(self) return pt() -def manage_addZogiImage(self,id,title,baseUrl, queryString,RESPONSE=None): +def manage_addZogiImage(self,id,title,baseUrl,queryString,digilibUrl=None,RESPONSE=None): """add zogiimage""" newObj=zogiImage(id,title,baseUrl, queryString) self.Destination()._setObject(id,newObj) + if digilibUrl is not None and len(digilibUrl) > 0: + newObj.setWithDigilibURL(digilibUrl) if RESPONSE is not None: RESPONSE.redirect('manage_main') @@ -165,11 +168,11 @@ class zogiLib(Folder): def __init__(self, id, title, dlServerURL, layout="book", basePath="", dlTarget=None, dlToolbarBaseURL=None): """init""" - self.id=id - self.title=title + self.id = id + self.title = title self.dlServerURL = dlServerURL - self.basePath=basePath - self.layout=layout + self.basePath = basePath + self.layout = layout self.dlTarget = dlTarget if dlToolbarBaseURL: @@ -180,29 +183,29 @@ class zogiLib(Folder): self.manage_addFolder('template') -# form templates + # form templates main_book = PageTemplateFile('zpt/main_book', globals()) main_image = PageTemplateFile('zpt/main_image', globals()) main_metaData = PageTemplateFile('zpt/main_metadata', globals()) - main_static = PageTemplateFile('zpt/main_static', globals()) + #main_static = PageTemplateFile('zpt/main_static', globals()) options = PageTemplateFile('zpt/options', globals()) - changeForm = PageTemplateFile('zpt/changeForm', globals()) + #changeForm = PageTemplateFile('zpt/changeForm', globals()) -# display templates - aux_divs = PageTemplateFile('zpt/aux_divs', globals()) - aux_divsN4 = PageTemplateFile('zpt/aux_divsN4', globals()) + # display templates + aux_divs = PageTemplateFile('zpt/aux_divs', globals()) + #aux_divsN4 = PageTemplateFile('zpt/aux_divsN4', globals()) img_div = PageTemplateFile('zpt/img_div', globals()) -# javascripts + # javascripts head_js = PageTemplateFile('zpt/head_js', globals()) jslib_js = PageTemplateFile('js/baselib.js', globals()) dllib_js = PageTemplateFile('js/dllib.js', globals()) -# graphic files + # graphic files arr_right = ImageFile('images/right.gif', globals()) arr_left = ImageFile('images/left.gif', globals()) arr_up = ImageFile('images/up.gif', globals()) - arr_down = ImageFile('images/down.gif', globals()) + arr_down = ImageFile('images/down.gif', globals()) mark1 = ImageFile('images/mark1.gif', globals()) mark2 = ImageFile('images/mark2.gif', globals()) mark3 = ImageFile('images/mark3.gif', globals()) @@ -343,7 +346,7 @@ class zogiLib(Folder): """get DLInfo from digilib server""" paramH={} baseUrl=self.getDLBaseUrl()+"/dlInfo-xml.jsp" - print "getdlinfo: ", baseUrl + #print "getdlinfo: ", baseUrl try: url=urllib.urlopen(baseUrl+'?'+self.getAllDLParams()) dom=xml.dom.minidom.parse(url) @@ -365,7 +368,7 @@ class zogiLib(Folder): url += otherbase else: url += self.basePath - # should end with "/" + # should still end with "/" if len(url) > 0 and url[-1] != '/': url += '/' return url @@ -410,10 +413,10 @@ class zogiLib(Folder): return True - def createScalerImg(self, requestString=None, bottom=0, side=0, width=500, height=500): + def createScalerImg(self, requestString=None, bottom=0, side=0, width=500, height=500, options=None): """generate Scaler IMG Tag""" self.checkQuery() - bt = self.REQUEST.SESSION['browserType'] + bt = self.getBrowserType() # override with parameters from session if self.REQUEST.SESSION.has_key('scalerDiv'): (requestString, bottom, side, width, height) = self.REQUEST.SESSION['scalerDiv'] @@ -421,6 +424,10 @@ class zogiLib(Folder): if not requestString: requestString = self.getAllDLParams() url = self.getScalerUrl(requestString=requestString) + # take insets from options if present + if options is not None: + side = options.get('side', side) + bottom = options.get('bottom', bottom) # construct bottom and side insets b_par = "" s_par = "" @@ -457,7 +464,7 @@ class zogiLib(Folder): # make shure to remove unused parameter del self.REQUEST.SESSION['scalerDiv'] - pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt/zogilib_img_div')).__of__(self) + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt/img_div')).__of__(self) return pt() def index_html(self): @@ -468,10 +475,9 @@ class zogiLib(Folder): if not hasattr(self, 'template'): # create template folder if it doesn't exist - print "no template folder" + print "no template folder -- creating" self.manage_addFolder('template') - print "template!" pt = getattr(self.template, 'main_'+tpt) return pt() @@ -479,9 +485,6 @@ class zogiLib(Folder): """make shure that the query has been saved""" if not self.REQUEST.has_key('dlParams'): self.storeQuery() - if not self.REQUEST.SESSION.has_key('browserType'): - bt = browserCheck(self) - self.REQUEST.SESSION.set('browserType', bt) def storeQuery(self, more=None, withpt=False): """parse query parameters into a hash in REQUEST""" @@ -564,6 +567,15 @@ class zogiLib(Folder): return self.display() + def getBrowserType(self): + """get browser type object""" + if self.REQUEST.SESSION.has_key('browserType'): + return self.REQUEST.SESSION['browserType'] + else: + bt = browserCheck(self) + self.REQUEST.SESSION.set('browserType', bt) + return bt + def display(self): """(re)display page""" @@ -587,22 +599,23 @@ class zogiLib(Folder): """returns dlTarget""" self.checkQuery() s = self.dlTarget - if s == None: - s = "" -# s = 'dl' -# if self.getDLParam('fn'): -# s += "_" + self.getDLParam('fn') -# if self.getDLParam('pn'): -# s += "_" + self.getDLParam('pn') + if (s is None) or (s == ""): +# s = "" + s = 'dl' + if self.getDLParam('fn'): + s += "_" + self.getDLParam('fn') + if self.getDLParam('pn'): + s += "_" + self.getDLParam('pn') + return s def getPN(self): - """pagenums""" + """pagenumber""" pn = int(self.getDLParam('pn', 1)) return pn def getPT(self): - """pagenums""" + """number of total pages""" pt = self.getDLParam('pt', None) if pt is None: # get pt from dlInfo @@ -656,13 +669,13 @@ class zogiLib(Folder): def dl_StaticHTML(self): """set rendering to static HTML""" self.checkQuery() - self.REQUEST.SESSION['browserType']['staticHTML'] = True + self.getBrowserType()['staticHTML'] = True return self.display() def dl_DynamicHTML(self): """set rendering to dynamic HTML""" self.checkQuery() - self.REQUEST.SESSION['browserType']['staticHTML'] = False + self.getBrowserType()['staticHTML'] = False return self.display() def dl_HMirror(self): @@ -880,23 +893,23 @@ def manage_addZogiLibPageTemplateForm(se pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt/addZogiLibPageTemplateForm')).__of__(self) return pt() -def manage_addZogiLibPageTemplate(self, id='zogiLibMainTemplate', title=None, layout=None, text=None, +def manage_addZogiLibPageTemplate(self, title=None, layout=None, text=None, REQUEST=None, submit=None): "Add a Page Template with optional file content." - id = str(id) + if not layout: layout = "book" + id = 'main_%s'%layout self._setObject(id, zogiLibPageTemplate(id)) ob = getattr(self, id) - if not layout: layout = "book" - ob.pt_edit(open(os.path.join(package_home(globals()),'zpt/zogiLibMain_%s.zpt'%layout)).read(),None) + ob.pt_edit(open(os.path.join(package_home(globals()),'zpt/main_%s.zpt'%layout)).read(),'text/html') if title: ob.pt_setTitle(title) try: - u = self.DestinationURL() + url = self.DestinationURL() except AttributeError: - u = REQUEST['URL1'] + url = REQUEST['URL1'] - u = "%s/%s" % (u, urllib.quote(id)) - REQUEST.RESPONSE.redirect(u+'/manage_main') + url = "%s/%s" % (url, urllib.quote(id)) + REQUEST.RESPONSE.redirect(url+'/manage_main') return ''