annotate roundup/cgi/templating.py @ 4117:4d1fa6e1fe8c 1.4.8

release stuff
author Richard Jones <richard@users.sourceforge.net>
date Wed, 18 Mar 2009 03:39:58 +0000
parents d61066deae67
children 42331c201b02
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3702
06d7816976bc python 2.6 compatibility
Richard Jones <richard@users.sourceforge.net>
parents: 3700
diff changeset
1 from __future__ import nested_scopes
06d7816976bc python 2.6 compatibility
Richard Jones <richard@users.sourceforge.net>
parents: 3700
diff changeset
2
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
3 """Implements the API used in the HTML templating for the web interface.
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
4 """
2180
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2170
diff changeset
5
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
6 todo = """
2327
36ae1b14aaab remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2324
diff changeset
7 - Most methods should have a "default" arg to supply a value
36ae1b14aaab remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2324
diff changeset
8 when none appears in the hyperdb or request.
2180
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2170
diff changeset
9 - Multilink property additions: change_note and new_upload
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2170
diff changeset
10 - Add class.find() too
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2170
diff changeset
11 - NumberHTMLProperty should support numeric operations
2324
da4444e593f4 *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 2320
diff changeset
12 - LinkHTMLProperty should handle comparisons to strings (cf. linked name)
2411
7ff0a0306877 another TODO
Richard Jones <richard@users.sourceforge.net>
parents: 2396
diff changeset
13 - HTMLRequest.default(self, sort, group, filter, columns, **filterspec):
3843
97d9368ed485 Yet another emacs syntax highlighting workaround.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3842
diff changeset
14 '''Set the request's view arguments to the given values when no
2411
7ff0a0306877 another TODO
Richard Jones <richard@users.sourceforge.net>
parents: 2396
diff changeset
15 values are found in the CGI environment.
3843
97d9368ed485 Yet another emacs syntax highlighting workaround.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3842
diff changeset
16 '''
2664
8348373b4361 another TODO
Richard Jones <richard@users.sourceforge.net>
parents: 2651
diff changeset
17 - have menu() methods accept filtering arguments
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
18 """
2180
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2170
diff changeset
19
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
20 __docformat__ = 'restructuredtext'
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
21
1931
f1e5e5115c29 Always sort MultilinkHTMLProperty in the correct order...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1917
diff changeset
22
3188
7faae85e1e33 merge from branch
Richard Jones <richard@users.sourceforge.net>
parents: 3183
diff changeset
23 import sys, cgi, urllib, os, re, os.path, time, errno, mimetypes, csv
3644
f35ece8f8ff7 added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents: 3635
diff changeset
24 import calendar, textwrap
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
25
3188
7faae85e1e33 merge from branch
Richard Jones <richard@users.sourceforge.net>
parents: 3183
diff changeset
26 from roundup import hyperdb, date, support
2377
a53f87f2488a StaticTranslationService moved here out of the code originating from Zope;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2347
diff changeset
27 from roundup import i18n
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
28 from roundup.i18n import _
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
29
1016
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
30 try:
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
31 import cPickle as pickle
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
32 except ImportError:
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
33 import pickle
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
34 try:
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
35 import cStringIO as StringIO
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
36 except ImportError:
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
37 import StringIO
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
38 try:
3509
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
39 from StructuredText.StructuredText import HTML as StructuredText
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
40 except ImportError:
3509
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
41 try: # older version
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
42 import StructuredText
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
43 except ImportError:
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
44 StructuredText = None
3862
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
45 try:
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
46 from docutils.core import publish_parts as ReStructuredText
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
47 except ImportError:
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
48 ReStructuredText = None
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
49
1049
Richard Jones <richard@users.sourceforge.net>
parents: 1041
diff changeset
50 # bring in the templating support
2377
a53f87f2488a StaticTranslationService moved here out of the code originating from Zope;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2347
diff changeset
51 from roundup.cgi.PageTemplates import PageTemplate, GlobalTranslationService
1049
Richard Jones <richard@users.sourceforge.net>
parents: 1041
diff changeset
52 from roundup.cgi.PageTemplates.Expressions import getEngine
2377
a53f87f2488a StaticTranslationService moved here out of the code originating from Zope;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2347
diff changeset
53 from roundup.cgi.TAL import TALInterpreter
2558
cf52ad6788c8 TranslationService definitions moved to separate module;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2547
diff changeset
54 from roundup.cgi import TranslationService, ZTUtils
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
55
2377
a53f87f2488a StaticTranslationService moved here out of the code originating from Zope;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2347
diff changeset
56 ### i18n services
2558
cf52ad6788c8 TranslationService definitions moved to separate module;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2547
diff changeset
57 # this global translation service is not thread-safe.
cf52ad6788c8 TranslationService definitions moved to separate module;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2547
diff changeset
58 # it is left here for backward compatibility
cf52ad6788c8 TranslationService definitions moved to separate module;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2547
diff changeset
59 # until all Web UI translations are done via client.translator object
cf52ad6788c8 TranslationService definitions moved to separate module;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2547
diff changeset
60 translationService = TranslationService.get_translation()
2389
2ff93cee9c63 StaticTranslationService got methods gettext() and ngettext()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2377
diff changeset
61 GlobalTranslationService.setGlobalTranslationService(translationService)
2377
a53f87f2488a StaticTranslationService moved here out of the code originating from Zope;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2347
diff changeset
62
a53f87f2488a StaticTranslationService moved here out of the code originating from Zope;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2347
diff changeset
63 ### templating
a53f87f2488a StaticTranslationService moved here out of the code originating from Zope;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2347
diff changeset
64
1068
665730c27d29 nicer template absence error
Richard Jones <richard@users.sourceforge.net>
parents: 1067
diff changeset
65 class NoTemplate(Exception):
665730c27d29 nicer template absence error
Richard Jones <richard@users.sourceforge.net>
parents: 1067
diff changeset
66 pass
665730c27d29 nicer template absence error
Richard Jones <richard@users.sourceforge.net>
parents: 1067
diff changeset
67
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
68 class Unauthorised(Exception):
2466
7b248ea0a2e5 add translation to Unauthorised exception; mark missed text for translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2458
diff changeset
69 def __init__(self, action, klass, translator=None):
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
70 self.action = action
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
71 self.klass = klass
2466
7b248ea0a2e5 add translation to Unauthorised exception; mark missed text for translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2458
diff changeset
72 if translator:
7b248ea0a2e5 add translation to Unauthorised exception; mark missed text for translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2458
diff changeset
73 self._ = translator.gettext
7b248ea0a2e5 add translation to Unauthorised exception; mark missed text for translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2458
diff changeset
74 else:
2561
0dd3dca6bd01 always use translation service set in the tracker client instance;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2558
diff changeset
75 self._ = TranslationService.get_translation().gettext
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
76 def __str__(self):
2466
7b248ea0a2e5 add translation to Unauthorised exception; mark missed text for translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2458
diff changeset
77 return self._('You are not allowed to %(action)s '
7b248ea0a2e5 add translation to Unauthorised exception; mark missed text for translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2458
diff changeset
78 'items of class %(class)s') % {
7b248ea0a2e5 add translation to Unauthorised exception; mark missed text for translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2458
diff changeset
79 'action': self.action, 'class': self.klass}
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
80
2961
Richard Jones <richard@users.sourceforge.net>
parents: 2959
diff changeset
81 def find_template(dir, name, view):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
82 """ Find a template in the nominated dir
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
83 """
1696
38f9578de0c6 fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents: 1693
diff changeset
84 # find the source
2961
Richard Jones <richard@users.sourceforge.net>
parents: 2959
diff changeset
85 if view:
Richard Jones <richard@users.sourceforge.net>
parents: 2959
diff changeset
86 filename = '%s.%s'%(name, view)
1696
38f9578de0c6 fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents: 1693
diff changeset
87 else:
38f9578de0c6 fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents: 1693
diff changeset
88 filename = name
38f9578de0c6 fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents: 1693
diff changeset
89
38f9578de0c6 fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents: 1693
diff changeset
90 # try old-style
38f9578de0c6 fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents: 1693
diff changeset
91 src = os.path.join(dir, filename)
38f9578de0c6 fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents: 1693
diff changeset
92 if os.path.exists(src):
38f9578de0c6 fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents: 1693
diff changeset
93 return (src, filename)
38f9578de0c6 fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents: 1693
diff changeset
94
2959
fa5410ae581d allow use of XML templates again
Richard Jones <richard@users.sourceforge.net>
parents: 2956
diff changeset
95 # try with a .html or .xml extension (new-style)
fa5410ae581d allow use of XML templates again
Richard Jones <richard@users.sourceforge.net>
parents: 2956
diff changeset
96 for extension in '.html', '.xml':
3280
f3d15524562e fix faulty find_template filename facility [SF#1163629]
Richard Jones <richard@users.sourceforge.net>
parents: 3271
diff changeset
97 f = filename + extension
f3d15524562e fix faulty find_template filename facility [SF#1163629]
Richard Jones <richard@users.sourceforge.net>
parents: 3271
diff changeset
98 src = os.path.join(dir, f)
2959
fa5410ae581d allow use of XML templates again
Richard Jones <richard@users.sourceforge.net>
parents: 2956
diff changeset
99 if os.path.exists(src):
3280
f3d15524562e fix faulty find_template filename facility [SF#1163629]
Richard Jones <richard@users.sourceforge.net>
parents: 3271
diff changeset
100 return (src, f)
1696
38f9578de0c6 fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents: 1693
diff changeset
101
2961
Richard Jones <richard@users.sourceforge.net>
parents: 2959
diff changeset
102 # no view == no generic template is possible
Richard Jones <richard@users.sourceforge.net>
parents: 2959
diff changeset
103 if not view:
1696
38f9578de0c6 fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents: 1693
diff changeset
104 raise NoTemplate, 'Template file "%s" doesn\'t exist'%name
38f9578de0c6 fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents: 1693
diff changeset
105
38f9578de0c6 fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents: 1693
diff changeset
106 # try for a _generic template
2961
Richard Jones <richard@users.sourceforge.net>
parents: 2959
diff changeset
107 generic = '_generic.%s'%view
1696
38f9578de0c6 fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents: 1693
diff changeset
108 src = os.path.join(dir, generic)
38f9578de0c6 fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents: 1693
diff changeset
109 if os.path.exists(src):
38f9578de0c6 fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents: 1693
diff changeset
110 return (src, generic)
38f9578de0c6 fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents: 1693
diff changeset
111
38f9578de0c6 fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents: 1693
diff changeset
112 # finally, try _generic.html
1728
1f8bbdff56b9 fixed generic template discovery
Richard Jones <richard@users.sourceforge.net>
parents: 1717
diff changeset
113 generic = generic + '.html'
1696
38f9578de0c6 fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents: 1693
diff changeset
114 src = os.path.join(dir, generic)
38f9578de0c6 fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents: 1693
diff changeset
115 if os.path.exists(src):
38f9578de0c6 fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents: 1693
diff changeset
116 return (src, generic)
38f9578de0c6 fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents: 1693
diff changeset
117
38f9578de0c6 fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents: 1693
diff changeset
118 raise NoTemplate, 'No template file exists for templating "%s" '\
2961
Richard Jones <richard@users.sourceforge.net>
parents: 2959
diff changeset
119 'with template "%s" (neither "%s" nor "%s")'%(name, view,
1696
38f9578de0c6 fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents: 1693
diff changeset
120 filename, generic)
38f9578de0c6 fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents: 1693
diff changeset
121
1204
b862bbf2067a Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents: 1202
diff changeset
122 class Templates:
b862bbf2067a Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents: 1202
diff changeset
123 templates = {}
b862bbf2067a Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents: 1202
diff changeset
124
b862bbf2067a Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents: 1202
diff changeset
125 def __init__(self, dir):
b862bbf2067a Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents: 1202
diff changeset
126 self.dir = dir
1183
08a13a84ed43 Some speedups - both of the SQL backends can handle using only one cursor.
Richard Jones <richard@users.sourceforge.net>
parents: 1182
diff changeset
127
1204
b862bbf2067a Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents: 1202
diff changeset
128 def precompileTemplates(self):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
129 """ Go through a directory and precompile all the templates therein
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
130 """
1204
b862bbf2067a Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents: 1202
diff changeset
131 for filename in os.listdir(self.dir):
2854
6acc315570eb Templates.precompileTemplates: skip files without ".html" extension
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2827
diff changeset
132 # skip subdirs
6acc315570eb Templates.precompileTemplates: skip files without ".html" extension
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2827
diff changeset
133 if os.path.isdir(filename):
6acc315570eb Templates.precompileTemplates: skip files without ".html" extension
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2827
diff changeset
134 continue
2961
Richard Jones <richard@users.sourceforge.net>
parents: 2959
diff changeset
135
2959
fa5410ae581d allow use of XML templates again
Richard Jones <richard@users.sourceforge.net>
parents: 2956
diff changeset
136 # skip files without ".html" or ".xml" extension - .css, .js etc.
fa5410ae581d allow use of XML templates again
Richard Jones <richard@users.sourceforge.net>
parents: 2956
diff changeset
137 for extension in '.html', '.xml':
fa5410ae581d allow use of XML templates again
Richard Jones <richard@users.sourceforge.net>
parents: 2956
diff changeset
138 if filename.endswith(extension):
fa5410ae581d allow use of XML templates again
Richard Jones <richard@users.sourceforge.net>
parents: 2956
diff changeset
139 break
fa5410ae581d allow use of XML templates again
Richard Jones <richard@users.sourceforge.net>
parents: 2956
diff changeset
140 else:
fa5410ae581d allow use of XML templates again
Richard Jones <richard@users.sourceforge.net>
parents: 2956
diff changeset
141 continue
fa5410ae581d allow use of XML templates again
Richard Jones <richard@users.sourceforge.net>
parents: 2956
diff changeset
142
2961
Richard Jones <richard@users.sourceforge.net>
parents: 2959
diff changeset
143 # remove extension
2959
fa5410ae581d allow use of XML templates again
Richard Jones <richard@users.sourceforge.net>
parents: 2956
diff changeset
144 filename = filename[:-len(extension)]
fa5410ae581d allow use of XML templates again
Richard Jones <richard@users.sourceforge.net>
parents: 2956
diff changeset
145
2854
6acc315570eb Templates.precompileTemplates: skip files without ".html" extension
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2827
diff changeset
146 # load the template
1204
b862bbf2067a Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents: 1202
diff changeset
147 if '.' in filename:
2854
6acc315570eb Templates.precompileTemplates: skip files without ".html" extension
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2827
diff changeset
148 name, extension = filename.split('.', 1)
1591
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1565
diff changeset
149 self.get(name, extension)
1204
b862bbf2067a Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents: 1202
diff changeset
150 else:
1591
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1565
diff changeset
151 self.get(filename, None)
1041
c28603c9f831 Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents: 1030
diff changeset
152
1441
2b20294b934a allow get("issue.item") for getting templates
Richard Jones <richard@users.sourceforge.net>
parents: 1440
diff changeset
153 def get(self, name, extension=None):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
154 """ Interface to get a template, possibly loading a compiled template.
1204
b862bbf2067a Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents: 1202
diff changeset
155
b862bbf2067a Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents: 1202
diff changeset
156 "name" and "extension" indicate the template we're after, which in
b862bbf2067a Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents: 1202
diff changeset
157 most cases will be "name.extension". If "extension" is None, then
b862bbf2067a Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents: 1202
diff changeset
158 we look for a template just called "name" with no extension.
1041
c28603c9f831 Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents: 1030
diff changeset
159
1204
b862bbf2067a Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents: 1202
diff changeset
160 If the file "name.extension" doesn't exist, we look for
b862bbf2067a Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents: 1202
diff changeset
161 "_generic.extension" as a fallback.
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
162 """
1204
b862bbf2067a Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents: 1202
diff changeset
163 # default the name to "home"
b862bbf2067a Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents: 1202
diff changeset
164 if name is None:
b862bbf2067a Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents: 1202
diff changeset
165 name = 'home'
1441
2b20294b934a allow get("issue.item") for getting templates
Richard Jones <richard@users.sourceforge.net>
parents: 1440
diff changeset
166 elif extension is None and '.' in name:
2b20294b934a allow get("issue.item") for getting templates
Richard Jones <richard@users.sourceforge.net>
parents: 1440
diff changeset
167 # split name
2b20294b934a allow get("issue.item") for getting templates
Richard Jones <richard@users.sourceforge.net>
parents: 1440
diff changeset
168 name, extension = name.split('.')
1068
665730c27d29 nicer template absence error
Richard Jones <richard@users.sourceforge.net>
parents: 1067
diff changeset
169
1696
38f9578de0c6 fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents: 1693
diff changeset
170 # find the source
38f9578de0c6 fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents: 1693
diff changeset
171 src, filename = find_template(self.dir, name, extension)
1591
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1565
diff changeset
172
1696
38f9578de0c6 fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents: 1693
diff changeset
173 # has it changed?
1068
665730c27d29 nicer template absence error
Richard Jones <richard@users.sourceforge.net>
parents: 1067
diff changeset
174 try:
665730c27d29 nicer template absence error
Richard Jones <richard@users.sourceforge.net>
parents: 1067
diff changeset
175 stime = os.stat(src)[os.path.stat.ST_MTIME]
665730c27d29 nicer template absence error
Richard Jones <richard@users.sourceforge.net>
parents: 1067
diff changeset
176 except os.error, error:
665730c27d29 nicer template absence error
Richard Jones <richard@users.sourceforge.net>
parents: 1067
diff changeset
177 if error.errno != errno.ENOENT:
665730c27d29 nicer template absence error
Richard Jones <richard@users.sourceforge.net>
parents: 1067
diff changeset
178 raise
1016
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
179
1332
e2d51ba4f6b1 key the templates cache off full path, not filename
Richard Jones <richard@users.sourceforge.net>
parents: 1325
diff changeset
180 if self.templates.has_key(src) and \
2136
ee3cf6a44f29 queries on a per-user basis, and public queries [SF#891798] :)
Richard Jones <richard@users.sourceforge.net>
parents: 2118
diff changeset
181 stime <= self.templates[src].mtime:
1204
b862bbf2067a Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents: 1202
diff changeset
182 # compiled template is up to date
1332
e2d51ba4f6b1 key the templates cache off full path, not filename
Richard Jones <richard@users.sourceforge.net>
parents: 1325
diff changeset
183 return self.templates[src]
1016
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
184
1204
b862bbf2067a Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents: 1202
diff changeset
185 # compile the template
1332
e2d51ba4f6b1 key the templates cache off full path, not filename
Richard Jones <richard@users.sourceforge.net>
parents: 1325
diff changeset
186 self.templates[src] = pt = RoundupPageTemplate()
1771
332fe2b77e1c set the content type on page templates (can have XML templates now)
Richard Jones <richard@users.sourceforge.net>
parents: 1767
diff changeset
187 # use pt_edit so we can pass the content_type guess too
1773
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
188 content_type = mimetypes.guess_type(filename)[0] or 'text/html'
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
189 pt.pt_edit(open(src).read(), content_type)
1204
b862bbf2067a Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents: 1202
diff changeset
190 pt.id = filename
2136
ee3cf6a44f29 queries on a per-user basis, and public queries [SF#891798] :)
Richard Jones <richard@users.sourceforge.net>
parents: 2118
diff changeset
191 pt.mtime = stime
1204
b862bbf2067a Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents: 1202
diff changeset
192 return pt
b862bbf2067a Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents: 1202
diff changeset
193
b862bbf2067a Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents: 1202
diff changeset
194 def __getitem__(self, name):
b862bbf2067a Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents: 1202
diff changeset
195 name, extension = os.path.splitext(name)
b862bbf2067a Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents: 1202
diff changeset
196 if extension:
b862bbf2067a Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents: 1202
diff changeset
197 extension = extension[1:]
b862bbf2067a Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents: 1202
diff changeset
198 try:
b862bbf2067a Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents: 1202
diff changeset
199 return self.get(name, extension)
b862bbf2067a Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents: 1202
diff changeset
200 except NoTemplate, message:
b862bbf2067a Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents: 1202
diff changeset
201 raise KeyError, message
1016
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
202
2390
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
203 def context(client, template=None, classname=None, request=None):
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
204 """Return the rendering context dictionary
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
205
2390
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
206 The dictionary includes following symbols:
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
207
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
208 *context*
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
209 this is one of three things:
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
210
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
211 1. None - we're viewing a "home" page
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
212 2. The current class of item being displayed. This is an HTMLClass
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
213 instance.
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
214 3. The current item from the database, if we're viewing a specific
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
215 item, as an HTMLItem instance.
2390
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
216
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
217 *request*
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
218 Includes information about the current request, including:
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
219
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
220 - the url
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
221 - the current index information (``filterspec``, ``filter`` args,
2327
36ae1b14aaab remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2324
diff changeset
222 ``properties``, etc) parsed out of the form.
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
223 - methods for easy filterspec link generation
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
224 - *user*, the current user node as an HTMLItem instance
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
225 - *form*, the current CGI form information as a FieldStorage
2390
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
226
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
227 *config*
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
228 The current tracker config.
2390
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
229
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
230 *db*
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
231 The current database, used to access arbitrary database items.
2390
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
232
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
233 *utils*
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
234 This is a special class that has its base in the TemplatingUtils
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
235 class in this file. If the tracker interfaces module defines a
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
236 TemplatingUtils class then it is mixed in, overriding the methods
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
237 in the base class.
2390
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
238
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
239 *templates*
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
240 Access to all the tracker templates by name.
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
241 Used mainly in *use-macro* commands.
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
242
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
243 *template*
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
244 Current rendering template.
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
245
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
246 *true*
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
247 Logical True value.
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
248
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
249 *false*
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
250 Logical False value.
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
251
2562
1f4791438b65 add 'i18n' to the rendering context dictionary description
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2561
diff changeset
252 *i18n*
1f4791438b65 add 'i18n' to the rendering context dictionary description
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2561
diff changeset
253 Internationalization service, providing string translation
1f4791438b65 add 'i18n' to the rendering context dictionary description
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2561
diff changeset
254 methods ``gettext`` and ``ngettext``.
1f4791438b65 add 'i18n' to the rendering context dictionary description
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2561
diff changeset
255
2390
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
256 """
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
257 # construct the TemplatingUtils class
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
258 utils = TemplatingUtils
2637
11811b313459 The demo.py script works again using the new configuration system.
Richard Jones <richard@users.sourceforge.net>
parents: 2614
diff changeset
259 if (hasattr(client.instance, 'interfaces') and
11811b313459 The demo.py script works again using the new configuration system.
Richard Jones <richard@users.sourceforge.net>
parents: 2614
diff changeset
260 hasattr(client.instance.interfaces, 'TemplatingUtils')):
2390
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
261 class utils(client.instance.interfaces.TemplatingUtils, utils):
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
262 pass
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
263
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
264 # if template, classname and/or request are not passed explicitely,
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
265 # compute form client
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
266 if template is None:
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
267 template = client.template
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
268 if classname is None:
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
269 classname = client.classname
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
270 if request is None:
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
271 request = HTMLRequest(client)
1270
c3424abf7f77 added ability to implement new templating utility methods
Richard Jones <richard@users.sourceforge.net>
parents: 1263
diff changeset
272
2390
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
273 c = {
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
274 'context': None,
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
275 'options': {},
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
276 'nothing': None,
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
277 'request': request,
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
278 'db': HTMLDatabase(client),
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
279 'config': client.instance.config,
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
280 'tracker': client.instance,
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
281 'utils': utils(client),
2854
6acc315570eb Templates.precompileTemplates: skip files without ".html" extension
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2827
diff changeset
282 'templates': client.instance.templates,
2390
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
283 'template': template,
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
284 'true': 1,
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
285 'false': 0,
2538
09b0fc5b1716 make client.translator available to templates as 'i18n'
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2524
diff changeset
286 'i18n': client.translator
2390
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
287 }
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
288 # add in the item if there is one
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
289 if client.nodeid:
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
290 c['context'] = HTMLItem(client, classname, client.nodeid,
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
291 anonymous=1)
2390
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
292 elif client.db.classes.has_key(classname):
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
293 c['context'] = HTMLClass(client, classname, anonymous=1)
2390
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
294 return c
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
295
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
296 class RoundupPageTemplate(PageTemplate.PageTemplate):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
297 """A Roundup-specific PageTemplate.
2390
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
298
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
299 Interrogate the client to set up Roundup-specific template variables
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
300 to be available. See 'context' function for the list of variables.
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
301
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
302 """
2390
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
303
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
304 # 06-jun-2004 [als] i am not sure if this method is used yet
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
305 def getContext(self, client, classname, request):
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
306 return context(client, self, classname, request)
1016
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
307
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
308 def render(self, client, classname, request, **options):
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
309 """Render this Page Template"""
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
310
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
311 if not self._v_cooked:
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
312 self._cook()
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
313
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
314 __traceback_supplement__ = (PageTemplate.PageTemplateTracebackSupplement, self)
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
315
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
316 if self._v_errors:
1078
344bad728d10 more tweakage of help display and style issues
Richard Jones <richard@users.sourceforge.net>
parents: 1074
diff changeset
317 raise PageTemplate.PTRuntimeError, \
1151
7e0024954954 making it easier to add new actions, and more docco
Richard Jones <richard@users.sourceforge.net>
parents: 1144
diff changeset
318 'Page Template %s has errors.'%self.id
1016
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
319
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
320 # figure the context
2390
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
321 c = context(client, self, classname, request)
1016
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
322 c.update({'options': options})
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
323
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
324 # and go
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
325 output = StringIO.StringIO()
2377
a53f87f2488a StaticTranslationService moved here out of the code originating from Zope;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2347
diff changeset
326 TALInterpreter.TALInterpreter(self._v_program, self.macros,
1016
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
327 getEngine().getContext(c), output, tal=1, strictinsert=0)()
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
328 return output.getvalue()
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
329
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
330 def __repr__(self):
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
331 return '<Roundup PageTemplate %r>'%self.id
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
332
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
333 class HTMLDatabase:
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
334 """ Return HTMLClasses for valid class fetches
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
335 """
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
336 def __init__(self, client):
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
337 self._client = client
3164
24476db8872f nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents: 3159
diff changeset
338 self._ = client._
1513
455f79a2981f add access to real db through HTML db
Richard Jones <richard@users.sourceforge.net>
parents: 1510
diff changeset
339 self._db = client.db
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
340
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
341 # we want config to be exposed
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
342 self.config = client.db.config
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
343
4055
de832c486f86 Fix designator regular expression in HTMLDatabase.__getitem__.
Stefan Seefeld <stefan@seefeld.name>
parents: 4054
diff changeset
344 def __getitem__(self, item, desre=re.compile(r'(?P<cl>[a-zA-Z_]+)(?P<id>[-\d]+)')):
1447
6118d4498db3 added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents: 1441
diff changeset
345 # check to see if we're actually accessing an item
6118d4498db3 added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents: 1441
diff changeset
346 m = desre.match(item)
6118d4498db3 added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents: 1441
diff changeset
347 if m:
2157
e976fa0640b3 db/userN wasn't returning HTMLUser
Richard Jones <richard@users.sourceforge.net>
parents: 2154
diff changeset
348 cl = m.group('cl')
e976fa0640b3 db/userN wasn't returning HTMLUser
Richard Jones <richard@users.sourceforge.net>
parents: 2154
diff changeset
349 self._client.db.getclass(cl)
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
350 return HTMLItem(self._client, cl, m.group('id'))
1447
6118d4498db3 added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents: 1441
diff changeset
351 else:
6118d4498db3 added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents: 1441
diff changeset
352 self._client.db.getclass(item)
6118d4498db3 added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents: 1441
diff changeset
353 return HTMLClass(self._client, item)
1134
16874c9b86ad generic item editing
Richard Jones <richard@users.sourceforge.net>
parents: 1133
diff changeset
354
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
355 def __getattr__(self, attr):
1030
f5216dbced55 translate bad class lookup error meaningfully
Richard Jones <richard@users.sourceforge.net>
parents: 1028
diff changeset
356 try:
1134
16874c9b86ad generic item editing
Richard Jones <richard@users.sourceforge.net>
parents: 1133
diff changeset
357 return self[attr]
1030
f5216dbced55 translate bad class lookup error meaningfully
Richard Jones <richard@users.sourceforge.net>
parents: 1028
diff changeset
358 except KeyError:
f5216dbced55 translate bad class lookup error meaningfully
Richard Jones <richard@users.sourceforge.net>
parents: 1028
diff changeset
359 raise AttributeError, attr
1134
16874c9b86ad generic item editing
Richard Jones <richard@users.sourceforge.net>
parents: 1133
diff changeset
360
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
361 def classes(self):
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
362 l = self._client.db.classes.keys()
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
363 l.sort()
2118
917826e3fb54 In the classes method of HTMLDatabase, the variable 'm' was undefined.
Brian Kelley <wc2so1@users.sourceforge.net>
parents: 2116
diff changeset
364 m = []
2031
bcb21e5722b8 fix permission handling around rego
Richard Jones <richard@users.sourceforge.net>
parents: 2025
diff changeset
365 for item in l:
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
366 m.append(HTMLClass(self._client, item))
2118
917826e3fb54 In the classes method of HTMLDatabase, the variable 'm' was undefined.
Brian Kelley <wc2so1@users.sourceforge.net>
parents: 2116
diff changeset
367 return m
1104
d759c3cb1f06 Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
368
3860
c672b15ddae6 - fix id-lookup in case we already *know* that the value is an id (in
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3857
diff changeset
369 num_re = re.compile('^-?\d+$')
c672b15ddae6 - fix id-lookup in case we already *know* that the value is an id (in
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3857
diff changeset
370
c672b15ddae6 - fix id-lookup in case we already *know* that the value is an id (in
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3857
diff changeset
371 def lookupIds(db, prop, ids, fail_ok=0, num_re=num_re, do_lookup=True):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
372 """ "fail_ok" should be specified if we wish to pass through bad values
2049
5a5f66e6b0e1 forward-port of fix from maint-0-6
Richard Jones <richard@users.sourceforge.net>
parents: 2037
diff changeset
373 (most likely form values that we wish to represent back to the user)
3860
c672b15ddae6 - fix id-lookup in case we already *know* that the value is an id (in
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3857
diff changeset
374 "do_lookup" is there for preventing lookup by key-value (if we
c672b15ddae6 - fix id-lookup in case we already *know* that the value is an id (in
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3857
diff changeset
375 know that the value passed *is* an id)
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
376 """
1104
d759c3cb1f06 Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
377 cl = db.getclass(prop.classname)
d759c3cb1f06 Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
378 l = []
d759c3cb1f06 Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
379 for entry in ids:
3861
d4ac8954ce5c Update on recent fix, better version suggested by alexander smishlajev
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3860
diff changeset
380 if do_lookup:
d4ac8954ce5c Update on recent fix, better version suggested by alexander smishlajev
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3860
diff changeset
381 try:
d4ac8954ce5c Update on recent fix, better version suggested by alexander smishlajev
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3860
diff changeset
382 item = cl.lookup(entry)
d4ac8954ce5c Update on recent fix, better version suggested by alexander smishlajev
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3860
diff changeset
383 except (TypeError, KeyError):
d4ac8954ce5c Update on recent fix, better version suggested by alexander smishlajev
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3860
diff changeset
384 pass
d4ac8954ce5c Update on recent fix, better version suggested by alexander smishlajev
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3860
diff changeset
385 else:
d4ac8954ce5c Update on recent fix, better version suggested by alexander smishlajev
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3860
diff changeset
386 l.append(item)
3860
c672b15ddae6 - fix id-lookup in case we already *know* that the value is an id (in
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3857
diff changeset
387 continue
c672b15ddae6 - fix id-lookup in case we already *know* that the value is an id (in
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3857
diff changeset
388 # if fail_ok, ignore lookup error
c672b15ddae6 - fix id-lookup in case we already *know* that the value is an id (in
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3857
diff changeset
389 # otherwise entry must be existing object id rather than key value
c672b15ddae6 - fix id-lookup in case we already *know* that the value is an id (in
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3857
diff changeset
390 if fail_ok or num_re.match(entry):
c672b15ddae6 - fix id-lookup in case we already *know* that the value is an id (in
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3857
diff changeset
391 l.append(entry)
1104
d759c3cb1f06 Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
392 return l
d759c3cb1f06 Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
393
3860
c672b15ddae6 - fix id-lookup in case we already *know* that the value is an id (in
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3857
diff changeset
394 def lookupKeys(linkcl, key, ids, num_re=num_re):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
395 """ Look up the "key" values for "ids" list - though some may already
2083
a94eacad51c8 handle bad multilink input at item creation time better [SF#917834]
Richard Jones <richard@users.sourceforge.net>
parents: 2056
diff changeset
396 be key values, not ids.
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
397 """
2083
a94eacad51c8 handle bad multilink input at item creation time better [SF#917834]
Richard Jones <richard@users.sourceforge.net>
parents: 2056
diff changeset
398 l = []
a94eacad51c8 handle bad multilink input at item creation time better [SF#917834]
Richard Jones <richard@users.sourceforge.net>
parents: 2056
diff changeset
399 for entry in ids:
a94eacad51c8 handle bad multilink input at item creation time better [SF#917834]
Richard Jones <richard@users.sourceforge.net>
parents: 2056
diff changeset
400 if num_re.match(entry):
3401
62e4032cb280 merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3394
diff changeset
401 label = linkcl.get(entry, key)
62e4032cb280 merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3394
diff changeset
402 # fall back to designator if label is None
62e4032cb280 merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3394
diff changeset
403 if label is None: label = '%s%s'%(linkcl.classname, entry)
62e4032cb280 merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3394
diff changeset
404 l.append(label)
2083
a94eacad51c8 handle bad multilink input at item creation time better [SF#917834]
Richard Jones <richard@users.sourceforge.net>
parents: 2056
diff changeset
405 else:
a94eacad51c8 handle bad multilink input at item creation time better [SF#917834]
Richard Jones <richard@users.sourceforge.net>
parents: 2056
diff changeset
406 l.append(entry)
a94eacad51c8 handle bad multilink input at item creation time better [SF#917834]
Richard Jones <richard@users.sourceforge.net>
parents: 2056
diff changeset
407 return l
a94eacad51c8 handle bad multilink input at item creation time better [SF#917834]
Richard Jones <richard@users.sourceforge.net>
parents: 2056
diff changeset
408
3710
2862cb0d9be4 default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents: 3702
diff changeset
409 def _set_input_default_args(dic):
2862cb0d9be4 default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents: 3702
diff changeset
410 # 'text' is the default value anyway --
2862cb0d9be4 default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents: 3702
diff changeset
411 # but for CSS usage it should be present
2862cb0d9be4 default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents: 3702
diff changeset
412 dic.setdefault('type', 'text')
2862cb0d9be4 default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents: 3702
diff changeset
413 # useful e.g for HTML LABELs:
2862cb0d9be4 default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents: 3702
diff changeset
414 if not dic.has_key('id'):
2862cb0d9be4 default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents: 3702
diff changeset
415 try:
2862cb0d9be4 default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents: 3702
diff changeset
416 if dic['text'] in ('radio', 'checkbox'):
2862cb0d9be4 default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents: 3702
diff changeset
417 dic['id'] = '%(name)s-%(value)s' % dic
2862cb0d9be4 default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents: 3702
diff changeset
418 else:
2862cb0d9be4 default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents: 3702
diff changeset
419 dic['id'] = dic['name']
2862cb0d9be4 default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents: 3702
diff changeset
420 except KeyError:
2862cb0d9be4 default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents: 3702
diff changeset
421 pass
2862cb0d9be4 default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents: 3702
diff changeset
422
1956
1e2cccf6b53b give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents: 1952
diff changeset
423 def input_html4(**attrs):
1e2cccf6b53b give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents: 1952
diff changeset
424 """Generate an 'input' (html4) element with given attributes"""
3909
e89bcb28f683 indexargs_url force ids to int
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3905
diff changeset
425 _set_input_default_args(attrs)
3782
51c07c04d258 clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents: 3779
diff changeset
426 return '<input %s>'%' '.join(['%s="%s"'%(k,cgi.escape(str(v), True))
51c07c04d258 clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents: 3779
diff changeset
427 for k,v in attrs.items()])
1956
1e2cccf6b53b give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents: 1952
diff changeset
428
1e2cccf6b53b give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents: 1952
diff changeset
429 def input_xhtml(**attrs):
1e2cccf6b53b give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents: 1952
diff changeset
430 """Generate an 'input' (xhtml) element with given attributes"""
3710
2862cb0d9be4 default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents: 3702
diff changeset
431 _set_input_default_args(attrs)
3782
51c07c04d258 clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents: 3779
diff changeset
432 return '<input %s/>'%' '.join(['%s="%s"'%(k,cgi.escape(str(v), True))
51c07c04d258 clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents: 3779
diff changeset
433 for k,v in attrs.items()])
1956
1e2cccf6b53b give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents: 1952
diff changeset
434
1e2cccf6b53b give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents: 1952
diff changeset
435 class HTMLInputMixin:
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
436 """ requires a _client property """
1956
1e2cccf6b53b give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents: 1952
diff changeset
437 def __init__(self):
1e2cccf6b53b give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents: 1952
diff changeset
438 html_version = 'html4'
1e2cccf6b53b give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents: 1952
diff changeset
439 if hasattr(self._client.instance.config, 'HTML_VERSION'):
1e2cccf6b53b give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents: 1952
diff changeset
440 html_version = self._client.instance.config.HTML_VERSION
1e2cccf6b53b give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents: 1952
diff changeset
441 if html_version == 'xhtml':
1e2cccf6b53b give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents: 1952
diff changeset
442 self.input = input_xhtml
1e2cccf6b53b give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents: 1952
diff changeset
443 else:
1e2cccf6b53b give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents: 1952
diff changeset
444 self.input = input_html4
2396
39cdddd313ca HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2390
diff changeset
445 # self._context is used for translations.
39cdddd313ca HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2390
diff changeset
446 # will be initialized by the first call to .gettext()
39cdddd313ca HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2390
diff changeset
447 self._context = None
39cdddd313ca HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2390
diff changeset
448
39cdddd313ca HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2390
diff changeset
449 def gettext(self, msgid):
39cdddd313ca HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2390
diff changeset
450 """Return the localized translation of msgid"""
39cdddd313ca HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2390
diff changeset
451 if self._context is None:
39cdddd313ca HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2390
diff changeset
452 self._context = context(self._client)
2561
0dd3dca6bd01 always use translation service set in the tracker client instance;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2558
diff changeset
453 return self._client.translator.translate(domain="roundup",
2396
39cdddd313ca HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2390
diff changeset
454 msgid=msgid, context=self._context)
39cdddd313ca HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2390
diff changeset
455
39cdddd313ca HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2390
diff changeset
456 _ = gettext
1956
1e2cccf6b53b give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents: 1952
diff changeset
457
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
458 class HTMLPermissions:
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
459
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
460 def view_check(self):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
461 """ Raise the Unauthorised exception if the user's not permitted to
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
462 view this class.
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
463 """
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
464 if not self.is_view_ok():
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
465 raise Unauthorised("view", self._classname,
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
466 translator=self._client.translator)
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
467
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
468 def edit_check(self):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
469 """ Raise the Unauthorised exception if the user's not permitted to
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
470 edit items of this class.
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
471 """
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
472 if not self.is_edit_ok():
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
473 raise Unauthorised("edit", self._classname,
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
474 translator=self._client.translator)
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
475
4088
34434785f308 Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents: 4058
diff changeset
476 def retire_check(self):
34434785f308 Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents: 4058
diff changeset
477 """ Raise the Unauthorised exception if the user's not permitted to
34434785f308 Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents: 4058
diff changeset
478 retire items of this class.
34434785f308 Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents: 4058
diff changeset
479 """
34434785f308 Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents: 4058
diff changeset
480 if not self.is_retire_ok():
34434785f308 Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents: 4058
diff changeset
481 raise Unauthorised("retire", self._classname,
34434785f308 Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents: 4058
diff changeset
482 translator=self._client.translator)
34434785f308 Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents: 4058
diff changeset
483
2983
9614a101b68f Stuff from the train ride this morning:
Richard Jones <richard@users.sourceforge.net>
parents: 2962
diff changeset
484
1956
1e2cccf6b53b give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents: 1952
diff changeset
485 class HTMLClass(HTMLInputMixin, HTMLPermissions):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
486 """ Accesses through a class (either through *class* or *db.<classname>*)
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
487 """
1447
6118d4498db3 added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents: 1441
diff changeset
488 def __init__(self, client, classname, anonymous=0):
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
489 self._client = client
3164
24476db8872f nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents: 3159
diff changeset
490 self._ = client._
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
491 self._db = client.db
1447
6118d4498db3 added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents: 1441
diff changeset
492 self._anonymous = anonymous
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
493
1136
7e193bbda38e added generic item editing
Richard Jones <richard@users.sourceforge.net>
parents: 1134
diff changeset
494 # we want classname to be exposed, but _classname gives a
7e193bbda38e added generic item editing
Richard Jones <richard@users.sourceforge.net>
parents: 1134
diff changeset
495 # consistent API for extending Class/Item
7e193bbda38e added generic item editing
Richard Jones <richard@users.sourceforge.net>
parents: 1134
diff changeset
496 self._classname = self.classname = classname
1204
b862bbf2067a Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents: 1202
diff changeset
497 self._klass = self._db.getclass(self.classname)
b862bbf2067a Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents: 1202
diff changeset
498 self._props = self._klass.getprops()
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
499
1956
1e2cccf6b53b give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents: 1952
diff changeset
500 HTMLInputMixin.__init__(self)
1952
c40ed9113285 Applied Stefan Seefeld's html4/xhtml patch with some changes.
Richard Jones <richard@users.sourceforge.net>
parents: 1932
diff changeset
501
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
502 def is_edit_ok(self):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
503 """ Is the user allowed to Create the current class?
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
504 """
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
505 return self._db.security.hasPermission('Create', self._client.userid,
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
506 self._classname)
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
507
4088
34434785f308 Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents: 4058
diff changeset
508 def is_retire_ok(self):
34434785f308 Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents: 4058
diff changeset
509 """ Is the user allowed to retire items of the current class?
34434785f308 Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents: 4058
diff changeset
510 """
34434785f308 Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents: 4058
diff changeset
511 return self._db.security.hasPermission('Retire', self._client.userid,
34434785f308 Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents: 4058
diff changeset
512 self._classname)
34434785f308 Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents: 4058
diff changeset
513
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
514 def is_view_ok(self):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
515 """ Is the user allowed to View the current class?
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
516 """
2827
43e3a7ac1190 fix HTMLClass.is_view_ok: permission to create new items
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2761
diff changeset
517 return self._db.security.hasPermission('View', self._client.userid,
43e3a7ac1190 fix HTMLClass.is_view_ok: permission to create new items
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2761
diff changeset
518 self._classname)
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
519
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
520 def is_only_view_ok(self):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
521 """ Is the user only allowed to View (ie. not Create) the current class?
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
522 """
2651
17bab083c8a0 Couple of fixes - make the interface just be is_edit_ok...
Richard Jones <richard@users.sourceforge.net>
parents: 2649
diff changeset
523 return self.is_view_ok() and not self.is_edit_ok()
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
524
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
525 def __repr__(self):
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
526 return '<HTMLClass(0x%x) %s>'%(id(self), self.classname)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
527
1002
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
528 def __getitem__(self, item):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
529 """ return an HTMLProperty instance
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
530 """
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
531
1073
cf30c6cdca02 More documentation.
Richard Jones <richard@users.sourceforge.net>
parents: 1068
diff changeset
532 # we don't exist
cf30c6cdca02 More documentation.
Richard Jones <richard@users.sourceforge.net>
parents: 1068
diff changeset
533 if item == 'id':
cf30c6cdca02 More documentation.
Richard Jones <richard@users.sourceforge.net>
parents: 1068
diff changeset
534 return None
cf30c6cdca02 More documentation.
Richard Jones <richard@users.sourceforge.net>
parents: 1068
diff changeset
535
cf30c6cdca02 More documentation.
Richard Jones <richard@users.sourceforge.net>
parents: 1068
diff changeset
536 # get the property
2056
ba1d54edc53f nicer invalid property error in HTML templating
Richard Jones <richard@users.sourceforge.net>
parents: 2049
diff changeset
537 try:
ba1d54edc53f nicer invalid property error in HTML templating
Richard Jones <richard@users.sourceforge.net>
parents: 2049
diff changeset
538 prop = self._props[item]
ba1d54edc53f nicer invalid property error in HTML templating
Richard Jones <richard@users.sourceforge.net>
parents: 2049
diff changeset
539 except KeyError:
ba1d54edc53f nicer invalid property error in HTML templating
Richard Jones <richard@users.sourceforge.net>
parents: 2049
diff changeset
540 raise KeyError, 'No such property "%s" on %s'%(item, self.classname)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
541
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
542 # look up the correct HTMLProperty class
1104
d759c3cb1f06 Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
543 form = self._client.form
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
544 for klass, htmlklass in propclasses:
1104
d759c3cb1f06 Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
545 if not isinstance(prop, klass):
d759c3cb1f06 Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
546 continue
4056
a82b17500b22 Fix issue2550512
Stefan Seefeld <stefan@seefeld.name>
parents: 4055
diff changeset
547 if isinstance(prop, hyperdb.Multilink):
a82b17500b22 Fix issue2550512
Stefan Seefeld <stefan@seefeld.name>
parents: 4055
diff changeset
548 value = []
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
549 else:
4056
a82b17500b22 Fix issue2550512
Stefan Seefeld <stefan@seefeld.name>
parents: 4055
diff changeset
550 value = None
3779
ee73abcc95d2 Sorry, another mega-patch:
Richard Jones <richard@users.sourceforge.net>
parents: 3770
diff changeset
551 return htmlklass(self._client, self._classname, None, prop, item,
1447
6118d4498db3 added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents: 1441
diff changeset
552 value, self._anonymous)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
553
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
554 # no good
1002
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
555 raise KeyError, item
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
556
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
557 def __getattr__(self, attr):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
558 """ convenience access """
1002
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
559 try:
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
560 return self[attr]
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
561 except KeyError:
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
562 raise AttributeError, attr
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
563
1743
f166cd4fd392 add action attribute to issue.item form action tag
Richard Jones <richard@users.sourceforge.net>
parents: 1739
diff changeset
564 def designator(self):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
565 """ Return this class' designator (classname) """
1743
f166cd4fd392 add action attribute to issue.item form action tag
Richard Jones <richard@users.sourceforge.net>
parents: 1739
diff changeset
566 return self._classname
f166cd4fd392 add action attribute to issue.item form action tag
Richard Jones <richard@users.sourceforge.net>
parents: 1739
diff changeset
567
3860
c672b15ddae6 - fix id-lookup in case we already *know* that the value is an id (in
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3857
diff changeset
568 def getItem(self, itemid, num_re=num_re):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
569 """ Get an item of this class by its item id.
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
570 """
1200
0a7bd082b94a usability improvements in API
Richard Jones <richard@users.sourceforge.net>
parents: 1183
diff changeset
571 # make sure we're looking at an itemid
2010
1b11ffd8015e forward-porting of fixed edit action / parsePropsFromForm...
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
572 if not isinstance(itemid, type(1)) and not num_re.match(itemid):
1200
0a7bd082b94a usability improvements in API
Richard Jones <richard@users.sourceforge.net>
parents: 1183
diff changeset
573 itemid = self._klass.lookup(itemid)
0a7bd082b94a usability improvements in API
Richard Jones <richard@users.sourceforge.net>
parents: 1183
diff changeset
574
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
575 return HTMLItem(self._client, self.classname, itemid)
1200
0a7bd082b94a usability improvements in API
Richard Jones <richard@users.sourceforge.net>
parents: 1183
diff changeset
576
1633
ac5f7e5a11e5 sort HTMLClass.properties results by name (feature [SF#724738])
Richard Jones <richard@users.sourceforge.net>
parents: 1631
diff changeset
577 def properties(self, sort=1):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
578 """ Return HTMLProperty for all of this class' properties.
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
579 """
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
580 l = []
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
581 for name, prop in self._props.items():
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
582 for klass, htmlklass in propclasses:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
583 if isinstance(prop, hyperdb.Multilink):
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
584 value = []
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
585 else:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
586 value = None
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
587 if isinstance(prop, klass):
1450
7a9db3f9022a ... and a classname
Richard Jones <richard@users.sourceforge.net>
parents: 1449
diff changeset
588 l.append(htmlklass(self._client, self._classname, '',
7a9db3f9022a ... and a classname
Richard Jones <richard@users.sourceforge.net>
parents: 1449
diff changeset
589 prop, name, value, self._anonymous))
1633
ac5f7e5a11e5 sort HTMLClass.properties results by name (feature [SF#724738])
Richard Jones <richard@users.sourceforge.net>
parents: 1631
diff changeset
590 if sort:
ac5f7e5a11e5 sort HTMLClass.properties results by name (feature [SF#724738])
Richard Jones <richard@users.sourceforge.net>
parents: 1631
diff changeset
591 l.sort(lambda a,b:cmp(a._name, b._name))
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
592 return l
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
593
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
594 def list(self, sort_on=None):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
595 """ List all items in this class.
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
596 """
1155
5cf0a6b6e787 *cough* sort list results *cough*
Richard Jones <richard@users.sourceforge.net>
parents: 1151
diff changeset
597 # get the list and sort it nicely
5cf0a6b6e787 *cough* sort list results *cough*
Richard Jones <richard@users.sourceforge.net>
parents: 1151
diff changeset
598 l = self._klass.list()
3126
a2889d22db4a the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents: 3117
diff changeset
599 sortfunc = make_sort_function(self._db, self._classname, sort_on)
1155
5cf0a6b6e787 *cough* sort list results *cough*
Richard Jones <richard@users.sourceforge.net>
parents: 1151
diff changeset
600 l.sort(sortfunc)
5cf0a6b6e787 *cough* sort list results *cough*
Richard Jones <richard@users.sourceforge.net>
parents: 1151
diff changeset
601
3126
a2889d22db4a the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents: 3117
diff changeset
602 # check perms
a2889d22db4a the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents: 3117
diff changeset
603 check = self._client.db.security.hasPermission
a2889d22db4a the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents: 3117
diff changeset
604 userid = self._client.userid
a2889d22db4a the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents: 3117
diff changeset
605
a2889d22db4a the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents: 3117
diff changeset
606 l = [HTMLItem(self._client, self._classname, id) for id in l
a2889d22db4a the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents: 3117
diff changeset
607 if check('View', userid, self._classname, itemid=id)]
a2889d22db4a the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents: 3117
diff changeset
608
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
609 return l
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
610
1041
c28603c9f831 Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents: 1030
diff changeset
611 def csv(self):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
612 """ Return the items of this class as a chunk of CSV text.
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
613 """
1041
c28603c9f831 Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents: 1030
diff changeset
614 props = self.propnames()
c28603c9f831 Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents: 1030
diff changeset
615 s = StringIO.StringIO()
3179
88dbe6b3d891 merge removal of rcsv
Richard Jones <richard@users.sourceforge.net>
parents: 3169
diff changeset
616 writer = csv.writer(s)
1767
fdaa0b751355 python2.3 CSV support, also missing thankyou in index.txt :)
Richard Jones <richard@users.sourceforge.net>
parents: 1743
diff changeset
617 writer.writerow(props)
4090
6f698aef2ad4 fix missed hole in the CSV editing - could still view items in the generic index editor
Richard Jones <richard@users.sourceforge.net>
parents: 4088
diff changeset
618 check = self._client.db.security.hasPermission
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
619 for nodeid in self._klass.list():
1041
c28603c9f831 Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents: 1030
diff changeset
620 l = []
c28603c9f831 Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents: 1030
diff changeset
621 for name in props:
4090
6f698aef2ad4 fix missed hole in the CSV editing - could still view items in the generic index editor
Richard Jones <richard@users.sourceforge.net>
parents: 4088
diff changeset
622 # check permission to view this property on this item
6f698aef2ad4 fix missed hole in the CSV editing - could still view items in the generic index editor
Richard Jones <richard@users.sourceforge.net>
parents: 4088
diff changeset
623 if not check('View', self._client.userid, itemid=nodeid,
6f698aef2ad4 fix missed hole in the CSV editing - could still view items in the generic index editor
Richard Jones <richard@users.sourceforge.net>
parents: 4088
diff changeset
624 classname=self._klass.classname, property=name):
6f698aef2ad4 fix missed hole in the CSV editing - could still view items in the generic index editor
Richard Jones <richard@users.sourceforge.net>
parents: 4088
diff changeset
625 raise Unauthorised('view', self._klass.classname,
6f698aef2ad4 fix missed hole in the CSV editing - could still view items in the generic index editor
Richard Jones <richard@users.sourceforge.net>
parents: 4088
diff changeset
626 translator=self._client.translator)
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
627 value = self._klass.get(nodeid, name)
1041
c28603c9f831 Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents: 1030
diff changeset
628 if value is None:
c28603c9f831 Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents: 1030
diff changeset
629 l.append('')
c28603c9f831 Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents: 1030
diff changeset
630 elif isinstance(value, type([])):
c28603c9f831 Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents: 1030
diff changeset
631 l.append(':'.join(map(str, value)))
c28603c9f831 Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents: 1030
diff changeset
632 else:
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
633 l.append(str(self._klass.get(nodeid, name)))
1767
fdaa0b751355 python2.3 CSV support, also missing thankyou in index.txt :)
Richard Jones <richard@users.sourceforge.net>
parents: 1743
diff changeset
634 writer.writerow(l)
1041
c28603c9f831 Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents: 1030
diff changeset
635 return s.getvalue()
c28603c9f831 Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents: 1030
diff changeset
636
c28603c9f831 Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents: 1030
diff changeset
637 def propnames(self):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
638 """ Return the list of the names of the properties of this class.
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
639 """
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
640 idlessprops = self._klass.getprops(protected=0).keys()
1041
c28603c9f831 Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents: 1030
diff changeset
641 idlessprops.sort()
c28603c9f831 Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents: 1030
diff changeset
642 return ['id'] + idlessprops
c28603c9f831 Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents: 1030
diff changeset
643
3696
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
644 def filter(self, request=None, filterspec={}, sort=[], group=[]):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
645 """ Return a list of items from this class, filtered and sorted
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
646 by the current requested filterspec/filter/sort/group args
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
647
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
648 "request" takes precedence over the other three arguments.
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
649 """
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
650 if request is not None:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
651 filterspec = request.filterspec
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
652 sort = request.sort
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
653 group = request.group
3126
a2889d22db4a the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents: 3117
diff changeset
654
a2889d22db4a the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents: 3117
diff changeset
655 check = self._db.security.hasPermission
a2889d22db4a the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents: 3117
diff changeset
656 userid = self._client.userid
a2889d22db4a the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents: 3117
diff changeset
657
3198
0b7990f54778 fixed broken csv import in roundup.admin module
Richard Jones <richard@users.sourceforge.net>
parents: 3194
diff changeset
658 l = [HTMLItem(self._client, self.classname, id)
3126
a2889d22db4a the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents: 3117
diff changeset
659 for id in self._klass.filter(None, filterspec, sort, group)
a2889d22db4a the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents: 3117
diff changeset
660 if check('View', userid, self.classname, itemid=id)]
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
661 return l
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
662
2458
c18a7d4259e3 translate labels hardcoded in HTMLClass and HTMLItem
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2411
diff changeset
663 def classhelp(self, properties=None, label=''"(list)", width='500',
3363
7bc1e9c42a26 allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents: 3361
diff changeset
664 height='400', property='', form='itemSynopsis',
3472
522b11d5ba8d classhelp works with Link properties now [SF#1410290]
Richard Jones <richard@users.sourceforge.net>
parents: 3470
diff changeset
665 pagesize=50, inputtype="checkbox", sort=None, filter=None):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
666 """Pop up a javascript window with class help
2761
10a49678ebf2 allow listing popup to be used in query forms (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 2673
diff changeset
667
10a49678ebf2 allow listing popup to be used in query forms (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 2673
diff changeset
668 This generates a link to a popup window which displays the
10a49678ebf2 allow listing popup to be used in query forms (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 2673
diff changeset
669 properties indicated by "properties" of the class named by
10a49678ebf2 allow listing popup to be used in query forms (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 2673
diff changeset
670 "classname". The "properties" should be a comma-separated list
10a49678ebf2 allow listing popup to be used in query forms (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 2673
diff changeset
671 (eg. 'id,name,description'). Properties defaults to all the
10a49678ebf2 allow listing popup to be used in query forms (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 2673
diff changeset
672 properties of a class (excluding id, creator, created and
10a49678ebf2 allow listing popup to be used in query forms (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 2673
diff changeset
673 activity).
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
674
3363
7bc1e9c42a26 allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents: 3361
diff changeset
675 You may optionally override the label displayed, the width,
7bc1e9c42a26 allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents: 3361
diff changeset
676 the height, the number of items per page and the field on which
7bc1e9c42a26 allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents: 3361
diff changeset
677 the list is sorted (defaults to username if in the displayed
7bc1e9c42a26 allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents: 3361
diff changeset
678 properties).
7bc1e9c42a26 allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents: 3361
diff changeset
679
7bc1e9c42a26 allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents: 3361
diff changeset
680 With the "filter" arg it is possible to specify a filter for
7bc1e9c42a26 allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents: 3361
diff changeset
681 which items are supposed to be displayed. It has to be of
7bc1e9c42a26 allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents: 3361
diff changeset
682 the format "<field>=<values>;<field>=<values>;...".
7bc1e9c42a26 allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents: 3361
diff changeset
683
7bc1e9c42a26 allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents: 3361
diff changeset
684 The popup window will be resizable and scrollable.
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
685
2761
10a49678ebf2 allow listing popup to be used in query forms (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 2673
diff changeset
686 If the "property" arg is given, it's passed through to the
10a49678ebf2 allow listing popup to be used in query forms (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 2673
diff changeset
687 javascript help_window function.
3509
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
688
3472
522b11d5ba8d classhelp works with Link properties now [SF#1410290]
Richard Jones <richard@users.sourceforge.net>
parents: 3470
diff changeset
689 You can use inputtype="radio" to display a radio box instead
522b11d5ba8d classhelp works with Link properties now [SF#1410290]
Richard Jones <richard@users.sourceforge.net>
parents: 3470
diff changeset
690 of the default checkbox (useful for entering Link-properties)
1551
9b9917b7719b added an additional argument to help_window to allow comms back to form
Richard Jones <richard@users.sourceforge.net>
parents: 1543
diff changeset
691
2827
43e3a7ac1190 fix HTMLClass.is_view_ok: permission to create new items
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2761
diff changeset
692 If the "form" arg is given, it's passed through to the
2761
10a49678ebf2 allow listing popup to be used in query forms (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 2673
diff changeset
693 javascript help_window function. - it's the name of the form
10a49678ebf2 allow listing popup to be used in query forms (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 2673
diff changeset
694 the "property" belongs to.
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
695 """
1113
a95428868bf4 Added the missing keyword/topic interface to classic template (blush)
Richard Jones <richard@users.sourceforge.net>
parents: 1104
diff changeset
696 if properties is None:
a95428868bf4 Added the missing keyword/topic interface to classic template (blush)
Richard Jones <richard@users.sourceforge.net>
parents: 1104
diff changeset
697 properties = self._klass.getprops(protected=0).keys()
a95428868bf4 Added the missing keyword/topic interface to classic template (blush)
Richard Jones <richard@users.sourceforge.net>
parents: 1104
diff changeset
698 properties.sort()
a95428868bf4 Added the missing keyword/topic interface to classic template (blush)
Richard Jones <richard@users.sourceforge.net>
parents: 1104
diff changeset
699 properties = ','.join(properties)
3363
7bc1e9c42a26 allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents: 3361
diff changeset
700 if sort is None:
7bc1e9c42a26 allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents: 3361
diff changeset
701 if 'username' in properties.split( ',' ):
3610
1dbaa664be28 sorting of entries in classhelp popup [SF#1449000]
Richard Jones <richard@users.sourceforge.net>
parents: 3594
diff changeset
702 sort = 'username'
3363
7bc1e9c42a26 allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents: 3361
diff changeset
703 else:
4032
a73bac81eda2 Fix issue2550500
Stefan Seefeld <stefan@seefeld.name>
parents: 4010
diff changeset
704 sort = self._klass.orderprop()
3610
1dbaa664be28 sorting of entries in classhelp popup [SF#1449000]
Richard Jones <richard@users.sourceforge.net>
parents: 3594
diff changeset
705 sort = '&amp;@sort=' + sort
1551
9b9917b7719b added an additional argument to help_window to allow comms back to form
Richard Jones <richard@users.sourceforge.net>
parents: 1543
diff changeset
706 if property:
1853
389c4d44c73c Replace '&' with '&amp;' in the URLs generated by classhelp(), to validate.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1824
diff changeset
707 property = '&amp;property=%s'%property
2761
10a49678ebf2 allow listing popup to be used in query forms (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 2673
diff changeset
708 if form:
10a49678ebf2 allow listing popup to be used in query forms (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 2673
diff changeset
709 form = '&amp;form=%s'%form
3472
522b11d5ba8d classhelp works with Link properties now [SF#1410290]
Richard Jones <richard@users.sourceforge.net>
parents: 3470
diff changeset
710 if inputtype:
522b11d5ba8d classhelp works with Link properties now [SF#1410290]
Richard Jones <richard@users.sourceforge.net>
parents: 3470
diff changeset
711 type= '&amp;type=%s'%inputtype
3363
7bc1e9c42a26 allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents: 3361
diff changeset
712 if filter:
7bc1e9c42a26 allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents: 3361
diff changeset
713 filterprops = filter.split(';')
7bc1e9c42a26 allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents: 3361
diff changeset
714 filtervalues = []
7bc1e9c42a26 allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents: 3361
diff changeset
715 names = []
7bc1e9c42a26 allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents: 3361
diff changeset
716 for x in filterprops:
7bc1e9c42a26 allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents: 3361
diff changeset
717 (name, values) = x.split('=')
7bc1e9c42a26 allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents: 3361
diff changeset
718 names.append(name)
7bc1e9c42a26 allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents: 3361
diff changeset
719 filtervalues.append('&amp;%s=%s' % (name, urllib.quote(values)))
7bc1e9c42a26 allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents: 3361
diff changeset
720 filter = '&amp;@filter=%s%s' % (','.join(names), ''.join(filtervalues))
7bc1e9c42a26 allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents: 3361
diff changeset
721 else:
7bc1e9c42a26 allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents: 3361
diff changeset
722 filter = ''
3169
d8d1ebd80930 fallback for (list) popups if javascript disabled (patch [SF#1101626])
Richard Jones <richard@users.sourceforge.net>
parents: 3164
diff changeset
723 help_url = "%s?@startwith=0&amp;@template=help&amp;"\
3472
522b11d5ba8d classhelp works with Link properties now [SF#1410290]
Richard Jones <richard@users.sourceforge.net>
parents: 3470
diff changeset
724 "properties=%s%s%s%s%s&amp;@pagesize=%s%s" % \
3582
026adc5f1e13 fix "Adding a new constrained field to the classic schema" example in docs
Richard Jones <richard@users.sourceforge.net>
parents: 3573
diff changeset
725 (self.classname, properties, property, form, type,
026adc5f1e13 fix "Adding a new constrained field to the classic schema" example in docs
Richard Jones <richard@users.sourceforge.net>
parents: 3573
diff changeset
726 sort, pagesize, filter)
3169
d8d1ebd80930 fallback for (list) popups if javascript disabled (patch [SF#1101626])
Richard Jones <richard@users.sourceforge.net>
parents: 3164
diff changeset
727 onclick = "javascript:help_window('%s', '%s', '%s');return false;" % \
d8d1ebd80930 fallback for (list) popups if javascript disabled (patch [SF#1101626])
Richard Jones <richard@users.sourceforge.net>
parents: 3164
diff changeset
728 (help_url, width, height)
d8d1ebd80930 fallback for (list) popups if javascript disabled (patch [SF#1101626])
Richard Jones <richard@users.sourceforge.net>
parents: 3164
diff changeset
729 return '<a class="classhelp" href="%s" onclick="%s">%s</a>' % \
d8d1ebd80930 fallback for (list) popups if javascript disabled (patch [SF#1101626])
Richard Jones <richard@users.sourceforge.net>
parents: 3164
diff changeset
730 (help_url, onclick, self._(label))
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
731
3857
54c10d188b8b allow customisation of the edit action for the submit button
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3856
diff changeset
732 def submit(self, label=''"Submit New Entry", action="new"):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
733 """ Generate a submit button (and action hidden element)
3040
14322134dcef fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents: 3006
diff changeset
734
14322134dcef fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents: 3006
diff changeset
735 Generate nothing if we're not editable.
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
736 """
3040
14322134dcef fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents: 3006
diff changeset
737 if not self.is_edit_ok():
14322134dcef fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents: 3006
diff changeset
738 return ''
14322134dcef fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents: 3006
diff changeset
739
3857
54c10d188b8b allow customisation of the edit action for the submit button
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3856
diff changeset
740 return self.input(type="hidden", name="@action", value=action) + \
2983
9614a101b68f Stuff from the train ride this morning:
Richard Jones <richard@users.sourceforge.net>
parents: 2962
diff changeset
741 '\n' + \
3770
567227803c75 Fix name of submit button.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3736
diff changeset
742 self.input(type="submit", name="submit_button", value=self._(label))
999
8d54c0f3198e Fixed history and its nihilism. Added convenience method for submit buttons
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
743
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
744 def history(self):
3117
460eb0209a9e Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents: 3104
diff changeset
745 if not self.is_view_ok():
3164
24476db8872f nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents: 3159
diff changeset
746 return self._('[hidden]')
2466
7b248ea0a2e5 add translation to Unauthorised exception; mark missed text for translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2458
diff changeset
747 return self._('New node - no history')
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
748
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
749 def renderWith(self, name, **kwargs):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
750 """ Render this class with the given template.
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
751 """
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
752 # create a new request and override the specified args
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
753 req = HTMLRequest(self._client)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
754 req.classname = self.classname
1016
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
755 req.update(kwargs)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
756
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
757 # new template, using the specified classname and request
2854
6acc315570eb Templates.precompileTemplates: skip files without ".html" extension
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2827
diff changeset
758 pt = self._client.instance.templates.get(self.classname, name)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
759
1097
98f3d41f41d9 query "editing" now working, minus filling the form in with the query params
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
760 # use our fabricated request
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
761 args = {
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
762 'ok_message': self._client.ok_message,
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
763 'error_message': self._client.error_message
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
764 }
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
765 return pt.render(self._client, self.classname, req, **args)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
766
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
767 class _HTMLItem(HTMLInputMixin, HTMLPermissions):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
768 """ Accesses through an *item*
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
769 """
1447
6118d4498db3 added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents: 1441
diff changeset
770 def __init__(self, client, classname, nodeid, anonymous=0):
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
771 self._client = client
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
772 self._db = client.db
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
773 self._classname = classname
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
774 self._nodeid = nodeid
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
775 self._klass = self._db.getclass(classname)
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
776 self._props = self._klass.getprops()
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
777
1447
6118d4498db3 added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents: 1441
diff changeset
778 # do we prefix the form items with the item's identification?
6118d4498db3 added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents: 1441
diff changeset
779 self._anonymous = anonymous
6118d4498db3 added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents: 1441
diff changeset
780
1956
1e2cccf6b53b give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents: 1952
diff changeset
781 HTMLInputMixin.__init__(self)
1e2cccf6b53b give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents: 1952
diff changeset
782
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
783 def is_edit_ok(self):
4088
34434785f308 Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents: 4058
diff changeset
784 """ Is the user allowed to Edit this item?
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
785 """
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
786 return self._db.security.hasPermission('Edit', self._client.userid,
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
787 self._classname, itemid=self._nodeid)
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
788
4088
34434785f308 Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents: 4058
diff changeset
789 def is_retire_ok(self):
34434785f308 Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents: 4058
diff changeset
790 """ Is the user allowed to Reture this item?
34434785f308 Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents: 4058
diff changeset
791 """
34434785f308 Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents: 4058
diff changeset
792 return self._db.security.hasPermission('Retire', self._client.userid,
34434785f308 Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents: 4058
diff changeset
793 self._classname, itemid=self._nodeid)
34434785f308 Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents: 4058
diff changeset
794
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
795 def is_view_ok(self):
4088
34434785f308 Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents: 4058
diff changeset
796 """ Is the user allowed to View this item?
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
797 """
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
798 if self._db.security.hasPermission('View', self._client.userid,
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
799 self._classname, itemid=self._nodeid):
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
800 return 1
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
801 return self.is_edit_ok()
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
802
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
803 def is_only_view_ok(self):
4088
34434785f308 Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents: 4058
diff changeset
804 """ Is the user only allowed to View (ie. not Edit) this item?
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
805 """
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
806 return self.is_view_ok() and not self.is_edit_ok()
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
807
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
808 def __repr__(self):
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
809 return '<HTMLItem(0x%x) %s %s>'%(id(self), self._classname,
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
810 self._nodeid)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
811
1002
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
812 def __getitem__(self, item):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
813 """ return an HTMLProperty instance
3696
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
814 this now can handle transitive lookups where item is of the
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
815 form x.y.z
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
816 """
1002
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
817 if item == 'id':
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
818 return self._nodeid
1073
cf30c6cdca02 More documentation.
Richard Jones <richard@users.sourceforge.net>
parents: 1068
diff changeset
819
3696
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
820 items = item.split('.', 1)
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
821 has_rest = len(items) > 1
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
822
1073
cf30c6cdca02 More documentation.
Richard Jones <richard@users.sourceforge.net>
parents: 1068
diff changeset
823 # get the property
3696
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
824 prop = self._props[items[0]]
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
825
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
826 if has_rest and not isinstance(prop, (hyperdb.Link, hyperdb.Multilink)):
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
827 raise KeyError, item
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
828
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
829 # get the value, handling missing values
1447
6118d4498db3 added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents: 1441
diff changeset
830 value = None
6118d4498db3 added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents: 1441
diff changeset
831 if int(self._nodeid) > 0:
3696
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
832 value = self._klass.get(self._nodeid, items[0], None)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
833 if value is None:
3696
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
834 if isinstance(prop, hyperdb.Multilink):
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
835 value = []
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
836
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
837 # look up the correct HTMLProperty class
3696
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
838 htmlprop = None
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
839 for klass, htmlklass in propclasses:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
840 if isinstance(prop, klass):
3696
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
841 htmlprop = htmlklass(self._client, self._classname,
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
842 self._nodeid, prop, items[0], value, self._anonymous)
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
843 if htmlprop is not None:
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
844 if has_rest:
3699
976191d749fb grouping by ID and grouping by transitive multilinks didn't work correctly.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3698
diff changeset
845 if isinstance(htmlprop, MultilinkHTMLProperty):
976191d749fb grouping by ID and grouping by transitive multilinks didn't work correctly.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3698
diff changeset
846 return [h[items[1]] for h in htmlprop]
3696
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
847 return htmlprop[items[1]]
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
848 return htmlprop
1002
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
849
1364
1d1ee96e8956 applied patch for nicer history display (feature [SF#638280])
Richard Jones <richard@users.sourceforge.net>
parents: 1357
diff changeset
850 raise KeyError, item
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
851
1002
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
852 def __getattr__(self, attr):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
853 """ convenience access to properties """
1002
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
854 try:
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
855 return self[attr]
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
856 except KeyError:
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
857 raise AttributeError, attr
1743
f166cd4fd392 add action attribute to issue.item form action tag
Richard Jones <richard@users.sourceforge.net>
parents: 1739
diff changeset
858
f166cd4fd392 add action attribute to issue.item form action tag
Richard Jones <richard@users.sourceforge.net>
parents: 1739
diff changeset
859 def designator(self):
2014
366d3bbce982 Simple version of collision detection...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 2010
diff changeset
860 """Return this item's designator (classname + id)."""
1743
f166cd4fd392 add action attribute to issue.item form action tag
Richard Jones <richard@users.sourceforge.net>
parents: 1739
diff changeset
861 return '%s%s'%(self._classname, self._nodeid)
2136
ee3cf6a44f29 queries on a per-user basis, and public queries [SF#891798] :)
Richard Jones <richard@users.sourceforge.net>
parents: 2118
diff changeset
862
ee3cf6a44f29 queries on a per-user basis, and public queries [SF#891798] :)
Richard Jones <richard@users.sourceforge.net>
parents: 2118
diff changeset
863 def is_retired(self):
ee3cf6a44f29 queries on a per-user basis, and public queries [SF#891798] :)
Richard Jones <richard@users.sourceforge.net>
parents: 2118
diff changeset
864 """Is this item retired?"""
ee3cf6a44f29 queries on a per-user basis, and public queries [SF#891798] :)
Richard Jones <richard@users.sourceforge.net>
parents: 2118
diff changeset
865 return self._klass.is_retired(self._nodeid)
2327
36ae1b14aaab remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2324
diff changeset
866
3856
b38bb4ca3fc0 allow customisation of the edit action for the submit button
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3845
diff changeset
867 def submit(self, label=''"Submit Changes", action="edit"):
2014
366d3bbce982 Simple version of collision detection...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 2010
diff changeset
868 """Generate a submit button.
366d3bbce982 Simple version of collision detection...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 2010
diff changeset
869
366d3bbce982 Simple version of collision detection...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 2010
diff changeset
870 Also sneak in the lastactivity and action hidden elements.
366d3bbce982 Simple version of collision detection...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 2010
diff changeset
871 """
2262
a13ec40cf8f5 *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 2244
diff changeset
872 return self.input(type="hidden", name="@lastactivity",
2314
7c8d2e9a0566 fix DateHTMLProperty so local() can override user timezone [SF#953678]
Richard Jones <richard@users.sourceforge.net>
parents: 2289
diff changeset
873 value=self.activity.local(0)) + '\n' + \
3856
b38bb4ca3fc0 allow customisation of the edit action for the submit button
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3845
diff changeset
874 self.input(type="hidden", name="@action", value=action) + '\n' + \
3770
567227803c75 Fix name of submit button.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3736
diff changeset
875 self.input(type="submit", name="submit_button", value=self._(label))
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
876
1103
db787cef1385 handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents: 1099
diff changeset
877 def journal(self, direction='descending'):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
878 """ Return a list of HTMLJournalEntry instances.
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
879 """
1103
db787cef1385 handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents: 1099
diff changeset
880 # XXX do this
db787cef1385 handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents: 1099
diff changeset
881 return []
db787cef1385 handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents: 1099
diff changeset
882
2244
ac4f295499a4 fixed journal marshalling in RDBMS backends [SF#943627]
Richard Jones <richard@users.sourceforge.net>
parents: 2207
diff changeset
883 def history(self, direction='descending', dre=re.compile('^\d+$')):
3117
460eb0209a9e Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents: 3104
diff changeset
884 if not self.is_view_ok():
3164
24476db8872f nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents: 3159
diff changeset
885 return self._('[hidden]')
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
886
2614
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
887 # pre-load the history with the current state
1364
1d1ee96e8956 applied patch for nicer history display (feature [SF#638280])
Richard Jones <richard@users.sourceforge.net>
parents: 1357
diff changeset
888 current = {}
2614
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
889 for prop_n in self._props.keys():
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
890 prop = self[prop_n]
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
891 if not isinstance(prop, HTMLProperty):
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
892 continue
3971
ff3a8b7d1819 security fixes
Richard Jones <richard@users.sourceforge.net>
parents: 3968
diff changeset
893 current[prop_n] = prop.plain(escape=1)
2614
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
894 # make link if hrefable
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
895 if (self._props.has_key(prop_n) and
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
896 isinstance(self._props[prop_n], hyperdb.Link)):
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
897 classname = self._props[prop_n].classname
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
898 try:
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
899 template = find_template(self._db.config.TEMPLATES,
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
900 classname, 'item')
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
901 if template[1].startswith('_generic'):
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
902 raise NoTemplate, 'not really...'
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
903 except NoTemplate:
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
904 pass
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
905 else:
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
906 id = self._klass.get(self._nodeid, prop_n, None)
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
907 current[prop_n] = '<a href="%s%s">%s</a>'%(
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
908 classname, id, current[prop_n])
2673
63f8b13ba85f fix sre_constants.error:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2668
diff changeset
909
2614
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
910 # get the journal, sort and reverse
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
911 history = self._klass.history(self._nodeid)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
912 history.sort()
2614
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
913 history.reverse()
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
914
1402
27586da5557c Added users' timezone support
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1394
diff changeset
915 timezone = self._db.getUserTimezone()
2614
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
916 l = []
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
917 comments = {}
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
918 for id, evt_date, user, action, args in history:
1402
27586da5557c Added users' timezone support
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1394
diff changeset
919 date_s = str(evt_date.local(timezone)).replace("."," ")
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
920 arg_s = ''
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
921 if action == 'link' and type(args) == type(()):
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
922 if len(args) == 3:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
923 linkcl, linkid, key = args
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
924 arg_s += '<a href="%s%s">%s%s %s</a>'%(linkcl, linkid,
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
925 linkcl, linkid, key)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
926 else:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
927 arg_s = str(args)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
928
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
929 elif action == 'unlink' and type(args) == type(()):
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
930 if len(args) == 3:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
931 linkcl, linkid, key = args
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
932 arg_s += '<a href="%s%s">%s%s %s</a>'%(linkcl, linkid,
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
933 linkcl, linkid, key)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
934 else:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
935 arg_s = str(args)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
936
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
937 elif type(args) == type({}):
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
938 cell = []
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
939 for k in args.keys():
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
940 # try to get the relevant property and treat it
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
941 # specially
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
942 try:
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
943 prop = self._props[k]
999
8d54c0f3198e Fixed history and its nihilism. Added convenience method for submit buttons
Richard Jones <richard@users.sourceforge.net>
parents: 985
diff changeset
944 except KeyError:
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
945 prop = None
1773
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
946 if prop is None:
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
947 # property no longer exists
2396
39cdddd313ca HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2390
diff changeset
948 comments['no_exist'] = self._(
2327
36ae1b14aaab remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2324
diff changeset
949 "<em>The indicated property no longer exists</em>")
2396
39cdddd313ca HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2390
diff changeset
950 cell.append(self._('<em>%s: %s</em>\n')
2547
9b9c8fb52732 translate action names and property names in the history list
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2538
diff changeset
951 % (self._(k), str(args[k])))
1773
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
952 continue
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
953
1773
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
954 if args[k] and (isinstance(prop, hyperdb.Multilink) or
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
955 isinstance(prop, hyperdb.Link)):
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
956 # figure what the link class is
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
957 classname = prop.classname
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
958 try:
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
959 linkcl = self._db.getclass(classname)
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
960 except KeyError:
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
961 labelprop = None
2396
39cdddd313ca HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2390
diff changeset
962 comments[classname] = self._(
2327
36ae1b14aaab remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2324
diff changeset
963 "The linked class %(classname)s no longer exists"
36ae1b14aaab remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2324
diff changeset
964 ) % locals()
1773
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
965 labelprop = linkcl.labelprop(1)
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
966 try:
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
967 template = find_template(self._db.config.TEMPLATES,
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
968 classname, 'item')
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
969 if template[1].startswith('_generic'):
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
970 raise NoTemplate, 'not really...'
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
971 hrefable = 1
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
972 except NoTemplate:
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
973 hrefable = 0
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
974
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
975 if isinstance(prop, hyperdb.Multilink) and args[k]:
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
976 ml = []
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
977 for linkid in args[k]:
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
978 if isinstance(linkid, type(())):
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
979 sublabel = linkid[0] + ' '
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
980 linkids = linkid[1]
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
981 else:
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
982 sublabel = ''
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
983 linkids = [linkid]
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
984 subml = []
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
985 for linkid in linkids:
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
986 label = classname + linkid
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
987 # if we have a label property, try to use it
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
988 # TODO: test for node existence even when
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
989 # there's no labelprop!
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
990 try:
1773
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
991 if labelprop is not None and \
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
992 labelprop != 'id':
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
993 label = linkcl.get(linkid, labelprop)
3971
ff3a8b7d1819 security fixes
Richard Jones <richard@users.sourceforge.net>
parents: 3968
diff changeset
994 label = cgi.escape(label)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
995 except IndexError:
2396
39cdddd313ca HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2390
diff changeset
996 comments['no_link'] = self._(
2327
36ae1b14aaab remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2324
diff changeset
997 "<strike>The linked node"
36ae1b14aaab remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2324
diff changeset
998 " no longer exists</strike>")
1773
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
999 subml.append('<strike>%s</strike>'%label)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1000 else:
1773
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1001 if hrefable:
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1002 subml.append('<a href="%s%s">%s</a>'%(
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1003 classname, linkid, label))
3401
62e4032cb280 merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3394
diff changeset
1004 elif label is None:
62e4032cb280 merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3394
diff changeset
1005 subml.append('%s%s'%(classname,
62e4032cb280 merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3394
diff changeset
1006 linkid))
1773
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1007 else:
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1008 subml.append(label)
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1009 ml.append(sublabel + ', '.join(subml))
2547
9b9c8fb52732 translate action names and property names in the history list
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2538
diff changeset
1010 cell.append('%s:\n %s'%(self._(k), ', '.join(ml)))
1773
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1011 elif isinstance(prop, hyperdb.Link) and args[k]:
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1012 label = classname + args[k]
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1013 # if we have a label property, try to use it
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1014 # TODO: test for node existence even when
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1015 # there's no labelprop!
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1016 if labelprop is not None and labelprop != 'id':
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1017 try:
3971
ff3a8b7d1819 security fixes
Richard Jones <richard@users.sourceforge.net>
parents: 3968
diff changeset
1018 label = cgi.escape(linkcl.get(args[k],
ff3a8b7d1819 security fixes
Richard Jones <richard@users.sourceforge.net>
parents: 3968
diff changeset
1019 labelprop))
1773
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1020 except IndexError:
2396
39cdddd313ca HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2390
diff changeset
1021 comments['no_link'] = self._(
2327
36ae1b14aaab remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2324
diff changeset
1022 "<strike>The linked node"
36ae1b14aaab remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2324
diff changeset
1023 " no longer exists</strike>")
1773
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1024 cell.append(' <strike>%s</strike>,\n'%label)
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1025 # "flag" this is done .... euwww
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1026 label = None
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1027 if label is not None:
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1028 if hrefable:
3971
ff3a8b7d1819 security fixes
Richard Jones <richard@users.sourceforge.net>
parents: 3968
diff changeset
1029 old = '<a href="%s%s">%s</a>'%(classname,
ff3a8b7d1819 security fixes
Richard Jones <richard@users.sourceforge.net>
parents: 3968
diff changeset
1030 args[k], label)
1773
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1031 else:
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1032 old = label;
2547
9b9c8fb52732 translate action names and property names in the history list
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2538
diff changeset
1033 cell.append('%s: %s' % (self._(k), old))
1369
8edc52f5ceae fixed history display code for 2.1 compatibility
Richard Jones <richard@users.sourceforge.net>
parents: 1364
diff changeset
1034 if current.has_key(k):
1364
1d1ee96e8956 applied patch for nicer history display (feature [SF#638280])
Richard Jones <richard@users.sourceforge.net>
parents: 1357
diff changeset
1035 cell[-1] += ' -> %s'%current[k]
1773
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1036 current[k] = old
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1037
1773
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1038 elif isinstance(prop, hyperdb.Date) and args[k]:
3151
6feac4fcf883 Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3127
diff changeset
1039 if args[k] is None:
6feac4fcf883 Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3127
diff changeset
1040 d = ''
6feac4fcf883 Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3127
diff changeset
1041 else:
6feac4fcf883 Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3127
diff changeset
1042 d = date.Date(args[k],
6feac4fcf883 Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3127
diff changeset
1043 translator=self._client).local(timezone)
2547
9b9c8fb52732 translate action names and property names in the history list
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2538
diff changeset
1044 cell.append('%s: %s'%(self._(k), str(d)))
1773
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1045 if current.has_key(k):
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1046 cell[-1] += ' -> %s' % current[k]
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1047 current[k] = str(d)
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1048
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1049 elif isinstance(prop, hyperdb.Interval) and args[k]:
2524
736115d374f2 use client instance to translate Date and Interval objects
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2520
diff changeset
1050 val = str(date.Interval(args[k],
736115d374f2 use client instance to translate Date and Interval objects
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2520
diff changeset
1051 translator=self._client))
2547
9b9c8fb52732 translate action names and property names in the history list
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2538
diff changeset
1052 cell.append('%s: %s'%(self._(k), val))
1773
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1053 if current.has_key(k):
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1054 cell[-1] += ' -> %s'%current[k]
2170
0def552122af handle Boolean values in history HTML display
Richard Jones <richard@users.sourceforge.net>
parents: 2157
diff changeset
1055 current[k] = val
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1056
1773
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1057 elif isinstance(prop, hyperdb.String) and args[k]:
2170
0def552122af handle Boolean values in history HTML display
Richard Jones <richard@users.sourceforge.net>
parents: 2157
diff changeset
1058 val = cgi.escape(args[k])
2547
9b9c8fb52732 translate action names and property names in the history list
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2538
diff changeset
1059 cell.append('%s: %s'%(self._(k), val))
1773
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1060 if current.has_key(k):
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1061 cell[-1] += ' -> %s'%current[k]
2170
0def552122af handle Boolean values in history HTML display
Richard Jones <richard@users.sourceforge.net>
parents: 2157
diff changeset
1062 current[k] = val
0def552122af handle Boolean values in history HTML display
Richard Jones <richard@users.sourceforge.net>
parents: 2157
diff changeset
1063
0def552122af handle Boolean values in history HTML display
Richard Jones <richard@users.sourceforge.net>
parents: 2157
diff changeset
1064 elif isinstance(prop, hyperdb.Boolean) and args[k] is not None:
2547
9b9c8fb52732 translate action names and property names in the history list
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2538
diff changeset
1065 val = args[k] and ''"Yes" or ''"No"
9b9c8fb52732 translate action names and property names in the history list
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2538
diff changeset
1066 cell.append('%s: %s'%(self._(k), val))
2170
0def552122af handle Boolean values in history HTML display
Richard Jones <richard@users.sourceforge.net>
parents: 2157
diff changeset
1067 if current.has_key(k):
0def552122af handle Boolean values in history HTML display
Richard Jones <richard@users.sourceforge.net>
parents: 2157
diff changeset
1068 cell[-1] += ' -> %s'%current[k]
0def552122af handle Boolean values in history HTML display
Richard Jones <richard@users.sourceforge.net>
parents: 2157
diff changeset
1069 current[k] = val
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1070
1773
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1071 elif not args[k]:
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1072 if current.has_key(k):
2547
9b9c8fb52732 translate action names and property names in the history list
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2538
diff changeset
1073 cell.append('%s: %s'%(self._(k), current[k]))
1773
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1074 current[k] = '(no value)'
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1075 else:
2547
9b9c8fb52732 translate action names and property names in the history list
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2538
diff changeset
1076 cell.append(self._('%s: (no value)')%self._(k))
1773
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1077
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1078 else:
2547
9b9c8fb52732 translate action names and property names in the history list
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2538
diff changeset
1079 cell.append('%s: %s'%(self._(k), str(args[k])))
1773
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1080 if current.has_key(k):
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1081 cell[-1] += ' -> %s'%current[k]
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1082 current[k] = str(args[k])
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1083
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1084 arg_s = '<br />'.join(cell)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1085 else:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1086 # unkown event!!
2396
39cdddd313ca HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2390
diff changeset
1087 comments['unknown'] = self._(
39cdddd313ca HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2390
diff changeset
1088 "<strong><em>This event is not handled"
2327
36ae1b14aaab remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2324
diff changeset
1089 " by the history display!</em></strong>")
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1090 arg_s = '<strong><em>' + str(args) + '</em></strong>'
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1091 date_s = date_s.replace(' ', '&nbsp;')
1258
de0f879f995d fixed history to display username instead of userid
Richard Jones <richard@users.sourceforge.net>
parents: 1254
diff changeset
1092 # if the user's an itemid, figure the username (older journals
de0f879f995d fixed history to display username instead of userid
Richard Jones <richard@users.sourceforge.net>
parents: 1254
diff changeset
1093 # have the username)
de0f879f995d fixed history to display username instead of userid
Richard Jones <richard@users.sourceforge.net>
parents: 1254
diff changeset
1094 if dre.match(user):
de0f879f995d fixed history to display username instead of userid
Richard Jones <richard@users.sourceforge.net>
parents: 1254
diff changeset
1095 user = self._db.user.get(user, 'username')
1074
954ad22eb7d9 more doc, more cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1073
diff changeset
1096 l.append('<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>'%(
2547
9b9c8fb52732 translate action names and property names in the history list
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2538
diff changeset
1097 date_s, user, self._(action), arg_s))
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1098 if comments:
2396
39cdddd313ca HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2390
diff changeset
1099 l.append(self._(
39cdddd313ca HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2390
diff changeset
1100 '<tr><td colspan=4><strong>Note:</strong></td></tr>'))
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1101 for entry in comments.values():
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1102 l.append('<tr><td colspan=4>%s</td></tr>'%entry)
2614
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
1103
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
1104 if direction == 'ascending':
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
1105 l.reverse()
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
1106
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
1107 l[0:0] = ['<table class="history">'
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
1108 '<tr><th colspan="4" class="header">',
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
1109 self._('History'),
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
1110 '</th></tr><tr>',
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
1111 self._('<th>Date</th>'),
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
1112 self._('<th>User</th>'),
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
1113 self._('<th>Action</th>'),
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
1114 self._('<th>Args</th>'),
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
1115 '</tr>']
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1116 l.append('</table>')
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1117 return '\n'.join(l)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1118
1097
98f3d41f41d9 query "editing" now working, minus filling the form in with the query params
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
1119 def renderQueryForm(self):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1120 """ Render this item, which is a query, as a search form.
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1121 """
1097
98f3d41f41d9 query "editing" now working, minus filling the form in with the query params
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
1122 # create a new request and override the specified args
98f3d41f41d9 query "editing" now working, minus filling the form in with the query params
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
1123 req = HTMLRequest(self._client)
98f3d41f41d9 query "editing" now working, minus filling the form in with the query params
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
1124 req.classname = self._klass.get(self._nodeid, 'klass')
1284
899c6ced2abe include queryname in query template render ;)
Richard Jones <richard@users.sourceforge.net>
parents: 1272
diff changeset
1125 name = self._klass.get(self._nodeid, 'name')
899c6ced2abe include queryname in query template render ;)
Richard Jones <richard@users.sourceforge.net>
parents: 1272
diff changeset
1126 req.updateFromURL(self._klass.get(self._nodeid, 'url') +
1911
f5c804379c85 fixed ZRoundup - mostly changes to classic template
Richard Jones <richard@users.sourceforge.net>
parents: 1857
diff changeset
1127 '&@queryname=%s'%urllib.quote(name))
1097
98f3d41f41d9 query "editing" now working, minus filling the form in with the query params
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
1128
98f3d41f41d9 query "editing" now working, minus filling the form in with the query params
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
1129 # new template, using the specified classname and request
2854
6acc315570eb Templates.precompileTemplates: skip files without ".html" extension
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2827
diff changeset
1130 pt = self._client.instance.templates.get(req.classname, 'search')
4057
885069b5f328 Fix context for query form to be a class.
Stefan Seefeld <stefan@seefeld.name>
parents: 4056
diff changeset
1131 # The context for a search page should be the class, not any
885069b5f328 Fix context for query form to be a class.
Stefan Seefeld <stefan@seefeld.name>
parents: 4056
diff changeset
1132 # node.
885069b5f328 Fix context for query form to be a class.
Stefan Seefeld <stefan@seefeld.name>
parents: 4056
diff changeset
1133 self._client.nodeid = None
4115
d61066deae67 handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents: 4112
diff changeset
1134
1097
98f3d41f41d9 query "editing" now working, minus filling the form in with the query params
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
1135 # use our fabricated request
98f3d41f41d9 query "editing" now working, minus filling the form in with the query params
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
1136 return pt.render(self._client, req.classname, req)
98f3d41f41d9 query "editing" now working, minus filling the form in with the query params
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
1137
2180
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2170
diff changeset
1138 def download_url(self):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1139 """ Assume that this item is a FileClass and that it has a name
2180
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2170
diff changeset
1140 and content. Construct a URL for the download of the content.
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1141 """
2180
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2170
diff changeset
1142 name = self._klass.get(self._nodeid, 'name')
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2170
diff changeset
1143 url = '%s%s/%s'%(self._classname, self._nodeid, name)
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2170
diff changeset
1144 return urllib.quote(url)
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2170
diff changeset
1145
3509
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1146 def copy_url(self, exclude=("messages", "files")):
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1147 """Construct a URL for creating a copy of this item
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1148
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1149 "exclude" is an optional list of properties that should
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1150 not be copied to the new object. By default, this list
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1151 includes "messages" and "files" properties. Note that
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1152 "id" property cannot be copied.
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1153
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1154 """
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1155 exclude = ("id", "activity", "actor", "creation", "creator") \
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1156 + tuple(exclude)
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1157 query = {
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1158 "@template": "item",
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1159 "@note": self._("Copy of %(class)s %(id)s") % {
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1160 "class": self._(self._classname), "id": self._nodeid},
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1161 }
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1162 for name in self._props.keys():
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1163 if name not in exclude:
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1164 query[name] = self[name].plain()
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1165 return self._classname + "?" + "&".join(
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1166 ["%s=%s" % (key, urllib.quote(value))
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1167 for key, value in query.items()])
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1168
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
1169 class _HTMLUser(_HTMLItem):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1170 """Add ability to check for permissions on users.
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1171 """
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1172 _marker = []
2991
b9a55628a78d more doc fixes
Richard Jones <richard@users.sourceforge.net>
parents: 2983
diff changeset
1173 def hasPermission(self, permission, classname=_marker,
b9a55628a78d more doc fixes
Richard Jones <richard@users.sourceforge.net>
parents: 2983
diff changeset
1174 property=None, itemid=None):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1175 """Determine if the user has the Permission.
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1176
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
1177 The class being tested defaults to the template's class, but may
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
1178 be overidden for this test by suppling an alternate classname.
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1179 """
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1180 if classname is self._marker:
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
1181 classname = self._client.classname
3535
75dc225613cc fix security check for hasPermission(Permission, None)
Richard Jones <richard@users.sourceforge.net>
parents: 3509
diff changeset
1182 return self._db.security.hasPermission(permission,
3357
5c8822d10fdc fix invocation of hasPermission from templating code [SF#1224172]
Richard Jones <richard@users.sourceforge.net>
parents: 3354
diff changeset
1183 self._nodeid, classname, property, itemid)
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
1184
3535
75dc225613cc fix security check for hasPermission(Permission, None)
Richard Jones <richard@users.sourceforge.net>
parents: 3509
diff changeset
1185 def hasRole(self, rolename):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1186 """Determine whether the user has the Role."""
3535
75dc225613cc fix security check for hasPermission(Permission, None)
Richard Jones <richard@users.sourceforge.net>
parents: 3509
diff changeset
1187 roles = self._db.user.get(self._nodeid, 'roles').split(',')
75dc225613cc fix security check for hasPermission(Permission, None)
Richard Jones <richard@users.sourceforge.net>
parents: 3509
diff changeset
1188 for role in roles:
75dc225613cc fix security check for hasPermission(Permission, None)
Richard Jones <richard@users.sourceforge.net>
parents: 3509
diff changeset
1189 if role.strip() == rolename: return True
75dc225613cc fix security check for hasPermission(Permission, None)
Richard Jones <richard@users.sourceforge.net>
parents: 3509
diff changeset
1190 return False
75dc225613cc fix security check for hasPermission(Permission, None)
Richard Jones <richard@users.sourceforge.net>
parents: 3509
diff changeset
1191
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
1192 def HTMLItem(client, classname, nodeid, anonymous=0):
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
1193 if classname == 'user':
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
1194 return _HTMLUser(client, classname, nodeid, anonymous)
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
1195 else:
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
1196 return _HTMLItem(client, classname, nodeid, anonymous)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1197
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1198 class HTMLProperty(HTMLInputMixin, HTMLPermissions):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1199 """ String, Number, Date, Interval HTMLProperty
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1200
1123
644d3075c2df more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents: 1122
diff changeset
1201 Has useful attributes:
1080
24c9e81fce85 bugfix, added some doc
Richard Jones <richard@users.sourceforge.net>
parents: 1079
diff changeset
1202
24c9e81fce85 bugfix, added some doc
Richard Jones <richard@users.sourceforge.net>
parents: 1079
diff changeset
1203 _name the name of the property
24c9e81fce85 bugfix, added some doc
Richard Jones <richard@users.sourceforge.net>
parents: 1079
diff changeset
1204 _value the value of the property if any
24c9e81fce85 bugfix, added some doc
Richard Jones <richard@users.sourceforge.net>
parents: 1079
diff changeset
1205
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1206 A wrapper object which may be stringified for the plain() behaviour.
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1207 """
1447
6118d4498db3 added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents: 1441
diff changeset
1208 def __init__(self, client, classname, nodeid, prop, name, value,
6118d4498db3 added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents: 1441
diff changeset
1209 anonymous=0):
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
1210 self._client = client
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
1211 self._db = client.db
3164
24476db8872f nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents: 3159
diff changeset
1212 self._ = client._
1447
6118d4498db3 added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents: 1441
diff changeset
1213 self._classname = classname
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
1214 self._nodeid = nodeid
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
1215 self._prop = prop
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
1216 self._value = value
1447
6118d4498db3 added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents: 1441
diff changeset
1217 self._anonymous = anonymous
1468
f57759a5ee1a Better form name mangling, doesn't confuse other things like generic editing.
Richard Jones <richard@users.sourceforge.net>
parents: 1467
diff changeset
1218 self._name = name
1447
6118d4498db3 added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents: 1441
diff changeset
1219 if not anonymous:
1468
f57759a5ee1a Better form name mangling, doesn't confuse other things like generic editing.
Richard Jones <richard@users.sourceforge.net>
parents: 1467
diff changeset
1220 self._formname = '%s%s@%s'%(classname, nodeid, name)
1447
6118d4498db3 added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents: 1441
diff changeset
1221 else:
1468
f57759a5ee1a Better form name mangling, doesn't confuse other things like generic editing.
Richard Jones <richard@users.sourceforge.net>
parents: 1467
diff changeset
1222 self._formname = name
1952
c40ed9113285 Applied Stefan Seefeld's html4/xhtml patch with some changes.
Richard Jones <richard@users.sourceforge.net>
parents: 1932
diff changeset
1223
4056
a82b17500b22 Fix issue2550512
Stefan Seefeld <stefan@seefeld.name>
parents: 4055
diff changeset
1224 # If no value is already present for this property, see if one
a82b17500b22 Fix issue2550512
Stefan Seefeld <stefan@seefeld.name>
parents: 4055
diff changeset
1225 # is specified in the current form.
a82b17500b22 Fix issue2550512
Stefan Seefeld <stefan@seefeld.name>
parents: 4055
diff changeset
1226 form = self._client.form
a82b17500b22 Fix issue2550512
Stefan Seefeld <stefan@seefeld.name>
parents: 4055
diff changeset
1227 if not self._value and form.has_key(self._formname):
a82b17500b22 Fix issue2550512
Stefan Seefeld <stefan@seefeld.name>
parents: 4055
diff changeset
1228 if isinstance(prop, hyperdb.Multilink):
a82b17500b22 Fix issue2550512
Stefan Seefeld <stefan@seefeld.name>
parents: 4055
diff changeset
1229 value = lookupIds(self._db, prop,
a82b17500b22 Fix issue2550512
Stefan Seefeld <stefan@seefeld.name>
parents: 4055
diff changeset
1230 handleListCGIValue(form[self._formname]),
a82b17500b22 Fix issue2550512
Stefan Seefeld <stefan@seefeld.name>
parents: 4055
diff changeset
1231 fail_ok=1)
a82b17500b22 Fix issue2550512
Stefan Seefeld <stefan@seefeld.name>
parents: 4055
diff changeset
1232 elif isinstance(prop, hyperdb.Link):
a82b17500b22 Fix issue2550512
Stefan Seefeld <stefan@seefeld.name>
parents: 4055
diff changeset
1233 value = form.getfirst(self._formname).strip()
a82b17500b22 Fix issue2550512
Stefan Seefeld <stefan@seefeld.name>
parents: 4055
diff changeset
1234 if value:
a82b17500b22 Fix issue2550512
Stefan Seefeld <stefan@seefeld.name>
parents: 4055
diff changeset
1235 value = lookupIds(self._db, prop, [value],
a82b17500b22 Fix issue2550512
Stefan Seefeld <stefan@seefeld.name>
parents: 4055
diff changeset
1236 fail_ok=1)[0]
a82b17500b22 Fix issue2550512
Stefan Seefeld <stefan@seefeld.name>
parents: 4055
diff changeset
1237 else:
a82b17500b22 Fix issue2550512
Stefan Seefeld <stefan@seefeld.name>
parents: 4055
diff changeset
1238 value = None
a82b17500b22 Fix issue2550512
Stefan Seefeld <stefan@seefeld.name>
parents: 4055
diff changeset
1239 else:
a82b17500b22 Fix issue2550512
Stefan Seefeld <stefan@seefeld.name>
parents: 4055
diff changeset
1240 value = form.getfirst(self._formname).strip() or None
a82b17500b22 Fix issue2550512
Stefan Seefeld <stefan@seefeld.name>
parents: 4055
diff changeset
1241 self._value = value
a82b17500b22 Fix issue2550512
Stefan Seefeld <stefan@seefeld.name>
parents: 4055
diff changeset
1242
1956
1e2cccf6b53b give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents: 1952
diff changeset
1243 HTMLInputMixin.__init__(self)
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1244
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1245 def __repr__(self):
1468
f57759a5ee1a Better form name mangling, doesn't confuse other things like generic editing.
Richard Jones <richard@users.sourceforge.net>
parents: 1467
diff changeset
1246 return '<HTMLProperty(0x%x) %s %r %r>'%(id(self), self._formname,
1447
6118d4498db3 added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents: 1441
diff changeset
1247 self._prop, self._value)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1248 def __str__(self):
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1249 return self.plain()
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1250 def __cmp__(self, other):
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1251 if isinstance(other, HTMLProperty):
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
1252 return cmp(self._value, other._value)
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
1253 return cmp(self._value, other)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1254
2347
fbbda3b1816d implement __nonzero__ for HTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents: 2327
diff changeset
1255 def __nonzero__(self):
fbbda3b1816d implement __nonzero__ for HTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents: 2327
diff changeset
1256 return not not self._value
fbbda3b1816d implement __nonzero__ for HTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents: 2327
diff changeset
1257
2180
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2170
diff changeset
1258 def isset(self):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1259 """Is my _value not None?"""
2289
6d16b967f89d HTML templating isset() inverted [SF#951779]
Richard Jones <richard@users.sourceforge.net>
parents: 2262
diff changeset
1260 return self._value is not None
2180
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2170
diff changeset
1261
2002
b046b65e51db if you're going to enforce class-level permissions...
Richard Jones <richard@users.sourceforge.net>
parents: 1983
diff changeset
1262 def is_edit_ok(self):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1263 """Should the user be allowed to use an edit form field for this
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
1264 property. Check "Create" for new items, or "Edit" for existing
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
1265 ones.
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1266 """
2002
b046b65e51db if you're going to enforce class-level permissions...
Richard Jones <richard@users.sourceforge.net>
parents: 1983
diff changeset
1267 if self._nodeid:
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
1268 return self._db.security.hasPermission('Edit', self._client.userid,
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
1269 self._classname, self._name, self._nodeid)
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
1270 return self._db.security.hasPermission('Create', self._client.userid,
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
1271 self._classname, self._name)
2002
b046b65e51db if you're going to enforce class-level permissions...
Richard Jones <richard@users.sourceforge.net>
parents: 1983
diff changeset
1272
b046b65e51db if you're going to enforce class-level permissions...
Richard Jones <richard@users.sourceforge.net>
parents: 1983
diff changeset
1273 def is_view_ok(self):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1274 """ Is the user allowed to View the current class?
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1275 """
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
1276 if self._db.security.hasPermission('View', self._client.userid,
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
1277 self._classname, self._name, self._nodeid):
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
1278 return 1
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
1279 return self.is_edit_ok()
2002
b046b65e51db if you're going to enforce class-level permissions...
Richard Jones <richard@users.sourceforge.net>
parents: 1983
diff changeset
1280
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1281 class StringHTMLProperty(HTMLProperty):
3991
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
1282 hyper_re = re.compile(r'''(
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
1283 (?P<url>
4009
e335ce40d6c8 Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents: 3991
diff changeset
1284 (
e335ce40d6c8 Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents: 3991
diff changeset
1285 (ht|f)tp(s?):// # protocol
4010
797eacd945af add tests for and fix alex's examples
Richard Jones <richard@users.sourceforge.net>
parents: 4009
diff changeset
1286 ([\w]+(:\w+)?@)? # username/password
797eacd945af add tests for and fix alex's examples
Richard Jones <richard@users.sourceforge.net>
parents: 4009
diff changeset
1287 ([\w\-]+) # hostname
797eacd945af add tests for and fix alex's examples
Richard Jones <richard@users.sourceforge.net>
parents: 4009
diff changeset
1288 ((\.[\w-]+)+)? # .domain.etc
4009
e335ce40d6c8 Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents: 3991
diff changeset
1289 | # ... or ...
4010
797eacd945af add tests for and fix alex's examples
Richard Jones <richard@users.sourceforge.net>
parents: 4009
diff changeset
1290 ([\w]+(:\w+)?@)? # username/password
4009
e335ce40d6c8 Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents: 3991
diff changeset
1291 www\. # "www."
e335ce40d6c8 Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents: 3991
diff changeset
1292 ([\w\-]+\.)+ # hostname
e335ce40d6c8 Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents: 3991
diff changeset
1293 [\w]{2,5} # TLD
e335ce40d6c8 Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents: 3991
diff changeset
1294 )
e335ce40d6c8 Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents: 3991
diff changeset
1295 (:[\d]{1,5})? # port
e335ce40d6c8 Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents: 3991
diff changeset
1296 (/[\w\-$.+!*(),;:@&=?/~\\#%]*)? # path etc.
3991
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
1297 )|
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
1298 (?P<email>[-+=%/\w\.]+@[\w\.\-]+)|
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
1299 (?P<item>(?P<class>[A-Za-z_]+)(\s*)(?P<id>\d+))
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
1300 )''', re.X | re.I)
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
1301 protocol_re = re.compile('^(ht|f)tp(s?)://', re.I)
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
1302
3862
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1303 def _hyper_repl_item(self,match,replacement):
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1304 item = match.group('item')
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1305 cls = match.group('class').lower()
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1306 id = match.group('id')
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1307 try:
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1308 # make sure cls is a valid tracker classname
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1309 cl = self._db.getclass(cls)
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1310 if not cl.hasnode(id):
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1311 return item
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1312 return replacement % locals()
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1313 except KeyError:
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1314 return item
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1315
1394
d5314bfab0c0 fix incorrect hyperlinking markup
Richard Jones <richard@users.sourceforge.net>
parents: 1374
diff changeset
1316 def _hyper_repl(self, match):
d5314bfab0c0 fix incorrect hyperlinking markup
Richard Jones <richard@users.sourceforge.net>
parents: 1374
diff changeset
1317 if match.group('url'):
3991
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
1318 u = s = match.group('url')
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
1319 if not self.protocol_re.search(s):
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
1320 u = 'http://' + s
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
1321 # catch an escaped ">" at the end of the URL
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
1322 if s.endswith('&gt;'):
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
1323 u = s = s[:-4]
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
1324 e = '&gt;'
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
1325 else:
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
1326 e = ''
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
1327 return '<a href="%s">%s</a>%s'%(u, s, e)
1394
d5314bfab0c0 fix incorrect hyperlinking markup
Richard Jones <richard@users.sourceforge.net>
parents: 1374
diff changeset
1328 elif match.group('email'):
d5314bfab0c0 fix incorrect hyperlinking markup
Richard Jones <richard@users.sourceforge.net>
parents: 1374
diff changeset
1329 s = match.group('email')
d5314bfab0c0 fix incorrect hyperlinking markup
Richard Jones <richard@users.sourceforge.net>
parents: 1374
diff changeset
1330 return '<a href="mailto:%s">%s</a>'%(s, s)
d5314bfab0c0 fix incorrect hyperlinking markup
Richard Jones <richard@users.sourceforge.net>
parents: 1374
diff changeset
1331 else:
3862
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1332 return self._hyper_repl_item(match,
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1333 '<a href="%(cls)s%(id)s">%(item)s</a>')
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1334
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1335 def _hyper_repl_rst(self, match):
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1336 if match.group('url'):
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1337 s = match.group('url')
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1338 return '`%s <%s>`_'%(s, s)
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1339 elif match.group('email'):
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1340 s = match.group('email')
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1341 return '`%s <mailto:%s>`_'%(s, s)
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1342 else:
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1343 return self._hyper_repl_item(match,'`%(item)s <%(cls)s%(id)s>`_')
1336
6a54b51b1784 hyperlinking of special message text
Richard Jones <richard@users.sourceforge.net>
parents: 1332
diff changeset
1344
1773
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1345 def hyperlinked(self):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1346 """ Render a "hyperlinked" version of the text """
1773
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1347 return self.plain(hyperlink=1)
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1348
1374
8e4c3e8de96f fix StringHTMLProperty hyperlinking
Richard Jones <richard@users.sourceforge.net>
parents: 1370
diff changeset
1349 def plain(self, escape=0, hyperlink=0):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1350 """Render a "plain" representation of the property
2327
36ae1b14aaab remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2324
diff changeset
1351
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
1352 - "escape" turns on/off HTML quoting
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
1353 - "hyperlink" turns on/off in-text hyperlinking of URLs, email
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
1354 addresses and designators
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1355 """
3117
460eb0209a9e Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents: 3104
diff changeset
1356 if not self.is_view_ok():
3164
24476db8872f nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents: 3159
diff changeset
1357 return self._('[hidden]')
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1358
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
1359 if self._value is None:
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1360 return ''
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1361 if escape:
1336
6a54b51b1784 hyperlinking of special message text
Richard Jones <richard@users.sourceforge.net>
parents: 1332
diff changeset
1362 s = cgi.escape(str(self._value))
6a54b51b1784 hyperlinking of special message text
Richard Jones <richard@users.sourceforge.net>
parents: 1332
diff changeset
1363 else:
1374
8e4c3e8de96f fix StringHTMLProperty hyperlinking
Richard Jones <richard@users.sourceforge.net>
parents: 1370
diff changeset
1364 s = str(self._value)
1336
6a54b51b1784 hyperlinking of special message text
Richard Jones <richard@users.sourceforge.net>
parents: 1332
diff changeset
1365 if hyperlink:
1773
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1366 # no, we *must* escape this text
1374
8e4c3e8de96f fix StringHTMLProperty hyperlinking
Richard Jones <richard@users.sourceforge.net>
parents: 1370
diff changeset
1367 if not escape:
8e4c3e8de96f fix StringHTMLProperty hyperlinking
Richard Jones <richard@users.sourceforge.net>
parents: 1370
diff changeset
1368 s = cgi.escape(s)
1394
d5314bfab0c0 fix incorrect hyperlinking markup
Richard Jones <richard@users.sourceforge.net>
parents: 1374
diff changeset
1369 s = self.hyper_re.sub(self._hyper_repl, s)
1336
6a54b51b1784 hyperlinking of special message text
Richard Jones <richard@users.sourceforge.net>
parents: 1332
diff changeset
1370 return s
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1371
3644
f35ece8f8ff7 added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents: 3635
diff changeset
1372 def wrapped(self, escape=1, hyperlink=1):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1373 """Render a "wrapped" representation of the property.
3644
f35ece8f8ff7 added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents: 3635
diff changeset
1374
f35ece8f8ff7 added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents: 3635
diff changeset
1375 We wrap long lines at 80 columns on the nearest whitespace. Lines
f35ece8f8ff7 added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents: 3635
diff changeset
1376 with no whitespace are not broken to force wrapping.
f35ece8f8ff7 added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents: 3635
diff changeset
1377
f35ece8f8ff7 added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents: 3635
diff changeset
1378 Note that unlike plain() we default wrapped() to have the escaping
f35ece8f8ff7 added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents: 3635
diff changeset
1379 and hyperlinking turned on since that's the most common usage.
f35ece8f8ff7 added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents: 3635
diff changeset
1380
f35ece8f8ff7 added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents: 3635
diff changeset
1381 - "escape" turns on/off HTML quoting
f35ece8f8ff7 added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents: 3635
diff changeset
1382 - "hyperlink" turns on/off in-text hyperlinking of URLs, email
f35ece8f8ff7 added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents: 3635
diff changeset
1383 addresses and designators
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1384 """
3644
f35ece8f8ff7 added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents: 3635
diff changeset
1385 if not self.is_view_ok():
f35ece8f8ff7 added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents: 3635
diff changeset
1386 return self._('[hidden]')
f35ece8f8ff7 added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents: 3635
diff changeset
1387
f35ece8f8ff7 added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents: 3635
diff changeset
1388 if self._value is None:
f35ece8f8ff7 added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents: 3635
diff changeset
1389 return ''
f35ece8f8ff7 added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents: 3635
diff changeset
1390 s = support.wrap(str(self._value), width=80)
f35ece8f8ff7 added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents: 3635
diff changeset
1391 if escape:
f35ece8f8ff7 added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents: 3635
diff changeset
1392 s = cgi.escape(s)
f35ece8f8ff7 added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents: 3635
diff changeset
1393 if hyperlink:
f35ece8f8ff7 added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents: 3635
diff changeset
1394 # no, we *must* escape this text
f35ece8f8ff7 added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents: 3635
diff changeset
1395 if not escape:
f35ece8f8ff7 added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents: 3635
diff changeset
1396 s = cgi.escape(s)
f35ece8f8ff7 added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents: 3635
diff changeset
1397 s = self.hyper_re.sub(self._hyper_repl, s)
f35ece8f8ff7 added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents: 3635
diff changeset
1398 return s
f35ece8f8ff7 added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents: 3635
diff changeset
1399
3509
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1400 def stext(self, escape=0, hyperlink=1):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1401 """ Render the value of the property as StructuredText.
1123
644d3075c2df more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents: 1122
diff changeset
1402
644d3075c2df more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents: 1122
diff changeset
1403 This requires the StructureText module to be installed separately.
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1404 """
3117
460eb0209a9e Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents: 3104
diff changeset
1405 if not self.is_view_ok():
3164
24476db8872f nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents: 3159
diff changeset
1406 return self._('[hidden]')
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1407
3509
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1408 s = self.plain(escape=escape, hyperlink=hyperlink)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1409 if not StructuredText:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1410 return s
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1411 return StructuredText(s,level=1,header=0)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1412
3862
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1413 def rst(self, hyperlink=1):
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1414 """ Render the value of the property as ReStructuredText.
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1415
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1416 This requires docutils to be installed separately.
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1417 """
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1418 if not self.is_view_ok():
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1419 return self._('[hidden]')
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1420
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1421 if not ReStructuredText:
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1422 return self.plain(escape=0, hyperlink=hyperlink)
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1423 s = self.plain(escape=0, hyperlink=0)
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1424 if hyperlink:
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1425 s = self.hyper_re.sub(self._hyper_repl_rst, s)
4097
1daf9f921cc9 Serve the correct ReST part in String.rst().
Stefan Seefeld <stefan@seefeld.name>
parents: 4090
diff changeset
1426 return ReStructuredText(s, writer_name="html")["html_body"].encode("utf-8",
3862
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1427 "replace")
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1428
3509
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1429 def field(self, **kwargs):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1430 """ Render the property as a field in HTML.
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1431
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1432 If not editable, just display the value via plain().
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1433 """
3040
14322134dcef fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents: 3006
diff changeset
1434 if not self.is_edit_ok():
3971
ff3a8b7d1819 security fixes
Richard Jones <richard@users.sourceforge.net>
parents: 3968
diff changeset
1435 return self.plain(escape=1)
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1436
3782
51c07c04d258 clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents: 3779
diff changeset
1437 value = self._value
51c07c04d258 clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents: 3779
diff changeset
1438 if value is None:
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1439 value = ''
3509
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1440
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1441 kwargs.setdefault("size", 30)
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1442 kwargs.update({"name": self._formname, "value": value})
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1443 return self.input(**kwargs)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1444
3905
6733a7cce7f4 multiline pass through extra keywords args
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3903
diff changeset
1445 def multiline(self, escape=0, rows=5, cols=40, **kwargs):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1446 """ Render a multiline form edit field for the property.
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1447
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1448 If not editable, just display the plain() value in a <pre> tag.
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1449 """
3040
14322134dcef fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents: 3006
diff changeset
1450 if not self.is_edit_ok():
14322134dcef fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents: 3006
diff changeset
1451 return '<pre>%s</pre>'%self.plain()
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1452
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
1453 if self._value is None:
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1454 value = ''
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1455 else:
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
1456 value = cgi.escape(str(self._value))
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1457
3710
2862cb0d9be4 default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents: 3702
diff changeset
1458 value = '&quot;'.join(value.split('"'))
2862cb0d9be4 default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents: 3702
diff changeset
1459 name = self._formname
3905
6733a7cce7f4 multiline pass through extra keywords args
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3903
diff changeset
1460 passthrough_args = ' '.join(['%s="%s"' % (k, cgi.escape(str(v), True))
6733a7cce7f4 multiline pass through extra keywords args
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3903
diff changeset
1461 for k,v in kwargs.items()])
6733a7cce7f4 multiline pass through extra keywords args
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3903
diff changeset
1462 return ('<textarea %(passthrough_args)s name="%(name)s" id="%(name)s"'
3710
2862cb0d9be4 default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents: 3702
diff changeset
1463 ' rows="%(rows)s" cols="%(cols)s">'
2862cb0d9be4 default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents: 3702
diff changeset
1464 '%(value)s</textarea>') % locals()
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1465
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1466 def email(self, escape=1):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1467 """ Render the value of the property as an obscured email address
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1468 """
3117
460eb0209a9e Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents: 3104
diff changeset
1469 if not self.is_view_ok():
3164
24476db8872f nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents: 3159
diff changeset
1470 return self._('[hidden]')
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1471
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1472 if self._value is None:
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1473 value = ''
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1474 else:
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1475 value = str(self._value)
3573
d7bab396c228 email obfuscation code in html templating is more robust
Richard Jones <richard@users.sourceforge.net>
parents: 3565
diff changeset
1476 split = value.split('@')
d7bab396c228 email obfuscation code in html templating is more robust
Richard Jones <richard@users.sourceforge.net>
parents: 3565
diff changeset
1477 if len(split) == 2:
d7bab396c228 email obfuscation code in html templating is more robust
Richard Jones <richard@users.sourceforge.net>
parents: 3565
diff changeset
1478 name, domain = split
1133
36ec30d286ea Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents: 1124
diff changeset
1479 domain = ' '.join(domain.split('.')[:-1])
36ec30d286ea Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents: 1124
diff changeset
1480 name = name.replace('.', ' ')
36ec30d286ea Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents: 1124
diff changeset
1481 value = '%s at %s ...'%(name, domain)
36ec30d286ea Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents: 1124
diff changeset
1482 else:
36ec30d286ea Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents: 1124
diff changeset
1483 value = value.replace('.', ' ')
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1484 if escape:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1485 value = cgi.escape(value)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1486 return value
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1487
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1488 class PasswordHTMLProperty(HTMLProperty):
3971
ff3a8b7d1819 security fixes
Richard Jones <richard@users.sourceforge.net>
parents: 3968
diff changeset
1489 def plain(self, escape=0):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1490 """ Render a "plain" representation of the property
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1491 """
3117
460eb0209a9e Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents: 3104
diff changeset
1492 if not self.is_view_ok():
3164
24476db8872f nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents: 3159
diff changeset
1493 return self._('[hidden]')
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1494
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
1495 if self._value is None:
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1496 return ''
2396
39cdddd313ca HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2390
diff changeset
1497 return self._('*encrypted*')
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1498
3710
2862cb0d9be4 default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents: 3702
diff changeset
1499 def field(self, size=30):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1500 """ Render a form edit field for the property.
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1501
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1502 If not editable, just display the value via plain().
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1503 """
3040
14322134dcef fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents: 3006
diff changeset
1504 if not self.is_edit_ok():
3971
ff3a8b7d1819 security fixes
Richard Jones <richard@users.sourceforge.net>
parents: 3968
diff changeset
1505 return self.plain(escape=1)
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1506
3040
14322134dcef fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents: 3006
diff changeset
1507 return self.input(type="password", name=self._formname, size=size)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1508
3710
2862cb0d9be4 default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents: 3702
diff changeset
1509 def confirm(self, size=30):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1510 """ Render a second form edit field for the property, used for
1144
db13f46cb5f9 password edit now has a confirmation field
Richard Jones <richard@users.sourceforge.net>
parents: 1136
diff changeset
1511 confirmation that the user typed the password correctly. Generates
1911
f5c804379c85 fixed ZRoundup - mostly changes to classic template
Richard Jones <richard@users.sourceforge.net>
parents: 1857
diff changeset
1512 a field with name "@confirm@name".
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1513
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1514 If not editable, display nothing.
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1515 """
3040
14322134dcef fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents: 3006
diff changeset
1516 if not self.is_edit_ok():
14322134dcef fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents: 3006
diff changeset
1517 return ''
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1518
3040
14322134dcef fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents: 3006
diff changeset
1519 return self.input(type="password",
3710
2862cb0d9be4 default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents: 3702
diff changeset
1520 name="@confirm@%s"%self._formname,
2862cb0d9be4 default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents: 3702
diff changeset
1521 id="%s-confirm"%self._formname,
2862cb0d9be4 default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents: 3702
diff changeset
1522 size=size)
1144
db13f46cb5f9 password edit now has a confirmation field
Richard Jones <richard@users.sourceforge.net>
parents: 1136
diff changeset
1523
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1524 class NumberHTMLProperty(HTMLProperty):
3971
ff3a8b7d1819 security fixes
Richard Jones <richard@users.sourceforge.net>
parents: 3968
diff changeset
1525 def plain(self, escape=0):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1526 """ Render a "plain" representation of the property
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1527 """
3117
460eb0209a9e Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents: 3104
diff changeset
1528 if not self.is_view_ok():
3164
24476db8872f nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents: 3159
diff changeset
1529 return self._('[hidden]')
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1530
2884
6d6fdd1daf92 NumberHTMLProperty should return "" not "None" if not set
Richard Jones <richard@users.sourceforge.net>
parents: 2883
diff changeset
1531 if self._value is None:
6d6fdd1daf92 NumberHTMLProperty should return "" not "None" if not set
Richard Jones <richard@users.sourceforge.net>
parents: 2883
diff changeset
1532 return ''
6d6fdd1daf92 NumberHTMLProperty should return "" not "None" if not set
Richard Jones <richard@users.sourceforge.net>
parents: 2883
diff changeset
1533
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
1534 return str(self._value)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1535
3710
2862cb0d9be4 default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents: 3702
diff changeset
1536 def field(self, size=30):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1537 """ Render a form edit field for the property.
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1538
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1539 If not editable, just display the value via plain().
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1540 """
3040
14322134dcef fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents: 3006
diff changeset
1541 if not self.is_edit_ok():
3971
ff3a8b7d1819 security fixes
Richard Jones <richard@users.sourceforge.net>
parents: 3968
diff changeset
1542 return self.plain(escape=1)
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1543
3782
51c07c04d258 clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents: 3779
diff changeset
1544 value = self._value
51c07c04d258 clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents: 3779
diff changeset
1545 if value is None:
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1546 value = ''
3782
51c07c04d258 clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents: 3779
diff changeset
1547
51c07c04d258 clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents: 3779
diff changeset
1548 return self.input(name=self._formname, value=value, size=size)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1549
1518
bb843662b708 basic numeric support for NumberHTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents: 1513
diff changeset
1550 def __int__(self):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1551 """ Return an int of me
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1552 """
1518
bb843662b708 basic numeric support for NumberHTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents: 1513
diff changeset
1553 return int(self._value)
bb843662b708 basic numeric support for NumberHTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents: 1513
diff changeset
1554
bb843662b708 basic numeric support for NumberHTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents: 1513
diff changeset
1555 def __float__(self):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1556 """ Return a float of me
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1557 """
1518
bb843662b708 basic numeric support for NumberHTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents: 1513
diff changeset
1558 return float(self._value)
bb843662b708 basic numeric support for NumberHTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents: 1513
diff changeset
1559
bb843662b708 basic numeric support for NumberHTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents: 1513
diff changeset
1560
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1561 class BooleanHTMLProperty(HTMLProperty):
3971
ff3a8b7d1819 security fixes
Richard Jones <richard@users.sourceforge.net>
parents: 3968
diff changeset
1562 def plain(self, escape=0):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1563 """ Render a "plain" representation of the property
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1564 """
3117
460eb0209a9e Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents: 3104
diff changeset
1565 if not self.is_view_ok():
3164
24476db8872f nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents: 3159
diff changeset
1566 return self._('[hidden]')
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1567
1289
257f0ab00d50 bugfix in boolean templating
Richard Jones <richard@users.sourceforge.net>
parents: 1284
diff changeset
1568 if self._value is None:
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1569 return ''
3354
201dbcf63a30 use translation for boolean property rendering [SF#1225152]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3338
diff changeset
1570 return self._value and self._("Yes") or self._("No")
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1571
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1572 def field(self):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1573 """ Render a form edit field for the property
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1574
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1575 If not editable, just display the value via plain().
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1576 """
2113
30aeb17e5b04 Boolean HTML templating was broken
Richard Jones <richard@users.sourceforge.net>
parents: 2106
diff changeset
1577 if not self.is_edit_ok():
3971
ff3a8b7d1819 security fixes
Richard Jones <richard@users.sourceforge.net>
parents: 3968
diff changeset
1578 return self.plain(escape=1)
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1579
3151
6feac4fcf883 Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3127
diff changeset
1580 value = self._value
6feac4fcf883 Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3127
diff changeset
1581 if isinstance(value, str) or isinstance(value, unicode):
6feac4fcf883 Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3127
diff changeset
1582 value = value.strip().lower() in ('checked', 'yes', 'true',
6feac4fcf883 Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3127
diff changeset
1583 'on', '1')
6feac4fcf883 Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3127
diff changeset
1584
6feac4fcf883 Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3127
diff changeset
1585 checked = value and "checked" or ""
6feac4fcf883 Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3127
diff changeset
1586 if value:
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1587 s = self.input(type="radio", name=self._formname, value="yes",
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1588 checked="checked")
3354
201dbcf63a30 use translation for boolean property rendering [SF#1225152]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3338
diff changeset
1589 s += self._('Yes')
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1590 s +=self.input(type="radio", name=self._formname, value="no")
3354
201dbcf63a30 use translation for boolean property rendering [SF#1225152]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3338
diff changeset
1591 s += self._('No')
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1592 else:
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1593 s = self.input(type="radio", name=self._formname, value="yes")
3354
201dbcf63a30 use translation for boolean property rendering [SF#1225152]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3338
diff changeset
1594 s += self._('Yes')
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1595 s +=self.input(type="radio", name=self._formname, value="no",
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1596 checked="checked")
3354
201dbcf63a30 use translation for boolean property rendering [SF#1225152]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3338
diff changeset
1597 s += self._('No')
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1598 return s
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1599
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1600 class DateHTMLProperty(HTMLProperty):
2956
4511fd6c5dbf format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2884
diff changeset
1601
4511fd6c5dbf format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2884
diff changeset
1602 _marker = []
4511fd6c5dbf format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2884
diff changeset
1603
2314
7c8d2e9a0566 fix DateHTMLProperty so local() can override user timezone [SF#953678]
Richard Jones <richard@users.sourceforge.net>
parents: 2289
diff changeset
1604 def __init__(self, client, classname, nodeid, prop, name, value,
7c8d2e9a0566 fix DateHTMLProperty so local() can override user timezone [SF#953678]
Richard Jones <richard@users.sourceforge.net>
parents: 2289
diff changeset
1605 anonymous=0, offset=None):
7c8d2e9a0566 fix DateHTMLProperty so local() can override user timezone [SF#953678]
Richard Jones <richard@users.sourceforge.net>
parents: 2289
diff changeset
1606 HTMLProperty.__init__(self, client, classname, nodeid, prop, name,
7c8d2e9a0566 fix DateHTMLProperty so local() can override user timezone [SF#953678]
Richard Jones <richard@users.sourceforge.net>
parents: 2289
diff changeset
1607 value, anonymous=anonymous)
3151
6feac4fcf883 Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3127
diff changeset
1608 if self._value and not (isinstance(self._value, str) or
6feac4fcf883 Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3127
diff changeset
1609 isinstance(self._value, unicode)):
2561
0dd3dca6bd01 always use translation service set in the tracker client instance;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2558
diff changeset
1610 self._value.setTranslator(self._client.translator)
2314
7c8d2e9a0566 fix DateHTMLProperty so local() can override user timezone [SF#953678]
Richard Jones <richard@users.sourceforge.net>
parents: 2289
diff changeset
1611 self._offset = offset
3383
c1c67c62b699 applied patch [SF#236087]
Richard Jones <richard@users.sourceforge.net>
parents: 3369
diff changeset
1612 if self._offset is None :
c1c67c62b699 applied patch [SF#236087]
Richard Jones <richard@users.sourceforge.net>
parents: 3369
diff changeset
1613 self._offset = self._prop.offset (self._db)
2314
7c8d2e9a0566 fix DateHTMLProperty so local() can override user timezone [SF#953678]
Richard Jones <richard@users.sourceforge.net>
parents: 2289
diff changeset
1614
3971
ff3a8b7d1819 security fixes
Richard Jones <richard@users.sourceforge.net>
parents: 3968
diff changeset
1615 def plain(self, escape=0):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1616 """ Render a "plain" representation of the property
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1617 """
3117
460eb0209a9e Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents: 3104
diff changeset
1618 if not self.is_view_ok():
3164
24476db8872f nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents: 3159
diff changeset
1619 return self._('[hidden]')
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1620
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
1621 if self._value is None:
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1622 return ''
2314
7c8d2e9a0566 fix DateHTMLProperty so local() can override user timezone [SF#953678]
Richard Jones <richard@users.sourceforge.net>
parents: 2289
diff changeset
1623 if self._offset is None:
7c8d2e9a0566 fix DateHTMLProperty so local() can override user timezone [SF#953678]
Richard Jones <richard@users.sourceforge.net>
parents: 2289
diff changeset
1624 offset = self._db.getUserTimezone()
7c8d2e9a0566 fix DateHTMLProperty so local() can override user timezone [SF#953678]
Richard Jones <richard@users.sourceforge.net>
parents: 2289
diff changeset
1625 else:
7c8d2e9a0566 fix DateHTMLProperty so local() can override user timezone [SF#953678]
Richard Jones <richard@users.sourceforge.net>
parents: 2289
diff changeset
1626 offset = self._offset
7c8d2e9a0566 fix DateHTMLProperty so local() can override user timezone [SF#953678]
Richard Jones <richard@users.sourceforge.net>
parents: 2289
diff changeset
1627 return str(self._value.local(offset))
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1628
2580
e90d63c7eceb fixed DateHTMLProperty for invalid date entry [SF#986538]
Richard Jones <richard@users.sourceforge.net>
parents: 2574
diff changeset
1629 def now(self, str_interval=None):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1630 """ Return the current time.
1436
2f6647cf5345 bugger, dropping support for "+" special char
Richard Jones <richard@users.sourceforge.net>
parents: 1421
diff changeset
1631
2f6647cf5345 bugger, dropping support for "+" special char
Richard Jones <richard@users.sourceforge.net>
parents: 1421
diff changeset
1632 This is useful for defaulting a new value. Returns a
2f6647cf5345 bugger, dropping support for "+" special char
Richard Jones <richard@users.sourceforge.net>
parents: 1421
diff changeset
1633 DateHTMLProperty.
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1634 """
3117
460eb0209a9e Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents: 3104
diff changeset
1635 if not self.is_view_ok():
3164
24476db8872f nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents: 3159
diff changeset
1636 return self._('[hidden]')
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1637
3040
14322134dcef fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents: 3006
diff changeset
1638 ret = date.Date('.', translator=self._client)
2471
31cd032291c5 new templating features
Richard Jones <richard@users.sourceforge.net>
parents: 2466
diff changeset
1639
3040
14322134dcef fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents: 3006
diff changeset
1640 if isinstance(str_interval, basestring):
14322134dcef fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents: 3006
diff changeset
1641 sign = 1
14322134dcef fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents: 3006
diff changeset
1642 if str_interval[0] == '-':
14322134dcef fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents: 3006
diff changeset
1643 sign = -1
14322134dcef fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents: 3006
diff changeset
1644 str_interval = str_interval[1:]
14322134dcef fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents: 3006
diff changeset
1645 interval = date.Interval(str_interval, translator=self._client)
14322134dcef fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents: 3006
diff changeset
1646 if sign > 0:
14322134dcef fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents: 3006
diff changeset
1647 ret = ret + interval
14322134dcef fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents: 3006
diff changeset
1648 else:
14322134dcef fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents: 3006
diff changeset
1649 ret = ret - interval
2520
0914d72bb15b fix single string split into three separate MsgIDs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2471
diff changeset
1650
2037
35ed1560ba2b missed one
Richard Jones <richard@users.sourceforge.net>
parents: 2036
diff changeset
1651 return DateHTMLProperty(self._client, self._classname, self._nodeid,
2471
31cd032291c5 new templating features
Richard Jones <richard@users.sourceforge.net>
parents: 2466
diff changeset
1652 self._prop, self._formname, ret)
1436
2f6647cf5345 bugger, dropping support for "+" special char
Richard Jones <richard@users.sourceforge.net>
parents: 1421
diff changeset
1653
3649
12633662ff63 include the popcal in Date field editing and search fields by default
Richard Jones <richard@users.sourceforge.net>
parents: 3644
diff changeset
1654 def field(self, size=30, default=None, format=_marker, popcal=True):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1655 """Render a form edit field for the property
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1656
2956
4511fd6c5dbf format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2884
diff changeset
1657 If not editable, just display the value via plain().
4511fd6c5dbf format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2884
diff changeset
1658
3649
12633662ff63 include the popcal in Date field editing and search fields by default
Richard Jones <richard@users.sourceforge.net>
parents: 3644
diff changeset
1659 If "popcal" then include the Javascript calendar editor.
12633662ff63 include the popcal in Date field editing and search fields by default
Richard Jones <richard@users.sourceforge.net>
parents: 3644
diff changeset
1660 Default=yes.
12633662ff63 include the popcal in Date field editing and search fields by default
Richard Jones <richard@users.sourceforge.net>
parents: 3644
diff changeset
1661
2956
4511fd6c5dbf format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2884
diff changeset
1662 The format string is a standard python strftime format string.
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1663 """
2956
4511fd6c5dbf format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2884
diff changeset
1664 if not self.is_edit_ok():
4511fd6c5dbf format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2884
diff changeset
1665 if format is self._marker:
3971
ff3a8b7d1819 security fixes
Richard Jones <richard@users.sourceforge.net>
parents: 3968
diff changeset
1666 return self.plain(escape=1)
2956
4511fd6c5dbf format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2884
diff changeset
1667 else:
4511fd6c5dbf format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2884
diff changeset
1668 return self.pretty(format)
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1669
3151
6feac4fcf883 Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3127
diff changeset
1670 value = self._value
6feac4fcf883 Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3127
diff changeset
1671
6feac4fcf883 Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3127
diff changeset
1672 if value is None:
2471
31cd032291c5 new templating features
Richard Jones <richard@users.sourceforge.net>
parents: 2466
diff changeset
1673 if default is None:
31cd032291c5 new templating features
Richard Jones <richard@users.sourceforge.net>
parents: 2466
diff changeset
1674 raw_value = None
31cd032291c5 new templating features
Richard Jones <richard@users.sourceforge.net>
parents: 2466
diff changeset
1675 else:
31cd032291c5 new templating features
Richard Jones <richard@users.sourceforge.net>
parents: 2466
diff changeset
1676 if isinstance(default, basestring):
3832
bbc977e1cd2c Fix handling of defaults for date fields
Richard Jones <richard@users.sourceforge.net>
parents: 3785
diff changeset
1677 raw_value = date.Date(default, translator=self._client)
2471
31cd032291c5 new templating features
Richard Jones <richard@users.sourceforge.net>
parents: 2466
diff changeset
1678 elif isinstance(default, date.Date):
31cd032291c5 new templating features
Richard Jones <richard@users.sourceforge.net>
parents: 2466
diff changeset
1679 raw_value = default
3040
14322134dcef fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents: 3006
diff changeset
1680 elif isinstance(default, DateHTMLProperty):
14322134dcef fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents: 3006
diff changeset
1681 raw_value = default._value
2471
31cd032291c5 new templating features
Richard Jones <richard@users.sourceforge.net>
parents: 2466
diff changeset
1682 else:
3164
24476db8872f nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents: 3159
diff changeset
1683 raise ValueError, self._('default value for '
2520
0914d72bb15b fix single string split into three separate MsgIDs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2471
diff changeset
1684 'DateHTMLProperty must be either DateHTMLProperty '
2580
e90d63c7eceb fixed DateHTMLProperty for invalid date entry [SF#986538]
Richard Jones <richard@users.sourceforge.net>
parents: 2574
diff changeset
1685 'or string date representation.')
3151
6feac4fcf883 Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3127
diff changeset
1686 elif isinstance(value, str) or isinstance(value, unicode):
6feac4fcf883 Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3127
diff changeset
1687 # most likely erroneous input to be passed back to user
3782
51c07c04d258 clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents: 3779
diff changeset
1688 if isinstance(value, unicode): value = value.encode('utf8')
3151
6feac4fcf883 Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3127
diff changeset
1689 return self.input(name=self._formname, value=value, size=size)
2471
31cd032291c5 new templating features
Richard Jones <richard@users.sourceforge.net>
parents: 2466
diff changeset
1690 else:
3151
6feac4fcf883 Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3127
diff changeset
1691 raw_value = value
2471
31cd032291c5 new templating features
Richard Jones <richard@users.sourceforge.net>
parents: 2466
diff changeset
1692
31cd032291c5 new templating features
Richard Jones <richard@users.sourceforge.net>
parents: 2466
diff changeset
1693 if raw_value is None:
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1694 value = ''
3151
6feac4fcf883 Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3127
diff changeset
1695 elif isinstance(raw_value, str) or isinstance(raw_value, unicode):
2956
4511fd6c5dbf format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2884
diff changeset
1696 if format is self._marker:
4511fd6c5dbf format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2884
diff changeset
1697 value = raw_value
4511fd6c5dbf format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2884
diff changeset
1698 else:
4511fd6c5dbf format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2884
diff changeset
1699 value = date.Date(raw_value).pretty(format)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1700 else:
3383
c1c67c62b699 applied patch [SF#236087]
Richard Jones <richard@users.sourceforge.net>
parents: 3369
diff changeset
1701 if self._offset is None :
c1c67c62b699 applied patch [SF#236087]
Richard Jones <richard@users.sourceforge.net>
parents: 3369
diff changeset
1702 offset = self._db.getUserTimezone()
c1c67c62b699 applied patch [SF#236087]
Richard Jones <richard@users.sourceforge.net>
parents: 3369
diff changeset
1703 else :
c1c67c62b699 applied patch [SF#236087]
Richard Jones <richard@users.sourceforge.net>
parents: 3369
diff changeset
1704 offset = self._offset
c1c67c62b699 applied patch [SF#236087]
Richard Jones <richard@users.sourceforge.net>
parents: 3369
diff changeset
1705 value = raw_value.local(offset)
2956
4511fd6c5dbf format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2884
diff changeset
1706 if format is not self._marker:
4511fd6c5dbf format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2884
diff changeset
1707 value = value.pretty(format)
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1708
3649
12633662ff63 include the popcal in Date field editing and search fields by default
Richard Jones <richard@users.sourceforge.net>
parents: 3644
diff changeset
1709 s = self.input(name=self._formname, value=value, size=size)
12633662ff63 include the popcal in Date field editing and search fields by default
Richard Jones <richard@users.sourceforge.net>
parents: 3644
diff changeset
1710 if popcal:
12633662ff63 include the popcal in Date field editing and search fields by default
Richard Jones <richard@users.sourceforge.net>
parents: 3644
diff changeset
1711 s += self.popcal()
12633662ff63 include the popcal in Date field editing and search fields by default
Richard Jones <richard@users.sourceforge.net>
parents: 3644
diff changeset
1712 return s
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1713
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1714 def reldate(self, pretty=1):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1715 """ Render the interval between the date and now.
1124
1fc1f92c5f31 more doc, bugfix in Batch
Richard Jones <richard@users.sourceforge.net>
parents: 1123
diff changeset
1716
1fc1f92c5f31 more doc, bugfix in Batch
Richard Jones <richard@users.sourceforge.net>
parents: 1123
diff changeset
1717 If the "pretty" flag is true, then make the display pretty.
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1718 """
3117
460eb0209a9e Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents: 3104
diff changeset
1719 if not self.is_view_ok():
3164
24476db8872f nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents: 3159
diff changeset
1720 return self._('[hidden]')
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1721
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
1722 if not self._value:
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1723 return ''
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1724
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1725 # figure the interval
2524
736115d374f2 use client instance to translate Date and Interval objects
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2520
diff changeset
1726 interval = self._value - date.Date('.', translator=self._client)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1727 if pretty:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1728 return interval.pretty()
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1729 return str(interval)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1730
1453
b72f422d1e5e better handling of format param
Richard Jones <richard@users.sourceforge.net>
parents: 1451
diff changeset
1731 def pretty(self, format=_marker):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1732 """ Render the date in a pretty format (eg. month names, spaces).
1272
cae50587fb96 expose the Date.pretty method to templating
Richard Jones <richard@users.sourceforge.net>
parents: 1270
diff changeset
1733
cae50587fb96 expose the Date.pretty method to templating
Richard Jones <richard@users.sourceforge.net>
parents: 1270
diff changeset
1734 The format string is a standard python strftime format string.
cae50587fb96 expose the Date.pretty method to templating
Richard Jones <richard@users.sourceforge.net>
parents: 1270
diff changeset
1735 Note that if the day is zero, and appears at the start of the
cae50587fb96 expose the Date.pretty method to templating
Richard Jones <richard@users.sourceforge.net>
parents: 1270
diff changeset
1736 string, then it'll be stripped from the output. This is handy
3479
86d6131847e8 timezone now applied to date for pretty-format [SF#1406861]
Richard Jones <richard@users.sourceforge.net>
parents: 3472
diff changeset
1737 for the situation when a date only specifies a month and a year.
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1738 """
3117
460eb0209a9e Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents: 3104
diff changeset
1739 if not self.is_view_ok():
3164
24476db8872f nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents: 3159
diff changeset
1740 return self._('[hidden]')
3509
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1741
3479
86d6131847e8 timezone now applied to date for pretty-format [SF#1406861]
Richard Jones <richard@users.sourceforge.net>
parents: 3472
diff changeset
1742 if self._offset is None:
86d6131847e8 timezone now applied to date for pretty-format [SF#1406861]
Richard Jones <richard@users.sourceforge.net>
parents: 3472
diff changeset
1743 offset = self._db.getUserTimezone()
86d6131847e8 timezone now applied to date for pretty-format [SF#1406861]
Richard Jones <richard@users.sourceforge.net>
parents: 3472
diff changeset
1744 else:
86d6131847e8 timezone now applied to date for pretty-format [SF#1406861]
Richard Jones <richard@users.sourceforge.net>
parents: 3472
diff changeset
1745 offset = self._offset
3509
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1746
2956
4511fd6c5dbf format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2884
diff changeset
1747 if not self._value:
4511fd6c5dbf format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2884
diff changeset
1748 return ''
4511fd6c5dbf format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2884
diff changeset
1749 elif format is not self._marker:
3479
86d6131847e8 timezone now applied to date for pretty-format [SF#1406861]
Richard Jones <richard@users.sourceforge.net>
parents: 3472
diff changeset
1750 return self._value.local(offset).pretty(format)
1453
b72f422d1e5e better handling of format param
Richard Jones <richard@users.sourceforge.net>
parents: 1451
diff changeset
1751 else:
3479
86d6131847e8 timezone now applied to date for pretty-format [SF#1406861]
Richard Jones <richard@users.sourceforge.net>
parents: 3472
diff changeset
1752 return self._value.local(offset).pretty()
1272
cae50587fb96 expose the Date.pretty method to templating
Richard Jones <richard@users.sourceforge.net>
parents: 1270
diff changeset
1753
1320
3758a5af985f Lots of little fixes in this update:
Richard Jones <richard@users.sourceforge.net>
parents: 1289
diff changeset
1754 def local(self, offset):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1755 """ Return the date/time as a local (timezone offset) date/time.
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1756 """
3117
460eb0209a9e Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents: 3104
diff changeset
1757 if not self.is_view_ok():
3164
24476db8872f nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents: 3159
diff changeset
1758 return self._('[hidden]')
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1759
2036
bc5ff0519b8b fixed bug in args to new DateHTMLProperty in the local() method [SF#901444]
Richard Jones <richard@users.sourceforge.net>
parents: 2031
diff changeset
1760 return DateHTMLProperty(self._client, self._classname, self._nodeid,
2314
7c8d2e9a0566 fix DateHTMLProperty so local() can override user timezone [SF#953678]
Richard Jones <richard@users.sourceforge.net>
parents: 2289
diff changeset
1761 self._prop, self._formname, self._value, offset=offset)
1320
3758a5af985f Lots of little fixes in this update:
Richard Jones <richard@users.sourceforge.net>
parents: 1289
diff changeset
1762
3710
2862cb0d9be4 default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents: 3702
diff changeset
1763 def popcal(self, width=300, height=200, label="(cal)",
3292
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
1764 form="itemSynopsis"):
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
1765 """Generate a link to a calendar pop-up window.
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
1766
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
1767 item: HTMLProperty e.g.: context.deadline
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
1768 """
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
1769 if self.isset():
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
1770 date = "&date=%s"%self._value
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
1771 else :
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
1772 date = ""
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
1773 return ('<a class="classhelp" href="javascript:help_window('
4052
f8ba421ee4b0 Quote ampersands in URLs.
Stefan Seefeld <stefan@seefeld.name>
parents: 4051
diff changeset
1774 "'%s?@template=calendar&amp;property=%s&amp;form=%s%s', %d, %d)"
3292
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
1775 '">%s</a>'%(self._classname, self._name, form, date, width,
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
1776 height, label))
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
1777
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1778 class IntervalHTMLProperty(HTMLProperty):
2389
2ff93cee9c63 StaticTranslationService got methods gettext() and ngettext()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2377
diff changeset
1779 def __init__(self, client, classname, nodeid, prop, name, value,
2ff93cee9c63 StaticTranslationService got methods gettext() and ngettext()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2377
diff changeset
1780 anonymous=0):
2ff93cee9c63 StaticTranslationService got methods gettext() and ngettext()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2377
diff changeset
1781 HTMLProperty.__init__(self, client, classname, nodeid, prop,
2ff93cee9c63 StaticTranslationService got methods gettext() and ngettext()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2377
diff changeset
1782 name, value, anonymous)
3338
afe094d2daed fix handling of invalid interval input
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3332
diff changeset
1783 if self._value and not isinstance(self._value, (str, unicode)):
2561
0dd3dca6bd01 always use translation service set in the tracker client instance;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2558
diff changeset
1784 self._value.setTranslator(self._client.translator)
2389
2ff93cee9c63 StaticTranslationService got methods gettext() and ngettext()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2377
diff changeset
1785
3971
ff3a8b7d1819 security fixes
Richard Jones <richard@users.sourceforge.net>
parents: 3968
diff changeset
1786 def plain(self, escape=0):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1787 """ Render a "plain" representation of the property
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1788 """
3117
460eb0209a9e Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents: 3104
diff changeset
1789 if not self.is_view_ok():
3164
24476db8872f nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents: 3159
diff changeset
1790 return self._('[hidden]')
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1791
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
1792 if self._value is None:
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1793 return ''
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
1794 return str(self._value)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1795
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1796 def pretty(self):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1797 """ Render the interval in a pretty format (eg. "yesterday")
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1798 """
3117
460eb0209a9e Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents: 3104
diff changeset
1799 if not self.is_view_ok():
3164
24476db8872f nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents: 3159
diff changeset
1800 return self._('[hidden]')
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1801
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
1802 return self._value.pretty()
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1803
3710
2862cb0d9be4 default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents: 3702
diff changeset
1804 def field(self, size=30):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1805 """ Render a form edit field for the property
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1806
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1807 If not editable, just display the value via plain().
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1808 """
3040
14322134dcef fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents: 3006
diff changeset
1809 if not self.is_edit_ok():
3971
ff3a8b7d1819 security fixes
Richard Jones <richard@users.sourceforge.net>
parents: 3968
diff changeset
1810 return self.plain(escape=1)
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1811
3782
51c07c04d258 clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents: 3779
diff changeset
1812 value = self._value
51c07c04d258 clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents: 3779
diff changeset
1813 if value is None:
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1814 value = ''
3782
51c07c04d258 clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents: 3779
diff changeset
1815
51c07c04d258 clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents: 3779
diff changeset
1816 return self.input(name=self._formname, value=value, size=size)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1817
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1818 class LinkHTMLProperty(HTMLProperty):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1819 """ Link HTMLProperty
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1820 Include the above as well as being able to access the class
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1821 information. Stringifying the object itself results in the value
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1822 from the item being displayed. Accessing attributes of this object
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1823 result in the appropriate entry from the class being queried for the
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1824 property accessed (so item/assignedto/name would look up the user
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1825 entry identified by the assignedto property on item, and then the
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1826 name property of that user)
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1827 """
1447
6118d4498db3 added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents: 1441
diff changeset
1828 def __init__(self, *args, **kw):
6118d4498db3 added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents: 1441
diff changeset
1829 HTMLProperty.__init__(self, *args, **kw)
1323
80eef084069a Fix to handle bad form submissions, Links and the magic -1 form value.
Richard Jones <richard@users.sourceforge.net>
parents: 1322
diff changeset
1830 # if we're representing a form value, then the -1 from the form really
80eef084069a Fix to handle bad form submissions, Links and the magic -1 form value.
Richard Jones <richard@users.sourceforge.net>
parents: 1322
diff changeset
1831 # should be a None
80eef084069a Fix to handle bad form submissions, Links and the magic -1 form value.
Richard Jones <richard@users.sourceforge.net>
parents: 1322
diff changeset
1832 if str(self._value) == '-1':
80eef084069a Fix to handle bad form submissions, Links and the magic -1 form value.
Richard Jones <richard@users.sourceforge.net>
parents: 1322
diff changeset
1833 self._value = None
80eef084069a Fix to handle bad form submissions, Links and the magic -1 form value.
Richard Jones <richard@users.sourceforge.net>
parents: 1322
diff changeset
1834
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1835 def __getattr__(self, attr):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1836 """ return a new HTMLItem """
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
1837 if not self._value:
3394
5c7ff95fecad work around pagetemplate oddity
Richard Jones <richard@users.sourceforge.net>
parents: 3383
diff changeset
1838 # handle a special page templates lookup
5c7ff95fecad work around pagetemplate oddity
Richard Jones <richard@users.sourceforge.net>
parents: 3383
diff changeset
1839 if attr == '__render_with_namespace__':
5c7ff95fecad work around pagetemplate oddity
Richard Jones <richard@users.sourceforge.net>
parents: 3383
diff changeset
1840 def nothing(*args, **kw):
5c7ff95fecad work around pagetemplate oddity
Richard Jones <richard@users.sourceforge.net>
parents: 3383
diff changeset
1841 return ''
5c7ff95fecad work around pagetemplate oddity
Richard Jones <richard@users.sourceforge.net>
parents: 3383
diff changeset
1842 return nothing
3164
24476db8872f nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents: 3159
diff changeset
1843 msg = self._('Attempt to look up %(attr)s on a missing value')
24476db8872f nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents: 3159
diff changeset
1844 return MissingValue(msg%locals())
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
1845 i = HTMLItem(self._client, self._prop.classname, self._value)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1846 return getattr(i, attr)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1847
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1848 def plain(self, escape=0):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1849 """ Render a "plain" representation of the property
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1850 """
3117
460eb0209a9e Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents: 3104
diff changeset
1851 if not self.is_view_ok():
3164
24476db8872f nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents: 3159
diff changeset
1852 return self._('[hidden]')
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1853
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
1854 if self._value is None:
1099
7362dc1f0226 Made "creator" property a String like it should be (we can't lookup()
Richard Jones <richard@users.sourceforge.net>
parents: 1097
diff changeset
1855 return ''
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
1856 linkcl = self._db.classes[self._prop.classname]
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1857 k = linkcl.labelprop(1)
3936
63d58cc1394a make LinkHTMLProperty handle non-existing keys (patch [SF#1815895])
Richard Jones <richard@users.sourceforge.net>
parents: 3909
diff changeset
1858 if num_re.match(self._value):
4058
3057092623e1 Robustify (Multi)linkHTMLProperty.plain.
Stefan Seefeld <stefan@seefeld.name>
parents: 4057
diff changeset
1859 try:
3057092623e1 Robustify (Multi)linkHTMLProperty.plain.
Stefan Seefeld <stefan@seefeld.name>
parents: 4057
diff changeset
1860 value = str(linkcl.get(self._value, k))
3057092623e1 Robustify (Multi)linkHTMLProperty.plain.
Stefan Seefeld <stefan@seefeld.name>
parents: 4057
diff changeset
1861 except IndexError:
3057092623e1 Robustify (Multi)linkHTMLProperty.plain.
Stefan Seefeld <stefan@seefeld.name>
parents: 4057
diff changeset
1862 value = self._value
3936
63d58cc1394a make LinkHTMLProperty handle non-existing keys (patch [SF#1815895])
Richard Jones <richard@users.sourceforge.net>
parents: 3909
diff changeset
1863 else :
63d58cc1394a make LinkHTMLProperty handle non-existing keys (patch [SF#1815895])
Richard Jones <richard@users.sourceforge.net>
parents: 3909
diff changeset
1864 value = self._value
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1865 if escape:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1866 value = cgi.escape(value)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1867 return value
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1868
1134
16874c9b86ad generic item editing
Richard Jones <richard@users.sourceforge.net>
parents: 1133
diff changeset
1869 def field(self, showid=0, size=None):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1870 """ Render a form edit field for the property
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1871
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1872 If not editable, just display the value via plain().
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1873 """
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1874 if not self.is_edit_ok():
3971
ff3a8b7d1819 security fixes
Richard Jones <richard@users.sourceforge.net>
parents: 3968
diff changeset
1875 return self.plain(escape=1)
1322
c0546b95aad1 finished off handling of retired flag in filter() [SF#635260]
Richard Jones <richard@users.sourceforge.net>
parents: 1320
diff changeset
1876
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1877 # edit field
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1878 linkcl = self._db.getclass(self._prop.classname)
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1879 if self._value is None:
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1880 value = ''
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1881 else:
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1882 k = linkcl.getkey()
3936
63d58cc1394a make LinkHTMLProperty handle non-existing keys (patch [SF#1815895])
Richard Jones <richard@users.sourceforge.net>
parents: 3909
diff changeset
1883 if k and num_re.match(self._value):
2116
1ef1b050b785 fix Link HTML field()
Richard Jones <richard@users.sourceforge.net>
parents: 2113
diff changeset
1884 value = linkcl.get(self._value, k)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1885 else:
2116
1ef1b050b785 fix Link HTML field()
Richard Jones <richard@users.sourceforge.net>
parents: 2113
diff changeset
1886 value = self._value
3782
51c07c04d258 clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents: 3779
diff changeset
1887 return self.input(name=self._formname, value=value, size=size)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1888
3470
fd32170475f5 allow preselection of values in templating menu()s (patch [SF#1396085])
Richard Jones <richard@users.sourceforge.net>
parents: 3461
diff changeset
1889 def menu(self, size=None, height=None, showid=0, additional=[], value=None,
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1890 sort_on=None, **conditions):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1891 """ Render a form select list for this property
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1892
3127
021b131bd816 doc fixes, one more fix to the permissions-in-listings fix
Richard Jones <richard@users.sourceforge.net>
parents: 3126
diff changeset
1893 "size" is used to limit the length of the list labels
021b131bd816 doc fixes, one more fix to the permissions-in-listings fix
Richard Jones <richard@users.sourceforge.net>
parents: 3126
diff changeset
1894 "height" is used to set the <select> tag's "size" attribute
021b131bd816 doc fixes, one more fix to the permissions-in-listings fix
Richard Jones <richard@users.sourceforge.net>
parents: 3126
diff changeset
1895 "showid" includes the item ids in the list labels
3470
fd32170475f5 allow preselection of values in templating menu()s (patch [SF#1396085])
Richard Jones <richard@users.sourceforge.net>
parents: 3461
diff changeset
1896 "value" specifies which item is pre-selected
3127
021b131bd816 doc fixes, one more fix to the permissions-in-listings fix
Richard Jones <richard@users.sourceforge.net>
parents: 3126
diff changeset
1897 "additional" lists properties which should be included in the
021b131bd816 doc fixes, one more fix to the permissions-in-listings fix
Richard Jones <richard@users.sourceforge.net>
parents: 3126
diff changeset
1898 label
021b131bd816 doc fixes, one more fix to the permissions-in-listings fix
Richard Jones <richard@users.sourceforge.net>
parents: 3126
diff changeset
1899 "sort_on" indicates the property to sort the list on as
3361
64cc03598c8a fixed templating menu() sort_on handling [SF#1221936]
Richard Jones <richard@users.sourceforge.net>
parents: 3357
diff changeset
1900 (direction, property) where direction is '+' or '-'. A
64cc03598c8a fixed templating menu() sort_on handling [SF#1221936]
Richard Jones <richard@users.sourceforge.net>
parents: 3357
diff changeset
1901 single string with the direction prepended may be used.
64cc03598c8a fixed templating menu() sort_on handling [SF#1221936]
Richard Jones <richard@users.sourceforge.net>
parents: 3357
diff changeset
1902 For example: ('-', 'order'), '+name'.
3270
e4607e12d030 ignore sorting errors in MultilinkHTMLProperty instantiation [SF#1177602]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3253
diff changeset
1903
3127
021b131bd816 doc fixes, one more fix to the permissions-in-listings fix
Richard Jones <richard@users.sourceforge.net>
parents: 3126
diff changeset
1904 The remaining keyword arguments are used as conditions for
021b131bd816 doc fixes, one more fix to the permissions-in-listings fix
Richard Jones <richard@users.sourceforge.net>
parents: 3126
diff changeset
1905 filtering the items in the list - they're passed as the
021b131bd816 doc fixes, one more fix to the permissions-in-listings fix
Richard Jones <richard@users.sourceforge.net>
parents: 3126
diff changeset
1906 "filterspec" argument to a Class.filter() call.
021b131bd816 doc fixes, one more fix to the permissions-in-listings fix
Richard Jones <richard@users.sourceforge.net>
parents: 3126
diff changeset
1907
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1908 If not editable, just display the value via plain().
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1909 """
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1910 if not self.is_edit_ok():
3971
ff3a8b7d1819 security fixes
Richard Jones <richard@users.sourceforge.net>
parents: 3968
diff changeset
1911 return self.plain(escape=1)
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1912
4043
32965347a663 Allow 'no value' to be selected in LinkHTMLProperty.menu()
Stefan Seefeld <stefan@seefeld.name>
parents: 4042
diff changeset
1913 # Since None indicates the default, we need another way to
32965347a663 Allow 'no value' to be selected in LinkHTMLProperty.menu()
Stefan Seefeld <stefan@seefeld.name>
parents: 4042
diff changeset
1914 # indicate "no selection". We use -1 for this purpose, as
32965347a663 Allow 'no value' to be selected in LinkHTMLProperty.menu()
Stefan Seefeld <stefan@seefeld.name>
parents: 4042
diff changeset
1915 # that is the value we use when submitting a form without the
32965347a663 Allow 'no value' to be selected in LinkHTMLProperty.menu()
Stefan Seefeld <stefan@seefeld.name>
parents: 4042
diff changeset
1916 # value set.
3470
fd32170475f5 allow preselection of values in templating menu()s (patch [SF#1396085])
Richard Jones <richard@users.sourceforge.net>
parents: 3461
diff changeset
1917 if value is None:
fd32170475f5 allow preselection of values in templating menu()s (patch [SF#1396085])
Richard Jones <richard@users.sourceforge.net>
parents: 3461
diff changeset
1918 value = self._value
4043
32965347a663 Allow 'no value' to be selected in LinkHTMLProperty.menu()
Stefan Seefeld <stefan@seefeld.name>
parents: 4042
diff changeset
1919 elif value == '-1':
32965347a663 Allow 'no value' to be selected in LinkHTMLProperty.menu()
Stefan Seefeld <stefan@seefeld.name>
parents: 4042
diff changeset
1920 value = None
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1921
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
1922 linkcl = self._db.getclass(self._prop.classname)
1468
f57759a5ee1a Better form name mangling, doesn't confuse other things like generic editing.
Richard Jones <richard@users.sourceforge.net>
parents: 1467
diff changeset
1923 l = ['<select name="%s">'%self._formname]
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1924 k = linkcl.labelprop(1)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1925 s = ''
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1926 if value is None:
1952
c40ed9113285 Applied Stefan Seefeld's html4/xhtml patch with some changes.
Richard Jones <richard@users.sourceforge.net>
parents: 1932
diff changeset
1927 s = 'selected="selected" '
2396
39cdddd313ca HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2390
diff changeset
1928 l.append(self._('<option %svalue="-1">- no selection -</option>')%s)
3363
7bc1e9c42a26 allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents: 3361
diff changeset
1929
3361
64cc03598c8a fixed templating menu() sort_on handling [SF#1221936]
Richard Jones <richard@users.sourceforge.net>
parents: 3357
diff changeset
1930 if sort_on is not None:
64cc03598c8a fixed templating menu() sort_on handling [SF#1221936]
Richard Jones <richard@users.sourceforge.net>
parents: 3357
diff changeset
1931 if not isinstance(sort_on, tuple):
64cc03598c8a fixed templating menu() sort_on handling [SF#1221936]
Richard Jones <richard@users.sourceforge.net>
parents: 3357
diff changeset
1932 if sort_on[0] in '+-':
64cc03598c8a fixed templating menu() sort_on handling [SF#1221936]
Richard Jones <richard@users.sourceforge.net>
parents: 3357
diff changeset
1933 sort_on = (sort_on[0], sort_on[1:])
64cc03598c8a fixed templating menu() sort_on handling [SF#1221936]
Richard Jones <richard@users.sourceforge.net>
parents: 3357
diff changeset
1934 else:
64cc03598c8a fixed templating menu() sort_on handling [SF#1221936]
Richard Jones <richard@users.sourceforge.net>
parents: 3357
diff changeset
1935 sort_on = ('+', sort_on)
2327
36ae1b14aaab remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2324
diff changeset
1936 else:
4032
a73bac81eda2 Fix issue2550500
Stefan Seefeld <stefan@seefeld.name>
parents: 4010
diff changeset
1937 sort_on = ('+', linkcl.orderprop())
3363
7bc1e9c42a26 allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents: 3361
diff changeset
1938
3565
32343bfc3da0 add permission filter to menu() implementations [SF#1431188]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3562
diff changeset
1939 options = [opt
32343bfc3da0 add permission filter to menu() implementations [SF#1431188]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3562
diff changeset
1940 for opt in linkcl.filter(None, conditions, sort_on, (None, None))
32343bfc3da0 add permission filter to menu() implementations [SF#1431188]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3562
diff changeset
1941 if self._db.security.hasPermission("View", self._client.userid,
3594
b5b6a6f7743a fix bug in menu() permission filter [SF#1444440]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3584
diff changeset
1942 linkcl.classname, itemid=opt)]
1322
c0546b95aad1 finished off handling of retired flag in filter() [SF#635260]
Richard Jones <richard@users.sourceforge.net>
parents: 1320
diff changeset
1943
c0546b95aad1 finished off handling of retired flag in filter() [SF#635260]
Richard Jones <richard@users.sourceforge.net>
parents: 1320
diff changeset
1944 # make sure we list the current value if it's retired
3151
6feac4fcf883 Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3127
diff changeset
1945 if value and value not in options:
6feac4fcf883 Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3127
diff changeset
1946 options.insert(0, value)
1322
c0546b95aad1 finished off handling of retired flag in filter() [SF#635260]
Richard Jones <richard@users.sourceforge.net>
parents: 1320
diff changeset
1947
4053
f2030089dac6 Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents: 4052
diff changeset
1948 if additional:
f2030089dac6 Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents: 4052
diff changeset
1949 additional_fns = []
f2030089dac6 Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents: 4052
diff changeset
1950 props = linkcl.getprops()
f2030089dac6 Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents: 4052
diff changeset
1951 for propname in additional:
f2030089dac6 Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents: 4052
diff changeset
1952 prop = props[propname]
f2030089dac6 Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents: 4052
diff changeset
1953 if isinstance(prop, hyperdb.Link):
f2030089dac6 Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents: 4052
diff changeset
1954 cl = self._db.getclass(prop.classname)
f2030089dac6 Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents: 4052
diff changeset
1955 labelprop = cl.labelprop()
f2030089dac6 Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents: 4052
diff changeset
1956 fn = lambda optionid: cl.get(linkcl.get(optionid,
f2030089dac6 Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents: 4052
diff changeset
1957 propname),
f2030089dac6 Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents: 4052
diff changeset
1958 labelprop)
f2030089dac6 Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents: 4052
diff changeset
1959 else:
f2030089dac6 Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents: 4052
diff changeset
1960 fn = lambda optionid: linkcl.get(optionid, propname)
f2030089dac6 Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents: 4052
diff changeset
1961 additional_fns.append(fn)
4115
d61066deae67 handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents: 4112
diff changeset
1962
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1963 for optionid in options:
1169
7b448a2425fd bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents: 1163
diff changeset
1964 # get the option value, and if it's None use an empty string
7b448a2425fd bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents: 1163
diff changeset
1965 option = linkcl.get(optionid, k) or ''
7b448a2425fd bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents: 1163
diff changeset
1966
7b448a2425fd bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents: 1163
diff changeset
1967 # figure if this option is selected
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1968 s = ''
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1969 if value in [optionid, option]:
1952
c40ed9113285 Applied Stefan Seefeld's html4/xhtml patch with some changes.
Richard Jones <richard@users.sourceforge.net>
parents: 1932
diff changeset
1970 s = 'selected="selected" '
1169
7b448a2425fd bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents: 1163
diff changeset
1971
7b448a2425fd bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents: 1163
diff changeset
1972 # figure the label
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1973 if showid:
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
1974 lab = '%s%s: %s'%(self._prop.classname, optionid, option)
3151
6feac4fcf883 Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3127
diff changeset
1975 elif not option:
6feac4fcf883 Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3127
diff changeset
1976 lab = '%s%s'%(self._prop.classname, optionid)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1977 else:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1978 lab = option
1169
7b448a2425fd bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents: 1163
diff changeset
1979
7b448a2425fd bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents: 1163
diff changeset
1980 # truncate if it's too long
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1981 if size is not None and len(lab) > size:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1982 lab = lab[:size-3] + '...'
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1983 if additional:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1984 m = []
4053
f2030089dac6 Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents: 4052
diff changeset
1985 for fn in additional_fns:
f2030089dac6 Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents: 4052
diff changeset
1986 m.append(str(fn(optionid)))
f2030089dac6 Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents: 4052
diff changeset
1987 lab = lab + ' (%s)'%', '.join(m)
1169
7b448a2425fd bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents: 1163
diff changeset
1988
7b448a2425fd bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents: 1163
diff changeset
1989 # and generate
3903
a90fa2e08a0a LinkHTMLProperty wasn't translating menus
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3893
diff changeset
1990 lab = cgi.escape(self._(lab))
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1991 l.append('<option %svalue="%s">%s</option>'%(s, optionid, lab))
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1992 l.append('</select>')
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1993 return '\n'.join(l)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1994 # def checklist(self, ...)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1995
3194
f887e55edc94 replaced MutlilinkIterator with multilinkGenerator (thanks Bob Ippolito)
Richard Jones <richard@users.sourceforge.net>
parents: 3188
diff changeset
1996
3126
a2889d22db4a the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents: 3117
diff changeset
1997
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1998 class MultilinkHTMLProperty(HTMLProperty):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1999 """ Multilink HTMLProperty
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2000
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2001 Also be iterable, returning a wrapper object like the Link case for
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2002 each entry in the multilink.
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2003 """
1931
f1e5e5115c29 Always sort MultilinkHTMLProperty in the correct order...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1917
diff changeset
2004 def __init__(self, *args, **kwargs):
f1e5e5115c29 Always sort MultilinkHTMLProperty in the correct order...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1917
diff changeset
2005 HTMLProperty.__init__(self, *args, **kwargs)
f1e5e5115c29 Always sort MultilinkHTMLProperty in the correct order...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1917
diff changeset
2006 if self._value:
3270
e4607e12d030 ignore sorting errors in MultilinkHTMLProperty instantiation [SF#1177602]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3253
diff changeset
2007 display_value = lookupIds(self._db, self._prop, self._value,
3860
c672b15ddae6 - fix id-lookup in case we already *know* that the value is an id (in
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3857
diff changeset
2008 fail_ok=1, do_lookup=False)
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
2009 sortfun = make_sort_function(self._db, self._prop.classname)
3270
e4607e12d030 ignore sorting errors in MultilinkHTMLProperty instantiation [SF#1177602]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3253
diff changeset
2010 # sorting fails if the value contains
e4607e12d030 ignore sorting errors in MultilinkHTMLProperty instantiation [SF#1177602]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3253
diff changeset
2011 # items not yet stored in the database
e4607e12d030 ignore sorting errors in MultilinkHTMLProperty instantiation [SF#1177602]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3253
diff changeset
2012 # ignore these errors to preserve user input
e4607e12d030 ignore sorting errors in MultilinkHTMLProperty instantiation [SF#1177602]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3253
diff changeset
2013 try:
e4607e12d030 ignore sorting errors in MultilinkHTMLProperty instantiation [SF#1177602]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3253
diff changeset
2014 display_value.sort(sortfun)
e4607e12d030 ignore sorting errors in MultilinkHTMLProperty instantiation [SF#1177602]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3253
diff changeset
2015 except:
e4607e12d030 ignore sorting errors in MultilinkHTMLProperty instantiation [SF#1177602]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3253
diff changeset
2016 pass
3271
572bbe7fa236 typo in recent fix
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3270
diff changeset
2017 self._value = display_value
2327
36ae1b14aaab remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2324
diff changeset
2018
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2019 def __len__(self):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2020 """ length of the multilink """
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
2021 return len(self._value)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2022
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2023 def __getattr__(self, attr):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2024 """ no extended attribute accesses make sense here """
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2025 raise AttributeError, attr
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2026
3200
d2b1a946fdf4 change ZTUtils Iterator to always iter() its sequence argument
Richard Jones <richard@users.sourceforge.net>
parents: 3198
diff changeset
2027 def viewableGenerator(self, values):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2028 """Used to iterate over only the View'able items in a class."""
3198
0b7990f54778 fixed broken csv import in roundup.admin module
Richard Jones <richard@users.sourceforge.net>
parents: 3194
diff changeset
2029 check = self._db.security.hasPermission
0b7990f54778 fixed broken csv import in roundup.admin module
Richard Jones <richard@users.sourceforge.net>
parents: 3194
diff changeset
2030 userid = self._client.userid
0b7990f54778 fixed broken csv import in roundup.admin module
Richard Jones <richard@users.sourceforge.net>
parents: 3194
diff changeset
2031 classname = self._prop.classname
0b7990f54778 fixed broken csv import in roundup.admin module
Richard Jones <richard@users.sourceforge.net>
parents: 3194
diff changeset
2032 for value in values:
0b7990f54778 fixed broken csv import in roundup.admin module
Richard Jones <richard@users.sourceforge.net>
parents: 3194
diff changeset
2033 if check('View', userid, classname, itemid=value):
0b7990f54778 fixed broken csv import in roundup.admin module
Richard Jones <richard@users.sourceforge.net>
parents: 3194
diff changeset
2034 yield HTMLItem(self._client, classname, value)
0b7990f54778 fixed broken csv import in roundup.admin module
Richard Jones <richard@users.sourceforge.net>
parents: 3194
diff changeset
2035
3126
a2889d22db4a the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents: 3117
diff changeset
2036 def __iter__(self):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2037 """ iterate and return a new HTMLItem
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2038 """
3200
d2b1a946fdf4 change ZTUtils Iterator to always iter() its sequence argument
Richard Jones <richard@users.sourceforge.net>
parents: 3198
diff changeset
2039 return self.viewableGenerator(self._value)
3126
a2889d22db4a the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents: 3117
diff changeset
2040
a2889d22db4a the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents: 3117
diff changeset
2041 def reverse(self):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2042 """ return the list in reverse order
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2043 """
3126
a2889d22db4a the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents: 3117
diff changeset
2044 l = self._value[:]
a2889d22db4a the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents: 3117
diff changeset
2045 l.reverse()
3200
d2b1a946fdf4 change ZTUtils Iterator to always iter() its sequence argument
Richard Jones <richard@users.sourceforge.net>
parents: 3198
diff changeset
2046 return self.viewableGenerator(l)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2047
2883
1ca5ebe9b16a *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 2880
diff changeset
2048 def sorted(self, property):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2049 """ Return this multilink sorted by the given property """
3126
a2889d22db4a the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents: 3117
diff changeset
2050 value = list(self.__iter__())
2883
1ca5ebe9b16a *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 2880
diff changeset
2051 value.sort(lambda a,b:cmp(a[property], b[property]))
1ca5ebe9b16a *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 2880
diff changeset
2052 return value
1ca5ebe9b16a *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 2880
diff changeset
2053
1103
db787cef1385 handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents: 1099
diff changeset
2054 def __contains__(self, value):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2055 """ Support the "in" operator. We have to make sure the passed-in
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
2056 value is a string first, not a HTMLProperty.
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2057 """
1325
2e5a9fc7abd5 allow StringHTMLProperty in MultilinkHTMLProperty test to work
Richard Jones <richard@users.sourceforge.net>
parents: 1323
diff changeset
2058 return str(value) in self._value
1103
db787cef1385 handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents: 1099
diff changeset
2059
2180
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2170
diff changeset
2060 def isset(self):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2061 """Is my _value not []?"""
2289
6d16b967f89d HTML templating isset() inverted [SF#951779]
Richard Jones <richard@users.sourceforge.net>
parents: 2262
diff changeset
2062 return self._value != []
2180
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2170
diff changeset
2063
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2064 def plain(self, escape=0):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2065 """ Render a "plain" representation of the property
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2066 """
3117
460eb0209a9e Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents: 3104
diff changeset
2067 if not self.is_view_ok():
3164
24476db8872f nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents: 3159
diff changeset
2068 return self._('[hidden]')
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
2069
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
2070 linkcl = self._db.classes[self._prop.classname]
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2071 k = linkcl.labelprop(1)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2072 labels = []
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
2073 for v in self._value:
4058
3057092623e1 Robustify (Multi)linkHTMLProperty.plain.
Stefan Seefeld <stefan@seefeld.name>
parents: 4057
diff changeset
2074 if num_re.match(v):
3057092623e1 Robustify (Multi)linkHTMLProperty.plain.
Stefan Seefeld <stefan@seefeld.name>
parents: 4057
diff changeset
2075 try:
3057092623e1 Robustify (Multi)linkHTMLProperty.plain.
Stefan Seefeld <stefan@seefeld.name>
parents: 4057
diff changeset
2076 label = linkcl.get(v, k)
3057092623e1 Robustify (Multi)linkHTMLProperty.plain.
Stefan Seefeld <stefan@seefeld.name>
parents: 4057
diff changeset
2077 except IndexError:
3057092623e1 Robustify (Multi)linkHTMLProperty.plain.
Stefan Seefeld <stefan@seefeld.name>
parents: 4057
diff changeset
2078 label = None
3057092623e1 Robustify (Multi)linkHTMLProperty.plain.
Stefan Seefeld <stefan@seefeld.name>
parents: 4057
diff changeset
2079 # fall back to designator if label is None
3057092623e1 Robustify (Multi)linkHTMLProperty.plain.
Stefan Seefeld <stefan@seefeld.name>
parents: 4057
diff changeset
2080 if label is None: label = '%s%s'%(self._prop.classname, k)
3057092623e1 Robustify (Multi)linkHTMLProperty.plain.
Stefan Seefeld <stefan@seefeld.name>
parents: 4057
diff changeset
2081 else:
3057092623e1 Robustify (Multi)linkHTMLProperty.plain.
Stefan Seefeld <stefan@seefeld.name>
parents: 4057
diff changeset
2082 label = v
3401
62e4032cb280 merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3394
diff changeset
2083 labels.append(label)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2084 value = ', '.join(labels)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2085 if escape:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2086 value = cgi.escape(value)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2087 return value
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2088
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2089 def field(self, size=30, showid=0):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2090 """ Render a form edit field for the property
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
2091
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
2092 If not editable, just display the value via plain().
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2093 """
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
2094 if not self.is_edit_ok():
3971
ff3a8b7d1819 security fixes
Richard Jones <richard@users.sourceforge.net>
parents: 3968
diff changeset
2095 return self.plain(escape=1)
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
2096
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
2097 linkcl = self._db.getclass(self._prop.classname)
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
2098 value = self._value[:]
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2099 # map the id to the label property
1134
16874c9b86ad generic item editing
Richard Jones <richard@users.sourceforge.net>
parents: 1133
diff changeset
2100 if not linkcl.getkey():
16874c9b86ad generic item editing
Richard Jones <richard@users.sourceforge.net>
parents: 1133
diff changeset
2101 showid=1
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2102 if not showid:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2103 k = linkcl.labelprop(1)
2083
a94eacad51c8 handle bad multilink input at item creation time better [SF#917834]
Richard Jones <richard@users.sourceforge.net>
parents: 2056
diff changeset
2104 value = lookupKeys(linkcl, k, value)
3782
51c07c04d258 clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents: 3779
diff changeset
2105 value = ','.join(value)
51c07c04d258 clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents: 3779
diff changeset
2106 return self.input(name=self._formname, size=size, value=value)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2107
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2108 def menu(self, size=None, height=None, showid=0, additional=[],
3470
fd32170475f5 allow preselection of values in templating menu()s (patch [SF#1396085])
Richard Jones <richard@users.sourceforge.net>
parents: 3461
diff changeset
2109 value=None, sort_on=None, **conditions):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2110 """ Render a form <select> list for this property.
3127
021b131bd816 doc fixes, one more fix to the permissions-in-listings fix
Richard Jones <richard@users.sourceforge.net>
parents: 3126
diff changeset
2111
021b131bd816 doc fixes, one more fix to the permissions-in-listings fix
Richard Jones <richard@users.sourceforge.net>
parents: 3126
diff changeset
2112 "size" is used to limit the length of the list labels
021b131bd816 doc fixes, one more fix to the permissions-in-listings fix
Richard Jones <richard@users.sourceforge.net>
parents: 3126
diff changeset
2113 "height" is used to set the <select> tag's "size" attribute
021b131bd816 doc fixes, one more fix to the permissions-in-listings fix
Richard Jones <richard@users.sourceforge.net>
parents: 3126
diff changeset
2114 "showid" includes the item ids in the list labels
021b131bd816 doc fixes, one more fix to the permissions-in-listings fix
Richard Jones <richard@users.sourceforge.net>
parents: 3126
diff changeset
2115 "additional" lists properties which should be included in the
021b131bd816 doc fixes, one more fix to the permissions-in-listings fix
Richard Jones <richard@users.sourceforge.net>
parents: 3126
diff changeset
2116 label
3470
fd32170475f5 allow preselection of values in templating menu()s (patch [SF#1396085])
Richard Jones <richard@users.sourceforge.net>
parents: 3461
diff changeset
2117 "value" specifies which item is pre-selected
3127
021b131bd816 doc fixes, one more fix to the permissions-in-listings fix
Richard Jones <richard@users.sourceforge.net>
parents: 3126
diff changeset
2118 "sort_on" indicates the property to sort the list on as
3363
7bc1e9c42a26 allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents: 3361
diff changeset
2119 (direction, property) where direction is '+' or '-'. A
7bc1e9c42a26 allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents: 3361
diff changeset
2120 single string with the direction prepended may be used.
7bc1e9c42a26 allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents: 3361
diff changeset
2121 For example: ('-', 'order'), '+name'.
3270
e4607e12d030 ignore sorting errors in MultilinkHTMLProperty instantiation [SF#1177602]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3253
diff changeset
2122
3127
021b131bd816 doc fixes, one more fix to the permissions-in-listings fix
Richard Jones <richard@users.sourceforge.net>
parents: 3126
diff changeset
2123 The remaining keyword arguments are used as conditions for
021b131bd816 doc fixes, one more fix to the permissions-in-listings fix
Richard Jones <richard@users.sourceforge.net>
parents: 3126
diff changeset
2124 filtering the items in the list - they're passed as the
021b131bd816 doc fixes, one more fix to the permissions-in-listings fix
Richard Jones <richard@users.sourceforge.net>
parents: 3126
diff changeset
2125 "filterspec" argument to a Class.filter() call.
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
2126
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
2127 If not editable, just display the value via plain().
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2128 """
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
2129 if not self.is_edit_ok():
3971
ff3a8b7d1819 security fixes
Richard Jones <richard@users.sourceforge.net>
parents: 3968
diff changeset
2130 return self.plain(escape=1)
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
2131
3470
fd32170475f5 allow preselection of values in templating menu()s (patch [SF#1396085])
Richard Jones <richard@users.sourceforge.net>
parents: 3461
diff changeset
2132 if value is None:
fd32170475f5 allow preselection of values in templating menu()s (patch [SF#1396085])
Richard Jones <richard@users.sourceforge.net>
parents: 3461
diff changeset
2133 value = self._value
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2134
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
2135 linkcl = self._db.getclass(self._prop.classname)
3363
7bc1e9c42a26 allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents: 3361
diff changeset
2136
7bc1e9c42a26 allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents: 3361
diff changeset
2137 if sort_on is not None:
7bc1e9c42a26 allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents: 3361
diff changeset
2138 if not isinstance(sort_on, tuple):
7bc1e9c42a26 allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents: 3361
diff changeset
2139 if sort_on[0] in '+-':
7bc1e9c42a26 allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents: 3361
diff changeset
2140 sort_on = (sort_on[0], sort_on[1:])
7bc1e9c42a26 allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents: 3361
diff changeset
2141 else:
7bc1e9c42a26 allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents: 3361
diff changeset
2142 sort_on = ('+', sort_on)
7bc1e9c42a26 allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents: 3361
diff changeset
2143 else:
4032
a73bac81eda2 Fix issue2550500
Stefan Seefeld <stefan@seefeld.name>
parents: 4010
diff changeset
2144 sort_on = ('+', linkcl.orderprop())
3363
7bc1e9c42a26 allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents: 3361
diff changeset
2145
3565
32343bfc3da0 add permission filter to menu() implementations [SF#1431188]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3562
diff changeset
2146 options = [opt
32343bfc3da0 add permission filter to menu() implementations [SF#1431188]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3562
diff changeset
2147 for opt in linkcl.filter(None, conditions, sort_on)
32343bfc3da0 add permission filter to menu() implementations [SF#1431188]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3562
diff changeset
2148 if self._db.security.hasPermission("View", self._client.userid,
3594
b5b6a6f7743a fix bug in menu() permission filter [SF#1444440]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3584
diff changeset
2149 linkcl.classname, itemid=opt)]
4115
d61066deae67 handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents: 4112
diff changeset
2150
4042
8831882170fc Fix height calculation for Multilink.menu()
Stefan Seefeld <stefan@seefeld.name>
parents: 4040
diff changeset
2151 # make sure we list the current values if they're retired
8831882170fc Fix height calculation for Multilink.menu()
Stefan Seefeld <stefan@seefeld.name>
parents: 4040
diff changeset
2152 for val in value:
8831882170fc Fix height calculation for Multilink.menu()
Stefan Seefeld <stefan@seefeld.name>
parents: 4040
diff changeset
2153 if val not in options:
8831882170fc Fix height calculation for Multilink.menu()
Stefan Seefeld <stefan@seefeld.name>
parents: 4040
diff changeset
2154 options.insert(0, val)
8831882170fc Fix height calculation for Multilink.menu()
Stefan Seefeld <stefan@seefeld.name>
parents: 4040
diff changeset
2155
8831882170fc Fix height calculation for Multilink.menu()
Stefan Seefeld <stefan@seefeld.name>
parents: 4040
diff changeset
2156 if not height:
8831882170fc Fix height calculation for Multilink.menu()
Stefan Seefeld <stefan@seefeld.name>
parents: 4040
diff changeset
2157 height = len(options)
8831882170fc Fix height calculation for Multilink.menu()
Stefan Seefeld <stefan@seefeld.name>
parents: 4040
diff changeset
2158 if value:
8831882170fc Fix height calculation for Multilink.menu()
Stefan Seefeld <stefan@seefeld.name>
parents: 4040
diff changeset
2159 # The "no selection" option.
8831882170fc Fix height calculation for Multilink.menu()
Stefan Seefeld <stefan@seefeld.name>
parents: 4040
diff changeset
2160 height += 1
8831882170fc Fix height calculation for Multilink.menu()
Stefan Seefeld <stefan@seefeld.name>
parents: 4040
diff changeset
2161 height = min(height, 7)
1468
f57759a5ee1a Better form name mangling, doesn't confuse other things like generic editing.
Richard Jones <richard@users.sourceforge.net>
parents: 1467
diff changeset
2162 l = ['<select multiple name="%s" size="%s">'%(self._formname, height)]
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2163 k = linkcl.labelprop(1)
1322
c0546b95aad1 finished off handling of retired flag in filter() [SF#635260]
Richard Jones <richard@users.sourceforge.net>
parents: 1320
diff changeset
2164
4054
6070bc4935fa Provide a a "no selection" option; cleanup.
Stefan Seefeld <stefan@seefeld.name>
parents: 4053
diff changeset
2165 if value:
6070bc4935fa Provide a a "no selection" option; cleanup.
Stefan Seefeld <stefan@seefeld.name>
parents: 4053
diff changeset
2166 l.append('<option value="%s">- no selection -</option>'
6070bc4935fa Provide a a "no selection" option; cleanup.
Stefan Seefeld <stefan@seefeld.name>
parents: 4053
diff changeset
2167 % ','.join(['-' + v for v in value]))
1322
c0546b95aad1 finished off handling of retired flag in filter() [SF#635260]
Richard Jones <richard@users.sourceforge.net>
parents: 1320
diff changeset
2168
4053
f2030089dac6 Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents: 4052
diff changeset
2169 if additional:
f2030089dac6 Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents: 4052
diff changeset
2170 additional_fns = []
f2030089dac6 Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents: 4052
diff changeset
2171 props = linkcl.getprops()
f2030089dac6 Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents: 4052
diff changeset
2172 for propname in additional:
f2030089dac6 Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents: 4052
diff changeset
2173 prop = props[propname]
f2030089dac6 Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents: 4052
diff changeset
2174 if isinstance(prop, hyperdb.Link):
f2030089dac6 Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents: 4052
diff changeset
2175 cl = self._db.getclass(prop.classname)
f2030089dac6 Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents: 4052
diff changeset
2176 labelprop = cl.labelprop()
f2030089dac6 Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents: 4052
diff changeset
2177 fn = lambda optionid: cl.get(linkcl.get(optionid,
f2030089dac6 Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents: 4052
diff changeset
2178 propname),
f2030089dac6 Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents: 4052
diff changeset
2179 labelprop)
f2030089dac6 Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents: 4052
diff changeset
2180 else:
f2030089dac6 Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents: 4052
diff changeset
2181 fn = lambda optionid: linkcl.get(optionid, propname)
f2030089dac6 Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents: 4052
diff changeset
2182 additional_fns.append(fn)
4115
d61066deae67 handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents: 4112
diff changeset
2183
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2184 for optionid in options:
1169
7b448a2425fd bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents: 1163
diff changeset
2185 # get the option value, and if it's None use an empty string
7b448a2425fd bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents: 1163
diff changeset
2186 option = linkcl.get(optionid, k) or ''
7b448a2425fd bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents: 1163
diff changeset
2187
7b448a2425fd bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents: 1163
diff changeset
2188 # figure if this option is selected
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2189 s = ''
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2190 if optionid in value or option in value:
1952
c40ed9113285 Applied Stefan Seefeld's html4/xhtml patch with some changes.
Richard Jones <richard@users.sourceforge.net>
parents: 1932
diff changeset
2191 s = 'selected="selected" '
1169
7b448a2425fd bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents: 1163
diff changeset
2192
7b448a2425fd bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents: 1163
diff changeset
2193 # figure the label
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2194 if showid:
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
2195 lab = '%s%s: %s'%(self._prop.classname, optionid, option)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2196 else:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2197 lab = option
1169
7b448a2425fd bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents: 1163
diff changeset
2198 # truncate if it's too long
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2199 if size is not None and len(lab) > size:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2200 lab = lab[:size-3] + '...'
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2201 if additional:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2202 m = []
4053
f2030089dac6 Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents: 4052
diff changeset
2203 for fn in additional_fns:
f2030089dac6 Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents: 4052
diff changeset
2204 m.append(str(fn(optionid)))
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2205 lab = lab + ' (%s)'%', '.join(m)
1169
7b448a2425fd bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents: 1163
diff changeset
2206
7b448a2425fd bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents: 1163
diff changeset
2207 # and generate
3785
edefe9ccfbba allow translation of status/priority menu options [SF#1613976]
Richard Jones <richard@users.sourceforge.net>
parents: 3782
diff changeset
2208 lab = cgi.escape(self._(lab))
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2209 l.append('<option %svalue="%s">%s</option>'%(s, optionid,
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2210 lab))
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2211 l.append('</select>')
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2212 return '\n'.join(l)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2213
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2214 # set the propclasses for HTMLItem
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2215 propclasses = (
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2216 (hyperdb.String, StringHTMLProperty),
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2217 (hyperdb.Number, NumberHTMLProperty),
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2218 (hyperdb.Boolean, BooleanHTMLProperty),
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2219 (hyperdb.Date, DateHTMLProperty),
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2220 (hyperdb.Interval, IntervalHTMLProperty),
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2221 (hyperdb.Password, PasswordHTMLProperty),
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2222 (hyperdb.Link, LinkHTMLProperty),
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2223 (hyperdb.Multilink, MultilinkHTMLProperty),
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2224 )
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2225
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
2226 def make_sort_function(db, classname, sort_on=None):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2227 """Make a sort function for a given class
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2228 """
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2229 linkcl = db.getclass(classname)
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
2230 if sort_on is None:
4032
a73bac81eda2 Fix issue2550500
Stefan Seefeld <stefan@seefeld.name>
parents: 4010
diff changeset
2231 sort_on = linkcl.orderprop()
1931
f1e5e5115c29 Always sort MultilinkHTMLProperty in the correct order...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1917
diff changeset
2232 def sortfunc(a, b):
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2233 return cmp(linkcl.get(a, sort_on), linkcl.get(b, sort_on))
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2234 return sortfunc
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2235
1202
01a143f9382e *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 1201
diff changeset
2236 def handleListCGIValue(value):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2237 """ Value is either a single item or a list of items. Each item has a
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2238 .value that we're actually interested in.
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2239 """
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2240 if isinstance(value, type([])):
1202
01a143f9382e *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 1201
diff changeset
2241 return [value.value for value in value]
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2242 else:
1104
d759c3cb1f06 Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
2243 value = value.value.strip()
d759c3cb1f06 Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
2244 if not value:
d759c3cb1f06 Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
2245 return []
3972
eee76dd4a09f 'Make a Copy' failed with more than one person in nosy list [SF#1906147]
Richard Jones <richard@users.sourceforge.net>
parents: 3971
diff changeset
2246 return [v.strip() for v in value.split(',')]
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2247
1956
1e2cccf6b53b give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents: 1952
diff changeset
2248 class HTMLRequest(HTMLInputMixin):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2249 """The *request*, holding the CGI form and environment.
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2250
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
2251 - "form" the CGI form as a cgi.FieldStorage
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
2252 - "env" the CGI environment variables
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
2253 - "base" the base URL for this instance
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
2254 - "user" a HTMLItem instance for this user
3968
5857cd1a0db9 add language to the "request" template var
Richard Jones <richard@users.sourceforge.net>
parents: 3936
diff changeset
2255 - "language" as determined by the browser or config
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
2256 - "classname" the current classname (possibly None)
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
2257 - "template" the current template (suffix, also possibly None)
1004
5f12d3259f31 logout works better now
Richard Jones <richard@users.sourceforge.net>
parents: 1003
diff changeset
2258
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
2259 Index args:
1004
5f12d3259f31 logout works better now
Richard Jones <richard@users.sourceforge.net>
parents: 1003
diff changeset
2260
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
2261 - "columns" dictionary of the columns to display in an index page
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
2262 - "show" a convenience access to columns - request/show/colname will
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
2263 be true if the columns should be displayed, false otherwise
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
2264 - "sort" index sort column (direction, column name)
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
2265 - "group" index grouping property (direction, column name)
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
2266 - "filter" properties to filter the index on
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
2267 - "filterspec" values to filter the index on
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
2268 - "search_text" text to perform a full-text search on for an index
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2269 """
3505
b294cc477f2c ZRoundup works again [SF#1263842]
Richard Jones <richard@users.sourceforge.net>
parents: 3479
diff changeset
2270 def __repr__(self):
3736
a2d22d0de0bc WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents: 3710
diff changeset
2271 return '<HTMLRequest %r>'%self.__dict__
3505
b294cc477f2c ZRoundup works again [SF#1263842]
Richard Jones <richard@users.sourceforge.net>
parents: 3479
diff changeset
2272
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2273 def __init__(self, client):
1956
1e2cccf6b53b give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents: 1952
diff changeset
2274 # _client is needed by HTMLInputMixin
1e2cccf6b53b give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents: 1952
diff changeset
2275 self._client = self.client = client
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2276
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2277 # easier access vars
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2278 self.form = client.form
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2279 self.env = client.env
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2280 self.base = client.base
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
2281 self.user = HTMLItem(client, 'user', client.userid)
3968
5857cd1a0db9 add language to the "request" template var
Richard Jones <richard@users.sourceforge.net>
parents: 3936
diff changeset
2282 self.language = client.language
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2283
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2284 # store the current class name and action
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2285 self.classname = client.classname
3584
35b35a152b40 fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents: 3582
diff changeset
2286 self.nodeid = client.nodeid
1041
c28603c9f831 Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents: 1030
diff changeset
2287 self.template = client.template
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2288
1421
90bb11eb40dc oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents: 1417
diff changeset
2289 # the special char to use for special vars
90bb11eb40dc oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents: 1417
diff changeset
2290 self.special_char = '@'
90bb11eb40dc oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents: 1417
diff changeset
2291
1956
1e2cccf6b53b give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents: 1952
diff changeset
2292 HTMLInputMixin.__init__(self)
1952
c40ed9113285 Applied Stefan Seefeld's html4/xhtml patch with some changes.
Richard Jones <richard@users.sourceforge.net>
parents: 1932
diff changeset
2293
1097
98f3d41f41d9 query "editing" now working, minus filling the form in with the query params
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
2294 self._post_init()
98f3d41f41d9 query "editing" now working, minus filling the form in with the query params
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
2295
3584
35b35a152b40 fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents: 3582
diff changeset
2296 def current_url(self):
35b35a152b40 fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents: 3582
diff changeset
2297 url = self.base
35b35a152b40 fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents: 3582
diff changeset
2298 if self.classname:
35b35a152b40 fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents: 3582
diff changeset
2299 url += self.classname
35b35a152b40 fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents: 3582
diff changeset
2300 if self.nodeid:
35b35a152b40 fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents: 3582
diff changeset
2301 url += self.nodeid
35b35a152b40 fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents: 3582
diff changeset
2302 args = {}
35b35a152b40 fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents: 3582
diff changeset
2303 if self.template:
35b35a152b40 fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents: 3582
diff changeset
2304 args['@template'] = self.template
35b35a152b40 fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents: 3582
diff changeset
2305 return self.indexargs_url(url, args)
35b35a152b40 fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents: 3582
diff changeset
2306
3696
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2307 def _parse_sort(self, var, name):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2308 """ Parse sort/group options. Append to var
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2309 """
3696
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2310 fields = []
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2311 dirs = []
3698
c2d232b377d5 optimize parsing of sort/group options according to suggestion...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3696
diff changeset
2312 for special in '@:':
3696
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2313 idx = 0
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2314 key = '%s%s%d'%(special, name, idx)
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2315 while key in self.form:
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2316 self.special_char = special
4040
b6a2251394dd Make cgi.templating more fault-tolerant towards invalid requests.
Stefan Seefeld <stefan@seefeld.name>
parents: 4032
diff changeset
2317 fields.append(self.form.getfirst(key))
3696
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2318 dirkey = '%s%sdir%d'%(special, name, idx)
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2319 if dirkey in self.form:
4040
b6a2251394dd Make cgi.templating more fault-tolerant towards invalid requests.
Stefan Seefeld <stefan@seefeld.name>
parents: 4032
diff changeset
2320 dirs.append(self.form.getfirst(dirkey))
3696
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2321 else:
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2322 dirs.append(None)
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2323 idx += 1
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2324 key = '%s%s%d'%(special, name, idx)
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2325 # backward compatible (and query) URL format
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2326 key = special + name
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2327 dirkey = key + 'dir'
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2328 if key in self.form and not fields:
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2329 fields = handleListCGIValue(self.form[key])
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2330 if dirkey in self.form:
4040
b6a2251394dd Make cgi.templating more fault-tolerant towards invalid requests.
Stefan Seefeld <stefan@seefeld.name>
parents: 4032
diff changeset
2331 dirs.append(self.form.getfirst(dirkey))
3698
c2d232b377d5 optimize parsing of sort/group options according to suggestion...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3696
diff changeset
2332 if fields: # only try other special char if nothing found
3696
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2333 break
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2334 for f, d in map(None, fields, dirs):
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2335 if f.startswith('-'):
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2336 var.append(('-', f[1:]))
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2337 elif d:
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2338 var.append(('-', f))
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2339 else:
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2340 var.append(('+', f))
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2341
1097
98f3d41f41d9 query "editing" now working, minus filling the form in with the query params
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
2342 def _post_init(self):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2343 """ Set attributes based on self.form
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2344 """
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2345 # extract the index display information from the form
1016
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
2346 self.columns = []
1436
2f6647cf5345 bugger, dropping support for "+" special char
Richard Jones <richard@users.sourceforge.net>
parents: 1421
diff changeset
2347 for name in ':columns @columns'.split():
1421
90bb11eb40dc oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents: 1417
diff changeset
2348 if self.form.has_key(name):
90bb11eb40dc oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents: 1417
diff changeset
2349 self.special_char = name[0]
90bb11eb40dc oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents: 1417
diff changeset
2350 self.columns = handleListCGIValue(self.form[name])
90bb11eb40dc oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents: 1417
diff changeset
2351 break
2983
9614a101b68f Stuff from the train ride this morning:
Richard Jones <richard@users.sourceforge.net>
parents: 2962
diff changeset
2352 self.show = support.TruthDict(self.columns)
1002
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
2353
3696
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2354 # sorting and grouping
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2355 self.sort = []
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2356 self.group = []
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2357 self._parse_sort(self.sort, 'sort')
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2358 self._parse_sort(self.group, 'group')
1002
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
2359
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
2360 # filtering
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2361 self.filter = []
1436
2f6647cf5345 bugger, dropping support for "+" special char
Richard Jones <richard@users.sourceforge.net>
parents: 1421
diff changeset
2362 for name in ':filter @filter'.split():
1421
90bb11eb40dc oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents: 1417
diff changeset
2363 if self.form.has_key(name):
90bb11eb40dc oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents: 1417
diff changeset
2364 self.special_char = name[0]
90bb11eb40dc oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents: 1417
diff changeset
2365 self.filter = handleListCGIValue(self.form[name])
90bb11eb40dc oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents: 1417
diff changeset
2366
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2367 self.filterspec = {}
1200
0a7bd082b94a usability improvements in API
Richard Jones <richard@users.sourceforge.net>
parents: 1183
diff changeset
2368 db = self.client.db
1003
f89b8d32291b Hack hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 1002
diff changeset
2369 if self.classname is not None:
3635
53987aa153d2 Transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3610
diff changeset
2370 cls = db.getclass (self.classname)
1003
f89b8d32291b Hack hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 1002
diff changeset
2371 for name in self.filter:
1631
8a908bbad1ef A couple of form value handling changes:
Richard Jones <richard@users.sourceforge.net>
parents: 1591
diff changeset
2372 if not self.form.has_key(name):
8a908bbad1ef A couple of form value handling changes:
Richard Jones <richard@users.sourceforge.net>
parents: 1591
diff changeset
2373 continue
3635
53987aa153d2 Transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3610
diff changeset
2374 prop = cls.get_transitive_prop (name)
1631
8a908bbad1ef A couple of form value handling changes:
Richard Jones <richard@users.sourceforge.net>
parents: 1591
diff changeset
2375 fv = self.form[name]
8a908bbad1ef A couple of form value handling changes:
Richard Jones <richard@users.sourceforge.net>
parents: 1591
diff changeset
2376 if (isinstance(prop, hyperdb.Link) or
8a908bbad1ef A couple of form value handling changes:
Richard Jones <richard@users.sourceforge.net>
parents: 1591
diff changeset
2377 isinstance(prop, hyperdb.Multilink)):
8a908bbad1ef A couple of form value handling changes:
Richard Jones <richard@users.sourceforge.net>
parents: 1591
diff changeset
2378 self.filterspec[name] = lookupIds(db, prop,
8a908bbad1ef A couple of form value handling changes:
Richard Jones <richard@users.sourceforge.net>
parents: 1591
diff changeset
2379 handleListCGIValue(fv))
8a908bbad1ef A couple of form value handling changes:
Richard Jones <richard@users.sourceforge.net>
parents: 1591
diff changeset
2380 else:
8a908bbad1ef A couple of form value handling changes:
Richard Jones <richard@users.sourceforge.net>
parents: 1591
diff changeset
2381 if isinstance(fv, type([])):
8a908bbad1ef A couple of form value handling changes:
Richard Jones <richard@users.sourceforge.net>
parents: 1591
diff changeset
2382 self.filterspec[name] = [v.value for v in fv]
3461
fb82ab9461b0 fix comma-separated ID filter spec in web requests [SF#1396278]
Richard Jones <richard@users.sourceforge.net>
parents: 3401
diff changeset
2383 elif name == 'id':
fb82ab9461b0 fix comma-separated ID filter spec in web requests [SF#1396278]
Richard Jones <richard@users.sourceforge.net>
parents: 3401
diff changeset
2384 # special case "id" property
fb82ab9461b0 fix comma-separated ID filter spec in web requests [SF#1396278]
Richard Jones <richard@users.sourceforge.net>
parents: 3401
diff changeset
2385 self.filterspec[name] = handleListCGIValue(fv)
1003
f89b8d32291b Hack hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 1002
diff changeset
2386 else:
f89b8d32291b Hack hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 1002
diff changeset
2387 self.filterspec[name] = fv.value
1002
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
2388
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
2389 # full-text search argument
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
2390 self.search_text = None
1436
2f6647cf5345 bugger, dropping support for "+" special char
Richard Jones <richard@users.sourceforge.net>
parents: 1421
diff changeset
2391 for name in ':search_text @search_text'.split():
1421
90bb11eb40dc oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents: 1417
diff changeset
2392 if self.form.has_key(name):
90bb11eb40dc oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents: 1417
diff changeset
2393 self.special_char = name[0]
4040
b6a2251394dd Make cgi.templating more fault-tolerant towards invalid requests.
Stefan Seefeld <stefan@seefeld.name>
parents: 4032
diff changeset
2394 self.search_text = self.form.getfirst(name)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2395
1016
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
2396 # pagination - size and start index
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
2397 # figure batch args
3158
cf824afdb76b *cough* nothing to see here
Richard Jones <richard@users.sourceforge.net>
parents: 3157
diff changeset
2398 self.pagesize = 50
1436
2f6647cf5345 bugger, dropping support for "+" special char
Richard Jones <richard@users.sourceforge.net>
parents: 1421
diff changeset
2399 for name in ':pagesize @pagesize'.split():
1421
90bb11eb40dc oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents: 1417
diff changeset
2400 if self.form.has_key(name):
90bb11eb40dc oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents: 1417
diff changeset
2401 self.special_char = name[0]
4115
d61066deae67 handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents: 4112
diff changeset
2402 try:
d61066deae67 handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents: 4112
diff changeset
2403 self.pagesize = int(self.form.getfirst(name))
d61066deae67 handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents: 4112
diff changeset
2404 except ValueError:
d61066deae67 handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents: 4112
diff changeset
2405 # not an integer - ignore
d61066deae67 handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents: 4112
diff changeset
2406 pass
1421
90bb11eb40dc oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents: 1417
diff changeset
2407
90bb11eb40dc oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents: 1417
diff changeset
2408 self.startwith = 0
1436
2f6647cf5345 bugger, dropping support for "+" special char
Richard Jones <richard@users.sourceforge.net>
parents: 1421
diff changeset
2409 for name in ':startwith @startwith'.split():
1421
90bb11eb40dc oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents: 1417
diff changeset
2410 if self.form.has_key(name):
90bb11eb40dc oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents: 1417
diff changeset
2411 self.special_char = name[0]
4115
d61066deae67 handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents: 4112
diff changeset
2412 try:
d61066deae67 handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents: 4112
diff changeset
2413 self.startwith = int(self.form.getfirst(name))
d61066deae67 handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents: 4112
diff changeset
2414 except ValueError:
d61066deae67 handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents: 4112
diff changeset
2415 # not an integer - ignore
d61066deae67 handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents: 4112
diff changeset
2416 pass
1016
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
2417
3549
f6719836e521 allow dispname to be passed to renderWith [SF#1424587]
Richard Jones <richard@users.sourceforge.net>
parents: 3535
diff changeset
2418 # dispname
f6719836e521 allow dispname to be passed to renderWith [SF#1424587]
Richard Jones <richard@users.sourceforge.net>
parents: 3535
diff changeset
2419 if self.form.has_key('@dispname'):
4040
b6a2251394dd Make cgi.templating more fault-tolerant towards invalid requests.
Stefan Seefeld <stefan@seefeld.name>
parents: 4032
diff changeset
2420 self.dispname = self.form.getfirst('@dispname')
3689
c28d94070403 fix: HTMLRequest.dispname must be string,
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3665
diff changeset
2421 else:
c28d94070403 fix: HTMLRequest.dispname must be string,
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3665
diff changeset
2422 self.dispname = None
3549
f6719836e521 allow dispname to be passed to renderWith [SF#1424587]
Richard Jones <richard@users.sourceforge.net>
parents: 3535
diff changeset
2423
1097
98f3d41f41d9 query "editing" now working, minus filling the form in with the query params
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
2424 def updateFromURL(self, url):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2425 """ Parse the URL for query args, and update my attributes using the
1097
98f3d41f41d9 query "editing" now working, minus filling the form in with the query params
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
2426 values.
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2427 """
1693
7218be26cf85 attempt to fix query editing
Richard Jones <richard@users.sourceforge.net>
parents: 1633
diff changeset
2428 env = {'QUERY_STRING': url}
7218be26cf85 attempt to fix query editing
Richard Jones <richard@users.sourceforge.net>
parents: 1633
diff changeset
2429 self.form = cgi.FieldStorage(environ=env)
7218be26cf85 attempt to fix query editing
Richard Jones <richard@users.sourceforge.net>
parents: 1633
diff changeset
2430
1097
98f3d41f41d9 query "editing" now working, minus filling the form in with the query params
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
2431 self._post_init()
98f3d41f41d9 query "editing" now working, minus filling the form in with the query params
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
2432
1016
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
2433 def update(self, kwargs):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2434 """ Update my attributes using the keyword args
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2435 """
1016
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
2436 self.__dict__.update(kwargs)
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
2437 if kwargs.has_key('columns'):
2983
9614a101b68f Stuff from the train ride this morning:
Richard Jones <richard@users.sourceforge.net>
parents: 2962
diff changeset
2438 self.show = support.TruthDict(self.columns)
1016
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
2439
1061
7f9b942128a3 nicer page title
Richard Jones <richard@users.sourceforge.net>
parents: 1051
diff changeset
2440 def description(self):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2441 """ Return a description of the request - handle for the page title.
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2442 """
1096
fa7df238e2d4 More cleaning up of configuration, and the "instance" -> "tracker" renaming.
Richard Jones <richard@users.sourceforge.net>
parents: 1080
diff changeset
2443 s = [self.client.db.config.TRACKER_NAME]
1061
7f9b942128a3 nicer page title
Richard Jones <richard@users.sourceforge.net>
parents: 1051
diff changeset
2444 if self.classname:
7f9b942128a3 nicer page title
Richard Jones <richard@users.sourceforge.net>
parents: 1051
diff changeset
2445 if self.client.nodeid:
7f9b942128a3 nicer page title
Richard Jones <richard@users.sourceforge.net>
parents: 1051
diff changeset
2446 s.append('- %s%s'%(self.classname, self.client.nodeid))
7f9b942128a3 nicer page title
Richard Jones <richard@users.sourceforge.net>
parents: 1051
diff changeset
2447 else:
1123
644d3075c2df more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents: 1122
diff changeset
2448 if self.template == 'item':
644d3075c2df more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents: 1122
diff changeset
2449 s.append('- new %s'%self.classname)
644d3075c2df more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents: 1122
diff changeset
2450 elif self.template == 'index':
644d3075c2df more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents: 1122
diff changeset
2451 s.append('- %s index'%self.classname)
644d3075c2df more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents: 1122
diff changeset
2452 else:
644d3075c2df more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents: 1122
diff changeset
2453 s.append('- %s %s'%(self.classname, self.template))
1061
7f9b942128a3 nicer page title
Richard Jones <richard@users.sourceforge.net>
parents: 1051
diff changeset
2454 else:
7f9b942128a3 nicer page title
Richard Jones <richard@users.sourceforge.net>
parents: 1051
diff changeset
2455 s.append('- home')
7f9b942128a3 nicer page title
Richard Jones <richard@users.sourceforge.net>
parents: 1051
diff changeset
2456 return ' '.join(s)
7f9b942128a3 nicer page title
Richard Jones <richard@users.sourceforge.net>
parents: 1051
diff changeset
2457
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2458 def __str__(self):
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2459 d = {}
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2460 d.update(self.__dict__)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2461 f = ''
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2462 for k in self.form.keys():
1202
01a143f9382e *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 1201
diff changeset
2463 f += '\n %r=%r'%(k,handleListCGIValue(self.form[k]))
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2464 d['form'] = f
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2465 e = ''
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2466 for k,v in self.env.items():
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2467 e += '\n %r=%r'%(k, v)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2468 d['env'] = e
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2469 return """
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2470 form: %(form)s
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2471 base: %(base)r
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2472 classname: %(classname)r
1041
c28603c9f831 Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents: 1030
diff changeset
2473 template: %(template)r
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2474 columns: %(columns)r
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2475 sort: %(sort)r
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2476 group: %(group)r
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2477 filter: %(filter)r
1016
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
2478 search_text: %(search_text)r
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
2479 pagesize: %(pagesize)r
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
2480 startwith: %(startwith)r
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2481 env: %(env)s
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2482 """%d
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2483
1002
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
2484 def indexargs_form(self, columns=1, sort=1, group=1, filter=1,
3159
b2fc512f145d allow suppression of search_text in indexargs_form [SF#1101548]
Richard Jones <richard@users.sourceforge.net>
parents: 3158
diff changeset
2485 filterspec=1, search_text=1):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2486 """ return the current index args as form elements """
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2487 l = []
1421
90bb11eb40dc oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents: 1417
diff changeset
2488 sc = self.special_char
3782
51c07c04d258 clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents: 3779
diff changeset
2489 def add(k, v):
51c07c04d258 clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents: 3779
diff changeset
2490 l.append(self.input(type="hidden", name=k, value=v))
1002
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
2491 if columns and self.columns:
3782
51c07c04d258 clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents: 3779
diff changeset
2492 add(sc+'columns', ','.join(self.columns))
3696
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2493 if sort:
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2494 val = []
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2495 for dir, attr in self.sort:
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2496 if dir == '-':
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2497 val.append('-'+attr)
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2498 else:
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2499 val.append(attr)
3782
51c07c04d258 clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents: 3779
diff changeset
2500 add(sc+'sort', ','.join (val))
3696
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2501 if group:
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2502 val = []
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2503 for dir, attr in self.group:
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2504 if dir == '-':
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2505 val.append('-'+attr)
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2506 else:
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2507 val.append(attr)
3782
51c07c04d258 clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents: 3779
diff changeset
2508 add(sc+'group', ','.join (val))
1002
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
2509 if filter and self.filter:
3782
51c07c04d258 clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents: 3779
diff changeset
2510 add(sc+'filter', ','.join(self.filter))
3068
c4e76c84f43d another fix to indexargs
Richard Jones <richard@users.sourceforge.net>
parents: 3060
diff changeset
2511 if self.classname and filterspec:
4051
047402c4ec9b Handle transitive properties.
Stefan Seefeld <stefan@seefeld.name>
parents: 4043
diff changeset
2512 cls = self.client.db.getclass(self.classname)
1002
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
2513 for k,v in self.filterspec.items():
1353
013ae8c6c8b1 display of saved queries is now performed correctly
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1342
diff changeset
2514 if type(v) == type([]):
4051
047402c4ec9b Handle transitive properties.
Stefan Seefeld <stefan@seefeld.name>
parents: 4043
diff changeset
2515 if isinstance(cls.get_transitive_prop(k), hyperdb.String):
3782
51c07c04d258 clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents: 3779
diff changeset
2516 add(k, ' '.join(v))
3049
393f6ab17c07 handle spaces in String index params in batching [SF#1054224]
Richard Jones <richard@users.sourceforge.net>
parents: 3040
diff changeset
2517 else:
3782
51c07c04d258 clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents: 3779
diff changeset
2518 add(k, ','.join(v))
1353
013ae8c6c8b1 display of saved queries is now performed correctly
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1342
diff changeset
2519 else:
3782
51c07c04d258 clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents: 3779
diff changeset
2520 add(k, v)
3159
b2fc512f145d allow suppression of search_text in indexargs_form [SF#1101548]
Richard Jones <richard@users.sourceforge.net>
parents: 3158
diff changeset
2521 if search_text and self.search_text:
3782
51c07c04d258 clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents: 3779
diff changeset
2522 add(sc+'search_text', self.search_text)
51c07c04d258 clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents: 3779
diff changeset
2523 add(sc+'pagesize', self.pagesize)
51c07c04d258 clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents: 3779
diff changeset
2524 add(sc+'startwith', self.startwith)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2525 return '\n'.join(l)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2526
1124
1fc1f92c5f31 more doc, bugfix in Batch
Richard Jones <richard@users.sourceforge.net>
parents: 1123
diff changeset
2527 def indexargs_url(self, url, args):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2528 """ Embed the current index args in a URL
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2529 """
3104
97aec6907e69 merge from 0.7
Richard Jones <richard@users.sourceforge.net>
parents: 3068
diff changeset
2530 q = urllib.quote
1421
90bb11eb40dc oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents: 1417
diff changeset
2531 sc = self.special_char
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2532 l = ['%s=%s'%(k,v) for k,v in args.items()]
1467
378081f066cc registration is now a two-step process with confirmation from the
Richard Jones <richard@users.sourceforge.net>
parents: 1463
diff changeset
2533
378081f066cc registration is now a two-step process with confirmation from the
Richard Jones <richard@users.sourceforge.net>
parents: 1463
diff changeset
2534 # pull out the special values (prefixed by @ or :)
378081f066cc registration is now a two-step process with confirmation from the
Richard Jones <richard@users.sourceforge.net>
parents: 1463
diff changeset
2535 specials = {}
378081f066cc registration is now a two-step process with confirmation from the
Richard Jones <richard@users.sourceforge.net>
parents: 1463
diff changeset
2536 for key in args.keys():
378081f066cc registration is now a two-step process with confirmation from the
Richard Jones <richard@users.sourceforge.net>
parents: 1463
diff changeset
2537 if key[0] in '@:':
378081f066cc registration is now a two-step process with confirmation from the
Richard Jones <richard@users.sourceforge.net>
parents: 1463
diff changeset
2538 specials[key[1:]] = args[key]
378081f066cc registration is now a two-step process with confirmation from the
Richard Jones <richard@users.sourceforge.net>
parents: 1463
diff changeset
2539
378081f066cc registration is now a two-step process with confirmation from the
Richard Jones <richard@users.sourceforge.net>
parents: 1463
diff changeset
2540 # ok, now handle the specials we received in the request
378081f066cc registration is now a two-step process with confirmation from the
Richard Jones <richard@users.sourceforge.net>
parents: 1463
diff changeset
2541 if self.columns and not specials.has_key('columns'):
1421
90bb11eb40dc oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents: 1417
diff changeset
2542 l.append(sc+'columns=%s'%(','.join(self.columns)))
3696
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2543 if self.sort and not specials.has_key('sort'):
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2544 val = []
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2545 for dir, attr in self.sort:
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2546 if dir == '-':
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2547 val.append('-'+attr)
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2548 else:
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2549 val.append(attr)
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2550 l.append(sc+'sort=%s'%(','.join(val)))
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2551 if self.group and not specials.has_key('group'):
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2552 val = []
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2553 for dir, attr in self.group:
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2554 if dir == '-':
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2555 val.append('-'+attr)
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2556 else:
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2557 val.append(attr)
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2558 l.append(sc+'group=%s'%(','.join(val)))
1467
378081f066cc registration is now a two-step process with confirmation from the
Richard Jones <richard@users.sourceforge.net>
parents: 1463
diff changeset
2559 if self.filter and not specials.has_key('filter'):
1421
90bb11eb40dc oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents: 1417
diff changeset
2560 l.append(sc+'filter=%s'%(','.join(self.filter)))
1467
378081f066cc registration is now a two-step process with confirmation from the
Richard Jones <richard@users.sourceforge.net>
parents: 1463
diff changeset
2561 if self.search_text and not specials.has_key('search_text'):
3104
97aec6907e69 merge from 0.7
Richard Jones <richard@users.sourceforge.net>
parents: 3068
diff changeset
2562 l.append(sc+'search_text=%s'%q(self.search_text))
1467
378081f066cc registration is now a two-step process with confirmation from the
Richard Jones <richard@users.sourceforge.net>
parents: 1463
diff changeset
2563 if not specials.has_key('pagesize'):
378081f066cc registration is now a two-step process with confirmation from the
Richard Jones <richard@users.sourceforge.net>
parents: 1463
diff changeset
2564 l.append(sc+'pagesize=%s'%self.pagesize)
378081f066cc registration is now a two-step process with confirmation from the
Richard Jones <richard@users.sourceforge.net>
parents: 1463
diff changeset
2565 if not specials.has_key('startwith'):
378081f066cc registration is now a two-step process with confirmation from the
Richard Jones <richard@users.sourceforge.net>
parents: 1463
diff changeset
2566 l.append(sc+'startwith=%s'%self.startwith)
378081f066cc registration is now a two-step process with confirmation from the
Richard Jones <richard@users.sourceforge.net>
parents: 1463
diff changeset
2567
378081f066cc registration is now a two-step process with confirmation from the
Richard Jones <richard@users.sourceforge.net>
parents: 1463
diff changeset
2568 # finally, the remainder of the filter args in the request
3068
c4e76c84f43d another fix to indexargs
Richard Jones <richard@users.sourceforge.net>
parents: 3060
diff changeset
2569 if self.classname and self.filterspec:
3635
53987aa153d2 Transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3610
diff changeset
2570 cls = self.client.db.getclass(self.classname)
3068
c4e76c84f43d another fix to indexargs
Richard Jones <richard@users.sourceforge.net>
parents: 3060
diff changeset
2571 for k,v in self.filterspec.items():
c4e76c84f43d another fix to indexargs
Richard Jones <richard@users.sourceforge.net>
parents: 3060
diff changeset
2572 if not args.has_key(k):
c4e76c84f43d another fix to indexargs
Richard Jones <richard@users.sourceforge.net>
parents: 3060
diff changeset
2573 if type(v) == type([]):
3635
53987aa153d2 Transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3610
diff changeset
2574 prop = cls.get_transitive_prop(k)
3909
e89bcb28f683 indexargs_url force ids to int
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3905
diff changeset
2575 if k != 'id' and isinstance(prop, hyperdb.String):
3068
c4e76c84f43d another fix to indexargs
Richard Jones <richard@users.sourceforge.net>
parents: 3060
diff changeset
2576 l.append('%s=%s'%(k, '%20'.join([q(i) for i in v])))
c4e76c84f43d another fix to indexargs
Richard Jones <richard@users.sourceforge.net>
parents: 3060
diff changeset
2577 else:
c4e76c84f43d another fix to indexargs
Richard Jones <richard@users.sourceforge.net>
parents: 3060
diff changeset
2578 l.append('%s=%s'%(k, ','.join([q(i) for i in v])))
3049
393f6ab17c07 handle spaces in String index params in batching [SF#1054224]
Richard Jones <richard@users.sourceforge.net>
parents: 3040
diff changeset
2579 else:
3068
c4e76c84f43d another fix to indexargs
Richard Jones <richard@users.sourceforge.net>
parents: 3060
diff changeset
2580 l.append('%s=%s'%(k, q(v)))
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2581 return '%s?%s'%(url, '&'.join(l))
1124
1fc1f92c5f31 more doc, bugfix in Batch
Richard Jones <richard@users.sourceforge.net>
parents: 1123
diff changeset
2582 indexargs_href = indexargs_url
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2583
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2584 def base_javascript(self):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2585 return """
1824
24819ee5dfbc First steps towards HTML4.01 Strict validation.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1773
diff changeset
2586 <script type="text/javascript">
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2587 submitted = false;
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2588 function submit_once() {
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2589 if (submitted) {
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2590 alert("Your request is being processed.\\nPlease be patient.");
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
2591 event.returnValue = 0; // work-around for IE
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2592 return 0;
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2593 }
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2594 submitted = true;
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2595 return 1;
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2596 }
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2597
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2598 function help_window(helpurl, width, height) {
1204
b862bbf2067a Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents: 1202
diff changeset
2599 HelpWin = window.open('%s' + helpurl, 'RoundupHelpWindow', 'scrollbars=yes,resizable=yes,toolbar=no,height='+height+',width='+width);
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2600 }
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2601 </script>
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2602 """%self.base
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2603
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2604 def batch(self):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2605 """ Return a batch object for results from the "current search"
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2606 """
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2607 filterspec = self.filterspec
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2608 sort = self.sort
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2609 group = self.group
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2610
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2611 # get the list of ids we're batching over
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2612 klass = self.client.db.getclass(self.classname)
1002
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
2613 if self.search_text:
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
2614 matches = self.client.db.indexer.search(
3332
c8cdfa100a9b use unicode for index searches [SF#1195739]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3292
diff changeset
2615 [w.upper().encode("utf-8", "replace") for w in re.findall(
c8cdfa100a9b use unicode for index searches [SF#1195739]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3292
diff changeset
2616 r'(?u)\b\w{2,25}\b',
c8cdfa100a9b use unicode for index searches [SF#1195739]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3292
diff changeset
2617 unicode(self.search_text, "utf-8", "replace")
c8cdfa100a9b use unicode for index searches [SF#1195739]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3292
diff changeset
2618 )], klass)
1002
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
2619 else:
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
2620 matches = None
3126
a2889d22db4a the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents: 3117
diff changeset
2621
a2889d22db4a the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents: 3117
diff changeset
2622 # filter for visibility
a2889d22db4a the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents: 3117
diff changeset
2623 check = self._client.db.security.hasPermission
a2889d22db4a the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents: 3117
diff changeset
2624 userid = self._client.userid
a2889d22db4a the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents: 3117
diff changeset
2625 l = [id for id in klass.filter(matches, filterspec, sort, group)
a2889d22db4a the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents: 3117
diff changeset
2626 if check('View', userid, self.classname, itemid=id)]
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2627
1182
cb35cf3db0e0 don't create instances that aren't used
Richard Jones <richard@users.sourceforge.net>
parents: 1170
diff changeset
2628 # return the batch object, using IDs only
cb35cf3db0e0 don't create instances that aren't used
Richard Jones <richard@users.sourceforge.net>
parents: 1170
diff changeset
2629 return Batch(self.client, l, self.pagesize, self.startwith,
cb35cf3db0e0 don't create instances that aren't used
Richard Jones <richard@users.sourceforge.net>
parents: 1170
diff changeset
2630 classname=self.classname)
1004
5f12d3259f31 logout works better now
Richard Jones <richard@users.sourceforge.net>
parents: 1003
diff changeset
2631
5f12d3259f31 logout works better now
Richard Jones <richard@users.sourceforge.net>
parents: 1003
diff changeset
2632 # extend the standard ZTUtils Batch object to remove dependency on
5f12d3259f31 logout works better now
Richard Jones <richard@users.sourceforge.net>
parents: 1003
diff changeset
2633 # Acquisition and add a couple of useful methods
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2634 class Batch(ZTUtils.Batch):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2635 """ Use me to turn a list of items, or item ids of a given class, into a
1122
ddbc5d1ad94f more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1120
diff changeset
2636 series of batches.
ddbc5d1ad94f more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1120
diff changeset
2637
ddbc5d1ad94f more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1120
diff changeset
2638 ========= ========================================================
ddbc5d1ad94f more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1120
diff changeset
2639 Parameter Usage
ddbc5d1ad94f more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1120
diff changeset
2640 ========= ========================================================
1182
cb35cf3db0e0 don't create instances that aren't used
Richard Jones <richard@users.sourceforge.net>
parents: 1170
diff changeset
2641 sequence a list of HTMLItems or item ids
cb35cf3db0e0 don't create instances that aren't used
Richard Jones <richard@users.sourceforge.net>
parents: 1170
diff changeset
2642 classname if sequence is a list of ids, this is the class of item
1122
ddbc5d1ad94f more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1120
diff changeset
2643 size how big to make the sequence.
ddbc5d1ad94f more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1120
diff changeset
2644 start where to start (0-indexed) in the sequence.
ddbc5d1ad94f more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1120
diff changeset
2645 end where to end (0-indexed) in the sequence.
ddbc5d1ad94f more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1120
diff changeset
2646 orphan if the next batch would contain less items than this
ddbc5d1ad94f more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1120
diff changeset
2647 value, then it is combined with this batch
ddbc5d1ad94f more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1120
diff changeset
2648 overlap the number of items shared between adjacent batches
ddbc5d1ad94f more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1120
diff changeset
2649 ========= ========================================================
ddbc5d1ad94f more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1120
diff changeset
2650
ddbc5d1ad94f more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1120
diff changeset
2651 Attributes: Note that the "start" attribute, unlike the
ddbc5d1ad94f more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1120
diff changeset
2652 argument, is a 1-based index (I know, lame). "first" is the
ddbc5d1ad94f more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1120
diff changeset
2653 0-based index. "length" is the actual number of elements in
ddbc5d1ad94f more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1120
diff changeset
2654 the batch.
ddbc5d1ad94f more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1120
diff changeset
2655
ddbc5d1ad94f more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1120
diff changeset
2656 "sequence_length" is the length of the original, unbatched, sequence.
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2657 """
1122
ddbc5d1ad94f more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1120
diff changeset
2658 def __init__(self, client, sequence, size, start, end=0, orphan=0,
1182
cb35cf3db0e0 don't create instances that aren't used
Richard Jones <richard@users.sourceforge.net>
parents: 1170
diff changeset
2659 overlap=0, classname=None):
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2660 self.client = client
1002
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
2661 self.last_index = self.last_item = None
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
2662 self.current_item = None
1182
cb35cf3db0e0 don't create instances that aren't used
Richard Jones <richard@users.sourceforge.net>
parents: 1170
diff changeset
2663 self.classname = classname
1124
1fc1f92c5f31 more doc, bugfix in Batch
Richard Jones <richard@users.sourceforge.net>
parents: 1123
diff changeset
2664 self.sequence_length = len(sequence)
1122
ddbc5d1ad94f more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1120
diff changeset
2665 ZTUtils.Batch.__init__(self, sequence, size, start, end, orphan,
ddbc5d1ad94f more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1120
diff changeset
2666 overlap)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2667
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2668 # overwrite so we can late-instantiate the HTMLItem instance
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2669 def __getitem__(self, index):
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2670 if index < 0:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2671 if index + self.end < self.first: raise IndexError, index
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2672 return self._sequence[index + self.end]
2327
36ae1b14aaab remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2324
diff changeset
2673
1120
c26471971d18 Exposed the Batch mechanism through the top-level "utils" variable.
Richard Jones <richard@users.sourceforge.net>
parents: 1113
diff changeset
2674 if index >= self.length:
c26471971d18 Exposed the Batch mechanism through the top-level "utils" variable.
Richard Jones <richard@users.sourceforge.net>
parents: 1113
diff changeset
2675 raise IndexError, index
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2676
1002
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
2677 # move the last_item along - but only if the fetched index changes
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
2678 # (for some reason, index 0 is fetched twice)
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
2679 if index != self.last_index:
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
2680 self.last_item = self.current_item
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
2681 self.last_index = index
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
2682
1182
cb35cf3db0e0 don't create instances that aren't used
Richard Jones <richard@users.sourceforge.net>
parents: 1170
diff changeset
2683 item = self._sequence[index + self.first]
cb35cf3db0e0 don't create instances that aren't used
Richard Jones <richard@users.sourceforge.net>
parents: 1170
diff changeset
2684 if self.classname:
cb35cf3db0e0 don't create instances that aren't used
Richard Jones <richard@users.sourceforge.net>
parents: 1170
diff changeset
2685 # map the item ids to instances
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
2686 item = HTMLItem(self.client, self.classname, item)
1182
cb35cf3db0e0 don't create instances that aren't used
Richard Jones <richard@users.sourceforge.net>
parents: 1170
diff changeset
2687 self.current_item = item
cb35cf3db0e0 don't create instances that aren't used
Richard Jones <richard@users.sourceforge.net>
parents: 1170
diff changeset
2688 return item
1002
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
2689
3696
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2690 def propchanged(self, *properties):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2691 """ Detect if one of the properties marked as being a group
3696
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2692 property changed in the last iteration fetch
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2693 """
3369
18f1631c9b85 sort/group by missing values correctly [SF#1198623]
Richard Jones <richard@users.sourceforge.net>
parents: 3363
diff changeset
2694 # we poke directly at the _value here since MissingValue can screw
18f1631c9b85 sort/group by missing values correctly [SF#1198623]
Richard Jones <richard@users.sourceforge.net>
parents: 3363
diff changeset
2695 # us up and cause Nones to compare strangely
3696
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2696 if self.last_item is None:
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2697 return 1
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2698 for property in properties:
3700
9cc2566cc7d9 This isn't really nice, but now grouping by transitive multilinks works.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3699
diff changeset
2699 if property == 'id' or isinstance (self.last_item[property], list):
9cc2566cc7d9 This isn't really nice, but now grouping by transitive multilinks works.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3699
diff changeset
2700 if (str(self.last_item[property]) !=
9cc2566cc7d9 This isn't really nice, but now grouping by transitive multilinks works.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3699
diff changeset
2701 str(self.current_item[property])):
3699
976191d749fb grouping by ID and grouping by transitive multilinks didn't work correctly.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3698
diff changeset
2702 return 1
976191d749fb grouping by ID and grouping by transitive multilinks didn't work correctly.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3698
diff changeset
2703 else:
976191d749fb grouping by ID and grouping by transitive multilinks didn't work correctly.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3698
diff changeset
2704 if (self.last_item[property]._value !=
976191d749fb grouping by ID and grouping by transitive multilinks didn't work correctly.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3698
diff changeset
2705 self.current_item[property]._value):
976191d749fb grouping by ID and grouping by transitive multilinks didn't work correctly.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3698
diff changeset
2706 return 1
1002
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
2707 return 0
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2708
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2709 # override these 'cos we don't have access to acquisition
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2710 def previous(self):
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2711 if self.start == 1:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2712 return None
1122
ddbc5d1ad94f more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1120
diff changeset
2713 return Batch(self.client, self._sequence, self._size,
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2714 self.first - self._size + self.overlap, 0, self.orphan,
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2715 self.overlap)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2716
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2717 def next(self):
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2718 try:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2719 self._sequence[self.end]
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2720 except IndexError:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2721 return None
1122
ddbc5d1ad94f more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1120
diff changeset
2722 return Batch(self.client, self._sequence, self._size,
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2723 self.end - self.overlap, 0, self.orphan, self.overlap)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2724
1120
c26471971d18 Exposed the Batch mechanism through the top-level "utils" variable.
Richard Jones <richard@users.sourceforge.net>
parents: 1113
diff changeset
2725 class TemplatingUtils:
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2726 """ Utilities for templating
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2727 """
1120
c26471971d18 Exposed the Batch mechanism through the top-level "utils" variable.
Richard Jones <richard@users.sourceforge.net>
parents: 1113
diff changeset
2728 def __init__(self, client):
c26471971d18 Exposed the Batch mechanism through the top-level "utils" variable.
Richard Jones <richard@users.sourceforge.net>
parents: 1113
diff changeset
2729 self.client = client
1122
ddbc5d1ad94f more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1120
diff changeset
2730 def Batch(self, sequence, size, start, end=0, orphan=0, overlap=0):
ddbc5d1ad94f more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1120
diff changeset
2731 return Batch(self.client, sequence, size, start, end, orphan,
1120
c26471971d18 Exposed the Batch mechanism through the top-level "utils" variable.
Richard Jones <richard@users.sourceforge.net>
parents: 1113
diff changeset
2732 overlap)
c26471971d18 Exposed the Batch mechanism through the top-level "utils" variable.
Richard Jones <richard@users.sourceforge.net>
parents: 1113
diff changeset
2733
2180
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2170
diff changeset
2734 def url_quote(self, url):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2735 """URL-quote the supplied text."""
2180
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2170
diff changeset
2736 return urllib.quote(url)
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2170
diff changeset
2737
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2170
diff changeset
2738 def html_quote(self, html):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2739 """HTML-quote the supplied text."""
3663
8d5c34204a86 dumb bug in cgi templating utils [SF#1490176]
Richard Jones <richard@users.sourceforge.net>
parents: 3649
diff changeset
2740 return cgi.escape(html)
2180
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2170
diff changeset
2741
2640
b01eca163779 The "type" parameter is supposed to be optional
Richard Jones <richard@users.sourceforge.net>
parents: 2637
diff changeset
2742 def __getattr__(self, name):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2743 """Try the tracker's templating_utils."""
2640
b01eca163779 The "type" parameter is supposed to be optional
Richard Jones <richard@users.sourceforge.net>
parents: 2637
diff changeset
2744 if not hasattr(self.client.instance, 'templating_utils'):
b01eca163779 The "type" parameter is supposed to be optional
Richard Jones <richard@users.sourceforge.net>
parents: 2637
diff changeset
2745 # backwards-compatibility
b01eca163779 The "type" parameter is supposed to be optional
Richard Jones <richard@users.sourceforge.net>
parents: 2637
diff changeset
2746 raise AttributeError, name
b01eca163779 The "type" parameter is supposed to be optional
Richard Jones <richard@users.sourceforge.net>
parents: 2637
diff changeset
2747 if not self.client.instance.templating_utils.has_key(name):
b01eca163779 The "type" parameter is supposed to be optional
Richard Jones <richard@users.sourceforge.net>
parents: 2637
diff changeset
2748 raise AttributeError, name
3006
50b0f8e98247 fix API for templating utils extensions - remove "utils" arg
Richard Jones <richard@users.sourceforge.net>
parents: 2994
diff changeset
2749 return self.client.instance.templating_utils[name]
2640
b01eca163779 The "type" parameter is supposed to be optional
Richard Jones <richard@users.sourceforge.net>
parents: 2637
diff changeset
2750
3292
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2751 def html_calendar(self, request):
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2752 """Generate a HTML calendar.
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2753
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2754 `request` the roundup.request object
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2755 - @template : name of the template
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2756 - form : name of the form to store back the date
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2757 - property : name of the property of the form to store
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2758 back the date
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2759 - date : current date
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2760 - display : when browsing, specifies year and month
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2761
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2762 html will simply be a table.
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2763 """
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2764 date_str = request.form.getfirst("date", ".")
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2765 display = request.form.getfirst("display", date_str)
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2766 template = request.form.getfirst("@template", "calendar")
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2767 form = request.form.getfirst("form")
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2768 property = request.form.getfirst("property")
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2769 curr_date = date.Date(date_str) # to highlight
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2770 display = date.Date(display) # to show
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2771 day = display.day
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2772
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2773 # for navigation
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2774 date_prev_month = display + date.Interval("-1m")
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2775 date_next_month = display + date.Interval("+1m")
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2776 date_prev_year = display + date.Interval("-1y")
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2777 date_next_year = display + date.Interval("+1y")
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2778
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2779 res = []
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2780
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2781 base_link = "%s?@template=%s&property=%s&form=%s&date=%s" % \
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2782 (request.classname, template, property, form, curr_date)
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2783
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2784 # navigation
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2785 # month
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2786 res.append('<table class="calendar"><tr><td>')
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2787 res.append(' <table width="100%" class="calendar_nav"><tr>')
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2788 link = "&display=%s"%date_prev_month
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2789 res.append(' <td><a href="%s&display=%s">&lt;</a></td>'%(base_link,
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2790 date_prev_month))
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2791 res.append(' <td>%s</td>'%calendar.month_name[display.month])
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2792 res.append(' <td><a href="%s&display=%s">&gt;</a></td>'%(base_link,
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2793 date_next_month))
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2794 # spacer
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2795 res.append(' <td width="100%"></td>')
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2796 # year
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2797 res.append(' <td><a href="%s&display=%s">&lt;</a></td>'%(base_link,
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2798 date_prev_year))
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2799 res.append(' <td>%s</td>'%display.year)
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2800 res.append(' <td><a href="%s&display=%s">&gt;</a></td>'%(base_link,
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2801 date_next_year))
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2802 res.append(' </tr></table>')
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2803 res.append(' </td></tr>')
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2804
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2805 # the calendar
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2806 res.append(' <tr><td><table class="calendar_display">')
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2807 res.append(' <tr class="weekdays">')
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2808 for day in calendar.weekheader(3).split():
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2809 res.append(' <td>%s</td>'%day)
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2810 res.append(' </tr>')
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2811 for week in calendar.monthcalendar(display.year, display.month):
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2812 res.append(' <tr>')
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2813 for day in week:
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2814 link = "javascript:form[field].value = '%d-%02d-%02d'; " \
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2815 "window.close ();"%(display.year, display.month, day)
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2816 if (day == curr_date.day and display.month == curr_date.month
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2817 and display.year == curr_date.year):
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2818 # highlight
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2819 style = "today"
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2820 else :
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2821 style = ""
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2822 if day:
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2823 res.append(' <td class="%s"><a href="%s">%s</a></td>'%(
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2824 style, link, day))
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2825 else :
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2826 res.append(' <td></td>')
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2827 res.append(' </tr>')
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2828 res.append('</table></td></tr></table>')
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2829 return "\n".join(res)
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2830
3164
24476db8872f nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents: 3159
diff changeset
2831 class MissingValue:
24476db8872f nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents: 3159
diff changeset
2832 def __init__(self, description, **kwargs):
24476db8872f nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents: 3159
diff changeset
2833 self.__description = description
24476db8872f nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents: 3159
diff changeset
2834 for key, value in kwargs.items():
24476db8872f nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents: 3159
diff changeset
2835 self.__dict__[key] = value
24476db8872f nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents: 3159
diff changeset
2836
24476db8872f nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents: 3159
diff changeset
2837 def __call__(self, *args, **kwargs): return MissingValue(self.__description)
24476db8872f nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents: 3159
diff changeset
2838 def __getattr__(self, name):
24476db8872f nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents: 3159
diff changeset
2839 # This allows assignments which assume all intermediate steps are Null
24476db8872f nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents: 3159
diff changeset
2840 # objects if they don't exist yet.
24476db8872f nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents: 3159
diff changeset
2841 #
24476db8872f nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents: 3159
diff changeset
2842 # For example (with just 'client' defined):
24476db8872f nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents: 3159
diff changeset
2843 #
24476db8872f nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents: 3159
diff changeset
2844 # client.db.config.TRACKER_WEB = 'BASE/'
24476db8872f nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents: 3159
diff changeset
2845 self.__dict__[name] = MissingValue(self.__description)
24476db8872f nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents: 3159
diff changeset
2846 return getattr(self, name)
24476db8872f nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents: 3159
diff changeset
2847
24476db8872f nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents: 3159
diff changeset
2848 def __getitem__(self, key): return self
24476db8872f nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents: 3159
diff changeset
2849 def __nonzero__(self): return 0
24476db8872f nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents: 3159
diff changeset
2850 def __str__(self): return '[%s]'%self.__description
24476db8872f nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents: 3159
diff changeset
2851 def __repr__(self): return '<MissingValue 0x%x "%s">'%(id(self),
24476db8872f nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents: 3159
diff changeset
2852 self.__description)
24476db8872f nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents: 3159
diff changeset
2853 def gettext(self, str): return str
24476db8872f nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents: 3159
diff changeset
2854 _ = gettext
24476db8872f nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents: 3159
diff changeset
2855
2561
0dd3dca6bd01 always use translation service set in the tracker client instance;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2558
diff changeset
2856 # vim: set et sts=4 sw=4 :

Roundup Issue Tracker: http://roundup-tracker.org/