version 1.15, 2006/07/14 16:22:36
|
version 1.20, 2007/01/11 12:03:17
|
Line 1
|
Line 1
|
|
|
|
|
from OFS.Folder import Folder |
from OFS.Folder import Folder |
from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate |
from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate |
from Products.PageTemplates.PageTemplateFile import PageTemplateFile |
from Products.PageTemplates.PageTemplateFile import PageTemplateFile |
Line 15 import os.path
|
Line 17 import os.path
|
import sys |
import sys |
import cgi |
import cgi |
import urllib |
import urllib |
|
import logging |
import zLOG |
import zLOG |
|
import urlparse |
|
|
def getInt(number, default=0): |
def getInt(number, default=0): |
"""returns always an int (0 in case of problems)""" |
"""returns always an int (0 in case of problems)""" |
Line 25 def getInt(number, default=0):
|
Line 29 def getInt(number, default=0):
|
return default |
return default |
|
|
def getTextFromNode(nodename): |
def getTextFromNode(nodename): |
|
"""get the cdata content of a node""" |
if nodename is None: |
if nodename is None: |
return "" |
return "" |
nodelist=nodename.childNodes |
nodelist=nodename.childNodes |
Line 55 def urlopen(url,timeout=2):
|
Line 60 def urlopen(url,timeout=2):
|
## |
## |
class documentViewer(Folder): |
class documentViewer(Folder): |
"""document viewer""" |
"""document viewer""" |
|
#textViewerUrl="http://127.0.0.1:8080/HFQP/testXSLT/getPage?" |
|
|
meta_type="Document viewer" |
meta_type="Document viewer" |
|
|
Line 74 class documentViewer(Folder):
|
Line 80 class documentViewer(Folder):
|
changeDocumentViewerForm = PageTemplateFile('zpt/changeDocumentViewer', globals()) |
changeDocumentViewerForm = PageTemplateFile('zpt/changeDocumentViewer', globals()) |
|
|
|
|
def __init__(self,id,imageViewerUrl,title="",digilibBaseUrl=None,thumbcols=2,thumbrows=10,authgroups="mpiwg"): |
def __init__(self,id,imageViewerUrl,textViewerUrl=None,title="",digilibBaseUrl=None,thumbcols=2,thumbrows=10,authgroups="mpiwg"): |
"""init document viewer""" |
"""init document viewer""" |
self.id=id |
self.id=id |
self.title=title |
self.title=title |
self.imageViewerUrl=imageViewerUrl |
self.imageViewerUrl=imageViewerUrl |
|
self.textViewerUrl=textViewerUrl |
|
|
if not digilibBaseUrl: |
if not digilibBaseUrl: |
self.digilibBaseUrl = self.findDigilibUrl() |
self.digilibBaseUrl = self.findDigilibUrl() |
else: |
else: |
Line 92 class documentViewer(Folder):
|
Line 100 class documentViewer(Folder):
|
|
|
|
|
security.declareProtected('View','index_html') |
security.declareProtected('View','index_html') |
def index_html(self,mode,url,start=None,pn=1): |
def index_html(self,mode,url,viewMode="images",start=None,pn=1): |
''' |
''' |
view it |
view it |
@param mode: defines which type of document is behind url |
@param mode: defines which type of document is behind url |
@param url: url which contains display information |
@param url: url which contains display information |
|
@param viewMode: if images display images, if text display text, default is images |
|
|
''' |
''' |
|
|
zLOG.LOG("documentViewer (index)", zLOG.INFO, "mode: %s url:%s start:%s pn:%s"%(mode,url,start,pn)) |
zLOG.LOG("documentViewer (index)", zLOG.INFO, "mode: %s url:%s start:%s pn:%s"%(mode,url,start,pn)) |
Line 111 class documentViewer(Folder):
|
Line 121 class documentViewer(Folder):
|
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) |
pt = getattr(self.template, 'viewer_main') |
pt = getattr(self.template, 'viewer_main') |
return pt(docinfo=docinfo,pageinfo=pageinfo) |
return pt(docinfo=docinfo,pageinfo=pageinfo,viewMode=viewMode) |
|
|
|
|
def getLink(self,param=None,val=None): |
def getLink(self,param=None,val=None): |
Line 143 class documentViewer(Folder):
|
Line 153 class documentViewer(Folder):
|
"""returns if access to the resource is granted""" |
"""returns if access to the resource is granted""" |
access = docinfo.get('accessType', None) |
access = docinfo.get('accessType', None) |
zLOG.LOG("documentViewer (accessOK)", zLOG.INFO, "access type %s"%access) |
zLOG.LOG("documentViewer (accessOK)", zLOG.INFO, "access type %s"%access) |
if access is None: |
if access is not None and access == 'free': |
# no information - no access |
|
return False |
|
elif access == 'free': |
|
zLOG.LOG("documentViewer (accessOK)", zLOG.INFO, "access is free") |
zLOG.LOG("documentViewer (accessOK)", zLOG.INFO, "access is free") |
return True |
return True |
elif access in self.authgroups: |
elif access is None or access in self.authgroups: |
# only local access -- only logged in users |
# only local access -- only logged in users |
user = getSecurityManager().getUser() |
user = getSecurityManager().getUser() |
if user is not None: |
if user is not None: |
Line 208 class documentViewer(Folder):
|
Line 215 class documentViewer(Folder):
|
metaUrl=server+url.replace("/mpiwg/online","") |
metaUrl=server+url.replace("/mpiwg/online","") |
if not metaUrl.endswith("index.meta"): |
if not metaUrl.endswith("index.meta"): |
metaUrl += "/index.meta" |
metaUrl += "/index.meta" |
|
print metaUrl |
for cnt in range(num_retries): |
for cnt in range(num_retries): |
try: |
try: |
# patch dirk encoding fehler treten dann nicht mehr auf |
# patch dirk encoding fehler treten dann nicht mehr auf |
Line 224 class documentViewer(Folder):
|
Line 231 class documentViewer(Folder):
|
|
|
return dom |
return dom |
|
|
|
def getPresentationInfoXML(self, url): |
|
"""returns dom of info.xml document at url""" |
|
num_retries = 3 |
|
dom = None |
|
metaUrl = None |
|
if url.startswith("http://"): |
|
# real URL |
|
metaUrl = url |
|
else: |
|
# online path |
|
server=self.digilibBaseUrl+"/servlet/Texter?fn=" |
|
metaUrl=server+url.replace("/mpiwg/online","") |
|
|
|
|
|
for cnt in range(num_retries): |
|
try: |
|
# patch dirk encoding fehler treten dann nicht mehr auf |
|
# dom = NonvalidatingReader.parseUri(metaUrl) |
|
txt=urllib.urlopen(metaUrl).read() |
|
dom = Parse(txt) |
|
break |
|
except: |
|
zLOG.LOG("ERROR documentViewer (getPresentationInfoXML)", zLOG.INFO,"%s (%s)"%sys.exc_info()[0:2]) |
|
|
|
if dom is None: |
|
raise IOError("Unable to read infoXMLfrom %s"%(url)) |
|
|
|
return dom |
|
|
|
|
def getAuthinfoFromIndexMeta(self,path,docinfo=None,dom=None): |
def getAuthinfoFromIndexMeta(self,path,docinfo=None,dom=None): |
"""gets authorization info from the index.meta file at path or given by dom""" |
"""gets authorization info from the index.meta file at path or given by dom""" |
Line 284 class documentViewer(Folder):
|
Line 320 class documentViewer(Folder):
|
if dom is None: |
if dom is None: |
dom = self.getIndexMeta(url) |
dom = self.getIndexMeta(url) |
|
|
|
archivePath = None |
|
archiveName = None |
|
|
archiveNames=dom.xpath("//resource/name") |
archiveNames=dom.xpath("//resource/name") |
if archiveNames and (len(archiveNames)>0): |
if archiveNames and (len(archiveNames)>0): |
archiveName=getTextFromNode(archiveNames[0]) |
archiveName=getTextFromNode(archiveNames[0]) |
|
else: |
|
zLOG.LOG("documentViewer (getdocinfofromtexttool)", zLOG.WARNING,"resource/name missing in: %s"%(url)) |
|
|
archivePaths=dom.xpath("//resource/archive-path") |
archivePaths=dom.xpath("//resource/archive-path") |
if archivePaths and (len(archivePaths)>0): |
if archivePaths and (len(archivePaths)>0): |
Line 294 class documentViewer(Folder):
|
Line 335 class documentViewer(Folder):
|
# clean up archive path |
# clean up archive path |
if archivePath[0] != '/': |
if archivePath[0] != '/': |
archivePath = '/' + archivePath |
archivePath = '/' + archivePath |
if not archivePath.endswith(archiveName): |
if archiveName and (not archivePath.endswith(archiveName)): |
archivePath += "/" + archiveName |
archivePath += "/" + archiveName |
else: |
else: |
archivePath=None |
# try to get archive-path from url |
|
zLOG.LOG("documentViewer (getdocinfofromtexttool)", zLOG.WARNING,"resource/archive-path missing in: %s"%(url)) |
|
if (not url.startswith('http')): |
|
archivePath = url.replace('index.meta', '') |
|
|
|
if archivePath is None: |
|
# we balk without archive-path |
|
raise IOError("Missing archive-path (for text-tool) in %s"%(url)) |
|
|
imageDirs=dom.xpath("//texttool/image") |
imageDirs=dom.xpath("//texttool/image") |
if imageDirs and (len(imageDirs)>0): |
if imageDirs and (len(imageDirs)>0): |
Line 322 class documentViewer(Folder):
|
Line 370 class documentViewer(Folder):
|
textUrls=dom.xpath("//texttool/text") |
textUrls=dom.xpath("//texttool/text") |
if textUrls and (len(textUrls)>0): |
if textUrls and (len(textUrls)>0): |
textUrl=getTextFromNode(textUrls[0]) |
textUrl=getTextFromNode(textUrls[0]) |
|
if urlparse.urlparse(textUrl)[0]=="": #keine url |
|
textUrl=os.path.join(archivePath,textUrl) |
|
|
docinfo['textURL'] = textUrl |
docinfo['textURL'] = textUrl |
|
|
|
|
|
presentationUrls=dom.xpath("//texttool/presentation") |
|
if presentationUrls and (len(presentationUrls)>0): |
|
# presentation url ergiebt sich ersetzen von index.meta in der url der fŸr die Metadaten |
|
# durch den relativen Pfad auf die presentation infos |
|
presentationUrl=url.replace('index.meta',getTextFromNode(presentationUrls[0])) |
|
|
|
docinfo = self.getBibinfoFromTextToolPresentation(presentationUrl,docinfo=docinfo,dom=dom) |
|
else: |
docinfo = self.getBibinfoFromIndexMeta(url,docinfo=docinfo,dom=dom) |
docinfo = self.getBibinfoFromIndexMeta(url,docinfo=docinfo,dom=dom) |
docinfo = self.getAuthinfoFromIndexMeta(url,docinfo=docinfo,dom=dom) |
docinfo = self.getAuthinfoFromIndexMeta(url,docinfo=docinfo,dom=dom) |
return docinfo |
return docinfo |
|
|
|
|
|
def getBibinfoFromTextToolPresentation(self,url,docinfo=None,dom=None): |
|
"""gets the bibliographical information from the preseantion entry in texttools |
|
""" |
|
dom=self.getPresentationInfoXML(url) |
|
docinfo['author']=getTextFromNode(dom.xpath("//author")[0]) |
|
docinfo['title']=getTextFromNode(dom.xpath("//title")[0]) |
|
docinfo['year']=getTextFromNode(dom.xpath("//date")[0]) |
|
return docinfo |
|
|
def getDocinfoFromImagePath(self,path,docinfo=None): |
def getDocinfoFromImagePath(self,path,docinfo=None): |
"""path ist the path to the images it assumes that the index.meta file is one level higher.""" |
"""path ist the path to the images it assumes that the index.meta file is one level higher.""" |
zLOG.LOG("documentViewer (getdocinfofromimagepath)", zLOG.INFO,"path: %s"%(path)) |
zLOG.LOG("documentViewer (getdocinfofromimagepath)", zLOG.INFO,"path: %s"%(path)) |
Line 349 class documentViewer(Folder):
|
Line 418 class documentViewer(Folder):
|
"""returns docinfo depending on mode""" |
"""returns docinfo depending on mode""" |
zLOG.LOG("documentViewer (getdocinfo)", zLOG.INFO,"mode: %s, url: %s"%(mode,url)) |
zLOG.LOG("documentViewer (getdocinfo)", zLOG.INFO,"mode: %s, url: %s"%(mode,url)) |
# look for cached docinfo in session |
# look for cached docinfo in session |
if self.REQUEST.SESSION.has_key('docinfo'): |
# XXXX Sesion abgeschaltet |
|
if self.REQUEST.SESSION.has_key('docinfo_XX'): |
docinfo = self.REQUEST.SESSION['docinfo'] |
docinfo = self.REQUEST.SESSION['docinfo'] |
# check if its still current |
# check if its still current |
if docinfo is not None and docinfo.get('mode') == mode and docinfo.get('url') == url: |
if docinfo is not None and docinfo.get('mode') == mode and docinfo.get('url') == url: |
Line 450 class documentViewer(Folder):
|
Line 520 class documentViewer(Folder):
|
def findDigilibUrl(self): |
def findDigilibUrl(self): |
"""try to get the digilib URL from zogilib""" |
"""try to get the digilib URL from zogilib""" |
url = self.imageViewerUrl[:-1] + "/getScalerUrl" |
url = self.imageViewerUrl[:-1] + "/getScalerUrl" |
|
#print urlparse.urlparse(url)[0] |
|
#print urlparse.urljoin(self.absolute_url(),url) |
|
logging.info("finddigiliburl: %s"%urlparse.urlparse(url)[0]) |
|
logging.info("finddigiliburl: %s"%urlparse.urljoin(self.absolute_url(),url)) |
|
|
try: |
try: |
|
if urlparse.urlparse(url)[0]=='': #relative path |
|
url=urlparse.urljoin(self.absolute_url()+"/",url) |
|
|
scaler = urlopen(url).read() |
scaler = urlopen(url).read() |
return scaler.replace("/servlet/Scaler?", "") |
return scaler.replace("/servlet/Scaler?", "") |
except: |
except: |
return None |
return None |
|
|
def changeDocumentViewer(self,imageViewerUrl,title="",digilibBaseUrl=None,thumbrows=2,thumbcols=10,authgroups='mpiwg',RESPONSE=None): |
def changeDocumentViewer(self,imageViewerUrl,textViewerUrl,title="",digilibBaseUrl=None,thumbrows=2,thumbcols=10,authgroups='mpiwg',RESPONSE=None): |
"""init document viewer""" |
"""init document viewer""" |
self.title=title |
self.title=title |
self.imageViewerUrl=imageViewerUrl |
self.imageViewerUrl=imageViewerUrl |
|
self.textViewerUrl=textViewerUrl |
self.digilibBaseUrl = digilibBaseUrl |
self.digilibBaseUrl = digilibBaseUrl |
self.thumbrows = thumbrows |
self.thumbrows = thumbrows |
self.thumbcols = thumbcols |
self.thumbcols = thumbcols |
Line 477 def manage_AddDocumentViewerForm(self):
|
Line 556 def manage_AddDocumentViewerForm(self):
|
pt=PageTemplateFile('zpt/addDocumentViewer', globals()).__of__(self) |
pt=PageTemplateFile('zpt/addDocumentViewer', globals()).__of__(self) |
return pt() |
return pt() |
|
|
def manage_AddDocumentViewer(self,id,imageViewerUrl="",title="",RESPONSE=None): |
def manage_AddDocumentViewer(self,id,imageViewerUrl="",textViewerUrl="",title="",RESPONSE=None): |
"""add the viewer""" |
"""add the viewer""" |
newObj=documentViewer(id,imageViewerUrl,title) |
newObj=documentViewer(id,imageViewerUrl,title=title,textViewerUrl=textViewerUrl) |
self._setObject(id,newObj) |
self._setObject(id,newObj) |
|
|
if RESPONSE is not None: |
if RESPONSE is not None: |