annotate roundup/cgi/templating.py @ 5166:232c74973a56

issue1408570: fix that form values are lost .. on edit exceptions. This occured for example if editing an issue with the classic template and setting 'superseder' to a non-existing issue number. All changes to the form where the original field was non-empty were lost.
author Ralf Schlatterbeck <rsc@runtux.com>
date Mon, 22 Aug 2016 22:19:48 +0200
parents 882fa4d9bead
children fac171f0f27b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
1 """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
2 """
2180
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2170
diff changeset
3
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
4 todo = """
4749
0421390b3094 templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents: 4748
diff changeset
5 - Document parameters to Template.render() method
4727
5033c2ad80a7 templating: Rename LoaderBase.get() to LoaderBase.load() for clarity
anatoly techtonik <techtonik@gmail.com>
parents: 4724
diff changeset
6 - Add tests for Loader.load() method
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
5145
d22eb1d40d0e issue2550701, issue2550891 deal with path traversal issue in TAL based template finding code. Use standard method.
John Rouillard <rouilj@ieee.org>
parents: 5112
diff changeset
23 import cgi, urllib, re, os.path, mimetypes, csv, string
5043
ac0c117cd24c Remove wrap and associated functions from roundup.support
John Kristensen <john@jerrykan.com>
parents: 5006
diff changeset
24 import calendar
ac0c117cd24c Remove wrap and associated functions from roundup.support
John Kristensen <john@jerrykan.com>
parents: 5006
diff changeset
25 import textwrap
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
26
3188
7faae85e1e33 merge from branch
Richard Jones <richard@users.sourceforge.net>
parents: 3183
diff changeset
27 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
28 from roundup import i18n
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
29 from roundup.i18n import _
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
30
4466
f1fe6fd0aa61 Multilinks can be filtered by combining elements with AND, OR and NOT now.
Bernhard Reiter <Bernhard.Reiter@intevation.de>
parents: 4463
diff changeset
31 from KeywordsExpr import render_keywords_expression_editor
f1fe6fd0aa61 Multilinks can be filtered by combining elements with AND, OR and NOT now.
Bernhard Reiter <Bernhard.Reiter@intevation.de>
parents: 4463
diff changeset
32
1016
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
33 try:
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
34 import cPickle as pickle
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
35 except ImportError:
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
36 import pickle
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
37 try:
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
38 import cStringIO as StringIO
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
39 except ImportError:
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
40 import StringIO
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
41 try:
3509
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
42 from StructuredText.StructuredText import HTML as StructuredText
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
43 except ImportError:
3509
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
44 try: # older version
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
45 import StructuredText
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
46 except ImportError:
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
47 StructuredText = None
3862
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
48 try:
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
49 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
50 except ImportError:
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
51 ReStructuredText = None
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
52
1049
Richard Jones <richard@users.sourceforge.net>
parents: 1041
diff changeset
53 # bring in the templating support
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()
2377
a53f87f2488a StaticTranslationService moved here out of the code originating from Zope;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2347
diff changeset
61
a53f87f2488a StaticTranslationService moved here out of the code originating from Zope;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2347
diff changeset
62 ### templating
a53f87f2488a StaticTranslationService moved here out of the code originating from Zope;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2347
diff changeset
63
1068
665730c27d29 nicer template absence error
Richard Jones <richard@users.sourceforge.net>
parents: 1067
diff changeset
64 class NoTemplate(Exception):
665730c27d29 nicer template absence error
Richard Jones <richard@users.sourceforge.net>
parents: 1067
diff changeset
65 pass
665730c27d29 nicer template absence error
Richard Jones <richard@users.sourceforge.net>
parents: 1067
diff changeset
66
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
67 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
68 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
69 self.action = action
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
70 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
71 if translator:
7b248ea0a2e5 add translation to Unauthorised exception; mark missed text for translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2458
diff changeset
72 self._ = translator.gettext
7b248ea0a2e5 add translation to Unauthorised exception; mark missed text for translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2458
diff changeset
73 else:
2561
0dd3dca6bd01 always use translation service set in the tracker client instance;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2558
diff changeset
74 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
75 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
76 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
77 '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
78 '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
79
4747
955860a18e12 templating: Raise exception if configured template engine is unknown
anatoly techtonik <techtonik@gmail.com>
parents: 4743
diff changeset
80
955860a18e12 templating: Raise exception if configured template engine is unknown
anatoly techtonik <techtonik@gmail.com>
parents: 4743
diff changeset
81 # --- Template Loader API
955860a18e12 templating: Raise exception if configured template engine is unknown
anatoly techtonik <techtonik@gmail.com>
parents: 4743
diff changeset
82
4719
05fe39f1d823 API break, bumping version to 1.15.0, renamed TemplatesBase to
anatoly techtonik <techtonik@gmail.com>
parents: 4696
diff changeset
83 class LoaderBase:
4740
fe9568a6cbd6 Untangle template selection logic from template loading functionality.
anatoly techtonik <techtonik@gmail.com>
parents: 4737
diff changeset
84 """ Base for engine-specific template Loader class."""
4743
2d6959f1d2df templating: proof of concept for Jinja2 support. Select 'jinja2'
anatoly techtonik <techtonik@gmail.com>
parents: 4742
diff changeset
85 def __init__(self, dir):
2d6959f1d2df templating: proof of concept for Jinja2 support. Select 'jinja2'
anatoly techtonik <techtonik@gmail.com>
parents: 4742
diff changeset
86 # loaders are given the template directory as a first argument
2d6959f1d2df templating: proof of concept for Jinja2 support. Select 'jinja2'
anatoly techtonik <techtonik@gmail.com>
parents: 4742
diff changeset
87 pass
2d6959f1d2df templating: proof of concept for Jinja2 support. Select 'jinja2'
anatoly techtonik <techtonik@gmail.com>
parents: 4742
diff changeset
88
4748
e339583eae8e templating: rename precompileTemplates to precompile
anatoly techtonik <techtonik@gmail.com>
parents: 4747
diff changeset
89 def precompile(self):
e339583eae8e templating: rename precompileTemplates to precompile
anatoly techtonik <techtonik@gmail.com>
parents: 4747
diff changeset
90 """ This method may be called when tracker is loaded to precompile
e339583eae8e templating: rename precompileTemplates to precompile
anatoly techtonik <techtonik@gmail.com>
parents: 4747
diff changeset
91 templates that support this ability.
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
92 """
4749
0421390b3094 templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents: 4748
diff changeset
93 pass
0421390b3094 templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents: 4748
diff changeset
94
0421390b3094 templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents: 4748
diff changeset
95 def load(self, tplname):
0421390b3094 templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents: 4748
diff changeset
96 """ Load template and return template object with render() method.
0421390b3094 templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents: 4748
diff changeset
97
0421390b3094 templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents: 4748
diff changeset
98 "tplname" is a template name. For filesystem loaders it is a
0421390b3094 templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents: 4748
diff changeset
99 filename without extensions, typically in the "classname.view"
0421390b3094 templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents: 4748
diff changeset
100 format.
0421390b3094 templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents: 4748
diff changeset
101 """
0421390b3094 templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents: 4748
diff changeset
102 raise NotImplementedError
0421390b3094 templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents: 4748
diff changeset
103
0421390b3094 templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents: 4748
diff changeset
104 def check(self, name):
0421390b3094 templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents: 4748
diff changeset
105 """ Check if template with the given name exists. Should return
0421390b3094 templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents: 4748
diff changeset
106 false if template can not be found.
0421390b3094 templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents: 4748
diff changeset
107 """
0421390b3094 templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents: 4748
diff changeset
108 raise NotImplementedError
0421390b3094 templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents: 4748
diff changeset
109
0421390b3094 templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents: 4748
diff changeset
110 class TALLoaderBase(LoaderBase):
0421390b3094 templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents: 4748
diff changeset
111 """ Common methods for the legacy TAL loaders."""
0421390b3094 templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents: 4748
diff changeset
112
0421390b3094 templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents: 4748
diff changeset
113 def __init__(self, dir):
0421390b3094 templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents: 4748
diff changeset
114 self.dir = dir
0421390b3094 templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents: 4748
diff changeset
115
0421390b3094 templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents: 4748
diff changeset
116 def _find(self, name):
0421390b3094 templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents: 4748
diff changeset
117 """ Find template, return full path and filename of the
0421390b3094 templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents: 4748
diff changeset
118 template if it is found, None otherwise."""
5145
d22eb1d40d0e issue2550701, issue2550891 deal with path traversal issue in TAL based template finding code. Use standard method.
John Rouillard <rouilj@ieee.org>
parents: 5112
diff changeset
119 realsrc = os.path.realpath(self.dir)
4749
0421390b3094 templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents: 4748
diff changeset
120 for extension in ['', '.html', '.xml']:
0421390b3094 templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents: 4748
diff changeset
121 f = name + extension
5145
d22eb1d40d0e issue2550701, issue2550891 deal with path traversal issue in TAL based template finding code. Use standard method.
John Rouillard <rouilj@ieee.org>
parents: 5112
diff changeset
122 src = os.path.join(realsrc, f)
d22eb1d40d0e issue2550701, issue2550891 deal with path traversal issue in TAL based template finding code. Use standard method.
John Rouillard <rouilj@ieee.org>
parents: 5112
diff changeset
123 realpath = os.path.realpath(src)
d22eb1d40d0e issue2550701, issue2550891 deal with path traversal issue in TAL based template finding code. Use standard method.
John Rouillard <rouilj@ieee.org>
parents: 5112
diff changeset
124 if string.find(realpath, realsrc) != 0:
d22eb1d40d0e issue2550701, issue2550891 deal with path traversal issue in TAL based template finding code. Use standard method.
John Rouillard <rouilj@ieee.org>
parents: 5112
diff changeset
125 return # will raise invalid template
4749
0421390b3094 templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents: 4748
diff changeset
126 if os.path.exists(src):
0421390b3094 templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents: 4748
diff changeset
127 return (src, f)
0421390b3094 templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents: 4748
diff changeset
128
0421390b3094 templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents: 4748
diff changeset
129 def check(self, name):
0421390b3094 templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents: 4748
diff changeset
130 return bool(self._find(name))
0421390b3094 templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents: 4748
diff changeset
131
0421390b3094 templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents: 4748
diff changeset
132 def precompile(self):
0421390b3094 templating: Move common TAL methods to TALLoaderBase class
anatoly techtonik <techtonik@gmail.com>
parents: 4748
diff changeset
133 """ Precompile templates in load directory by loading them """
1204
b862bbf2067a Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents: 1202
diff changeset
134 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
135 # skip subdirs
6acc315570eb Templates.precompileTemplates: skip files without ".html" extension
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2827
diff changeset
136 if os.path.isdir(filename):
6acc315570eb Templates.precompileTemplates: skip files without ".html" extension
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2827
diff changeset
137 continue
2961
Richard Jones <richard@users.sourceforge.net>
parents: 2959
diff changeset
138
2959
fa5410ae581d allow use of XML templates again
Richard Jones <richard@users.sourceforge.net>
parents: 2956
diff changeset
139 # 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
140 for extension in '.html', '.xml':
fa5410ae581d allow use of XML templates again
Richard Jones <richard@users.sourceforge.net>
parents: 2956
diff changeset
141 if filename.endswith(extension):
fa5410ae581d allow use of XML templates again
Richard Jones <richard@users.sourceforge.net>
parents: 2956
diff changeset
142 break
fa5410ae581d allow use of XML templates again
Richard Jones <richard@users.sourceforge.net>
parents: 2956
diff changeset
143 else:
fa5410ae581d allow use of XML templates again
Richard Jones <richard@users.sourceforge.net>
parents: 2956
diff changeset
144 continue
fa5410ae581d allow use of XML templates again
Richard Jones <richard@users.sourceforge.net>
parents: 2956
diff changeset
145
2961
Richard Jones <richard@users.sourceforge.net>
parents: 2959
diff changeset
146 # remove extension
2959
fa5410ae581d allow use of XML templates again
Richard Jones <richard@users.sourceforge.net>
parents: 2956
diff changeset
147 filename = filename[:-len(extension)]
4740
fe9568a6cbd6 Untangle template selection logic from template loading functionality.
anatoly techtonik <techtonik@gmail.com>
parents: 4737
diff changeset
148 self.load(filename)
fe9568a6cbd6 Untangle template selection logic from template loading functionality.
anatoly techtonik <techtonik@gmail.com>
parents: 4737
diff changeset
149
1204
b862bbf2067a Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents: 1202
diff changeset
150 def __getitem__(self, name):
4724
98b727b6f7f8 Self-focument API in templating.py loader class
anatoly techtonik <techtonik@gmail.com>
parents: 4721
diff changeset
151 """Special method to access templates by loader['name']"""
1204
b862bbf2067a Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents: 1202
diff changeset
152 try:
4740
fe9568a6cbd6 Untangle template selection logic from template loading functionality.
anatoly techtonik <techtonik@gmail.com>
parents: 4737
diff changeset
153 return self.load(name)
1204
b862bbf2067a Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents: 1202
diff changeset
154 except NoTemplate, message:
b862bbf2067a Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents: 1202
diff changeset
155 raise KeyError, message
1016
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
156
4750
12b029655c05 Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents: 4749
diff changeset
157 class MultiLoader(LoaderBase):
12b029655c05 Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents: 4749
diff changeset
158 def __init__(self):
12b029655c05 Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents: 4749
diff changeset
159 self.loaders = []
12b029655c05 Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents: 4749
diff changeset
160
12b029655c05 Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents: 4749
diff changeset
161 def add_loader(self, loader):
12b029655c05 Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents: 4749
diff changeset
162 self.loaders.append(loader)
12b029655c05 Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents: 4749
diff changeset
163
12b029655c05 Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents: 4749
diff changeset
164 def check(self, name):
12b029655c05 Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents: 4749
diff changeset
165 for l in self.loaders:
12b029655c05 Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents: 4749
diff changeset
166 if l.check(name):
12b029655c05 Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents: 4749
diff changeset
167 return True
12b029655c05 Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents: 4749
diff changeset
168
12b029655c05 Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents: 4749
diff changeset
169 def load(self, name):
12b029655c05 Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents: 4749
diff changeset
170 for l in self.loaders:
12b029655c05 Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents: 4749
diff changeset
171 if l.check(name):
12b029655c05 Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents: 4749
diff changeset
172 return l.load(name)
12b029655c05 Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents: 4749
diff changeset
173
12b029655c05 Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents: 4749
diff changeset
174 def __getitem__(self, name):
12b029655c05 Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents: 4749
diff changeset
175 """Needed for TAL templates compatibility"""
12b029655c05 Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents: 4749
diff changeset
176 # [ ] document root and helper templates
12b029655c05 Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents: 4749
diff changeset
177 try:
12b029655c05 Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents: 4749
diff changeset
178 return self.load(name)
12b029655c05 Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents: 4749
diff changeset
179 except NoTemplate, message:
12b029655c05 Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents: 4749
diff changeset
180 raise KeyError, message
12b029655c05 Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents: 4749
diff changeset
181
12b029655c05 Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents: 4749
diff changeset
182
4743
2d6959f1d2df templating: proof of concept for Jinja2 support. Select 'jinja2'
anatoly techtonik <techtonik@gmail.com>
parents: 4742
diff changeset
183 class TemplateBase:
2d6959f1d2df templating: proof of concept for Jinja2 support. Select 'jinja2'
anatoly techtonik <techtonik@gmail.com>
parents: 4742
diff changeset
184 content_type = 'text/html'
4740
fe9568a6cbd6 Untangle template selection logic from template loading functionality.
anatoly techtonik <techtonik@gmail.com>
parents: 4737
diff changeset
185
4750
12b029655c05 Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents: 4749
diff changeset
186
12b029655c05 Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents: 4749
diff changeset
187 def get_loader(dir, template_engine):
12b029655c05 Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents: 4749
diff changeset
188
12b029655c05 Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents: 4749
diff changeset
189 # Support for multiple engines using fallback mechanizm
12b029655c05 Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents: 4749
diff changeset
190 # meaning that if first engine can't find template, we
12b029655c05 Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents: 4749
diff changeset
191 # use the second
12b029655c05 Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents: 4749
diff changeset
192
12b029655c05 Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents: 4749
diff changeset
193 engines = template_engine.split(',')
12b029655c05 Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents: 4749
diff changeset
194 engines = [x.strip() for x in engines]
12b029655c05 Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents: 4749
diff changeset
195 ml = MultiLoader()
12b029655c05 Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents: 4749
diff changeset
196
12b029655c05 Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents: 4749
diff changeset
197 for engine_name in engines:
12b029655c05 Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents: 4749
diff changeset
198 if engine_name == 'chameleon':
12b029655c05 Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents: 4749
diff changeset
199 from engine_chameleon import Loader
12b029655c05 Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents: 4749
diff changeset
200 elif engine_name == 'jinja2':
12b029655c05 Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents: 4749
diff changeset
201 from engine_jinja2 import Jinja2Loader as Loader
12b029655c05 Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents: 4749
diff changeset
202 elif engine_name == 'zopetal':
12b029655c05 Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents: 4749
diff changeset
203 from engine_zopetal import Loader
12b029655c05 Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents: 4749
diff changeset
204 else:
12b029655c05 Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents: 4749
diff changeset
205 raise Exception('Unknown template engine "%s"' % engine_name)
12b029655c05 Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents: 4749
diff changeset
206 ml.add_loader(Loader(dir))
12b029655c05 Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents: 4749
diff changeset
207
12b029655c05 Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents: 4749
diff changeset
208 if len(engines) == 1:
12b029655c05 Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents: 4749
diff changeset
209 return ml.loaders[0]
4747
955860a18e12 templating: Raise exception if configured template engine is unknown
anatoly techtonik <techtonik@gmail.com>
parents: 4743
diff changeset
210 else:
4750
12b029655c05 Templating proof of concept to use multiple engines simultaneously,
anatoly techtonik <techtonik@gmail.com>
parents: 4749
diff changeset
211 return ml
4587
a2eb4fb3e6d8 New Chameleon templating engine, engine is now configurable.
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4584
diff changeset
212
4747
955860a18e12 templating: Raise exception if configured template engine is unknown
anatoly techtonik <techtonik@gmail.com>
parents: 4743
diff changeset
213 # --/ Template Loader API
955860a18e12 templating: Raise exception if configured template engine is unknown
anatoly techtonik <techtonik@gmail.com>
parents: 4743
diff changeset
214
955860a18e12 templating: Raise exception if configured template engine is unknown
anatoly techtonik <techtonik@gmail.com>
parents: 4743
diff changeset
215
2390
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
216 def context(client, template=None, classname=None, request=None):
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
217 """Return the rendering context dictionary
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
218
2390
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
219 The dictionary includes following symbols:
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
220
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
221 *context*
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
222 this is one of three things:
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
223
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
224 1. None - we're viewing a "home" page
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
225 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
226 instance.
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
227 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
228 item, as an HTMLItem instance.
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 *request*
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
231 Includes information about the current request, including:
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
232
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
233 - the url
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
234 - 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
235 ``properties``, etc) parsed out of the form.
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
236 - methods for easy filterspec link generation
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
237 - *user*, the current user node as an HTMLItem instance
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
238 - *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
239
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
240 *config*
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
241 The current tracker config.
2390
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
242
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
243 *db*
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
244 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
245
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
246 *utils*
4584
760483ce731e Fix override of TemplatingUtils in instance.py.
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4577
diff changeset
247 This is an instance of client.instance.TemplatingUtils, which is
760483ce731e Fix override of TemplatingUtils in instance.py.
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4577
diff changeset
248 optionally defined in the tracker interfaces module and defaults to
760483ce731e Fix override of TemplatingUtils in instance.py.
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4577
diff changeset
249 TemplatingUtils class in this file.
2390
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
250
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
251 *templates*
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
252 Access to all the tracker templates by name.
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
253 Used mainly in *use-macro* commands.
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
254
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
255 *template*
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
256 Current rendering template.
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
257
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
258 *true*
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
259 Logical True value.
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
260
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
261 *false*
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
262 Logical False value.
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
263
2562
1f4791438b65 add 'i18n' to the rendering context dictionary description
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2561
diff changeset
264 *i18n*
1f4791438b65 add 'i18n' to the rendering context dictionary description
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2561
diff changeset
265 Internationalization service, providing string translation
1f4791438b65 add 'i18n' to the rendering context dictionary description
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2561
diff changeset
266 methods ``gettext`` and ``ngettext``.
1f4791438b65 add 'i18n' to the rendering context dictionary description
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2561
diff changeset
267
2390
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
268 """
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
269
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
270 # 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
271 # compute form client
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
272 if template is None:
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
273 template = client.template
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
274 if classname is None:
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
275 classname = client.classname
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
276 if request is None:
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
277 request = HTMLRequest(client)
1270
c3424abf7f77 added ability to implement new templating utility methods
Richard Jones <richard@users.sourceforge.net>
parents: 1263
diff changeset
278
2390
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
279 c = {
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
280 'context': None,
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
281 'options': {},
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
282 'nothing': None,
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
283 'request': request,
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
284 'db': HTMLDatabase(client),
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
285 'config': client.instance.config,
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
286 'tracker': client.instance,
4584
760483ce731e Fix override of TemplatingUtils in instance.py.
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4577
diff changeset
287 'utils': client.instance.TemplatingUtils(client),
2854
6acc315570eb Templates.precompileTemplates: skip files without ".html" extension
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2827
diff changeset
288 'templates': client.instance.templates,
2390
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
289 'template': template,
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
290 'true': 1,
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
291 'false': 0,
2538
09b0fc5b1716 make client.translator available to templates as 'i18n'
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2524
diff changeset
292 'i18n': client.translator
2390
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
293 }
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
294 # add in the item if there is one
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
295 if client.nodeid:
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
296 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
297 anonymous=1)
2390
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
298 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
299 c['context'] = HTMLClass(client, classname, anonymous=1)
2390
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
300 return c
0778421414c3 added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2389
diff changeset
301
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
302 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
303 """ 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
304 """
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
305 def __init__(self, client):
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
306 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
307 self._ = client._
1513
455f79a2981f add access to real db through HTML db
Richard Jones <richard@users.sourceforge.net>
parents: 1510
diff changeset
308 self._db = client.db
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
309
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
310 # we want config to be exposed
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
311 self.config = client.db.config
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
312
4055
de832c486f86 Fix designator regular expression in HTMLDatabase.__getitem__.
Stefan Seefeld <stefan@seefeld.name>
parents: 4054
diff changeset
313 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
314 # 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
315 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
316 if m:
2157
e976fa0640b3 db/userN wasn't returning HTMLUser
Richard Jones <richard@users.sourceforge.net>
parents: 2154
diff changeset
317 cl = m.group('cl')
e976fa0640b3 db/userN wasn't returning HTMLUser
Richard Jones <richard@users.sourceforge.net>
parents: 2154
diff changeset
318 self._client.db.getclass(cl)
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
319 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
320 else:
6118d4498db3 added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents: 1441
diff changeset
321 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
322 return HTMLClass(self._client, item)
1134
16874c9b86ad generic item editing
Richard Jones <richard@users.sourceforge.net>
parents: 1133
diff changeset
323
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
324 def __getattr__(self, attr):
1030
f5216dbced55 translate bad class lookup error meaningfully
Richard Jones <richard@users.sourceforge.net>
parents: 1028
diff changeset
325 try:
1134
16874c9b86ad generic item editing
Richard Jones <richard@users.sourceforge.net>
parents: 1133
diff changeset
326 return self[attr]
1030
f5216dbced55 translate bad class lookup error meaningfully
Richard Jones <richard@users.sourceforge.net>
parents: 1028
diff changeset
327 except KeyError:
f5216dbced55 translate bad class lookup error meaningfully
Richard Jones <richard@users.sourceforge.net>
parents: 1028
diff changeset
328 raise AttributeError, attr
1134
16874c9b86ad generic item editing
Richard Jones <richard@users.sourceforge.net>
parents: 1133
diff changeset
329
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
330 def classes(self):
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
331 l = self._client.db.classes.keys()
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
332 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
333 m = []
2031
bcb21e5722b8 fix permission handling around rego
Richard Jones <richard@users.sourceforge.net>
parents: 2025
diff changeset
334 for item in l:
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
335 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
336 return m
1104
d759c3cb1f06 Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
337
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
338 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
339
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
340 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
341 """ "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
342 (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
343 "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
344 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
345 """
1104
d759c3cb1f06 Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
346 cl = db.getclass(prop.classname)
d759c3cb1f06 Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
347 l = []
d759c3cb1f06 Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
348 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
349 if do_lookup:
d4ac8954ce5c Update on recent fix, better version suggested by alexander smishlajev
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3860
diff changeset
350 try:
d4ac8954ce5c Update on recent fix, better version suggested by alexander smishlajev
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3860
diff changeset
351 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
352 except (TypeError, KeyError):
d4ac8954ce5c Update on recent fix, better version suggested by alexander smishlajev
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3860
diff changeset
353 pass
d4ac8954ce5c Update on recent fix, better version suggested by alexander smishlajev
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3860
diff changeset
354 else:
d4ac8954ce5c Update on recent fix, better version suggested by alexander smishlajev
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3860
diff changeset
355 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
356 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
357 # 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
358 # 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
359 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
360 l.append(entry)
1104
d759c3cb1f06 Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
361 return l
d759c3cb1f06 Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
362
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
363 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
364 """ 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
365 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
366 """
2083
a94eacad51c8 handle bad multilink input at item creation time better [SF#917834]
Richard Jones <richard@users.sourceforge.net>
parents: 2056
diff changeset
367 l = []
a94eacad51c8 handle bad multilink input at item creation time better [SF#917834]
Richard Jones <richard@users.sourceforge.net>
parents: 2056
diff changeset
368 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
369 if num_re.match(entry):
5051
b69c5e763295 issue2550748: Crash when creating new issues with non-existing multilink values (in classic template). Applied patch provided by user. (John Rouillard)
John Rouillard <rouilj@ieee.org>
parents: 5043
diff changeset
370 try:
b69c5e763295 issue2550748: Crash when creating new issues with non-existing multilink values (in classic template). Applied patch provided by user. (John Rouillard)
John Rouillard <rouilj@ieee.org>
parents: 5043
diff changeset
371 label = linkcl.get(entry, key)
b69c5e763295 issue2550748: Crash when creating new issues with non-existing multilink values (in classic template). Applied patch provided by user. (John Rouillard)
John Rouillard <rouilj@ieee.org>
parents: 5043
diff changeset
372 except IndexError:
b69c5e763295 issue2550748: Crash when creating new issues with non-existing multilink values (in classic template). Applied patch provided by user. (John Rouillard)
John Rouillard <rouilj@ieee.org>
parents: 5043
diff changeset
373 # fall back to id if illegal (avoid template crash)
b69c5e763295 issue2550748: Crash when creating new issues with non-existing multilink values (in classic template). Applied patch provided by user. (John Rouillard)
John Rouillard <rouilj@ieee.org>
parents: 5043
diff changeset
374 label = entry
3401
62e4032cb280 merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3394
diff changeset
375 # fall back to designator if label is None
62e4032cb280 merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3394
diff changeset
376 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
377 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
378 else:
a94eacad51c8 handle bad multilink input at item creation time better [SF#917834]
Richard Jones <richard@users.sourceforge.net>
parents: 2056
diff changeset
379 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
380 return l
a94eacad51c8 handle bad multilink input at item creation time better [SF#917834]
Richard Jones <richard@users.sourceforge.net>
parents: 2056
diff changeset
381
3710
2862cb0d9be4 default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents: 3702
diff changeset
382 def _set_input_default_args(dic):
2862cb0d9be4 default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents: 3702
diff changeset
383 # 'text' is the default value anyway --
2862cb0d9be4 default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents: 3702
diff changeset
384 # 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
385 dic.setdefault('type', 'text')
2862cb0d9be4 default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents: 3702
diff changeset
386 # useful e.g for HTML LABELs:
2862cb0d9be4 default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents: 3702
diff changeset
387 if not dic.has_key('id'):
2862cb0d9be4 default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents: 3702
diff changeset
388 try:
2862cb0d9be4 default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents: 3702
diff changeset
389 if dic['text'] in ('radio', 'checkbox'):
2862cb0d9be4 default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents: 3702
diff changeset
390 dic['id'] = '%(name)s-%(value)s' % dic
2862cb0d9be4 default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents: 3702
diff changeset
391 else:
2862cb0d9be4 default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents: 3702
diff changeset
392 dic['id'] = dic['name']
2862cb0d9be4 default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents: 3702
diff changeset
393 except KeyError:
2862cb0d9be4 default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents: 3702
diff changeset
394 pass
2862cb0d9be4 default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents: 3702
diff changeset
395
4267
c5f52c2c9e36 Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents: 4233
diff changeset
396 def cgi_escape_attrs(**attrs):
c5f52c2c9e36 Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents: 4233
diff changeset
397 return ' '.join(['%s="%s"'%(k,cgi.escape(str(v), True))
c5f52c2c9e36 Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents: 4233
diff changeset
398 for k,v in attrs.items()])
c5f52c2c9e36 Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents: 4233
diff changeset
399
1956
1e2cccf6b53b give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents: 1952
diff changeset
400 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
401 """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
402 _set_input_default_args(attrs)
4267
c5f52c2c9e36 Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents: 4233
diff changeset
403 return '<input %s>'%cgi_escape_attrs(**attrs)
1956
1e2cccf6b53b give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents: 1952
diff changeset
404
1e2cccf6b53b give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents: 1952
diff changeset
405 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
406 """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
407 _set_input_default_args(attrs)
4267
c5f52c2c9e36 Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents: 4233
diff changeset
408 return '<input %s/>'%cgi_escape_attrs(**attrs)
1956
1e2cccf6b53b give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents: 1952
diff changeset
409
4878
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4875
diff changeset
410 class HTMLInputMixin(object):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
411 """ 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
412 def __init__(self):
1e2cccf6b53b give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents: 1952
diff changeset
413 html_version = 'html4'
1e2cccf6b53b give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents: 1952
diff changeset
414 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
415 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
416 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
417 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
418 else:
1e2cccf6b53b give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents: 1952
diff changeset
419 self.input = input_html4
2396
39cdddd313ca HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2390
diff changeset
420 # 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
421 # 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
422 self._context = None
39cdddd313ca HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2390
diff changeset
423
39cdddd313ca HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2390
diff changeset
424 def gettext(self, msgid):
39cdddd313ca HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2390
diff changeset
425 """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
426 if self._context is None:
39cdddd313ca HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2390
diff changeset
427 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
428 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
429 msgid=msgid, context=self._context)
39cdddd313ca HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2390
diff changeset
430
39cdddd313ca HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2390
diff changeset
431 _ = gettext
1956
1e2cccf6b53b give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents: 1952
diff changeset
432
4878
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4875
diff changeset
433 class HTMLPermissions(object):
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
434
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
435 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
436 """ 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
437 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
438 """
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
439 if not self.is_view_ok():
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
440 raise Unauthorised("view", self._classname,
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
441 translator=self._client.translator)
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
442
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
443 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
444 """ 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
445 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
446 """
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
447 if not self.is_edit_ok():
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
448 raise Unauthorised("edit", self._classname,
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
449 translator=self._client.translator)
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
450
4088
34434785f308 Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents: 4058
diff changeset
451 def retire_check(self):
34434785f308 Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents: 4058
diff changeset
452 """ 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
453 retire items of this class.
34434785f308 Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents: 4058
diff changeset
454 """
34434785f308 Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents: 4058
diff changeset
455 if not self.is_retire_ok():
34434785f308 Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents: 4058
diff changeset
456 raise Unauthorised("retire", self._classname,
34434785f308 Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents: 4058
diff changeset
457 translator=self._client.translator)
34434785f308 Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents: 4058
diff changeset
458
2983
9614a101b68f Stuff from the train ride this morning:
Richard Jones <richard@users.sourceforge.net>
parents: 2962
diff changeset
459
1956
1e2cccf6b53b give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents: 1952
diff changeset
460 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
461 """ 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
462 """
1447
6118d4498db3 added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents: 1441
diff changeset
463 def __init__(self, client, classname, anonymous=0):
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
464 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
465 self._ = client._
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
466 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
467 self._anonymous = anonymous
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
468
1136
7e193bbda38e added generic item editing
Richard Jones <richard@users.sourceforge.net>
parents: 1134
diff changeset
469 # 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
470 # consistent API for extending Class/Item
7e193bbda38e added generic item editing
Richard Jones <richard@users.sourceforge.net>
parents: 1134
diff changeset
471 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
472 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
473 self._props = self._klass.getprops()
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
474
1956
1e2cccf6b53b give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents: 1952
diff changeset
475 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
476
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
477 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
478 """ 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
479 """
4328
3d224f7fb364 add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents: 4306
diff changeset
480 perm = self._db.security.hasPermission
3d224f7fb364 add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents: 4306
diff changeset
481 return perm('Web Access', self._client.userid) and perm('Create',
3d224f7fb364 add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents: 4306
diff changeset
482 self._client.userid, self._classname)
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
483
4088
34434785f308 Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents: 4058
diff changeset
484 def is_retire_ok(self):
34434785f308 Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents: 4058
diff changeset
485 """ 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
486 """
4328
3d224f7fb364 add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents: 4306
diff changeset
487 perm = self._db.security.hasPermission
3d224f7fb364 add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents: 4306
diff changeset
488 return perm('Web Access', self._client.userid) and perm('Retire',
3d224f7fb364 add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents: 4306
diff changeset
489 self._client.userid, self._classname)
4088
34434785f308 Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents: 4058
diff changeset
490
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
491 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
492 """ 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
493 """
4328
3d224f7fb364 add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents: 4306
diff changeset
494 perm = self._db.security.hasPermission
3d224f7fb364 add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents: 4306
diff changeset
495 return perm('Web Access', self._client.userid) and perm('View',
3d224f7fb364 add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents: 4306
diff changeset
496 self._client.userid, self._classname)
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
497
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
498 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
499 """ 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
500 """
2651
17bab083c8a0 Couple of fixes - make the interface just be is_edit_ok...
Richard Jones <richard@users.sourceforge.net>
parents: 2649
diff changeset
501 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
502
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
503 def __repr__(self):
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
504 return '<HTMLClass(0x%x) %s>'%(id(self), self.classname)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
505
1002
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
506 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
507 """ 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
508 """
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
509
1073
cf30c6cdca02 More documentation.
Richard Jones <richard@users.sourceforge.net>
parents: 1068
diff changeset
510 # we don't exist
cf30c6cdca02 More documentation.
Richard Jones <richard@users.sourceforge.net>
parents: 1068
diff changeset
511 if item == 'id':
cf30c6cdca02 More documentation.
Richard Jones <richard@users.sourceforge.net>
parents: 1068
diff changeset
512 return None
cf30c6cdca02 More documentation.
Richard Jones <richard@users.sourceforge.net>
parents: 1068
diff changeset
513
cf30c6cdca02 More documentation.
Richard Jones <richard@users.sourceforge.net>
parents: 1068
diff changeset
514 # get the property
2056
ba1d54edc53f nicer invalid property error in HTML templating
Richard Jones <richard@users.sourceforge.net>
parents: 2049
diff changeset
515 try:
ba1d54edc53f nicer invalid property error in HTML templating
Richard Jones <richard@users.sourceforge.net>
parents: 2049
diff changeset
516 prop = self._props[item]
ba1d54edc53f nicer invalid property error in HTML templating
Richard Jones <richard@users.sourceforge.net>
parents: 2049
diff changeset
517 except KeyError:
ba1d54edc53f nicer invalid property error in HTML templating
Richard Jones <richard@users.sourceforge.net>
parents: 2049
diff changeset
518 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
519
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
520 # look up the correct HTMLProperty class
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
521 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
522 if not isinstance(prop, klass):
d759c3cb1f06 Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
523 continue
4481
9bbf3758c16a Allow default value declaration in DB schema.
Stefan Seefeld <stefan@seefeld.name>
parents: 4466
diff changeset
524 value = prop.get_default_value()
3779
ee73abcc95d2 Sorry, another mega-patch:
Richard Jones <richard@users.sourceforge.net>
parents: 3770
diff changeset
525 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
526 value, self._anonymous)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
527
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
528 # no good
1002
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
529 raise KeyError, item
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
530
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
531 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
532 """ convenience access """
1002
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
533 try:
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
534 return self[attr]
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
535 except KeyError:
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
536 raise AttributeError, attr
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
537
1743
f166cd4fd392 add action attribute to issue.item form action tag
Richard Jones <richard@users.sourceforge.net>
parents: 1739
diff changeset
538 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
539 """ 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
540 return self._classname
f166cd4fd392 add action attribute to issue.item form action tag
Richard Jones <richard@users.sourceforge.net>
parents: 1739
diff changeset
541
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
542 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
543 """ 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
544 """
1200
0a7bd082b94a usability improvements in API
Richard Jones <richard@users.sourceforge.net>
parents: 1183
diff changeset
545 # 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
546 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
547 itemid = self._klass.lookup(itemid)
0a7bd082b94a usability improvements in API
Richard Jones <richard@users.sourceforge.net>
parents: 1183
diff changeset
548
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
549 return HTMLItem(self._client, self.classname, itemid)
1200
0a7bd082b94a usability improvements in API
Richard Jones <richard@users.sourceforge.net>
parents: 1183
diff changeset
550
1633
ac5f7e5a11e5 sort HTMLClass.properties results by name (feature [SF#724738])
Richard Jones <richard@users.sourceforge.net>
parents: 1631
diff changeset
551 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
552 """ 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
553 """
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
554 l = []
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
555 for name, prop in self._props.items():
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
556 for klass, htmlklass in propclasses:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
557 if isinstance(prop, klass):
4481
9bbf3758c16a Allow default value declaration in DB schema.
Stefan Seefeld <stefan@seefeld.name>
parents: 4466
diff changeset
558 value = prop.get_default_value()
1450
7a9db3f9022a ... and a classname
Richard Jones <richard@users.sourceforge.net>
parents: 1449
diff changeset
559 l.append(htmlklass(self._client, self._classname, '',
4481
9bbf3758c16a Allow default value declaration in DB schema.
Stefan Seefeld <stefan@seefeld.name>
parents: 4466
diff changeset
560 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
561 if sort:
ac5f7e5a11e5 sort HTMLClass.properties results by name (feature [SF#724738])
Richard Jones <richard@users.sourceforge.net>
parents: 1631
diff changeset
562 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
563 return l
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
564
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
565 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
566 """ 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
567 """
1155
5cf0a6b6e787 *cough* sort list results *cough*
Richard Jones <richard@users.sourceforge.net>
parents: 1151
diff changeset
568 # get the list and sort it nicely
5cf0a6b6e787 *cough* sort list results *cough*
Richard Jones <richard@users.sourceforge.net>
parents: 1151
diff changeset
569 l = self._klass.list()
3126
a2889d22db4a the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents: 3117
diff changeset
570 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
571 l.sort(sortfunc)
5cf0a6b6e787 *cough* sort list results *cough*
Richard Jones <richard@users.sourceforge.net>
parents: 1151
diff changeset
572
3126
a2889d22db4a the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents: 3117
diff changeset
573 # check perms
a2889d22db4a the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents: 3117
diff changeset
574 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
575 userid = self._client.userid
4328
3d224f7fb364 add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents: 4306
diff changeset
576 if not check('Web Access', userid):
3d224f7fb364 add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents: 4306
diff changeset
577 return []
3126
a2889d22db4a the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents: 3117
diff changeset
578
a2889d22db4a the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents: 3117
diff changeset
579 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
580 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
581
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
582 return l
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
583
1041
c28603c9f831 Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents: 1030
diff changeset
584 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
585 """ 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
586 """
1041
c28603c9f831 Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents: 1030
diff changeset
587 props = self.propnames()
c28603c9f831 Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents: 1030
diff changeset
588 s = StringIO.StringIO()
3179
88dbe6b3d891 merge removal of rcsv
Richard Jones <richard@users.sourceforge.net>
parents: 3169
diff changeset
589 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
590 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
591 check = self._client.db.security.hasPermission
4328
3d224f7fb364 add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents: 4306
diff changeset
592 userid = self._client.userid
3d224f7fb364 add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents: 4306
diff changeset
593 if not check('Web Access', userid):
3d224f7fb364 add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents: 4306
diff changeset
594 return ''
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
595 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
596 l = []
c28603c9f831 Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents: 1030
diff changeset
597 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
598 # check permission to view this property on this item
4328
3d224f7fb364 add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents: 4306
diff changeset
599 if not check('View', userid, itemid=nodeid,
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
600 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
601 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
602 translator=self._client.translator)
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
603 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
604 if value is None:
c28603c9f831 Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents: 1030
diff changeset
605 l.append('')
c28603c9f831 Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents: 1030
diff changeset
606 elif isinstance(value, type([])):
c28603c9f831 Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents: 1030
diff changeset
607 l.append(':'.join(map(str, value)))
c28603c9f831 Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents: 1030
diff changeset
608 else:
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
609 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
610 writer.writerow(l)
1041
c28603c9f831 Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents: 1030
diff changeset
611 return s.getvalue()
c28603c9f831 Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents: 1030
diff changeset
612
c28603c9f831 Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents: 1030
diff changeset
613 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
614 """ 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
615 """
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
616 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
617 idlessprops.sort()
c28603c9f831 Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents: 1030
diff changeset
618 return ['id'] + idlessprops
c28603c9f831 Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents: 1030
diff changeset
619
3696
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
620 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
621 """ 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
622 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
623
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
624 "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
625 """
4437
261c9f913ff7 - Add explicit "Search" permissions, see Security Fix below.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4417
diff changeset
626 security = self._db.security
261c9f913ff7 - Add explicit "Search" permissions, see Security Fix below.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4417
diff changeset
627 userid = self._client.userid
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
628 if request is not None:
4437
261c9f913ff7 - Add explicit "Search" permissions, see Security Fix below.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4417
diff changeset
629 # for a request we asume it has already been
261c9f913ff7 - Add explicit "Search" permissions, see Security Fix below.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4417
diff changeset
630 # security-filtered
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
631 filterspec = request.filterspec
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
632 sort = request.sort
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
633 group = request.group
4437
261c9f913ff7 - Add explicit "Search" permissions, see Security Fix below.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4417
diff changeset
634 else:
261c9f913ff7 - Add explicit "Search" permissions, see Security Fix below.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4417
diff changeset
635 cn = self.classname
261c9f913ff7 - Add explicit "Search" permissions, see Security Fix below.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4417
diff changeset
636 filterspec = security.filterFilterspec(userid, cn, filterspec)
261c9f913ff7 - Add explicit "Search" permissions, see Security Fix below.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4417
diff changeset
637 sort = security.filterSortspec(userid, cn, sort)
261c9f913ff7 - Add explicit "Search" permissions, see Security Fix below.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4417
diff changeset
638 group = security.filterSortspec(userid, cn, group)
261c9f913ff7 - Add explicit "Search" permissions, see Security Fix below.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4417
diff changeset
639
261c9f913ff7 - Add explicit "Search" permissions, see Security Fix below.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4417
diff changeset
640 check = security.hasPermission
4328
3d224f7fb364 add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents: 4306
diff changeset
641 if not check('Web Access', userid):
3d224f7fb364 add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents: 4306
diff changeset
642 return []
3126
a2889d22db4a the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents: 3117
diff changeset
643
3198
0b7990f54778 fixed broken csv import in roundup.admin module
Richard Jones <richard@users.sourceforge.net>
parents: 3194
diff changeset
644 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
645 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
646 if check('View', userid, self.classname, itemid=id)]
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
647 return l
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
648
2458
c18a7d4259e3 translate labels hardcoded in HTMLClass and HTMLItem
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2411
diff changeset
649 def classhelp(self, properties=None, label=''"(list)", width='500',
4945
55aef7ab35a8 Increase default height of classhelp windows from 400 to 600.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4928
diff changeset
650 height='600', property='', form='itemSynopsis',
4783
365deccf7347 issue2550807 enhance classhelp method with ability to set html properties
John Rouillard <rouilj@ieee.org>
parents: 4750
diff changeset
651 pagesize=50, inputtype="checkbox", html_kwargs={},
365deccf7347 issue2550807 enhance classhelp method with ability to set html properties
John Rouillard <rouilj@ieee.org>
parents: 4750
diff changeset
652 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
653 """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
654
10a49678ebf2 allow listing popup to be used in query forms (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 2673
diff changeset
655 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
656 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
657 "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
658 (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
659 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
660 activity).
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
661
3363
7bc1e9c42a26 allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents: 3361
diff changeset
662 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
663 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
664 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
665 properties).
7bc1e9c42a26 allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents: 3361
diff changeset
666
7bc1e9c42a26 allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents: 3361
diff changeset
667 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
668 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
669 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
670
7bc1e9c42a26 allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents: 3361
diff changeset
671 The popup window will be resizable and scrollable.
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
672
2761
10a49678ebf2 allow listing popup to be used in query forms (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 2673
diff changeset
673 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
674 javascript help_window function.
3509
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
675
3472
522b11d5ba8d classhelp works with Link properties now [SF#1410290]
Richard Jones <richard@users.sourceforge.net>
parents: 3470
diff changeset
676 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
677 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
678
2827
43e3a7ac1190 fix HTMLClass.is_view_ok: permission to create new items
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2761
diff changeset
679 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
680 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
681 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
682 """
1113
a95428868bf4 Added the missing keyword/topic interface to classic template (blush)
Richard Jones <richard@users.sourceforge.net>
parents: 1104
diff changeset
683 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
684 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
685 properties.sort()
a95428868bf4 Added the missing keyword/topic interface to classic template (blush)
Richard Jones <richard@users.sourceforge.net>
parents: 1104
diff changeset
686 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
687 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
688 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
689 sort = 'username'
3363
7bc1e9c42a26 allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents: 3361
diff changeset
690 else:
4032
a73bac81eda2 Fix issue2550500
Stefan Seefeld <stefan@seefeld.name>
parents: 4010
diff changeset
691 sort = self._klass.orderprop()
3610
1dbaa664be28 sorting of entries in classhelp popup [SF#1449000]
Richard Jones <richard@users.sourceforge.net>
parents: 3594
diff changeset
692 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
693 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
694 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
695 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
696 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
697 if inputtype:
522b11d5ba8d classhelp works with Link properties now [SF#1410290]
Richard Jones <richard@users.sourceforge.net>
parents: 3470
diff changeset
698 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
699 if filter:
7bc1e9c42a26 allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents: 3361
diff changeset
700 filterprops = filter.split(';')
7bc1e9c42a26 allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents: 3361
diff changeset
701 filtervalues = []
7bc1e9c42a26 allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents: 3361
diff changeset
702 names = []
7bc1e9c42a26 allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents: 3361
diff changeset
703 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
704 (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
705 names.append(name)
7bc1e9c42a26 allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents: 3361
diff changeset
706 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
707 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
708 else:
7bc1e9c42a26 allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents: 3361
diff changeset
709 filter = ''
3169
d8d1ebd80930 fallback for (list) popups if javascript disabled (patch [SF#1101626])
Richard Jones <richard@users.sourceforge.net>
parents: 3164
diff changeset
710 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
711 "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
712 (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
713 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
714 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
715 (help_url, width, height)
4783
365deccf7347 issue2550807 enhance classhelp method with ability to set html properties
John Rouillard <rouilj@ieee.org>
parents: 4750
diff changeset
716 return '<a class="classhelp" href="%s" onclick="%s" %s>%s</a>' % \
365deccf7347 issue2550807 enhance classhelp method with ability to set html properties
John Rouillard <rouilj@ieee.org>
parents: 4750
diff changeset
717 (help_url, onclick, cgi_escape_attrs(**html_kwargs),
365deccf7347 issue2550807 enhance classhelp method with ability to set html properties
John Rouillard <rouilj@ieee.org>
parents: 4750
diff changeset
718 self._(label))
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
719
3857
54c10d188b8b allow customisation of the edit action for the submit button
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3856
diff changeset
720 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
721 """ 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
722
14322134dcef fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents: 3006
diff changeset
723 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
724 """
3040
14322134dcef fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents: 3006
diff changeset
725 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
726 return ''
14322134dcef fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents: 3006
diff changeset
727
3857
54c10d188b8b allow customisation of the edit action for the submit button
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3856
diff changeset
728 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
729 '\n' + \
3770
567227803c75 Fix name of submit button.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3736
diff changeset
730 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
731
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
732 def history(self):
3117
460eb0209a9e Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents: 3104
diff changeset
733 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
734 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
735 return self._('New node - no history')
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
736
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
737 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
738 """ 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
739 """
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
740 # 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
741 req = HTMLRequest(self._client)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
742 req.classname = self.classname
1016
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
743 req.update(kwargs)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
744
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
745 # new template, using the specified classname and request
4740
fe9568a6cbd6 Untangle template selection logic from template loading functionality.
anatoly techtonik <techtonik@gmail.com>
parents: 4737
diff changeset
746 # [ ] this code is too similar to client.renderContext()
fe9568a6cbd6 Untangle template selection logic from template loading functionality.
anatoly techtonik <techtonik@gmail.com>
parents: 4737
diff changeset
747 tplname = self._client.selectTemplate(self.classname, name)
fe9568a6cbd6 Untangle template selection logic from template loading functionality.
anatoly techtonik <techtonik@gmail.com>
parents: 4737
diff changeset
748 pt = self._client.instance.templates.load(tplname)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
749
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
750 # use our fabricated request
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
751 args = {
4880
ca692423e401 Different approach to fix XSS in issue2550817
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4879
diff changeset
752 'ok_message': self._client._ok_message,
ca692423e401 Different approach to fix XSS in issue2550817
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4879
diff changeset
753 'error_message': self._client._error_message
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
754 }
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
755 return pt.render(self._client, self.classname, req, **args)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
756
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
757 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
758 """ 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
759 """
1447
6118d4498db3 added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents: 1441
diff changeset
760 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
761 self._client = client
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
762 self._db = client.db
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
763 self._classname = classname
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
764 self._nodeid = nodeid
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
765 self._klass = self._db.getclass(classname)
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
766 self._props = self._klass.getprops()
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
767
1447
6118d4498db3 added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents: 1441
diff changeset
768 # 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
769 self._anonymous = anonymous
6118d4498db3 added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents: 1441
diff changeset
770
1956
1e2cccf6b53b give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents: 1952
diff changeset
771 HTMLInputMixin.__init__(self)
1e2cccf6b53b give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents: 1952
diff changeset
772
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
773 def is_edit_ok(self):
4088
34434785f308 Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents: 4058
diff changeset
774 """ 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
775 """
4328
3d224f7fb364 add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents: 4306
diff changeset
776 perm = self._db.security.hasPermission
3d224f7fb364 add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents: 4306
diff changeset
777 return perm('Web Access', self._client.userid) and perm('Edit',
3d224f7fb364 add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents: 4306
diff changeset
778 self._client.userid, self._classname, itemid=self._nodeid)
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
779
4088
34434785f308 Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents: 4058
diff changeset
780 def is_retire_ok(self):
34434785f308 Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents: 4058
diff changeset
781 """ 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
782 """
4328
3d224f7fb364 add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents: 4306
diff changeset
783 perm = self._db.security.hasPermission
3d224f7fb364 add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents: 4306
diff changeset
784 return perm('Web Access', self._client.userid) and perm('Retire',
3d224f7fb364 add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents: 4306
diff changeset
785 self._client.userid, self._classname, itemid=self._nodeid)
4088
34434785f308 Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents: 4058
diff changeset
786
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
787 def is_view_ok(self):
4088
34434785f308 Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents: 4058
diff changeset
788 """ 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
789 """
4328
3d224f7fb364 add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents: 4306
diff changeset
790 perm = self._db.security.hasPermission
3d224f7fb364 add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents: 4306
diff changeset
791 if perm('Web Access', self._client.userid) and perm('View',
3d224f7fb364 add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents: 4306
diff changeset
792 self._client.userid, self._classname, itemid=self._nodeid):
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
793 return 1
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
794 return self.is_edit_ok()
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
795
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
796 def is_only_view_ok(self):
4088
34434785f308 Plug a number of security holes:
Richard Jones <richard@users.sourceforge.net>
parents: 4058
diff changeset
797 """ 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
798 """
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
799 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
800
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
801 def __repr__(self):
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
802 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
803 self._nodeid)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
804
1002
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
805 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
806 """ return an HTMLProperty instance
3696
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
807 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
808 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
809 """
1002
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
810 if item == 'id':
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
811 return self._nodeid
1073
cf30c6cdca02 More documentation.
Richard Jones <richard@users.sourceforge.net>
parents: 1068
diff changeset
812
3696
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
813 items = item.split('.', 1)
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
814 has_rest = len(items) > 1
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
815
1073
cf30c6cdca02 More documentation.
Richard Jones <richard@users.sourceforge.net>
parents: 1068
diff changeset
816 # get the property
3696
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
817 prop = self._props[items[0]]
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
818
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
819 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
820 raise KeyError, item
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
821
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
822 # 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
823 value = None
6118d4498db3 added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents: 1441
diff changeset
824 if int(self._nodeid) > 0:
3696
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
825 value = self._klass.get(self._nodeid, items[0], None)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
826 if value is None:
3696
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
827 if isinstance(prop, hyperdb.Multilink):
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
828 value = []
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
829
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
830 # look up the correct HTMLProperty class
3696
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
831 htmlprop = None
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
832 for klass, htmlklass in propclasses:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
833 if isinstance(prop, klass):
3696
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
834 htmlprop = htmlklass(self._client, self._classname,
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
835 self._nodeid, prop, items[0], value, self._anonymous)
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
836 if htmlprop is not None:
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
837 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
838 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
839 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
840 return htmlprop[items[1]]
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
841 return htmlprop
1002
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
842
1364
1d1ee96e8956 applied patch for nicer history display (feature [SF#638280])
Richard Jones <richard@users.sourceforge.net>
parents: 1357
diff changeset
843 raise KeyError, item
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
844
1002
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
845 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
846 """ convenience access to properties """
1002
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
847 try:
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
848 return self[attr]
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
849 except KeyError:
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
850 raise AttributeError, attr
1743
f166cd4fd392 add action attribute to issue.item form action tag
Richard Jones <richard@users.sourceforge.net>
parents: 1739
diff changeset
851
f166cd4fd392 add action attribute to issue.item form action tag
Richard Jones <richard@users.sourceforge.net>
parents: 1739
diff changeset
852 def designator(self):
2014
366d3bbce982 Simple version of collision detection...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 2010
diff changeset
853 """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
854 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
855
ee3cf6a44f29 queries on a per-user basis, and public queries [SF#891798] :)
Richard Jones <richard@users.sourceforge.net>
parents: 2118
diff changeset
856 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
857 """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
858 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
859
3856
b38bb4ca3fc0 allow customisation of the edit action for the submit button
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3845
diff changeset
860 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
861 """Generate a submit button.
366d3bbce982 Simple version of collision detection...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 2010
diff changeset
862
366d3bbce982 Simple version of collision detection...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 2010
diff changeset
863 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
864 """
2262
a13ec40cf8f5 *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 2244
diff changeset
865 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
866 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
867 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
868 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
869
1103
db787cef1385 handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents: 1099
diff changeset
870 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
871 """ 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
872 """
1103
db787cef1385 handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents: 1099
diff changeset
873 # XXX do this
db787cef1385 handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents: 1099
diff changeset
874 return []
db787cef1385 handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents: 1099
diff changeset
875
4233
01ef28bffcbd don't show entire history by default
Richard Jones <richard@users.sourceforge.net>
parents: 4146
diff changeset
876 def history(self, direction='descending', dre=re.compile('^\d+$'),
5112
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5095
diff changeset
877 limit=None, showall=False ):
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5095
diff changeset
878 """Create an html view of the journal for the item.
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5095
diff changeset
879
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5095
diff changeset
880 Display property changes for all properties that does not have quiet set.
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5095
diff changeset
881 If showall=True then all properties regardless of quiet setting will be
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5095
diff changeset
882 shown.
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5095
diff changeset
883 """
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:
4740
fe9568a6cbd6 Untangle template selection logic from template loading functionality.
anatoly techtonik <techtonik@gmail.com>
parents: 4737
diff changeset
899 template = self._client.selectTemplate(classname, 'item')
fe9568a6cbd6 Untangle template selection logic from template loading functionality.
anatoly techtonik <techtonik@gmail.com>
parents: 4737
diff changeset
900 if template.startswith('_generic.'):
2614
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
901 raise NoTemplate, 'not really...'
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
902 except NoTemplate:
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
903 pass
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
904 else:
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
905 id = self._klass.get(self._nodeid, prop_n, None)
4791
140d4c2469db issue2550775 enhancement. Add rel=nofollow to journal links
John Rouillard <rouilj@ieee.org>
parents: 4784
diff changeset
906 current[prop_n] = '<a rel="nofollow" href="%s%s">%s</a>'%(
2614
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
907 classname, id, current[prop_n])
2673
63f8b13ba85f fix sre_constants.error:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2668
diff changeset
908
2614
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
909 # get the journal, sort and reverse
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
910 history = self._klass.history(self._nodeid)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
911 history.sort()
2614
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
912 history.reverse()
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
913
4233
01ef28bffcbd don't show entire history by default
Richard Jones <richard@users.sourceforge.net>
parents: 4146
diff changeset
914 # restrict the volume
01ef28bffcbd don't show entire history by default
Richard Jones <richard@users.sourceforge.net>
parents: 4146
diff changeset
915 if limit:
01ef28bffcbd don't show entire history by default
Richard Jones <richard@users.sourceforge.net>
parents: 4146
diff changeset
916 history = history[:limit]
01ef28bffcbd don't show entire history by default
Richard Jones <richard@users.sourceforge.net>
parents: 4146
diff changeset
917
1402
27586da5557c Added users' timezone support
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1394
diff changeset
918 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
919 l = []
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
920 comments = {}
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
921 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
922 date_s = str(evt_date.local(timezone)).replace("."," ")
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
923 arg_s = ''
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
924 if action == 'link' and type(args) == type(()):
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
925 if len(args) == 3:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
926 linkcl, linkid, key = args
4791
140d4c2469db issue2550775 enhancement. Add rel=nofollow to journal links
John Rouillard <rouilj@ieee.org>
parents: 4784
diff changeset
927 arg_s += '<a rel="nofollow" href="%s%s">%s%s %s</a>'%(linkcl, linkid,
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
928 linkcl, linkid, key)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
929 else:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
930 arg_s = str(args)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
931
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
932 elif action == 'unlink' and type(args) == type(()):
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
933 if len(args) == 3:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
934 linkcl, linkid, key = args
4791
140d4c2469db issue2550775 enhancement. Add rel=nofollow to journal links
John Rouillard <rouilj@ieee.org>
parents: 4784
diff changeset
935 arg_s += '<a rel="nofollow" href="%s%s">%s%s %s</a>'%(linkcl, linkid,
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
936 linkcl, linkid, key)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
937 else:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
938 arg_s = str(args)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
939
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
940 elif type(args) == type({}):
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
941 cell = []
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
942 for k in args.keys():
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
943 # try to get the relevant property and treat it
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
944 # specially
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
945 try:
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
946 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
947 except KeyError:
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
948 prop = None
1773
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
949 if prop is None:
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
950 # property no longer exists
2396
39cdddd313ca HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2390
diff changeset
951 comments['no_exist'] = self._(
2327
36ae1b14aaab remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2324
diff changeset
952 "<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
953 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
954 % (self._(k), str(args[k])))
1773
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
955 continue
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
956
1773
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
957 if args[k] and (isinstance(prop, hyperdb.Multilink) or
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
958 isinstance(prop, hyperdb.Link)):
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
959 # figure what the link class is
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
960 classname = prop.classname
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
961 try:
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
962 linkcl = self._db.getclass(classname)
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
963 except KeyError:
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
964 labelprop = None
2396
39cdddd313ca HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2390
diff changeset
965 comments[classname] = self._(
2327
36ae1b14aaab remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2324
diff changeset
966 "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
967 ) % locals()
1773
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
968 labelprop = linkcl.labelprop(1)
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
969 try:
4740
fe9568a6cbd6 Untangle template selection logic from template loading functionality.
anatoly techtonik <techtonik@gmail.com>
parents: 4737
diff changeset
970 template = self._client.selectTemplate(classname,
fe9568a6cbd6 Untangle template selection logic from template loading functionality.
anatoly techtonik <techtonik@gmail.com>
parents: 4737
diff changeset
971 'item')
fe9568a6cbd6 Untangle template selection logic from template loading functionality.
anatoly techtonik <techtonik@gmail.com>
parents: 4737
diff changeset
972 if template.startswith('_generic.'):
1773
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
973 raise NoTemplate, 'not really...'
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
974 hrefable = 1
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
975 except NoTemplate:
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
976 hrefable = 0
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
977
5112
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5095
diff changeset
978 if (not showall) and prop.quiet:
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5095
diff changeset
979 # Omit quiet properties from history/changelog
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5095
diff changeset
980 continue
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5095
diff changeset
981 elif isinstance(prop, hyperdb.Multilink) and args[k]:
1773
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
982 ml = []
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
983 for linkid in args[k]:
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
984 if isinstance(linkid, type(())):
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
985 sublabel = linkid[0] + ' '
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
986 linkids = linkid[1]
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
987 else:
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
988 sublabel = ''
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
989 linkids = [linkid]
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
990 subml = []
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
991 for linkid in linkids:
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
992 label = classname + linkid
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
993 # if we have a label property, try to use it
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
994 # TODO: test for node existence even when
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
995 # there's no labelprop!
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
996 try:
1773
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
997 if labelprop is not None and \
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
998 labelprop != 'id':
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
999 label = linkcl.get(linkid, labelprop)
3971
ff3a8b7d1819 security fixes
Richard Jones <richard@users.sourceforge.net>
parents: 3968
diff changeset
1000 label = cgi.escape(label)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1001 except IndexError:
2396
39cdddd313ca HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2390
diff changeset
1002 comments['no_link'] = self._(
2327
36ae1b14aaab remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2324
diff changeset
1003 "<strike>The linked node"
36ae1b14aaab remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2324
diff changeset
1004 " no longer exists</strike>")
1773
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1005 subml.append('<strike>%s</strike>'%label)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1006 else:
1773
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1007 if hrefable:
4791
140d4c2469db issue2550775 enhancement. Add rel=nofollow to journal links
John Rouillard <rouilj@ieee.org>
parents: 4784
diff changeset
1008 subml.append('<a rel="nofollow" href="%s%s">%s</a>'%(
1773
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1009 classname, linkid, label))
3401
62e4032cb280 merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3394
diff changeset
1010 elif label is None:
62e4032cb280 merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3394
diff changeset
1011 subml.append('%s%s'%(classname,
62e4032cb280 merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3394
diff changeset
1012 linkid))
1773
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1013 else:
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1014 subml.append(label)
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1015 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
1016 cell.append('%s:\n %s'%(self._(k), ', '.join(ml)))
1773
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1017 elif isinstance(prop, hyperdb.Link) and args[k]:
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1018 label = classname + args[k]
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1019 # if we have a label property, try to use it
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1020 # TODO: test for node existence even when
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1021 # there's no labelprop!
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1022 if labelprop is not None and labelprop != 'id':
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1023 try:
3971
ff3a8b7d1819 security fixes
Richard Jones <richard@users.sourceforge.net>
parents: 3968
diff changeset
1024 label = cgi.escape(linkcl.get(args[k],
ff3a8b7d1819 security fixes
Richard Jones <richard@users.sourceforge.net>
parents: 3968
diff changeset
1025 labelprop))
1773
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1026 except IndexError:
2396
39cdddd313ca HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2390
diff changeset
1027 comments['no_link'] = self._(
2327
36ae1b14aaab remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2324
diff changeset
1028 "<strike>The linked node"
36ae1b14aaab remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2324
diff changeset
1029 " no longer exists</strike>")
1773
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1030 cell.append(' <strike>%s</strike>,\n'%label)
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1031 # "flag" this is done .... euwww
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1032 label = None
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1033 if label is not None:
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1034 if hrefable:
4791
140d4c2469db issue2550775 enhancement. Add rel=nofollow to journal links
John Rouillard <rouilj@ieee.org>
parents: 4784
diff changeset
1035 old = '<a ref="nofollow" href="%s%s">%s</a>'%(classname,
3971
ff3a8b7d1819 security fixes
Richard Jones <richard@users.sourceforge.net>
parents: 3968
diff changeset
1036 args[k], label)
1773
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1037 else:
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1038 old = label;
2547
9b9c8fb52732 translate action names and property names in the history list
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2538
diff changeset
1039 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
1040 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
1041 cell[-1] += ' -> %s'%current[k]
1773
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1042 current[k] = old
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1043
1773
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1044 elif isinstance(prop, hyperdb.Date) and args[k]:
3151
6feac4fcf883 Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3127
diff changeset
1045 if args[k] is None:
6feac4fcf883 Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3127
diff changeset
1046 d = ''
6feac4fcf883 Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3127
diff changeset
1047 else:
6feac4fcf883 Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3127
diff changeset
1048 d = date.Date(args[k],
6feac4fcf883 Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3127
diff changeset
1049 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
1050 cell.append('%s: %s'%(self._(k), str(d)))
1773
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1051 if current.has_key(k):
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1052 cell[-1] += ' -> %s' % current[k]
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1053 current[k] = str(d)
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1054
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1055 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
1056 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
1057 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
1058 cell.append('%s: %s'%(self._(k), val))
1773
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1059 if current.has_key(k):
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1060 cell[-1] += ' -> %s'%current[k]
2170
0def552122af handle Boolean values in history HTML display
Richard Jones <richard@users.sourceforge.net>
parents: 2157
diff changeset
1061 current[k] = val
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1062
1773
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1063 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
1064 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
1065 cell.append('%s: %s'%(self._(k), val))
1773
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1066 if current.has_key(k):
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1067 cell[-1] += ' -> %s'%current[k]
2170
0def552122af handle Boolean values in history HTML display
Richard Jones <richard@users.sourceforge.net>
parents: 2157
diff changeset
1068 current[k] = val
0def552122af handle Boolean values in history HTML display
Richard Jones <richard@users.sourceforge.net>
parents: 2157
diff changeset
1069
0def552122af handle Boolean values in history HTML display
Richard Jones <richard@users.sourceforge.net>
parents: 2157
diff changeset
1070 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
1071 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
1072 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
1073 if current.has_key(k):
0def552122af handle Boolean values in history HTML display
Richard Jones <richard@users.sourceforge.net>
parents: 2157
diff changeset
1074 cell[-1] += ' -> %s'%current[k]
0def552122af handle Boolean values in history HTML display
Richard Jones <richard@users.sourceforge.net>
parents: 2157
diff changeset
1075 current[k] = val
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1076
4483
22bc0426e348 Second patch from issue2550688 -- with some changes:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4481
diff changeset
1077 elif isinstance(prop, hyperdb.Password) and args[k] is not None:
22bc0426e348 Second patch from issue2550688 -- with some changes:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4481
diff changeset
1078 val = args[k].dummystr()
22bc0426e348 Second patch from issue2550688 -- with some changes:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4481
diff changeset
1079 cell.append('%s: %s'%(self._(k), val))
22bc0426e348 Second patch from issue2550688 -- with some changes:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4481
diff changeset
1080 if current.has_key(k):
22bc0426e348 Second patch from issue2550688 -- with some changes:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4481
diff changeset
1081 cell[-1] += ' -> %s'%current[k]
22bc0426e348 Second patch from issue2550688 -- with some changes:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4481
diff changeset
1082 current[k] = val
22bc0426e348 Second patch from issue2550688 -- with some changes:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4481
diff changeset
1083
1773
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1084 elif not args[k]:
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1085 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
1086 cell.append('%s: %s'%(self._(k), current[k]))
1773
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1087 current[k] = '(no value)'
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1088 else:
2547
9b9c8fb52732 translate action names and property names in the history list
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2538
diff changeset
1089 cell.append(self._('%s: (no value)')%self._(k))
1773
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1090
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1091 else:
2547
9b9c8fb52732 translate action names and property names in the history list
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2538
diff changeset
1092 cell.append('%s: %s'%(self._(k), str(args[k])))
1773
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1093 if current.has_key(k):
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1094 cell[-1] += ' -> %s'%current[k]
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1095 current[k] = str(args[k])
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1096
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1097 arg_s = '<br />'.join(cell)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1098 else:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1099 # unkown event!!
2396
39cdddd313ca HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2390
diff changeset
1100 comments['unknown'] = self._(
39cdddd313ca HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2390
diff changeset
1101 "<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
1102 " by the history display!</em></strong>")
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1103 arg_s = '<strong><em>' + str(args) + '</em></strong>'
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1104 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
1105 # 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
1106 # have the username)
de0f879f995d fixed history to display username instead of userid
Richard Jones <richard@users.sourceforge.net>
parents: 1254
diff changeset
1107 if dre.match(user):
de0f879f995d fixed history to display username instead of userid
Richard Jones <richard@users.sourceforge.net>
parents: 1254
diff changeset
1108 user = self._db.user.get(user, 'username')
1074
954ad22eb7d9 more doc, more cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1073
diff changeset
1109 l.append('<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>'%(
4577
528fe0a3af24 issue2550711 Fix XSS vulnerability when username contains HTML code.
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4537
diff changeset
1110 date_s, cgi.escape(user), self._(action), arg_s))
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1111 if comments:
2396
39cdddd313ca HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2390
diff changeset
1112 l.append(self._(
39cdddd313ca HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2390
diff changeset
1113 '<tr><td colspan=4><strong>Note:</strong></td></tr>'))
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1114 for entry in comments.values():
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1115 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
1116
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
1117 if direction == 'ascending':
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
1118 l.reverse()
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
1119
4696
57a64e591a00 Use bootstrap classes for displaying tables; bug.item is almost table free and uses bootstrap form classes and markup
Pradip Caulagi <caulagi@gmail.com>
parents: 4651
diff changeset
1120 l[0:0] = ['<table class="history table table-condensed table-striped">'
2614
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
1121 '<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
1122 self._('History'),
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
1123 '</th></tr><tr>',
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
1124 self._('<th>Date</th>'),
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
1125 self._('<th>User</th>'),
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
1126 self._('<th>Action</th>'),
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
1127 self._('<th>Args</th>'),
c64ea31a569b merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents: 2591
diff changeset
1128 '</tr>']
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1129 l.append('</table>')
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1130 return '\n'.join(l)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1131
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
1132 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
1133 """ 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
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 # 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
1136 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
1137 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
1138 name = self._klass.get(self._nodeid, 'name')
899c6ced2abe include queryname in query template render ;)
Richard Jones <richard@users.sourceforge.net>
parents: 1272
diff changeset
1139 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
1140 '&@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
1141
98f3d41f41d9 query "editing" now working, minus filling the form in with the query params
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
1142 # new template, using the specified classname and request
4740
fe9568a6cbd6 Untangle template selection logic from template loading functionality.
anatoly techtonik <techtonik@gmail.com>
parents: 4737
diff changeset
1143 # [ ] the custom logic for search page doesn't belong to
fe9568a6cbd6 Untangle template selection logic from template loading functionality.
anatoly techtonik <techtonik@gmail.com>
parents: 4737
diff changeset
1144 # generic templating module (techtonik)
fe9568a6cbd6 Untangle template selection logic from template loading functionality.
anatoly techtonik <techtonik@gmail.com>
parents: 4737
diff changeset
1145 tplname = self._client.selectTemplate(req.classname, 'search')
fe9568a6cbd6 Untangle template selection logic from template loading functionality.
anatoly techtonik <techtonik@gmail.com>
parents: 4737
diff changeset
1146 pt = self._client.instance.templates.load(tplname)
4057
885069b5f328 Fix context for query form to be a class.
Stefan Seefeld <stefan@seefeld.name>
parents: 4056
diff changeset
1147 # 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
1148 # node.
885069b5f328 Fix context for query form to be a class.
Stefan Seefeld <stefan@seefeld.name>
parents: 4056
diff changeset
1149 self._client.nodeid = None
4115
d61066deae67 handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents: 4112
diff changeset
1150
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
1151 # 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
1152 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
1153
2180
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2170
diff changeset
1154 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
1155 """ 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
1156 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
1157 """
2180
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2170
diff changeset
1158 name = self._klass.get(self._nodeid, 'name')
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2170
diff changeset
1159 url = '%s%s/%s'%(self._classname, self._nodeid, name)
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2170
diff changeset
1160 return urllib.quote(url)
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2170
diff changeset
1161
3509
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1162 def copy_url(self, exclude=("messages", "files")):
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1163 """Construct a URL for creating a copy of this item
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1164
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1165 "exclude" is an optional list of properties that should
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1166 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
1167 includes "messages" and "files" properties. Note that
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1168 "id" property cannot be copied.
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1169
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1170 """
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1171 exclude = ("id", "activity", "actor", "creation", "creator") \
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1172 + tuple(exclude)
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1173 query = {
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1174 "@template": "item",
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1175 "@note": self._("Copy of %(class)s %(id)s") % {
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1176 "class": self._(self._classname), "id": self._nodeid},
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1177 }
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1178 for name in self._props.keys():
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1179 if name not in exclude:
4839
c317147fd891 Fix copy_url to properly support properties that are mutlilinks.
John Rouillard <rouilj@ieee.org>
parents: 4804
diff changeset
1180 prop = self._props[name]
c317147fd891 Fix copy_url to properly support properties that are mutlilinks.
John Rouillard <rouilj@ieee.org>
parents: 4804
diff changeset
1181 if not isinstance(prop, hyperdb.Multilink):
c317147fd891 Fix copy_url to properly support properties that are mutlilinks.
John Rouillard <rouilj@ieee.org>
parents: 4804
diff changeset
1182 query[name] = self[name].plain()
c317147fd891 Fix copy_url to properly support properties that are mutlilinks.
John Rouillard <rouilj@ieee.org>
parents: 4804
diff changeset
1183 else:
c317147fd891 Fix copy_url to properly support properties that are mutlilinks.
John Rouillard <rouilj@ieee.org>
parents: 4804
diff changeset
1184 query[name] = ",".join(self._klass.get(self._nodeid, name))
c317147fd891 Fix copy_url to properly support properties that are mutlilinks.
John Rouillard <rouilj@ieee.org>
parents: 4804
diff changeset
1185
3509
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1186 return self._classname + "?" + "&".join(
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1187 ["%s=%s" % (key, urllib.quote(value))
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1188 for key, value in query.items()])
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1189
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
1190 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
1191 """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
1192 """
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1193 _marker = []
2991
b9a55628a78d more doc fixes
Richard Jones <richard@users.sourceforge.net>
parents: 2983
diff changeset
1194 def hasPermission(self, permission, classname=_marker,
b9a55628a78d more doc fixes
Richard Jones <richard@users.sourceforge.net>
parents: 2983
diff changeset
1195 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
1196 """Determine if the user has the Permission.
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1197
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
1198 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
1199 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
1200 """
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1201 if classname is self._marker:
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
1202 classname = self._client.classname
3535
75dc225613cc fix security check for hasPermission(Permission, None)
Richard Jones <richard@users.sourceforge.net>
parents: 3509
diff changeset
1203 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
1204 self._nodeid, classname, property, itemid)
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
1205
4306
966592263fb8 Clean up all the places where role processing occurs.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4288
diff changeset
1206 def hasRole(self, *rolenames):
966592263fb8 Clean up all the places where role processing occurs.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4288
diff changeset
1207 """Determine whether the user has any role in rolenames."""
966592263fb8 Clean up all the places where role processing occurs.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4288
diff changeset
1208 return self._db.user.has_role(self._nodeid, *rolenames)
3535
75dc225613cc fix security check for hasPermission(Permission, None)
Richard Jones <richard@users.sourceforge.net>
parents: 3509
diff changeset
1209
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
1210 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
1211 if classname == 'user':
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
1212 return _HTMLUser(client, classname, nodeid, anonymous)
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
1213 else:
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
1214 return _HTMLItem(client, classname, nodeid, anonymous)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1215
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1216 class HTMLProperty(HTMLInputMixin, HTMLPermissions):
5067
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5062
diff changeset
1217 """ String, Integer, Number, Date, Interval HTMLProperty
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1218
1123
644d3075c2df more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents: 1122
diff changeset
1219 Has useful attributes:
1080
24c9e81fce85 bugfix, added some doc
Richard Jones <richard@users.sourceforge.net>
parents: 1079
diff changeset
1220
24c9e81fce85 bugfix, added some doc
Richard Jones <richard@users.sourceforge.net>
parents: 1079
diff changeset
1221 _name the name of the property
24c9e81fce85 bugfix, added some doc
Richard Jones <richard@users.sourceforge.net>
parents: 1079
diff changeset
1222 _value the value of the property if any
24c9e81fce85 bugfix, added some doc
Richard Jones <richard@users.sourceforge.net>
parents: 1079
diff changeset
1223
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1224 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
1225 """
1447
6118d4498db3 added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents: 1441
diff changeset
1226 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
1227 anonymous=0):
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
1228 self._client = client
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
1229 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
1230 self._ = client._
1447
6118d4498db3 added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents: 1441
diff changeset
1231 self._classname = classname
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
1232 self._nodeid = nodeid
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
1233 self._prop = prop
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
1234 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
1235 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
1236 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
1237 if not anonymous:
4286
f364978e6e3f Do not create bogus non-anonymous objects.
Stefan Seefeld <stefan@seefeld.name>
parents: 4268
diff changeset
1238 if nodeid:
f364978e6e3f Do not create bogus non-anonymous objects.
Stefan Seefeld <stefan@seefeld.name>
parents: 4268
diff changeset
1239 self._formname = '%s%s@%s'%(classname, nodeid, name)
f364978e6e3f Do not create bogus non-anonymous objects.
Stefan Seefeld <stefan@seefeld.name>
parents: 4268
diff changeset
1240 else:
f364978e6e3f Do not create bogus non-anonymous objects.
Stefan Seefeld <stefan@seefeld.name>
parents: 4268
diff changeset
1241 # This case occurs when creating a property for a
f364978e6e3f Do not create bogus non-anonymous objects.
Stefan Seefeld <stefan@seefeld.name>
parents: 4268
diff changeset
1242 # non-anonymous class.
f364978e6e3f Do not create bogus non-anonymous objects.
Stefan Seefeld <stefan@seefeld.name>
parents: 4268
diff changeset
1243 self._formname = '%s@%s'%(classname, name)
1447
6118d4498db3 added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents: 1441
diff changeset
1244 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
1245 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
1246
4056
a82b17500b22 Fix issue2550512
Stefan Seefeld <stefan@seefeld.name>
parents: 4055
diff changeset
1247 # If no value is already present for this property, see if one
a82b17500b22 Fix issue2550512
Stefan Seefeld <stefan@seefeld.name>
parents: 4055
diff changeset
1248 # is specified in the current form.
a82b17500b22 Fix issue2550512
Stefan Seefeld <stefan@seefeld.name>
parents: 4055
diff changeset
1249 form = self._client.form
4804
bc4144417861 More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4791
diff changeset
1250 try:
bc4144417861 More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4791
diff changeset
1251 is_in = form.has_key(self._formname)
bc4144417861 More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4791
diff changeset
1252 except TypeError:
bc4144417861 More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4791
diff changeset
1253 is_in = False
5166
232c74973a56 issue1408570: fix that form values are lost
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5156
diff changeset
1254 if is_in and (not self._value or self._client.form_wins):
4056
a82b17500b22 Fix issue2550512
Stefan Seefeld <stefan@seefeld.name>
parents: 4055
diff changeset
1255 if isinstance(prop, hyperdb.Multilink):
a82b17500b22 Fix issue2550512
Stefan Seefeld <stefan@seefeld.name>
parents: 4055
diff changeset
1256 value = lookupIds(self._db, prop,
a82b17500b22 Fix issue2550512
Stefan Seefeld <stefan@seefeld.name>
parents: 4055
diff changeset
1257 handleListCGIValue(form[self._formname]),
a82b17500b22 Fix issue2550512
Stefan Seefeld <stefan@seefeld.name>
parents: 4055
diff changeset
1258 fail_ok=1)
a82b17500b22 Fix issue2550512
Stefan Seefeld <stefan@seefeld.name>
parents: 4055
diff changeset
1259 elif isinstance(prop, hyperdb.Link):
a82b17500b22 Fix issue2550512
Stefan Seefeld <stefan@seefeld.name>
parents: 4055
diff changeset
1260 value = form.getfirst(self._formname).strip()
a82b17500b22 Fix issue2550512
Stefan Seefeld <stefan@seefeld.name>
parents: 4055
diff changeset
1261 if value:
a82b17500b22 Fix issue2550512
Stefan Seefeld <stefan@seefeld.name>
parents: 4055
diff changeset
1262 value = lookupIds(self._db, prop, [value],
a82b17500b22 Fix issue2550512
Stefan Seefeld <stefan@seefeld.name>
parents: 4055
diff changeset
1263 fail_ok=1)[0]
a82b17500b22 Fix issue2550512
Stefan Seefeld <stefan@seefeld.name>
parents: 4055
diff changeset
1264 else:
a82b17500b22 Fix issue2550512
Stefan Seefeld <stefan@seefeld.name>
parents: 4055
diff changeset
1265 value = None
a82b17500b22 Fix issue2550512
Stefan Seefeld <stefan@seefeld.name>
parents: 4055
diff changeset
1266 else:
a82b17500b22 Fix issue2550512
Stefan Seefeld <stefan@seefeld.name>
parents: 4055
diff changeset
1267 value = form.getfirst(self._formname).strip() or None
a82b17500b22 Fix issue2550512
Stefan Seefeld <stefan@seefeld.name>
parents: 4055
diff changeset
1268 self._value = value
a82b17500b22 Fix issue2550512
Stefan Seefeld <stefan@seefeld.name>
parents: 4055
diff changeset
1269
1956
1e2cccf6b53b give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents: 1952
diff changeset
1270 HTMLInputMixin.__init__(self)
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1271
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1272 def __repr__(self):
4463
1bd86e82422b Make HTMLProperty report actual classname in repr().
Stefan Seefeld <stefan@seefeld.name>
parents: 4437
diff changeset
1273 classname = self.__class__.__name__
1bd86e82422b Make HTMLProperty report actual classname in repr().
Stefan Seefeld <stefan@seefeld.name>
parents: 4437
diff changeset
1274 return '<%s(0x%x) %s %r %r>'%(classname, id(self), self._formname,
1bd86e82422b Make HTMLProperty report actual classname in repr().
Stefan Seefeld <stefan@seefeld.name>
parents: 4437
diff changeset
1275 self._prop, self._value)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1276 def __str__(self):
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1277 return self.plain()
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1278 def __cmp__(self, other):
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1279 if isinstance(other, HTMLProperty):
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
1280 return cmp(self._value, other._value)
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
1281 return cmp(self._value, other)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1282
2347
fbbda3b1816d implement __nonzero__ for HTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents: 2327
diff changeset
1283 def __nonzero__(self):
fbbda3b1816d implement __nonzero__ for HTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents: 2327
diff changeset
1284 return not not self._value
fbbda3b1816d implement __nonzero__ for HTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents: 2327
diff changeset
1285
2180
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2170
diff changeset
1286 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
1287 """Is my _value not None?"""
2289
6d16b967f89d HTML templating isset() inverted [SF#951779]
Richard Jones <richard@users.sourceforge.net>
parents: 2262
diff changeset
1288 return self._value is not None
2180
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2170
diff changeset
1289
2002
b046b65e51db if you're going to enforce class-level permissions...
Richard Jones <richard@users.sourceforge.net>
parents: 1983
diff changeset
1290 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
1291 """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
1292 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
1293 ones.
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1294 """
4328
3d224f7fb364 add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents: 4306
diff changeset
1295 perm = self._db.security.hasPermission
3d224f7fb364 add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents: 4306
diff changeset
1296 userid = self._client.userid
2002
b046b65e51db if you're going to enforce class-level permissions...
Richard Jones <richard@users.sourceforge.net>
parents: 1983
diff changeset
1297 if self._nodeid:
4329
58b7ba47af87 fixes to make registration work again
Richard Jones <richard@users.sourceforge.net>
parents: 4328
diff changeset
1298 if not perm('Web Access', userid):
58b7ba47af87 fixes to make registration work again
Richard Jones <richard@users.sourceforge.net>
parents: 4328
diff changeset
1299 return False
4328
3d224f7fb364 add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents: 4306
diff changeset
1300 return perm('Edit', userid, self._classname, self._name,
3d224f7fb364 add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents: 4306
diff changeset
1301 self._nodeid)
3d224f7fb364 add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents: 4306
diff changeset
1302 return perm('Create', userid, self._classname, self._name) or \
3d224f7fb364 add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents: 4306
diff changeset
1303 perm('Register', userid, 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
1304
b046b65e51db if you're going to enforce class-level permissions...
Richard Jones <richard@users.sourceforge.net>
parents: 1983
diff changeset
1305 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
1306 """ 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
1307 """
4328
3d224f7fb364 add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents: 4306
diff changeset
1308 perm = self._db.security.hasPermission
3d224f7fb364 add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents: 4306
diff changeset
1309 if perm('Web Access', self._client.userid) and perm('View',
3d224f7fb364 add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents: 4306
diff changeset
1310 self._client.userid, self._classname, self._name, self._nodeid):
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
1311 return 1
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
1312 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
1313
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1314 class StringHTMLProperty(HTMLProperty):
3991
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
1315 hyper_re = re.compile(r'''(
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
1316 (?P<url>
4009
e335ce40d6c8 Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents: 3991
diff changeset
1317 (
e335ce40d6c8 Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents: 3991
diff changeset
1318 (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
1319 ([\w]+(:\w+)?@)? # username/password
797eacd945af add tests for and fix alex's examples
Richard Jones <richard@users.sourceforge.net>
parents: 4009
diff changeset
1320 ([\w\-]+) # hostname
797eacd945af add tests for and fix alex's examples
Richard Jones <richard@users.sourceforge.net>
parents: 4009
diff changeset
1321 ((\.[\w-]+)+)? # .domain.etc
4009
e335ce40d6c8 Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents: 3991
diff changeset
1322 | # ... or ...
4010
797eacd945af add tests for and fix alex's examples
Richard Jones <richard@users.sourceforge.net>
parents: 4009
diff changeset
1323 ([\w]+(:\w+)?@)? # username/password
4009
e335ce40d6c8 Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents: 3991
diff changeset
1324 www\. # "www."
e335ce40d6c8 Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents: 3991
diff changeset
1325 ([\w\-]+\.)+ # hostname
e335ce40d6c8 Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents: 3991
diff changeset
1326 [\w]{2,5} # TLD
e335ce40d6c8 Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents: 3991
diff changeset
1327 )
e335ce40d6c8 Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents: 3991
diff changeset
1328 (:[\d]{1,5})? # port
e335ce40d6c8 Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents: 3991
diff changeset
1329 (/[\w\-$.+!*(),;:@&=?/~\\#%]*)? # path etc.
3991
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
1330 )|
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
1331 (?P<email>[-+=%/\w\.]+@[\w\.\-]+)|
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
1332 (?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
1333 )''', re.X | re.I)
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
1334 protocol_re = re.compile('^(ht|f)tp(s?)://', re.I)
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
1335
4396
172489ea9e07 allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents: 4391
diff changeset
1336
172489ea9e07 allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents: 4391
diff changeset
1337
172489ea9e07 allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents: 4391
diff changeset
1338 def _hyper_repl(self, match):
172489ea9e07 allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents: 4391
diff changeset
1339 if match.group('url'):
172489ea9e07 allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents: 4391
diff changeset
1340 return self._hyper_repl_url(match, '<a href="%s">%s</a>%s')
172489ea9e07 allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents: 4391
diff changeset
1341 elif match.group('email'):
172489ea9e07 allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents: 4391
diff changeset
1342 return self._hyper_repl_email(match, '<a href="mailto:%s">%s</a>')
172489ea9e07 allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents: 4391
diff changeset
1343 elif len(match.group('id')) < 10:
172489ea9e07 allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents: 4391
diff changeset
1344 return self._hyper_repl_item(match,
172489ea9e07 allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents: 4391
diff changeset
1345 '<a href="%(cls)s%(id)s">%(item)s</a>')
172489ea9e07 allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents: 4391
diff changeset
1346 else:
172489ea9e07 allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents: 4391
diff changeset
1347 # just return the matched text
172489ea9e07 allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents: 4391
diff changeset
1348 return match.group(0)
172489ea9e07 allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents: 4391
diff changeset
1349
172489ea9e07 allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents: 4391
diff changeset
1350 def _hyper_repl_url(self, match, replacement):
172489ea9e07 allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents: 4391
diff changeset
1351 u = s = match.group('url')
172489ea9e07 allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents: 4391
diff changeset
1352 if not self.protocol_re.search(s):
172489ea9e07 allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents: 4391
diff changeset
1353 u = 'http://' + s
4413
66603a9051f9 improve handling of '&gt;' when URLs are converted to links
Richard Jones <richard@users.sourceforge.net>
parents: 4396
diff changeset
1354 end = ''
66603a9051f9 improve handling of '&gt;' when URLs are converted to links
Richard Jones <richard@users.sourceforge.net>
parents: 4396
diff changeset
1355 if '&gt;' in s:
66603a9051f9 improve handling of '&gt;' when URLs are converted to links
Richard Jones <richard@users.sourceforge.net>
parents: 4396
diff changeset
1356 # catch an escaped ">" in the URL
66603a9051f9 improve handling of '&gt;' when URLs are converted to links
Richard Jones <richard@users.sourceforge.net>
parents: 4396
diff changeset
1357 pos = s.find('&gt;')
66603a9051f9 improve handling of '&gt;' when URLs are converted to links
Richard Jones <richard@users.sourceforge.net>
parents: 4396
diff changeset
1358 end = s[pos:]
66603a9051f9 improve handling of '&gt;' when URLs are converted to links
Richard Jones <richard@users.sourceforge.net>
parents: 4396
diff changeset
1359 u = s = s[:pos]
4647
11b6601629d7 #2550759: Trailing punctuation is no longer included when URLs are converted to links.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 4587
diff changeset
1360 if s.endswith(tuple('.,;:!')):
11b6601629d7 #2550759: Trailing punctuation is no longer included when URLs are converted to links.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 4587
diff changeset
1361 # don't include trailing punctuation
11b6601629d7 #2550759: Trailing punctuation is no longer included when URLs are converted to links.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 4587
diff changeset
1362 end = s[-1:] + end
11b6601629d7 #2550759: Trailing punctuation is no longer included when URLs are converted to links.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 4587
diff changeset
1363 u = s = s[:-1]
4413
66603a9051f9 improve handling of '&gt;' when URLs are converted to links
Richard Jones <richard@users.sourceforge.net>
parents: 4396
diff changeset
1364 if ')' in s and s.count('(') != s.count(')'):
4396
172489ea9e07 allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents: 4391
diff changeset
1365 # don't include extraneous ')' in the link
172489ea9e07 allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents: 4391
diff changeset
1366 pos = s.rfind(')')
4413
66603a9051f9 improve handling of '&gt;' when URLs are converted to links
Richard Jones <richard@users.sourceforge.net>
parents: 4396
diff changeset
1367 end = s[pos:] + end
4396
172489ea9e07 allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents: 4391
diff changeset
1368 u = s = s[:pos]
4413
66603a9051f9 improve handling of '&gt;' when URLs are converted to links
Richard Jones <richard@users.sourceforge.net>
parents: 4396
diff changeset
1369 return replacement % (u, s, end)
4396
172489ea9e07 allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents: 4391
diff changeset
1370
172489ea9e07 allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents: 4391
diff changeset
1371 def _hyper_repl_email(self, match, replacement):
172489ea9e07 allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents: 4391
diff changeset
1372 s = match.group('email')
172489ea9e07 allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents: 4391
diff changeset
1373 return replacement % (s, s)
172489ea9e07 allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents: 4391
diff changeset
1374
172489ea9e07 allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents: 4391
diff changeset
1375 def _hyper_repl_item(self, match, replacement):
3862
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1376 item = match.group('item')
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1377 cls = match.group('class').lower()
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1378 id = match.group('id')
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1379 try:
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1380 # 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
1381 cl = self._db.getclass(cls)
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1382 if not cl.hasnode(id):
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1383 return item
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1384 return replacement % locals()
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1385 except KeyError:
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1386 return item
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1387
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1388
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1389 def _hyper_repl_rst(self, match):
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1390 if match.group('url'):
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1391 s = match.group('url')
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1392 return '`%s <%s>`_'%(s, s)
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1393 elif match.group('email'):
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1394 s = match.group('email')
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1395 return '`%s <mailto:%s>`_'%(s, s)
4288
ce684080e968 issue2550549: Some bugs issue classifiers were causing database lookup errors
Richard Jones <richard@users.sourceforge.net>
parents: 4286
diff changeset
1396 elif len(match.group('id')) < 10:
ce684080e968 issue2550549: Some bugs issue classifiers were causing database lookup errors
Richard Jones <richard@users.sourceforge.net>
parents: 4286
diff changeset
1397 return self._hyper_repl_item(match,'`%(item)s <%(cls)s%(id)s>`_')
3862
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1398 else:
4288
ce684080e968 issue2550549: Some bugs issue classifiers were causing database lookup errors
Richard Jones <richard@users.sourceforge.net>
parents: 4286
diff changeset
1399 # just return the matched text
ce684080e968 issue2550549: Some bugs issue classifiers were causing database lookup errors
Richard Jones <richard@users.sourceforge.net>
parents: 4286
diff changeset
1400 return match.group(0)
1336
6a54b51b1784 hyperlinking of special message text
Richard Jones <richard@users.sourceforge.net>
parents: 1332
diff changeset
1401
5156
882fa4d9bead issue2550795: @dispname query args in page.html search links
John Rouillard <rouilj@ieee.org>
parents: 5146
diff changeset
1402 def url_quote(self):
882fa4d9bead issue2550795: @dispname query args in page.html search links
John Rouillard <rouilj@ieee.org>
parents: 5146
diff changeset
1403 """ Return the string in plain format but escaped for use in a url """
882fa4d9bead issue2550795: @dispname query args in page.html search links
John Rouillard <rouilj@ieee.org>
parents: 5146
diff changeset
1404 return urllib.quote(self.plain())
882fa4d9bead issue2550795: @dispname query args in page.html search links
John Rouillard <rouilj@ieee.org>
parents: 5146
diff changeset
1405
1773
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1406 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
1407 """ Render a "hyperlinked" version of the text """
1773
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1408 return self.plain(hyperlink=1)
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1409
1374
8e4c3e8de96f fix StringHTMLProperty hyperlinking
Richard Jones <richard@users.sourceforge.net>
parents: 1370
diff changeset
1410 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
1411 """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
1412
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
1413 - "escape" turns on/off HTML quoting
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
1414 - "hyperlink" turns on/off in-text hyperlinking of URLs, email
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
1415 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
1416 """
3117
460eb0209a9e Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents: 3104
diff changeset
1417 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
1418 return self._('[hidden]')
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1419
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
1420 if self._value is None:
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1421 return ''
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1422 if escape:
1336
6a54b51b1784 hyperlinking of special message text
Richard Jones <richard@users.sourceforge.net>
parents: 1332
diff changeset
1423 s = cgi.escape(str(self._value))
6a54b51b1784 hyperlinking of special message text
Richard Jones <richard@users.sourceforge.net>
parents: 1332
diff changeset
1424 else:
1374
8e4c3e8de96f fix StringHTMLProperty hyperlinking
Richard Jones <richard@users.sourceforge.net>
parents: 1370
diff changeset
1425 s = str(self._value)
1336
6a54b51b1784 hyperlinking of special message text
Richard Jones <richard@users.sourceforge.net>
parents: 1332
diff changeset
1426 if hyperlink:
1773
5f15fb95180c various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents: 1771
diff changeset
1427 # no, we *must* escape this text
1374
8e4c3e8de96f fix StringHTMLProperty hyperlinking
Richard Jones <richard@users.sourceforge.net>
parents: 1370
diff changeset
1428 if not escape:
8e4c3e8de96f fix StringHTMLProperty hyperlinking
Richard Jones <richard@users.sourceforge.net>
parents: 1370
diff changeset
1429 s = cgi.escape(s)
1394
d5314bfab0c0 fix incorrect hyperlinking markup
Richard Jones <richard@users.sourceforge.net>
parents: 1374
diff changeset
1430 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
1431 return s
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1432
3644
f35ece8f8ff7 added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents: 3635
diff changeset
1433 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
1434 """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
1435
f35ece8f8ff7 added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents: 3635
diff changeset
1436 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
1437 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
1438
f35ece8f8ff7 added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents: 3635
diff changeset
1439 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
1440 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
1441
f35ece8f8ff7 added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents: 3635
diff changeset
1442 - "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
1443 - "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
1444 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
1445 """
3644
f35ece8f8ff7 added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents: 3635
diff changeset
1446 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
1447 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
1448
f35ece8f8ff7 added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents: 3635
diff changeset
1449 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
1450 return ''
5043
ac0c117cd24c Remove wrap and associated functions from roundup.support
John Kristensen <john@jerrykan.com>
parents: 5006
diff changeset
1451 s = '\n'.join(textwrap.wrap(str(self._value), 80))
3644
f35ece8f8ff7 added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents: 3635
diff changeset
1452 if escape:
f35ece8f8ff7 added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents: 3635
diff changeset
1453 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
1454 if hyperlink:
f35ece8f8ff7 added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents: 3635
diff changeset
1455 # 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
1456 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
1457 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
1458 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
1459 return s
f35ece8f8ff7 added StringHTMLProperty wrapped() method to wrap long lines in issue display
Richard Jones <richard@users.sourceforge.net>
parents: 3635
diff changeset
1460
3509
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1461 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
1462 """ 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
1463
644d3075c2df more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents: 1122
diff changeset
1464 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
1465 """
3117
460eb0209a9e Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents: 3104
diff changeset
1466 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
1467 return self._('[hidden]')
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1468
3509
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1469 s = self.plain(escape=escape, hyperlink=hyperlink)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1470 if not StructuredText:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1471 return s
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1472 return StructuredText(s,level=1,header=0)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1473
3862
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1474 def rst(self, hyperlink=1):
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1475 """ 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
1476
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1477 This requires docutils to be installed separately.
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1478 """
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1479 if not self.is_view_ok():
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1480 return self._('[hidden]')
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1481
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1482 if not ReStructuredText:
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1483 return self.plain(escape=0, hyperlink=hyperlink)
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1484 s = self.plain(escape=0, hyperlink=0)
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1485 if hyperlink:
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1486 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
1487 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
1488 "replace")
b052820e86bf Add a rst method to StringHTMLProperty...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3861
diff changeset
1489
3509
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1490 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
1491 """ 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
1492
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1493 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
1494 """
3040
14322134dcef fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents: 3006
diff changeset
1495 if not self.is_edit_ok():
3971
ff3a8b7d1819 security fixes
Richard Jones <richard@users.sourceforge.net>
parents: 3968
diff changeset
1496 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
1497
3782
51c07c04d258 clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents: 3779
diff changeset
1498 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
1499 if value is None:
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1500 value = ''
3509
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1501
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1502 kwargs.setdefault("size", 30)
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1503 kwargs.update({"name": self._formname, "value": value})
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1504 return self.input(**kwargs)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1505
3905
6733a7cce7f4 multiline pass through extra keywords args
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3903
diff changeset
1506 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
1507 """ 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
1508
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1509 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
1510 """
3040
14322134dcef fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents: 3006
diff changeset
1511 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
1512 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
1513
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
1514 if self._value is None:
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1515 value = ''
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1516 else:
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
1517 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
1518
3710
2862cb0d9be4 default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents: 3702
diff changeset
1519 value = '&quot;'.join(value.split('"'))
2862cb0d9be4 default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents: 3702
diff changeset
1520 name = self._formname
4267
c5f52c2c9e36 Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents: 4233
diff changeset
1521 passthrough_args = cgi_escape_attrs(**kwargs)
3905
6733a7cce7f4 multiline pass through extra keywords args
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3903
diff changeset
1522 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
1523 ' rows="%(rows)s" cols="%(cols)s">'
2862cb0d9be4 default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents: 3702
diff changeset
1524 '%(value)s</textarea>') % locals()
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1525
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1526 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
1527 """ 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
1528 """
3117
460eb0209a9e Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents: 3104
diff changeset
1529 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
1530 return self._('[hidden]')
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1531
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1532 if self._value is None:
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1533 value = ''
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1534 else:
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1535 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
1536 split = value.split('@')
d7bab396c228 email obfuscation code in html templating is more robust
Richard Jones <richard@users.sourceforge.net>
parents: 3565
diff changeset
1537 if len(split) == 2:
d7bab396c228 email obfuscation code in html templating is more robust
Richard Jones <richard@users.sourceforge.net>
parents: 3565
diff changeset
1538 name, domain = split
1133
36ec30d286ea Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents: 1124
diff changeset
1539 domain = ' '.join(domain.split('.')[:-1])
36ec30d286ea Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents: 1124
diff changeset
1540 name = name.replace('.', ' ')
36ec30d286ea Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents: 1124
diff changeset
1541 value = '%s at %s ...'%(name, domain)
36ec30d286ea Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents: 1124
diff changeset
1542 else:
36ec30d286ea Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents: 1124
diff changeset
1543 value = value.replace('.', ' ')
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1544 if escape:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1545 value = cgi.escape(value)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1546 return value
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1547
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1548 class PasswordHTMLProperty(HTMLProperty):
3971
ff3a8b7d1819 security fixes
Richard Jones <richard@users.sourceforge.net>
parents: 3968
diff changeset
1549 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
1550 """ 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
1551 """
3117
460eb0209a9e Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents: 3104
diff changeset
1552 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
1553 return self._('[hidden]')
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1554
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
1555 if self._value is None:
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1556 return ''
4483
22bc0426e348 Second patch from issue2550688 -- with some changes:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4481
diff changeset
1557 value = self._value.dummystr()
22bc0426e348 Second patch from issue2550688 -- with some changes:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4481
diff changeset
1558 if escape:
22bc0426e348 Second patch from issue2550688 -- with some changes:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4481
diff changeset
1559 value = cgi.escape(value)
22bc0426e348 Second patch from issue2550688 -- with some changes:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4481
diff changeset
1560 return value
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1561
4267
c5f52c2c9e36 Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents: 4233
diff changeset
1562 def field(self, size=30, **kwargs):
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 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
1564
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1565 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
1566 """
3040
14322134dcef fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents: 3006
diff changeset
1567 if not self.is_edit_ok():
3971
ff3a8b7d1819 security fixes
Richard Jones <richard@users.sourceforge.net>
parents: 3968
diff changeset
1568 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
1569
4267
c5f52c2c9e36 Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents: 4233
diff changeset
1570 return self.input(type="password", name=self._formname, size=size,
c5f52c2c9e36 Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents: 4233
diff changeset
1571 **kwargs)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1572
3710
2862cb0d9be4 default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents: 3702
diff changeset
1573 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
1574 """ 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
1575 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
1576 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
1577
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1578 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
1579 """
3040
14322134dcef fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents: 3006
diff changeset
1580 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
1581 return ''
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1582
3040
14322134dcef fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents: 3006
diff changeset
1583 return self.input(type="password",
3710
2862cb0d9be4 default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents: 3702
diff changeset
1584 name="@confirm@%s"%self._formname,
2862cb0d9be4 default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents: 3702
diff changeset
1585 id="%s-confirm"%self._formname,
2862cb0d9be4 default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents: 3702
diff changeset
1586 size=size)
1144
db13f46cb5f9 password edit now has a confirmation field
Richard Jones <richard@users.sourceforge.net>
parents: 1136
diff changeset
1587
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1588 class NumberHTMLProperty(HTMLProperty):
3971
ff3a8b7d1819 security fixes
Richard Jones <richard@users.sourceforge.net>
parents: 3968
diff changeset
1589 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
1590 """ 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
1591 """
3117
460eb0209a9e Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents: 3104
diff changeset
1592 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
1593 return self._('[hidden]')
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1594
2884
6d6fdd1daf92 NumberHTMLProperty should return "" not "None" if not set
Richard Jones <richard@users.sourceforge.net>
parents: 2883
diff changeset
1595 if self._value is None:
6d6fdd1daf92 NumberHTMLProperty should return "" not "None" if not set
Richard Jones <richard@users.sourceforge.net>
parents: 2883
diff changeset
1596 return ''
6d6fdd1daf92 NumberHTMLProperty should return "" not "None" if not set
Richard Jones <richard@users.sourceforge.net>
parents: 2883
diff changeset
1597
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
1598 return str(self._value)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1599
4267
c5f52c2c9e36 Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents: 4233
diff changeset
1600 def field(self, size=30, **kwargs):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1601 """ 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
1602
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1603 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
1604 """
3040
14322134dcef fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents: 3006
diff changeset
1605 if not self.is_edit_ok():
3971
ff3a8b7d1819 security fixes
Richard Jones <richard@users.sourceforge.net>
parents: 3968
diff changeset
1606 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
1607
3782
51c07c04d258 clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents: 3779
diff changeset
1608 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
1609 if value is None:
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1610 value = ''
3782
51c07c04d258 clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents: 3779
diff changeset
1611
4267
c5f52c2c9e36 Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents: 4233
diff changeset
1612 return self.input(name=self._formname, value=value, size=size,
c5f52c2c9e36 Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents: 4233
diff changeset
1613 **kwargs)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1614
1518
bb843662b708 basic numeric support for NumberHTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents: 1513
diff changeset
1615 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
1616 """ 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
1617 """
1518
bb843662b708 basic numeric support for NumberHTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents: 1513
diff changeset
1618 return int(self._value)
bb843662b708 basic numeric support for NumberHTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents: 1513
diff changeset
1619
bb843662b708 basic numeric support for NumberHTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents: 1513
diff changeset
1620 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
1621 """ 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
1622 """
1518
bb843662b708 basic numeric support for NumberHTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents: 1513
diff changeset
1623 return float(self._value)
bb843662b708 basic numeric support for NumberHTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents: 1513
diff changeset
1624
5067
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5062
diff changeset
1625 class IntegerHTMLProperty(HTMLProperty):
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5062
diff changeset
1626 def plain(self, escape=0):
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5062
diff changeset
1627 """ Render a "plain" representation of the property
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5062
diff changeset
1628 """
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5062
diff changeset
1629 if not self.is_view_ok():
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5062
diff changeset
1630 return self._('[hidden]')
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5062
diff changeset
1631
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5062
diff changeset
1632 if self._value is None:
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5062
diff changeset
1633 return ''
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5062
diff changeset
1634
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5062
diff changeset
1635 return str(self._value)
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5062
diff changeset
1636
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5062
diff changeset
1637 def field(self, size=30, **kwargs):
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5062
diff changeset
1638 """ Render a form edit field for the property.
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5062
diff changeset
1639
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5062
diff changeset
1640 If not editable, just display the value via plain().
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5062
diff changeset
1641 """
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5062
diff changeset
1642 if not self.is_edit_ok():
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5062
diff changeset
1643 return self.plain(escape=1)
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5062
diff changeset
1644
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5062
diff changeset
1645 value = self._value
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5062
diff changeset
1646 if value is None:
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5062
diff changeset
1647 value = ''
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5062
diff changeset
1648
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5062
diff changeset
1649 return self.input(name=self._formname, value=value, size=size,
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5062
diff changeset
1650 **kwargs)
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5062
diff changeset
1651
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5062
diff changeset
1652 def __int__(self):
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5062
diff changeset
1653 """ Return an int of me
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5062
diff changeset
1654 """
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5062
diff changeset
1655 return int(self._value)
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5062
diff changeset
1656
1518
bb843662b708 basic numeric support for NumberHTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents: 1513
diff changeset
1657
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1658 class BooleanHTMLProperty(HTMLProperty):
3971
ff3a8b7d1819 security fixes
Richard Jones <richard@users.sourceforge.net>
parents: 3968
diff changeset
1659 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
1660 """ 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
1661 """
3117
460eb0209a9e Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents: 3104
diff changeset
1662 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
1663 return self._('[hidden]')
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1664
1289
257f0ab00d50 bugfix in boolean templating
Richard Jones <richard@users.sourceforge.net>
parents: 1284
diff changeset
1665 if self._value is None:
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1666 return ''
3354
201dbcf63a30 use translation for boolean property rendering [SF#1225152]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3338
diff changeset
1667 return self._value and self._("Yes") or self._("No")
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1668
4784
888676704342 issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents: 4783
diff changeset
1669 def field(self, labelfirst=False, y_label=None, n_label=None,
888676704342 issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents: 4783
diff changeset
1670 u_label=None, **kwargs):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1671 """ 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
1672
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1673 If not editable, just display the value via plain().
4784
888676704342 issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents: 4783
diff changeset
1674
888676704342 issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents: 4783
diff changeset
1675 In addition to being able to set arbitrary html properties
888676704342 issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents: 4783
diff changeset
1676 using prop=val arguments, the thre arguments:
888676704342 issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents: 4783
diff changeset
1677
888676704342 issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents: 4783
diff changeset
1678 y_label, n_label, u_label let you control the labels
888676704342 issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents: 4783
diff changeset
1679 associated with the yes, no (and optionally unknown/empty)
888676704342 issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents: 4783
diff changeset
1680 values.
888676704342 issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents: 4783
diff changeset
1681
888676704342 issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents: 4783
diff changeset
1682 Also the labels can be placed before the radiobuttons by setting
888676704342 issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents: 4783
diff changeset
1683 labelfirst=True.
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1684 """
2113
30aeb17e5b04 Boolean HTML templating was broken
Richard Jones <richard@users.sourceforge.net>
parents: 2106
diff changeset
1685 if not self.is_edit_ok():
3971
ff3a8b7d1819 security fixes
Richard Jones <richard@users.sourceforge.net>
parents: 3968
diff changeset
1686 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
1687
3151
6feac4fcf883 Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3127
diff changeset
1688 value = self._value
6feac4fcf883 Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3127
diff changeset
1689 if isinstance(value, str) or isinstance(value, unicode):
6feac4fcf883 Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3127
diff changeset
1690 value = value.strip().lower() in ('checked', 'yes', 'true',
6feac4fcf883 Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3127
diff changeset
1691 'on', '1')
6feac4fcf883 Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3127
diff changeset
1692
4784
888676704342 issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents: 4783
diff changeset
1693 if ( not y_label ):
888676704342 issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents: 4783
diff changeset
1694 y_label = '<label class="rblabel" for="%s_%s">'%(self._formname, 'yes')
888676704342 issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents: 4783
diff changeset
1695 y_label += self._('Yes')
888676704342 issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents: 4783
diff changeset
1696 y_label += '</label>'
888676704342 issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents: 4783
diff changeset
1697
888676704342 issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents: 4783
diff changeset
1698 if ( not n_label ):
888676704342 issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents: 4783
diff changeset
1699 n_label = '<label class="rblabel" for="%s_%s">'%(self._formname, 'no')
888676704342 issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents: 4783
diff changeset
1700 n_label += self._('No')
888676704342 issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents: 4783
diff changeset
1701 n_label += '</label>'
888676704342 issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents: 4783
diff changeset
1702
3151
6feac4fcf883 Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3127
diff changeset
1703 checked = value and "checked" or ""
6feac4fcf883 Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3127
diff changeset
1704 if value:
4784
888676704342 issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents: 4783
diff changeset
1705 y_rb = self.input(type="radio", name=self._formname, value="yes",
888676704342 issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents: 4783
diff changeset
1706 checked="checked", id="%s_%s"%(self._formname, 'yes'), **kwargs)
888676704342 issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents: 4783
diff changeset
1707
888676704342 issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents: 4783
diff changeset
1708 n_rb =self.input(type="radio", name=self._formname, value="no",
888676704342 issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents: 4783
diff changeset
1709 id="%s_%s"%(self._formname, 'no'), **kwargs)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1710 else:
4784
888676704342 issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents: 4783
diff changeset
1711 y_rb = self.input(type="radio", name=self._formname, value="yes",
888676704342 issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents: 4783
diff changeset
1712 id="%s_%s"%(self._formname, 'yes'), **kwargs)
888676704342 issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents: 4783
diff changeset
1713
888676704342 issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents: 4783
diff changeset
1714 n_rb = self.input(type="radio", name=self._formname, value="no",
888676704342 issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents: 4783
diff changeset
1715 checked="checked", id="%s_%s"%(self._formname, 'no'), **kwargs)
888676704342 issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents: 4783
diff changeset
1716
888676704342 issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents: 4783
diff changeset
1717 if ( u_label ):
888676704342 issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents: 4783
diff changeset
1718 if (u_label is True): # it was set via u_label=True
888676704342 issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents: 4783
diff changeset
1719 u_label = '' # make it empty but a string not boolean
888676704342 issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents: 4783
diff changeset
1720 u_rb = self.input(type="radio", name=self._formname, value="",
888676704342 issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents: 4783
diff changeset
1721 id="%s_%s"%(self._formname, 'unk'), **kwargs)
888676704342 issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents: 4783
diff changeset
1722 else:
888676704342 issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents: 4783
diff changeset
1723 # don't generate a trivalue radiobutton.
888676704342 issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents: 4783
diff changeset
1724 u_label = ''
888676704342 issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents: 4783
diff changeset
1725 u_rb=''
888676704342 issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents: 4783
diff changeset
1726
888676704342 issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents: 4783
diff changeset
1727 if ( labelfirst ):
888676704342 issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents: 4783
diff changeset
1728 s = u_label + u_rb + y_label + y_rb + n_label + n_rb
888676704342 issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents: 4783
diff changeset
1729 else:
888676704342 issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents: 4783
diff changeset
1730 s = u_label + u_rb +y_rb + y_label + n_rb + n_label
888676704342 issue2550808 BooleanHTMLProperty::field method html needs to be more
John Rouillard <rouilj@ieee.org>
parents: 4783
diff changeset
1731
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1732 return s
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1733
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1734 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
1735
4511fd6c5dbf format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2884
diff changeset
1736 _marker = []
4511fd6c5dbf format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2884
diff changeset
1737
2314
7c8d2e9a0566 fix DateHTMLProperty so local() can override user timezone [SF#953678]
Richard Jones <richard@users.sourceforge.net>
parents: 2289
diff changeset
1738 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
1739 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
1740 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
1741 value, anonymous=anonymous)
3151
6feac4fcf883 Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3127
diff changeset
1742 if self._value and not (isinstance(self._value, str) or
6feac4fcf883 Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3127
diff changeset
1743 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
1744 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
1745 self._offset = offset
3383
c1c67c62b699 applied patch [SF#236087]
Richard Jones <richard@users.sourceforge.net>
parents: 3369
diff changeset
1746 if self._offset is None :
c1c67c62b699 applied patch [SF#236087]
Richard Jones <richard@users.sourceforge.net>
parents: 3369
diff changeset
1747 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
1748
3971
ff3a8b7d1819 security fixes
Richard Jones <richard@users.sourceforge.net>
parents: 3968
diff changeset
1749 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
1750 """ 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
1751 """
3117
460eb0209a9e Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents: 3104
diff changeset
1752 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
1753 return self._('[hidden]')
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1754
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
1755 if self._value is None:
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1756 return ''
2314
7c8d2e9a0566 fix DateHTMLProperty so local() can override user timezone [SF#953678]
Richard Jones <richard@users.sourceforge.net>
parents: 2289
diff changeset
1757 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
1758 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
1759 else:
7c8d2e9a0566 fix DateHTMLProperty so local() can override user timezone [SF#953678]
Richard Jones <richard@users.sourceforge.net>
parents: 2289
diff changeset
1760 offset = self._offset
4842
1e4c45a4254b Allow using plain() on unsaved dates in HTML forms
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4839
diff changeset
1761 try:
1e4c45a4254b Allow using plain() on unsaved dates in HTML forms
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4839
diff changeset
1762 return str(self._value.local(offset))
1e4c45a4254b Allow using plain() on unsaved dates in HTML forms
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4839
diff changeset
1763 except AttributeError:
1e4c45a4254b Allow using plain() on unsaved dates in HTML forms
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4839
diff changeset
1764 # not a date value, e.g. from unsaved form data
1e4c45a4254b Allow using plain() on unsaved dates in HTML forms
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4839
diff changeset
1765 return str(self._value)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1766
2580
e90d63c7eceb fixed DateHTMLProperty for invalid date entry [SF#986538]
Richard Jones <richard@users.sourceforge.net>
parents: 2574
diff changeset
1767 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
1768 """ Return the current time.
1436
2f6647cf5345 bugger, dropping support for "+" special char
Richard Jones <richard@users.sourceforge.net>
parents: 1421
diff changeset
1769
2f6647cf5345 bugger, dropping support for "+" special char
Richard Jones <richard@users.sourceforge.net>
parents: 1421
diff changeset
1770 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
1771 DateHTMLProperty.
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1772 """
3117
460eb0209a9e Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents: 3104
diff changeset
1773 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
1774 return self._('[hidden]')
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1775
3040
14322134dcef fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents: 3006
diff changeset
1776 ret = date.Date('.', translator=self._client)
2471
31cd032291c5 new templating features
Richard Jones <richard@users.sourceforge.net>
parents: 2466
diff changeset
1777
3040
14322134dcef fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents: 3006
diff changeset
1778 if isinstance(str_interval, basestring):
14322134dcef fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents: 3006
diff changeset
1779 sign = 1
14322134dcef fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents: 3006
diff changeset
1780 if str_interval[0] == '-':
14322134dcef fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents: 3006
diff changeset
1781 sign = -1
14322134dcef fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents: 3006
diff changeset
1782 str_interval = str_interval[1:]
14322134dcef fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents: 3006
diff changeset
1783 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
1784 if sign > 0:
14322134dcef fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents: 3006
diff changeset
1785 ret = ret + interval
14322134dcef fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents: 3006
diff changeset
1786 else:
14322134dcef fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents: 3006
diff changeset
1787 ret = ret - interval
2520
0914d72bb15b fix single string split into three separate MsgIDs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2471
diff changeset
1788
2037
35ed1560ba2b missed one
Richard Jones <richard@users.sourceforge.net>
parents: 2036
diff changeset
1789 return DateHTMLProperty(self._client, self._classname, self._nodeid,
2471
31cd032291c5 new templating features
Richard Jones <richard@users.sourceforge.net>
parents: 2466
diff changeset
1790 self._prop, self._formname, ret)
1436
2f6647cf5345 bugger, dropping support for "+" special char
Richard Jones <richard@users.sourceforge.net>
parents: 1421
diff changeset
1791
4267
c5f52c2c9e36 Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents: 4233
diff changeset
1792 def field(self, size=30, default=None, format=_marker, popcal=True,
c5f52c2c9e36 Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents: 4233
diff changeset
1793 **kwargs):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1794 """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
1795
2956
4511fd6c5dbf format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2884
diff changeset
1796 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
1797
3649
12633662ff63 include the popcal in Date field editing and search fields by default
Richard Jones <richard@users.sourceforge.net>
parents: 3644
diff changeset
1798 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
1799 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
1800
2956
4511fd6c5dbf format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2884
diff changeset
1801 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
1802 """
2956
4511fd6c5dbf format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2884
diff changeset
1803 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
1804 if format is self._marker:
3971
ff3a8b7d1819 security fixes
Richard Jones <richard@users.sourceforge.net>
parents: 3968
diff changeset
1805 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
1806 else:
4511fd6c5dbf format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2884
diff changeset
1807 return self.pretty(format)
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1808
3151
6feac4fcf883 Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3127
diff changeset
1809 value = self._value
6feac4fcf883 Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3127
diff changeset
1810
6feac4fcf883 Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3127
diff changeset
1811 if value is None:
2471
31cd032291c5 new templating features
Richard Jones <richard@users.sourceforge.net>
parents: 2466
diff changeset
1812 if default is None:
31cd032291c5 new templating features
Richard Jones <richard@users.sourceforge.net>
parents: 2466
diff changeset
1813 raw_value = None
31cd032291c5 new templating features
Richard Jones <richard@users.sourceforge.net>
parents: 2466
diff changeset
1814 else:
31cd032291c5 new templating features
Richard Jones <richard@users.sourceforge.net>
parents: 2466
diff changeset
1815 if isinstance(default, basestring):
3832
bbc977e1cd2c Fix handling of defaults for date fields
Richard Jones <richard@users.sourceforge.net>
parents: 3785
diff changeset
1816 raw_value = date.Date(default, translator=self._client)
2471
31cd032291c5 new templating features
Richard Jones <richard@users.sourceforge.net>
parents: 2466
diff changeset
1817 elif isinstance(default, date.Date):
31cd032291c5 new templating features
Richard Jones <richard@users.sourceforge.net>
parents: 2466
diff changeset
1818 raw_value = default
3040
14322134dcef fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents: 3006
diff changeset
1819 elif isinstance(default, DateHTMLProperty):
14322134dcef fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents: 3006
diff changeset
1820 raw_value = default._value
2471
31cd032291c5 new templating features
Richard Jones <richard@users.sourceforge.net>
parents: 2466
diff changeset
1821 else:
3164
24476db8872f nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents: 3159
diff changeset
1822 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
1823 '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
1824 'or string date representation.')
3151
6feac4fcf883 Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3127
diff changeset
1825 elif isinstance(value, str) or isinstance(value, unicode):
6feac4fcf883 Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3127
diff changeset
1826 # 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
1827 if isinstance(value, unicode): value = value.encode('utf8')
4927
c120f747e0b4 In case of an error, date fields would lose the calendar help, fixed.
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4880
diff changeset
1828 s = self.input(name=self._formname, value=value, size=size,
4267
c5f52c2c9e36 Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents: 4233
diff changeset
1829 **kwargs)
4927
c120f747e0b4 In case of an error, date fields would lose the calendar help, fixed.
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4880
diff changeset
1830 if popcal:
c120f747e0b4 In case of an error, date fields would lose the calendar help, fixed.
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4880
diff changeset
1831 s += self.popcal()
c120f747e0b4 In case of an error, date fields would lose the calendar help, fixed.
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4880
diff changeset
1832 return s
2471
31cd032291c5 new templating features
Richard Jones <richard@users.sourceforge.net>
parents: 2466
diff changeset
1833 else:
3151
6feac4fcf883 Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3127
diff changeset
1834 raw_value = value
2471
31cd032291c5 new templating features
Richard Jones <richard@users.sourceforge.net>
parents: 2466
diff changeset
1835
31cd032291c5 new templating features
Richard Jones <richard@users.sourceforge.net>
parents: 2466
diff changeset
1836 if raw_value is None:
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1837 value = ''
3151
6feac4fcf883 Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3127
diff changeset
1838 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
1839 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
1840 value = raw_value
4511fd6c5dbf format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2884
diff changeset
1841 else:
4511fd6c5dbf format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2884
diff changeset
1842 value = date.Date(raw_value).pretty(format)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1843 else:
3383
c1c67c62b699 applied patch [SF#236087]
Richard Jones <richard@users.sourceforge.net>
parents: 3369
diff changeset
1844 if self._offset is None :
c1c67c62b699 applied patch [SF#236087]
Richard Jones <richard@users.sourceforge.net>
parents: 3369
diff changeset
1845 offset = self._db.getUserTimezone()
c1c67c62b699 applied patch [SF#236087]
Richard Jones <richard@users.sourceforge.net>
parents: 3369
diff changeset
1846 else :
c1c67c62b699 applied patch [SF#236087]
Richard Jones <richard@users.sourceforge.net>
parents: 3369
diff changeset
1847 offset = self._offset
c1c67c62b699 applied patch [SF#236087]
Richard Jones <richard@users.sourceforge.net>
parents: 3369
diff changeset
1848 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
1849 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
1850 value = value.pretty(format)
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1851
4267
c5f52c2c9e36 Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents: 4233
diff changeset
1852 s = self.input(name=self._formname, value=value, size=size,
c5f52c2c9e36 Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents: 4233
diff changeset
1853 **kwargs)
3649
12633662ff63 include the popcal in Date field editing and search fields by default
Richard Jones <richard@users.sourceforge.net>
parents: 3644
diff changeset
1854 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
1855 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
1856 return s
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1857
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1858 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
1859 """ 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
1860
1fc1f92c5f31 more doc, bugfix in Batch
Richard Jones <richard@users.sourceforge.net>
parents: 1123
diff changeset
1861 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
1862 """
3117
460eb0209a9e Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents: 3104
diff changeset
1863 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
1864 return self._('[hidden]')
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1865
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
1866 if not self._value:
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1867 return ''
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1868
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1869 # figure the interval
2524
736115d374f2 use client instance to translate Date and Interval objects
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2520
diff changeset
1870 interval = self._value - date.Date('.', translator=self._client)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1871 if pretty:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1872 return interval.pretty()
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1873 return str(interval)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1874
1453
b72f422d1e5e better handling of format param
Richard Jones <richard@users.sourceforge.net>
parents: 1451
diff changeset
1875 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
1876 """ 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
1877
cae50587fb96 expose the Date.pretty method to templating
Richard Jones <richard@users.sourceforge.net>
parents: 1270
diff changeset
1878 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
1879 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
1880 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
1881 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
1882 """
3117
460eb0209a9e Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents: 3104
diff changeset
1883 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
1884 return self._('[hidden]')
3509
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1885
3479
86d6131847e8 timezone now applied to date for pretty-format [SF#1406861]
Richard Jones <richard@users.sourceforge.net>
parents: 3472
diff changeset
1886 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
1887 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
1888 else:
86d6131847e8 timezone now applied to date for pretty-format [SF#1406861]
Richard Jones <richard@users.sourceforge.net>
parents: 3472
diff changeset
1889 offset = self._offset
3509
dcaa366b2cc8 fix StructuredText import;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3505
diff changeset
1890
2956
4511fd6c5dbf format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2884
diff changeset
1891 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
1892 return ''
4511fd6c5dbf format parameter for DateHTMLProperty.field() (based on patch [SF#1072834])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2884
diff changeset
1893 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
1894 return self._value.local(offset).pretty(format)
1453
b72f422d1e5e better handling of format param
Richard Jones <richard@users.sourceforge.net>
parents: 1451
diff changeset
1895 else:
3479
86d6131847e8 timezone now applied to date for pretty-format [SF#1406861]
Richard Jones <richard@users.sourceforge.net>
parents: 3472
diff changeset
1896 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
1897
1320
3758a5af985f Lots of little fixes in this update:
Richard Jones <richard@users.sourceforge.net>
parents: 1289
diff changeset
1898 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
1899 """ 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
1900 """
3117
460eb0209a9e Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents: 3104
diff changeset
1901 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
1902 return self._('[hidden]')
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1903
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
1904 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
1905 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
1906
3710
2862cb0d9be4 default attributes for input fields:
Tobias Herp <tobias-herp@users.sourceforge.net>
parents: 3702
diff changeset
1907 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
1908 form="itemSynopsis"):
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
1909 """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
1910
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
1911 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
1912 """
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
1913 if self.isset():
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
1914 date = "&date=%s"%self._value
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
1915 else :
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
1916 date = ""
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
1917 return ('<a class="classhelp" href="javascript:help_window('
4052
f8ba421ee4b0 Quote ampersands in URLs.
Stefan Seefeld <stefan@seefeld.name>
parents: 4051
diff changeset
1918 "'%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
1919 '">%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
1920 height, label))
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
1921
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1922 class IntervalHTMLProperty(HTMLProperty):
2389
2ff93cee9c63 StaticTranslationService got methods gettext() and ngettext()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2377
diff changeset
1923 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
1924 anonymous=0):
2ff93cee9c63 StaticTranslationService got methods gettext() and ngettext()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2377
diff changeset
1925 HTMLProperty.__init__(self, client, classname, nodeid, prop,
2ff93cee9c63 StaticTranslationService got methods gettext() and ngettext()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2377
diff changeset
1926 name, value, anonymous)
3338
afe094d2daed fix handling of invalid interval input
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3332
diff changeset
1927 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
1928 self._value.setTranslator(self._client.translator)
2389
2ff93cee9c63 StaticTranslationService got methods gettext() and ngettext()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2377
diff changeset
1929
3971
ff3a8b7d1819 security fixes
Richard Jones <richard@users.sourceforge.net>
parents: 3968
diff changeset
1930 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
1931 """ 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
1932 """
3117
460eb0209a9e Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents: 3104
diff changeset
1933 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
1934 return self._('[hidden]')
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1935
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
1936 if self._value is None:
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1937 return ''
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
1938 return str(self._value)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1939
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1940 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
1941 """ 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
1942 """
3117
460eb0209a9e Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents: 3104
diff changeset
1943 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
1944 return self._('[hidden]')
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1945
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
1946 return self._value.pretty()
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1947
4267
c5f52c2c9e36 Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents: 4233
diff changeset
1948 def field(self, size=30, **kwargs):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
1949 """ 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
1950
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
1951 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
1952 """
3040
14322134dcef fix permissions checks in cgi templating [SF#1082755]
Richard Jones <richard@users.sourceforge.net>
parents: 3006
diff changeset
1953 if not self.is_edit_ok():
3971
ff3a8b7d1819 security fixes
Richard Jones <richard@users.sourceforge.net>
parents: 3968
diff changeset
1954 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
1955
3782
51c07c04d258 clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents: 3779
diff changeset
1956 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
1957 if value is None:
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1958 value = ''
3782
51c07c04d258 clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents: 3779
diff changeset
1959
4267
c5f52c2c9e36 Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents: 4233
diff changeset
1960 return self.input(name=self._formname, value=value, size=size,
c5f52c2c9e36 Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents: 4233
diff changeset
1961 **kwargs)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1962
4878
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4875
diff changeset
1963 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
1964 """ Link HTMLProperty
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1965 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
1966 information. Stringifying the object itself results in the value
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1967 from the item being displayed. Accessing attributes of this object
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1968 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
1969 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
1970 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
1971 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
1972 """
1447
6118d4498db3 added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents: 1441
diff changeset
1973 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
1974 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
1975 # 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
1976 # 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
1977 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
1978 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
1979
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1980 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
1981 """ return a new HTMLItem """
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
1982 if not self._value:
3394
5c7ff95fecad work around pagetemplate oddity
Richard Jones <richard@users.sourceforge.net>
parents: 3383
diff changeset
1983 # handle a special page templates lookup
5c7ff95fecad work around pagetemplate oddity
Richard Jones <richard@users.sourceforge.net>
parents: 3383
diff changeset
1984 if attr == '__render_with_namespace__':
5c7ff95fecad work around pagetemplate oddity
Richard Jones <richard@users.sourceforge.net>
parents: 3383
diff changeset
1985 def nothing(*args, **kw):
5c7ff95fecad work around pagetemplate oddity
Richard Jones <richard@users.sourceforge.net>
parents: 3383
diff changeset
1986 return ''
5c7ff95fecad work around pagetemplate oddity
Richard Jones <richard@users.sourceforge.net>
parents: 3383
diff changeset
1987 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
1988 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
1989 return MissingValue(msg%locals())
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
1990 i = HTMLItem(self._client, self._prop.classname, self._value)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1991 return getattr(i, attr)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1992
4878
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4875
diff changeset
1993 def __getitem__(self, item):
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4875
diff changeset
1994 """Explicitly define __getitem__ -- this used to work earlier
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4875
diff changeset
1995 due to __getattr__ returning the __getitem__ of HTMLItem -- this
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4875
diff changeset
1996 lookup doesn't work for new-style classes.
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4875
diff changeset
1997 """
4879
302c967d710c HTML* classes for cgi: handle MissingValue case
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4878
diff changeset
1998 if not self._value:
302c967d710c HTML* classes for cgi: handle MissingValue case
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4878
diff changeset
1999 msg = self._('Attempt to look up %(item)s on a missing value')
302c967d710c HTML* classes for cgi: handle MissingValue case
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4878
diff changeset
2000 return MissingValue(msg%locals())
4878
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4875
diff changeset
2001 i = HTMLItem(self._client, self._prop.classname, self._value)
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4875
diff changeset
2002 return i[item]
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4875
diff changeset
2003
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2004 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
2005 """ 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
2006 """
3117
460eb0209a9e Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents: 3104
diff changeset
2007 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
2008 return self._('[hidden]')
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
2009
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
2010 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
2011 return ''
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
2012 linkcl = self._db.classes[self._prop.classname]
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2013 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
2014 if num_re.match(self._value):
4058
3057092623e1 Robustify (Multi)linkHTMLProperty.plain.
Stefan Seefeld <stefan@seefeld.name>
parents: 4057
diff changeset
2015 try:
3057092623e1 Robustify (Multi)linkHTMLProperty.plain.
Stefan Seefeld <stefan@seefeld.name>
parents: 4057
diff changeset
2016 value = str(linkcl.get(self._value, k))
3057092623e1 Robustify (Multi)linkHTMLProperty.plain.
Stefan Seefeld <stefan@seefeld.name>
parents: 4057
diff changeset
2017 except IndexError:
3057092623e1 Robustify (Multi)linkHTMLProperty.plain.
Stefan Seefeld <stefan@seefeld.name>
parents: 4057
diff changeset
2018 value = self._value
3936
63d58cc1394a make LinkHTMLProperty handle non-existing keys (patch [SF#1815895])
Richard Jones <richard@users.sourceforge.net>
parents: 3909
diff changeset
2019 else :
63d58cc1394a make LinkHTMLProperty handle non-existing keys (patch [SF#1815895])
Richard Jones <richard@users.sourceforge.net>
parents: 3909
diff changeset
2020 value = self._value
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2021 if escape:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2022 value = cgi.escape(value)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2023 return value
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2024
4267
c5f52c2c9e36 Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents: 4233
diff changeset
2025 def field(self, showid=0, size=None, **kwargs):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2026 """ 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
2027
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
2028 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
2029 """
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
2030 if not self.is_edit_ok():
3971
ff3a8b7d1819 security fixes
Richard Jones <richard@users.sourceforge.net>
parents: 3968
diff changeset
2031 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
2032
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
2033 # edit field
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
2034 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
2035 if self._value is None:
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
2036 value = ''
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
2037 else:
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
2038 k = linkcl.getkey()
4958
9b1302f9fb11 Fix for 'try_id_parsing'
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4945
diff changeset
2039 idparse = self._prop.try_id_parsing
4959
177b77302262 Another fix for 'try_id_parsing'
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4958
diff changeset
2040 if k and num_re.match(self._value):
177b77302262 Another fix for 'try_id_parsing'
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4958
diff changeset
2041 try :
177b77302262 Another fix for 'try_id_parsing'
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4958
diff changeset
2042 value = linkcl.get(self._value, k)
177b77302262 Another fix for 'try_id_parsing'
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4958
diff changeset
2043 except IndexError :
177b77302262 Another fix for 'try_id_parsing'
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4958
diff changeset
2044 if idparse :
177b77302262 Another fix for 'try_id_parsing'
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4958
diff changeset
2045 raise
177b77302262 Another fix for 'try_id_parsing'
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4958
diff changeset
2046 value = ''
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2047 else:
2116
1ef1b050b785 fix Link HTML field()
Richard Jones <richard@users.sourceforge.net>
parents: 2113
diff changeset
2048 value = self._value
4267
c5f52c2c9e36 Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents: 4233
diff changeset
2049 return self.input(name=self._formname, value=value, size=size,
c5f52c2c9e36 Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents: 4233
diff changeset
2050 **kwargs)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2051
3470
fd32170475f5 allow preselection of values in templating menu()s (patch [SF#1396085])
Richard Jones <richard@users.sourceforge.net>
parents: 3461
diff changeset
2052 def menu(self, size=None, height=None, showid=0, additional=[], value=None,
4537
61cd652da1cd Allow to turn off translation of generated html options in menu method...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4524
diff changeset
2053 sort_on=None, html_kwargs={}, translate=True, **conditions):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2054 """ 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
2055
3127
021b131bd816 doc fixes, one more fix to the permissions-in-listings fix
Richard Jones <richard@users.sourceforge.net>
parents: 3126
diff changeset
2056 "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
2057 "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
2058 "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
2059 "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
2060 "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
2061 label
021b131bd816 doc fixes, one more fix to the permissions-in-listings fix
Richard Jones <richard@users.sourceforge.net>
parents: 3126
diff changeset
2062 "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
2063 (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
2064 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
2065 For example: ('-', 'order'), '+name'.
4537
61cd652da1cd Allow to turn off translation of generated html options in menu method...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4524
diff changeset
2066 "html_kwargs" specified additional html args for the
61cd652da1cd Allow to turn off translation of generated html options in menu method...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4524
diff changeset
2067 generated html <select>
61cd652da1cd Allow to turn off translation of generated html options in menu method...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4524
diff changeset
2068 "translate" indicates if we should do translation of labels
61cd652da1cd Allow to turn off translation of generated html options in menu method...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4524
diff changeset
2069 using gettext -- this is often desired (e.g. for status
61cd652da1cd Allow to turn off translation of generated html options in menu method...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4524
diff changeset
2070 labels) but sometimes not.
3270
e4607e12d030 ignore sorting errors in MultilinkHTMLProperty instantiation [SF#1177602]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3253
diff changeset
2071
3127
021b131bd816 doc fixes, one more fix to the permissions-in-listings fix
Richard Jones <richard@users.sourceforge.net>
parents: 3126
diff changeset
2072 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
2073 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
2074 "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
2075
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
2076 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
2077 """
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
2078 if not self.is_edit_ok():
3971
ff3a8b7d1819 security fixes
Richard Jones <richard@users.sourceforge.net>
parents: 3968
diff changeset
2079 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
2080
4043
32965347a663 Allow 'no value' to be selected in LinkHTMLProperty.menu()
Stefan Seefeld <stefan@seefeld.name>
parents: 4042
diff changeset
2081 # 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
2082 # 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
2083 # 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
2084 # 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
2085 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
2086 value = self._value
4043
32965347a663 Allow 'no value' to be selected in LinkHTMLProperty.menu()
Stefan Seefeld <stefan@seefeld.name>
parents: 4042
diff changeset
2087 elif value == '-1':
32965347a663 Allow 'no value' to be selected in LinkHTMLProperty.menu()
Stefan Seefeld <stefan@seefeld.name>
parents: 4042
diff changeset
2088 value = None
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2089
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
2090 linkcl = self._db.getclass(self._prop.classname)
4267
c5f52c2c9e36 Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents: 4233
diff changeset
2091 l = ['<select %s>'%cgi_escape_attrs(name = self._formname,
c5f52c2c9e36 Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents: 4233
diff changeset
2092 **html_kwargs)]
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2093 k = linkcl.labelprop(1)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2094 s = ''
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2095 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
2096 s = 'selected="selected" '
2396
39cdddd313ca HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2390
diff changeset
2097 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
2098
3361
64cc03598c8a fixed templating menu() sort_on handling [SF#1221936]
Richard Jones <richard@users.sourceforge.net>
parents: 3357
diff changeset
2099 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
2100 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
2101 if sort_on[0] in '+-':
64cc03598c8a fixed templating menu() sort_on handling [SF#1221936]
Richard Jones <richard@users.sourceforge.net>
parents: 3357
diff changeset
2102 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
2103 else:
64cc03598c8a fixed templating menu() sort_on handling [SF#1221936]
Richard Jones <richard@users.sourceforge.net>
parents: 3357
diff changeset
2104 sort_on = ('+', sort_on)
2327
36ae1b14aaab remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2324
diff changeset
2105 else:
4032
a73bac81eda2 Fix issue2550500
Stefan Seefeld <stefan@seefeld.name>
parents: 4010
diff changeset
2106 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
2107
3565
32343bfc3da0 add permission filter to menu() implementations [SF#1431188]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3562
diff changeset
2108 options = [opt
32343bfc3da0 add permission filter to menu() implementations [SF#1431188]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3562
diff changeset
2109 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
2110 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
2111 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
2112
c0546b95aad1 finished off handling of retired flag in filter() [SF#635260]
Richard Jones <richard@users.sourceforge.net>
parents: 1320
diff changeset
2113 # 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
2114 if value and value not in options:
6feac4fcf883 Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3127
diff changeset
2115 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
2116
4053
f2030089dac6 Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents: 4052
diff changeset
2117 if additional:
f2030089dac6 Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents: 4052
diff changeset
2118 additional_fns = []
f2030089dac6 Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents: 4052
diff changeset
2119 props = linkcl.getprops()
f2030089dac6 Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents: 4052
diff changeset
2120 for propname in additional:
f2030089dac6 Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents: 4052
diff changeset
2121 prop = props[propname]
f2030089dac6 Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents: 4052
diff changeset
2122 if isinstance(prop, hyperdb.Link):
f2030089dac6 Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents: 4052
diff changeset
2123 cl = self._db.getclass(prop.classname)
f2030089dac6 Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents: 4052
diff changeset
2124 labelprop = cl.labelprop()
5062
2ac11cc397eb Fix arguments to 'menu cgi method
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5061
diff changeset
2125 fn = lambda optionid, cl=cl, linkcl=linkcl, \
4847
843886af0ea1 Reformat previous change (3e36a3bc0335) to 80 chars
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4846
diff changeset
2126 propname=propname, labelprop=labelprop: \
843886af0ea1 Reformat previous change (3e36a3bc0335) to 80 chars
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4846
diff changeset
2127 cl.get(linkcl.get(optionid, propname), labelprop)
4053
f2030089dac6 Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents: 4052
diff changeset
2128 else:
5062
2ac11cc397eb Fix arguments to 'menu cgi method
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5061
diff changeset
2129 fn = lambda optionid, linkcl=linkcl, propname=propname: \
4847
843886af0ea1 Reformat previous change (3e36a3bc0335) to 80 chars
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4846
diff changeset
2130 linkcl.get(optionid, propname)
4846
3e36a3bc0335 issue2550822: Fix showing more than one additional property in class menu
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4842
diff changeset
2131 additional_fns.append(fn)
4115
d61066deae67 handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents: 4112
diff changeset
2132
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2133 for optionid in options:
1169
7b448a2425fd bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents: 1163
diff changeset
2134 # 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
2135 option = linkcl.get(optionid, k) or ''
7b448a2425fd bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents: 1163
diff changeset
2136
7b448a2425fd bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents: 1163
diff changeset
2137 # figure if this option is selected
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2138 s = ''
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2139 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
2140 s = 'selected="selected" '
1169
7b448a2425fd bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents: 1163
diff changeset
2141
7b448a2425fd bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents: 1163
diff changeset
2142 # figure the label
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2143 if showid:
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
2144 lab = '%s%s: %s'%(self._prop.classname, optionid, option)
3151
6feac4fcf883 Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3127
diff changeset
2145 elif not option:
6feac4fcf883 Various bug fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3127
diff changeset
2146 lab = '%s%s'%(self._prop.classname, optionid)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2147 else:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2148 lab = option
1169
7b448a2425fd bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents: 1163
diff changeset
2149
7b448a2425fd bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents: 1163
diff changeset
2150 # truncate if it's too long
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2151 if size is not None and len(lab) > size:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2152 lab = lab[:size-3] + '...'
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2153 if additional:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2154 m = []
4053
f2030089dac6 Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents: 4052
diff changeset
2155 for fn in additional_fns:
f2030089dac6 Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents: 4052
diff changeset
2156 m.append(str(fn(optionid)))
f2030089dac6 Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents: 4052
diff changeset
2157 lab = lab + ' (%s)'%', '.join(m)
1169
7b448a2425fd bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents: 1163
diff changeset
2158
7b448a2425fd bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents: 1163
diff changeset
2159 # and generate
4537
61cd652da1cd Allow to turn off translation of generated html options in menu method...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4524
diff changeset
2160 tr = str
61cd652da1cd Allow to turn off translation of generated html options in menu method...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4524
diff changeset
2161 if translate:
61cd652da1cd Allow to turn off translation of generated html options in menu method...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4524
diff changeset
2162 tr = self._
61cd652da1cd Allow to turn off translation of generated html options in menu method...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4524
diff changeset
2163 lab = cgi.escape(tr(lab))
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2164 l.append('<option %svalue="%s">%s</option>'%(s, optionid, lab))
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2165 l.append('</select>')
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2166 return '\n'.join(l)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2167 # def checklist(self, ...)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2168
3194
f887e55edc94 replaced MutlilinkIterator with multilinkGenerator (thanks Bob Ippolito)
Richard Jones <richard@users.sourceforge.net>
parents: 3188
diff changeset
2169
3126
a2889d22db4a the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents: 3117
diff changeset
2170
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2171 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
2172 """ Multilink HTMLProperty
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2173
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2174 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
2175 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
2176 """
1931
f1e5e5115c29 Always sort MultilinkHTMLProperty in the correct order...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1917
diff changeset
2177 def __init__(self, *args, **kwargs):
f1e5e5115c29 Always sort MultilinkHTMLProperty in the correct order...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1917
diff changeset
2178 HTMLProperty.__init__(self, *args, **kwargs)
f1e5e5115c29 Always sort MultilinkHTMLProperty in the correct order...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1917
diff changeset
2179 if self._value:
3270
e4607e12d030 ignore sorting errors in MultilinkHTMLProperty instantiation [SF#1177602]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3253
diff changeset
2180 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
2181 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
2182 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
2183 # 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
2184 # 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
2185 # 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
2186 try:
e4607e12d030 ignore sorting errors in MultilinkHTMLProperty instantiation [SF#1177602]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3253
diff changeset
2187 display_value.sort(sortfun)
e4607e12d030 ignore sorting errors in MultilinkHTMLProperty instantiation [SF#1177602]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3253
diff changeset
2188 except:
e4607e12d030 ignore sorting errors in MultilinkHTMLProperty instantiation [SF#1177602]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3253
diff changeset
2189 pass
3271
572bbe7fa236 typo in recent fix
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3270
diff changeset
2190 self._value = display_value
2327
36ae1b14aaab remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2324
diff changeset
2191
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2192 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
2193 """ length of the multilink """
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
2194 return len(self._value)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2195
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2196 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
2197 """ no extended attribute accesses make sense here """
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2198 raise AttributeError, attr
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2199
3200
d2b1a946fdf4 change ZTUtils Iterator to always iter() its sequence argument
Richard Jones <richard@users.sourceforge.net>
parents: 3198
diff changeset
2200 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
2201 """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
2202 check = self._db.security.hasPermission
0b7990f54778 fixed broken csv import in roundup.admin module
Richard Jones <richard@users.sourceforge.net>
parents: 3194
diff changeset
2203 userid = self._client.userid
0b7990f54778 fixed broken csv import in roundup.admin module
Richard Jones <richard@users.sourceforge.net>
parents: 3194
diff changeset
2204 classname = self._prop.classname
4328
3d224f7fb364 add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents: 4306
diff changeset
2205 if check('Web Access', userid):
3d224f7fb364 add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents: 4306
diff changeset
2206 for value in values:
3d224f7fb364 add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents: 4306
diff changeset
2207 if check('View', userid, classname, itemid=value):
3d224f7fb364 add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents: 4306
diff changeset
2208 yield HTMLItem(self._client, classname, value)
3198
0b7990f54778 fixed broken csv import in roundup.admin module
Richard Jones <richard@users.sourceforge.net>
parents: 3194
diff changeset
2209
3126
a2889d22db4a the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents: 3117
diff changeset
2210 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
2211 """ 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
2212 """
3200
d2b1a946fdf4 change ZTUtils Iterator to always iter() its sequence argument
Richard Jones <richard@users.sourceforge.net>
parents: 3198
diff changeset
2213 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
2214
a2889d22db4a the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents: 3117
diff changeset
2215 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
2216 """ 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
2217 """
3126
a2889d22db4a the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents: 3117
diff changeset
2218 l = self._value[:]
a2889d22db4a the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents: 3117
diff changeset
2219 l.reverse()
3200
d2b1a946fdf4 change ZTUtils Iterator to always iter() its sequence argument
Richard Jones <richard@users.sourceforge.net>
parents: 3198
diff changeset
2220 return self.viewableGenerator(l)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2221
2883
1ca5ebe9b16a *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 2880
diff changeset
2222 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
2223 """ 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
2224 value = list(self.__iter__())
2883
1ca5ebe9b16a *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 2880
diff changeset
2225 value.sort(lambda a,b:cmp(a[property], b[property]))
1ca5ebe9b16a *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 2880
diff changeset
2226 return value
1ca5ebe9b16a *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 2880
diff changeset
2227
1103
db787cef1385 handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents: 1099
diff changeset
2228 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
2229 """ 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
2230 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
2231 """
1325
2e5a9fc7abd5 allow StringHTMLProperty in MultilinkHTMLProperty test to work
Richard Jones <richard@users.sourceforge.net>
parents: 1323
diff changeset
2232 return str(value) in self._value
1103
db787cef1385 handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents: 1099
diff changeset
2233
2180
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2170
diff changeset
2234 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
2235 """Is my _value not []?"""
2289
6d16b967f89d HTML templating isset() inverted [SF#951779]
Richard Jones <richard@users.sourceforge.net>
parents: 2262
diff changeset
2236 return self._value != []
2180
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2170
diff changeset
2237
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2238 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
2239 """ 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
2240 """
3117
460eb0209a9e Permissions improvements.
Richard Jones <richard@users.sourceforge.net>
parents: 3104
diff changeset
2241 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
2242 return self._('[hidden]')
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
2243
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
2244 linkcl = self._db.classes[self._prop.classname]
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2245 k = linkcl.labelprop(1)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2246 labels = []
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
2247 for v in self._value:
4058
3057092623e1 Robustify (Multi)linkHTMLProperty.plain.
Stefan Seefeld <stefan@seefeld.name>
parents: 4057
diff changeset
2248 if num_re.match(v):
3057092623e1 Robustify (Multi)linkHTMLProperty.plain.
Stefan Seefeld <stefan@seefeld.name>
parents: 4057
diff changeset
2249 try:
3057092623e1 Robustify (Multi)linkHTMLProperty.plain.
Stefan Seefeld <stefan@seefeld.name>
parents: 4057
diff changeset
2250 label = linkcl.get(v, k)
3057092623e1 Robustify (Multi)linkHTMLProperty.plain.
Stefan Seefeld <stefan@seefeld.name>
parents: 4057
diff changeset
2251 except IndexError:
3057092623e1 Robustify (Multi)linkHTMLProperty.plain.
Stefan Seefeld <stefan@seefeld.name>
parents: 4057
diff changeset
2252 label = None
3057092623e1 Robustify (Multi)linkHTMLProperty.plain.
Stefan Seefeld <stefan@seefeld.name>
parents: 4057
diff changeset
2253 # fall back to designator if label is None
3057092623e1 Robustify (Multi)linkHTMLProperty.plain.
Stefan Seefeld <stefan@seefeld.name>
parents: 4057
diff changeset
2254 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
2255 else:
3057092623e1 Robustify (Multi)linkHTMLProperty.plain.
Stefan Seefeld <stefan@seefeld.name>
parents: 4057
diff changeset
2256 label = v
3401
62e4032cb280 merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3394
diff changeset
2257 labels.append(label)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2258 value = ', '.join(labels)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2259 if escape:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2260 value = cgi.escape(value)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2261 return value
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2262
4267
c5f52c2c9e36 Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents: 4233
diff changeset
2263 def field(self, size=30, showid=0, **kwargs):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2264 """ 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
2265
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
2266 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
2267 """
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
2268 if not self.is_edit_ok():
3971
ff3a8b7d1819 security fixes
Richard Jones <richard@users.sourceforge.net>
parents: 3968
diff changeset
2269 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
2270
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
2271 linkcl = self._db.getclass(self._prop.classname)
4339
663664c4e626 Allow value to be specified to multilink form element templating
Richard Jones <richard@users.sourceforge.net>
parents: 4333
diff changeset
2272
663664c4e626 Allow value to be specified to multilink form element templating
Richard Jones <richard@users.sourceforge.net>
parents: 4333
diff changeset
2273 if 'value' not in kwargs:
663664c4e626 Allow value to be specified to multilink form element templating
Richard Jones <richard@users.sourceforge.net>
parents: 4333
diff changeset
2274 value = self._value[:]
663664c4e626 Allow value to be specified to multilink form element templating
Richard Jones <richard@users.sourceforge.net>
parents: 4333
diff changeset
2275 # map the id to the label property
663664c4e626 Allow value to be specified to multilink form element templating
Richard Jones <richard@users.sourceforge.net>
parents: 4333
diff changeset
2276 if not linkcl.getkey():
663664c4e626 Allow value to be specified to multilink form element templating
Richard Jones <richard@users.sourceforge.net>
parents: 4333
diff changeset
2277 showid=1
663664c4e626 Allow value to be specified to multilink form element templating
Richard Jones <richard@users.sourceforge.net>
parents: 4333
diff changeset
2278 if not showid:
663664c4e626 Allow value to be specified to multilink form element templating
Richard Jones <richard@users.sourceforge.net>
parents: 4333
diff changeset
2279 k = linkcl.labelprop(1)
663664c4e626 Allow value to be specified to multilink form element templating
Richard Jones <richard@users.sourceforge.net>
parents: 4333
diff changeset
2280 value = lookupKeys(linkcl, k, value)
663664c4e626 Allow value to be specified to multilink form element templating
Richard Jones <richard@users.sourceforge.net>
parents: 4333
diff changeset
2281 value = ','.join(value)
4356
05a65559d873 undo regression in 1.4.12: Multilink edit fields lose their values
Richard Jones <richard@users.sourceforge.net>
parents: 4339
diff changeset
2282 kwargs["value"] = value
4339
663664c4e626 Allow value to be specified to multilink form element templating
Richard Jones <richard@users.sourceforge.net>
parents: 4333
diff changeset
2283
663664c4e626 Allow value to be specified to multilink form element templating
Richard Jones <richard@users.sourceforge.net>
parents: 4333
diff changeset
2284 return self.input(name=self._formname, size=size, **kwargs)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2285
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2286 def menu(self, size=None, height=None, showid=0, additional=[],
4537
61cd652da1cd Allow to turn off translation of generated html options in menu method...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4524
diff changeset
2287 value=None, sort_on=None, html_kwargs={}, translate=True,
61cd652da1cd Allow to turn off translation of generated html options in menu method...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4524
diff changeset
2288 **conditions):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2289 """ 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
2290
021b131bd816 doc fixes, one more fix to the permissions-in-listings fix
Richard Jones <richard@users.sourceforge.net>
parents: 3126
diff changeset
2291 "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
2292 "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
2293 "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
2294 "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
2295 label
3470
fd32170475f5 allow preselection of values in templating menu()s (patch [SF#1396085])
Richard Jones <richard@users.sourceforge.net>
parents: 3461
diff changeset
2296 "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
2297 "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
2298 (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
2299 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
2300 For example: ('-', 'order'), '+name'.
3270
e4607e12d030 ignore sorting errors in MultilinkHTMLProperty instantiation [SF#1177602]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3253
diff changeset
2301
3127
021b131bd816 doc fixes, one more fix to the permissions-in-listings fix
Richard Jones <richard@users.sourceforge.net>
parents: 3126
diff changeset
2302 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
2303 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
2304 "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
2305
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
2306 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
2307 """
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
2308 if not self.is_edit_ok():
3971
ff3a8b7d1819 security fixes
Richard Jones <richard@users.sourceforge.net>
parents: 3968
diff changeset
2309 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
2310
3470
fd32170475f5 allow preselection of values in templating menu()s (patch [SF#1396085])
Richard Jones <richard@users.sourceforge.net>
parents: 3461
diff changeset
2311 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
2312 value = self._value
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2313
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
2314 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
2315
7bc1e9c42a26 allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents: 3361
diff changeset
2316 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
2317 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
2318 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
2319 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
2320 else:
7bc1e9c42a26 allow specification of pagesize, sorting and filtering in "classhelp" popups
Richard Jones <richard@users.sourceforge.net>
parents: 3361
diff changeset
2321 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
2322 else:
4032
a73bac81eda2 Fix issue2550500
Stefan Seefeld <stefan@seefeld.name>
parents: 4010
diff changeset
2323 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
2324
3565
32343bfc3da0 add permission filter to menu() implementations [SF#1431188]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3562
diff changeset
2325 options = [opt
32343bfc3da0 add permission filter to menu() implementations [SF#1431188]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3562
diff changeset
2326 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
2327 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
2328 linkcl.classname, itemid=opt)]
4115
d61066deae67 handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents: 4112
diff changeset
2329
4042
8831882170fc Fix height calculation for Multilink.menu()
Stefan Seefeld <stefan@seefeld.name>
parents: 4040
diff changeset
2330 # 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
2331 for val in value:
8831882170fc Fix height calculation for Multilink.menu()
Stefan Seefeld <stefan@seefeld.name>
parents: 4040
diff changeset
2332 if val not in options:
8831882170fc Fix height calculation for Multilink.menu()
Stefan Seefeld <stefan@seefeld.name>
parents: 4040
diff changeset
2333 options.insert(0, val)
8831882170fc Fix height calculation for Multilink.menu()
Stefan Seefeld <stefan@seefeld.name>
parents: 4040
diff changeset
2334
8831882170fc Fix height calculation for Multilink.menu()
Stefan Seefeld <stefan@seefeld.name>
parents: 4040
diff changeset
2335 if not height:
8831882170fc Fix height calculation for Multilink.menu()
Stefan Seefeld <stefan@seefeld.name>
parents: 4040
diff changeset
2336 height = len(options)
8831882170fc Fix height calculation for Multilink.menu()
Stefan Seefeld <stefan@seefeld.name>
parents: 4040
diff changeset
2337 if value:
8831882170fc Fix height calculation for Multilink.menu()
Stefan Seefeld <stefan@seefeld.name>
parents: 4040
diff changeset
2338 # The "no selection" option.
8831882170fc Fix height calculation for Multilink.menu()
Stefan Seefeld <stefan@seefeld.name>
parents: 4040
diff changeset
2339 height += 1
8831882170fc Fix height calculation for Multilink.menu()
Stefan Seefeld <stefan@seefeld.name>
parents: 4040
diff changeset
2340 height = min(height, 7)
4267
c5f52c2c9e36 Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents: 4233
diff changeset
2341 l = ['<select multiple %s>'%cgi_escape_attrs(name = self._formname,
c5f52c2c9e36 Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents: 4233
diff changeset
2342 size = height,
c5f52c2c9e36 Provide ability to specify arbitrary HTML attributes.
Stefan Seefeld <stefan@seefeld.name>
parents: 4233
diff changeset
2343 **html_kwargs)]
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2344 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
2345
4054
6070bc4935fa Provide a a "no selection" option; cleanup.
Stefan Seefeld <stefan@seefeld.name>
parents: 4053
diff changeset
2346 if value:
6070bc4935fa Provide a a "no selection" option; cleanup.
Stefan Seefeld <stefan@seefeld.name>
parents: 4053
diff changeset
2347 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
2348 % ','.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
2349
4053
f2030089dac6 Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents: 4052
diff changeset
2350 if additional:
f2030089dac6 Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents: 4052
diff changeset
2351 additional_fns = []
f2030089dac6 Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents: 4052
diff changeset
2352 props = linkcl.getprops()
f2030089dac6 Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents: 4052
diff changeset
2353 for propname in additional:
f2030089dac6 Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents: 4052
diff changeset
2354 prop = props[propname]
f2030089dac6 Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents: 4052
diff changeset
2355 if isinstance(prop, hyperdb.Link):
f2030089dac6 Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents: 4052
diff changeset
2356 cl = self._db.getclass(prop.classname)
f2030089dac6 Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents: 4052
diff changeset
2357 labelprop = cl.labelprop()
5062
2ac11cc397eb Fix arguments to 'menu cgi method
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5061
diff changeset
2358 fn = lambda optionid, cl=cl, linkcl=linkcl, \
4848
e8ae54db8b95 Fix issue2550822 (3e36a3bc0335 and 843886af0ea1) for multilinks, too
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4847
diff changeset
2359 propname=propname, labelprop=labelprop: \
e8ae54db8b95 Fix issue2550822 (3e36a3bc0335 and 843886af0ea1) for multilinks, too
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4847
diff changeset
2360 cl.get(linkcl.get(optionid, propname), labelprop)
4053
f2030089dac6 Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents: 4052
diff changeset
2361 else:
5062
2ac11cc397eb Fix arguments to 'menu cgi method
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5061
diff changeset
2362 fn = lambda optionid, linkcl=linkcl, propname=propname: \
4848
e8ae54db8b95 Fix issue2550822 (3e36a3bc0335 and 843886af0ea1) for multilinks, too
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4847
diff changeset
2363 linkcl.get(optionid, propname)
e8ae54db8b95 Fix issue2550822 (3e36a3bc0335 and 843886af0ea1) for multilinks, too
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4847
diff changeset
2364 additional_fns.append(fn)
4115
d61066deae67 handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents: 4112
diff changeset
2365
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2366 for optionid in options:
1169
7b448a2425fd bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents: 1163
diff changeset
2367 # 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
2368 option = linkcl.get(optionid, k) or ''
7b448a2425fd bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents: 1163
diff changeset
2369
7b448a2425fd bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents: 1163
diff changeset
2370 # figure if this option is selected
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2371 s = ''
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2372 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
2373 s = 'selected="selected" '
1169
7b448a2425fd bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents: 1163
diff changeset
2374
7b448a2425fd bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents: 1163
diff changeset
2375 # figure the label
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2376 if showid:
1079
04b44df7af1d removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents: 1078
diff changeset
2377 lab = '%s%s: %s'%(self._prop.classname, optionid, option)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2378 else:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2379 lab = option
1169
7b448a2425fd bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents: 1163
diff changeset
2380 # truncate if it's too long
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2381 if size is not None and len(lab) > size:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2382 lab = lab[:size-3] + '...'
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2383 if additional:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2384 m = []
4053
f2030089dac6 Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents: 4052
diff changeset
2385 for fn in additional_fns:
f2030089dac6 Extend "additional" parameter to work with (multi)links.
Stefan Seefeld <stefan@seefeld.name>
parents: 4052
diff changeset
2386 m.append(str(fn(optionid)))
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2387 lab = lab + ' (%s)'%', '.join(m)
1169
7b448a2425fd bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents: 1163
diff changeset
2388
7b448a2425fd bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents: 1163
diff changeset
2389 # and generate
4537
61cd652da1cd Allow to turn off translation of generated html options in menu method...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4524
diff changeset
2390 tr = str
61cd652da1cd Allow to turn off translation of generated html options in menu method...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4524
diff changeset
2391 if translate:
61cd652da1cd Allow to turn off translation of generated html options in menu method...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4524
diff changeset
2392 tr = self._
61cd652da1cd Allow to turn off translation of generated html options in menu method...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4524
diff changeset
2393 lab = cgi.escape(tr(lab))
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2394 l.append('<option %svalue="%s">%s</option>'%(s, optionid,
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2395 lab))
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2396 l.append('</select>')
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2397 return '\n'.join(l)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2398
4396
172489ea9e07 allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents: 4391
diff changeset
2399
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2400 # set the propclasses for HTMLItem
4396
172489ea9e07 allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents: 4391
diff changeset
2401 propclasses = [
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2402 (hyperdb.String, StringHTMLProperty),
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2403 (hyperdb.Number, NumberHTMLProperty),
5067
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5062
diff changeset
2404 (hyperdb.Integer, IntegerHTMLProperty),
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2405 (hyperdb.Boolean, BooleanHTMLProperty),
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2406 (hyperdb.Date, DateHTMLProperty),
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2407 (hyperdb.Interval, IntervalHTMLProperty),
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2408 (hyperdb.Password, PasswordHTMLProperty),
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2409 (hyperdb.Link, LinkHTMLProperty),
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2410 (hyperdb.Multilink, MultilinkHTMLProperty),
4396
172489ea9e07 allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents: 4391
diff changeset
2411 ]
172489ea9e07 allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents: 4391
diff changeset
2412
172489ea9e07 allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents: 4391
diff changeset
2413 def register_propclass(prop, cls):
172489ea9e07 allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents: 4391
diff changeset
2414 for index,propclass in enumerate(propclasses):
172489ea9e07 allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents: 4391
diff changeset
2415 p, c = propclass
172489ea9e07 allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents: 4391
diff changeset
2416 if prop == p:
172489ea9e07 allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents: 4391
diff changeset
2417 propclasses[index] = (prop, cls)
172489ea9e07 allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents: 4391
diff changeset
2418 break
172489ea9e07 allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents: 4391
diff changeset
2419 else:
172489ea9e07 allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents: 4391
diff changeset
2420 propclasses.append((prop, cls))
172489ea9e07 allow trackers to override the classes used to render properties...
Richard Jones <richard@users.sourceforge.net>
parents: 4391
diff changeset
2421
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2422
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
2423 def make_sort_function(db, classname, sort_on=None):
4417
cc36be59ebd8 make sort more robust
Richard Jones <richard@users.sourceforge.net>
parents: 4413
diff changeset
2424 """Make a sort function for a given class.
cc36be59ebd8 make sort more robust
Richard Jones <richard@users.sourceforge.net>
parents: 4413
diff changeset
2425
cc36be59ebd8 make sort more robust
Richard Jones <richard@users.sourceforge.net>
parents: 4413
diff changeset
2426 The list being sorted may contain mixed ids and labels.
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2427 """
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2428 linkcl = db.getclass(classname)
1983
75437090134e implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents: 1956
diff changeset
2429 if sort_on is None:
4032
a73bac81eda2 Fix issue2550500
Stefan Seefeld <stefan@seefeld.name>
parents: 4010
diff changeset
2430 sort_on = linkcl.orderprop()
1931
f1e5e5115c29 Always sort MultilinkHTMLProperty in the correct order...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1917
diff changeset
2431 def sortfunc(a, b):
4417
cc36be59ebd8 make sort more robust
Richard Jones <richard@users.sourceforge.net>
parents: 4413
diff changeset
2432 if num_re.match(a):
cc36be59ebd8 make sort more robust
Richard Jones <richard@users.sourceforge.net>
parents: 4413
diff changeset
2433 a = linkcl.get(a, sort_on)
cc36be59ebd8 make sort more robust
Richard Jones <richard@users.sourceforge.net>
parents: 4413
diff changeset
2434 if num_re.match(b):
cc36be59ebd8 make sort more robust
Richard Jones <richard@users.sourceforge.net>
parents: 4413
diff changeset
2435 b = linkcl.get(b, sort_on)
cc36be59ebd8 make sort more robust
Richard Jones <richard@users.sourceforge.net>
parents: 4413
diff changeset
2436 return cmp(a, b)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2437 return sortfunc
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2438
1202
01a143f9382e *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 1201
diff changeset
2439 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
2440 """ 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
2441 .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
2442 """
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2443 if isinstance(value, type([])):
1202
01a143f9382e *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 1201
diff changeset
2444 return [value.value for value in value]
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2445 else:
1104
d759c3cb1f06 Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
2446 value = value.value.strip()
d759c3cb1f06 Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
2447 if not value:
d759c3cb1f06 Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
2448 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
2449 return [v.strip() for v in value.split(',')]
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2450
1956
1e2cccf6b53b give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents: 1952
diff changeset
2451 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
2452 """The *request*, holding the CGI form and environment.
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2453
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
2454 - "form" the CGI form as a cgi.FieldStorage
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
2455 - "env" the CGI environment variables
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
2456 - "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
2457 - "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
2458 - "language" as determined by the browser or config
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
2459 - "classname" the current classname (possibly None)
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
2460 - "template" the current template (suffix, also possibly None)
1004
5f12d3259f31 logout works better now
Richard Jones <richard@users.sourceforge.net>
parents: 1003
diff changeset
2461
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
2462 Index args:
1004
5f12d3259f31 logout works better now
Richard Jones <richard@users.sourceforge.net>
parents: 1003
diff changeset
2463
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
2464 - "columns" dictionary of the columns to display in an index page
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
2465 - "show" a convenience access to columns - request/show/colname will
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
2466 be true if the columns should be displayed, false otherwise
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
2467 - "sort" index sort column (direction, column name)
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
2468 - "group" index grouping property (direction, column name)
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
2469 - "filter" properties to filter the index on
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
2470 - "filterspec" values to filter the index on
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 2002
diff changeset
2471 - "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
2472 """
3505
b294cc477f2c ZRoundup works again [SF#1263842]
Richard Jones <richard@users.sourceforge.net>
parents: 3479
diff changeset
2473 def __repr__(self):
3736
a2d22d0de0bc WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents: 3710
diff changeset
2474 return '<HTMLRequest %r>'%self.__dict__
3505
b294cc477f2c ZRoundup works again [SF#1263842]
Richard Jones <richard@users.sourceforge.net>
parents: 3479
diff changeset
2475
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2476 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
2477 # _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
2478 self._client = self.client = client
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2479
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2480 # easier access vars
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2481 self.form = client.form
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2482 self.env = client.env
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2483 self.base = client.base
2649
1df7d4a41da4 Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents: 2640
diff changeset
2484 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
2485 self.language = client.language
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2486
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2487 # store the current class name and action
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2488 self.classname = client.classname
3584
35b35a152b40 fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents: 3582
diff changeset
2489 self.nodeid = client.nodeid
1041
c28603c9f831 Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents: 1030
diff changeset
2490 self.template = client.template
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2491
1421
90bb11eb40dc oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents: 1417
diff changeset
2492 # the special char to use for special vars
90bb11eb40dc oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents: 1417
diff changeset
2493 self.special_char = '@'
90bb11eb40dc oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents: 1417
diff changeset
2494
1956
1e2cccf6b53b give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents: 1952
diff changeset
2495 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
2496
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
2497 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
2498
3584
35b35a152b40 fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents: 3582
diff changeset
2499 def current_url(self):
35b35a152b40 fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents: 3582
diff changeset
2500 url = self.base
35b35a152b40 fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents: 3582
diff changeset
2501 if self.classname:
35b35a152b40 fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents: 3582
diff changeset
2502 url += self.classname
35b35a152b40 fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents: 3582
diff changeset
2503 if self.nodeid:
35b35a152b40 fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents: 3582
diff changeset
2504 url += self.nodeid
35b35a152b40 fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents: 3582
diff changeset
2505 args = {}
35b35a152b40 fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents: 3582
diff changeset
2506 if self.template:
35b35a152b40 fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents: 3582
diff changeset
2507 args['@template'] = self.template
35b35a152b40 fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents: 3582
diff changeset
2508 return self.indexargs_url(url, args)
35b35a152b40 fix "clear this message" [SF#1429367]
Richard Jones <richard@users.sourceforge.net>
parents: 3582
diff changeset
2509
3696
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2510 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
2511 """ 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
2512 """
3696
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2513 fields = []
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2514 dirs = []
3698
c2d232b377d5 optimize parsing of sort/group options according to suggestion...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3696
diff changeset
2515 for special in '@:':
3696
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2516 idx = 0
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2517 key = '%s%s%d'%(special, name, idx)
4804
bc4144417861 More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4791
diff changeset
2518 while self._form_has_key(key):
3696
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2519 self.special_char = special
4040
b6a2251394dd Make cgi.templating more fault-tolerant towards invalid requests.
Stefan Seefeld <stefan@seefeld.name>
parents: 4032
diff changeset
2520 fields.append(self.form.getfirst(key))
3696
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2521 dirkey = '%s%sdir%d'%(special, name, idx)
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2522 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
2523 dirs.append(self.form.getfirst(dirkey))
3696
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2524 else:
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2525 dirs.append(None)
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2526 idx += 1
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2527 key = '%s%s%d'%(special, name, idx)
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2528 # backward compatible (and query) URL format
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2529 key = special + name
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2530 dirkey = key + 'dir'
4804
bc4144417861 More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4791
diff changeset
2531 if self._form_has_key(key) and not fields:
3696
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2532 fields = handleListCGIValue(self.form[key])
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2533 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
2534 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
2535 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
2536 break
5095
d3ba0b254dbb The patch to implement:
John Rouillard <rouilj@ieee.org>
parents: 5094
diff changeset
2537
d3ba0b254dbb The patch to implement:
John Rouillard <rouilj@ieee.org>
parents: 5094
diff changeset
2538 # sometimes requests come in without a class
d3ba0b254dbb The patch to implement:
John Rouillard <rouilj@ieee.org>
parents: 5094
diff changeset
2539 # chances are they won't have any filter params,
d3ba0b254dbb The patch to implement:
John Rouillard <rouilj@ieee.org>
parents: 5094
diff changeset
2540 # in that case anyway but...
d3ba0b254dbb The patch to implement:
John Rouillard <rouilj@ieee.org>
parents: 5094
diff changeset
2541 if self.classname:
d3ba0b254dbb The patch to implement:
John Rouillard <rouilj@ieee.org>
parents: 5094
diff changeset
2542 cls = self.client.db.getclass(self.classname)
3696
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2543 for f, d in map(None, fields, dirs):
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2544 if f.startswith('-'):
5094
92d33d3125a0 Validate properties specified for sorting and grouping in index
John Rouillard <rouilj@ieee.org>
parents: 5087
diff changeset
2545 dir, propname = '-', f[1:]
3696
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2546 elif d:
5094
92d33d3125a0 Validate properties specified for sorting and grouping in index
John Rouillard <rouilj@ieee.org>
parents: 5087
diff changeset
2547 dir, propname = '-', f
3696
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2548 else:
5094
92d33d3125a0 Validate properties specified for sorting and grouping in index
John Rouillard <rouilj@ieee.org>
parents: 5087
diff changeset
2549 dir, propname = '+', f
5095
d3ba0b254dbb The patch to implement:
John Rouillard <rouilj@ieee.org>
parents: 5094
diff changeset
2550 # if no classname, just append the propname unchecked.
d3ba0b254dbb The patch to implement:
John Rouillard <rouilj@ieee.org>
parents: 5094
diff changeset
2551 # this may be valid for some actions that bypass classes.
d3ba0b254dbb The patch to implement:
John Rouillard <rouilj@ieee.org>
parents: 5094
diff changeset
2552 if self.classname and cls.get_transitive_prop(propname) is None:
5094
92d33d3125a0 Validate properties specified for sorting and grouping in index
John Rouillard <rouilj@ieee.org>
parents: 5087
diff changeset
2553 self.client.add_error_message("Unknown %s property %s"%(name, propname))
92d33d3125a0 Validate properties specified for sorting and grouping in index
John Rouillard <rouilj@ieee.org>
parents: 5087
diff changeset
2554 else:
92d33d3125a0 Validate properties specified for sorting and grouping in index
John Rouillard <rouilj@ieee.org>
parents: 5087
diff changeset
2555 var.append((dir, propname))
3696
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2556
4804
bc4144417861 More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4791
diff changeset
2557 def _form_has_key(self, name):
bc4144417861 More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4791
diff changeset
2558 try:
bc4144417861 More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4791
diff changeset
2559 return self.form.has_key(name)
bc4144417861 More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4791
diff changeset
2560 except TypeError:
bc4144417861 More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4791
diff changeset
2561 pass
bc4144417861 More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4791
diff changeset
2562 return False
bc4144417861 More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4791
diff changeset
2563
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
2564 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
2565 """ 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
2566 """
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2567 # 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
2568 self.columns = []
1436
2f6647cf5345 bugger, dropping support for "+" special char
Richard Jones <richard@users.sourceforge.net>
parents: 1421
diff changeset
2569 for name in ':columns @columns'.split():
4804
bc4144417861 More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4791
diff changeset
2570 if self._form_has_key(name):
1421
90bb11eb40dc oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents: 1417
diff changeset
2571 self.special_char = name[0]
90bb11eb40dc oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents: 1417
diff changeset
2572 self.columns = handleListCGIValue(self.form[name])
90bb11eb40dc oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents: 1417
diff changeset
2573 break
2983
9614a101b68f Stuff from the train ride this morning:
Richard Jones <richard@users.sourceforge.net>
parents: 2962
diff changeset
2574 self.show = support.TruthDict(self.columns)
4437
261c9f913ff7 - Add explicit "Search" permissions, see Security Fix below.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4417
diff changeset
2575 security = self._client.db.security
261c9f913ff7 - Add explicit "Search" permissions, see Security Fix below.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4417
diff changeset
2576 userid = self._client.userid
1002
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
2577
3696
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2578 # sorting and grouping
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2579 self.sort = []
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2580 self.group = []
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2581 self._parse_sort(self.sort, 'sort')
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2582 self._parse_sort(self.group, 'group')
4437
261c9f913ff7 - Add explicit "Search" permissions, see Security Fix below.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4417
diff changeset
2583 self.sort = security.filterSortspec(userid, self.classname, self.sort)
261c9f913ff7 - Add explicit "Search" permissions, see Security Fix below.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4417
diff changeset
2584 self.group = security.filterSortspec(userid, self.classname, self.group)
1002
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
2585
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
2586 # filtering
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2587 self.filter = []
1436
2f6647cf5345 bugger, dropping support for "+" special char
Richard Jones <richard@users.sourceforge.net>
parents: 1421
diff changeset
2588 for name in ':filter @filter'.split():
4804
bc4144417861 More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4791
diff changeset
2589 if self._form_has_key(name):
1421
90bb11eb40dc oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents: 1417
diff changeset
2590 self.special_char = name[0]
90bb11eb40dc oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents: 1417
diff changeset
2591 self.filter = handleListCGIValue(self.form[name])
90bb11eb40dc oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents: 1417
diff changeset
2592
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2593 self.filterspec = {}
1200
0a7bd082b94a usability improvements in API
Richard Jones <richard@users.sourceforge.net>
parents: 1183
diff changeset
2594 db = self.client.db
1003
f89b8d32291b Hack hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 1002
diff changeset
2595 if self.classname is not None:
3635
53987aa153d2 Transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3610
diff changeset
2596 cls = db.getclass (self.classname)
1003
f89b8d32291b Hack hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 1002
diff changeset
2597 for name in self.filter:
4804
bc4144417861 More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4791
diff changeset
2598 if not self._form_has_key(name):
1631
8a908bbad1ef A couple of form value handling changes:
Richard Jones <richard@users.sourceforge.net>
parents: 1591
diff changeset
2599 continue
3635
53987aa153d2 Transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3610
diff changeset
2600 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
2601 fv = self.form[name]
8a908bbad1ef A couple of form value handling changes:
Richard Jones <richard@users.sourceforge.net>
parents: 1591
diff changeset
2602 if (isinstance(prop, hyperdb.Link) or
8a908bbad1ef A couple of form value handling changes:
Richard Jones <richard@users.sourceforge.net>
parents: 1591
diff changeset
2603 isinstance(prop, hyperdb.Multilink)):
8a908bbad1ef A couple of form value handling changes:
Richard Jones <richard@users.sourceforge.net>
parents: 1591
diff changeset
2604 self.filterspec[name] = lookupIds(db, prop,
8a908bbad1ef A couple of form value handling changes:
Richard Jones <richard@users.sourceforge.net>
parents: 1591
diff changeset
2605 handleListCGIValue(fv))
8a908bbad1ef A couple of form value handling changes:
Richard Jones <richard@users.sourceforge.net>
parents: 1591
diff changeset
2606 else:
8a908bbad1ef A couple of form value handling changes:
Richard Jones <richard@users.sourceforge.net>
parents: 1591
diff changeset
2607 if isinstance(fv, type([])):
8a908bbad1ef A couple of form value handling changes:
Richard Jones <richard@users.sourceforge.net>
parents: 1591
diff changeset
2608 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
2609 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
2610 # 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
2611 self.filterspec[name] = handleListCGIValue(fv)
1003
f89b8d32291b Hack hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 1002
diff changeset
2612 else:
f89b8d32291b Hack hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 1002
diff changeset
2613 self.filterspec[name] = fv.value
4437
261c9f913ff7 - Add explicit "Search" permissions, see Security Fix below.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4417
diff changeset
2614 self.filterspec = security.filterFilterspec(userid, self.classname,
261c9f913ff7 - Add explicit "Search" permissions, see Security Fix below.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4417
diff changeset
2615 self.filterspec)
1002
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
2616
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
2617 # full-text search argument
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
2618 self.search_text = None
1436
2f6647cf5345 bugger, dropping support for "+" special char
Richard Jones <richard@users.sourceforge.net>
parents: 1421
diff changeset
2619 for name in ':search_text @search_text'.split():
4804
bc4144417861 More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4791
diff changeset
2620 if self._form_has_key(name):
1421
90bb11eb40dc oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents: 1417
diff changeset
2621 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
2622 self.search_text = self.form.getfirst(name)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2623
1016
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
2624 # pagination - size and start index
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
2625 # figure batch args
3158
cf824afdb76b *cough* nothing to see here
Richard Jones <richard@users.sourceforge.net>
parents: 3157
diff changeset
2626 self.pagesize = 50
1436
2f6647cf5345 bugger, dropping support for "+" special char
Richard Jones <richard@users.sourceforge.net>
parents: 1421
diff changeset
2627 for name in ':pagesize @pagesize'.split():
4804
bc4144417861 More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4791
diff changeset
2628 if self._form_has_key(name):
1421
90bb11eb40dc oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents: 1417
diff changeset
2629 self.special_char = name[0]
4115
d61066deae67 handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents: 4112
diff changeset
2630 try:
d61066deae67 handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents: 4112
diff changeset
2631 self.pagesize = int(self.form.getfirst(name))
d61066deae67 handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents: 4112
diff changeset
2632 except ValueError:
d61066deae67 handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents: 4112
diff changeset
2633 # not an integer - ignore
d61066deae67 handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents: 4112
diff changeset
2634 pass
1421
90bb11eb40dc oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents: 1417
diff changeset
2635
90bb11eb40dc oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents: 1417
diff changeset
2636 self.startwith = 0
1436
2f6647cf5345 bugger, dropping support for "+" special char
Richard Jones <richard@users.sourceforge.net>
parents: 1421
diff changeset
2637 for name in ':startwith @startwith'.split():
4804
bc4144417861 More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4791
diff changeset
2638 if self._form_has_key(name):
1421
90bb11eb40dc oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents: 1417
diff changeset
2639 self.special_char = name[0]
4115
d61066deae67 handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents: 4112
diff changeset
2640 try:
d61066deae67 handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents: 4112
diff changeset
2641 self.startwith = int(self.form.getfirst(name))
d61066deae67 handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents: 4112
diff changeset
2642 except ValueError:
d61066deae67 handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents: 4112
diff changeset
2643 # not an integer - ignore
d61066deae67 handle bogus pagination values (issue 2550530)
Richard Jones <richard@users.sourceforge.net>
parents: 4112
diff changeset
2644 pass
1016
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
2645
3549
f6719836e521 allow dispname to be passed to renderWith [SF#1424587]
Richard Jones <richard@users.sourceforge.net>
parents: 3535
diff changeset
2646 # dispname
4804
bc4144417861 More fixes for form TypeError
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4791
diff changeset
2647 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
2648 self.dispname = self.form.getfirst('@dispname')
3689
c28d94070403 fix: HTMLRequest.dispname must be string,
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3665
diff changeset
2649 else:
c28d94070403 fix: HTMLRequest.dispname must be string,
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3665
diff changeset
2650 self.dispname = None
3549
f6719836e521 allow dispname to be passed to renderWith [SF#1424587]
Richard Jones <richard@users.sourceforge.net>
parents: 3535
diff changeset
2651
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
2652 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
2653 """ 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
2654 values.
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2655 """
1693
7218be26cf85 attempt to fix query editing
Richard Jones <richard@users.sourceforge.net>
parents: 1633
diff changeset
2656 env = {'QUERY_STRING': url}
7218be26cf85 attempt to fix query editing
Richard Jones <richard@users.sourceforge.net>
parents: 1633
diff changeset
2657 self.form = cgi.FieldStorage(environ=env)
7218be26cf85 attempt to fix query editing
Richard Jones <richard@users.sourceforge.net>
parents: 1633
diff changeset
2658
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
2659 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
2660
1016
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
2661 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
2662 """ 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
2663 """
1016
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
2664 self.__dict__.update(kwargs)
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
2665 if kwargs.has_key('columns'):
2983
9614a101b68f Stuff from the train ride this morning:
Richard Jones <richard@users.sourceforge.net>
parents: 2962
diff changeset
2666 self.show = support.TruthDict(self.columns)
1016
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
2667
1061
7f9b942128a3 nicer page title
Richard Jones <richard@users.sourceforge.net>
parents: 1051
diff changeset
2668 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
2669 """ 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
2670 """
1096
fa7df238e2d4 More cleaning up of configuration, and the "instance" -> "tracker" renaming.
Richard Jones <richard@users.sourceforge.net>
parents: 1080
diff changeset
2671 s = [self.client.db.config.TRACKER_NAME]
1061
7f9b942128a3 nicer page title
Richard Jones <richard@users.sourceforge.net>
parents: 1051
diff changeset
2672 if self.classname:
7f9b942128a3 nicer page title
Richard Jones <richard@users.sourceforge.net>
parents: 1051
diff changeset
2673 if self.client.nodeid:
7f9b942128a3 nicer page title
Richard Jones <richard@users.sourceforge.net>
parents: 1051
diff changeset
2674 s.append('- %s%s'%(self.classname, self.client.nodeid))
7f9b942128a3 nicer page title
Richard Jones <richard@users.sourceforge.net>
parents: 1051
diff changeset
2675 else:
1123
644d3075c2df more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents: 1122
diff changeset
2676 if self.template == 'item':
644d3075c2df more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents: 1122
diff changeset
2677 s.append('- new %s'%self.classname)
644d3075c2df more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents: 1122
diff changeset
2678 elif self.template == 'index':
644d3075c2df more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents: 1122
diff changeset
2679 s.append('- %s index'%self.classname)
644d3075c2df more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents: 1122
diff changeset
2680 else:
644d3075c2df more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents: 1122
diff changeset
2681 s.append('- %s %s'%(self.classname, self.template))
1061
7f9b942128a3 nicer page title
Richard Jones <richard@users.sourceforge.net>
parents: 1051
diff changeset
2682 else:
7f9b942128a3 nicer page title
Richard Jones <richard@users.sourceforge.net>
parents: 1051
diff changeset
2683 s.append('- home')
7f9b942128a3 nicer page title
Richard Jones <richard@users.sourceforge.net>
parents: 1051
diff changeset
2684 return ' '.join(s)
7f9b942128a3 nicer page title
Richard Jones <richard@users.sourceforge.net>
parents: 1051
diff changeset
2685
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2686 def __str__(self):
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2687 d = {}
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2688 d.update(self.__dict__)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2689 f = ''
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2690 for k in self.form.keys():
1202
01a143f9382e *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 1201
diff changeset
2691 f += '\n %r=%r'%(k,handleListCGIValue(self.form[k]))
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2692 d['form'] = f
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2693 e = ''
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2694 for k,v in self.env.items():
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2695 e += '\n %r=%r'%(k, v)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2696 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
2697 return """
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2698 form: %(form)s
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2699 base: %(base)r
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2700 classname: %(classname)r
1041
c28603c9f831 Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents: 1030
diff changeset
2701 template: %(template)r
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2702 columns: %(columns)r
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2703 sort: %(sort)r
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2704 group: %(group)r
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2705 filter: %(filter)r
1016
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
2706 search_text: %(search_text)r
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
2707 pagesize: %(pagesize)r
d6c13142e7b9 Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents: 1008
diff changeset
2708 startwith: %(startwith)r
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2709 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
2710 """%d
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2711
1002
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
2712 def indexargs_form(self, columns=1, sort=1, group=1, filter=1,
5082
c1f1465d5303 issue2550683 Allow indexargs_form filter variable exclusion.
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2713 filterspec=1, search_text=1, exclude=[]):
c1f1465d5303 issue2550683 Allow indexargs_form filter variable exclusion.
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2714 """ return the current index args as form elements
c1f1465d5303 issue2550683 Allow indexargs_form filter variable exclusion.
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2715
c1f1465d5303 issue2550683 Allow indexargs_form filter variable exclusion.
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2716 This routine generates an html form with hidden elements.
c1f1465d5303 issue2550683 Allow indexargs_form filter variable exclusion.
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2717 If you want to have visible form elements in your tal/jinja
c1f1465d5303 issue2550683 Allow indexargs_form filter variable exclusion.
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2718 generated templates use the exclude aray to list the names for
c1f1465d5303 issue2550683 Allow indexargs_form filter variable exclusion.
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2719 these elements. This wll prevent the function from creating
c1f1465d5303 issue2550683 Allow indexargs_form filter variable exclusion.
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2720 these elements in its output.
c1f1465d5303 issue2550683 Allow indexargs_form filter variable exclusion.
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2721 """
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2722 l = []
1421
90bb11eb40dc oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents: 1417
diff changeset
2723 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
2724 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
2725 l.append(self.input(type="hidden", name=k, value=v))
1002
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
2726 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
2727 add(sc+'columns', ','.join(self.columns))
3696
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2728 if sort:
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2729 val = []
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2730 for dir, attr in self.sort:
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2731 if dir == '-':
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2732 val.append('-'+attr)
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2733 else:
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2734 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
2735 add(sc+'sort', ','.join (val))
3696
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2736 if group:
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2737 val = []
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2738 for dir, attr in self.group:
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2739 if dir == '-':
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2740 val.append('-'+attr)
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2741 else:
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2742 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
2743 add(sc+'group', ','.join (val))
1002
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
2744 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
2745 add(sc+'filter', ','.join(self.filter))
3068
c4e76c84f43d another fix to indexargs
Richard Jones <richard@users.sourceforge.net>
parents: 3060
diff changeset
2746 if self.classname and filterspec:
4051
047402c4ec9b Handle transitive properties.
Stefan Seefeld <stefan@seefeld.name>
parents: 4043
diff changeset
2747 cls = self.client.db.getclass(self.classname)
1002
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
2748 for k,v in self.filterspec.items():
5082
c1f1465d5303 issue2550683 Allow indexargs_form filter variable exclusion.
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2749 if k in exclude:
c1f1465d5303 issue2550683 Allow indexargs_form filter variable exclusion.
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
2750 continue
1353
013ae8c6c8b1 display of saved queries is now performed correctly
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1342
diff changeset
2751 if type(v) == type([]):
4051
047402c4ec9b Handle transitive properties.
Stefan Seefeld <stefan@seefeld.name>
parents: 4043
diff changeset
2752 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
2753 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
2754 else:
3782
51c07c04d258 clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents: 3779
diff changeset
2755 add(k, ','.join(v))
1353
013ae8c6c8b1 display of saved queries is now performed correctly
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1342
diff changeset
2756 else:
3782
51c07c04d258 clean up input field generation and quoting of values [SF#1615616]
Richard Jones <richard@users.sourceforge.net>
parents: 3779
diff changeset
2757 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
2758 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
2759 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
2760 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
2761 add(sc+'startwith', self.startwith)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2762 return '\n'.join(l)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2763
1124
1fc1f92c5f31 more doc, bugfix in Batch
Richard Jones <richard@users.sourceforge.net>
parents: 1123
diff changeset
2764 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
2765 """ 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
2766 """
3104
97aec6907e69 merge from 0.7
Richard Jones <richard@users.sourceforge.net>
parents: 3068
diff changeset
2767 q = urllib.quote
1421
90bb11eb40dc oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents: 1417
diff changeset
2768 sc = self.special_char
5061
d7a4eeb7f843 Issue2407750 Add missing call to urllib.quote
John Rouillard <rouilj@ieee.org>
parents: 5051
diff changeset
2769 l = ['%s=%s'%(k,isinstance(v, basestring) and q(v) or v)
d7a4eeb7f843 Issue2407750 Add missing call to urllib.quote
John Rouillard <rouilj@ieee.org>
parents: 5051
diff changeset
2770 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
2771
378081f066cc registration is now a two-step process with confirmation from the
Richard Jones <richard@users.sourceforge.net>
parents: 1463
diff changeset
2772 # 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
2773 specials = {}
378081f066cc registration is now a two-step process with confirmation from the
Richard Jones <richard@users.sourceforge.net>
parents: 1463
diff changeset
2774 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
2775 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
2776 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
2777
378081f066cc registration is now a two-step process with confirmation from the
Richard Jones <richard@users.sourceforge.net>
parents: 1463
diff changeset
2778 # 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
2779 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
2780 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
2781 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
2782 val = []
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2783 for dir, attr in self.sort:
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2784 if dir == '-':
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2785 val.append('-'+attr)
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2786 else:
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2787 val.append(attr)
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2788 l.append(sc+'sort=%s'%(','.join(val)))
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2789 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
2790 val = []
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2791 for dir, attr in self.group:
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2792 if dir == '-':
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2793 val.append('-'+attr)
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2794 else:
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2795 val.append(attr)
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2796 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
2797 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
2798 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
2799 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
2800 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
2801 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
2802 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
2803 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
2804 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
2805
378081f066cc registration is now a two-step process with confirmation from the
Richard Jones <richard@users.sourceforge.net>
parents: 1463
diff changeset
2806 # 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
2807 if self.classname and self.filterspec:
3635
53987aa153d2 Transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3610
diff changeset
2808 cls = self.client.db.getclass(self.classname)
3068
c4e76c84f43d another fix to indexargs
Richard Jones <richard@users.sourceforge.net>
parents: 3060
diff changeset
2809 for k,v in self.filterspec.items():
c4e76c84f43d another fix to indexargs
Richard Jones <richard@users.sourceforge.net>
parents: 3060
diff changeset
2810 if not args.has_key(k):
c4e76c84f43d another fix to indexargs
Richard Jones <richard@users.sourceforge.net>
parents: 3060
diff changeset
2811 if type(v) == type([]):
3635
53987aa153d2 Transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3610
diff changeset
2812 prop = cls.get_transitive_prop(k)
3909
e89bcb28f683 indexargs_url force ids to int
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3905
diff changeset
2813 if k != 'id' and isinstance(prop, hyperdb.String):
3068
c4e76c84f43d another fix to indexargs
Richard Jones <richard@users.sourceforge.net>
parents: 3060
diff changeset
2814 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
2815 else:
c4e76c84f43d another fix to indexargs
Richard Jones <richard@users.sourceforge.net>
parents: 3060
diff changeset
2816 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
2817 else:
3068
c4e76c84f43d another fix to indexargs
Richard Jones <richard@users.sourceforge.net>
parents: 3060
diff changeset
2818 l.append('%s=%s'%(k, q(v)))
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2819 return '%s?%s'%(url, '&'.join(l))
1124
1fc1f92c5f31 more doc, bugfix in Batch
Richard Jones <richard@users.sourceforge.net>
parents: 1123
diff changeset
2820 indexargs_href = indexargs_url
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2821
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2822 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
2823 return """
1824
24819ee5dfbc First steps towards HTML4.01 Strict validation.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1773
diff changeset
2824 <script type="text/javascript">
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2825 submitted = false;
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2826 function submit_once() {
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2827 if (submitted) {
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2828 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
2829 event.returnValue = 0; // work-around for IE
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2830 return 0;
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2831 }
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2832 submitted = true;
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2833 return 1;
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2834 }
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2835
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2836 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
2837 HelpWin = window.open('%s' + helpurl, 'RoundupHelpWindow', 'scrollbars=yes,resizable=yes,toolbar=no,height='+height+',width='+width);
5006
bb97f61e1b73 Help-Window now gets focus
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4959
diff changeset
2838 HelpWin.focus ()
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2839 }
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2840 </script>
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2841 """%self.base
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2842
4524
68bbefb72825 Allow HTMLRequest.batch to filter on other permissions than "View"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4483
diff changeset
2843 def batch(self, permission='View'):
3842
310e315624b1 Change ''' into """ to work around bug in Emacs' syntax highlighting code.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3832
diff changeset
2844 """ 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
2845 """
4328
3d224f7fb364 add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents: 4306
diff changeset
2846 check = self._client.db.security.hasPermission
3d224f7fb364 add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents: 4306
diff changeset
2847 userid = self._client.userid
3d224f7fb364 add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents: 4306
diff changeset
2848 if not check('Web Access', userid):
3d224f7fb364 add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents: 4306
diff changeset
2849 return Batch(self.client, [], self.pagesize, self.startwith,
3d224f7fb364 add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents: 4306
diff changeset
2850 classname=self.classname)
3d224f7fb364 add web access check all over templating
Richard Jones <richard@users.sourceforge.net>
parents: 4306
diff changeset
2851
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2852 filterspec = self.filterspec
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2853 sort = self.sort
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2854 group = self.group
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2855
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2856 # get the list of ids we're batching over
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2857 klass = self.client.db.getclass(self.classname)
1002
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
2858 if self.search_text:
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
2859 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
2860 [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
2861 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
2862 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
2863 )], klass)
1002
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
2864 else:
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
2865 matches = None
3126
a2889d22db4a the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents: 3117
diff changeset
2866
a2889d22db4a the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents: 3117
diff changeset
2867 # filter for visibility
a2889d22db4a the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents: 3117
diff changeset
2868 l = [id for id in klass.filter(matches, filterspec, sort, group)
4524
68bbefb72825 Allow HTMLRequest.batch to filter on other permissions than "View"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4483
diff changeset
2869 if check(permission, userid, self.classname, itemid=id)]
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2870
1182
cb35cf3db0e0 don't create instances that aren't used
Richard Jones <richard@users.sourceforge.net>
parents: 1170
diff changeset
2871 # 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
2872 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
2873 classname=self.classname)
1004
5f12d3259f31 logout works better now
Richard Jones <richard@users.sourceforge.net>
parents: 1003
diff changeset
2874
5f12d3259f31 logout works better now
Richard Jones <richard@users.sourceforge.net>
parents: 1003
diff changeset
2875 # 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
2876 # Acquisition and add a couple of useful methods
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2877 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
2878 """ 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
2879 series of batches.
ddbc5d1ad94f more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1120
diff changeset
2880
ddbc5d1ad94f more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1120
diff changeset
2881 ========= ========================================================
ddbc5d1ad94f more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1120
diff changeset
2882 Parameter Usage
ddbc5d1ad94f more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1120
diff changeset
2883 ========= ========================================================
1182
cb35cf3db0e0 don't create instances that aren't used
Richard Jones <richard@users.sourceforge.net>
parents: 1170
diff changeset
2884 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
2885 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
2886 size how big to make the sequence.
ddbc5d1ad94f more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1120
diff changeset
2887 start where to start (0-indexed) in the sequence.
ddbc5d1ad94f more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1120
diff changeset
2888 end where to end (0-indexed) in the sequence.
ddbc5d1ad94f more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1120
diff changeset
2889 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
2890 value, then it is combined with this batch
ddbc5d1ad94f more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1120
diff changeset
2891 overlap the number of items shared between adjacent batches
ddbc5d1ad94f more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1120
diff changeset
2892 ========= ========================================================
ddbc5d1ad94f more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1120
diff changeset
2893
ddbc5d1ad94f more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1120
diff changeset
2894 Attributes: Note that the "start" attribute, unlike the
ddbc5d1ad94f more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1120
diff changeset
2895 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
2896 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
2897 the batch.
ddbc5d1ad94f more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1120
diff changeset
2898
ddbc5d1ad94f more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1120
diff changeset
2899 "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
2900 """
1122
ddbc5d1ad94f more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1120
diff changeset
2901 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
2902 overlap=0, classname=None):
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2903 self.client = client
1002
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
2904 self.last_index = self.last_item = None
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
2905 self.current_item = None
1182
cb35cf3db0e0 don't create instances that aren't used
Richard Jones <richard@users.sourceforge.net>
parents: 1170
diff changeset
2906 self.classname = classname
1124
1fc1f92c5f31 more doc, bugfix in Batch
Richard Jones <richard@users.sourceforge.net>
parents: 1123
diff changeset
2907 self.sequence_length = len(sequence)
1122
ddbc5d1ad94f more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1120
diff changeset
2908 ZTUtils.Batch.__init__(self, sequence, size, start, end, orphan,
ddbc5d1ad94f more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1120
diff changeset
2909 overlap)
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2910
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2911 # overwrite so we can late-instantiate the HTMLItem instance
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2912 def __getitem__(self, index):
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2913 if index < 0:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2914 if index + self.end < self.first: raise IndexError, index
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2915 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
2916
1120
c26471971d18 Exposed the Batch mechanism through the top-level "utils" variable.
Richard Jones <richard@users.sourceforge.net>
parents: 1113
diff changeset
2917 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
2918 raise IndexError, index
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2919
1002
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
2920 # 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
2921 # (for some reason, index 0 is fetched twice)
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
2922 if index != self.last_index:
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
2923 self.last_item = self.current_item
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
2924 self.last_index = index
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
2925
1182
cb35cf3db0e0 don't create instances that aren't used
Richard Jones <richard@users.sourceforge.net>
parents: 1170
diff changeset
2926 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
2927 if self.classname:
cb35cf3db0e0 don't create instances that aren't used
Richard Jones <richard@users.sourceforge.net>
parents: 1170
diff changeset
2928 # 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
2929 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
2930 self.current_item = item
cb35cf3db0e0 don't create instances that aren't used
Richard Jones <richard@users.sourceforge.net>
parents: 1170
diff changeset
2931 return item
1002
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
2932
3696
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2933 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
2934 """ 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
2935 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
2936 """
3369
18f1631c9b85 sort/group by missing values correctly [SF#1198623]
Richard Jones <richard@users.sourceforge.net>
parents: 3363
diff changeset
2937 # 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
2938 # 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
2939 if self.last_item is None:
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2940 return 1
790363e96852 Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3689
diff changeset
2941 for property in properties:
4875
cdec6ed210d0 Fix batch.propchanged for transitive id properties (would result in a
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4864
diff changeset
2942 if property == 'id' or property.endswith ('.id')\
cdec6ed210d0 Fix batch.propchanged for transitive id properties (would result in a
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4864
diff changeset
2943 or isinstance (self.last_item[property], list):
3700
9cc2566cc7d9 This isn't really nice, but now grouping by transitive multilinks works.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3699
diff changeset
2944 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
2945 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
2946 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
2947 else:
976191d749fb grouping by ID and grouping by transitive multilinks didn't work correctly.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3698
diff changeset
2948 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
2949 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
2950 return 1
1002
1798d2fa9fec Hack hack...
Richard Jones <richard@users.sourceforge.net>
parents: 999
diff changeset
2951 return 0
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2952
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2953 # override these 'cos we don't have access to acquisition
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2954 def previous(self):
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2955 if self.start == 1:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2956 return None
5087
39af8a0f3446 Applied patch attached to issue2550723. Problem in index page
John Rouillard <rouilj@ieee.org>
parents: 5082
diff changeset
2957 return Batch(self.client, self._sequence, self.size,
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2958 self.first - self._size + self.overlap, 0, self.orphan,
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2959 self.overlap)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2960
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2961 def next(self):
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2962 try:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2963 self._sequence[self.end]
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2964 except IndexError:
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2965 return None
5087
39af8a0f3446 Applied patch attached to issue2550723. Problem in index page
John Rouillard <rouilj@ieee.org>
parents: 5082
diff changeset
2966 return Batch(self.client, self._sequence, self.size,
985
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2967 self.end - self.overlap, 0, self.orphan, self.overlap)
55ab0c5b49f9 New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2968
1120
c26471971d18 Exposed the Batch mechanism through the top-level "utils" variable.
Richard Jones <richard@users.sourceforge.net>
parents: 1113
diff changeset
2969 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
2970 """ 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
2971 """
1120
c26471971d18 Exposed the Batch mechanism through the top-level "utils" variable.
Richard Jones <richard@users.sourceforge.net>
parents: 1113
diff changeset
2972 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
2973 self.client = client
1122
ddbc5d1ad94f more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1120
diff changeset
2974 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
2975 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
2976 overlap)
c26471971d18 Exposed the Batch mechanism through the top-level "utils" variable.
Richard Jones <richard@users.sourceforge.net>
parents: 1113
diff changeset
2977
2180
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2170
diff changeset
2978 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
2979 """URL-quote the supplied text."""
2180
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2170
diff changeset
2980 return urllib.quote(url)
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2170
diff changeset
2981
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2170
diff changeset
2982 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
2983 """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
2984 return cgi.escape(html)
2180
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2170
diff changeset
2985
2640
b01eca163779 The "type" parameter is supposed to be optional
Richard Jones <richard@users.sourceforge.net>
parents: 2637
diff changeset
2986 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
2987 """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
2988 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
2989 # backwards-compatibility
b01eca163779 The "type" parameter is supposed to be optional
Richard Jones <richard@users.sourceforge.net>
parents: 2637
diff changeset
2990 raise AttributeError, name
b01eca163779 The "type" parameter is supposed to be optional
Richard Jones <richard@users.sourceforge.net>
parents: 2637
diff changeset
2991 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
2992 raise AttributeError, name
3006
50b0f8e98247 fix API for templating utils extensions - remove "utils" arg
Richard Jones <richard@users.sourceforge.net>
parents: 2994
diff changeset
2993 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
2994
4466
f1fe6fd0aa61 Multilinks can be filtered by combining elements with AND, OR and NOT now.
Bernhard Reiter <Bernhard.Reiter@intevation.de>
parents: 4463
diff changeset
2995 def keywords_expressions(self, request):
f1fe6fd0aa61 Multilinks can be filtered by combining elements with AND, OR and NOT now.
Bernhard Reiter <Bernhard.Reiter@intevation.de>
parents: 4463
diff changeset
2996 return render_keywords_expression_editor(request)
f1fe6fd0aa61 Multilinks can be filtered by combining elements with AND, OR and NOT now.
Bernhard Reiter <Bernhard.Reiter@intevation.de>
parents: 4463
diff changeset
2997
3292
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2998 def html_calendar(self, request):
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
2999 """Generate a HTML calendar.
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
3000
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
3001 `request` the roundup.request object
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
3002 - @template : name of the template
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
3003 - 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
3004 - 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
3005 back the date
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
3006 - date : current date
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
3007 - 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
3008
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
3009 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
3010 """
4333
0693f1ff2571 fix typo
Richard Jones <richard@users.sourceforge.net>
parents: 4331
diff changeset
3011 tz = request.client.db.getUserTimezone()
4331
7327b102920f Display 'today' in the account user's timezone, thanks David Wolever
Richard Jones <richard@users.sourceforge.net>
parents: 4329
diff changeset
3012 current_date = date.Date(".").local(tz)
7327b102920f Display 'today' in the account user's timezone, thanks David Wolever
Richard Jones <richard@users.sourceforge.net>
parents: 4329
diff changeset
3013 date_str = request.form.getfirst("date", current_date)
3292
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
3014 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
3015 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
3016 form = request.form.getfirst("form")
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
3017 property = request.form.getfirst("property")
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
3018 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
3019 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
3020 day = display.day
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
3021
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
3022 # for navigation
4651
beb8d43f4d9d issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents: 4647
diff changeset
3023 try:
beb8d43f4d9d issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents: 4647
diff changeset
3024 date_prev_month = display + date.Interval("-1m")
beb8d43f4d9d issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents: 4647
diff changeset
3025 except ValueError:
beb8d43f4d9d issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents: 4647
diff changeset
3026 date_prev_month = None
beb8d43f4d9d issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents: 4647
diff changeset
3027 try:
beb8d43f4d9d issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents: 4647
diff changeset
3028 date_next_month = display + date.Interval("+1m")
beb8d43f4d9d issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents: 4647
diff changeset
3029 except ValueError:
beb8d43f4d9d issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents: 4647
diff changeset
3030 date_next_month = None
beb8d43f4d9d issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents: 4647
diff changeset
3031 try:
beb8d43f4d9d issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents: 4647
diff changeset
3032 date_prev_year = display + date.Interval("-1y")
beb8d43f4d9d issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents: 4647
diff changeset
3033 except ValueError:
beb8d43f4d9d issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents: 4647
diff changeset
3034 date_prev_year = None
beb8d43f4d9d issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents: 4647
diff changeset
3035 try:
beb8d43f4d9d issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents: 4647
diff changeset
3036 date_next_year = display + date.Interval("+1y")
beb8d43f4d9d issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents: 4647
diff changeset
3037 except ValueError:
beb8d43f4d9d issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents: 4647
diff changeset
3038 date_next_year = None
3292
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
3039
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
3040 res = []
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
3041
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
3042 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
3043 (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
3044
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
3045 # navigation
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
3046 # month
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
3047 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
3048 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
3049 link = "&display=%s"%date_prev_month
4651
beb8d43f4d9d issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents: 4647
diff changeset
3050 if date_prev_month:
beb8d43f4d9d issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents: 4647
diff changeset
3051 res.append(' <td><a href="%s&display=%s">&lt;</a></td>'
beb8d43f4d9d issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents: 4647
diff changeset
3052 % (base_link, date_prev_month))
beb8d43f4d9d issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents: 4647
diff changeset
3053 else:
beb8d43f4d9d issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents: 4647
diff changeset
3054 res.append(' <td></td>')
3292
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
3055 res.append(' <td>%s</td>'%calendar.month_name[display.month])
4651
beb8d43f4d9d issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents: 4647
diff changeset
3056 if date_next_month:
beb8d43f4d9d issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents: 4647
diff changeset
3057 res.append(' <td><a href="%s&display=%s">&gt;</a></td>'
beb8d43f4d9d issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents: 4647
diff changeset
3058 % (base_link, date_next_month))
beb8d43f4d9d issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents: 4647
diff changeset
3059 else:
beb8d43f4d9d issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents: 4647
diff changeset
3060 res.append(' <td></td>')
3292
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
3061 # spacer
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
3062 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
3063 # year
4651
beb8d43f4d9d issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents: 4647
diff changeset
3064 if date_prev_year:
beb8d43f4d9d issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents: 4647
diff changeset
3065 res.append(' <td><a href="%s&display=%s">&lt;</a></td>'
beb8d43f4d9d issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents: 4647
diff changeset
3066 % (base_link, date_prev_year))
beb8d43f4d9d issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents: 4647
diff changeset
3067 else:
beb8d43f4d9d issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents: 4647
diff changeset
3068 res.append(' <td></td>')
3292
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
3069 res.append(' <td>%s</td>'%display.year)
4651
beb8d43f4d9d issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents: 4647
diff changeset
3070 if date_next_year:
beb8d43f4d9d issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents: 4647
diff changeset
3071 res.append(' <td><a href="%s&display=%s">&gt;</a></td>'
beb8d43f4d9d issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents: 4647
diff changeset
3072 % (base_link, date_next_year))
beb8d43f4d9d issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents: 4647
diff changeset
3073 else:
beb8d43f4d9d issue2550765: Don't show links in calendar that will fail. Found and fixed by Cédric Krier.
Bernhard Reiter <bernhard@intevation.de>
parents: 4647
diff changeset
3074 res.append(' <td></td>')
3292
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
3075 res.append(' </tr></table>')
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
3076 res.append(' </td></tr>')
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
3077
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
3078 # the calendar
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
3079 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
3080 res.append(' <tr class="weekdays">')
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
3081 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
3082 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
3083 res.append(' </tr>')
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
3084 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
3085 res.append(' <tr>')
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
3086 for day in week:
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
3087 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
3088 "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
3089 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
3090 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
3091 # highlight
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
3092 style = "today"
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
3093 else :
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
3094 style = ""
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
3095 if day:
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
3096 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
3097 style, link, day))
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
3098 else :
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
3099 res.append(' <td></td>')
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
3100 res.append(' </tr>')
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
3101 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
3102 return "\n".join(res)
8c7b522dc934 added date selection popup windows (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents: 3280
diff changeset
3103
4878
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4875
diff changeset
3104 class MissingValue(object):
3164
24476db8872f nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents: 3159
diff changeset
3105 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
3106 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
3107 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
3108 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
3109
24476db8872f nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents: 3159
diff changeset
3110 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
3111 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
3112 # 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
3113 # 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
3114 #
24476db8872f nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents: 3159
diff changeset
3115 # 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
3116 #
24476db8872f nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents: 3159
diff changeset
3117 # 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
3118 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
3119 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
3120
24476db8872f nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents: 3159
diff changeset
3121 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
3122 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
3123 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
3124 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
3125 self.__description)
24476db8872f nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents: 3159
diff changeset
3126 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
3127 _ = gettext
24476db8872f nicer error looking up values of None (response to [SF#1108697])
Richard Jones <richard@users.sourceforge.net>
parents: 3159
diff changeset
3128
2561
0dd3dca6bd01 always use translation service set in the tracker client instance;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2558
diff changeset
3129 # vim: set et sts=4 sw=4 :

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