annotate documentViewer.py @ 528:f8a5f63eafc0

new viewMode=thumbs.
author casties
date Fri, 13 Apr 2012 16:55:16 +0200
parents 3f375a048402
children 5c7433c2515c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
dwinter
parents:
diff changeset
1 from OFS.Folder import Folder
dwinter
parents:
diff changeset
2 from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
486
f2c5417b7ff4 more new template stuff
casties
parents: 483
diff changeset
3 from Products.PageTemplates.PageTemplateFile import PageTemplateFile
487
8fd6f26fe29e more new templates
casties
parents: 486
diff changeset
4 from App.ImageFile import ImageFile
0
dwinter
parents:
diff changeset
5 from AccessControl import ClassSecurityInfo
32
b25c89d693cf version 0.2.3 - first version with access control!
casties
parents: 31
diff changeset
6 from AccessControl import getSecurityManager
0
dwinter
parents:
diff changeset
7 from Globals import package_home
dwinter
parents:
diff changeset
8
453
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
9 import xml.etree.ElementTree as ET
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
10
489
55e3398e395e more new templates. monkey-patch for App.ImageFile.
casties
parents: 488
diff changeset
11 import os
31
c6451e8d5d23 more small fixes - now version 0.2.2
casties
parents: 29
diff changeset
12 import sys
0
dwinter
parents:
diff changeset
13 import urllib
50
6c0f20cecc60 added evaluation of the presentation/info.xml in texttools
dwinter
parents: 49
diff changeset
14 import logging
61
f3d2f240692c fixed bug in calculation of group numbers
casties
parents: 59
diff changeset
15 import math
46
31059e3d9338 has now also a text mode viewMode=text
dwinter
parents: 45
diff changeset
16 import urlparse
174
5780092e4989 *** empty log message ***
dwinter
parents: 173
diff changeset
17 import re
389
114d40b358ab *** empty log message ***
abukhman
parents: 387
diff changeset
18 import string
526
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
19 import json
231
a88ece9a5e74 *** empty log message ***
abukhman
parents: 230
diff changeset
20
514
c55e376be01b search works even with unicode...
casties
parents: 513
diff changeset
21 from SrvTxtUtils import getInt, utf8ify, getText, getHttpData, refreshingImageFileIndexHtml
52
92047eaa6272 zLOG exchanged by logging
dwinter
parents: 51
diff changeset
22
453
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
23 def serializeNode(node, encoding="utf-8"):
84
a6e4f9b6729a first version with new full-text infrastructure and slightly changed templates
casties
parents: 83
diff changeset
24 """returns a string containing node as XML"""
453
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
25 s = ET.tostring(node)
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
26
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
27 # 4Suite:
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
28 # stream = cStringIO.StringIO()
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
29 # Ft.Xml.Domlette.Print(node, stream=stream, encoding=encoding)
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
30 # s = stream.getvalue()
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
31 # stream.close()
84
a6e4f9b6729a first version with new full-text infrastructure and slightly changed templates
casties
parents: 83
diff changeset
32 return s
a6e4f9b6729a first version with new full-text infrastructure and slightly changed templates
casties
parents: 83
diff changeset
33
387
580db757e0eb *** empty log message ***
abukhman
parents: 386
diff changeset
34 def browserCheck(self):
580db757e0eb *** empty log message ***
abukhman
parents: 386
diff changeset
35 """check the browsers request to find out the browser type"""
580db757e0eb *** empty log message ***
abukhman
parents: 386
diff changeset
36 bt = {}
580db757e0eb *** empty log message ***
abukhman
parents: 386
diff changeset
37 ua = self.REQUEST.get_header("HTTP_USER_AGENT")
580db757e0eb *** empty log message ***
abukhman
parents: 386
diff changeset
38 bt['ua'] = ua
580db757e0eb *** empty log message ***
abukhman
parents: 386
diff changeset
39 bt['isIE'] = False
580db757e0eb *** empty log message ***
abukhman
parents: 386
diff changeset
40 bt['isN4'] = False
453
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
41 bt['versFirefox']=""
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
42 bt['versIE']=""
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
43 bt['versSafariChrome']=""
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
44 bt['versOpera']=""
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
45
387
580db757e0eb *** empty log message ***
abukhman
parents: 386
diff changeset
46 if string.find(ua, 'MSIE') > -1:
580db757e0eb *** empty log message ***
abukhman
parents: 386
diff changeset
47 bt['isIE'] = True
580db757e0eb *** empty log message ***
abukhman
parents: 386
diff changeset
48 else:
580db757e0eb *** empty log message ***
abukhman
parents: 386
diff changeset
49 bt['isN4'] = (string.find(ua, 'Mozilla/4.') > -1)
453
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
50 # Safari oder Chrome identification
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
51 try:
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
52 nav = ua[string.find(ua, '('):]
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
53 nav1=ua[string.find(ua,')'):]
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
54 nav2=nav1[string.find(nav1,'('):]
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
55 nav3=nav2[string.find(nav2,')'):]
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
56 ie = string.split(nav, "; ")[1]
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
57 ie1 =string.split(nav1, " ")[2]
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
58 ie2 =string.split(nav3, " ")[1]
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
59 ie3 =string.split(nav3, " ")[2]
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
60 if string.find(ie3, "Safari") >-1:
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
61 bt['versSafariChrome']=string.split(ie2, "/")[1]
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
62 except: pass
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
63 # IE identification
387
580db757e0eb *** empty log message ***
abukhman
parents: 386
diff changeset
64 try:
580db757e0eb *** empty log message ***
abukhman
parents: 386
diff changeset
65 nav = ua[string.find(ua, '('):]
580db757e0eb *** empty log message ***
abukhman
parents: 386
diff changeset
66 ie = string.split(nav, "; ")[1]
580db757e0eb *** empty log message ***
abukhman
parents: 386
diff changeset
67 if string.find(ie, "MSIE") > -1:
580db757e0eb *** empty log message ***
abukhman
parents: 386
diff changeset
68 bt['versIE'] = string.split(ie, " ")[1]
453
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
69 except:pass
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
70 # Firefox identification
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
71 try:
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
72 nav = ua[string.find(ua, '('):]
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
73 nav1=ua[string.find(ua,')'):]
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
74 if string.find(ie1, "Firefox") >-1:
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
75 nav5= string.split(ie1, "/")[1]
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
76 logging.debug("FIREFOX: %s"%(nav5))
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
77 bt['versFirefox']=nav5[0:3]
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
78 except:pass
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
79 #Opera identification
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
80 try:
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
81 if string.find(ua,"Opera") >-1:
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
82 nav = ua[string.find(ua, '('):]
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
83 nav1=nav[string.find(nav,')'):]
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
84 bt['versOpera']=string.split(nav1,"/")[2]
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
85 except:pass
387
580db757e0eb *** empty log message ***
abukhman
parents: 386
diff changeset
86
580db757e0eb *** empty log message ***
abukhman
parents: 386
diff changeset
87 bt['isMac'] = string.find(ua, 'Macintosh') > -1
580db757e0eb *** empty log message ***
abukhman
parents: 386
diff changeset
88 bt['isWin'] = string.find(ua, 'Windows') > -1
580db757e0eb *** empty log message ***
abukhman
parents: 386
diff changeset
89 bt['isIEWin'] = bt['isIE'] and bt['isWin']
580db757e0eb *** empty log message ***
abukhman
parents: 386
diff changeset
90 bt['isIEMac'] = bt['isIE'] and bt['isMac']
580db757e0eb *** empty log message ***
abukhman
parents: 386
diff changeset
91 bt['staticHTML'] = False
580db757e0eb *** empty log message ***
abukhman
parents: 386
diff changeset
92
580db757e0eb *** empty log message ***
abukhman
parents: 386
diff changeset
93 return bt
234
0813585df9f4 *** empty log message ***
abukhman
parents: 231
diff changeset
94
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
95 def getParentPath(path, cnt=1):
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
96 """returns pathname shortened by cnt"""
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
97 # make sure path doesn't end with /
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
98 path = path.rstrip('/')
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
99 # split by /, shorten, and reassemble
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
100 return '/'.join(path.split('/')[0:-cnt])
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
101
22
b139f9937e97 preliminary version 0.2
casties
parents: 20
diff changeset
102 ##
b139f9937e97 preliminary version 0.2
casties
parents: 20
diff changeset
103 ## documentViewer class
b139f9937e97 preliminary version 0.2
casties
parents: 20
diff changeset
104 ##
b139f9937e97 preliminary version 0.2
casties
parents: 20
diff changeset
105 class documentViewer(Folder):
0
dwinter
parents:
diff changeset
106 """document viewer"""
dwinter
parents:
diff changeset
107 meta_type="Document viewer"
dwinter
parents:
diff changeset
108
dwinter
parents:
diff changeset
109 security=ClassSecurityInfo()
22
b139f9937e97 preliminary version 0.2
casties
parents: 20
diff changeset
110 manage_options=Folder.manage_options+(
507
3c01e8f4e72b renamed config tab in ZMI
casties
parents: 506
diff changeset
111 {'label':'Configuration','action':'changeDocumentViewerForm'},
0
dwinter
parents:
diff changeset
112 )
463
89ad327b4bbd more renovation
casties
parents: 462
diff changeset
113
89ad327b4bbd more renovation
casties
parents: 462
diff changeset
114 metadataService = None
89ad327b4bbd more renovation
casties
parents: 462
diff changeset
115 """MetaDataFolder instance"""
525
70c3ae5eac7c layers can have their own templates.
casties
parents: 518
diff changeset
116
0
dwinter
parents:
diff changeset
117
525
70c3ae5eac7c layers can have their own templates.
casties
parents: 518
diff changeset
118 #
22
b139f9937e97 preliminary version 0.2
casties
parents: 20
diff changeset
119 # templates and forms
525
70c3ae5eac7c layers can have their own templates.
casties
parents: 518
diff changeset
120 #
70c3ae5eac7c layers can have their own templates.
casties
parents: 518
diff changeset
121 # viewMode templates
479
fe5b0e4ac5f2 starting new templates in product
casties
parents: 478
diff changeset
122 viewer_text = PageTemplateFile('zpt/viewer_text', globals())
503
030251fe9dbc more cleanup.
casties
parents: 501
diff changeset
123 viewer_xml = PageTemplateFile('zpt/viewer_xml', globals())
483
ab9b34a1c62a more new templates
casties
parents: 482
diff changeset
124 viewer_images = PageTemplateFile('zpt/viewer_images', globals())
499
3f9703746fef more cleanup. new template for viewMode=index (not pretty so far).
casties
parents: 498
diff changeset
125 viewer_index = PageTemplateFile('zpt/viewer_index', globals())
528
f8a5f63eafc0 new viewMode=thumbs.
casties
parents: 526
diff changeset
126 viewer_thumbs = PageTemplateFile('zpt/viewer_thumbs', globals())
525
70c3ae5eac7c layers can have their own templates.
casties
parents: 518
diff changeset
127 # available layer types
526
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
128 builtinLayers = {'text': ['dict','search','gis','annotator'],
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
129 'xml': None, 'images': None, 'index': None}
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
130 availableLayers = builtinLayers;
525
70c3ae5eac7c layers can have their own templates.
casties
parents: 518
diff changeset
131 # layer templates
526
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
132 layer_text_dict = PageTemplateFile('zpt/layer_text_dict', globals())
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
133 layer_text_search = PageTemplateFile('zpt/layer_text_search', globals())
525
70c3ae5eac7c layers can have their own templates.
casties
parents: 518
diff changeset
134 layer_text_annotator = PageTemplateFile('zpt/layer_text_annotator', globals())
70c3ae5eac7c layers can have their own templates.
casties
parents: 518
diff changeset
135 layer_text_gis = PageTemplateFile('zpt/layer_text_gis', globals())
70c3ae5eac7c layers can have their own templates.
casties
parents: 518
diff changeset
136 # toc templates
90
6a4a72033d58 new version with new full-text infrastructure and some more changed templates
casties
parents: 84
diff changeset
137 toc_thumbs = PageTemplateFile('zpt/toc_thumbs', globals())
6a4a72033d58 new version with new full-text infrastructure and some more changed templates
casties
parents: 84
diff changeset
138 toc_text = PageTemplateFile('zpt/toc_text', globals())
6a4a72033d58 new version with new full-text infrastructure and some more changed templates
casties
parents: 84
diff changeset
139 toc_figures = PageTemplateFile('zpt/toc_figures', globals())
526
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
140 toc_concordance = PageTemplateFile('zpt/toc_concordance', globals())
491
fe319aa0ba30 added toc_none template.
casties
parents: 490
diff changeset
141 toc_none = PageTemplateFile('zpt/toc_none', globals())
525
70c3ae5eac7c layers can have their own templates.
casties
parents: 518
diff changeset
142 # other templates
501
29c6d09a506c more cleanup.
casties
parents: 499
diff changeset
143 common_template = PageTemplateFile('zpt/common_template', globals())
57
7cdb0fc34a92 added getInfo_xml method
casties
parents: 55
diff changeset
144 info_xml = PageTemplateFile('zpt/info_xml', globals())
487
8fd6f26fe29e more new templates
casties
parents: 486
diff changeset
145 docuviewer_css = ImageFile('css/docuviewer.css',globals())
489
55e3398e395e more new templates. monkey-patch for App.ImageFile.
casties
parents: 488
diff changeset
146 # make ImageFile better for development
490
6f116b86a226 more new template stuff. moved ImageFile index method to SrvTxtUtils
casties
parents: 489
diff changeset
147 docuviewer_css.index_html = refreshingImageFileIndexHtml
501
29c6d09a506c more cleanup.
casties
parents: 499
diff changeset
148 jquery_js = ImageFile('js/jquery.js',globals())
130
5c779d7b5f71 more modular version with separate object MpdlXmlTextServer
casties
parents: 128
diff changeset
149
5c779d7b5f71 more modular version with separate object MpdlXmlTextServer
casties
parents: 128
diff changeset
150
95
db6d594aa4d9 Last update with search function (getSearch)
abukhman
parents: 90
diff changeset
151 def __init__(self,id,imageScalerUrl=None,textServerName=None,title="",digilibBaseUrl=None,thumbcols=2,thumbrows=5,authgroups="mpiwg"):
0
dwinter
parents:
diff changeset
152 """init document viewer"""
dwinter
parents:
diff changeset
153 self.id=id
dwinter
parents:
diff changeset
154 self.title=title
25
e93fb8cadd3a new, less preliminary version 0.2
casties
parents: 22
diff changeset
155 self.thumbcols = thumbcols
e93fb8cadd3a new, less preliminary version 0.2
casties
parents: 22
diff changeset
156 self.thumbrows = thumbrows
32
b25c89d693cf version 0.2.3 - first version with access control!
casties
parents: 31
diff changeset
157 # authgroups is list of authorized groups (delimited by ,)
b25c89d693cf version 0.2.3 - first version with access control!
casties
parents: 31
diff changeset
158 self.authgroups = [s.strip().lower() for s in authgroups.split(',')]
84
a6e4f9b6729a first version with new full-text infrastructure and slightly changed templates
casties
parents: 83
diff changeset
159 # create template folder so we can always use template.something
a6e4f9b6729a first version with new full-text infrastructure and slightly changed templates
casties
parents: 83
diff changeset
160
a6e4f9b6729a first version with new full-text infrastructure and slightly changed templates
casties
parents: 83
diff changeset
161 templateFolder = Folder('template')
498
3146b4e7b6a5 more clean up.
casties
parents: 491
diff changeset
162 self['template'] = templateFolder # Zope-2.12 style
3146b4e7b6a5 more clean up.
casties
parents: 491
diff changeset
163 #self._setObject('template',templateFolder) # old style
84
a6e4f9b6729a first version with new full-text infrastructure and slightly changed templates
casties
parents: 83
diff changeset
164 try:
130
5c779d7b5f71 more modular version with separate object MpdlXmlTextServer
casties
parents: 128
diff changeset
165 import MpdlXmlTextServer
132
39167e96e582 fixed creation of text server on __init__
casties
parents: 130
diff changeset
166 textServer = MpdlXmlTextServer.MpdlXmlTextServer(id='fulltextclient',serverName=textServerName)
498
3146b4e7b6a5 more clean up.
casties
parents: 491
diff changeset
167 templateFolder['fulltextclient'] = textServer
3146b4e7b6a5 more clean up.
casties
parents: 491
diff changeset
168 #templateFolder._setObject('fulltextclient',textServer)
84
a6e4f9b6729a first version with new full-text infrastructure and slightly changed templates
casties
parents: 83
diff changeset
169 except Exception, e:
130
5c779d7b5f71 more modular version with separate object MpdlXmlTextServer
casties
parents: 128
diff changeset
170 logging.error("Unable to create MpdlXmlTextServer for fulltextclient: "+str(e))
463
89ad327b4bbd more renovation
casties
parents: 462
diff changeset
171
84
a6e4f9b6729a first version with new full-text infrastructure and slightly changed templates
casties
parents: 83
diff changeset
172 try:
a6e4f9b6729a first version with new full-text infrastructure and slightly changed templates
casties
parents: 83
diff changeset
173 from Products.zogiLib.zogiLib import zogiLib
a6e4f9b6729a first version with new full-text infrastructure and slightly changed templates
casties
parents: 83
diff changeset
174 zogilib = zogiLib(id="zogilib", title="zogilib for docuviewer", dlServerURL=imageScalerUrl, layout="book")
498
3146b4e7b6a5 more clean up.
casties
parents: 491
diff changeset
175 templateFolder['zogilib'] = zogilib
3146b4e7b6a5 more clean up.
casties
parents: 491
diff changeset
176 #templateFolder._setObject('zogilib',zogilib)
84
a6e4f9b6729a first version with new full-text infrastructure and slightly changed templates
casties
parents: 83
diff changeset
177 except Exception, e:
a6e4f9b6729a first version with new full-text infrastructure and slightly changed templates
casties
parents: 83
diff changeset
178 logging.error("Unable to create zogiLib for zogilib: "+str(e))
463
89ad327b4bbd more renovation
casties
parents: 462
diff changeset
179
89ad327b4bbd more renovation
casties
parents: 462
diff changeset
180 try:
89ad327b4bbd more renovation
casties
parents: 462
diff changeset
181 # assume MetaDataFolder instance is called metadata
89ad327b4bbd more renovation
casties
parents: 462
diff changeset
182 self.metadataService = getattr(self, 'metadata')
89ad327b4bbd more renovation
casties
parents: 462
diff changeset
183 except Exception, e:
89ad327b4bbd more renovation
casties
parents: 462
diff changeset
184 logging.error("Unable to find MetaDataFolder 'metadata': "+str(e))
89ad327b4bbd more renovation
casties
parents: 462
diff changeset
185
477
17f0290b2327 small fixes.
casties
parents: 476
diff changeset
186 if digilibBaseUrl is not None:
17f0290b2327 small fixes.
casties
parents: 476
diff changeset
187 self.digilibBaseUrl = digilibBaseUrl
17f0290b2327 small fixes.
casties
parents: 476
diff changeset
188
130
5c779d7b5f71 more modular version with separate object MpdlXmlTextServer
casties
parents: 128
diff changeset
189
5c779d7b5f71 more modular version with separate object MpdlXmlTextServer
casties
parents: 128
diff changeset
190 # proxy text server methods to fulltextclient
5c779d7b5f71 more modular version with separate object MpdlXmlTextServer
casties
parents: 128
diff changeset
191 def getTextPage(self, **args):
498
3146b4e7b6a5 more clean up.
casties
parents: 491
diff changeset
192 """returns full text content of page"""
130
5c779d7b5f71 more modular version with separate object MpdlXmlTextServer
casties
parents: 128
diff changeset
193 return self.template.fulltextclient.getTextPage(**args)
22
b139f9937e97 preliminary version 0.2
casties
parents: 20
diff changeset
194
508
d5a47f82e755 more cleanup.
casties
parents: 507
diff changeset
195 def getSearchResults(self, **args):
d5a47f82e755 more cleanup.
casties
parents: 507
diff changeset
196 """loads list of search results and stores XML in docinfo"""
d5a47f82e755 more cleanup.
casties
parents: 507
diff changeset
197 return self.template.fulltextclient.getSearchResults(**args)
d5a47f82e755 more cleanup.
casties
parents: 507
diff changeset
198
d5a47f82e755 more cleanup.
casties
parents: 507
diff changeset
199 def getResultsPage(self, **args):
d5a47f82e755 more cleanup.
casties
parents: 507
diff changeset
200 """returns one page of the search results"""
d5a47f82e755 more cleanup.
casties
parents: 507
diff changeset
201 return self.template.fulltextclient.getResultsPage(**args)
d5a47f82e755 more cleanup.
casties
parents: 507
diff changeset
202
516
7d7b639d7be7 add methods to use doc-info.xql.
casties
parents: 514
diff changeset
203 def getTextInfo(self, **args):
7d7b639d7be7 add methods to use doc-info.xql.
casties
parents: 514
diff changeset
204 """returns document info from the text server"""
7d7b639d7be7 add methods to use doc-info.xql.
casties
parents: 514
diff changeset
205 return self.template.fulltextclient.getTextInfo(**args)
7d7b639d7be7 add methods to use doc-info.xql.
casties
parents: 514
diff changeset
206
499
3f9703746fef more cleanup. new template for viewMode=index (not pretty so far).
casties
parents: 498
diff changeset
207 def getToc(self, **args):
508
d5a47f82e755 more cleanup.
casties
parents: 507
diff changeset
208 """loads table of contents and stores XML in docinfo"""
499
3f9703746fef more cleanup. new template for viewMode=index (not pretty so far).
casties
parents: 498
diff changeset
209 return self.template.fulltextclient.getToc(**args)
3f9703746fef more cleanup. new template for viewMode=index (not pretty so far).
casties
parents: 498
diff changeset
210
3f9703746fef more cleanup. new template for viewMode=index (not pretty so far).
casties
parents: 498
diff changeset
211 def getTocPage(self, **args):
3f9703746fef more cleanup. new template for viewMode=index (not pretty so far).
casties
parents: 498
diff changeset
212 """returns one page of the table of contents"""
3f9703746fef more cleanup. new template for viewMode=index (not pretty so far).
casties
parents: 498
diff changeset
213 return self.template.fulltextclient.getTocPage(**args)
3f9703746fef more cleanup. new template for viewMode=index (not pretty so far).
casties
parents: 498
diff changeset
214
506
67014399894d cleaned out all 4suite code and weird methods.
casties
parents: 503
diff changeset
215 def getPlacesOnPage(self, **args):
67014399894d cleaned out all 4suite code and weird methods.
casties
parents: 503
diff changeset
216 """get list of gis places on one page"""
67014399894d cleaned out all 4suite code and weird methods.
casties
parents: 503
diff changeset
217 return self.template.fulltextclient.getPlacesOnPage(**args)
307
ec5e920a61e6 *** empty log message ***
abukhman
parents: 256
diff changeset
218
498
3146b4e7b6a5 more clean up.
casties
parents: 491
diff changeset
219 #WTF?
499
3f9703746fef more cleanup. new template for viewMode=index (not pretty so far).
casties
parents: 498
diff changeset
220 thumbs_main_rss = PageTemplateFile('zpt/thumbs_main_rss', globals())
68
b8457fc33446 piclens rss/support
dwinter
parents: 65
diff changeset
221 security.declareProtected('View','thumbs_rss')
b8457fc33446 piclens rss/support
dwinter
parents: 65
diff changeset
222 def thumbs_rss(self,mode,url,viewMode="auto",start=None,pn=1):
b8457fc33446 piclens rss/support
dwinter
parents: 65
diff changeset
223 '''
b8457fc33446 piclens rss/support
dwinter
parents: 65
diff changeset
224 view it
b8457fc33446 piclens rss/support
dwinter
parents: 65
diff changeset
225 @param mode: defines how to access the document behind url
b8457fc33446 piclens rss/support
dwinter
parents: 65
diff changeset
226 @param url: url which contains display information
b8457fc33446 piclens rss/support
dwinter
parents: 65
diff changeset
227 @param viewMode: if images display images, if text display text, default is images (text,images or auto)
b8457fc33446 piclens rss/support
dwinter
parents: 65
diff changeset
228
b8457fc33446 piclens rss/support
dwinter
parents: 65
diff changeset
229 '''
167
7e2b97941a66 characterNormalization
abukhman
parents: 166
diff changeset
230 logging.debug("HHHHHHHHHHHHHH:load the rss")
458
48b135b089c8 more renovation
casties
parents: 457
diff changeset
231 logging.debug("documentViewer (index) mode: %s url:%s start:%s pn:%s"%(mode,url,start,pn))
68
b8457fc33446 piclens rss/support
dwinter
parents: 65
diff changeset
232
b8457fc33446 piclens rss/support
dwinter
parents: 65
diff changeset
233 if not hasattr(self, 'template'):
b8457fc33446 piclens rss/support
dwinter
parents: 65
diff changeset
234 # create template folder if it doesn't exist
b8457fc33446 piclens rss/support
dwinter
parents: 65
diff changeset
235 self.manage_addFolder('template')
b8457fc33446 piclens rss/support
dwinter
parents: 65
diff changeset
236
b8457fc33446 piclens rss/support
dwinter
parents: 65
diff changeset
237 if not self.digilibBaseUrl:
b8457fc33446 piclens rss/support
dwinter
parents: 65
diff changeset
238 self.digilibBaseUrl = self.findDigilibUrl() or "http://nausikaa.mpiwg-berlin.mpg.de/digitallibrary"
b8457fc33446 piclens rss/support
dwinter
parents: 65
diff changeset
239
b8457fc33446 piclens rss/support
dwinter
parents: 65
diff changeset
240 docinfo = self.getDocinfo(mode=mode,url=url)
338
0576f524e2ee *** empty log message ***
abukhman
parents: 337
diff changeset
241 #pageinfo = self.getPageinfo(start=start,current=pn,docinfo=docinfo)
345
c39c252a3186 *** empty log message ***
abukhman
parents: 343
diff changeset
242 pageinfo = self.getPageinfo(start=start,current=pn, docinfo=docinfo)
331
6cde7f02786e *** empty log message ***
abukhman
parents: 330
diff changeset
243 ''' ZDES '''
68
b8457fc33446 piclens rss/support
dwinter
parents: 65
diff changeset
244 pt = getattr(self.template, 'thumbs_main_rss')
b8457fc33446 piclens rss/support
dwinter
parents: 65
diff changeset
245
b8457fc33446 piclens rss/support
dwinter
parents: 65
diff changeset
246 if viewMode=="auto": # automodus gewaehlt
453
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
247 if docinfo.has_key("textURL") or docinfo.get('textURLPath',None): #texturl gesetzt und textViewer konfiguriert
68
b8457fc33446 piclens rss/support
dwinter
parents: 65
diff changeset
248 viewMode="text"
b8457fc33446 piclens rss/support
dwinter
parents: 65
diff changeset
249 else:
b8457fc33446 piclens rss/support
dwinter
parents: 65
diff changeset
250 viewMode="images"
b8457fc33446 piclens rss/support
dwinter
parents: 65
diff changeset
251
b8457fc33446 piclens rss/support
dwinter
parents: 65
diff changeset
252 return pt(docinfo=docinfo,pageinfo=pageinfo,viewMode=viewMode)
465
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
253
68
b8457fc33446 piclens rss/support
dwinter
parents: 65
diff changeset
254
22
b139f9937e97 preliminary version 0.2
casties
parents: 20
diff changeset
255 security.declareProtected('View','index_html')
503
030251fe9dbc more cleanup.
casties
parents: 501
diff changeset
256 def index_html(self,url,mode="texttool",viewMode="auto",viewLayer=None,tocMode="thumbs",start=1,pn=1):
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
257 """
471
415a7026eeda split viewMode in viewMode and viewType
casties
parents: 469
diff changeset
258 view page
415a7026eeda split viewMode in viewMode and viewType
casties
parents: 469
diff changeset
259 @param url: url which contains display information
57
7cdb0fc34a92 added getInfo_xml method
casties
parents: 55
diff changeset
260 @param mode: defines how to access the document behind url
503
030251fe9dbc more cleanup.
casties
parents: 501
diff changeset
261 @param viewMode: 'images': display images, 'text': display text, 'xml': display xml, default is 'auto'
030251fe9dbc more cleanup.
casties
parents: 501
diff changeset
262 @param viewLayer: sub-type of viewMode, e.g. 'dict' for viewMode='text'
99
4738a696d265 Search function update
abukhman
parents: 97
diff changeset
263 @param tocMode: type of 'table of contents' for navigation (thumbs, text, figures, none)
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
264 """
0
dwinter
parents:
diff changeset
265
503
030251fe9dbc more cleanup.
casties
parents: 501
diff changeset
266 logging.debug("documentViewer(index_html) mode=%s url=%s viewMode=%s viewLayer=%s start=%s pn=%s"%(mode,url,viewMode,viewLayer,start,pn))
22
b139f9937e97 preliminary version 0.2
casties
parents: 20
diff changeset
267
b139f9937e97 preliminary version 0.2
casties
parents: 20
diff changeset
268 if not hasattr(self, 'template'):
84
a6e4f9b6729a first version with new full-text infrastructure and slightly changed templates
casties
parents: 83
diff changeset
269 # this won't work
a6e4f9b6729a first version with new full-text infrastructure and slightly changed templates
casties
parents: 83
diff changeset
270 logging.error("template folder missing!")
a6e4f9b6729a first version with new full-text infrastructure and slightly changed templates
casties
parents: 83
diff changeset
271 return "ERROR: template folder missing!"
22
b139f9937e97 preliminary version 0.2
casties
parents: 20
diff changeset
272
84
a6e4f9b6729a first version with new full-text infrastructure and slightly changed templates
casties
parents: 83
diff changeset
273 if not getattr(self, 'digilibBaseUrl', None):
132
39167e96e582 fixed creation of text server on __init__
casties
parents: 130
diff changeset
274 self.digilibBaseUrl = self.findDigilibUrl() or "http://digilib.mpiwg-berlin.mpg.de/digitallibrary"
22
b139f9937e97 preliminary version 0.2
casties
parents: 20
diff changeset
275
518
91051b36b9cc uses xml info from doc-info.xql for table of contents now.
casties
parents: 516
diff changeset
276 docinfo = self.getDocinfo(mode=mode,url=url,tocMode=tocMode)
97
2b8fd19432fb Last update
abukhman
parents: 96
diff changeset
277
471
415a7026eeda split viewMode in viewMode and viewType
casties
parents: 469
diff changeset
278 # auto viewMode: text if there is a text else images
455
0a53fea83df7 more work renovating
casties
parents: 454
diff changeset
279 if viewMode=="auto":
0a53fea83df7 more work renovating
casties
parents: 454
diff changeset
280 if docinfo.get('textURL', None) or docinfo.get('textURLPath', None):
471
415a7026eeda split viewMode in viewMode and viewType
casties
parents: 469
diff changeset
281 viewMode = "text"
508
d5a47f82e755 more cleanup.
casties
parents: 507
diff changeset
282 if viewLayer is None:
d5a47f82e755 more cleanup.
casties
parents: 507
diff changeset
283 viewLayer = "dict"
51
c5d3aabbf61b textviewer now integrated, new modus auto introduced as standard for viewing
dwinter
parents: 50
diff changeset
284 else:
471
415a7026eeda split viewMode in viewMode and viewType
casties
parents: 469
diff changeset
285 viewMode = "images"
90
6a4a72033d58 new version with new full-text infrastructure and some more changed templates
casties
parents: 84
diff changeset
286
474
0bc4a153863a more cleanup (before reversing macro order)
casties
parents: 473
diff changeset
287 elif viewMode == "text_dict":
0bc4a153863a more cleanup (before reversing macro order)
casties
parents: 473
diff changeset
288 # legacy fix
0bc4a153863a more cleanup (before reversing macro order)
casties
parents: 473
diff changeset
289 viewMode = "text"
503
030251fe9dbc more cleanup.
casties
parents: 501
diff changeset
290 viewLayer = "dict"
474
0bc4a153863a more cleanup (before reversing macro order)
casties
parents: 473
diff changeset
291
503
030251fe9dbc more cleanup.
casties
parents: 501
diff changeset
292 pageinfo = self.getPageinfo(start=start, current=pn, docinfo=docinfo, viewMode=viewMode, viewLayer=viewLayer, tocMode=tocMode)
469
15394486ab75 working with new templates
casties
parents: 468
diff changeset
293
475
5a3ab27385ce more new template stuff
casties
parents: 474
diff changeset
294 # get template /template/viewer_$viewMode
5a3ab27385ce more new template stuff
casties
parents: 474
diff changeset
295 pt = getattr(self.template, 'viewer_%s'%viewMode, None)
5a3ab27385ce more new template stuff
casties
parents: 474
diff changeset
296 if pt is None:
5a3ab27385ce more new template stuff
casties
parents: 474
diff changeset
297 logging.error("No template for viewMode=%s!"%viewMode)
5a3ab27385ce more new template stuff
casties
parents: 474
diff changeset
298 # TODO: error page?
5a3ab27385ce more new template stuff
casties
parents: 474
diff changeset
299 return "No template for viewMode=%s!"%viewMode
5a3ab27385ce more new template stuff
casties
parents: 474
diff changeset
300
455
0a53fea83df7 more work renovating
casties
parents: 454
diff changeset
301 # and execute with parameters
471
415a7026eeda split viewMode in viewMode and viewType
casties
parents: 469
diff changeset
302 return pt(docinfo=docinfo, pageinfo=pageinfo)
0
dwinter
parents:
diff changeset
303
506
67014399894d cleaned out all 4suite code and weird methods.
casties
parents: 503
diff changeset
304 #WTF?
74
dwinter
parents: 73
diff changeset
305 def generateMarks(self,mk):
dwinter
parents: 73
diff changeset
306 ret=""
90
6a4a72033d58 new version with new full-text infrastructure and some more changed templates
casties
parents: 84
diff changeset
307 if mk is None:
6a4a72033d58 new version with new full-text infrastructure and some more changed templates
casties
parents: 84
diff changeset
308 return ""
134
6a33aa624ba4 fixed more oopsies
casties
parents: 133
diff changeset
309 if not isinstance(mk, list):
132
39167e96e582 fixed creation of text server on __init__
casties
parents: 130
diff changeset
310 mk=[mk]
74
dwinter
parents: 73
diff changeset
311 for m in mk:
75
9673218e155b minorCVS: ----------------------------------------------------------------------
dwinter
parents: 74
diff changeset
312 ret+="mk=%s"%m
74
dwinter
parents: 73
diff changeset
313 return ret
389
114d40b358ab *** empty log message ***
abukhman
parents: 387
diff changeset
314
114d40b358ab *** empty log message ***
abukhman
parents: 387
diff changeset
315
525
70c3ae5eac7c layers can have their own templates.
casties
parents: 518
diff changeset
316 def getAvailableLayers(self):
70c3ae5eac7c layers can have their own templates.
casties
parents: 518
diff changeset
317 """returns dict with list of available layers per viewMode"""
70c3ae5eac7c layers can have their own templates.
casties
parents: 518
diff changeset
318 return self.availableLayers
70c3ae5eac7c layers can have their own templates.
casties
parents: 518
diff changeset
319
387
580db757e0eb *** empty log message ***
abukhman
parents: 386
diff changeset
320 def getBrowser(self):
580db757e0eb *** empty log message ***
abukhman
parents: 386
diff changeset
321 """getBrowser the version of browser """
453
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
322 bt = browserCheck(self)
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
323 logging.debug("BROWSER VERSION: %s"%(bt))
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
324 return bt
387
580db757e0eb *** empty log message ***
abukhman
parents: 386
diff changeset
325
84
a6e4f9b6729a first version with new full-text infrastructure and slightly changed templates
casties
parents: 83
diff changeset
326 def findDigilibUrl(self):
a6e4f9b6729a first version with new full-text infrastructure and slightly changed templates
casties
parents: 83
diff changeset
327 """try to get the digilib URL from zogilib"""
a6e4f9b6729a first version with new full-text infrastructure and slightly changed templates
casties
parents: 83
diff changeset
328 url = self.template.zogilib.getDLBaseUrl()
a6e4f9b6729a first version with new full-text infrastructure and slightly changed templates
casties
parents: 83
diff changeset
329 return url
480
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
330
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
331 def getScalerUrl(self, fn=None, pn=None, dw=100, dh=100, docinfo=None):
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
332 """returns URL to digilib Scaler with params"""
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
333 url = None
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
334 if docinfo is not None:
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
335 url = docinfo.get('imageURL', None)
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
336
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
337 if url is None:
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
338 url = "%s/servlet/Scaler?"%self.digilibBaseUrl
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
339 if fn is None and docinfo is not None:
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
340 fn = docinfo.get('imagePath','')
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
341
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
342 url += "fn=%s"%fn
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
343
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
344 if pn:
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
345 url += "&pn=%s"%pn
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
346
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
347 url += "&dw=%s&dh=%s"%(dw,dh)
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
348 return url
126
c6dcf12e3807 added method to get url of viewer instance
casties
parents: 124
diff changeset
349
c6dcf12e3807 added method to get url of viewer instance
casties
parents: 124
diff changeset
350 def getDocumentViewerURL(self):
c6dcf12e3807 added method to get url of viewer instance
casties
parents: 124
diff changeset
351 """returns the URL of this instance"""
c6dcf12e3807 added method to get url of viewer instance
casties
parents: 124
diff changeset
352 return self.absolute_url()
84
a6e4f9b6729a first version with new full-text infrastructure and slightly changed templates
casties
parents: 83
diff changeset
353
a6e4f9b6729a first version with new full-text infrastructure and slightly changed templates
casties
parents: 83
diff changeset
354 def getStyle(self, idx, selected, style=""):
480
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
355 """returns a string with the given style and append 'sel' if idx == selected."""
84
a6e4f9b6729a first version with new full-text infrastructure and slightly changed templates
casties
parents: 83
diff changeset
356 #logger("documentViewer (getstyle)", logging.INFO, "idx: %s selected: %s style: %s"%(idx,selected,style))
a6e4f9b6729a first version with new full-text infrastructure and slightly changed templates
casties
parents: 83
diff changeset
357 if idx == selected:
a6e4f9b6729a first version with new full-text infrastructure and slightly changed templates
casties
parents: 83
diff changeset
358 return style + 'sel'
a6e4f9b6729a first version with new full-text infrastructure and slightly changed templates
casties
parents: 83
diff changeset
359 else:
a6e4f9b6729a first version with new full-text infrastructure and slightly changed templates
casties
parents: 83
diff changeset
360 return style
74
dwinter
parents: 73
diff changeset
361
478
cd37d6f8d5e8 more cleanup
casties
parents: 477
diff changeset
362 def getParams(self, param=None, val=None, params=None, duplicates=None):
469
15394486ab75 working with new templates
casties
parents: 468
diff changeset
363 """returns dict with URL parameters.
15394486ab75 working with new templates
casties
parents: 468
diff changeset
364
15394486ab75 working with new templates
casties
parents: 468
diff changeset
365 Takes URL parameters and additionally param=val or dict params.
15394486ab75 working with new templates
casties
parents: 468
diff changeset
366 Deletes key if value is None."""
453
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
367 # copy existing request params
469
15394486ab75 working with new templates
casties
parents: 468
diff changeset
368 newParams=self.REQUEST.form.copy()
453
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
369 # change single param
25
e93fb8cadd3a new, less preliminary version 0.2
casties
parents: 22
diff changeset
370 if param is not None:
31
c6451e8d5d23 more small fixes - now version 0.2.2
casties
parents: 29
diff changeset
371 if val is None:
469
15394486ab75 working with new templates
casties
parents: 468
diff changeset
372 if newParams.has_key(param):
15394486ab75 working with new templates
casties
parents: 468
diff changeset
373 del newParams[param]
25
e93fb8cadd3a new, less preliminary version 0.2
casties
parents: 22
diff changeset
374 else:
469
15394486ab75 working with new templates
casties
parents: 468
diff changeset
375 newParams[param] = str(val)
84
a6e4f9b6729a first version with new full-text infrastructure and slightly changed templates
casties
parents: 83
diff changeset
376
453
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
377 # change more params
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
378 if params is not None:
478
cd37d6f8d5e8 more cleanup
casties
parents: 477
diff changeset
379 for (k, v) in params.items():
453
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
380 if v is None:
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
381 # val=None removes param
469
15394486ab75 working with new templates
casties
parents: 468
diff changeset
382 if newParams.has_key(k):
15394486ab75 working with new templates
casties
parents: 468
diff changeset
383 del newParams[k]
453
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
384
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
385 else:
469
15394486ab75 working with new templates
casties
parents: 468
diff changeset
386 newParams[k] = v
478
cd37d6f8d5e8 more cleanup
casties
parents: 477
diff changeset
387
cd37d6f8d5e8 more cleanup
casties
parents: 477
diff changeset
388 if duplicates:
cd37d6f8d5e8 more cleanup
casties
parents: 477
diff changeset
389 # eliminate lists (coming from duplicate keys)
cd37d6f8d5e8 more cleanup
casties
parents: 477
diff changeset
390 for (k,v) in newParams.items():
cd37d6f8d5e8 more cleanup
casties
parents: 477
diff changeset
391 if isinstance(v, list):
cd37d6f8d5e8 more cleanup
casties
parents: 477
diff changeset
392 if duplicates == 'comma':
cd37d6f8d5e8 more cleanup
casties
parents: 477
diff changeset
393 # make comma-separated list of non-empty entries
cd37d6f8d5e8 more cleanup
casties
parents: 477
diff changeset
394 newParams[k] = ','.join([t for t in v if t])
cd37d6f8d5e8 more cleanup
casties
parents: 477
diff changeset
395 elif duplicates == 'first':
cd37d6f8d5e8 more cleanup
casties
parents: 477
diff changeset
396 # take first non-empty entry
cd37d6f8d5e8 more cleanup
casties
parents: 477
diff changeset
397 newParams[k] = [t for t in v if t][0]
cd37d6f8d5e8 more cleanup
casties
parents: 477
diff changeset
398
469
15394486ab75 working with new templates
casties
parents: 468
diff changeset
399 return newParams
15394486ab75 working with new templates
casties
parents: 468
diff changeset
400
478
cd37d6f8d5e8 more cleanup
casties
parents: 477
diff changeset
401 def getLink(self, param=None, val=None, params=None, baseUrl=None, paramSep='&', duplicates='comma'):
469
15394486ab75 working with new templates
casties
parents: 468
diff changeset
402 """returns URL to documentviewer with parameter param set to val or from dict params"""
478
cd37d6f8d5e8 more cleanup
casties
parents: 477
diff changeset
403 urlParams = self.getParams(param=param, val=val, params=params, duplicates=duplicates)
453
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
404 # quote values and assemble into query string (not escaping '/')
514
c55e376be01b search works even with unicode...
casties
parents: 513
diff changeset
405 ps = paramSep.join(["%s=%s"%(k, urllib.quote_plus(utf8ify(v), '/')) for (k, v) in urlParams.items()])
453
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
406 if baseUrl is None:
469
15394486ab75 working with new templates
casties
parents: 468
diff changeset
407 baseUrl = self.getDocumentViewerURL()
453
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
408
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
409 url = "%s?%s"%(baseUrl, ps)
25
e93fb8cadd3a new, less preliminary version 0.2
casties
parents: 22
diff changeset
410 return url
e93fb8cadd3a new, less preliminary version 0.2
casties
parents: 22
diff changeset
411
478
cd37d6f8d5e8 more cleanup
casties
parents: 477
diff changeset
412 def getLinkAmp(self, param=None, val=None, params=None, baseUrl=None, duplicates='comma'):
68
b8457fc33446 piclens rss/support
dwinter
parents: 65
diff changeset
413 """link to documentviewer with parameter param set to val"""
478
cd37d6f8d5e8 more cleanup
casties
parents: 477
diff changeset
414 return self.getLink(param=param, val=val, params=params, baseUrl=baseUrl, paramSep='&', duplicates=duplicates)
81
fae97f071724 fixed problem with info.xml when url without index.meta
casties
parents: 79
diff changeset
415
526
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
416
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
417 def setAvailableLayers(self, newLayerString=None):
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
418 """sets availableLayers to newLayerString or tries to autodetect available layers.
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
419 assumes layer templates have the form layer_{m}_{l} for layer l in mode m.
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
420 newLayerString is parsed as JSON."""
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
421 if newLayerString is not None:
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
422 try:
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
423 layers = json.loads(newLayerString)
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
424 if 'text' in layers and 'images' in layers:
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
425 self.availableLayers = layers
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
426 return
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
427 except:
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
428 pass
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
429
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
430 logging.error("invalid layers=%s! autodetecting..."%repr(newLayerString))
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
431
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
432 # start with builtin layers
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
433 self.availableLayers = self.builtinLayers.copy()
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
434 # add layers from templates
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
435 for t in self.template:
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
436 if t.startswith('layer_'):
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
437 try:
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
438 (x, m, l) = t.split('_', 3)
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
439 if m not in self.availableLayers:
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
440 # mode m doesn't exist -> new list
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
441 self.availableLayers[m] = [l]
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
442
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
443 else:
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
444 # m exists -> append
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
445 if l not in self.availableLayers[m]:
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
446 self.availableLayers[m].append()
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
447
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
448 except:
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
449 pass
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
450
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
451 def getAvailableLayersJson(self):
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
452 """returns available layers as JSON string."""
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
453 return json.dumps(self.availableLayers)
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
454
469
15394486ab75 working with new templates
casties
parents: 468
diff changeset
455
57
7cdb0fc34a92 added getInfo_xml method
casties
parents: 55
diff changeset
456 def getInfo_xml(self,url,mode):
7cdb0fc34a92 added getInfo_xml method
casties
parents: 55
diff changeset
457 """returns info about the document as XML"""
7cdb0fc34a92 added getInfo_xml method
casties
parents: 55
diff changeset
458 if not self.digilibBaseUrl:
514
c55e376be01b search works even with unicode...
casties
parents: 513
diff changeset
459 self.digilibBaseUrl = self.findDigilibUrl() or "http://digilib.mpiwg-berlin.mpg.de/digitallibrary"
57
7cdb0fc34a92 added getInfo_xml method
casties
parents: 55
diff changeset
460
7cdb0fc34a92 added getInfo_xml method
casties
parents: 55
diff changeset
461 docinfo = self.getDocinfo(mode=mode,url=url)
7cdb0fc34a92 added getInfo_xml method
casties
parents: 55
diff changeset
462 pt = getattr(self.template, 'info_xml')
7cdb0fc34a92 added getInfo_xml method
casties
parents: 55
diff changeset
463 return pt(docinfo=docinfo)
7cdb0fc34a92 added getInfo_xml method
casties
parents: 55
diff changeset
464
528
f8a5f63eafc0 new viewMode=thumbs.
casties
parents: 526
diff changeset
465 def getAuthenticatedUser(self, anon=None):
f8a5f63eafc0 new viewMode=thumbs.
casties
parents: 526
diff changeset
466 """returns the authenticated user object or None. (ignores Zopes anonymous user)"""
f8a5f63eafc0 new viewMode=thumbs.
casties
parents: 526
diff changeset
467 user = getSecurityManager().getUser()
f8a5f63eafc0 new viewMode=thumbs.
casties
parents: 526
diff changeset
468 if user is not None and user.getUserName() != "Anonymous User":
f8a5f63eafc0 new viewMode=thumbs.
casties
parents: 526
diff changeset
469 return user
f8a5f63eafc0 new viewMode=thumbs.
casties
parents: 526
diff changeset
470 else:
f8a5f63eafc0 new viewMode=thumbs.
casties
parents: 526
diff changeset
471 return anon
f8a5f63eafc0 new viewMode=thumbs.
casties
parents: 526
diff changeset
472
35
2d9261aea8f3 version 0.2.4
casties
parents: 32
diff changeset
473 def isAccessible(self, docinfo):
32
b25c89d693cf version 0.2.3 - first version with access control!
casties
parents: 31
diff changeset
474 """returns if access to the resource is granted"""
b25c89d693cf version 0.2.3 - first version with access control!
casties
parents: 31
diff changeset
475 access = docinfo.get('accessType', None)
167
7e2b97941a66 characterNormalization
abukhman
parents: 166
diff changeset
476 logging.debug("documentViewer (accessOK) access type %s"%access)
465
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
477 if access == 'free':
167
7e2b97941a66 characterNormalization
abukhman
parents: 166
diff changeset
478 logging.debug("documentViewer (accessOK) access is free")
32
b25c89d693cf version 0.2.3 - first version with access control!
casties
parents: 31
diff changeset
479 return True
465
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
480
45
0391fe75aef3 fixed handling of documents with missing access tag
casties
parents: 43
diff changeset
481 elif access is None or access in self.authgroups:
35
2d9261aea8f3 version 0.2.4
casties
parents: 32
diff changeset
482 # only local access -- only logged in users
528
f8a5f63eafc0 new viewMode=thumbs.
casties
parents: 526
diff changeset
483 user = self.getAuthenticatedUser()
167
7e2b97941a66 characterNormalization
abukhman
parents: 166
diff changeset
484 logging.debug("documentViewer (accessOK) user=%s ip=%s"%(user,self.REQUEST.getClientAddr()))
528
f8a5f63eafc0 new viewMode=thumbs.
casties
parents: 526
diff changeset
485 return (user is not None)
32
b25c89d693cf version 0.2.3 - first version with access control!
casties
parents: 31
diff changeset
486
167
7e2b97941a66 characterNormalization
abukhman
parents: 166
diff changeset
487 logging.error("documentViewer (accessOK) unknown access type %s"%access)
32
b25c89d693cf version 0.2.3 - first version with access control!
casties
parents: 31
diff changeset
488 return False
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
489
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
490
518
91051b36b9cc uses xml info from doc-info.xql for table of contents now.
casties
parents: 516
diff changeset
491 def getDocinfo(self, mode, url, tocMode=None):
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
492 """returns docinfo depending on mode"""
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
493 logging.debug("getDocinfo: mode=%s, url=%s"%(mode,url))
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
494 # look for cached docinfo in session
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
495 if self.REQUEST.SESSION.has_key('docinfo'):
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
496 docinfo = self.REQUEST.SESSION['docinfo']
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
497 # check if its still current
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
498 if docinfo is not None and docinfo.get('mode', None) == mode and docinfo.get('url', None) == url:
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
499 logging.debug("getDocinfo: docinfo in session. keys=%s"%docinfo.keys())
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
500 return docinfo
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
501
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
502 # new docinfo
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
503 docinfo = {'mode': mode, 'url': url}
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
504 # add self url
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
505 docinfo['viewerUrl'] = self.getDocumentViewerURL()
477
17f0290b2327 small fixes.
casties
parents: 476
diff changeset
506 docinfo['digilibBaseUrl'] = self.digilibBaseUrl
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
507 # get index.meta DOM
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
508 docUrl = None
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
509 metaDom = None
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
510 if mode=="texttool":
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
511 # url points to document dir or index.meta
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
512 metaDom = self.metadataService.getDomFromPathOrUrl(url)
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
513 docUrl = url.replace('/index.meta', '')
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
514 if metaDom is None:
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
515 raise IOError("Unable to find index.meta for mode=texttool!")
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
516
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
517 elif mode=="imagepath":
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
518 # url points to folder with images, index.meta optional
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
519 # asssume index.meta in parent dir
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
520 docUrl = getParentPath(url)
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
521 metaDom = self.metadataService.getDomFromPathOrUrl(docUrl)
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
522
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
523 elif mode=="filepath":
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
524 # url points to image file, index.meta optional
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
525 # asssume index.meta is two path segments up
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
526 docUrl = getParentPath(url, 2)
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
527 metaDom = self.metadataService.getDomFromPathOrUrl(docUrl)
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
528
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
529 else:
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
530 logging.error("documentViewer (getdocinfo) unknown mode: %s!"%mode)
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
531 raise ValueError("Unknown mode %s! Has to be one of 'texttool','imagepath','filepath'."%(mode))
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
532
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
533 docinfo['documentUrl'] = docUrl
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
534 # process index.meta contents
473
74e9e74277e9 smaller improvements
casties
parents: 472
diff changeset
535 if metaDom is not None and metaDom.tag == 'resource':
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
536 # document directory name and path
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
537 resource = self.metadataService.getResourceData(dom=metaDom)
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
538 if resource:
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
539 docinfo = self.getDocinfoFromResource(docinfo, resource)
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
540
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
541 # texttool info
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
542 texttool = self.metadataService.getTexttoolData(dom=metaDom)
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
543 if texttool:
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
544 docinfo = self.getDocinfoFromTexttool(docinfo, texttool)
518
91051b36b9cc uses xml info from doc-info.xql for table of contents now.
casties
parents: 516
diff changeset
545 # document info (including toc) from full text
516
7d7b639d7be7 add methods to use doc-info.xql.
casties
parents: 514
diff changeset
546 if docinfo.get('textURLPath', None):
518
91051b36b9cc uses xml info from doc-info.xql for table of contents now.
casties
parents: 516
diff changeset
547 docinfo = self.getTextInfo(mode=tocMode, docinfo=docinfo)
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
548
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
549 # bib info
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
550 bib = self.metadataService.getBibData(dom=metaDom)
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
551 if bib:
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
552 docinfo = self.getDocinfoFromBib(docinfo, bib)
465
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
553 else:
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
554 # no bib - try info.xml
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
555 docinfo = self.getDocinfoFromPresentationInfoXml(docinfo)
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
556
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
557 # auth info
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
558 access = self.metadataService.getAccessData(dom=metaDom)
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
559 if access:
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
560 docinfo = self.getDocinfoFromAccess(docinfo, access)
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
561
466
1641be8dc6b5 attribution works now
casties
parents: 465
diff changeset
562 # attribution info
1641be8dc6b5 attribution works now
casties
parents: 465
diff changeset
563 attribution = self.metadataService.getAttributionData(dom=metaDom)
1641be8dc6b5 attribution works now
casties
parents: 465
diff changeset
564 if attribution:
1641be8dc6b5 attribution works now
casties
parents: 465
diff changeset
565 logging.debug("getDocinfo: attribution=%s"%repr(attribution))
1641be8dc6b5 attribution works now
casties
parents: 465
diff changeset
566 docinfo['attribution'] = attribution
1641be8dc6b5 attribution works now
casties
parents: 465
diff changeset
567 #docinfo = self.getDocinfoFromAccess(docinfo, access)
1641be8dc6b5 attribution works now
casties
parents: 465
diff changeset
568
1641be8dc6b5 attribution works now
casties
parents: 465
diff changeset
569 # copyright info
1641be8dc6b5 attribution works now
casties
parents: 465
diff changeset
570 copyright = self.metadataService.getCopyrightData(dom=metaDom)
1641be8dc6b5 attribution works now
casties
parents: 465
diff changeset
571 if copyright:
1641be8dc6b5 attribution works now
casties
parents: 465
diff changeset
572 logging.debug("getDocinfo: copyright=%s"%repr(copyright))
1641be8dc6b5 attribution works now
casties
parents: 465
diff changeset
573 docinfo['copyright'] = copyright
1641be8dc6b5 attribution works now
casties
parents: 465
diff changeset
574 #docinfo = self.getDocinfoFromAccess(docinfo, access)
1641be8dc6b5 attribution works now
casties
parents: 465
diff changeset
575
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
576 # image path
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
577 if mode != 'texttool':
516
7d7b639d7be7 add methods to use doc-info.xql.
casties
parents: 514
diff changeset
578 # override image path from texttool with url TODO: how about mode=auto?
465
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
579 docinfo['imagePath'] = url.replace('/mpiwg/online/', '', 1)
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
580
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
581 # number of images from digilib
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
582 if docinfo.get('imagePath', None):
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
583 docinfo['imageURL'] = self.digilibBaseUrl + "/servlet/Scaler?fn=" + docinfo['imagePath']
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
584 docinfo = self.getDocinfoFromDigilib(docinfo, docinfo['imagePath'])
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
585
516
7d7b639d7be7 add methods to use doc-info.xql.
casties
parents: 514
diff changeset
586 # check numPages
7d7b639d7be7 add methods to use doc-info.xql.
casties
parents: 514
diff changeset
587 if docinfo.get('numPages', 0) == 0:
7d7b639d7be7 add methods to use doc-info.xql.
casties
parents: 514
diff changeset
588 if docinfo.get('numTextPages', 0) > 0:
7d7b639d7be7 add methods to use doc-info.xql.
casties
parents: 514
diff changeset
589 # replace with numTextPages (text-only?)
7d7b639d7be7 add methods to use doc-info.xql.
casties
parents: 514
diff changeset
590 docinfo['numPages'] = docinfo['numTextPages']
7d7b639d7be7 add methods to use doc-info.xql.
casties
parents: 514
diff changeset
591
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
592 logging.debug("documentViewer (getdocinfo) docinfo: keys=%s"%docinfo.keys())
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
593 #logging.debug("documentViewer (getdocinfo) docinfo: %s"%docinfo)
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
594 # store in session
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
595 self.REQUEST.SESSION['docinfo'] = docinfo
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
596 return docinfo
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
597
516
7d7b639d7be7 add methods to use doc-info.xql.
casties
parents: 514
diff changeset
598
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
599 def getDocinfoFromResource(self, docinfo, resource):
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
600 """reads contents of resource element into docinfo"""
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
601 docName = resource.get('name', None)
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
602 docinfo['documentName'] = docName
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
603 docPath = resource.get('archive-path', None)
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
604 if docPath:
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
605 # clean up document path
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
606 if docPath[0] != '/':
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
607 docPath = '/' + docPath
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
608
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
609 if docName and (not docPath.endswith(docName)):
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
610 docPath += "/" + docName
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
611
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
612 else:
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
613 # use docUrl as docPath
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
614 docUrl = docinfo['documentURL']
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
615 if not docUrl.startswith('http:'):
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
616 docPath = docUrl
465
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
617 if docPath:
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
618 # fix URLs starting with /mpiwg/online
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
619 docPath = docPath.replace('/mpiwg/online', '', 1)
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
620
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
621 docinfo['documentPath'] = docPath
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
622 return docinfo
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
623
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
624 def getDocinfoFromTexttool(self, docinfo, texttool):
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
625 """reads contents of texttool element into docinfo"""
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
626 # image dir
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
627 imageDir = texttool.get('image', None)
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
628 docPath = docinfo.get('documentPath', None)
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
629 if imageDir and docPath:
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
630 #print "image: ", imageDir, " archivepath: ", archivePath
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
631 imageDir = os.path.join(docPath, imageDir)
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
632 imageDir = imageDir.replace('/mpiwg/online', '', 1)
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
633 docinfo['imagePath'] = imageDir
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
634
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
635 # old style text URL
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
636 textUrl = texttool.get('text', None)
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
637 if textUrl and docPath:
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
638 if urlparse.urlparse(textUrl)[0] == "": #keine url
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
639 textUrl = os.path.join(docPath, textUrl)
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
640
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
641 docinfo['textURL'] = textUrl
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
642
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
643 # new style text-url-path
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
644 textUrl = texttool.get('text-url-path', None)
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
645 if textUrl:
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
646 docinfo['textURLPath'] = textUrl
468
dc7c48912110 attribution and copyright works mostly now
casties
parents: 467
diff changeset
647
dc7c48912110 attribution and copyright works mostly now
casties
parents: 467
diff changeset
648 # page flow
dc7c48912110 attribution and copyright works mostly now
casties
parents: 467
diff changeset
649 docinfo['pageFlow'] = texttool.get('page-flow', 'ltr')
dc7c48912110 attribution and copyright works mostly now
casties
parents: 467
diff changeset
650
dc7c48912110 attribution and copyright works mostly now
casties
parents: 467
diff changeset
651 # odd pages are left
476
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
652 docinfo['oddPage'] = texttool.get('odd-scan-position', 'left')
468
dc7c48912110 attribution and copyright works mostly now
casties
parents: 467
diff changeset
653
469
15394486ab75 working with new templates
casties
parents: 468
diff changeset
654 # number of title page (0: not defined)
468
dc7c48912110 attribution and copyright works mostly now
casties
parents: 467
diff changeset
655 docinfo['titlePage'] = texttool.get('title-scan-no', 0)
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
656
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
657 # old presentation stuff
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
658 presentation = texttool.get('presentation', None)
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
659 if presentation and docPath:
465
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
660 if presentation.startswith('http:'):
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
661 docinfo['presentationUrl'] = presentation
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
662 else:
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
663 docinfo['presentationUrl'] = os.path.join(docPath, presentation)
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
664
468
dc7c48912110 attribution and copyright works mostly now
casties
parents: 467
diff changeset
665
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
666 return docinfo
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
667
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
668 def getDocinfoFromBib(self, docinfo, bib):
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
669 """reads contents of bib element into docinfo"""
465
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
670 logging.debug("getDocinfoFromBib bib=%s"%repr(bib))
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
671 # put all raw bib fields in dict "bib"
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
672 docinfo['bib'] = bib
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
673 bibtype = bib.get('@type', None)
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
674 docinfo['bibType'] = bibtype
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
675 # also store DC metadata for convenience
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
676 dc = self.metadataService.getDCMappedData(bib)
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
677 docinfo['creator'] = dc.get('creator',None)
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
678 docinfo['title'] = dc.get('title',None)
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
679 docinfo['date'] = dc.get('date',None)
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
680 return docinfo
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
681
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
682 def getDocinfoFromAccess(self, docinfo, acc):
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
683 """reads contents of access element into docinfo"""
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
684 #TODO: also read resource type
465
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
685 logging.debug("getDocinfoFromAccess acc=%s"%repr(acc))
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
686 try:
465
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
687 acctype = acc['@attr']['type']
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
688 if acctype:
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
689 access=acctype
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
690 if access in ['group', 'institution']:
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
691 access = acc['name'].lower()
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
692
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
693 docinfo['accessType'] = access
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
694
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
695 except:
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
696 pass
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
697
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
698 return docinfo
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
699
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
700 def getDocinfoFromDigilib(self, docinfo, path):
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
701 infoUrl=self.digilibBaseUrl+"/dirInfo-xml.jsp?mo=dir&fn="+path
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
702 # fetch data
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
703 txt = getHttpData(infoUrl)
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
704 if not txt:
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
705 logging.error("Unable to get dir-info from %s"%(infoUrl))
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
706 return docinfo
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
707
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
708 dom = ET.fromstring(txt)
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
709 size = getText(dom.find("size"))
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
710 logging.debug("getDocinfoFromDigilib: size=%s"%size)
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
711 if size:
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
712 docinfo['numPages'] = int(size)
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
713 else:
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
714 docinfo['numPages'] = 0
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
715
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
716 # TODO: produce and keep list of image names and numbers
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
717 return docinfo
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
718
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
719
465
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
720 def getDocinfoFromPresentationInfoXml(self,docinfo):
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
721 """gets DC-like bibliographical information from the presentation entry in texttools"""
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
722 url = docinfo.get('presentationUrl', None)
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
723 if not url:
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
724 logging.error("getDocinfoFromPresentation: no URL!")
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
725 return docinfo
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
726
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
727 dom = None
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
728 metaUrl = None
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
729 if url.startswith("http://"):
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
730 # real URL
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
731 metaUrl = url
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
732 else:
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
733 # online path
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
734
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
735 server=self.digilibBaseUrl+"/servlet/Texter?fn="
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
736 metaUrl=server+url
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
737
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
738 txt=getHttpData(metaUrl)
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
739 if txt is None:
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
740 logging.error("Unable to read info.xml from %s"%(url))
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
741 return docinfo
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
742
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
743 dom = ET.fromstring(txt)
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
744 docinfo['creator']=getText(dom.find(".//author"))
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
745 docinfo['title']=getText(dom.find(".//title"))
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
746 docinfo['date']=getText(dom.find(".//date"))
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
747 return docinfo
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
748
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
749
503
030251fe9dbc more cleanup.
casties
parents: 501
diff changeset
750 def getPageinfo(self, current=None, start=None, rows=None, cols=None, docinfo=None, viewMode=None, viewLayer=None, tocMode=None):
22
b139f9937e97 preliminary version 0.2
casties
parents: 20
diff changeset
751 """returns pageinfo with the given parameters"""
503
030251fe9dbc more cleanup.
casties
parents: 501
diff changeset
752 logging.debug("getPageInfo(current=%s, start=%s, rows=%s, cols=%s, viewMode=%s, viewLayer=%s, tocMode=%s)"%(current,start,rows,cols,viewMode,viewLayer,tocMode))
22
b139f9937e97 preliminary version 0.2
casties
parents: 20
diff changeset
753 pageinfo = {}
471
415a7026eeda split viewMode in viewMode and viewType
casties
parents: 469
diff changeset
754 pageinfo['viewMode'] = viewMode
508
d5a47f82e755 more cleanup.
casties
parents: 507
diff changeset
755 # split viewLayer if necessary
d5a47f82e755 more cleanup.
casties
parents: 507
diff changeset
756 if isinstance(viewLayer,basestring):
d5a47f82e755 more cleanup.
casties
parents: 507
diff changeset
757 viewLayer = viewLayer.split(',')
d5a47f82e755 more cleanup.
casties
parents: 507
diff changeset
758
d5a47f82e755 more cleanup.
casties
parents: 507
diff changeset
759 if isinstance(viewLayer, list):
d5a47f82e755 more cleanup.
casties
parents: 507
diff changeset
760 logging.debug("getPageinfo: viewLayer is list:%s"%viewLayer)
d5a47f82e755 more cleanup.
casties
parents: 507
diff changeset
761 # save (unique) list in viewLayers
d5a47f82e755 more cleanup.
casties
parents: 507
diff changeset
762 seen = set()
d5a47f82e755 more cleanup.
casties
parents: 507
diff changeset
763 viewLayers = [l for l in viewLayer if l and l not in seen and not seen.add(l)]
d5a47f82e755 more cleanup.
casties
parents: 507
diff changeset
764 pageinfo['viewLayers'] = viewLayers
d5a47f82e755 more cleanup.
casties
parents: 507
diff changeset
765 # stringify viewLayer
d5a47f82e755 more cleanup.
casties
parents: 507
diff changeset
766 viewLayer = ','.join(viewLayers)
d5a47f82e755 more cleanup.
casties
parents: 507
diff changeset
767 else:
d5a47f82e755 more cleanup.
casties
parents: 507
diff changeset
768 #create list
d5a47f82e755 more cleanup.
casties
parents: 507
diff changeset
769 pageinfo['viewLayers'] = [viewLayer]
d5a47f82e755 more cleanup.
casties
parents: 507
diff changeset
770
503
030251fe9dbc more cleanup.
casties
parents: 501
diff changeset
771 pageinfo['viewLayer'] = viewLayer
471
415a7026eeda split viewMode in viewMode and viewType
casties
parents: 469
diff changeset
772 pageinfo['tocMode'] = tocMode
415a7026eeda split viewMode in viewMode and viewType
casties
parents: 469
diff changeset
773
516
7d7b639d7be7 add methods to use doc-info.xql.
casties
parents: 514
diff changeset
774 # TODO: unify current and pn!
25
e93fb8cadd3a new, less preliminary version 0.2
casties
parents: 22
diff changeset
775 current = getInt(current)
e93fb8cadd3a new, less preliminary version 0.2
casties
parents: 22
diff changeset
776 pageinfo['current'] = current
480
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
777 pageinfo['pn'] = current
25
e93fb8cadd3a new, less preliminary version 0.2
casties
parents: 22
diff changeset
778 rows = int(rows or self.thumbrows)
e93fb8cadd3a new, less preliminary version 0.2
casties
parents: 22
diff changeset
779 pageinfo['rows'] = rows
e93fb8cadd3a new, less preliminary version 0.2
casties
parents: 22
diff changeset
780 cols = int(cols or self.thumbcols)
e93fb8cadd3a new, less preliminary version 0.2
casties
parents: 22
diff changeset
781 pageinfo['cols'] = cols
e93fb8cadd3a new, less preliminary version 0.2
casties
parents: 22
diff changeset
782 grpsize = cols * rows
e93fb8cadd3a new, less preliminary version 0.2
casties
parents: 22
diff changeset
783 pageinfo['groupsize'] = grpsize
476
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
784 # is start is empty use one around current
61
f3d2f240692c fixed bug in calculation of group numbers
casties
parents: 59
diff changeset
785 start = getInt(start, default=(math.ceil(float(current)/float(grpsize))*grpsize-(grpsize-1)))
f3d2f240692c fixed bug in calculation of group numbers
casties
parents: 59
diff changeset
786 # int(current / grpsize) * grpsize +1))
22
b139f9937e97 preliminary version 0.2
casties
parents: 20
diff changeset
787 pageinfo['start'] = start
511
551ca1641a5e more cleanup.
casties
parents: 509
diff changeset
788 # get number of pages
469
15394486ab75 working with new templates
casties
parents: 468
diff changeset
789 np = int(docinfo.get('numPages', 0))
15394486ab75 working with new templates
casties
parents: 468
diff changeset
790 if np == 0:
518
91051b36b9cc uses xml info from doc-info.xql for table of contents now.
casties
parents: 516
diff changeset
791 # try numTextPages
91051b36b9cc uses xml info from doc-info.xql for table of contents now.
casties
parents: 516
diff changeset
792 np = docinfo.get('numTextPages', 0)
91051b36b9cc uses xml info from doc-info.xql for table of contents now.
casties
parents: 516
diff changeset
793 if np != 0:
91051b36b9cc uses xml info from doc-info.xql for table of contents now.
casties
parents: 516
diff changeset
794 docinfo['numPages'] = np
91051b36b9cc uses xml info from doc-info.xql for table of contents now.
casties
parents: 516
diff changeset
795
511
551ca1641a5e more cleanup.
casties
parents: 509
diff changeset
796 # cache table of contents
551ca1641a5e more cleanup.
casties
parents: 509
diff changeset
797 pageinfo['tocPageSize'] = getInt(self.REQUEST.get('tocPageSize', 30))
469
15394486ab75 working with new templates
casties
parents: 468
diff changeset
798 pageinfo['numgroups'] = int(np / grpsize)
15394486ab75 working with new templates
casties
parents: 468
diff changeset
799 if np % grpsize > 0:
15394486ab75 working with new templates
casties
parents: 468
diff changeset
800 pageinfo['numgroups'] += 1
476
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
801
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
802 pageFlowLtr = docinfo.get('pageFlow', 'ltr') != 'rtl'
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
803 oddScanLeft = docinfo.get('oddPage', 'left') != 'right'
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
804 # add zeroth page for two columns
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
805 pageZero = (cols == 2 and (pageFlowLtr != oddScanLeft))
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
806 pageinfo['pageZero'] = pageZero
480
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
807 pageinfo['pageBatch'] = self.getPageBatch(start=start, rows=rows, cols=cols, pageFlowLtr=pageFlowLtr, pageZero=pageZero, minIdx=1, maxIdx=np)
516
7d7b639d7be7 add methods to use doc-info.xql.
casties
parents: 514
diff changeset
808 # more page parameters
453
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
809 pageinfo['characterNormalization'] = self.REQUEST.get('characterNormalization','reg')
516
7d7b639d7be7 add methods to use doc-info.xql.
casties
parents: 514
diff changeset
810 if docinfo.get('pageNumbers'):
7d7b639d7be7 add methods to use doc-info.xql.
casties
parents: 514
diff changeset
811 # get original page numbers
7d7b639d7be7 add methods to use doc-info.xql.
casties
parents: 514
diff changeset
812 pageNumber = docinfo['pageNumbers'].get(current, None)
7d7b639d7be7 add methods to use doc-info.xql.
casties
parents: 514
diff changeset
813 if pageNumber is not None:
7d7b639d7be7 add methods to use doc-info.xql.
casties
parents: 514
diff changeset
814 pageinfo['pageNumberOrig'] = pageNumber['no']
7d7b639d7be7 add methods to use doc-info.xql.
casties
parents: 514
diff changeset
815 pageinfo['pageNumberOrigNorm'] = pageNumber['non']
158
4f4fe4e56ffe characterNormalization
abukhman
parents: 157
diff changeset
816
511
551ca1641a5e more cleanup.
casties
parents: 509
diff changeset
817 # cache search results
551ca1641a5e more cleanup.
casties
parents: 509
diff changeset
818 pageinfo['resultPageSize'] = getInt(self.REQUEST.get('resultPageSize', 10))
551ca1641a5e more cleanup.
casties
parents: 509
diff changeset
819 query = self.REQUEST.get('query',None)
551ca1641a5e more cleanup.
casties
parents: 509
diff changeset
820 pageinfo['query'] = query
551ca1641a5e more cleanup.
casties
parents: 509
diff changeset
821 if query:
551ca1641a5e more cleanup.
casties
parents: 509
diff changeset
822 queryType = self.REQUEST.get('queryType', 'fulltextMorph')
551ca1641a5e more cleanup.
casties
parents: 509
diff changeset
823 pageinfo['queryType'] = queryType
551ca1641a5e more cleanup.
casties
parents: 509
diff changeset
824 pageinfo['resultStart'] = getInt(self.REQUEST.get('resultStart', '1'))
551ca1641a5e more cleanup.
casties
parents: 509
diff changeset
825 self.getSearchResults(mode=queryType, query=query, pageinfo=pageinfo, docinfo=docinfo)
551ca1641a5e more cleanup.
casties
parents: 509
diff changeset
826
551ca1641a5e more cleanup.
casties
parents: 509
diff changeset
827 # highlighting
551ca1641a5e more cleanup.
casties
parents: 509
diff changeset
828 highlightQuery = self.REQUEST.get('highlightQuery', None)
551ca1641a5e more cleanup.
casties
parents: 509
diff changeset
829 if highlightQuery:
551ca1641a5e more cleanup.
casties
parents: 509
diff changeset
830 pageinfo['highlightQuery'] = highlightQuery
551ca1641a5e more cleanup.
casties
parents: 509
diff changeset
831 pageinfo['highlightElement'] = self.REQUEST.get('highlightElement', '')
551ca1641a5e more cleanup.
casties
parents: 509
diff changeset
832 pageinfo['highlightElementPos'] = self.REQUEST.get('highlightElementPos', '')
460
76bc2317146f more renovation
casties
parents: 459
diff changeset
833
22
b139f9937e97 preliminary version 0.2
casties
parents: 20
diff changeset
834 return pageinfo
460
76bc2317146f more renovation
casties
parents: 459
diff changeset
835
463
89ad327b4bbd more renovation
casties
parents: 462
diff changeset
836
482
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
837 def getPageBatch(self, start=1, rows=10, cols=2, pageFlowLtr=True, pageZero=False, minIdx=1, maxIdx=0):
480
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
838 """returns dict with array of page informations for one screenfull of thumbnails"""
482
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
839 batch = {}
480
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
840 grpsize = rows * cols
476
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
841 if maxIdx == 0:
480
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
842 maxIdx = start + grpsize
476
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
843
482
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
844 nb = int(math.ceil(maxIdx / float(grpsize)))
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
845 # list of all batch start and end points
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
846 batches = []
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
847 if pageZero:
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
848 ofs = 0
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
849 else:
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
850 ofs = 1
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
851
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
852 for i in range(nb):
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
853 s = i * grpsize + ofs
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
854 e = min((i + 1) * grpsize + ofs - 1, maxIdx)
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
855 batches.append({'start':s, 'end':e})
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
856
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
857 batch['batches'] = batches
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
858
476
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
859 pages = []
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
860 if pageZero and start == 1:
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
861 # correct beginning
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
862 idx = 0
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
863 else:
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
864 idx = start
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
865
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
866 for r in range(rows):
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
867 row = []
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
868 for c in range(cols):
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
869 if idx < minIdx or idx > maxIdx:
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
870 page = {'idx':None}
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
871 else:
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
872 page = {'idx':idx}
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
873
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
874 idx += 1
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
875 if pageFlowLtr:
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
876 row.append(page)
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
877 else:
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
878 row.insert(0, page)
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
879
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
880 pages.append(row)
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
881
480
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
882 if start > 1:
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
883 batch['prevStart'] = max(start - grpsize, 1)
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
884 else:
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
885 batch['prevStart'] = None
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
886
526
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
887 if start + grpsize <= maxIdx:
480
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
888 batch['nextStart'] = start + grpsize
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
889 else:
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
890 batch['nextStart'] = None
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
891
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
892 batch['pages'] = pages
482
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
893 return batch
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
894
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
895 def getBatch(self, start=1, size=10, end=0, data=None, fullData=True):
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
896 """returns dict with information for one screenfull of data."""
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
897 batch = {}
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
898 if end == 0:
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
899 end = start + size
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
900
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
901 nb = int(math.ceil(end / float(size)))
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
902 # list of all batch start and end points
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
903 batches = []
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
904 for i in range(nb):
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
905 s = i * size + 1
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
906 e = min((i + 1) * size, end)
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
907 batches.append({'start':s, 'end':e})
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
908
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
909 batch['batches'] = batches
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
910 # list of elements in this batch
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
911 this = []
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
912 j = 0
526
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
913 for i in range(start, min(start+size, end+1)):
482
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
914 if data:
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
915 if fullData:
526
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
916 d = data.get(i, None)
482
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
917 else:
526
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
918 d = data.get(j, None)
482
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
919 j += 1
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
920
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
921 else:
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
922 d = i+1
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
923
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
924 this.append(d)
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
925
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
926 batch['this'] = this
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
927 if start > 1:
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
928 batch['prevStart'] = max(start - size, 1)
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
929 else:
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
930 batch['prevStart'] = None
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
931
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
932 if start + size < end:
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
933 batch['nextStart'] = start + size
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
934 else:
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
935 batch['nextStart'] = None
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
936
526
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
937 logging.debug("getBatch start=%s size=%s end=%s batch=%s"%(start,size,end,repr(batch)))
480
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
938 return batch
476
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
939
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
940
463
89ad327b4bbd more renovation
casties
parents: 462
diff changeset
941 security.declareProtected('View management screens','changeDocumentViewerForm')
89ad327b4bbd more renovation
casties
parents: 462
diff changeset
942 changeDocumentViewerForm = PageTemplateFile('zpt/changeDocumentViewer', globals())
22
b139f9937e97 preliminary version 0.2
casties
parents: 20
diff changeset
943
526
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
944 def changeDocumentViewer(self,title="",digilibBaseUrl=None,thumbrows=2,thumbcols=5,authgroups='mpiwg',availableLayers=None,RESPONSE=None):
22
b139f9937e97 preliminary version 0.2
casties
parents: 20
diff changeset
945 """init document viewer"""
b139f9937e97 preliminary version 0.2
casties
parents: 20
diff changeset
946 self.title=title
b139f9937e97 preliminary version 0.2
casties
parents: 20
diff changeset
947 self.digilibBaseUrl = digilibBaseUrl
25
e93fb8cadd3a new, less preliminary version 0.2
casties
parents: 22
diff changeset
948 self.thumbrows = thumbrows
e93fb8cadd3a new, less preliminary version 0.2
casties
parents: 22
diff changeset
949 self.thumbcols = thumbcols
32
b25c89d693cf version 0.2.3 - first version with access control!
casties
parents: 31
diff changeset
950 self.authgroups = [s.strip().lower() for s in authgroups.split(',')]
463
89ad327b4bbd more renovation
casties
parents: 462
diff changeset
951 try:
89ad327b4bbd more renovation
casties
parents: 462
diff changeset
952 # assume MetaDataFolder instance is called metadata
89ad327b4bbd more renovation
casties
parents: 462
diff changeset
953 self.metadataService = getattr(self, 'metadata')
89ad327b4bbd more renovation
casties
parents: 462
diff changeset
954 except Exception, e:
89ad327b4bbd more renovation
casties
parents: 462
diff changeset
955 logging.error("Unable to find MetaDataFolder 'metadata': "+str(e))
526
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
956
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
957 self.setAvailableLayers(availableLayers)
463
89ad327b4bbd more renovation
casties
parents: 462
diff changeset
958
22
b139f9937e97 preliminary version 0.2
casties
parents: 20
diff changeset
959 if RESPONSE is not None:
b139f9937e97 preliminary version 0.2
casties
parents: 20
diff changeset
960 RESPONSE.redirect('manage_main')
0
dwinter
parents:
diff changeset
961
dwinter
parents:
diff changeset
962 def manage_AddDocumentViewerForm(self):
dwinter
parents:
diff changeset
963 """add the viewer form"""
22
b139f9937e97 preliminary version 0.2
casties
parents: 20
diff changeset
964 pt=PageTemplateFile('zpt/addDocumentViewer', globals()).__of__(self)
0
dwinter
parents:
diff changeset
965 return pt()
dwinter
parents:
diff changeset
966
84
a6e4f9b6729a first version with new full-text infrastructure and slightly changed templates
casties
parents: 83
diff changeset
967 def manage_AddDocumentViewer(self,id,imageScalerUrl="",textServerName="",title="",RESPONSE=None):
0
dwinter
parents:
diff changeset
968 """add the viewer"""
84
a6e4f9b6729a first version with new full-text infrastructure and slightly changed templates
casties
parents: 83
diff changeset
969 newObj=documentViewer(id,imageScalerUrl=imageScalerUrl,title=title,textServerName=textServerName)
0
dwinter
parents:
diff changeset
970 self._setObject(id,newObj)
dwinter
parents:
diff changeset
971
dwinter
parents:
diff changeset
972 if RESPONSE is not None:
dwinter
parents:
diff changeset
973 RESPONSE.redirect('manage_main')