|
|
| version 1.95, 2010/08/24 12:43:24 | version 1.146, 2010/10/26 14:44:55 |
|---|---|
| Line 5 from Products.PageTemplates.PageTemplate | Line 5 from Products.PageTemplates.PageTemplate |
| from AccessControl import ClassSecurityInfo | from AccessControl import ClassSecurityInfo |
| from AccessControl import getSecurityManager | from AccessControl import getSecurityManager |
| from Globals import package_home | from Globals import package_home |
| from Products.zogiLib.zogiLib import browserCheck | |
| from Ft.Xml import EMPTY_NAMESPACE, Parse | from Ft.Xml import EMPTY_NAMESPACE, Parse |
| import Ft.Xml.Domlette | import Ft.Xml.Domlette |
| Line 16 import logging | Line 17 import logging |
| import math | import math |
| import urlparse | import urlparse |
| import cStringIO | import cStringIO |
| import re | |
| def logger(txt,method,txt2): | def logger(txt,method,txt2): |
| """logging""" | """logging""" |
| Line 48 def serializeNode(node, encoding='utf-8' | Line 51 def serializeNode(node, encoding='utf-8' |
| buf.close() | buf.close() |
| return s | return s |
| 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) | |
| logging.debug("documentViewer (BROWSER TYPE) bt %s"%bt) | |
| return bt | |
| def getParentDir(path): | def getParentDir(path): |
| """returns pathname shortened by one""" | """returns pathname shortened by one""" |
| Line 173 class documentViewer(Folder): | Line 186 class documentViewer(Folder): |
| """get search""" | """get search""" |
| return self.template.fulltextclient.getSearch(**args) | return self.template.fulltextclient.getSearch(**args) |
| def getGisPlaces(self, **args): | |
| """get gis places""" | |
| return self.template.fulltextclient.getGisPlaces(**args) | |
| def getAllGisPlaces(self, **args): | |
| """get all gis places """ | |
| return self.template.fulltextclient.getAllGisPlaces(**args) | |
| def getOrigPages(self, **args): | |
| """get original page number """ | |
| return self.template.fulltextclient.getOrigPages(**args) | |
| def getNumPages(self, docinfo): | def getNumPages(self, docinfo): |
| """get numpages""" | """get numpages""" |
| return self.template.fulltextclient.getNumPages(docinfo) | return self.template.fulltextclient.getNumPages(docinfo) |
| def getNumTextPages(self, docinfo): | |
| """get numpages text""" | |
| return self.template.fulltextclient.getNumTextPages(docinfo) | |
| def getTranslate(self, **args): | def getTranslate(self, **args): |
| """get translate""" | """get translate""" |
| return self.template.fulltextclient.getTranslate(**args) | return self.template.fulltextclient.getTranslate(**args) |
| Line 214 class documentViewer(Folder): | Line 243 class documentViewer(Folder): |
| self.digilibBaseUrl = self.findDigilibUrl() or "http://nausikaa.mpiwg-berlin.mpg.de/digitallibrary" | self.digilibBaseUrl = self.findDigilibUrl() or "http://nausikaa.mpiwg-berlin.mpg.de/digitallibrary" |
| docinfo = self.getDocinfo(mode=mode,url=url) | docinfo = self.getDocinfo(mode=mode,url=url) |
| #pageinfo = self.getPageinfo(start=start,current=pn,docinfo=docinfo) | |
| pageinfo = self.getPageinfo(start=start,current=pn,docinfo=docinfo) | pageinfo = self.getPageinfo(start=start,current=pn,docinfo=docinfo) |
| ''' ZDES ''' | |
| pt = getattr(self.template, 'thumbs_main_rss') | pt = getattr(self.template, 'thumbs_main_rss') |
| if viewMode=="auto": # automodus gewaehlt | if viewMode=="auto": # automodus gewaehlt |
| Line 226 class documentViewer(Folder): | Line 257 class documentViewer(Folder): |
| return pt(docinfo=docinfo,pageinfo=pageinfo,viewMode=viewMode) | return pt(docinfo=docinfo,pageinfo=pageinfo,viewMode=viewMode) |
| security.declareProtected('View','index_html') | security.declareProtected('View','index_html') |
| def index_html(self,url,mode="texttool",viewMode="auto",tocMode="thumbs",start=None,pn=1,mk=None, query=None, querySearch=None): | def index_html(self,url,mode="texttool",viewMode="auto",tocMode="thumbs",start=None,pn=1,mk=None, query=None, querySearch=None, characterNormalization=""): |
| ''' | ''' |
| view it | view it |
| @param mode: defines how to access the document behind url | @param mode: defines how to access the document behind url |
| Line 390 class documentViewer(Folder): | Line 421 class documentViewer(Folder): |
| return docinfo | return docinfo |
| def getIndexMetaPath(self,url): | |
| """gib nur den Pfad zurueck""" | |
| regexp = re.compile(r".*(experimental|permanent)/(.*)") | |
| regpath = regexp.match(url) | |
| if (regpath==None): | |
| return "" | |
| logging.debug("(getDomFromIndexMeta): URLXAXA: %s"%regpath.group(2)) | |
| return ("/mpiwg/online/"+regpath.group(1)+"/"+regpath.group(2)) | |
| def getIndexMetaUrl(self,url): | |
| """returns utr of index.meta document at url""" | |
| def getIndexMeta(self, url): | |
| """returns dom of index.meta document at url""" | |
| dom = None | |
| metaUrl = None | metaUrl = None |
| if url.startswith("http://"): | if url.startswith("http://"): |
| # real URL | # real URL |
| Line 405 class documentViewer(Folder): | Line 446 class documentViewer(Folder): |
| if not metaUrl.endswith("index.meta"): | if not metaUrl.endswith("index.meta"): |
| metaUrl += "/index.meta" | metaUrl += "/index.meta" |
| logging.debug("(getIndexMeta): METAURL: %s"%metaUrl) | return metaUrl |
| def getDomFromIndexMeta(self, url): | |
| """get dom from index meta""" | |
| dom = None | |
| metaUrl = self.getIndexMetaUrl(url) | |
| logging.debug("(getDomFromIndexMeta): METAURL: %s"%metaUrl) | |
| txt=getHttpData(metaUrl) | txt=getHttpData(metaUrl) |
| if txt is None: | if txt is None: |
| raise IOError("Unable to read index meta from %s"%(url)) | raise IOError("Unable to read index meta from %s"%(url)) |
| Line 445 class documentViewer(Folder): | Line 493 class documentViewer(Folder): |
| if dom is None: | if dom is None: |
| for x in range(cut): | for x in range(cut): |
| path=getParentDir(path) | path=getParentDir(path) |
| dom = self.getIndexMeta(path) | dom = self.getDomFromIndexMeta(path) |
| acctype = dom.xpath("//access-conditions/access/@type") | acctype = dom.xpath("//access-conditions/access/@type") |
| if acctype and (len(acctype)>0): | if acctype and (len(acctype)>0): |
| Line 467 class documentViewer(Folder): | Line 515 class documentViewer(Folder): |
| if dom is None: | if dom is None: |
| for x in range(cut): | for x in range(cut): |
| path=getParentDir(path) | path=getParentDir(path) |
| dom = self.getIndexMeta(path) | dom = self.getDomFromIndexMeta(path) |
| docinfo['indexMetaPath']=self.getIndexMetaPath(path); | |
| logging.debug("documentViewer (getbibinfofromindexmeta cutted) path: %s"%(path)) | logging.debug("documentViewer (getbibinfofromindexmeta cutted) path: %s"%(path)) |
| # put in all raw bib fields as dict "bib" | # put in all raw bib fields as dict "bib" |
| Line 489 class documentViewer(Folder): | Line 539 class documentViewer(Folder): |
| bibtype=bibtype.replace("-"," ") # wrong typesiin index meta "-" instead of " " (not wrong! ROC) | bibtype=bibtype.replace("-"," ") # wrong typesiin index meta "-" instead of " " (not wrong! ROC) |
| docinfo['bib_type'] = bibtype | docinfo['bib_type'] = bibtype |
| bibmap=metaData.generateMappingForType(bibtype) | bibmap=metaData.generateMappingForType(bibtype) |
| logging.debug("documentViewer (getbibinfofromindexmeta) bibmap:"+repr(bibmap)) | |
| logging.debug("documentViewer (getbibinfofromindexmeta) bibtype:"+repr(bibtype)) | |
| # if there is no mapping bibmap is empty (mapping sometimes has empty fields) | # if there is no mapping bibmap is empty (mapping sometimes has empty fields) |
| if len(bibmap) > 0 and len(bibmap['author'][0]) > 0: | if len(bibmap) > 0 and len(bibmap['author'][0]) > 0: |
| try: | try: |
| Line 509 class documentViewer(Folder): | Line 561 class documentViewer(Folder): |
| return docinfo | return docinfo |
| def getNameFromIndexMeta(self,path,docinfo=None,dom=None,cut=0): | |
| """gets name info from the index.meta file at path or given by dom""" | |
| if docinfo is None: | |
| docinfo = {} | |
| if dom is None: | |
| for x in range(cut): | |
| path=getParentDir(path) | |
| dom = self.getDomFromIndexMeta(path) | |
| docinfo['name']=getTextFromNode(dom.xpath("/resource/name")[0]) | |
| logging.debug("documentViewer docinfo[name] %s"%docinfo['name']) | |
| return docinfo | |
| def getDocinfoFromTextTool(self, url, dom=None, docinfo=None): | def getDocinfoFromTextTool(self, url, dom=None, docinfo=None): |
| """parse texttool tag in index meta""" | """parse texttool tag in index meta""" |
| logging.debug("documentViewer (getdocinfofromtexttool) url: %s" % (url)) | logging.debug("documentViewer (getdocinfofromtexttool) url: %s" % (url)) |
| Line 517 class documentViewer(Folder): | Line 583 class documentViewer(Folder): |
| if docinfo.get('lang', None) is None: | if docinfo.get('lang', None) is None: |
| docinfo['lang'] = '' # default keine Sprache gesetzt | docinfo['lang'] = '' # default keine Sprache gesetzt |
| if dom is None: | if dom is None: |
| dom = self.getIndexMeta(url) | dom = self.getDomFromIndexMeta(url) |
| archivePath = None | archivePath = None |
| archiveName = None | archiveName = None |
| Line 591 class documentViewer(Folder): | Line 657 class documentViewer(Folder): |
| docinfo['textURLPath'] = textUrl | docinfo['textURLPath'] = textUrl |
| if not docinfo['imagePath']: | if not docinfo['imagePath']: |
| # text-only, no page images | # text-only, no page images |
| docinfo = self.getNumPages(docinfo) | docinfo = self.getNumTextPages(docinfo) |
| presentationUrls = dom.xpath("//texttool/presentation") | presentationUrls = dom.xpath("//texttool/presentation") |
| docinfo = self.getBibinfoFromIndexMeta(url, docinfo=docinfo, dom=dom) # get info von bib tag | docinfo = self.getBibinfoFromIndexMeta(url, docinfo=docinfo, dom=dom) # get info von bib tag |
| docinfo = self.getNameFromIndexMeta(url, docinfo=docinfo, dom=dom) | |
| #docinfo =self.getOrigPages(docinfo=docinfo) | |
| if presentationUrls and (len(presentationUrls) > 0): # ueberschreibe diese durch presentation informationen | if presentationUrls and (len(presentationUrls) > 0): # ueberschreibe diese durch presentation informationen |
| # presentation url ergiebt sich ersetzen von index.meta in der url der fuer die Metadaten | # presentation url ergiebt sich ersetzen von index.meta in der url der fuer die Metadaten |
| Line 675 class documentViewer(Folder): | Line 743 class documentViewer(Folder): |
| raise ValueError("Unknown mode %s! Has to be one of 'texttool','imagepath','filepath'."%(mode)) | raise ValueError("Unknown mode %s! Has to be one of 'texttool','imagepath','filepath'."%(mode)) |
| logging.debug("documentViewer (getdocinfo) docinfo: %s"%docinfo) | logging.debug("documentViewer (getdocinfo) docinfo: %s"%docinfo) |
| #logging.debug("documentViewer (getdocinfo) docinfo: %s"%) | |
| self.REQUEST.SESSION['docinfo'] = docinfo | self.REQUEST.SESSION['docinfo'] = docinfo |
| return docinfo | return docinfo |
| def getPageinfo(self, current, start=None, rows=None, cols=None, docinfo=None, viewMode=None, tocMode=None): | def getPageinfo(self, current, start=None, rows=None, cols=None, docinfo=None, viewMode=None, tocMode=None,characterNormalization=""): |
| """returns pageinfo with the given parameters""" | """returns pageinfo with the given parameters""" |
| pageinfo = {} | pageinfo = {} |
| current = getInt(current) | current = getInt(current) |
| pageinfo['current'] = current | pageinfo['current'] = current |
| rows = int(rows or self.thumbrows) | rows = int(rows or self.thumbrows) |
| pageinfo['rows'] = rows | pageinfo['rows'] = rows |
| Line 701 class documentViewer(Folder): | Line 771 class documentViewer(Folder): |
| pageinfo['numgroups'] += 1 | pageinfo['numgroups'] += 1 |
| pageinfo['viewMode'] = viewMode | pageinfo['viewMode'] = viewMode |
| pageinfo['tocMode'] = tocMode | pageinfo['tocMode'] = tocMode |
| #pageinfo ['originalPage'] = self.getOrigPages(docinfo=None, pageinfo=None) | |
| pageinfo['characterNormalization'] = self.REQUEST.get('characterNormalization',' ') | pageinfo['characterNormalization'] = self.REQUEST.get('characterNormalization',' ') |
| pageinfo['query'] = self.REQUEST.get('query',' ') | pageinfo['query'] = self.REQUEST.get('query',' ') |
| pageinfo['queryType'] = self.REQUEST.get('queryType',' ') | pageinfo['queryType'] = self.REQUEST.get('queryType',' ') |
| Line 713 class documentViewer(Folder): | Line 784 class documentViewer(Folder): |
| toc = int (pageinfo['tocPN']) | toc = int (pageinfo['tocPN']) |
| pageinfo['textPages'] =int (toc) | pageinfo['textPages'] =int (toc) |
| if 'tocSize_%s'%tocMode in docinfo: | if 'tocSize_%s'%tocMode in docinfo: |
| tocSize = int(docinfo['tocSize_%s'%tocMode]) | tocSize = int(docinfo['tocSize_%s'%tocMode]) |
| tocPageSize = int(pageinfo['tocPageSize']) | tocPageSize = int(pageinfo['tocPageSize']) |