annotate documentViewer.py @ 635:8d460ddb45b7 default tip

update digilib dirInfo-xml path.
author casties
date Fri, 06 May 2016 18:59:35 +0200
parents 618b600c805a
children
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
453
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
8 import xml.etree.ElementTree as ET
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
9
489
55e3398e395e more new templates. monkey-patch for App.ImageFile.
casties
parents: 488
diff changeset
10 import os
0
dwinter
parents:
diff changeset
11 import urllib
50
6c0f20cecc60 added evaluation of the presentation/info.xml in texttools
dwinter
parents: 49
diff changeset
12 import logging
61
f3d2f240692c fixed bug in calculation of group numbers
casties
parents: 59
diff changeset
13 import math
46
31059e3d9338 has now also a text mode viewMode=text
dwinter
parents: 45
diff changeset
14 import urlparse
526
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
15 import json
231
a88ece9a5e74 *** empty log message ***
abukhman
parents: 230
diff changeset
16
541
c4cc01b104d7 better metadata display for index page.
casties
parents: 538
diff changeset
17 from Products.MetaDataProvider import MetaDataFolder
c4cc01b104d7 better metadata display for index page.
casties
parents: 538
diff changeset
18
623
6012fe93f78c better scheme-less URL code.
casties
parents: 622
diff changeset
19 from SrvTxtUtils import getInt, utf8ify, getText, getHttpData, refreshingImageFileIndexHtml, sslifyUrl
52
92047eaa6272 zLOG exchanged by logging
dwinter
parents: 51
diff changeset
20
84
a6e4f9b6729a first version with new full-text infrastructure and slightly changed templates
casties
parents: 83
diff changeset
21
631
0c3aab828864 remove index meta ns
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 629
diff changeset
22 INDEXMETA_NS="http://md.mpiwg-berlin.mpg.de/ns/indexMeta#"
0c3aab828864 remove index meta ns
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 629
diff changeset
23
0c3aab828864 remove index meta ns
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 629
diff changeset
24 def removeINDEXMETA_NS(root): #entfernt den namespace von indexmeta aus dem dom #TODO evertyhing should be changed that it can deal with NS
0c3aab828864 remove index meta ns
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 629
diff changeset
25 for elem in root.getiterator():
0c3aab828864 remove index meta ns
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 629
diff changeset
26 print ("ETAG")
0c3aab828864 remove index meta ns
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 629
diff changeset
27 print(elem.tag)
0c3aab828864 remove index meta ns
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 629
diff changeset
28 if not hasattr(elem.tag, 'find'): continue # (1)
0c3aab828864 remove index meta ns
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 629
diff changeset
29
0c3aab828864 remove index meta ns
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 629
diff changeset
30 i = elem.tag.find('{%s}'%INDEXMETA_NS)
0c3aab828864 remove index meta ns
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 629
diff changeset
31 if i >= 0:
0c3aab828864 remove index meta ns
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 629
diff changeset
32 elem.tag = elem.tag[i+len(('{%s}'%INDEXMETA_NS)):]
0c3aab828864 remove index meta ns
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 629
diff changeset
33
0c3aab828864 remove index meta ns
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 629
diff changeset
34 print(elem.tag)
0c3aab828864 remove index meta ns
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 629
diff changeset
35
561
9255acc4518d CLOSED - # 256: display texts from different backends (sandbox)
casties
parents: 560
diff changeset
36 def getMDText(node):
9255acc4518d CLOSED - # 256: display texts from different backends (sandbox)
casties
parents: 560
diff changeset
37 """returns the @text content from the MetaDataProvider metadata node"""
9255acc4518d CLOSED - # 256: display texts from different backends (sandbox)
casties
parents: 560
diff changeset
38 if isinstance(node, dict):
9255acc4518d CLOSED - # 256: display texts from different backends (sandbox)
casties
parents: 560
diff changeset
39 return node.get('@text', None)
9255acc4518d CLOSED - # 256: display texts from different backends (sandbox)
casties
parents: 560
diff changeset
40
617
7aefbddddaf9 alpaha of hocr server support
dwinter
parents: 613
diff changeset
41 if isinstance(node,list): #more than one text file if there is an attribute don't choose it
7aefbddddaf9 alpaha of hocr server support
dwinter
parents: 613
diff changeset
42 for nodeInList in node:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents: 613
diff changeset
43 attr = nodeInList.get("@attr",None)
7aefbddddaf9 alpaha of hocr server support
dwinter
parents: 613
diff changeset
44 if attr is None:
7aefbddddaf9 alpaha of hocr server support
dwinter
parents: 613
diff changeset
45 return node.get('@text',None)
7aefbddddaf9 alpaha of hocr server support
dwinter
parents: 613
diff changeset
46 return None
7aefbddddaf9 alpaha of hocr server support
dwinter
parents: 613
diff changeset
47
561
9255acc4518d CLOSED - # 256: display texts from different backends (sandbox)
casties
parents: 560
diff changeset
48 return node
9255acc4518d CLOSED - # 256: display texts from different backends (sandbox)
casties
parents: 560
diff changeset
49
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
50 def getParentPath(path, cnt=1):
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
51 """returns pathname shortened by cnt"""
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
52 # make sure path doesn't end with /
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
53 path = path.rstrip('/')
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
54 # split by /, shorten, and reassemble
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
55 return '/'.join(path.split('/')[0:-cnt])
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
56
589
d8d6975cebcb more fixes for pf-parameter
casties
parents: 587
diff changeset
57 def getPnForPf(docinfo, pf, default=0):
d8d6975cebcb more fixes for pf-parameter
casties
parents: 587
diff changeset
58 """returns image number for image file name or default"""
587
6000c7e24d8a new parameter "pf" to specify image file name. (still some issues)
casties
parents: 585
diff changeset
59 if 'imgFileNames' in docinfo:
6000c7e24d8a new parameter "pf" to specify image file name. (still some issues)
casties
parents: 585
diff changeset
60 pn = docinfo['imgFileNames'].get(pf, None)
6000c7e24d8a new parameter "pf" to specify image file name. (still some issues)
casties
parents: 585
diff changeset
61 if pn is None:
6000c7e24d8a new parameter "pf" to specify image file name. (still some issues)
casties
parents: 585
diff changeset
62 # try to cut extension
6000c7e24d8a new parameter "pf" to specify image file name. (still some issues)
casties
parents: 585
diff changeset
63 xi = pf.rfind('.')
6000c7e24d8a new parameter "pf" to specify image file name. (still some issues)
casties
parents: 585
diff changeset
64 if xi > 0:
6000c7e24d8a new parameter "pf" to specify image file name. (still some issues)
casties
parents: 585
diff changeset
65 pf = pf[:xi]
6000c7e24d8a new parameter "pf" to specify image file name. (still some issues)
casties
parents: 585
diff changeset
66 # try again, else return 0
589
d8d6975cebcb more fixes for pf-parameter
casties
parents: 587
diff changeset
67 pn = docinfo['imgFileNames'].get(pf, default)
d8d6975cebcb more fixes for pf-parameter
casties
parents: 587
diff changeset
68 else:
d8d6975cebcb more fixes for pf-parameter
casties
parents: 587
diff changeset
69 # no extension
d8d6975cebcb more fixes for pf-parameter
casties
parents: 587
diff changeset
70 pn = default
587
6000c7e24d8a new parameter "pf" to specify image file name. (still some issues)
casties
parents: 585
diff changeset
71
6000c7e24d8a new parameter "pf" to specify image file name. (still some issues)
casties
parents: 585
diff changeset
72 return pn
6000c7e24d8a new parameter "pf" to specify image file name. (still some issues)
casties
parents: 585
diff changeset
73
589
d8d6975cebcb more fixes for pf-parameter
casties
parents: 587
diff changeset
74 return default
587
6000c7e24d8a new parameter "pf" to specify image file name. (still some issues)
casties
parents: 585
diff changeset
75
591
5850689ecfac ocrsearch layer for images.
casties
parents: 590
diff changeset
76 def getPfForPn(docinfo, pn, default=None):
5850689ecfac ocrsearch layer for images.
casties
parents: 590
diff changeset
77 """returns image file name for image number or default"""
5850689ecfac ocrsearch layer for images.
casties
parents: 590
diff changeset
78 if 'imgFileIndexes' in docinfo:
5850689ecfac ocrsearch layer for images.
casties
parents: 590
diff changeset
79 pn = docinfo['imgFileIndexes'].get(pn, default)
5850689ecfac ocrsearch layer for images.
casties
parents: 590
diff changeset
80 return pn
5850689ecfac ocrsearch layer for images.
casties
parents: 590
diff changeset
81
5850689ecfac ocrsearch layer for images.
casties
parents: 590
diff changeset
82 return default
5850689ecfac ocrsearch layer for images.
casties
parents: 590
diff changeset
83
585
83eeed69793f new annotator layer for images.
casties
parents: 584
diff changeset
84
22
b139f9937e97 preliminary version 0.2
casties
parents: 20
diff changeset
85 ##
b139f9937e97 preliminary version 0.2
casties
parents: 20
diff changeset
86 ## documentViewer class
b139f9937e97 preliminary version 0.2
casties
parents: 20
diff changeset
87 ##
b139f9937e97 preliminary version 0.2
casties
parents: 20
diff changeset
88 class documentViewer(Folder):
0
dwinter
parents:
diff changeset
89 """document viewer"""
dwinter
parents:
diff changeset
90 meta_type="Document viewer"
dwinter
parents:
diff changeset
91
dwinter
parents:
diff changeset
92 security=ClassSecurityInfo()
22
b139f9937e97 preliminary version 0.2
casties
parents: 20
diff changeset
93 manage_options=Folder.manage_options+(
507
3c01e8f4e72b renamed config tab in ZMI
casties
parents: 506
diff changeset
94 {'label':'Configuration','action':'changeDocumentViewerForm'},
0
dwinter
parents:
diff changeset
95 )
463
89ad327b4bbd more renovation
casties
parents: 462
diff changeset
96
89ad327b4bbd more renovation
casties
parents: 462
diff changeset
97 metadataService = None
89ad327b4bbd more renovation
casties
parents: 462
diff changeset
98 """MetaDataFolder instance"""
525
70c3ae5eac7c layers can have their own templates.
casties
parents: 518
diff changeset
99
0
dwinter
parents:
diff changeset
100
525
70c3ae5eac7c layers can have their own templates.
casties
parents: 518
diff changeset
101 #
22
b139f9937e97 preliminary version 0.2
casties
parents: 20
diff changeset
102 # templates and forms
525
70c3ae5eac7c layers can have their own templates.
casties
parents: 518
diff changeset
103 #
70c3ae5eac7c layers can have their own templates.
casties
parents: 518
diff changeset
104 # viewMode templates
594
da7daa783df4 rearranged viewer templates into folder.
casties
parents: 593
diff changeset
105 viewer_text = PageTemplateFile('zpt/viewer/viewer_text', globals())
615
d6eca930a534 hocr viewer eingebaut
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 613
diff changeset
106 viewer_hocr = PageTemplateFile('zpt/viewer/viewer_hocr', globals())
594
da7daa783df4 rearranged viewer templates into folder.
casties
parents: 593
diff changeset
107 viewer_xml = PageTemplateFile('zpt/viewer/viewer_xml', globals())
da7daa783df4 rearranged viewer templates into folder.
casties
parents: 593
diff changeset
108 viewer_image = PageTemplateFile('zpt/viewer/viewer_image', globals())
da7daa783df4 rearranged viewer templates into folder.
casties
parents: 593
diff changeset
109 viewer_index = PageTemplateFile('zpt/viewer/viewer_index', globals())
da7daa783df4 rearranged viewer templates into folder.
casties
parents: 593
diff changeset
110 viewer_thumbs = PageTemplateFile('zpt/viewer/viewer_thumbs', globals())
da7daa783df4 rearranged viewer templates into folder.
casties
parents: 593
diff changeset
111 viewer_indexonly = PageTemplateFile('zpt/viewer/viewer_indexonly', globals())
629
e36bf3226fde text image viewer eingecheckt
dwinter
parents: 626
diff changeset
112 viewer_text_image = PageTemplateFile('zpt/viewer/viewer_text_image', globals())
546
2928037f9a75 ASSIGNED - # 249: Annotations shared in groups
casties
parents: 543
diff changeset
113 # available layer types (annotator not default)
2928037f9a75 ASSIGNED - # 249: Annotations shared in groups
casties
parents: 543
diff changeset
114 builtinLayers = {'text': ['dict','search','gis'],
629
e36bf3226fde text image viewer eingecheckt
dwinter
parents: 626
diff changeset
115 'xml': None, 'image': None, 'index': ['extended'],'text_image': ['dict'],}
526
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
116 availableLayers = builtinLayers;
525
70c3ae5eac7c layers can have their own templates.
casties
parents: 518
diff changeset
117 # layer templates
594
da7daa783df4 rearranged viewer templates into folder.
casties
parents: 593
diff changeset
118 layer_text_dict = PageTemplateFile('zpt/viewer/layer_text_dict', globals())
629
e36bf3226fde text image viewer eingecheckt
dwinter
parents: 626
diff changeset
119 layer_text_image_dict = PageTemplateFile('zpt/viewer/layer_text_image_dict', globals())
594
da7daa783df4 rearranged viewer templates into folder.
casties
parents: 593
diff changeset
120 layer_text_search = PageTemplateFile('zpt/viewer/layer_text_search', globals())
da7daa783df4 rearranged viewer templates into folder.
casties
parents: 593
diff changeset
121 layer_text_annotator = PageTemplateFile('zpt/viewer/layer_text_annotator', globals())
da7daa783df4 rearranged viewer templates into folder.
casties
parents: 593
diff changeset
122 layer_text_gis = PageTemplateFile('zpt/viewer/layer_text_gis', globals())
da7daa783df4 rearranged viewer templates into folder.
casties
parents: 593
diff changeset
123 layer_text_pundit = PageTemplateFile('zpt/viewer/layer_text_pundit', globals())
da7daa783df4 rearranged viewer templates into folder.
casties
parents: 593
diff changeset
124 layer_image_annotator = PageTemplateFile('zpt/viewer/layer_image_annotator', globals())
da7daa783df4 rearranged viewer templates into folder.
casties
parents: 593
diff changeset
125 layer_image_search = PageTemplateFile('zpt/viewer/layer_image_search', globals())
da7daa783df4 rearranged viewer templates into folder.
casties
parents: 593
diff changeset
126 layer_index_extended = PageTemplateFile('zpt/viewer/layer_index_extended', globals())
525
70c3ae5eac7c layers can have their own templates.
casties
parents: 518
diff changeset
127 # toc templates
594
da7daa783df4 rearranged viewer templates into folder.
casties
parents: 593
diff changeset
128 toc_thumbs = PageTemplateFile('zpt/viewer/toc_thumbs', globals())
da7daa783df4 rearranged viewer templates into folder.
casties
parents: 593
diff changeset
129 toc_text = PageTemplateFile('zpt/viewer/toc_text', globals())
da7daa783df4 rearranged viewer templates into folder.
casties
parents: 593
diff changeset
130 toc_figures = PageTemplateFile('zpt/viewer/toc_figures', globals())
da7daa783df4 rearranged viewer templates into folder.
casties
parents: 593
diff changeset
131 toc_concordance = PageTemplateFile('zpt/viewer/toc_concordance', globals())
609
7962e6891d99 works with new notes and notesHandwritten.
casties
parents: 608
diff changeset
132 toc_notes = PageTemplateFile('zpt/viewer/toc_notes', globals())
594
da7daa783df4 rearranged viewer templates into folder.
casties
parents: 593
diff changeset
133 toc_handwritten = PageTemplateFile('zpt/viewer/toc_handwritten', globals())
da7daa783df4 rearranged viewer templates into folder.
casties
parents: 593
diff changeset
134 toc_none = PageTemplateFile('zpt/viewer/toc_none', globals())
525
70c3ae5eac7c layers can have their own templates.
casties
parents: 518
diff changeset
135 # other templates
594
da7daa783df4 rearranged viewer templates into folder.
casties
parents: 593
diff changeset
136 common_template = PageTemplateFile('zpt/viewer/common_template', globals())
da7daa783df4 rearranged viewer templates into folder.
casties
parents: 593
diff changeset
137 info_xml = PageTemplateFile('zpt/viewer/info_xml', globals())
487
8fd6f26fe29e more new templates
casties
parents: 486
diff changeset
138 docuviewer_css = ImageFile('css/docuviewer.css',globals())
532
0b8bed1223ad new layout and styles.
casties
parents: 530
diff changeset
139 # make docuviewer_css refreshable for development
490
6f116b86a226 more new template stuff. moved ImageFile index method to SrvTxtUtils
casties
parents: 489
diff changeset
140 docuviewer_css.index_html = refreshingImageFileIndexHtml
535
510bae2b593b more fixes, e.g. IE support. first version of index page.
casties
parents: 532
diff changeset
141 docuviewer_ie_css = ImageFile('css/docuviewer_ie.css',globals())
510bae2b593b more fixes, e.g. IE support. first version of index page.
casties
parents: 532
diff changeset
142 # make docuviewer_ie_css refreshable for development
585
83eeed69793f new annotator layer for images.
casties
parents: 584
diff changeset
143 #docuviewer_ie_css.index_html = refreshingImageFileIndexHtml
501
29c6d09a506c more cleanup.
casties
parents: 499
diff changeset
144 jquery_js = ImageFile('js/jquery.js',globals())
130
5c779d7b5f71 more modular version with separate object MpdlXmlTextServer
casties
parents: 128
diff changeset
145
5c779d7b5f71 more modular version with separate object MpdlXmlTextServer
casties
parents: 128
diff changeset
146
95
db6d594aa4d9 Last update with search function (getSearch)
abukhman
parents: 90
diff changeset
147 def __init__(self,id,imageScalerUrl=None,textServerName=None,title="",digilibBaseUrl=None,thumbcols=2,thumbrows=5,authgroups="mpiwg"):
0
dwinter
parents:
diff changeset
148 """init document viewer"""
dwinter
parents:
diff changeset
149 self.id=id
dwinter
parents:
diff changeset
150 self.title=title
25
e93fb8cadd3a new, less preliminary version 0.2
casties
parents: 22
diff changeset
151 self.thumbcols = thumbcols
e93fb8cadd3a new, less preliminary version 0.2
casties
parents: 22
diff changeset
152 self.thumbrows = thumbrows
32
b25c89d693cf version 0.2.3 - first version with access control!
casties
parents: 31
diff changeset
153 # authgroups is list of authorized groups (delimited by ,)
b25c89d693cf version 0.2.3 - first version with access control!
casties
parents: 31
diff changeset
154 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
155 # 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
156
a6e4f9b6729a first version with new full-text infrastructure and slightly changed templates
casties
parents: 83
diff changeset
157 templateFolder = Folder('template')
498
3146b4e7b6a5 more clean up.
casties
parents: 491
diff changeset
158 self['template'] = templateFolder # Zope-2.12 style
3146b4e7b6a5 more clean up.
casties
parents: 491
diff changeset
159 #self._setObject('template',templateFolder) # old style
84
a6e4f9b6729a first version with new full-text infrastructure and slightly changed templates
casties
parents: 83
diff changeset
160 try:
130
5c779d7b5f71 more modular version with separate object MpdlXmlTextServer
casties
parents: 128
diff changeset
161 import MpdlXmlTextServer
132
39167e96e582 fixed creation of text server on __init__
casties
parents: 130
diff changeset
162 textServer = MpdlXmlTextServer.MpdlXmlTextServer(id='fulltextclient',serverName=textServerName)
498
3146b4e7b6a5 more clean up.
casties
parents: 491
diff changeset
163 templateFolder['fulltextclient'] = textServer
3146b4e7b6a5 more clean up.
casties
parents: 491
diff changeset
164 #templateFolder._setObject('fulltextclient',textServer)
84
a6e4f9b6729a first version with new full-text infrastructure and slightly changed templates
casties
parents: 83
diff changeset
165 except Exception, e:
130
5c779d7b5f71 more modular version with separate object MpdlXmlTextServer
casties
parents: 128
diff changeset
166 logging.error("Unable to create MpdlXmlTextServer for fulltextclient: "+str(e))
463
89ad327b4bbd more renovation
casties
parents: 462
diff changeset
167
84
a6e4f9b6729a first version with new full-text infrastructure and slightly changed templates
casties
parents: 83
diff changeset
168 try:
a6e4f9b6729a first version with new full-text infrastructure and slightly changed templates
casties
parents: 83
diff changeset
169 from Products.zogiLib.zogiLib import zogiLib
a6e4f9b6729a first version with new full-text infrastructure and slightly changed templates
casties
parents: 83
diff changeset
170 zogilib = zogiLib(id="zogilib", title="zogilib for docuviewer", dlServerURL=imageScalerUrl, layout="book")
498
3146b4e7b6a5 more clean up.
casties
parents: 491
diff changeset
171 templateFolder['zogilib'] = zogilib
3146b4e7b6a5 more clean up.
casties
parents: 491
diff changeset
172 #templateFolder._setObject('zogilib',zogilib)
84
a6e4f9b6729a first version with new full-text infrastructure and slightly changed templates
casties
parents: 83
diff changeset
173 except Exception, e:
607
cb5a9c4f5e3a CLOSED - # 268: display of subdocuments
casties
parents: 602
diff changeset
174 logging.error("Unable to create zogiLib for 'zogilib': "+str(e))
463
89ad327b4bbd more renovation
casties
parents: 462
diff changeset
175
89ad327b4bbd more renovation
casties
parents: 462
diff changeset
176 try:
89ad327b4bbd more renovation
casties
parents: 462
diff changeset
177 # assume MetaDataFolder instance is called metadata
89ad327b4bbd more renovation
casties
parents: 462
diff changeset
178 self.metadataService = getattr(self, 'metadata')
89ad327b4bbd more renovation
casties
parents: 462
diff changeset
179 except Exception, e:
89ad327b4bbd more renovation
casties
parents: 462
diff changeset
180 logging.error("Unable to find MetaDataFolder 'metadata': "+str(e))
89ad327b4bbd more renovation
casties
parents: 462
diff changeset
181
477
17f0290b2327 small fixes.
casties
parents: 476
diff changeset
182 if digilibBaseUrl is not None:
17f0290b2327 small fixes.
casties
parents: 476
diff changeset
183 self.digilibBaseUrl = digilibBaseUrl
566
4a31608f8b0e more new MpiwgXmlTextServer.
casties
parents: 565
diff changeset
184 self.digilibScalerUrl = digilibBaseUrl + '/servlet/Scaler'
4a31608f8b0e more new MpiwgXmlTextServer.
casties
parents: 565
diff changeset
185 self.digilibViewerUrl = digilibBaseUrl + '/jquery/digilib.html'
477
17f0290b2327 small fixes.
casties
parents: 476
diff changeset
186
623
6012fe93f78c better scheme-less URL code.
casties
parents: 622
diff changeset
187
130
5c779d7b5f71 more modular version with separate object MpdlXmlTextServer
casties
parents: 128
diff changeset
188 # proxy text server methods to fulltextclient
5c779d7b5f71 more modular version with separate object MpdlXmlTextServer
casties
parents: 128
diff changeset
189 def getTextPage(self, **args):
498
3146b4e7b6a5 more clean up.
casties
parents: 491
diff changeset
190 """returns full text content of page"""
130
5c779d7b5f71 more modular version with separate object MpdlXmlTextServer
casties
parents: 128
diff changeset
191 return self.template.fulltextclient.getTextPage(**args)
22
b139f9937e97 preliminary version 0.2
casties
parents: 20
diff changeset
192
508
d5a47f82e755 more cleanup.
casties
parents: 507
diff changeset
193 def getSearchResults(self, **args):
d5a47f82e755 more cleanup.
casties
parents: 507
diff changeset
194 """loads list of search results and stores XML in docinfo"""
d5a47f82e755 more cleanup.
casties
parents: 507
diff changeset
195 return self.template.fulltextclient.getSearchResults(**args)
d5a47f82e755 more cleanup.
casties
parents: 507
diff changeset
196
d5a47f82e755 more cleanup.
casties
parents: 507
diff changeset
197 def getResultsPage(self, **args):
d5a47f82e755 more cleanup.
casties
parents: 507
diff changeset
198 """returns one page of the search results"""
d5a47f82e755 more cleanup.
casties
parents: 507
diff changeset
199 return self.template.fulltextclient.getResultsPage(**args)
d5a47f82e755 more cleanup.
casties
parents: 507
diff changeset
200
516
7d7b639d7be7 add methods to use doc-info.xql.
casties
parents: 514
diff changeset
201 def getTextInfo(self, **args):
7d7b639d7be7 add methods to use doc-info.xql.
casties
parents: 514
diff changeset
202 """returns document info from the text server"""
7d7b639d7be7 add methods to use doc-info.xql.
casties
parents: 514
diff changeset
203 return self.template.fulltextclient.getTextInfo(**args)
7d7b639d7be7 add methods to use doc-info.xql.
casties
parents: 514
diff changeset
204
499
3f9703746fef more cleanup. new template for viewMode=index (not pretty so far).
casties
parents: 498
diff changeset
205 def getToc(self, **args):
508
d5a47f82e755 more cleanup.
casties
parents: 507
diff changeset
206 """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
207 return self.template.fulltextclient.getToc(**args)
3f9703746fef more cleanup. new template for viewMode=index (not pretty so far).
casties
parents: 498
diff changeset
208
3f9703746fef more cleanup. new template for viewMode=index (not pretty so far).
casties
parents: 498
diff changeset
209 def getTocPage(self, **args):
3f9703746fef more cleanup. new template for viewMode=index (not pretty so far).
casties
parents: 498
diff changeset
210 """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
211 return self.template.fulltextclient.getTocPage(**args)
3f9703746fef more cleanup. new template for viewMode=index (not pretty so far).
casties
parents: 498
diff changeset
212
561
9255acc4518d CLOSED - # 256: display texts from different backends (sandbox)
casties
parents: 560
diff changeset
213 def getRepositoryType(self, **args):
9255acc4518d CLOSED - # 256: display texts from different backends (sandbox)
casties
parents: 560
diff changeset
214 """get repository type"""
9255acc4518d CLOSED - # 256: display texts from different backends (sandbox)
casties
parents: 560
diff changeset
215 return self.template.fulltextclient.getRepositoryType(**args)
9255acc4518d CLOSED - # 256: display texts from different backends (sandbox)
casties
parents: 560
diff changeset
216
559
eabfbad6aeb4 "extended" layer for index view and some bugfixes.
casties
parents: 558
diff changeset
217 def getTextDownloadUrl(self, **args):
610
0488cd12355b gis mode works again.
casties
parents: 609
diff changeset
218 """get URL to download the full text"""
559
eabfbad6aeb4 "extended" layer for index view and some bugfixes.
casties
parents: 558
diff changeset
219 return self.template.fulltextclient.getTextDownloadUrl(**args)
eabfbad6aeb4 "extended" layer for index view and some bugfixes.
casties
parents: 558
diff changeset
220
506
67014399894d cleaned out all 4suite code and weird methods.
casties
parents: 503
diff changeset
221 def getPlacesOnPage(self, **args):
67014399894d cleaned out all 4suite code and weird methods.
casties
parents: 503
diff changeset
222 """get list of gis places on one page"""
67014399894d cleaned out all 4suite code and weird methods.
casties
parents: 503
diff changeset
223 return self.template.fulltextclient.getPlacesOnPage(**args)
307
ec5e920a61e6 *** empty log message ***
abukhman
parents: 256
diff changeset
224
548
7acc919f52ff mode=filepath works again
casties
parents: 546
diff changeset
225 # Thumb list for CoolIris Plugin
499
3f9703746fef more cleanup. new template for viewMode=index (not pretty so far).
casties
parents: 498
diff changeset
226 thumbs_main_rss = PageTemplateFile('zpt/thumbs_main_rss', globals())
68
b8457fc33446 piclens rss/support
dwinter
parents: 65
diff changeset
227 security.declareProtected('View','thumbs_rss')
b8457fc33446 piclens rss/support
dwinter
parents: 65
diff changeset
228 def thumbs_rss(self,mode,url,viewMode="auto",start=None,pn=1):
b8457fc33446 piclens rss/support
dwinter
parents: 65
diff changeset
229 '''
b8457fc33446 piclens rss/support
dwinter
parents: 65
diff changeset
230 view it
b8457fc33446 piclens rss/support
dwinter
parents: 65
diff changeset
231 @param mode: defines how to access the document behind url
b8457fc33446 piclens rss/support
dwinter
parents: 65
diff changeset
232 @param url: url which contains display information
590
ed4485d2748e viewMode "images" changed to "image".
casties
parents: 589
diff changeset
233 @param viewMode: image: display images, text: display text, default is auto (try text, else image)
68
b8457fc33446 piclens rss/support
dwinter
parents: 65
diff changeset
234
b8457fc33446 piclens rss/support
dwinter
parents: 65
diff changeset
235 '''
b8457fc33446 piclens rss/support
dwinter
parents: 65
diff changeset
236
b8457fc33446 piclens rss/support
dwinter
parents: 65
diff changeset
237 if not hasattr(self, 'template'):
590
ed4485d2748e viewMode "images" changed to "image".
casties
parents: 589
diff changeset
238 # this won't work
ed4485d2748e viewMode "images" changed to "image".
casties
parents: 589
diff changeset
239 logging.error("template folder missing!")
ed4485d2748e viewMode "images" changed to "image".
casties
parents: 589
diff changeset
240 return "ERROR: template folder missing!"
ed4485d2748e viewMode "images" changed to "image".
casties
parents: 589
diff changeset
241
68
b8457fc33446 piclens rss/support
dwinter
parents: 65
diff changeset
242 if not self.digilibBaseUrl:
623
6012fe93f78c better scheme-less URL code.
casties
parents: 622
diff changeset
243 self.digilibBaseUrl = self.findDigilibUrl() or "http://digilib.mpiwg-berlin.mpg.de/digitallibrary"
68
b8457fc33446 piclens rss/support
dwinter
parents: 65
diff changeset
244
b8457fc33446 piclens rss/support
dwinter
parents: 65
diff changeset
245 docinfo = self.getDocinfo(mode=mode,url=url)
338
0576f524e2ee *** empty log message ***
abukhman
parents: 337
diff changeset
246 #pageinfo = self.getPageinfo(start=start,current=pn,docinfo=docinfo)
587
6000c7e24d8a new parameter "pf" to specify image file name. (still some issues)
casties
parents: 585
diff changeset
247 pageinfo = self.getPageinfo(start=start,pn=pn, docinfo=docinfo)
331
6cde7f02786e *** empty log message ***
abukhman
parents: 330
diff changeset
248 ''' ZDES '''
68
b8457fc33446 piclens rss/support
dwinter
parents: 65
diff changeset
249 pt = getattr(self.template, 'thumbs_main_rss')
b8457fc33446 piclens rss/support
dwinter
parents: 65
diff changeset
250
b8457fc33446 piclens rss/support
dwinter
parents: 65
diff changeset
251 if viewMode=="auto": # automodus gewaehlt
453
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
252 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
253 viewMode="text"
b8457fc33446 piclens rss/support
dwinter
parents: 65
diff changeset
254 else:
590
ed4485d2748e viewMode "images" changed to "image".
casties
parents: 589
diff changeset
255 viewMode="image"
68
b8457fc33446 piclens rss/support
dwinter
parents: 65
diff changeset
256
b8457fc33446 piclens rss/support
dwinter
parents: 65
diff changeset
257 return pt(docinfo=docinfo,pageinfo=pageinfo,viewMode=viewMode)
465
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
258
68
b8457fc33446 piclens rss/support
dwinter
parents: 65
diff changeset
259
22
b139f9937e97 preliminary version 0.2
casties
parents: 20
diff changeset
260 security.declareProtected('View','index_html')
589
d8d6975cebcb more fixes for pf-parameter
casties
parents: 587
diff changeset
261 def index_html(self, url, mode="texttool", viewMode="auto", viewLayer=None, tocMode=None, start=None, pn=None, pf=None):
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
262 """
543
6cdc31e9ed8e fixed problem with dict-mode in default view.
casties
parents: 541
diff changeset
263 show page
471
415a7026eeda split viewMode in viewMode and viewType
casties
parents: 469
diff changeset
264 @param url: url which contains display information
57
7cdb0fc34a92 added getInfo_xml method
casties
parents: 55
diff changeset
265 @param mode: defines how to access the document behind url
615
d6eca930a534 hocr viewer eingebaut
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 613
diff changeset
266 @param viewMode: 'image': display images, 'text': display text, 'xml': display xml, default is 'auto', 'hocr' : hocr format
543
6cdc31e9ed8e fixed problem with dict-mode in default view.
casties
parents: 541
diff changeset
267 @param viewLayer: sub-type of viewMode, e.g. layer 'dict' for viewMode='text'
99
4738a696d265 Search function update
abukhman
parents: 97
diff changeset
268 @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
269 """
0
dwinter
parents:
diff changeset
270
587
6000c7e24d8a new parameter "pf" to specify image file name. (still some issues)
casties
parents: 585
diff changeset
271 logging.debug("documentViewer(index_html) mode=%s url=%s viewMode=%s viewLayer=%s start=%s pn=%s pf=%s"%(mode,url,viewMode,viewLayer,start,pn,pf))
22
b139f9937e97 preliminary version 0.2
casties
parents: 20
diff changeset
272
b139f9937e97 preliminary version 0.2
casties
parents: 20
diff changeset
273 if not hasattr(self, 'template'):
84
a6e4f9b6729a first version with new full-text infrastructure and slightly changed templates
casties
parents: 83
diff changeset
274 # this won't work
a6e4f9b6729a first version with new full-text infrastructure and slightly changed templates
casties
parents: 83
diff changeset
275 logging.error("template folder missing!")
a6e4f9b6729a first version with new full-text infrastructure and slightly changed templates
casties
parents: 83
diff changeset
276 return "ERROR: template folder missing!"
617
7aefbddddaf9 alpaha of hocr server support
dwinter
parents: 613
diff changeset
277
84
a6e4f9b6729a first version with new full-text infrastructure and slightly changed templates
casties
parents: 83
diff changeset
278 if not getattr(self, 'digilibBaseUrl', None):
132
39167e96e582 fixed creation of text server on __init__
casties
parents: 130
diff changeset
279 self.digilibBaseUrl = self.findDigilibUrl() or "http://digilib.mpiwg-berlin.mpg.de/digitallibrary"
22
b139f9937e97 preliminary version 0.2
casties
parents: 20
diff changeset
280
548
7acc919f52ff mode=filepath works again
casties
parents: 546
diff changeset
281 # mode=filepath should not have toc-thumbs
7acc919f52ff mode=filepath works again
casties
parents: 546
diff changeset
282 if tocMode is None:
7acc919f52ff mode=filepath works again
casties
parents: 546
diff changeset
283 if mode == "filepath":
7acc919f52ff mode=filepath works again
casties
parents: 546
diff changeset
284 tocMode = "none"
7acc919f52ff mode=filepath works again
casties
parents: 546
diff changeset
285 else:
7acc919f52ff mode=filepath works again
casties
parents: 546
diff changeset
286 tocMode = "thumbs"
7acc919f52ff mode=filepath works again
casties
parents: 546
diff changeset
287
543
6cdc31e9ed8e fixed problem with dict-mode in default view.
casties
parents: 541
diff changeset
288 # docinfo: information about document (cached)
518
91051b36b9cc uses xml info from doc-info.xql for table of contents now.
casties
parents: 516
diff changeset
289 docinfo = self.getDocinfo(mode=mode,url=url,tocMode=tocMode)
97
2b8fd19432fb Last update
abukhman
parents: 96
diff changeset
290
543
6cdc31e9ed8e fixed problem with dict-mode in default view.
casties
parents: 541
diff changeset
291 # userinfo: user settings (cached)
6cdc31e9ed8e fixed problem with dict-mode in default view.
casties
parents: 541
diff changeset
292 userinfo = self.getUserinfo()
6cdc31e9ed8e fixed problem with dict-mode in default view.
casties
parents: 541
diff changeset
293
471
415a7026eeda split viewMode in viewMode and viewType
casties
parents: 469
diff changeset
294 # auto viewMode: text if there is a text else images
455
0a53fea83df7 more work renovating
casties
parents: 454
diff changeset
295 if viewMode=="auto":
530
5c7433c2515c fix problems with texttool/text
casties
parents: 528
diff changeset
296 if docinfo.get('textURLPath', None):
5c7433c2515c fix problems with texttool/text
casties
parents: 528
diff changeset
297 # docinfo.get('textURL', None) not implemented yet
471
415a7026eeda split viewMode in viewMode and viewType
casties
parents: 469
diff changeset
298 viewMode = "text"
543
6cdc31e9ed8e fixed problem with dict-mode in default view.
casties
parents: 541
diff changeset
299 if viewLayer is None and 'viewLayer' not in userinfo:
6cdc31e9ed8e fixed problem with dict-mode in default view.
casties
parents: 541
diff changeset
300 # use layer dict as default
508
d5a47f82e755 more cleanup.
casties
parents: 507
diff changeset
301 viewLayer = "dict"
51
c5d3aabbf61b textviewer now integrated, new modus auto introduced as standard for viewing
dwinter
parents: 50
diff changeset
302 else:
590
ed4485d2748e viewMode "images" changed to "image".
casties
parents: 589
diff changeset
303 viewMode = "image"
90
6a4a72033d58 new version with new full-text infrastructure and some more changed templates
casties
parents: 84
diff changeset
304
474
0bc4a153863a more cleanup (before reversing macro order)
casties
parents: 473
diff changeset
305 elif viewMode == "text_dict":
0bc4a153863a more cleanup (before reversing macro order)
casties
parents: 473
diff changeset
306 # legacy fix
0bc4a153863a more cleanup (before reversing macro order)
casties
parents: 473
diff changeset
307 viewMode = "text"
503
030251fe9dbc more cleanup.
casties
parents: 501
diff changeset
308 viewLayer = "dict"
474
0bc4a153863a more cleanup (before reversing macro order)
casties
parents: 473
diff changeset
309
590
ed4485d2748e viewMode "images" changed to "image".
casties
parents: 589
diff changeset
310 elif viewMode == 'images':
ed4485d2748e viewMode "images" changed to "image".
casties
parents: 589
diff changeset
311 # legacy fix
ed4485d2748e viewMode "images" changed to "image".
casties
parents: 589
diff changeset
312 viewMode = 'image'
ed4485d2748e viewMode "images" changed to "image".
casties
parents: 589
diff changeset
313 self.REQUEST['viewMode'] = 'image'
ed4485d2748e viewMode "images" changed to "image".
casties
parents: 589
diff changeset
314
543
6cdc31e9ed8e fixed problem with dict-mode in default view.
casties
parents: 541
diff changeset
315 # safe viewLayer in userinfo
6cdc31e9ed8e fixed problem with dict-mode in default view.
casties
parents: 541
diff changeset
316 userinfo['viewLayer'] = viewLayer
548
7acc919f52ff mode=filepath works again
casties
parents: 546
diff changeset
317
543
6cdc31e9ed8e fixed problem with dict-mode in default view.
casties
parents: 541
diff changeset
318 # pageinfo: information about page (not cached)
587
6000c7e24d8a new parameter "pf" to specify image file name. (still some issues)
casties
parents: 585
diff changeset
319 pageinfo = self.getPageinfo(start=start, pn=pn, pf=pf, docinfo=docinfo, userinfo=userinfo, viewMode=viewMode, viewLayer=viewLayer, tocMode=tocMode)
469
15394486ab75 working with new templates
casties
parents: 468
diff changeset
320
475
5a3ab27385ce more new template stuff
casties
parents: 474
diff changeset
321 # get template /template/viewer_$viewMode
5a3ab27385ce more new template stuff
casties
parents: 474
diff changeset
322 pt = getattr(self.template, 'viewer_%s'%viewMode, None)
5a3ab27385ce more new template stuff
casties
parents: 474
diff changeset
323 if pt is None:
5a3ab27385ce more new template stuff
casties
parents: 474
diff changeset
324 logging.error("No template for viewMode=%s!"%viewMode)
5a3ab27385ce more new template stuff
casties
parents: 474
diff changeset
325 # TODO: error page?
5a3ab27385ce more new template stuff
casties
parents: 474
diff changeset
326 return "No template for viewMode=%s!"%viewMode
5a3ab27385ce more new template stuff
casties
parents: 474
diff changeset
327
455
0a53fea83df7 more work renovating
casties
parents: 454
diff changeset
328 # and execute with parameters
471
415a7026eeda split viewMode in viewMode and viewType
casties
parents: 469
diff changeset
329 return pt(docinfo=docinfo, pageinfo=pageinfo)
0
dwinter
parents:
diff changeset
330
525
70c3ae5eac7c layers can have their own templates.
casties
parents: 518
diff changeset
331 def getAvailableLayers(self):
70c3ae5eac7c layers can have their own templates.
casties
parents: 518
diff changeset
332 """returns dict with list of available layers per viewMode"""
70c3ae5eac7c layers can have their own templates.
casties
parents: 518
diff changeset
333 return self.availableLayers
70c3ae5eac7c layers can have their own templates.
casties
parents: 518
diff changeset
334
84
a6e4f9b6729a first version with new full-text infrastructure and slightly changed templates
casties
parents: 83
diff changeset
335 def findDigilibUrl(self):
a6e4f9b6729a first version with new full-text infrastructure and slightly changed templates
casties
parents: 83
diff changeset
336 """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
337 url = self.template.zogilib.getDLBaseUrl()
624
80a0191ae51c move sslification to only client-visible urls.
casties
parents: 623
diff changeset
338 return url
480
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
339
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
340 def getScalerUrl(self, fn=None, pn=None, dw=100, dh=100, docinfo=None):
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
341 """returns URL to digilib Scaler with params"""
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
342 url = None
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
343 if docinfo is not None:
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
344 url = docinfo.get('imageURL', None)
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
345
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
346 if url is None:
566
4a31608f8b0e more new MpiwgXmlTextServer.
casties
parents: 565
diff changeset
347 url = self.digilibScalerUrl
480
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
348 if fn is None and docinfo is not None:
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
349 fn = docinfo.get('imagePath','')
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
350
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
351 url += "fn=%s"%fn
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
352
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
353 if pn:
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
354 url += "&pn=%s"%pn
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
355
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
356 url += "&dw=%s&dh=%s"%(dw,dh)
624
80a0191ae51c move sslification to only client-visible urls.
casties
parents: 623
diff changeset
357 return sslifyUrl(url, self, force=True)
126
c6dcf12e3807 added method to get url of viewer instance
casties
parents: 124
diff changeset
358
c6dcf12e3807 added method to get url of viewer instance
casties
parents: 124
diff changeset
359 def getDocumentViewerURL(self):
c6dcf12e3807 added method to get url of viewer instance
casties
parents: 124
diff changeset
360 """returns the URL of this instance"""
c6dcf12e3807 added method to get url of viewer instance
casties
parents: 124
diff changeset
361 return self.absolute_url()
84
a6e4f9b6729a first version with new full-text infrastructure and slightly changed templates
casties
parents: 83
diff changeset
362
a6e4f9b6729a first version with new full-text infrastructure and slightly changed templates
casties
parents: 83
diff changeset
363 def getStyle(self, idx, selected, style=""):
480
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
364 """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
365 #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
366 if idx == selected:
a6e4f9b6729a first version with new full-text infrastructure and slightly changed templates
casties
parents: 83
diff changeset
367 return style + 'sel'
a6e4f9b6729a first version with new full-text infrastructure and slightly changed templates
casties
parents: 83
diff changeset
368 else:
a6e4f9b6729a first version with new full-text infrastructure and slightly changed templates
casties
parents: 83
diff changeset
369 return style
74
dwinter
parents: 73
diff changeset
370
478
cd37d6f8d5e8 more cleanup
casties
parents: 477
diff changeset
371 def getParams(self, param=None, val=None, params=None, duplicates=None):
469
15394486ab75 working with new templates
casties
parents: 468
diff changeset
372 """returns dict with URL parameters.
15394486ab75 working with new templates
casties
parents: 468
diff changeset
373
15394486ab75 working with new templates
casties
parents: 468
diff changeset
374 Takes URL parameters and additionally param=val or dict params.
15394486ab75 working with new templates
casties
parents: 468
diff changeset
375 Deletes key if value is None."""
453
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
376 # copy existing request params
469
15394486ab75 working with new templates
casties
parents: 468
diff changeset
377 newParams=self.REQUEST.form.copy()
453
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
378 # change single param
25
e93fb8cadd3a new, less preliminary version 0.2
casties
parents: 22
diff changeset
379 if param is not None:
31
c6451e8d5d23 more small fixes - now version 0.2.2
casties
parents: 29
diff changeset
380 if val is None:
469
15394486ab75 working with new templates
casties
parents: 468
diff changeset
381 if newParams.has_key(param):
15394486ab75 working with new templates
casties
parents: 468
diff changeset
382 del newParams[param]
25
e93fb8cadd3a new, less preliminary version 0.2
casties
parents: 22
diff changeset
383 else:
469
15394486ab75 working with new templates
casties
parents: 468
diff changeset
384 newParams[param] = str(val)
84
a6e4f9b6729a first version with new full-text infrastructure and slightly changed templates
casties
parents: 83
diff changeset
385
453
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
386 # change more params
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
387 if params is not None:
478
cd37d6f8d5e8 more cleanup
casties
parents: 477
diff changeset
388 for (k, v) in params.items():
453
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
389 if v is None:
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
390 # val=None removes param
469
15394486ab75 working with new templates
casties
parents: 468
diff changeset
391 if newParams.has_key(k):
15394486ab75 working with new templates
casties
parents: 468
diff changeset
392 del newParams[k]
453
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
393
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
394 else:
469
15394486ab75 working with new templates
casties
parents: 468
diff changeset
395 newParams[k] = v
478
cd37d6f8d5e8 more cleanup
casties
parents: 477
diff changeset
396
cd37d6f8d5e8 more cleanup
casties
parents: 477
diff changeset
397 if duplicates:
cd37d6f8d5e8 more cleanup
casties
parents: 477
diff changeset
398 # eliminate lists (coming from duplicate keys)
cd37d6f8d5e8 more cleanup
casties
parents: 477
diff changeset
399 for (k,v) in newParams.items():
cd37d6f8d5e8 more cleanup
casties
parents: 477
diff changeset
400 if isinstance(v, list):
cd37d6f8d5e8 more cleanup
casties
parents: 477
diff changeset
401 if duplicates == 'comma':
cd37d6f8d5e8 more cleanup
casties
parents: 477
diff changeset
402 # make comma-separated list of non-empty entries
cd37d6f8d5e8 more cleanup
casties
parents: 477
diff changeset
403 newParams[k] = ','.join([t for t in v if t])
cd37d6f8d5e8 more cleanup
casties
parents: 477
diff changeset
404 elif duplicates == 'first':
cd37d6f8d5e8 more cleanup
casties
parents: 477
diff changeset
405 # take first non-empty entry
cd37d6f8d5e8 more cleanup
casties
parents: 477
diff changeset
406 newParams[k] = [t for t in v if t][0]
cd37d6f8d5e8 more cleanup
casties
parents: 477
diff changeset
407
469
15394486ab75 working with new templates
casties
parents: 468
diff changeset
408 return newParams
15394486ab75 working with new templates
casties
parents: 468
diff changeset
409
478
cd37d6f8d5e8 more cleanup
casties
parents: 477
diff changeset
410 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
411 """returns URL to documentviewer with parameter param set to val or from dict params"""
478
cd37d6f8d5e8 more cleanup
casties
parents: 477
diff changeset
412 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
413 # quote values and assemble into query string (not escaping '/')
514
c55e376be01b search works even with unicode...
casties
parents: 513
diff changeset
414 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
415 if baseUrl is None:
469
15394486ab75 working with new templates
casties
parents: 468
diff changeset
416 baseUrl = self.getDocumentViewerURL()
453
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
417
beb7ccb92564 first version using elementtree instead of 4suite xml
casties
parents: 405
diff changeset
418 url = "%s?%s"%(baseUrl, ps)
25
e93fb8cadd3a new, less preliminary version 0.2
casties
parents: 22
diff changeset
419 return url
e93fb8cadd3a new, less preliminary version 0.2
casties
parents: 22
diff changeset
420
478
cd37d6f8d5e8 more cleanup
casties
parents: 477
diff changeset
421 def getLinkAmp(self, param=None, val=None, params=None, baseUrl=None, duplicates='comma'):
68
b8457fc33446 piclens rss/support
dwinter
parents: 65
diff changeset
422 """link to documentviewer with parameter param set to val"""
478
cd37d6f8d5e8 more cleanup
casties
parents: 477
diff changeset
423 return self.getLink(param=param, val=val, params=params, baseUrl=baseUrl, paramSep='&amp;', duplicates=duplicates)
81
fae97f071724 fixed problem with info.xml when url without index.meta
casties
parents: 79
diff changeset
424
526
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
425
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
426 def setAvailableLayers(self, newLayerString=None):
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
427 """sets availableLayers to newLayerString or tries to autodetect available layers.
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
428 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
429 newLayerString is parsed as JSON."""
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
430 if newLayerString is not None:
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
431 try:
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
432 layers = json.loads(newLayerString)
590
ed4485d2748e viewMode "images" changed to "image".
casties
parents: 589
diff changeset
433 if 'text' in layers and 'image' in layers:
526
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
434 self.availableLayers = layers
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
435 return
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
436 except:
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
437 pass
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
438
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
439 logging.error("invalid layers=%s! autodetecting..."%repr(newLayerString))
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
440
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
441 # start with builtin layers
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
442 self.availableLayers = self.builtinLayers.copy()
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
443 # add layers from templates
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
444 for t in self.template:
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
445 if t.startswith('layer_'):
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
446 try:
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
447 (x, m, l) = t.split('_', 3)
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
448 if m not in self.availableLayers:
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
449 # mode m doesn't exist -> new list
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
450 self.availableLayers[m] = [l]
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
451
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
452 else:
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
453 # m exists -> append
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
454 if l not in self.availableLayers[m]:
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
455 self.availableLayers[m].append()
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
456
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
457 except:
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
458 pass
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
459
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
460 def getAvailableLayersJson(self):
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
461 """returns available layers as JSON string."""
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
462 return json.dumps(self.availableLayers)
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
463
469
15394486ab75 working with new templates
casties
parents: 468
diff changeset
464
57
7cdb0fc34a92 added getInfo_xml method
casties
parents: 55
diff changeset
465 def getInfo_xml(self,url,mode):
7cdb0fc34a92 added getInfo_xml method
casties
parents: 55
diff changeset
466 """returns info about the document as XML"""
7cdb0fc34a92 added getInfo_xml method
casties
parents: 55
diff changeset
467 if not self.digilibBaseUrl:
514
c55e376be01b search works even with unicode...
casties
parents: 513
diff changeset
468 self.digilibBaseUrl = self.findDigilibUrl() or "http://digilib.mpiwg-berlin.mpg.de/digitallibrary"
57
7cdb0fc34a92 added getInfo_xml method
casties
parents: 55
diff changeset
469
7cdb0fc34a92 added getInfo_xml method
casties
parents: 55
diff changeset
470 docinfo = self.getDocinfo(mode=mode,url=url)
7cdb0fc34a92 added getInfo_xml method
casties
parents: 55
diff changeset
471 pt = getattr(self.template, 'info_xml')
7cdb0fc34a92 added getInfo_xml method
casties
parents: 55
diff changeset
472 return pt(docinfo=docinfo)
7cdb0fc34a92 added getInfo_xml method
casties
parents: 55
diff changeset
473
528
f8a5f63eafc0 new viewMode=thumbs.
casties
parents: 526
diff changeset
474 def getAuthenticatedUser(self, anon=None):
f8a5f63eafc0 new viewMode=thumbs.
casties
parents: 526
diff changeset
475 """returns the authenticated user object or None. (ignores Zopes anonymous user)"""
f8a5f63eafc0 new viewMode=thumbs.
casties
parents: 526
diff changeset
476 user = getSecurityManager().getUser()
f8a5f63eafc0 new viewMode=thumbs.
casties
parents: 526
diff changeset
477 if user is not None and user.getUserName() != "Anonymous User":
f8a5f63eafc0 new viewMode=thumbs.
casties
parents: 526
diff changeset
478 return user
f8a5f63eafc0 new viewMode=thumbs.
casties
parents: 526
diff changeset
479 else:
f8a5f63eafc0 new viewMode=thumbs.
casties
parents: 526
diff changeset
480 return anon
f8a5f63eafc0 new viewMode=thumbs.
casties
parents: 526
diff changeset
481
35
2d9261aea8f3 version 0.2.4
casties
parents: 32
diff changeset
482 def isAccessible(self, docinfo):
32
b25c89d693cf version 0.2.3 - first version with access control!
casties
parents: 31
diff changeset
483 """returns if access to the resource is granted"""
b25c89d693cf version 0.2.3 - first version with access control!
casties
parents: 31
diff changeset
484 access = docinfo.get('accessType', None)
167
7e2b97941a66 characterNormalization
abukhman
parents: 166
diff changeset
485 logging.debug("documentViewer (accessOK) access type %s"%access)
465
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
486 if access == 'free':
167
7e2b97941a66 characterNormalization
abukhman
parents: 166
diff changeset
487 logging.debug("documentViewer (accessOK) access is free")
32
b25c89d693cf version 0.2.3 - first version with access control!
casties
parents: 31
diff changeset
488 return True
465
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
489
45
0391fe75aef3 fixed handling of documents with missing access tag
casties
parents: 43
diff changeset
490 elif access is None or access in self.authgroups:
35
2d9261aea8f3 version 0.2.4
casties
parents: 32
diff changeset
491 # only local access -- only logged in users
528
f8a5f63eafc0 new viewMode=thumbs.
casties
parents: 526
diff changeset
492 user = self.getAuthenticatedUser()
167
7e2b97941a66 characterNormalization
abukhman
parents: 166
diff changeset
493 logging.debug("documentViewer (accessOK) user=%s ip=%s"%(user,self.REQUEST.getClientAddr()))
528
f8a5f63eafc0 new viewMode=thumbs.
casties
parents: 526
diff changeset
494 return (user is not None)
32
b25c89d693cf version 0.2.3 - first version with access control!
casties
parents: 31
diff changeset
495
167
7e2b97941a66 characterNormalization
abukhman
parents: 166
diff changeset
496 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
497 return False
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
498
543
6cdc31e9ed8e fixed problem with dict-mode in default view.
casties
parents: 541
diff changeset
499 def getUserinfo(self):
6cdc31e9ed8e fixed problem with dict-mode in default view.
casties
parents: 541
diff changeset
500 """returns userinfo object"""
6cdc31e9ed8e fixed problem with dict-mode in default view.
casties
parents: 541
diff changeset
501 logging.debug("getUserinfo")
6cdc31e9ed8e fixed problem with dict-mode in default view.
casties
parents: 541
diff changeset
502 userinfo = {}
6cdc31e9ed8e fixed problem with dict-mode in default view.
casties
parents: 541
diff changeset
503 # look for cached userinfo in session
6cdc31e9ed8e fixed problem with dict-mode in default view.
casties
parents: 541
diff changeset
504 if self.REQUEST.SESSION.has_key('userinfo'):
6cdc31e9ed8e fixed problem with dict-mode in default view.
casties
parents: 541
diff changeset
505 userinfo = self.REQUEST.SESSION['userinfo']
6cdc31e9ed8e fixed problem with dict-mode in default view.
casties
parents: 541
diff changeset
506 # check if its still current?
6cdc31e9ed8e fixed problem with dict-mode in default view.
casties
parents: 541
diff changeset
507 else:
6cdc31e9ed8e fixed problem with dict-mode in default view.
casties
parents: 541
diff changeset
508 # store in session
6cdc31e9ed8e fixed problem with dict-mode in default view.
casties
parents: 541
diff changeset
509 self.REQUEST.SESSION['userinfo'] = userinfo
6cdc31e9ed8e fixed problem with dict-mode in default view.
casties
parents: 541
diff changeset
510
6cdc31e9ed8e fixed problem with dict-mode in default view.
casties
parents: 541
diff changeset
511 return userinfo
6cdc31e9ed8e fixed problem with dict-mode in default view.
casties
parents: 541
diff changeset
512
612
a79e4e4b3e37 json schnittsellen
dwinter
parents: 610
diff changeset
513 def getDocinfoJSON(self, mode, url, tocMode=None):
a79e4e4b3e37 json schnittsellen
dwinter
parents: 610
diff changeset
514 """returns docinfo depending on mode"""
a79e4e4b3e37 json schnittsellen
dwinter
parents: 610
diff changeset
515 import json
a79e4e4b3e37 json schnittsellen
dwinter
parents: 610
diff changeset
516
a79e4e4b3e37 json schnittsellen
dwinter
parents: 610
diff changeset
517 dc = self.getDocinfo( mode, url, tocMode)
a79e4e4b3e37 json schnittsellen
dwinter
parents: 610
diff changeset
518
a79e4e4b3e37 json schnittsellen
dwinter
parents: 610
diff changeset
519 return json.dumps(dc)
a79e4e4b3e37 json schnittsellen
dwinter
parents: 610
diff changeset
520
a79e4e4b3e37 json schnittsellen
dwinter
parents: 610
diff changeset
521
518
91051b36b9cc uses xml info from doc-info.xql for table of contents now.
casties
parents: 516
diff changeset
522 def getDocinfo(self, mode, url, tocMode=None):
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
523 """returns docinfo depending on mode"""
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
524 logging.debug("getDocinfo: mode=%s, url=%s"%(mode,url))
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
525 # look for cached docinfo in session
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
526 if self.REQUEST.SESSION.has_key('docinfo'):
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
527 docinfo = self.REQUEST.SESSION['docinfo']
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
528 # check if its still current
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
529 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
530 logging.debug("getDocinfo: docinfo in session. keys=%s"%docinfo.keys())
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
531 return docinfo
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
532
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
533 # new docinfo
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
534 docinfo = {'mode': mode, 'url': url}
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
535 # add self url
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
536 docinfo['viewerUrl'] = self.getDocumentViewerURL()
625
80a3b1fa5705 more move sslification to only client-visible urls.
casties
parents: 624
diff changeset
537 docinfo['digilibBaseUrl'] = sslifyUrl(self.digilibBaseUrl, self, force=True)
80a3b1fa5705 more move sslification to only client-visible urls.
casties
parents: 624
diff changeset
538 docinfo['digilibScalerUrl'] = sslifyUrl(self.digilibScalerUrl, self, force=True)
80a3b1fa5705 more move sslification to only client-visible urls.
casties
parents: 624
diff changeset
539 docinfo['digilibViewerUrl'] = sslifyUrl(self.digilibViewerUrl, self, force=True)
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
540 # get index.meta DOM
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
541 docUrl = None
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
542 metaDom = None
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
543 if mode=="texttool":
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
544 # url points to document dir or index.meta
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
545 metaDom = self.metadataService.getDomFromPathOrUrl(url)
631
0c3aab828864 remove index meta ns
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 629
diff changeset
546 removeINDEXMETA_NS(metaDom)
0c3aab828864 remove index meta ns
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 629
diff changeset
547
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
548 if metaDom is None:
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
549 raise IOError("Unable to find index.meta for mode=texttool!")
580
0806cb9061c1 fixed another bug when url starts with /mpiwg/online/
casties
parents: 578
diff changeset
550
0806cb9061c1 fixed another bug when url starts with /mpiwg/online/
casties
parents: 578
diff changeset
551 docUrl = url.replace('/index.meta', '')
0806cb9061c1 fixed another bug when url starts with /mpiwg/online/
casties
parents: 578
diff changeset
552 if url.startswith('/mpiwg/online/'):
0806cb9061c1 fixed another bug when url starts with /mpiwg/online/
casties
parents: 578
diff changeset
553 docUrl = url.replace('/mpiwg/online/', '', 1)
634
618b600c805a fix broken mode imagepath.
casties
parents: 631
diff changeset
554
631
0c3aab828864 remove index meta ns
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 629
diff changeset
555 elif mode=="textpath":
0c3aab828864 remove index meta ns
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 629
diff changeset
556 #url points to an textfile
0c3aab828864 remove index meta ns
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 629
diff changeset
557 #index.meta optional
0c3aab828864 remove index meta ns
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 629
diff changeset
558 #assume index.meta in parent dir
0c3aab828864 remove index meta ns
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 629
diff changeset
559 docUrl = getParentPath(url)
0c3aab828864 remove index meta ns
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 629
diff changeset
560 docinfo['viewmode'] = "text"
0c3aab828864 remove index meta ns
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 629
diff changeset
561
0c3aab828864 remove index meta ns
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 629
diff changeset
562 try:
0c3aab828864 remove index meta ns
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 629
diff changeset
563 metaDom = self.metadataService.getDomFromPathOrUrl(docUrl)
0c3aab828864 remove index meta ns
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 629
diff changeset
564 removeINDEXMETA_NS(metaDom)
0c3aab828864 remove index meta ns
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 629
diff changeset
565
0c3aab828864 remove index meta ns
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 629
diff changeset
566 except:
0c3aab828864 remove index meta ns
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 629
diff changeset
567 metaDom = None
634
618b600c805a fix broken mode imagepath.
casties
parents: 631
diff changeset
568
631
0c3aab828864 remove index meta ns
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 629
diff changeset
569 #metaDom = self.metadataService.getDomFromPathOrUrl(docUrl)
0c3aab828864 remove index meta ns
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 629
diff changeset
570 #docinfo['imagePath'] = url.replace('/mpiwg/online', '', 1)
0c3aab828864 remove index meta ns
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 629
diff changeset
571 docinfo['textURLPath'] = url.replace('/mpiwg/online', '', 1)
0c3aab828864 remove index meta ns
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 629
diff changeset
572 docinfo['textURL'] = url
0c3aab828864 remove index meta ns
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 629
diff changeset
573 if docinfo.get("creator", None) is None:
0c3aab828864 remove index meta ns
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 629
diff changeset
574 docinfo['creator'] = ""
0c3aab828864 remove index meta ns
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 629
diff changeset
575
0c3aab828864 remove index meta ns
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 629
diff changeset
576 if docinfo.get("title", None) is None:
0c3aab828864 remove index meta ns
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 629
diff changeset
577 docinfo['title'] = ""
0c3aab828864 remove index meta ns
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 629
diff changeset
578
0c3aab828864 remove index meta ns
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 629
diff changeset
579 if docinfo.get("documentPath", None) is None:
0c3aab828864 remove index meta ns
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 629
diff changeset
580 docinfo['documentPath'] = url.replace('/mpiwg/online', '', 1)
0c3aab828864 remove index meta ns
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 629
diff changeset
581 docinfo['documentPath'] = url.replace('/pages', '', 1)
0c3aab828864 remove index meta ns
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 629
diff changeset
582
0c3aab828864 remove index meta ns
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 629
diff changeset
583 docinfo['numPages'] = 1
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
584
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
585 elif mode=="imagepath":
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
586 # url points to folder with images, index.meta optional
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
587 # asssume index.meta in parent dir
634
618b600c805a fix broken mode imagepath.
casties
parents: 631
diff changeset
588 docUrl = getParentPath(url)
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
589 metaDom = self.metadataService.getDomFromPathOrUrl(docUrl)
599
3b79ae4a23ca normalize uri of annotated image.
casties
parents: 594
diff changeset
590 docinfo['imagePath'] = url.replace('/mpiwg/online', '', 1)
615
d6eca930a534 hocr viewer eingebaut
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 613
diff changeset
591
d6eca930a534 hocr viewer eingebaut
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 613
diff changeset
592 elif mode=="hocr":
d6eca930a534 hocr viewer eingebaut
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 613
diff changeset
593 # url points to folder with images, index.meta optional
d6eca930a534 hocr viewer eingebaut
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 613
diff changeset
594 # asssume index.meta in parent dir
d6eca930a534 hocr viewer eingebaut
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 613
diff changeset
595 docUrl = getParentPath(url)
d6eca930a534 hocr viewer eingebaut
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 613
diff changeset
596 metaDom = self.metadataService.getDomFromPathOrUrl(docUrl)
d6eca930a534 hocr viewer eingebaut
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 613
diff changeset
597 docinfo['imagePath'] = url.replace('/mpiwg/online', '', 1)
d6eca930a534 hocr viewer eingebaut
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 613
diff changeset
598 docinfo['textURLPath'] = url.replace('/mpiwg/online', '', 1)
d6eca930a534 hocr viewer eingebaut
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 613
diff changeset
599 if docinfo.get("creator", None) is None:
d6eca930a534 hocr viewer eingebaut
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 613
diff changeset
600 docinfo['creator'] = ""
d6eca930a534 hocr viewer eingebaut
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 613
diff changeset
601
d6eca930a534 hocr viewer eingebaut
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 613
diff changeset
602 if docinfo.get("title", None) is None:
d6eca930a534 hocr viewer eingebaut
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 613
diff changeset
603 docinfo['title'] = ""
d6eca930a534 hocr viewer eingebaut
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 613
diff changeset
604
d6eca930a534 hocr viewer eingebaut
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 613
diff changeset
605 if docinfo.get("documentPath", None) is None:
d6eca930a534 hocr viewer eingebaut
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 613
diff changeset
606 docinfo['documentPath'] = url.replace('/mpiwg/online', '', 1)
d6eca930a534 hocr viewer eingebaut
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 613
diff changeset
607 docinfo['documentPath'] = url.replace('/pages', '', 1)
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
608
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
609 elif mode=="filepath":
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
610 # url points to image file, index.meta optional
566
4a31608f8b0e more new MpiwgXmlTextServer.
casties
parents: 565
diff changeset
611 docinfo['imageURL'] = "%s?fn=%s"%(self.digilibScalerUrl, url)
548
7acc919f52ff mode=filepath works again
casties
parents: 546
diff changeset
612 docinfo['numPages'] = 1
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
613 # asssume index.meta is two path segments up
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
614 docUrl = getParentPath(url, 2)
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
615 metaDom = self.metadataService.getDomFromPathOrUrl(docUrl)
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
616
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
617 else:
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
618 logging.error("documentViewer (getdocinfo) unknown mode: %s!"%mode)
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
619 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
620
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
621 docinfo['documentUrl'] = docUrl
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
622 # process index.meta contents
631
0c3aab828864 remove index meta ns
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 629
diff changeset
623
0c3aab828864 remove index meta ns
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 629
diff changeset
624 if metaDom is not None and (metaDom.tag == 'resource' or metaDom.tag == "{%s}resource"%INDEXMETA_NS):
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
625 # document directory name and path
608
0c6056271654 show is-part-of relation in header.
casties
parents: 607
diff changeset
626 resource = self.metadataService.getResourceData(dom=metaDom, recursive=1)
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
627 if resource:
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
628 docinfo = self.getDocinfoFromResource(docinfo, resource)
631
0c3aab828864 remove index meta ns
Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
parents: 629
diff changeset
629
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
630 # texttool info
561
9255acc4518d CLOSED - # 256: display texts from different backends (sandbox)
casties
parents: 560
diff changeset
631 texttool = self.metadataService.getTexttoolData(dom=metaDom, recursive=1, all=True)
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
632 if texttool:
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
633 docinfo = self.getDocinfoFromTexttool(docinfo, texttool)
568
694935574177 more new MpiwgXmlTextServer.
casties
parents: 566
diff changeset
634 # document info from full text server
516
7d7b639d7be7 add methods to use doc-info.xql.
casties
parents: 514
diff changeset
635 if docinfo.get('textURLPath', None):
565
1b483194901c more new MpiwgXmlTextServer.
casties
parents: 564
diff changeset
636 docinfo = self.getTextInfo(mode=None, docinfo=docinfo)
568
694935574177 more new MpiwgXmlTextServer.
casties
parents: 566
diff changeset
637 # include list of pages TODO: do we need this always?
694935574177 more new MpiwgXmlTextServer.
casties
parents: 566
diff changeset
638 docinfo = self.getTextInfo(mode='pages', docinfo=docinfo)
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
639
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
640 # bib info
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
641 bib = self.metadataService.getBibData(dom=metaDom)
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
642 if bib:
548
7acc919f52ff mode=filepath works again
casties
parents: 546
diff changeset
643 # save extended version as 'bibx' TODO: ugly
541
c4cc01b104d7 better metadata display for index page.
casties
parents: 538
diff changeset
644 bibx = self.metadataService.getBibData(dom=metaDom, all=True, recursive=1)
c4cc01b104d7 better metadata display for index page.
casties
parents: 538
diff changeset
645 if len(bibx) == 1:
c4cc01b104d7 better metadata display for index page.
casties
parents: 538
diff changeset
646 # unwrap list if possible
c4cc01b104d7 better metadata display for index page.
casties
parents: 538
diff changeset
647 bibx = bibx[0]
c4cc01b104d7 better metadata display for index page.
casties
parents: 538
diff changeset
648
c4cc01b104d7 better metadata display for index page.
casties
parents: 538
diff changeset
649 docinfo['bibx'] = bibx
c4cc01b104d7 better metadata display for index page.
casties
parents: 538
diff changeset
650 docinfo = self.getDocinfoFromBib(docinfo, bib, bibx)
465
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
651 else:
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
652 # no bib - try info.xml
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
653 docinfo = self.getDocinfoFromPresentationInfoXml(docinfo)
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
654
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
655 # auth info
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
656 access = self.metadataService.getAccessData(dom=metaDom)
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
657 if access:
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
658 docinfo = self.getDocinfoFromAccess(docinfo, access)
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
659
466
1641be8dc6b5 attribution works now
casties
parents: 465
diff changeset
660 # attribution info
1641be8dc6b5 attribution works now
casties
parents: 465
diff changeset
661 attribution = self.metadataService.getAttributionData(dom=metaDom)
1641be8dc6b5 attribution works now
casties
parents: 465
diff changeset
662 if attribution:
1641be8dc6b5 attribution works now
casties
parents: 465
diff changeset
663 logging.debug("getDocinfo: attribution=%s"%repr(attribution))
1641be8dc6b5 attribution works now
casties
parents: 465
diff changeset
664 docinfo['attribution'] = attribution
1641be8dc6b5 attribution works now
casties
parents: 465
diff changeset
665
1641be8dc6b5 attribution works now
casties
parents: 465
diff changeset
666 # copyright info
1641be8dc6b5 attribution works now
casties
parents: 465
diff changeset
667 copyright = self.metadataService.getCopyrightData(dom=metaDom)
1641be8dc6b5 attribution works now
casties
parents: 465
diff changeset
668 if copyright:
1641be8dc6b5 attribution works now
casties
parents: 465
diff changeset
669 logging.debug("getDocinfo: copyright=%s"%repr(copyright))
1641be8dc6b5 attribution works now
casties
parents: 465
diff changeset
670 docinfo['copyright'] = copyright
538
dbf25bd05fc6 digilib buttons get icons. pid on index page.
casties
parents: 536
diff changeset
671
dbf25bd05fc6 digilib buttons get icons. pid on index page.
casties
parents: 536
diff changeset
672 # DRI (permanent ID)
581
514902fb6b8a use dri repository=mpiwg as default
casties
parents: 580
diff changeset
673 dri = self.metadataService.getDRI(dom=metaDom, type='mpiwg')
538
dbf25bd05fc6 digilib buttons get icons. pid on index page.
casties
parents: 536
diff changeset
674 if dri:
dbf25bd05fc6 digilib buttons get icons. pid on index page.
casties
parents: 536
diff changeset
675 docinfo['DRI'] = dri
466
1641be8dc6b5 attribution works now
casties
parents: 465
diff changeset
676
578
024b75162437 displays context data on index page
casties
parents: 577
diff changeset
677 # (presentation) context
024b75162437 displays context data on index page
casties
parents: 577
diff changeset
678 ctx = self.metadataService.getContextData(dom=metaDom, all=True)
024b75162437 displays context data on index page
casties
parents: 577
diff changeset
679 if ctx:
024b75162437 displays context data on index page
casties
parents: 577
diff changeset
680 logging.debug("getcontext: ctx=%s"%repr(ctx))
024b75162437 displays context data on index page
casties
parents: 577
diff changeset
681 docinfo['presentationContext'] = ctx
024b75162437 displays context data on index page
casties
parents: 577
diff changeset
682
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
683 # image path
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
684 if mode != 'texttool':
532
0b8bed1223ad new layout and styles.
casties
parents: 530
diff changeset
685 # override image path from texttool with url parameter TODO: how about mode=auto?
599
3b79ae4a23ca normalize uri of annotated image.
casties
parents: 594
diff changeset
686 docinfo['imagePath'] = url.replace('/mpiwg/online', '', 1)
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
687
548
7acc919f52ff mode=filepath works again
casties
parents: 546
diff changeset
688 # check numPages
7acc919f52ff mode=filepath works again
casties
parents: 546
diff changeset
689 if docinfo.get('numPages', 0) == 0:
7acc919f52ff mode=filepath works again
casties
parents: 546
diff changeset
690 # number of images from digilib
7acc919f52ff mode=filepath works again
casties
parents: 546
diff changeset
691 if docinfo.get('imagePath', None):
599
3b79ae4a23ca normalize uri of annotated image.
casties
parents: 594
diff changeset
692 imgpath = docinfo['imagePath'].replace('/mpiwg/online', '', 1)
580
0806cb9061c1 fixed another bug when url starts with /mpiwg/online/
casties
parents: 578
diff changeset
693 logging.debug("imgpath=%s"%imgpath)
625
80a3b1fa5705 more move sslification to only client-visible urls.
casties
parents: 624
diff changeset
694 docinfo['imageURL'] = sslifyUrl("%s?fn=%s"%(self.digilibScalerUrl, imgpath), self, force=True)
562
60f5a636bc57 bugfixes for stability.
casties
parents: 561
diff changeset
695 docinfo = self.getDocinfoFromDigilib(docinfo, imgpath)
548
7acc919f52ff mode=filepath works again
casties
parents: 546
diff changeset
696 else:
7acc919f52ff mode=filepath works again
casties
parents: 546
diff changeset
697 # imagePath still missing? try "./pageimg"
7acc919f52ff mode=filepath works again
casties
parents: 546
diff changeset
698 imgPath = os.path.join(docUrl, 'pageimg')
7acc919f52ff mode=filepath works again
casties
parents: 546
diff changeset
699 docinfo = self.getDocinfoFromDigilib(docinfo, imgPath)
7acc919f52ff mode=filepath works again
casties
parents: 546
diff changeset
700 if docinfo.get('numPages', 0) > 0:
7acc919f52ff mode=filepath works again
casties
parents: 546
diff changeset
701 # there are pages
7acc919f52ff mode=filepath works again
casties
parents: 546
diff changeset
702 docinfo['imagePath'] = imgPath
625
80a3b1fa5705 more move sslification to only client-visible urls.
casties
parents: 624
diff changeset
703 docinfo['imageURL'] = sslifyUrl("%s?fn=%s"%(self.digilibScalerUrl, docinfo['imagePath']), self, force=True)
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
704
516
7d7b639d7be7 add methods to use doc-info.xql.
casties
parents: 514
diff changeset
705 # check numPages
7d7b639d7be7 add methods to use doc-info.xql.
casties
parents: 514
diff changeset
706 if docinfo.get('numPages', 0) == 0:
7d7b639d7be7 add methods to use doc-info.xql.
casties
parents: 514
diff changeset
707 if docinfo.get('numTextPages', 0) > 0:
7d7b639d7be7 add methods to use doc-info.xql.
casties
parents: 514
diff changeset
708 # replace with numTextPages (text-only?)
7d7b639d7be7 add methods to use doc-info.xql.
casties
parents: 514
diff changeset
709 docinfo['numPages'] = docinfo['numTextPages']
607
cb5a9c4f5e3a CLOSED - # 268: display of subdocuments
casties
parents: 602
diff changeset
710
cb5a9c4f5e3a CLOSED - # 268: display of subdocuments
casties
parents: 602
diff changeset
711 # min and max page no
cb5a9c4f5e3a CLOSED - # 268: display of subdocuments
casties
parents: 602
diff changeset
712 docinfo['minPageNo'] = docinfo.get('minPageNo', 1)
cb5a9c4f5e3a CLOSED - # 268: display of subdocuments
casties
parents: 602
diff changeset
713 docinfo['maxPageNo'] = docinfo.get('maxPageNo', docinfo['numPages'])
516
7d7b639d7be7 add methods to use doc-info.xql.
casties
parents: 514
diff changeset
714
608
0c6056271654 show is-part-of relation in header.
casties
parents: 607
diff changeset
715 # part-of information
0c6056271654 show is-part-of relation in header.
casties
parents: 607
diff changeset
716 partOfPath = docinfo.get('partOfPath', None)
0c6056271654 show is-part-of relation in header.
casties
parents: 607
diff changeset
717 if partOfPath is not None:
0c6056271654 show is-part-of relation in header.
casties
parents: 607
diff changeset
718 partOfDom = self.metadataService.getDomFromPathOrUrl(partOfPath)
0c6056271654 show is-part-of relation in header.
casties
parents: 607
diff changeset
719 if partOfDom is not None:
0c6056271654 show is-part-of relation in header.
casties
parents: 607
diff changeset
720 docinfo['partOfLabel'] = self.metadataService.getBibFormattedLabel(dom=partOfDom)
0c6056271654 show is-part-of relation in header.
casties
parents: 607
diff changeset
721 docinfo['partOfUrl'] = "%s?url=%s"%(self.getDocumentViewerURL(), partOfPath)
0c6056271654 show is-part-of relation in header.
casties
parents: 607
diff changeset
722 logging.debug("partOfLabel=%s partOfUrl=%s"%(docinfo['partOfLabel'],docinfo['partOfUrl']))
0c6056271654 show is-part-of relation in header.
casties
parents: 607
diff changeset
723
599
3b79ae4a23ca normalize uri of annotated image.
casties
parents: 594
diff changeset
724 # normalize path
3b79ae4a23ca normalize uri of annotated image.
casties
parents: 594
diff changeset
725 if 'imagePath' in docinfo and not docinfo['imagePath'].startswith('/'):
3b79ae4a23ca normalize uri of annotated image.
casties
parents: 594
diff changeset
726 docinfo['imagePath'] = '/' + docinfo['imagePath']
3b79ae4a23ca normalize uri of annotated image.
casties
parents: 594
diff changeset
727
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
728 logging.debug("documentViewer (getdocinfo) docinfo: keys=%s"%docinfo.keys())
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
729 # store in session
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
730 self.REQUEST.SESSION['docinfo'] = docinfo
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
731 return docinfo
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
732
516
7d7b639d7be7 add methods to use doc-info.xql.
casties
parents: 514
diff changeset
733
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
734 def getDocinfoFromResource(self, docinfo, resource):
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
735 """reads contents of resource element into docinfo"""
608
0c6056271654 show is-part-of relation in header.
casties
parents: 607
diff changeset
736 logging.debug("getDocinfoFromResource: resource=%s"%(repr(resource)))
0c6056271654 show is-part-of relation in header.
casties
parents: 607
diff changeset
737 docName = getMDText(resource.get('name', None))
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
738 docinfo['documentName'] = docName
608
0c6056271654 show is-part-of relation in header.
casties
parents: 607
diff changeset
739 docPath = getMDText(resource.get('archive-path', None))
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
740 if docPath:
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
741 # clean up document path
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
742 if docPath[0] != '/':
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
743 docPath = '/' + docPath
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
744
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
745 if docName and (not docPath.endswith(docName)):
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
746 docPath += "/" + docName
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
747
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
748 else:
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
749 # use docUrl as docPath
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
750 docUrl = docinfo['documentURL']
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
751 if not docUrl.startswith('http:'):
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
752 docPath = docUrl
608
0c6056271654 show is-part-of relation in header.
casties
parents: 607
diff changeset
753
465
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
754 if docPath:
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
755 # fix URLs starting with /mpiwg/online
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
756 docPath = docPath.replace('/mpiwg/online', '', 1)
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
757
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
758 docinfo['documentPath'] = docPath
608
0c6056271654 show is-part-of relation in header.
casties
parents: 607
diff changeset
759
0c6056271654 show is-part-of relation in header.
casties
parents: 607
diff changeset
760 # is this part-of?
0c6056271654 show is-part-of relation in header.
casties
parents: 607
diff changeset
761 partOf = resource.get('is-part-of', None)
0c6056271654 show is-part-of relation in header.
casties
parents: 607
diff changeset
762 if partOf is not None:
0c6056271654 show is-part-of relation in header.
casties
parents: 607
diff changeset
763 partOf = getMDText(partOf.get('archive-path', None))
0c6056271654 show is-part-of relation in header.
casties
parents: 607
diff changeset
764 if partOf is not None:
0c6056271654 show is-part-of relation in header.
casties
parents: 607
diff changeset
765 docinfo['partOfPath'] = partOf.strip()
0c6056271654 show is-part-of relation in header.
casties
parents: 607
diff changeset
766
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
767 return docinfo
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
768
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
769 def getDocinfoFromTexttool(self, docinfo, texttool):
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
770 """reads contents of texttool element into docinfo"""
561
9255acc4518d CLOSED - # 256: display texts from different backends (sandbox)
casties
parents: 560
diff changeset
771 logging.debug("texttool=%s"%repr(texttool))
9255acc4518d CLOSED - # 256: display texts from different backends (sandbox)
casties
parents: 560
diff changeset
772 # unpack list if necessary
9255acc4518d CLOSED - # 256: display texts from different backends (sandbox)
casties
parents: 560
diff changeset
773 if isinstance(texttool, list):
9255acc4518d CLOSED - # 256: display texts from different backends (sandbox)
casties
parents: 560
diff changeset
774 texttool = texttool[0]
9255acc4518d CLOSED - # 256: display texts from different backends (sandbox)
casties
parents: 560
diff changeset
775
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
776 # image dir
561
9255acc4518d CLOSED - # 256: display texts from different backends (sandbox)
casties
parents: 560
diff changeset
777 imageDir = getMDText(texttool.get('image', None))
9255acc4518d CLOSED - # 256: display texts from different backends (sandbox)
casties
parents: 560
diff changeset
778 docPath = getMDText(docinfo.get('documentPath', None))
607
cb5a9c4f5e3a CLOSED - # 268: display of subdocuments
casties
parents: 602
diff changeset
779 if imageDir:
cb5a9c4f5e3a CLOSED - # 268: display of subdocuments
casties
parents: 602
diff changeset
780 if imageDir.startswith('/'):
cb5a9c4f5e3a CLOSED - # 268: display of subdocuments
casties
parents: 602
diff changeset
781 # absolute path
cb5a9c4f5e3a CLOSED - # 268: display of subdocuments
casties
parents: 602
diff changeset
782 imageDir = imageDir.replace('/mpiwg/online', '', 1)
cb5a9c4f5e3a CLOSED - # 268: display of subdocuments
casties
parents: 602
diff changeset
783 docinfo['imagePath'] = imageDir
cb5a9c4f5e3a CLOSED - # 268: display of subdocuments
casties
parents: 602
diff changeset
784
cb5a9c4f5e3a CLOSED - # 268: display of subdocuments
casties
parents: 602
diff changeset
785 elif docPath:
cb5a9c4f5e3a CLOSED - # 268: display of subdocuments
casties
parents: 602
diff changeset
786 # relative path
cb5a9c4f5e3a CLOSED - # 268: display of subdocuments
casties
parents: 602
diff changeset
787 imageDir = os.path.join(docPath, imageDir)
cb5a9c4f5e3a CLOSED - # 268: display of subdocuments
casties
parents: 602
diff changeset
788 imageDir = imageDir.replace('/mpiwg/online', '', 1)
cb5a9c4f5e3a CLOSED - # 268: display of subdocuments
casties
parents: 602
diff changeset
789 docinfo['imagePath'] = imageDir
cb5a9c4f5e3a CLOSED - # 268: display of subdocuments
casties
parents: 602
diff changeset
790
cb5a9c4f5e3a CLOSED - # 268: display of subdocuments
casties
parents: 602
diff changeset
791 # start and end page (for subdocuments of other documents)
cb5a9c4f5e3a CLOSED - # 268: display of subdocuments
casties
parents: 602
diff changeset
792 imgStartNo = getMDText(texttool.get('image-start-no', None))
cb5a9c4f5e3a CLOSED - # 268: display of subdocuments
casties
parents: 602
diff changeset
793 minPageNo = getInt(imgStartNo, 1)
cb5a9c4f5e3a CLOSED - # 268: display of subdocuments
casties
parents: 602
diff changeset
794 docinfo['minPageNo'] = minPageNo
cb5a9c4f5e3a CLOSED - # 268: display of subdocuments
casties
parents: 602
diff changeset
795
cb5a9c4f5e3a CLOSED - # 268: display of subdocuments
casties
parents: 602
diff changeset
796 imgEndNo = getMDText(texttool.get('image-end-no', None))
cb5a9c4f5e3a CLOSED - # 268: display of subdocuments
casties
parents: 602
diff changeset
797 if imgEndNo:
cb5a9c4f5e3a CLOSED - # 268: display of subdocuments
casties
parents: 602
diff changeset
798 docinfo['maxPageNo'] = getInt(imgEndNo)
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
799
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
800 # old style text URL
561
9255acc4518d CLOSED - # 256: display texts from different backends (sandbox)
casties
parents: 560
diff changeset
801 textUrl = getMDText(texttool.get('text', None))
617
7aefbddddaf9 alpaha of hocr server support
dwinter
parents: 613
diff changeset
802
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
803 if textUrl and docPath:
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
804 if urlparse.urlparse(textUrl)[0] == "": #keine url
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
805 textUrl = os.path.join(docPath, textUrl)
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
806
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
807 docinfo['textURL'] = textUrl
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
808
561
9255acc4518d CLOSED - # 256: display texts from different backends (sandbox)
casties
parents: 560
diff changeset
809 # new style text-url-path (can be more than one with "repository" attribute)
9255acc4518d CLOSED - # 256: display texts from different backends (sandbox)
casties
parents: 560
diff changeset
810 textUrlNode = texttool.get('text-url-path', None)
9255acc4518d CLOSED - # 256: display texts from different backends (sandbox)
casties
parents: 560
diff changeset
811 if not isinstance(textUrlNode, list):
9255acc4518d CLOSED - # 256: display texts from different backends (sandbox)
casties
parents: 560
diff changeset
812 textUrlNode = [textUrlNode]
9255acc4518d CLOSED - # 256: display texts from different backends (sandbox)
casties
parents: 560
diff changeset
813
9255acc4518d CLOSED - # 256: display texts from different backends (sandbox)
casties
parents: 560
diff changeset
814 for tun in textUrlNode:
9255acc4518d CLOSED - # 256: display texts from different backends (sandbox)
casties
parents: 560
diff changeset
815 textUrl = getMDText(tun)
9255acc4518d CLOSED - # 256: display texts from different backends (sandbox)
casties
parents: 560
diff changeset
816 if textUrl:
9255acc4518d CLOSED - # 256: display texts from different backends (sandbox)
casties
parents: 560
diff changeset
817 textUrlAtts = tun.get('@attr')
9255acc4518d CLOSED - # 256: display texts from different backends (sandbox)
casties
parents: 560
diff changeset
818 if (textUrlAtts and 'repository' in textUrlAtts):
9255acc4518d CLOSED - # 256: display texts from different backends (sandbox)
casties
parents: 560
diff changeset
819 textRepo = textUrlAtts['repository']
9255acc4518d CLOSED - # 256: display texts from different backends (sandbox)
casties
parents: 560
diff changeset
820 # use matching repository
9255acc4518d CLOSED - # 256: display texts from different backends (sandbox)
casties
parents: 560
diff changeset
821 if self.getRepositoryType() == textRepo:
9255acc4518d CLOSED - # 256: display texts from different backends (sandbox)
casties
parents: 560
diff changeset
822 docinfo['textURLPath'] = textUrl
9255acc4518d CLOSED - # 256: display texts from different backends (sandbox)
casties
parents: 560
diff changeset
823 docinfo['textURLRepository'] = textRepo
564
31f562fa7214 first version of MpiwgXmlTextServer.
casties
parents: 562
diff changeset
824 break
561
9255acc4518d CLOSED - # 256: display texts from different backends (sandbox)
casties
parents: 560
diff changeset
825
9255acc4518d CLOSED - # 256: display texts from different backends (sandbox)
casties
parents: 560
diff changeset
826 else:
9255acc4518d CLOSED - # 256: display texts from different backends (sandbox)
casties
parents: 560
diff changeset
827 # no repo attribute - use always
9255acc4518d CLOSED - # 256: display texts from different backends (sandbox)
casties
parents: 560
diff changeset
828 docinfo['textURLPath'] = textUrl
468
dc7c48912110 attribution and copyright works mostly now
casties
parents: 467
diff changeset
829
dc7c48912110 attribution and copyright works mostly now
casties
parents: 467
diff changeset
830 # page flow
561
9255acc4518d CLOSED - # 256: display texts from different backends (sandbox)
casties
parents: 560
diff changeset
831 docinfo['pageFlow'] = getMDText(texttool.get('page-flow', 'ltr'))
468
dc7c48912110 attribution and copyright works mostly now
casties
parents: 467
diff changeset
832
dc7c48912110 attribution and copyright works mostly now
casties
parents: 467
diff changeset
833 # odd pages are left
561
9255acc4518d CLOSED - # 256: display texts from different backends (sandbox)
casties
parents: 560
diff changeset
834 docinfo['oddPage'] = getMDText(texttool.get('odd-scan-position', 'left'))
468
dc7c48912110 attribution and copyright works mostly now
casties
parents: 467
diff changeset
835
541
c4cc01b104d7 better metadata display for index page.
casties
parents: 538
diff changeset
836 # number of title page (default 1)
607
cb5a9c4f5e3a CLOSED - # 268: display of subdocuments
casties
parents: 602
diff changeset
837 docinfo['titlePage'] = getMDText(texttool.get('title-scan-no', minPageNo))
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
838
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
839 # old presentation stuff
561
9255acc4518d CLOSED - # 256: display texts from different backends (sandbox)
casties
parents: 560
diff changeset
840 presentation = getMDText(texttool.get('presentation', None))
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
841 if presentation and docPath:
465
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
842 if presentation.startswith('http:'):
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
843 docinfo['presentationUrl'] = presentation
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
844 else:
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
845 docinfo['presentationUrl'] = os.path.join(docPath, presentation)
602
ef1d0a1fc9fa fix bug with no dc-metadata.
casties
parents: 599
diff changeset
846
ef1d0a1fc9fa fix bug with no dc-metadata.
casties
parents: 599
diff changeset
847 # make sure we have at least fake DC data
ef1d0a1fc9fa fix bug with no dc-metadata.
casties
parents: 599
diff changeset
848 if 'creator' not in docinfo:
ef1d0a1fc9fa fix bug with no dc-metadata.
casties
parents: 599
diff changeset
849 docinfo['creator'] = '[no author found]'
ef1d0a1fc9fa fix bug with no dc-metadata.
casties
parents: 599
diff changeset
850
ef1d0a1fc9fa fix bug with no dc-metadata.
casties
parents: 599
diff changeset
851 if 'title' not in docinfo:
ef1d0a1fc9fa fix bug with no dc-metadata.
casties
parents: 599
diff changeset
852 docinfo['title'] = '[no title found]'
ef1d0a1fc9fa fix bug with no dc-metadata.
casties
parents: 599
diff changeset
853
ef1d0a1fc9fa fix bug with no dc-metadata.
casties
parents: 599
diff changeset
854 if 'date' not in docinfo:
ef1d0a1fc9fa fix bug with no dc-metadata.
casties
parents: 599
diff changeset
855 docinfo['date'] = '[no date found]'
468
dc7c48912110 attribution and copyright works mostly now
casties
parents: 467
diff changeset
856
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
857 return docinfo
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
858
541
c4cc01b104d7 better metadata display for index page.
casties
parents: 538
diff changeset
859 def getDocinfoFromBib(self, docinfo, bib, bibx=None):
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
860 """reads contents of bib element into docinfo"""
465
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
861 logging.debug("getDocinfoFromBib bib=%s"%repr(bib))
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
862 # put all raw bib fields in dict "bib"
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
863 docinfo['bib'] = bib
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
864 bibtype = bib.get('@type', None)
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
865 docinfo['bibType'] = bibtype
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
866 # also store DC metadata for convenience
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
867 dc = self.metadataService.getDCMappedData(bib)
536
abd36d4d97b8 new version of index page. improvements for digilib page and thumbnail overview.
casties
parents: 535
diff changeset
868 docinfo['creator'] = dc.get('creator','')
abd36d4d97b8 new version of index page. improvements for digilib page and thumbnail overview.
casties
parents: 535
diff changeset
869 docinfo['title'] = dc.get('title','')
abd36d4d97b8 new version of index page. improvements for digilib page and thumbnail overview.
casties
parents: 535
diff changeset
870 docinfo['date'] = dc.get('date','')
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
871 return docinfo
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
872
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
873 def getDocinfoFromAccess(self, docinfo, acc):
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
874 """reads contents of access element into docinfo"""
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
875 #TODO: also read resource type
465
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
876 logging.debug("getDocinfoFromAccess acc=%s"%repr(acc))
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
877 try:
465
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
878 acctype = acc['@attr']['type']
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
879 if acctype:
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
880 access=acctype
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
881 if access in ['group', 'institution']:
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
882 access = acc['name'].lower()
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
883
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
884 docinfo['accessType'] = access
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
885
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
886 except:
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
887 pass
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
888
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
889 return docinfo
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
890
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
891 def getDocinfoFromDigilib(self, docinfo, path):
635
8d460ddb45b7 update digilib dirInfo-xml path.
casties
parents: 634
diff changeset
892 infoUrl=self.digilibBaseUrl+"/api/dirInfo-xml.jsp?fn="+path
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
893 # fetch data
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
894 txt = getHttpData(infoUrl)
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
895 if not txt:
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
896 logging.error("Unable to get dir-info from %s"%(infoUrl))
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
897 return docinfo
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
898
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
899 dom = ET.fromstring(txt)
587
6000c7e24d8a new parameter "pf" to specify image file name. (still some issues)
casties
parents: 585
diff changeset
900 dir = dom
6000c7e24d8a new parameter "pf" to specify image file name. (still some issues)
casties
parents: 585
diff changeset
901 # save size
6000c7e24d8a new parameter "pf" to specify image file name. (still some issues)
casties
parents: 585
diff changeset
902 size = dir.findtext('size')
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
903 logging.debug("getDocinfoFromDigilib: size=%s"%size)
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
904 if size:
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
905 docinfo['numPages'] = int(size)
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
906 else:
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
907 docinfo['numPages'] = 0
587
6000c7e24d8a new parameter "pf" to specify image file name. (still some issues)
casties
parents: 585
diff changeset
908 return docinfo
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
909
587
6000c7e24d8a new parameter "pf" to specify image file name. (still some issues)
casties
parents: 585
diff changeset
910 # save list of image names and numbers
6000c7e24d8a new parameter "pf" to specify image file name. (still some issues)
casties
parents: 585
diff changeset
911 imgNames = {}
591
5850689ecfac ocrsearch layer for images.
casties
parents: 590
diff changeset
912 imgIndexes = {}
587
6000c7e24d8a new parameter "pf" to specify image file name. (still some issues)
casties
parents: 585
diff changeset
913 for f in dir:
6000c7e24d8a new parameter "pf" to specify image file name. (still some issues)
casties
parents: 585
diff changeset
914 fn = f.findtext('name')
591
5850689ecfac ocrsearch layer for images.
casties
parents: 590
diff changeset
915 pn = getInt(f.findtext('index'))
5850689ecfac ocrsearch layer for images.
casties
parents: 590
diff changeset
916 imgNames[fn] = pn
5850689ecfac ocrsearch layer for images.
casties
parents: 590
diff changeset
917 imgIndexes[pn] = fn
587
6000c7e24d8a new parameter "pf" to specify image file name. (still some issues)
casties
parents: 585
diff changeset
918
6000c7e24d8a new parameter "pf" to specify image file name. (still some issues)
casties
parents: 585
diff changeset
919 docinfo['imgFileNames'] = imgNames
591
5850689ecfac ocrsearch layer for images.
casties
parents: 590
diff changeset
920 docinfo['imgFileIndexes'] = imgIndexes
464
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
921 return docinfo
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
922
19bd41d95f62 first version with new getdocinfo
casties
parents: 463
diff changeset
923
465
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
924 def getDocinfoFromPresentationInfoXml(self,docinfo):
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
925 """gets DC-like bibliographical information from the presentation entry in texttools"""
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
926 url = docinfo.get('presentationUrl', None)
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
927 if not url:
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
928 logging.error("getDocinfoFromPresentation: no URL!")
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
929 return docinfo
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
930
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
931 dom = None
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
932 metaUrl = None
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
933 if url.startswith("http://"):
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
934 # real URL
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
935 metaUrl = url
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
936 else:
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
937 # online path
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
938 server=self.digilibBaseUrl+"/servlet/Texter?fn="
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
939 metaUrl=server+url
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
940
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
941 txt=getHttpData(metaUrl)
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
942 if txt is None:
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
943 logging.error("Unable to read info.xml from %s"%(url))
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
944 return docinfo
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
945
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
946 dom = ET.fromstring(txt)
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
947 docinfo['creator']=getText(dom.find(".//author"))
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
948 docinfo['title']=getText(dom.find(".//title"))
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
949 docinfo['date']=getText(dom.find(".//date"))
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
950 return docinfo
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
951
224aad394350 really works with new getDocinfo
casties
parents: 464
diff changeset
952
587
6000c7e24d8a new parameter "pf" to specify image file name. (still some issues)
casties
parents: 585
diff changeset
953 def getPageinfo(self, pn=None, pf=None, start=None, rows=None, cols=None, docinfo=None, userinfo=None, viewMode=None, viewLayer=None, tocMode=None):
22
b139f9937e97 preliminary version 0.2
casties
parents: 20
diff changeset
954 """returns pageinfo with the given parameters"""
587
6000c7e24d8a new parameter "pf" to specify image file name. (still some issues)
casties
parents: 585
diff changeset
955 logging.debug("getPageInfo(pn=%s, pf=%s, start=%s, rows=%s, cols=%s, viewMode=%s, viewLayer=%s, tocMode=%s)"%(pn,pf,start,rows,cols,viewMode,viewLayer,tocMode))
22
b139f9937e97 preliminary version 0.2
casties
parents: 20
diff changeset
956 pageinfo = {}
471
415a7026eeda split viewMode in viewMode and viewType
casties
parents: 469
diff changeset
957 pageinfo['viewMode'] = viewMode
508
d5a47f82e755 more cleanup.
casties
parents: 507
diff changeset
958 # split viewLayer if necessary
d5a47f82e755 more cleanup.
casties
parents: 507
diff changeset
959 if isinstance(viewLayer,basestring):
d5a47f82e755 more cleanup.
casties
parents: 507
diff changeset
960 viewLayer = viewLayer.split(',')
d5a47f82e755 more cleanup.
casties
parents: 507
diff changeset
961
d5a47f82e755 more cleanup.
casties
parents: 507
diff changeset
962 if isinstance(viewLayer, list):
d5a47f82e755 more cleanup.
casties
parents: 507
diff changeset
963 logging.debug("getPageinfo: viewLayer is list:%s"%viewLayer)
d5a47f82e755 more cleanup.
casties
parents: 507
diff changeset
964 # save (unique) list in viewLayers
d5a47f82e755 more cleanup.
casties
parents: 507
diff changeset
965 seen = set()
d5a47f82e755 more cleanup.
casties
parents: 507
diff changeset
966 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
967 pageinfo['viewLayers'] = viewLayers
d5a47f82e755 more cleanup.
casties
parents: 507
diff changeset
968 # stringify viewLayer
d5a47f82e755 more cleanup.
casties
parents: 507
diff changeset
969 viewLayer = ','.join(viewLayers)
d5a47f82e755 more cleanup.
casties
parents: 507
diff changeset
970 else:
d5a47f82e755 more cleanup.
casties
parents: 507
diff changeset
971 #create list
d5a47f82e755 more cleanup.
casties
parents: 507
diff changeset
972 pageinfo['viewLayers'] = [viewLayer]
d5a47f82e755 more cleanup.
casties
parents: 507
diff changeset
973
503
030251fe9dbc more cleanup.
casties
parents: 501
diff changeset
974 pageinfo['viewLayer'] = viewLayer
471
415a7026eeda split viewMode in viewMode and viewType
casties
parents: 469
diff changeset
975 pageinfo['tocMode'] = tocMode
415a7026eeda split viewMode in viewMode and viewType
casties
parents: 469
diff changeset
976
607
cb5a9c4f5e3a CLOSED - # 268: display of subdocuments
casties
parents: 602
diff changeset
977 minPageNo = docinfo.get('minPageNo', 1)
cb5a9c4f5e3a CLOSED - # 268: display of subdocuments
casties
parents: 602
diff changeset
978
587
6000c7e24d8a new parameter "pf" to specify image file name. (still some issues)
casties
parents: 585
diff changeset
979 # pf takes precedence over pn
6000c7e24d8a new parameter "pf" to specify image file name. (still some issues)
casties
parents: 585
diff changeset
980 if pf:
6000c7e24d8a new parameter "pf" to specify image file name. (still some issues)
casties
parents: 585
diff changeset
981 pageinfo['pf'] = pf
6000c7e24d8a new parameter "pf" to specify image file name. (still some issues)
casties
parents: 585
diff changeset
982 pn = getPnForPf(docinfo, pf)
589
d8d6975cebcb more fixes for pf-parameter
casties
parents: 587
diff changeset
983 # replace pf in request params (used for creating new URLs)
d8d6975cebcb more fixes for pf-parameter
casties
parents: 587
diff changeset
984 self.REQUEST.form.pop('pf', None)
d8d6975cebcb more fixes for pf-parameter
casties
parents: 587
diff changeset
985 self.REQUEST.form['pn'] = pn
587
6000c7e24d8a new parameter "pf" to specify image file name. (still some issues)
casties
parents: 585
diff changeset
986 else:
607
cb5a9c4f5e3a CLOSED - # 268: display of subdocuments
casties
parents: 602
diff changeset
987 pn = getInt(pn, minPageNo)
591
5850689ecfac ocrsearch layer for images.
casties
parents: 590
diff changeset
988 pf = getPfForPn(docinfo, pn)
5850689ecfac ocrsearch layer for images.
casties
parents: 590
diff changeset
989 pageinfo['pf'] = pf
587
6000c7e24d8a new parameter "pf" to specify image file name. (still some issues)
casties
parents: 585
diff changeset
990
6000c7e24d8a new parameter "pf" to specify image file name. (still some issues)
casties
parents: 585
diff changeset
991 pageinfo['pn'] = pn
25
e93fb8cadd3a new, less preliminary version 0.2
casties
parents: 22
diff changeset
992 rows = int(rows or self.thumbrows)
e93fb8cadd3a new, less preliminary version 0.2
casties
parents: 22
diff changeset
993 pageinfo['rows'] = rows
e93fb8cadd3a new, less preliminary version 0.2
casties
parents: 22
diff changeset
994 cols = int(cols or self.thumbcols)
e93fb8cadd3a new, less preliminary version 0.2
casties
parents: 22
diff changeset
995 pageinfo['cols'] = cols
e93fb8cadd3a new, less preliminary version 0.2
casties
parents: 22
diff changeset
996 grpsize = cols * rows
e93fb8cadd3a new, less preliminary version 0.2
casties
parents: 22
diff changeset
997 pageinfo['groupsize'] = grpsize
607
cb5a9c4f5e3a CLOSED - # 268: display of subdocuments
casties
parents: 602
diff changeset
998 # if start is empty use one around pn
cb5a9c4f5e3a CLOSED - # 268: display of subdocuments
casties
parents: 602
diff changeset
999 grouppn = math.ceil(float(pn)/float(grpsize))*grpsize-(grpsize-1)
cb5a9c4f5e3a CLOSED - # 268: display of subdocuments
casties
parents: 602
diff changeset
1000 # but not smaller than minPageNo
cb5a9c4f5e3a CLOSED - # 268: display of subdocuments
casties
parents: 602
diff changeset
1001 start = getInt(start, max(grouppn, minPageNo))
22
b139f9937e97 preliminary version 0.2
casties
parents: 20
diff changeset
1002 pageinfo['start'] = start
511
551ca1641a5e more cleanup.
casties
parents: 509
diff changeset
1003 # get number of pages
607
cb5a9c4f5e3a CLOSED - # 268: display of subdocuments
casties
parents: 602
diff changeset
1004 numPages = int(docinfo.get('numPages', 0))
cb5a9c4f5e3a CLOSED - # 268: display of subdocuments
casties
parents: 602
diff changeset
1005 if numPages == 0:
518
91051b36b9cc uses xml info from doc-info.xql for table of contents now.
casties
parents: 516
diff changeset
1006 # try numTextPages
607
cb5a9c4f5e3a CLOSED - # 268: display of subdocuments
casties
parents: 602
diff changeset
1007 numPages = docinfo.get('numTextPages', 0)
cb5a9c4f5e3a CLOSED - # 268: display of subdocuments
casties
parents: 602
diff changeset
1008 if numPages != 0:
cb5a9c4f5e3a CLOSED - # 268: display of subdocuments
casties
parents: 602
diff changeset
1009 docinfo['numPages'] = numPages
cb5a9c4f5e3a CLOSED - # 268: display of subdocuments
casties
parents: 602
diff changeset
1010
cb5a9c4f5e3a CLOSED - # 268: display of subdocuments
casties
parents: 602
diff changeset
1011 maxPageNo = docinfo.get('maxPageNo', numPages)
cb5a9c4f5e3a CLOSED - # 268: display of subdocuments
casties
parents: 602
diff changeset
1012 logging.debug("minPageNo=%s maxPageNo=%s start=%s numPages=%s"%(minPageNo,maxPageNo,start,numPages))
cb5a9c4f5e3a CLOSED - # 268: display of subdocuments
casties
parents: 602
diff changeset
1013 np = maxPageNo
518
91051b36b9cc uses xml info from doc-info.xql for table of contents now.
casties
parents: 516
diff changeset
1014
511
551ca1641a5e more cleanup.
casties
parents: 509
diff changeset
1015 # cache table of contents
551ca1641a5e more cleanup.
casties
parents: 509
diff changeset
1016 pageinfo['tocPageSize'] = getInt(self.REQUEST.get('tocPageSize', 30))
469
15394486ab75 working with new templates
casties
parents: 468
diff changeset
1017 pageinfo['numgroups'] = int(np / grpsize)
15394486ab75 working with new templates
casties
parents: 468
diff changeset
1018 if np % grpsize > 0:
15394486ab75 working with new templates
casties
parents: 468
diff changeset
1019 pageinfo['numgroups'] += 1
476
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
1020
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
1021 pageFlowLtr = docinfo.get('pageFlow', 'ltr') != 'rtl'
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
1022 oddScanLeft = docinfo.get('oddPage', 'left') != 'right'
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
1023 # add zeroth page for two columns
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
1024 pageZero = (cols == 2 and (pageFlowLtr != oddScanLeft))
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
1025 pageinfo['pageZero'] = pageZero
607
cb5a9c4f5e3a CLOSED - # 268: display of subdocuments
casties
parents: 602
diff changeset
1026 pageinfo['pageBatch'] = self.getPageBatch(start=start, rows=rows, cols=cols, pageFlowLtr=pageFlowLtr, pageZero=pageZero, minIdx=minPageNo, maxIdx=np)
516
7d7b639d7be7 add methods to use doc-info.xql.
casties
parents: 514
diff changeset
1027 # more page parameters
629
e36bf3226fde text image viewer eingecheckt
dwinter
parents: 626
diff changeset
1028 #pageinfo['characterNormalization'] = self.REQUEST.get('characterNormalization','reg')
e36bf3226fde text image viewer eingecheckt
dwinter
parents: 626
diff changeset
1029 #becuase it is buggy this currently disabled and set to orig.
e36bf3226fde text image viewer eingecheckt
dwinter
parents: 626
diff changeset
1030 pageinfo['characterNormalization'] = 'orig'
516
7d7b639d7be7 add methods to use doc-info.xql.
casties
parents: 514
diff changeset
1031 if docinfo.get('pageNumbers'):
7d7b639d7be7 add methods to use doc-info.xql.
casties
parents: 514
diff changeset
1032 # get original page numbers
587
6000c7e24d8a new parameter "pf" to specify image file name. (still some issues)
casties
parents: 585
diff changeset
1033 pageNumber = docinfo['pageNumbers'].get(pn, None)
516
7d7b639d7be7 add methods to use doc-info.xql.
casties
parents: 514
diff changeset
1034 if pageNumber is not None:
7d7b639d7be7 add methods to use doc-info.xql.
casties
parents: 514
diff changeset
1035 pageinfo['pageNumberOrig'] = pageNumber['no']
7d7b639d7be7 add methods to use doc-info.xql.
casties
parents: 514
diff changeset
1036 pageinfo['pageNumberOrigNorm'] = pageNumber['non']
158
4f4fe4e56ffe characterNormalization
abukhman
parents: 157
diff changeset
1037
511
551ca1641a5e more cleanup.
casties
parents: 509
diff changeset
1038 # cache search results
551ca1641a5e more cleanup.
casties
parents: 509
diff changeset
1039 query = self.REQUEST.get('query',None)
551ca1641a5e more cleanup.
casties
parents: 509
diff changeset
1040 pageinfo['query'] = query
591
5850689ecfac ocrsearch layer for images.
casties
parents: 590
diff changeset
1041 if query and viewMode == 'text':
5850689ecfac ocrsearch layer for images.
casties
parents: 590
diff changeset
1042 pageinfo['resultPageSize'] = getInt(self.REQUEST.get('resultPageSize', 10))
511
551ca1641a5e more cleanup.
casties
parents: 509
diff changeset
1043 queryType = self.REQUEST.get('queryType', 'fulltextMorph')
551ca1641a5e more cleanup.
casties
parents: 509
diff changeset
1044 pageinfo['queryType'] = queryType
551ca1641a5e more cleanup.
casties
parents: 509
diff changeset
1045 pageinfo['resultStart'] = getInt(self.REQUEST.get('resultStart', '1'))
551ca1641a5e more cleanup.
casties
parents: 509
diff changeset
1046 self.getSearchResults(mode=queryType, query=query, pageinfo=pageinfo, docinfo=docinfo)
551ca1641a5e more cleanup.
casties
parents: 509
diff changeset
1047
551ca1641a5e more cleanup.
casties
parents: 509
diff changeset
1048 # highlighting
551ca1641a5e more cleanup.
casties
parents: 509
diff changeset
1049 highlightQuery = self.REQUEST.get('highlightQuery', None)
551ca1641a5e more cleanup.
casties
parents: 509
diff changeset
1050 if highlightQuery:
551ca1641a5e more cleanup.
casties
parents: 509
diff changeset
1051 pageinfo['highlightQuery'] = highlightQuery
551ca1641a5e more cleanup.
casties
parents: 509
diff changeset
1052 pageinfo['highlightElement'] = self.REQUEST.get('highlightElement', '')
551ca1641a5e more cleanup.
casties
parents: 509
diff changeset
1053 pageinfo['highlightElementPos'] = self.REQUEST.get('highlightElementPos', '')
460
76bc2317146f more renovation
casties
parents: 459
diff changeset
1054
22
b139f9937e97 preliminary version 0.2
casties
parents: 20
diff changeset
1055 return pageinfo
460
76bc2317146f more renovation
casties
parents: 459
diff changeset
1056
463
89ad327b4bbd more renovation
casties
parents: 462
diff changeset
1057
482
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
1058 def getPageBatch(self, start=1, rows=10, cols=2, pageFlowLtr=True, pageZero=False, minIdx=1, maxIdx=0):
613
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 612
diff changeset
1059 """Return dict with array of page information for one screenfull of thumbnails.
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 612
diff changeset
1060
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 612
diff changeset
1061 :param start: index of current page
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 612
diff changeset
1062 :param rows: number of rows in one batch
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 612
diff changeset
1063 :param cols: number of columns in one batch
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 612
diff changeset
1064 :param pageFlowLtr: do indexes increase from left to right
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 612
diff changeset
1065 :param pageZero: is there a zeroth non-visible page
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 612
diff changeset
1066 :param minIdx: minimum index to use
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 612
diff changeset
1067 :param maxIdx: maximum index to use
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 612
diff changeset
1068 :returns: dict with
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 612
diff changeset
1069 first: first page index
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 612
diff changeset
1070 last: last page index
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 612
diff changeset
1071 batches: list of all possible batches(dict: 'start': index, 'end': index)
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 612
diff changeset
1072 pages: list for current batch of rows(list of cols(list of pages(dict: 'idx': index)))
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 612
diff changeset
1073 nextStart: first index of next batch
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 612
diff changeset
1074 prevStart: first index of previous batch
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 612
diff changeset
1075 """
607
cb5a9c4f5e3a CLOSED - # 268: display of subdocuments
casties
parents: 602
diff changeset
1076 logging.debug("getPageBatch start=%s minIdx=%s maxIdx=%s"%(start,minIdx,maxIdx))
482
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
1077 batch = {}
480
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
1078 grpsize = rows * cols
476
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
1079 if maxIdx == 0:
480
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
1080 maxIdx = start + grpsize
476
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
1081
607
cb5a9c4f5e3a CLOSED - # 268: display of subdocuments
casties
parents: 602
diff changeset
1082 np = maxIdx - minIdx + 1
613
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 612
diff changeset
1083 if pageZero:
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 612
diff changeset
1084 # correct number of pages for batching
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 612
diff changeset
1085 np += 1
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 612
diff changeset
1086
607
cb5a9c4f5e3a CLOSED - # 268: display of subdocuments
casties
parents: 602
diff changeset
1087 nb = int(math.ceil(np / float(grpsize)))
613
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 612
diff changeset
1088
482
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
1089 # list of all batch start and end points
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
1090 batches = []
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
1091 if pageZero:
607
cb5a9c4f5e3a CLOSED - # 268: display of subdocuments
casties
parents: 602
diff changeset
1092 ofs = minIdx - 1
482
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
1093 else:
607
cb5a9c4f5e3a CLOSED - # 268: display of subdocuments
casties
parents: 602
diff changeset
1094 ofs = minIdx
482
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
1095
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
1096 for i in range(nb):
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
1097 s = i * grpsize + ofs
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
1098 e = min((i + 1) * grpsize + ofs - 1, maxIdx)
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
1099 batches.append({'start':s, 'end':e})
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
1100
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
1101 batch['batches'] = batches
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
1102
613
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 612
diff changeset
1103 # list of pages for current screen
476
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
1104 pages = []
607
cb5a9c4f5e3a CLOSED - # 268: display of subdocuments
casties
parents: 602
diff changeset
1105 if pageZero and start == minIdx:
476
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
1106 # correct beginning
607
cb5a9c4f5e3a CLOSED - # 268: display of subdocuments
casties
parents: 602
diff changeset
1107 idx = minIdx - 1
476
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
1108 else:
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
1109 idx = start
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
1110
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
1111 for r in range(rows):
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
1112 row = []
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
1113 for c in range(cols):
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
1114 if idx < minIdx or idx > maxIdx:
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
1115 page = {'idx':None}
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
1116 else:
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
1117 page = {'idx':idx}
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
1118
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
1119 idx += 1
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
1120 if pageFlowLtr:
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
1121 row.append(page)
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
1122 else:
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
1123 row.insert(0, page)
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
1124
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
1125 pages.append(row)
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
1126
607
cb5a9c4f5e3a CLOSED - # 268: display of subdocuments
casties
parents: 602
diff changeset
1127 if start > minIdx:
cb5a9c4f5e3a CLOSED - # 268: display of subdocuments
casties
parents: 602
diff changeset
1128 batch['prevStart'] = max(start - grpsize, minIdx)
480
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
1129 else:
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
1130 batch['prevStart'] = None
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
1131
526
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
1132 if start + grpsize <= maxIdx:
613
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 612
diff changeset
1133 if pageZero and start == minIdx:
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 612
diff changeset
1134 # correct nextStart for pageZero
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 612
diff changeset
1135 batch['nextStart'] = grpsize
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 612
diff changeset
1136 else:
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 612
diff changeset
1137 batch['nextStart'] = start + grpsize
480
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
1138 else:
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
1139 batch['nextStart'] = None
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
1140
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
1141 batch['pages'] = pages
571
f1906951be2a nicer batching of tocs
casties
parents: 568
diff changeset
1142 batch['first'] = minIdx
f1906951be2a nicer batching of tocs
casties
parents: 568
diff changeset
1143 batch['last'] = maxIdx
613
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 612
diff changeset
1144 logging.debug("batch: %s"%repr(batch))
482
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
1145 return batch
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
1146
613
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 612
diff changeset
1147
482
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
1148 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
1149 """returns dict with information for one screenfull of data."""
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
1150 batch = {}
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
1151 if end == 0:
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
1152 end = start + size
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
1153
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
1154 nb = int(math.ceil(end / float(size)))
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
1155 # list of all batch start and end points
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
1156 batches = []
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
1157 for i in range(nb):
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
1158 s = i * size + 1
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
1159 e = min((i + 1) * size, end)
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
1160 batches.append({'start':s, 'end':e})
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
1161
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
1162 batch['batches'] = batches
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
1163 # list of elements in this batch
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
1164 this = []
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
1165 j = 0
526
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
1166 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
1167 if data:
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
1168 if fullData:
526
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
1169 d = data.get(i, None)
482
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
1170 else:
526
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
1171 d = data.get(j, None)
482
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
1172 j += 1
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
1173
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
1174 else:
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
1175 d = i+1
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
1176
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
1177 this.append(d)
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
1178
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
1179 batch['this'] = this
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
1180 if start > 1:
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
1181 batch['prevStart'] = max(start - size, 1)
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
1182 else:
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
1183 batch['prevStart'] = None
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
1184
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
1185 if start + size < end:
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
1186 batch['nextStart'] = start + size
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
1187 else:
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
1188 batch['nextStart'] = None
7ca8ac7db06e more new template stuff. more batching methods in documentViewer.
casties
parents: 480
diff changeset
1189
571
f1906951be2a nicer batching of tocs
casties
parents: 568
diff changeset
1190 batch['first'] = start
f1906951be2a nicer batching of tocs
casties
parents: 568
diff changeset
1191 batch['last'] = end
480
50a28442f21c more new template stuff
casties
parents: 479
diff changeset
1192 return batch
476
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
1193
1d93a8cb2d8f more new template stuff
casties
parents: 475
diff changeset
1194
546
2928037f9a75 ASSIGNED - # 249: Annotations shared in groups
casties
parents: 543
diff changeset
1195 def getAnnotatorGroupsForUser(self, user, annotationServerUrl="http://tuxserve03.mpiwg-berlin.mpg.de/AnnotationManager"):
2928037f9a75 ASSIGNED - # 249: Annotations shared in groups
casties
parents: 543
diff changeset
1196 """returns list of groups {name:*, id:*} on the annotation server for the user"""
2928037f9a75 ASSIGNED - # 249: Annotations shared in groups
casties
parents: 543
diff changeset
1197 groups = []
623
6012fe93f78c better scheme-less URL code.
casties
parents: 622
diff changeset
1198 # add matching http(s) from our URL
6012fe93f78c better scheme-less URL code.
casties
parents: 622
diff changeset
1199 annotationServerUrl = sslifyUrl(annotationServerUrl, self)
622
bc68ca0d2c0a make annotationServerUrl work with protocol-relative URL (//).
casties
parents: 618
diff changeset
1200
546
2928037f9a75 ASSIGNED - # 249: Annotations shared in groups
casties
parents: 543
diff changeset
1201 groupsUrl = "%s/annotator/groups?user=%s"%(annotationServerUrl,user)
2928037f9a75 ASSIGNED - # 249: Annotations shared in groups
casties
parents: 543
diff changeset
1202 data = getHttpData(url=groupsUrl, noExceptions=True)
2928037f9a75 ASSIGNED - # 249: Annotations shared in groups
casties
parents: 543
diff changeset
1203 if data:
2928037f9a75 ASSIGNED - # 249: Annotations shared in groups
casties
parents: 543
diff changeset
1204 res = json.loads(data)
2928037f9a75 ASSIGNED - # 249: Annotations shared in groups
casties
parents: 543
diff changeset
1205 rows = res.get('rows', None)
2928037f9a75 ASSIGNED - # 249: Annotations shared in groups
casties
parents: 543
diff changeset
1206 if rows is None:
2928037f9a75 ASSIGNED - # 249: Annotations shared in groups
casties
parents: 543
diff changeset
1207 return groups
2928037f9a75 ASSIGNED - # 249: Annotations shared in groups
casties
parents: 543
diff changeset
1208 for r in rows:
2928037f9a75 ASSIGNED - # 249: Annotations shared in groups
casties
parents: 543
diff changeset
1209 groups.append({'id': r.get('id', None), 'name': r.get('name', None), 'uri': r.get('uri', None)})
2928037f9a75 ASSIGNED - # 249: Annotations shared in groups
casties
parents: 543
diff changeset
1210
2928037f9a75 ASSIGNED - # 249: Annotations shared in groups
casties
parents: 543
diff changeset
1211 return groups
2928037f9a75 ASSIGNED - # 249: Annotations shared in groups
casties
parents: 543
diff changeset
1212
626
7dafe8283312 make sslify accessible for templates.
casties
parents: 625
diff changeset
1213 def sslifyUrl(self, url, **args):
7dafe8283312 make sslify accessible for templates.
casties
parents: 625
diff changeset
1214 """returns URL with http or https"""
7dafe8283312 make sslify accessible for templates.
casties
parents: 625
diff changeset
1215 return sslifyUrl(url, **args)
546
2928037f9a75 ASSIGNED - # 249: Annotations shared in groups
casties
parents: 543
diff changeset
1216
463
89ad327b4bbd more renovation
casties
parents: 462
diff changeset
1217 security.declareProtected('View management screens','changeDocumentViewerForm')
89ad327b4bbd more renovation
casties
parents: 462
diff changeset
1218 changeDocumentViewerForm = PageTemplateFile('zpt/changeDocumentViewer', globals())
22
b139f9937e97 preliminary version 0.2
casties
parents: 20
diff changeset
1219
526
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
1220 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
1221 """init document viewer"""
b139f9937e97 preliminary version 0.2
casties
parents: 20
diff changeset
1222 self.title=title
b139f9937e97 preliminary version 0.2
casties
parents: 20
diff changeset
1223 self.digilibBaseUrl = digilibBaseUrl
566
4a31608f8b0e more new MpiwgXmlTextServer.
casties
parents: 565
diff changeset
1224 self.digilibScalerUrl = digilibBaseUrl + '/servlet/Scaler'
4a31608f8b0e more new MpiwgXmlTextServer.
casties
parents: 565
diff changeset
1225 self.digilibViewerUrl = digilibBaseUrl + '/jquery/digilib.html'
25
e93fb8cadd3a new, less preliminary version 0.2
casties
parents: 22
diff changeset
1226 self.thumbrows = thumbrows
e93fb8cadd3a new, less preliminary version 0.2
casties
parents: 22
diff changeset
1227 self.thumbcols = thumbcols
32
b25c89d693cf version 0.2.3 - first version with access control!
casties
parents: 31
diff changeset
1228 self.authgroups = [s.strip().lower() for s in authgroups.split(',')]
463
89ad327b4bbd more renovation
casties
parents: 462
diff changeset
1229 try:
89ad327b4bbd more renovation
casties
parents: 462
diff changeset
1230 # assume MetaDataFolder instance is called metadata
89ad327b4bbd more renovation
casties
parents: 462
diff changeset
1231 self.metadataService = getattr(self, 'metadata')
89ad327b4bbd more renovation
casties
parents: 462
diff changeset
1232 except Exception, e:
89ad327b4bbd more renovation
casties
parents: 462
diff changeset
1233 logging.error("Unable to find MetaDataFolder 'metadata': "+str(e))
526
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
1234
3f375a048402 moved search and dict into separate layers.
casties
parents: 525
diff changeset
1235 self.setAvailableLayers(availableLayers)
463
89ad327b4bbd more renovation
casties
parents: 462
diff changeset
1236
22
b139f9937e97 preliminary version 0.2
casties
parents: 20
diff changeset
1237 if RESPONSE is not None:
b139f9937e97 preliminary version 0.2
casties
parents: 20
diff changeset
1238 RESPONSE.redirect('manage_main')
623
6012fe93f78c better scheme-less URL code.
casties
parents: 622
diff changeset
1239
0
dwinter
parents:
diff changeset
1240
dwinter
parents:
diff changeset
1241 def manage_AddDocumentViewerForm(self):
dwinter
parents:
diff changeset
1242 """add the viewer form"""
22
b139f9937e97 preliminary version 0.2
casties
parents: 20
diff changeset
1243 pt=PageTemplateFile('zpt/addDocumentViewer', globals()).__of__(self)
0
dwinter
parents:
diff changeset
1244 return pt()
dwinter
parents:
diff changeset
1245
84
a6e4f9b6729a first version with new full-text infrastructure and slightly changed templates
casties
parents: 83
diff changeset
1246 def manage_AddDocumentViewer(self,id,imageScalerUrl="",textServerName="",title="",RESPONSE=None):
0
dwinter
parents:
diff changeset
1247 """add the viewer"""
84
a6e4f9b6729a first version with new full-text infrastructure and slightly changed templates
casties
parents: 83
diff changeset
1248 newObj=documentViewer(id,imageScalerUrl=imageScalerUrl,title=title,textServerName=textServerName)
0
dwinter
parents:
diff changeset
1249 self._setObject(id,newObj)
dwinter
parents:
diff changeset
1250
dwinter
parents:
diff changeset
1251 if RESPONSE is not None:
dwinter
parents:
diff changeset
1252 RESPONSE.redirect('manage_main')