Mercurial > p > roundup > code
annotate roundup/cgi/templating.py @ 2806:845e87d5e3ba
translator objects now have the following search path:
- selected locale messages in the tracker locale dir
- selected locale messages in the system locale dir
- english messages in the tracker locale dir
- english messages in the system locale dir
automatically compile .mo files if needed (found .po file
and .mo is missing or .po mtime is greater that .mo mtime)
removed support for python < 2.0. gettext module is now required.
get_translation: removed 'domain' argument, added 'tracker_home' argument
| author | Alexander Smishlajev <a1s@users.sourceforge.net> |
|---|---|
| date | Sat, 23 Oct 2004 14:03:34 +0000 |
| parents | 10a49678ebf2 |
| children | 43e3a7ac1190 |
| 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 |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
4 todo = ''' |
|
2327
36ae1b14aaab
remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2324
diff
changeset
|
5 - 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
|
6 when none appears in the hyperdb or request. |
|
2180
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
7 - Multilink property additions: change_note and new_upload |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
8 - Add class.find() too |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
9 - NumberHTMLProperty should support numeric operations |
|
2324
da4444e593f4
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
2320
diff
changeset
|
10 - LinkHTMLProperty should handle comparisons to strings (cf. linked name) |
|
2411
7ff0a0306877
another TODO
Richard Jones <richard@users.sourceforge.net>
parents:
2396
diff
changeset
|
11 - HTMLRequest.default(self, sort, group, filter, columns, **filterspec): |
|
7ff0a0306877
another TODO
Richard Jones <richard@users.sourceforge.net>
parents:
2396
diff
changeset
|
12 """Set the request's view arguments to the given values when no |
|
7ff0a0306877
another TODO
Richard Jones <richard@users.sourceforge.net>
parents:
2396
diff
changeset
|
13 values are found in the CGI environment. |
|
7ff0a0306877
another TODO
Richard Jones <richard@users.sourceforge.net>
parents:
2396
diff
changeset
|
14 """ |
|
2664
8348373b4361
another TODO
Richard Jones <richard@users.sourceforge.net>
parents:
2651
diff
changeset
|
15 - have menu() methods accept filtering arguments |
|
2180
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
16 ''' |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
17 |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
18 __docformat__ = 'restructuredtext' |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
19 |
|
1931
f1e5e5115c29
Always sort MultilinkHTMLProperty in the correct order...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1917
diff
changeset
|
20 from __future__ import nested_scopes |
|
f1e5e5115c29
Always sort MultilinkHTMLProperty in the correct order...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1917
diff
changeset
|
21 |
|
1771
332fe2b77e1c
set the content type on page templates (can have XML templates now)
Richard Jones <richard@users.sourceforge.net>
parents:
1767
diff
changeset
|
22 import sys, cgi, urllib, os, re, os.path, time, errno, mimetypes |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
23 |
|
1767
fdaa0b751355
python2.3 CSV support, also missing thankyou in index.txt :)
Richard Jones <richard@users.sourceforge.net>
parents:
1743
diff
changeset
|
24 from roundup import hyperdb, date, rcsv |
|
2377
a53f87f2488a
StaticTranslationService moved here out of the code originating from Zope;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2347
diff
changeset
|
25 from roundup import i18n |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
26 from roundup.i18n import _ |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
27 |
|
1016
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
28 try: |
|
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
29 import cPickle as pickle |
|
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
30 except ImportError: |
|
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
31 import pickle |
|
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
32 try: |
|
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
33 import cStringIO as StringIO |
|
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
34 except ImportError: |
|
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
35 import StringIO |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
36 try: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
37 import StructuredText |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
38 except ImportError: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
39 StructuredText = None |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
40 |
| 1049 | 41 # bring in the templating support |
|
2377
a53f87f2488a
StaticTranslationService moved here out of the code originating from Zope;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2347
diff
changeset
|
42 from roundup.cgi.PageTemplates import PageTemplate, GlobalTranslationService |
| 1049 | 43 from roundup.cgi.PageTemplates.Expressions import getEngine |
|
2377
a53f87f2488a
StaticTranslationService moved here out of the code originating from Zope;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2347
diff
changeset
|
44 from roundup.cgi.TAL import TALInterpreter |
|
2558
cf52ad6788c8
TranslationService definitions moved to separate module;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2547
diff
changeset
|
45 from roundup.cgi import TranslationService, ZTUtils |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
46 |
|
2377
a53f87f2488a
StaticTranslationService moved here out of the code originating from Zope;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2347
diff
changeset
|
47 ### i18n services |
|
2558
cf52ad6788c8
TranslationService definitions moved to separate module;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2547
diff
changeset
|
48 # 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
|
49 # it is left here for backward compatibility |
|
cf52ad6788c8
TranslationService definitions moved to separate module;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2547
diff
changeset
|
50 # 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
|
51 translationService = TranslationService.get_translation() |
|
2389
2ff93cee9c63
StaticTranslationService got methods gettext() and ngettext()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2377
diff
changeset
|
52 GlobalTranslationService.setGlobalTranslationService(translationService) |
|
2377
a53f87f2488a
StaticTranslationService moved here out of the code originating from Zope;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2347
diff
changeset
|
53 |
|
a53f87f2488a
StaticTranslationService moved here out of the code originating from Zope;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2347
diff
changeset
|
54 ### templating |
|
a53f87f2488a
StaticTranslationService moved here out of the code originating from Zope;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2347
diff
changeset
|
55 |
|
1068
665730c27d29
nicer template absence error
Richard Jones <richard@users.sourceforge.net>
parents:
1067
diff
changeset
|
56 class NoTemplate(Exception): |
|
665730c27d29
nicer template absence error
Richard Jones <richard@users.sourceforge.net>
parents:
1067
diff
changeset
|
57 pass |
|
665730c27d29
nicer template absence error
Richard Jones <richard@users.sourceforge.net>
parents:
1067
diff
changeset
|
58 |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
59 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
|
60 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
|
61 self.action = action |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
62 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
|
63 if translator: |
|
7b248ea0a2e5
add translation to Unauthorised exception; mark missed text for translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2458
diff
changeset
|
64 self._ = translator.gettext |
|
7b248ea0a2e5
add translation to Unauthorised exception; mark missed text for translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2458
diff
changeset
|
65 else: |
|
2561
0dd3dca6bd01
always use translation service set in the tracker client instance;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2558
diff
changeset
|
66 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
|
67 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
|
68 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
|
69 '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
|
70 '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
|
71 |
|
1696
38f9578de0c6
fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents:
1693
diff
changeset
|
72 def find_template(dir, name, extension): |
|
38f9578de0c6
fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents:
1693
diff
changeset
|
73 ''' Find a template in the nominated dir |
|
38f9578de0c6
fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents:
1693
diff
changeset
|
74 ''' |
|
38f9578de0c6
fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents:
1693
diff
changeset
|
75 # find the source |
|
38f9578de0c6
fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents:
1693
diff
changeset
|
76 if extension: |
|
38f9578de0c6
fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents:
1693
diff
changeset
|
77 filename = '%s.%s'%(name, extension) |
|
38f9578de0c6
fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents:
1693
diff
changeset
|
78 else: |
|
38f9578de0c6
fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents:
1693
diff
changeset
|
79 filename = name |
|
38f9578de0c6
fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents:
1693
diff
changeset
|
80 |
|
38f9578de0c6
fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents:
1693
diff
changeset
|
81 # try old-style |
|
38f9578de0c6
fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents:
1693
diff
changeset
|
82 src = os.path.join(dir, filename) |
|
38f9578de0c6
fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents:
1693
diff
changeset
|
83 if os.path.exists(src): |
|
38f9578de0c6
fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents:
1693
diff
changeset
|
84 return (src, filename) |
|
38f9578de0c6
fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents:
1693
diff
changeset
|
85 |
|
38f9578de0c6
fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents:
1693
diff
changeset
|
86 # try with a .html extension (new-style) |
|
38f9578de0c6
fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents:
1693
diff
changeset
|
87 filename = filename + '.html' |
|
38f9578de0c6
fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents:
1693
diff
changeset
|
88 src = os.path.join(dir, filename) |
|
38f9578de0c6
fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents:
1693
diff
changeset
|
89 if os.path.exists(src): |
|
38f9578de0c6
fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents:
1693
diff
changeset
|
90 return (src, filename) |
|
38f9578de0c6
fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents:
1693
diff
changeset
|
91 |
|
38f9578de0c6
fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents:
1693
diff
changeset
|
92 # no extension == no generic template is possible |
|
38f9578de0c6
fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents:
1693
diff
changeset
|
93 if not extension: |
|
38f9578de0c6
fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents:
1693
diff
changeset
|
94 raise NoTemplate, 'Template file "%s" doesn\'t exist'%name |
|
38f9578de0c6
fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents:
1693
diff
changeset
|
95 |
|
38f9578de0c6
fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents:
1693
diff
changeset
|
96 # try for a _generic template |
|
38f9578de0c6
fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents:
1693
diff
changeset
|
97 generic = '_generic.%s'%extension |
|
38f9578de0c6
fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents:
1693
diff
changeset
|
98 src = os.path.join(dir, generic) |
|
38f9578de0c6
fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents:
1693
diff
changeset
|
99 if os.path.exists(src): |
|
38f9578de0c6
fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents:
1693
diff
changeset
|
100 return (src, generic) |
|
38f9578de0c6
fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents:
1693
diff
changeset
|
101 |
|
38f9578de0c6
fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents:
1693
diff
changeset
|
102 # finally, try _generic.html |
|
1728
1f8bbdff56b9
fixed generic template discovery
Richard Jones <richard@users.sourceforge.net>
parents:
1717
diff
changeset
|
103 generic = generic + '.html' |
|
1696
38f9578de0c6
fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents:
1693
diff
changeset
|
104 src = os.path.join(dir, generic) |
|
38f9578de0c6
fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents:
1693
diff
changeset
|
105 if os.path.exists(src): |
|
38f9578de0c6
fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents:
1693
diff
changeset
|
106 return (src, generic) |
|
38f9578de0c6
fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents:
1693
diff
changeset
|
107 |
|
38f9578de0c6
fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents:
1693
diff
changeset
|
108 raise NoTemplate, 'No template file exists for templating "%s" '\ |
|
38f9578de0c6
fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents:
1693
diff
changeset
|
109 'with template "%s" (neither "%s" nor "%s")'%(name, extension, |
|
38f9578de0c6
fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents:
1693
diff
changeset
|
110 filename, generic) |
|
38f9578de0c6
fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents:
1693
diff
changeset
|
111 |
|
1204
b862bbf2067a
Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents:
1202
diff
changeset
|
112 class Templates: |
|
b862bbf2067a
Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents:
1202
diff
changeset
|
113 templates = {} |
|
b862bbf2067a
Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents:
1202
diff
changeset
|
114 |
|
b862bbf2067a
Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents:
1202
diff
changeset
|
115 def __init__(self, dir): |
|
b862bbf2067a
Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents:
1202
diff
changeset
|
116 self.dir = dir |
|
1183
08a13a84ed43
Some speedups - both of the SQL backends can handle using only one cursor.
Richard Jones <richard@users.sourceforge.net>
parents:
1182
diff
changeset
|
117 |
|
1204
b862bbf2067a
Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents:
1202
diff
changeset
|
118 def precompileTemplates(self): |
|
b862bbf2067a
Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents:
1202
diff
changeset
|
119 ''' Go through a directory and precompile all the templates therein |
|
b862bbf2067a
Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents:
1202
diff
changeset
|
120 ''' |
|
b862bbf2067a
Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents:
1202
diff
changeset
|
121 for filename in os.listdir(self.dir): |
|
b862bbf2067a
Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents:
1202
diff
changeset
|
122 if os.path.isdir(filename): continue |
|
b862bbf2067a
Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents:
1202
diff
changeset
|
123 if '.' in filename: |
|
b862bbf2067a
Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents:
1202
diff
changeset
|
124 name, extension = filename.split('.') |
|
1591
21312a7564fd
moving templates around
Richard Jones <richard@users.sourceforge.net>
parents:
1565
diff
changeset
|
125 self.get(name, extension) |
|
1204
b862bbf2067a
Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents:
1202
diff
changeset
|
126 else: |
|
1591
21312a7564fd
moving templates around
Richard Jones <richard@users.sourceforge.net>
parents:
1565
diff
changeset
|
127 self.get(filename, None) |
|
1041
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
128 |
|
1441
2b20294b934a
allow get("issue.item") for getting templates
Richard Jones <richard@users.sourceforge.net>
parents:
1440
diff
changeset
|
129 def get(self, name, extension=None): |
|
1204
b862bbf2067a
Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents:
1202
diff
changeset
|
130 ''' Interface to get a template, possibly loading a compiled template. |
|
b862bbf2067a
Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents:
1202
diff
changeset
|
131 |
|
b862bbf2067a
Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents:
1202
diff
changeset
|
132 "name" and "extension" indicate the template we're after, which in |
|
b862bbf2067a
Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents:
1202
diff
changeset
|
133 most cases will be "name.extension". If "extension" is None, then |
|
b862bbf2067a
Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents:
1202
diff
changeset
|
134 we look for a template just called "name" with no extension. |
|
1041
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
135 |
|
1204
b862bbf2067a
Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents:
1202
diff
changeset
|
136 If the file "name.extension" doesn't exist, we look for |
|
b862bbf2067a
Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents:
1202
diff
changeset
|
137 "_generic.extension" as a fallback. |
|
b862bbf2067a
Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents:
1202
diff
changeset
|
138 ''' |
|
b862bbf2067a
Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents:
1202
diff
changeset
|
139 # default the name to "home" |
|
b862bbf2067a
Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents:
1202
diff
changeset
|
140 if name is None: |
|
b862bbf2067a
Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents:
1202
diff
changeset
|
141 name = 'home' |
|
1441
2b20294b934a
allow get("issue.item") for getting templates
Richard Jones <richard@users.sourceforge.net>
parents:
1440
diff
changeset
|
142 elif extension is None and '.' in name: |
|
2b20294b934a
allow get("issue.item") for getting templates
Richard Jones <richard@users.sourceforge.net>
parents:
1440
diff
changeset
|
143 # split name |
|
2b20294b934a
allow get("issue.item") for getting templates
Richard Jones <richard@users.sourceforge.net>
parents:
1440
diff
changeset
|
144 name, extension = name.split('.') |
|
1068
665730c27d29
nicer template absence error
Richard Jones <richard@users.sourceforge.net>
parents:
1067
diff
changeset
|
145 |
|
1696
38f9578de0c6
fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents:
1693
diff
changeset
|
146 # find the source |
|
38f9578de0c6
fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents:
1693
diff
changeset
|
147 src, filename = find_template(self.dir, name, extension) |
|
1591
21312a7564fd
moving templates around
Richard Jones <richard@users.sourceforge.net>
parents:
1565
diff
changeset
|
148 |
|
1696
38f9578de0c6
fix HTML file detection (hence history xref linking) [SF#741478]
Richard Jones <richard@users.sourceforge.net>
parents:
1693
diff
changeset
|
149 # has it changed? |
|
1068
665730c27d29
nicer template absence error
Richard Jones <richard@users.sourceforge.net>
parents:
1067
diff
changeset
|
150 try: |
|
665730c27d29
nicer template absence error
Richard Jones <richard@users.sourceforge.net>
parents:
1067
diff
changeset
|
151 stime = os.stat(src)[os.path.stat.ST_MTIME] |
|
665730c27d29
nicer template absence error
Richard Jones <richard@users.sourceforge.net>
parents:
1067
diff
changeset
|
152 except os.error, error: |
|
665730c27d29
nicer template absence error
Richard Jones <richard@users.sourceforge.net>
parents:
1067
diff
changeset
|
153 if error.errno != errno.ENOENT: |
|
665730c27d29
nicer template absence error
Richard Jones <richard@users.sourceforge.net>
parents:
1067
diff
changeset
|
154 raise |
|
1016
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
155 |
|
1332
e2d51ba4f6b1
key the templates cache off full path, not filename
Richard Jones <richard@users.sourceforge.net>
parents:
1325
diff
changeset
|
156 if self.templates.has_key(src) and \ |
|
2136
ee3cf6a44f29
queries on a per-user basis, and public queries [SF#891798] :)
Richard Jones <richard@users.sourceforge.net>
parents:
2118
diff
changeset
|
157 stime <= self.templates[src].mtime: |
|
1204
b862bbf2067a
Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents:
1202
diff
changeset
|
158 # compiled template is up to date |
|
1332
e2d51ba4f6b1
key the templates cache off full path, not filename
Richard Jones <richard@users.sourceforge.net>
parents:
1325
diff
changeset
|
159 return self.templates[src] |
|
1016
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
160 |
|
1204
b862bbf2067a
Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents:
1202
diff
changeset
|
161 # compile the template |
|
1332
e2d51ba4f6b1
key the templates cache off full path, not filename
Richard Jones <richard@users.sourceforge.net>
parents:
1325
diff
changeset
|
162 self.templates[src] = pt = RoundupPageTemplate() |
|
1771
332fe2b77e1c
set the content type on page templates (can have XML templates now)
Richard Jones <richard@users.sourceforge.net>
parents:
1767
diff
changeset
|
163 # use pt_edit so we can pass the content_type guess too |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
164 content_type = mimetypes.guess_type(filename)[0] or 'text/html' |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
165 pt.pt_edit(open(src).read(), content_type) |
|
1204
b862bbf2067a
Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents:
1202
diff
changeset
|
166 pt.id = filename |
|
2136
ee3cf6a44f29
queries on a per-user basis, and public queries [SF#891798] :)
Richard Jones <richard@users.sourceforge.net>
parents:
2118
diff
changeset
|
167 pt.mtime = stime |
|
1204
b862bbf2067a
Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents:
1202
diff
changeset
|
168 return pt |
|
b862bbf2067a
Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents:
1202
diff
changeset
|
169 |
|
b862bbf2067a
Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents:
1202
diff
changeset
|
170 def __getitem__(self, name): |
|
b862bbf2067a
Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents:
1202
diff
changeset
|
171 name, extension = os.path.splitext(name) |
|
b862bbf2067a
Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents:
1202
diff
changeset
|
172 if extension: |
|
b862bbf2067a
Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents:
1202
diff
changeset
|
173 extension = extension[1:] |
|
b862bbf2067a
Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents:
1202
diff
changeset
|
174 try: |
|
b862bbf2067a
Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents:
1202
diff
changeset
|
175 return self.get(name, extension) |
|
b862bbf2067a
Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents:
1202
diff
changeset
|
176 except NoTemplate, message: |
|
b862bbf2067a
Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents:
1202
diff
changeset
|
177 raise KeyError, message |
|
1016
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
178 |
|
2390
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
179 def context(client, template=None, classname=None, request=None): |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
180 """Return the rendering context dictionary |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
181 |
|
2390
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
182 The dictionary includes following symbols: |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
183 |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
184 *context* |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
185 this is one of three things: |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
186 |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
187 1. None - we're viewing a "home" page |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
188 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
|
189 instance. |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
190 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
|
191 item, as an HTMLItem instance. |
|
2390
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
192 |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
193 *request* |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
194 Includes information about the current request, including: |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
195 |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
196 - the url |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
197 - 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
|
198 ``properties``, etc) parsed out of the form. |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
199 - methods for easy filterspec link generation |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
200 - *user*, the current user node as an HTMLItem instance |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
201 - *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
|
202 |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
203 *config* |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
204 The current tracker config. |
|
2390
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
205 |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
206 *db* |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
207 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
|
208 |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
209 *utils* |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
210 This is a special class that has its base in the TemplatingUtils |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
211 class in this file. If the tracker interfaces module defines a |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
212 TemplatingUtils class then it is mixed in, overriding the methods |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
213 in the base class. |
|
2390
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
214 |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
215 *templates* |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
216 Access to all the tracker templates by name. |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
217 Used mainly in *use-macro* commands. |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
218 |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
219 *template* |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
220 Current rendering template. |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
221 |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
222 *true* |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
223 Logical True value. |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
224 |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
225 *false* |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
226 Logical False value. |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
227 |
|
2562
1f4791438b65
add 'i18n' to the rendering context dictionary description
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2561
diff
changeset
|
228 *i18n* |
|
1f4791438b65
add 'i18n' to the rendering context dictionary description
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2561
diff
changeset
|
229 Internationalization service, providing string translation |
|
1f4791438b65
add 'i18n' to the rendering context dictionary description
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2561
diff
changeset
|
230 methods ``gettext`` and ``ngettext``. |
|
1f4791438b65
add 'i18n' to the rendering context dictionary description
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2561
diff
changeset
|
231 |
|
2390
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
232 """ |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
233 # construct the TemplatingUtils class |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
234 utils = TemplatingUtils |
|
2637
11811b313459
The demo.py script works again using the new configuration system.
Richard Jones <richard@users.sourceforge.net>
parents:
2614
diff
changeset
|
235 if (hasattr(client.instance, 'interfaces') and |
|
11811b313459
The demo.py script works again using the new configuration system.
Richard Jones <richard@users.sourceforge.net>
parents:
2614
diff
changeset
|
236 hasattr(client.instance.interfaces, 'TemplatingUtils')): |
|
2390
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
237 class utils(client.instance.interfaces.TemplatingUtils, utils): |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
238 pass |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
239 |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
240 # 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
|
241 # compute form client |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
242 if template is None: |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
243 template = client.template |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
244 if classname is None: |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
245 classname = client.classname |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
246 if request is None: |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
247 request = HTMLRequest(client) |
|
1270
c3424abf7f77
added ability to implement new templating utility methods
Richard Jones <richard@users.sourceforge.net>
parents:
1263
diff
changeset
|
248 |
|
2390
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
249 c = { |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
250 'context': None, |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
251 'options': {}, |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
252 'nothing': None, |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
253 'request': request, |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
254 'db': HTMLDatabase(client), |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
255 'config': client.instance.config, |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
256 'tracker': client.instance, |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
257 'utils': utils(client), |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
258 'templates': Templates(client.instance.config.TEMPLATES), |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
259 'template': template, |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
260 'true': 1, |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
261 'false': 0, |
|
2538
09b0fc5b1716
make client.translator available to templates as 'i18n'
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2524
diff
changeset
|
262 'i18n': client.translator |
|
2390
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
263 } |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
264 # add in the item if there is one |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
265 if client.nodeid: |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
266 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
|
267 anonymous=1) |
|
2390
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
268 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
|
269 c['context'] = HTMLClass(client, classname, anonymous=1) |
|
2390
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
270 return c |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
271 |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
272 class RoundupPageTemplate(PageTemplate.PageTemplate): |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
273 '''A Roundup-specific PageTemplate. |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
274 |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
275 Interrogate the client to set up Roundup-specific template variables |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
276 to be available. See 'context' function for the list of variables. |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
277 |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
278 ''' |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
279 |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
280 # 06-jun-2004 [als] i am not sure if this method is used yet |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
281 def getContext(self, client, classname, request): |
|
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
282 return context(client, self, classname, request) |
|
1016
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
283 |
|
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
284 def render(self, client, classname, request, **options): |
|
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
285 """Render this Page Template""" |
|
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
286 |
|
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
287 if not self._v_cooked: |
|
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
288 self._cook() |
|
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
289 |
|
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
290 __traceback_supplement__ = (PageTemplate.PageTemplateTracebackSupplement, self) |
|
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
291 |
|
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
292 if self._v_errors: |
|
1078
344bad728d10
more tweakage of help display and style issues
Richard Jones <richard@users.sourceforge.net>
parents:
1074
diff
changeset
|
293 raise PageTemplate.PTRuntimeError, \ |
|
1151
7e0024954954
making it easier to add new actions, and more docco
Richard Jones <richard@users.sourceforge.net>
parents:
1144
diff
changeset
|
294 'Page Template %s has errors.'%self.id |
|
1016
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
295 |
|
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
296 # figure the context |
|
2390
0778421414c3
added module function context()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2389
diff
changeset
|
297 c = context(client, self, classname, request) |
|
1016
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
298 c.update({'options': options}) |
|
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
299 |
|
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
300 # and go |
|
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
301 output = StringIO.StringIO() |
|
2377
a53f87f2488a
StaticTranslationService moved here out of the code originating from Zope;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2347
diff
changeset
|
302 TALInterpreter.TALInterpreter(self._v_program, self.macros, |
|
1016
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
303 getEngine().getContext(c), output, tal=1, strictinsert=0)() |
|
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
304 return output.getvalue() |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
305 |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
306 def __repr__(self): |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
307 return '<Roundup PageTemplate %r>'%self.id |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
308 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
309 class HTMLDatabase: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
310 ''' Return HTMLClasses for valid class fetches |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
311 ''' |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
312 def __init__(self, client): |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
313 self._client = client |
|
1513
455f79a2981f
add access to real db through HTML db
Richard Jones <richard@users.sourceforge.net>
parents:
1510
diff
changeset
|
314 self._db = client.db |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
315 |
|
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
316 # we want config to be exposed |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
317 self.config = client.db.config |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
318 |
|
1447
6118d4498db3
added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents:
1441
diff
changeset
|
319 def __getitem__(self, item, desre=re.compile(r'(?P<cl>\w+)(?P<id>[-\d]+)')): |
|
6118d4498db3
added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents:
1441
diff
changeset
|
320 # 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
|
321 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
|
322 if m: |
|
2157
e976fa0640b3
db/userN wasn't returning HTMLUser
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
323 cl = m.group('cl') |
|
e976fa0640b3
db/userN wasn't returning HTMLUser
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
324 self._client.db.getclass(cl) |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
325 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
|
326 else: |
|
6118d4498db3
added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents:
1441
diff
changeset
|
327 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
|
328 return HTMLClass(self._client, item) |
|
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 __getattr__(self, attr): |
|
1030
f5216dbced55
translate bad class lookup error meaningfully
Richard Jones <richard@users.sourceforge.net>
parents:
1028
diff
changeset
|
331 try: |
|
1134
16874c9b86ad
generic item editing
Richard Jones <richard@users.sourceforge.net>
parents:
1133
diff
changeset
|
332 return self[attr] |
|
1030
f5216dbced55
translate bad class lookup error meaningfully
Richard Jones <richard@users.sourceforge.net>
parents:
1028
diff
changeset
|
333 except KeyError: |
|
f5216dbced55
translate bad class lookup error meaningfully
Richard Jones <richard@users.sourceforge.net>
parents:
1028
diff
changeset
|
334 raise AttributeError, attr |
|
1134
16874c9b86ad
generic item editing
Richard Jones <richard@users.sourceforge.net>
parents:
1133
diff
changeset
|
335 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
336 def classes(self): |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
337 l = self._client.db.classes.keys() |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
338 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
|
339 m = [] |
|
2031
bcb21e5722b8
fix permission handling around rego
Richard Jones <richard@users.sourceforge.net>
parents:
2025
diff
changeset
|
340 for item in l: |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
341 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
|
342 return m |
|
1104
d759c3cb1f06
Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
343 |
|
2244
ac4f295499a4
fixed journal marshalling in RDBMS backends [SF#943627]
Richard Jones <richard@users.sourceforge.net>
parents:
2207
diff
changeset
|
344 def lookupIds(db, prop, ids, fail_ok=0, num_re=re.compile('^-?\d+$')): |
|
2049
5a5f66e6b0e1
forward-port of fix from maint-0-6
Richard Jones <richard@users.sourceforge.net>
parents:
2037
diff
changeset
|
345 ''' "fail_ok" should be specified if we wish to pass through bad values |
|
5a5f66e6b0e1
forward-port of fix from maint-0-6
Richard Jones <richard@users.sourceforge.net>
parents:
2037
diff
changeset
|
346 (most likely form values that we wish to represent back to the user) |
|
5a5f66e6b0e1
forward-port of fix from maint-0-6
Richard Jones <richard@users.sourceforge.net>
parents:
2037
diff
changeset
|
347 ''' |
|
1104
d759c3cb1f06
Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
348 cl = db.getclass(prop.classname) |
|
d759c3cb1f06
Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
349 l = [] |
|
d759c3cb1f06
Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
350 for entry in ids: |
|
d759c3cb1f06
Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
351 if num_re.match(entry): |
|
d759c3cb1f06
Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
352 l.append(entry) |
|
d759c3cb1f06
Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
353 else: |
|
1213
3a5e05edcd87
added doc for METAL
Richard Jones <richard@users.sourceforge.net>
parents:
1204
diff
changeset
|
354 try: |
|
3a5e05edcd87
added doc for METAL
Richard Jones <richard@users.sourceforge.net>
parents:
1204
diff
changeset
|
355 l.append(cl.lookup(entry)) |
|
2049
5a5f66e6b0e1
forward-port of fix from maint-0-6
Richard Jones <richard@users.sourceforge.net>
parents:
2037
diff
changeset
|
356 except (TypeError, KeyError): |
|
5a5f66e6b0e1
forward-port of fix from maint-0-6
Richard Jones <richard@users.sourceforge.net>
parents:
2037
diff
changeset
|
357 if fail_ok: |
|
5a5f66e6b0e1
forward-port of fix from maint-0-6
Richard Jones <richard@users.sourceforge.net>
parents:
2037
diff
changeset
|
358 # pass through the bad value |
|
5a5f66e6b0e1
forward-port of fix from maint-0-6
Richard Jones <richard@users.sourceforge.net>
parents:
2037
diff
changeset
|
359 l.append(entry) |
|
1104
d759c3cb1f06
Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
360 return l |
|
d759c3cb1f06
Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
361 |
|
2244
ac4f295499a4
fixed journal marshalling in RDBMS backends [SF#943627]
Richard Jones <richard@users.sourceforge.net>
parents:
2207
diff
changeset
|
362 def lookupKeys(linkcl, key, ids, num_re=re.compile('^-?\d+$')): |
|
2083
a94eacad51c8
handle bad multilink input at item creation time better [SF#917834]
Richard Jones <richard@users.sourceforge.net>
parents:
2056
diff
changeset
|
363 ''' Look up the "key" values for "ids" list - though some may already |
|
a94eacad51c8
handle bad multilink input at item creation time better [SF#917834]
Richard Jones <richard@users.sourceforge.net>
parents:
2056
diff
changeset
|
364 be key values, not ids. |
|
a94eacad51c8
handle bad multilink input at item creation time better [SF#917834]
Richard Jones <richard@users.sourceforge.net>
parents:
2056
diff
changeset
|
365 ''' |
|
a94eacad51c8
handle bad multilink input at item creation time better [SF#917834]
Richard Jones <richard@users.sourceforge.net>
parents:
2056
diff
changeset
|
366 l = [] |
|
a94eacad51c8
handle bad multilink input at item creation time better [SF#917834]
Richard Jones <richard@users.sourceforge.net>
parents:
2056
diff
changeset
|
367 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
|
368 if num_re.match(entry): |
|
2100
62ed6505cbec
MySQL migration of old backend database to new, typed database complete.
Richard Jones <richard@users.sourceforge.net>
parents:
2083
diff
changeset
|
369 l.append(linkcl.get(entry, key)) |
|
2083
a94eacad51c8
handle bad multilink input at item creation time better [SF#917834]
Richard Jones <richard@users.sourceforge.net>
parents:
2056
diff
changeset
|
370 else: |
|
a94eacad51c8
handle bad multilink input at item creation time better [SF#917834]
Richard Jones <richard@users.sourceforge.net>
parents:
2056
diff
changeset
|
371 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
|
372 return l |
|
a94eacad51c8
handle bad multilink input at item creation time better [SF#917834]
Richard Jones <richard@users.sourceforge.net>
parents:
2056
diff
changeset
|
373 |
|
1956
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
374 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
|
375 """Generate an 'input' (html4) element with given attributes""" |
|
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
376 return '<input %s>'%' '.join(['%s="%s"'%item for item in attrs.items()]) |
|
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
377 |
|
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
378 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
|
379 """Generate an 'input' (xhtml) element with given attributes""" |
|
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
380 return '<input %s/>'%' '.join(['%s="%s"'%item for item in attrs.items()]) |
|
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
381 |
|
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
382 class HTMLInputMixin: |
|
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
383 ''' requires a _client property ''' |
|
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
384 def __init__(self): |
|
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
385 html_version = 'html4' |
|
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
386 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
|
387 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
|
388 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
|
389 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
|
390 else: |
|
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
391 self.input = input_html4 |
|
2396
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
392 # 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
|
393 # 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
|
394 self._context = None |
|
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
395 |
|
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
396 def gettext(self, msgid): |
|
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
397 """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
|
398 if self._context is None: |
|
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
399 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
|
400 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
|
401 msgid=msgid, context=self._context) |
|
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
402 |
|
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
403 _ = gettext |
|
1956
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
404 |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
405 class HTMLPermissions: |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
406 |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
407 def view_check(self): |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
408 ''' Raise the Unauthorised exception if the user's not permitted to |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
409 view this class. |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
410 ''' |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
411 if not self.is_view_ok(): |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
412 raise Unauthorised("view", self._classname, |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
413 translator=self._client.translator) |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
414 |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
415 def edit_check(self): |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
416 ''' Raise the Unauthorised exception if the user's not permitted to |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
417 edit items of this class. |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
418 ''' |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
419 if not self.is_edit_ok(): |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
420 raise Unauthorised("edit", self._classname, |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
421 translator=self._client.translator) |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
422 |
|
1956
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
423 class HTMLClass(HTMLInputMixin, HTMLPermissions): |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
424 ''' Accesses through a class (either through *class* or *db.<classname>*) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
425 ''' |
|
1447
6118d4498db3
added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents:
1441
diff
changeset
|
426 def __init__(self, client, classname, anonymous=0): |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
427 self._client = client |
|
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
428 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
|
429 self._anonymous = anonymous |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
430 |
|
1136
7e193bbda38e
added generic item editing
Richard Jones <richard@users.sourceforge.net>
parents:
1134
diff
changeset
|
431 # 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
|
432 # consistent API for extending Class/Item |
|
7e193bbda38e
added generic item editing
Richard Jones <richard@users.sourceforge.net>
parents:
1134
diff
changeset
|
433 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
|
434 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
|
435 self._props = self._klass.getprops() |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
436 |
|
1956
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
437 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
|
438 |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
439 def is_edit_ok(self): |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
440 ''' Is the user allowed to Create the current class? |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
441 ''' |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
442 return self._db.security.hasPermission('Create', self._client.userid, |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
443 self._classname) |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
444 |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
445 def is_view_ok(self): |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
446 ''' Is the user allowed to View the current class? |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
447 ''' |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
448 if self._db.security.hasPermission('View', self._client.userid, |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
449 self._classname): |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
450 return 1 |
|
2651
17bab083c8a0
Couple of fixes - make the interface just be is_edit_ok...
Richard Jones <richard@users.sourceforge.net>
parents:
2649
diff
changeset
|
451 return self.is_edit_ok() |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
452 |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
453 def is_only_view_ok(self): |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
454 ''' Is the user only allowed to View (ie. not Create) the current class? |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
455 ''' |
|
2651
17bab083c8a0
Couple of fixes - make the interface just be is_edit_ok...
Richard Jones <richard@users.sourceforge.net>
parents:
2649
diff
changeset
|
456 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
|
457 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
458 def __repr__(self): |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
459 return '<HTMLClass(0x%x) %s>'%(id(self), self.classname) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
460 |
| 1002 | 461 def __getitem__(self, item): |
|
1067
73e7bbb8a1fa
allow hasPermission checks on normal user class iterations
Richard Jones <richard@users.sourceforge.net>
parents:
1065
diff
changeset
|
462 ''' return an HTMLProperty instance |
|
73e7bbb8a1fa
allow hasPermission checks on normal user class iterations
Richard Jones <richard@users.sourceforge.net>
parents:
1065
diff
changeset
|
463 ''' |
|
1103
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1099
diff
changeset
|
464 #print 'HTMLClass.getitem', (self, item) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
465 |
|
1073
cf30c6cdca02
More documentation.
Richard Jones <richard@users.sourceforge.net>
parents:
1068
diff
changeset
|
466 # we don't exist |
|
cf30c6cdca02
More documentation.
Richard Jones <richard@users.sourceforge.net>
parents:
1068
diff
changeset
|
467 if item == 'id': |
|
cf30c6cdca02
More documentation.
Richard Jones <richard@users.sourceforge.net>
parents:
1068
diff
changeset
|
468 return None |
|
cf30c6cdca02
More documentation.
Richard Jones <richard@users.sourceforge.net>
parents:
1068
diff
changeset
|
469 |
|
cf30c6cdca02
More documentation.
Richard Jones <richard@users.sourceforge.net>
parents:
1068
diff
changeset
|
470 # get the property |
|
2056
ba1d54edc53f
nicer invalid property error in HTML templating
Richard Jones <richard@users.sourceforge.net>
parents:
2049
diff
changeset
|
471 try: |
|
ba1d54edc53f
nicer invalid property error in HTML templating
Richard Jones <richard@users.sourceforge.net>
parents:
2049
diff
changeset
|
472 prop = self._props[item] |
|
ba1d54edc53f
nicer invalid property error in HTML templating
Richard Jones <richard@users.sourceforge.net>
parents:
2049
diff
changeset
|
473 except KeyError: |
|
ba1d54edc53f
nicer invalid property error in HTML templating
Richard Jones <richard@users.sourceforge.net>
parents:
2049
diff
changeset
|
474 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
|
475 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
476 # look up the correct HTMLProperty class |
|
1104
d759c3cb1f06
Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
477 form = self._client.form |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
478 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
|
479 if not isinstance(prop, klass): |
|
d759c3cb1f06
Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
480 continue |
|
d759c3cb1f06
Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
481 if form.has_key(item): |
|
d759c3cb1f06
Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
482 if isinstance(prop, hyperdb.Multilink): |
|
d759c3cb1f06
Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
483 value = lookupIds(self._db, prop, |
|
2106
12a902ea1dcd
sigh.. not python2.3 yet
Richard Jones <richard@users.sourceforge.net>
parents:
2100
diff
changeset
|
484 handleListCGIValue(form[item]), fail_ok=1) |
|
1104
d759c3cb1f06
Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
485 elif isinstance(prop, hyperdb.Link): |
|
d759c3cb1f06
Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
486 value = form[item].value.strip() |
|
d759c3cb1f06
Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
487 if value: |
|
2049
5a5f66e6b0e1
forward-port of fix from maint-0-6
Richard Jones <richard@users.sourceforge.net>
parents:
2037
diff
changeset
|
488 value = lookupIds(self._db, prop, [value], |
|
2106
12a902ea1dcd
sigh.. not python2.3 yet
Richard Jones <richard@users.sourceforge.net>
parents:
2100
diff
changeset
|
489 fail_ok=1)[0] |
|
1104
d759c3cb1f06
Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
490 else: |
|
d759c3cb1f06
Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
491 value = None |
|
d759c3cb1f06
Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
492 else: |
|
d759c3cb1f06
Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
493 value = form[item].value.strip() or None |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
494 else: |
|
1104
d759c3cb1f06
Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
495 if isinstance(prop, hyperdb.Multilink): |
|
d759c3cb1f06
Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
496 value = [] |
|
d759c3cb1f06
Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
497 else: |
|
d759c3cb1f06
Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
498 value = None |
|
1447
6118d4498db3
added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents:
1441
diff
changeset
|
499 return htmlklass(self._client, self._classname, '', prop, item, |
|
6118d4498db3
added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents:
1441
diff
changeset
|
500 value, self._anonymous) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
501 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
502 # no good |
| 1002 | 503 raise KeyError, item |
| 504 | |
| 505 def __getattr__(self, attr): | |
| 506 ''' convenience access ''' | |
| 507 try: | |
| 508 return self[attr] | |
| 509 except KeyError: | |
| 510 raise AttributeError, attr | |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
511 |
|
1743
f166cd4fd392
add action attribute to issue.item form action tag
Richard Jones <richard@users.sourceforge.net>
parents:
1739
diff
changeset
|
512 def designator(self): |
|
f166cd4fd392
add action attribute to issue.item form action tag
Richard Jones <richard@users.sourceforge.net>
parents:
1739
diff
changeset
|
513 ''' Return this class' designator (classname) ''' |
|
f166cd4fd392
add action attribute to issue.item form action tag
Richard Jones <richard@users.sourceforge.net>
parents:
1739
diff
changeset
|
514 return self._classname |
|
f166cd4fd392
add action attribute to issue.item form action tag
Richard Jones <richard@users.sourceforge.net>
parents:
1739
diff
changeset
|
515 |
|
2244
ac4f295499a4
fixed journal marshalling in RDBMS backends [SF#943627]
Richard Jones <richard@users.sourceforge.net>
parents:
2207
diff
changeset
|
516 def getItem(self, itemid, num_re=re.compile('^-?\d+$')): |
|
1200
0a7bd082b94a
usability improvements in API
Richard Jones <richard@users.sourceforge.net>
parents:
1183
diff
changeset
|
517 ''' Get an item of this class by its item id. |
|
0a7bd082b94a
usability improvements in API
Richard Jones <richard@users.sourceforge.net>
parents:
1183
diff
changeset
|
518 ''' |
|
0a7bd082b94a
usability improvements in API
Richard Jones <richard@users.sourceforge.net>
parents:
1183
diff
changeset
|
519 # 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
|
520 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
|
521 itemid = self._klass.lookup(itemid) |
|
0a7bd082b94a
usability improvements in API
Richard Jones <richard@users.sourceforge.net>
parents:
1183
diff
changeset
|
522 |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
523 return HTMLItem(self._client, self.classname, itemid) |
|
1200
0a7bd082b94a
usability improvements in API
Richard Jones <richard@users.sourceforge.net>
parents:
1183
diff
changeset
|
524 |
|
1633
ac5f7e5a11e5
sort HTMLClass.properties results by name (feature [SF#724738])
Richard Jones <richard@users.sourceforge.net>
parents:
1631
diff
changeset
|
525 def properties(self, sort=1): |
|
1123
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
526 ''' Return HTMLProperty for all of this class' properties. |
|
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 l = [] |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
529 for name, prop in self._props.items(): |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
530 for klass, htmlklass in propclasses: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
531 if isinstance(prop, hyperdb.Multilink): |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
532 value = [] |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
533 else: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
534 value = None |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
535 if isinstance(prop, klass): |
|
1450
7a9db3f9022a
... and a classname
Richard Jones <richard@users.sourceforge.net>
parents:
1449
diff
changeset
|
536 l.append(htmlklass(self._client, self._classname, '', |
|
7a9db3f9022a
... and a classname
Richard Jones <richard@users.sourceforge.net>
parents:
1449
diff
changeset
|
537 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
|
538 if sort: |
|
ac5f7e5a11e5
sort HTMLClass.properties results by name (feature [SF#724738])
Richard Jones <richard@users.sourceforge.net>
parents:
1631
diff
changeset
|
539 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
|
540 return l |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
541 |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
542 def list(self, sort_on=None): |
|
1123
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
543 ''' List all items in this class. |
|
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
544 ''' |
|
1155
5cf0a6b6e787
*cough* sort list results *cough*
Richard Jones <richard@users.sourceforge.net>
parents:
1151
diff
changeset
|
545 # get the list and sort it nicely |
|
5cf0a6b6e787
*cough* sort list results *cough*
Richard Jones <richard@users.sourceforge.net>
parents:
1151
diff
changeset
|
546 l = self._klass.list() |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
547 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
|
548 l.sort(sortfunc) |
|
5cf0a6b6e787
*cough* sort list results *cough*
Richard Jones <richard@users.sourceforge.net>
parents:
1151
diff
changeset
|
549 |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
550 l = [HTMLItem(self._client, self.classname, x) for x in l] |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
551 return l |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
552 |
|
1041
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
553 def csv(self): |
|
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
554 ''' Return the items of this class as a chunk of CSV text. |
|
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
555 ''' |
|
1767
fdaa0b751355
python2.3 CSV support, also missing thankyou in index.txt :)
Richard Jones <richard@users.sourceforge.net>
parents:
1743
diff
changeset
|
556 if rcsv.error: |
|
fdaa0b751355
python2.3 CSV support, also missing thankyou in index.txt :)
Richard Jones <richard@users.sourceforge.net>
parents:
1743
diff
changeset
|
557 return rcsv.error |
|
1041
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
558 |
|
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
559 props = self.propnames() |
|
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
560 s = StringIO.StringIO() |
|
1767
fdaa0b751355
python2.3 CSV support, also missing thankyou in index.txt :)
Richard Jones <richard@users.sourceforge.net>
parents:
1743
diff
changeset
|
561 writer = rcsv.writer(s, rcsv.comma_separated) |
|
fdaa0b751355
python2.3 CSV support, also missing thankyou in index.txt :)
Richard Jones <richard@users.sourceforge.net>
parents:
1743
diff
changeset
|
562 writer.writerow(props) |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
563 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
|
564 l = [] |
|
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
565 for name in props: |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
566 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
|
567 if value is None: |
|
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
568 l.append('') |
|
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
569 elif isinstance(value, type([])): |
|
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
570 l.append(':'.join(map(str, value))) |
|
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
571 else: |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
572 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
|
573 writer.writerow(l) |
|
1041
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
574 return s.getvalue() |
|
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
575 |
|
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
576 def propnames(self): |
|
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
577 ''' Return the list of the names of the properties of this class. |
|
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
578 ''' |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
579 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
|
580 idlessprops.sort() |
|
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
581 return ['id'] + idlessprops |
|
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
582 |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
583 def filter(self, request=None, filterspec={}, sort=(None,None), |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
584 group=(None,None)): |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
585 ''' Return a list of items from this class, filtered and sorted |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
586 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
|
587 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
588 "request" takes precedence over the other three arguments. |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
589 ''' |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
590 if request is not None: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
591 filterspec = request.filterspec |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
592 sort = request.sort |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
593 group = request.group |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
594 l = [HTMLItem(self._client, self.classname, x) |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
595 for x in self._klass.filter(None, filterspec, sort, group)] |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
596 return l |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
597 |
|
2458
c18a7d4259e3
translate labels hardcoded in HTMLClass and HTMLItem
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2411
diff
changeset
|
598 def classhelp(self, properties=None, label=''"(list)", width='500', |
|
2761
10a49678ebf2
allow listing popup to be used in query forms (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
2673
diff
changeset
|
599 height='400', property='', form='itemSynopsis'): |
|
10a49678ebf2
allow listing popup to be used in query forms (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
2673
diff
changeset
|
600 '''Pop up a javascript window with class help |
|
10a49678ebf2
allow listing popup to be used in query forms (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
2673
diff
changeset
|
601 |
|
10a49678ebf2
allow listing popup to be used in query forms (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
2673
diff
changeset
|
602 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
|
603 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
|
604 "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
|
605 (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
|
606 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
|
607 activity). |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
608 |
|
2761
10a49678ebf2
allow listing popup to be used in query forms (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
2673
diff
changeset
|
609 You may optionally override the label displayed, the width and |
|
10a49678ebf2
allow listing popup to be used in query forms (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
2673
diff
changeset
|
610 height. The popup window will be resizable and scrollable. |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
611 |
|
2761
10a49678ebf2
allow listing popup to be used in query forms (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
2673
diff
changeset
|
612 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
|
613 javascript help_window function. |
|
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
|
614 |
|
2761
10a49678ebf2
allow listing popup to be used in query forms (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
2673
diff
changeset
|
615 If the "form" 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
|
616 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
|
617 the "property" belongs to. |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
618 ''' |
|
1113
a95428868bf4
Added the missing keyword/topic interface to classic template (blush)
Richard Jones <richard@users.sourceforge.net>
parents:
1104
diff
changeset
|
619 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
|
620 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
|
621 properties.sort() |
|
a95428868bf4
Added the missing keyword/topic interface to classic template (blush)
Richard Jones <richard@users.sourceforge.net>
parents:
1104
diff
changeset
|
622 properties = ','.join(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
|
623 if property: |
|
1853
389c4d44c73c
Replace '&' with '&' in the URLs generated by classhelp(), to validate.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1824
diff
changeset
|
624 property = '&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
|
625 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
|
626 form = '&form=%s'%form |
|
1739
c3f0b552a55a
batch the (list) listings at 500 entries per page [SF#759906]
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
627 return '<a class="classhelp" href="javascript:help_window(\'%s?'\ |
|
2761
10a49678ebf2
allow listing popup to be used in query forms (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
2673
diff
changeset
|
628 '@startwith=0&@template=help&properties=%s%s%s\', \'%s\', \ |
|
10a49678ebf2
allow listing popup to be used in query forms (thanks Marcus Priesch)
Richard Jones <richard@users.sourceforge.net>
parents:
2673
diff
changeset
|
629 \'%s\')">%s</a>'%(self.classname, properties, property, form, width, |
|
2458
c18a7d4259e3
translate labels hardcoded in HTMLClass and HTMLItem
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2411
diff
changeset
|
630 height, self._(label)) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
631 |
|
2458
c18a7d4259e3
translate labels hardcoded in HTMLClass and HTMLItem
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2411
diff
changeset
|
632 def submit(self, label=''"Submit New Entry"): |
|
999
8d54c0f3198e
Fixed history and its nihilism. Added convenience method for submit buttons
Richard Jones <richard@users.sourceforge.net>
parents:
985
diff
changeset
|
633 ''' Generate a submit button (and action hidden element) |
|
8d54c0f3198e
Fixed history and its nihilism. Added convenience method for submit buttons
Richard Jones <richard@users.sourceforge.net>
parents:
985
diff
changeset
|
634 ''' |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
635 self.view_check() |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
636 if self.is_edit_ok(): |
|
2458
c18a7d4259e3
translate labels hardcoded in HTMLClass and HTMLItem
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2411
diff
changeset
|
637 return self.input(type="hidden", name="@action", value="new") + \ |
|
c18a7d4259e3
translate labels hardcoded in HTMLClass and HTMLItem
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2411
diff
changeset
|
638 '\n' + \ |
|
c18a7d4259e3
translate labels hardcoded in HTMLClass and HTMLItem
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2411
diff
changeset
|
639 self.input(type="submit", name="submit", value=self._(label)) |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
640 return '' |
|
999
8d54c0f3198e
Fixed history and its nihilism. Added convenience method for submit buttons
Richard Jones <richard@users.sourceforge.net>
parents:
985
diff
changeset
|
641 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
642 def history(self): |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
643 self.view_check() |
|
2466
7b248ea0a2e5
add translation to Unauthorised exception; mark missed text for translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2458
diff
changeset
|
644 return self._('New node - no history') |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
645 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
646 def renderWith(self, name, **kwargs): |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
647 ''' Render this class with the given template. |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
648 ''' |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
649 # 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
|
650 req = HTMLRequest(self._client) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
651 req.classname = self.classname |
|
1016
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
652 req.update(kwargs) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
653 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
654 # new template, using the specified classname and request |
|
1204
b862bbf2067a
Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents:
1202
diff
changeset
|
655 pt = Templates(self._db.config.TEMPLATES).get(self.classname, name) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
656 |
|
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
|
657 # use our fabricated request |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
658 args = { |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
659 'ok_message': self._client.ok_message, |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
660 'error_message': self._client.error_message |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
661 } |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
662 return pt.render(self._client, self.classname, req, **args) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
663 |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
664 class _HTMLItem(HTMLInputMixin, HTMLPermissions): |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
665 ''' Accesses through an *item* |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
666 ''' |
|
1447
6118d4498db3
added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents:
1441
diff
changeset
|
667 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
|
668 self._client = client |
|
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
669 self._db = client.db |
|
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
670 self._classname = classname |
|
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
671 self._nodeid = nodeid |
|
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
672 self._klass = self._db.getclass(classname) |
|
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
673 self._props = self._klass.getprops() |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
674 |
|
1447
6118d4498db3
added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents:
1441
diff
changeset
|
675 # 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
|
676 self._anonymous = anonymous |
|
6118d4498db3
added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents:
1441
diff
changeset
|
677 |
|
1956
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
678 HTMLInputMixin.__init__(self) |
|
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
679 |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
680 def is_edit_ok(self): |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
681 ''' Is the user allowed to Edit the current class? |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
682 ''' |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
683 return self._db.security.hasPermission('Edit', self._client.userid, |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
684 self._classname, itemid=self._nodeid) |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
685 |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
686 def is_view_ok(self): |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
687 ''' Is the user allowed to View the current class? |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
688 ''' |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
689 if self._db.security.hasPermission('View', self._client.userid, |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
690 self._classname, itemid=self._nodeid): |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
691 return 1 |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
692 return self.is_edit_ok() |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
693 |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
694 def is_only_view_ok(self): |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
695 ''' Is the user only allowed to View (ie. not Edit) the current class? |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
696 ''' |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
697 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
|
698 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
699 def __repr__(self): |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
700 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
|
701 self._nodeid) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
702 |
| 1002 | 703 def __getitem__(self, item): |
|
1067
73e7bbb8a1fa
allow hasPermission checks on normal user class iterations
Richard Jones <richard@users.sourceforge.net>
parents:
1065
diff
changeset
|
704 ''' return an HTMLProperty instance |
|
73e7bbb8a1fa
allow hasPermission checks on normal user class iterations
Richard Jones <richard@users.sourceforge.net>
parents:
1065
diff
changeset
|
705 ''' |
|
1170
af104fa52746
Added some words to the installation doc about choosing backends.
Richard Jones <richard@users.sourceforge.net>
parents:
1169
diff
changeset
|
706 #print 'HTMLItem.getitem', (self, item) |
| 1002 | 707 if item == 'id': |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
708 return self._nodeid |
|
1073
cf30c6cdca02
More documentation.
Richard Jones <richard@users.sourceforge.net>
parents:
1068
diff
changeset
|
709 |
|
cf30c6cdca02
More documentation.
Richard Jones <richard@users.sourceforge.net>
parents:
1068
diff
changeset
|
710 # get the property |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
711 prop = self._props[item] |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
712 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
713 # 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
|
714 value = None |
|
6118d4498db3
added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents:
1441
diff
changeset
|
715 if int(self._nodeid) > 0: |
|
6118d4498db3
added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents:
1441
diff
changeset
|
716 value = self._klass.get(self._nodeid, item, None) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
717 if value is None: |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
718 if isinstance(self._props[item], hyperdb.Multilink): |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
719 value = [] |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
720 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
721 # look up the correct HTMLProperty class |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
722 for klass, htmlklass in propclasses: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
723 if isinstance(prop, klass): |
|
1447
6118d4498db3
added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents:
1441
diff
changeset
|
724 return htmlklass(self._client, self._classname, |
|
6118d4498db3
added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents:
1441
diff
changeset
|
725 self._nodeid, prop, item, value, self._anonymous) |
| 1002 | 726 |
|
1364
1d1ee96e8956
applied patch for nicer history display (feature [SF#638280])
Richard Jones <richard@users.sourceforge.net>
parents:
1357
diff
changeset
|
727 raise KeyError, item |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
728 |
| 1002 | 729 def __getattr__(self, attr): |
| 730 ''' convenience access to properties ''' | |
| 731 try: | |
| 732 return self[attr] | |
| 733 except KeyError: | |
| 734 raise AttributeError, attr | |
|
1743
f166cd4fd392
add action attribute to issue.item form action tag
Richard Jones <richard@users.sourceforge.net>
parents:
1739
diff
changeset
|
735 |
|
f166cd4fd392
add action attribute to issue.item form action tag
Richard Jones <richard@users.sourceforge.net>
parents:
1739
diff
changeset
|
736 def designator(self): |
|
2014
366d3bbce982
Simple version of collision detection...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
2010
diff
changeset
|
737 """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
|
738 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
|
739 |
|
ee3cf6a44f29
queries on a per-user basis, and public queries [SF#891798] :)
Richard Jones <richard@users.sourceforge.net>
parents:
2118
diff
changeset
|
740 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
|
741 """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
|
742 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
|
743 |
|
2458
c18a7d4259e3
translate labels hardcoded in HTMLClass and HTMLItem
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2411
diff
changeset
|
744 def submit(self, label=''"Submit Changes"): |
|
2014
366d3bbce982
Simple version of collision detection...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
2010
diff
changeset
|
745 """Generate a submit button. |
|
366d3bbce982
Simple version of collision detection...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
2010
diff
changeset
|
746 |
|
366d3bbce982
Simple version of collision detection...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
2010
diff
changeset
|
747 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
|
748 """ |
|
2262
a13ec40cf8f5
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
2244
diff
changeset
|
749 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
|
750 value=self.activity.local(0)) + '\n' + \ |
|
2262
a13ec40cf8f5
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
2244
diff
changeset
|
751 self.input(type="hidden", name="@action", value="edit") + '\n' + \ |
|
2458
c18a7d4259e3
translate labels hardcoded in HTMLClass and HTMLItem
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2411
diff
changeset
|
752 self.input(type="submit", name="submit", value=self._(label)) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
753 |
|
1103
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1099
diff
changeset
|
754 def journal(self, direction='descending'): |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1099
diff
changeset
|
755 ''' Return a list of HTMLJournalEntry instances. |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1099
diff
changeset
|
756 ''' |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1099
diff
changeset
|
757 # XXX do this |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1099
diff
changeset
|
758 return [] |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1099
diff
changeset
|
759 |
|
2244
ac4f295499a4
fixed journal marshalling in RDBMS backends [SF#943627]
Richard Jones <richard@users.sourceforge.net>
parents:
2207
diff
changeset
|
760 def history(self, direction='descending', dre=re.compile('^\d+$')): |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
761 self.view_check() |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
762 |
|
2614
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
763 # 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
|
764 current = {} |
|
2614
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
765 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
|
766 prop = self[prop_n] |
|
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
767 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
|
768 continue |
|
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
769 current[prop_n] = prop.plain() |
|
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
770 # make link if hrefable |
|
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
771 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
|
772 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
|
773 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
|
774 try: |
|
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
775 template = find_template(self._db.config.TEMPLATES, |
|
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
776 classname, 'item') |
|
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
777 if template[1].startswith('_generic'): |
|
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
778 raise NoTemplate, 'not really...' |
|
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
779 except NoTemplate: |
|
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
780 pass |
|
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
781 else: |
|
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
782 id = self._klass.get(self._nodeid, prop_n, None) |
|
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
783 current[prop_n] = '<a href="%s%s">%s</a>'%( |
|
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
784 classname, id, current[prop_n]) |
|
2673
63f8b13ba85f
fix sre_constants.error:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2668
diff
changeset
|
785 |
|
2614
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
786 # get the journal, sort and reverse |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
787 history = self._klass.history(self._nodeid) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
788 history.sort() |
|
2614
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
789 history.reverse() |
|
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
790 |
|
1402
27586da5557c
Added users' timezone support
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1394
diff
changeset
|
791 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
|
792 l = [] |
|
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
793 comments = {} |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
794 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
|
795 date_s = str(evt_date.local(timezone)).replace("."," ") |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
796 arg_s = '' |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
797 if action == 'link' and type(args) == type(()): |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
798 if len(args) == 3: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
799 linkcl, linkid, key = args |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
800 arg_s += '<a href="%s%s">%s%s %s</a>'%(linkcl, linkid, |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
801 linkcl, linkid, key) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
802 else: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
803 arg_s = str(args) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
804 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
805 elif action == 'unlink' and type(args) == type(()): |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
806 if len(args) == 3: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
807 linkcl, linkid, key = args |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
808 arg_s += '<a href="%s%s">%s%s %s</a>'%(linkcl, linkid, |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
809 linkcl, linkid, key) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
810 else: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
811 arg_s = str(args) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
812 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
813 elif type(args) == type({}): |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
814 cell = [] |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
815 for k in args.keys(): |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
816 # try to get the relevant property and treat it |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
817 # specially |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
818 try: |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
819 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
|
820 except KeyError: |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
821 prop = None |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
822 if prop is None: |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
823 # property no longer exists |
|
2396
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
824 comments['no_exist'] = self._( |
|
2327
36ae1b14aaab
remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2324
diff
changeset
|
825 "<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
|
826 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
|
827 % (self._(k), str(args[k]))) |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
828 continue |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
829 |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
830 if args[k] and (isinstance(prop, hyperdb.Multilink) or |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
831 isinstance(prop, hyperdb.Link)): |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
832 # figure what the link class is |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
833 classname = prop.classname |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
834 try: |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
835 linkcl = self._db.getclass(classname) |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
836 except KeyError: |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
837 labelprop = None |
|
2396
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
838 comments[classname] = self._( |
|
2327
36ae1b14aaab
remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2324
diff
changeset
|
839 "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
|
840 ) % locals() |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
841 labelprop = linkcl.labelprop(1) |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
842 try: |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
843 template = find_template(self._db.config.TEMPLATES, |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
844 classname, 'item') |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
845 if template[1].startswith('_generic'): |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
846 raise NoTemplate, 'not really...' |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
847 hrefable = 1 |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
848 except NoTemplate: |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
849 hrefable = 0 |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
850 |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
851 if isinstance(prop, hyperdb.Multilink) and args[k]: |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
852 ml = [] |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
853 for linkid in args[k]: |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
854 if isinstance(linkid, type(())): |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
855 sublabel = linkid[0] + ' ' |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
856 linkids = linkid[1] |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
857 else: |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
858 sublabel = '' |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
859 linkids = [linkid] |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
860 subml = [] |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
861 for linkid in linkids: |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
862 label = classname + linkid |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
863 # if we have a label property, try to use it |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
864 # TODO: test for node existence even when |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
865 # there's no labelprop! |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
866 try: |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
867 if labelprop is not None and \ |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
868 labelprop != 'id': |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
869 label = linkcl.get(linkid, labelprop) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
870 except IndexError: |
|
2396
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
871 comments['no_link'] = self._( |
|
2327
36ae1b14aaab
remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2324
diff
changeset
|
872 "<strike>The linked node" |
|
36ae1b14aaab
remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2324
diff
changeset
|
873 " no longer exists</strike>") |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
874 subml.append('<strike>%s</strike>'%label) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
875 else: |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
876 if hrefable: |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
877 subml.append('<a href="%s%s">%s</a>'%( |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
878 classname, linkid, label)) |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
879 else: |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
880 subml.append(label) |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
881 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
|
882 cell.append('%s:\n %s'%(self._(k), ', '.join(ml))) |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
883 elif isinstance(prop, hyperdb.Link) and args[k]: |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
884 label = classname + args[k] |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
885 # if we have a label property, try to use it |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
886 # TODO: test for node existence even when |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
887 # there's no labelprop! |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
888 if labelprop is not None and labelprop != 'id': |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
889 try: |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
890 label = linkcl.get(args[k], labelprop) |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
891 except IndexError: |
|
2396
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
892 comments['no_link'] = self._( |
|
2327
36ae1b14aaab
remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2324
diff
changeset
|
893 "<strike>The linked node" |
|
36ae1b14aaab
remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2324
diff
changeset
|
894 " no longer exists</strike>") |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
895 cell.append(' <strike>%s</strike>,\n'%label) |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
896 # "flag" this is done .... euwww |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
897 label = None |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
898 if label is not None: |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
899 if hrefable: |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
900 old = '<a href="%s%s">%s</a>'%(classname, args[k], label) |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
901 else: |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
902 old = label; |
|
2547
9b9c8fb52732
translate action names and property names in the history list
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2538
diff
changeset
|
903 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
|
904 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
|
905 cell[-1] += ' -> %s'%current[k] |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
906 current[k] = old |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
907 |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
908 elif isinstance(prop, hyperdb.Date) and args[k]: |
|
2524
736115d374f2
use client instance to translate Date and Interval objects
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2520
diff
changeset
|
909 d = date.Date(args[k], |
|
736115d374f2
use client instance to translate Date and Interval objects
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2520
diff
changeset
|
910 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
|
911 cell.append('%s: %s'%(self._(k), str(d))) |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
912 if current.has_key(k): |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
913 cell[-1] += ' -> %s' % current[k] |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
914 current[k] = str(d) |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
915 |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
916 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
|
917 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
|
918 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
|
919 cell.append('%s: %s'%(self._(k), val)) |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
920 if current.has_key(k): |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
921 cell[-1] += ' -> %s'%current[k] |
|
2170
0def552122af
handle Boolean values in history HTML display
Richard Jones <richard@users.sourceforge.net>
parents:
2157
diff
changeset
|
922 current[k] = val |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
923 |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
924 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
|
925 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
|
926 cell.append('%s: %s'%(self._(k), val)) |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
927 if current.has_key(k): |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
928 cell[-1] += ' -> %s'%current[k] |
|
2170
0def552122af
handle Boolean values in history HTML display
Richard Jones <richard@users.sourceforge.net>
parents:
2157
diff
changeset
|
929 current[k] = val |
|
0def552122af
handle Boolean values in history HTML display
Richard Jones <richard@users.sourceforge.net>
parents:
2157
diff
changeset
|
930 |
|
0def552122af
handle Boolean values in history HTML display
Richard Jones <richard@users.sourceforge.net>
parents:
2157
diff
changeset
|
931 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
|
932 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
|
933 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
|
934 if current.has_key(k): |
|
0def552122af
handle Boolean values in history HTML display
Richard Jones <richard@users.sourceforge.net>
parents:
2157
diff
changeset
|
935 cell[-1] += ' -> %s'%current[k] |
|
0def552122af
handle Boolean values in history HTML display
Richard Jones <richard@users.sourceforge.net>
parents:
2157
diff
changeset
|
936 current[k] = val |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
937 |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
938 elif not args[k]: |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
939 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
|
940 cell.append('%s: %s'%(self._(k), current[k])) |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
941 current[k] = '(no value)' |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
942 else: |
|
2547
9b9c8fb52732
translate action names and property names in the history list
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2538
diff
changeset
|
943 cell.append(self._('%s: (no value)')%self._(k)) |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
944 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
945 else: |
|
2547
9b9c8fb52732
translate action names and property names in the history list
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2538
diff
changeset
|
946 cell.append('%s: %s'%(self._(k), str(args[k]))) |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
947 if current.has_key(k): |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
948 cell[-1] += ' -> %s'%current[k] |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
949 current[k] = str(args[k]) |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
950 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
951 arg_s = '<br />'.join(cell) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
952 else: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
953 # unkown event!! |
|
2396
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
954 comments['unknown'] = self._( |
|
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
955 "<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
|
956 " by the history display!</em></strong>") |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
957 arg_s = '<strong><em>' + str(args) + '</em></strong>' |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
958 date_s = date_s.replace(' ', ' ') |
|
1258
de0f879f995d
fixed history to display username instead of userid
Richard Jones <richard@users.sourceforge.net>
parents:
1254
diff
changeset
|
959 # 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
|
960 # have the username) |
|
de0f879f995d
fixed history to display username instead of userid
Richard Jones <richard@users.sourceforge.net>
parents:
1254
diff
changeset
|
961 if dre.match(user): |
|
de0f879f995d
fixed history to display username instead of userid
Richard Jones <richard@users.sourceforge.net>
parents:
1254
diff
changeset
|
962 user = self._db.user.get(user, 'username') |
|
1074
954ad22eb7d9
more doc, more cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1073
diff
changeset
|
963 l.append('<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>'%( |
|
2547
9b9c8fb52732
translate action names and property names in the history list
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2538
diff
changeset
|
964 date_s, user, self._(action), arg_s)) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
965 if comments: |
|
2396
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
966 l.append(self._( |
|
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
967 '<tr><td colspan=4><strong>Note:</strong></td></tr>')) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
968 for entry in comments.values(): |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
969 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
|
970 |
|
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
971 if direction == 'ascending': |
|
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
972 l.reverse() |
|
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
973 |
|
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
974 l[0:0] = ['<table class="history">' |
|
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
975 '<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
|
976 self._('History'), |
|
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
977 '</th></tr><tr>', |
|
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
978 self._('<th>Date</th>'), |
|
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
979 self._('<th>User</th>'), |
|
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
980 self._('<th>Action</th>'), |
|
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
981 self._('<th>Args</th>'), |
|
c64ea31a569b
merge from HEAD, with some additional code re-arranging
Richard Jones <richard@users.sourceforge.net>
parents:
2591
diff
changeset
|
982 '</tr>'] |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
983 l.append('</table>') |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
984 return '\n'.join(l) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
985 |
|
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
|
986 def renderQueryForm(self): |
|
98f3d41f41d9
query "editing" now working, minus filling the form in with the query params
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
987 ''' Render this item, which is a query, as a search form. |
|
98f3d41f41d9
query "editing" now working, minus filling the form in with the query params
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
988 ''' |
|
98f3d41f41d9
query "editing" now working, minus filling the form in with the query params
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
989 # 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
|
990 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
|
991 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
|
992 name = self._klass.get(self._nodeid, 'name') |
|
899c6ced2abe
include queryname in query template render ;)
Richard Jones <richard@users.sourceforge.net>
parents:
1272
diff
changeset
|
993 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
|
994 '&@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
|
995 |
|
98f3d41f41d9
query "editing" now working, minus filling the form in with the query params
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
996 # new template, using the specified classname and request |
|
1244
8dd4f736370b
merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents:
1213
diff
changeset
|
997 pt = Templates(self._db.config.TEMPLATES).get(req.classname, 'search') |
|
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
|
998 |
|
98f3d41f41d9
query "editing" now working, minus filling the form in with the query params
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
999 # 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
|
1000 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
|
1001 |
|
2180
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
1002 def download_url(self): |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
1003 ''' Assume that this item is a FileClass and that it has a name |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
1004 and content. Construct a URL for the download of the content. |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
1005 ''' |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
1006 name = self._klass.get(self._nodeid, 'name') |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
1007 url = '%s%s/%s'%(self._classname, self._nodeid, name) |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
1008 return urllib.quote(url) |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
1009 |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1010 class _HTMLUser(_HTMLItem): |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1011 '''Add ability to check for permissions on users. |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1012 ''' |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1013 _marker = [] |
|
1447
6118d4498db3
added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents:
1441
diff
changeset
|
1014 def hasPermission(self, permission, classname=_marker): |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1015 '''Determine if the user has the Permission. |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1016 |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1017 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
|
1018 be overidden for this test by suppling an alternate classname. |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1019 ''' |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1020 if classname is self._marker: |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1021 classname = self._client.classname |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1022 return self._client.db.security.hasPermission(permission, |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1023 self._nodeid, classname) |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1024 |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1025 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
|
1026 if classname == 'user': |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1027 return _HTMLUser(client, classname, nodeid, anonymous) |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1028 else: |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1029 return _HTMLItem(client, classname, nodeid, anonymous) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1030 |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1031 class HTMLProperty(HTMLInputMixin, HTMLPermissions): |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1032 ''' String, Number, Date, Interval HTMLProperty |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1033 |
|
1123
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
1034 Has useful attributes: |
|
1080
24c9e81fce85
bugfix, added some doc
Richard Jones <richard@users.sourceforge.net>
parents:
1079
diff
changeset
|
1035 |
|
24c9e81fce85
bugfix, added some doc
Richard Jones <richard@users.sourceforge.net>
parents:
1079
diff
changeset
|
1036 _name the name of the property |
|
24c9e81fce85
bugfix, added some doc
Richard Jones <richard@users.sourceforge.net>
parents:
1079
diff
changeset
|
1037 _value the value of the property if any |
|
24c9e81fce85
bugfix, added some doc
Richard Jones <richard@users.sourceforge.net>
parents:
1079
diff
changeset
|
1038 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1039 A wrapper object which may be stringified for the plain() behaviour. |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1040 ''' |
|
1447
6118d4498db3
added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents:
1441
diff
changeset
|
1041 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
|
1042 anonymous=0): |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1043 self._client = client |
|
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1044 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
|
1045 self._classname = classname |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1046 self._nodeid = nodeid |
|
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1047 self._prop = prop |
|
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1048 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
|
1049 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
|
1050 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
|
1051 if not anonymous: |
|
1468
f57759a5ee1a
Better form name mangling, doesn't confuse other things like generic editing.
Richard Jones <richard@users.sourceforge.net>
parents:
1467
diff
changeset
|
1052 self._formname = '%s%s@%s'%(classname, nodeid, name) |
|
1447
6118d4498db3
added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents:
1441
diff
changeset
|
1053 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
|
1054 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
|
1055 |
|
1956
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
1056 HTMLInputMixin.__init__(self) |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1057 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1058 def __repr__(self): |
|
1468
f57759a5ee1a
Better form name mangling, doesn't confuse other things like generic editing.
Richard Jones <richard@users.sourceforge.net>
parents:
1467
diff
changeset
|
1059 return '<HTMLProperty(0x%x) %s %r %r>'%(id(self), self._formname, |
|
1447
6118d4498db3
added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents:
1441
diff
changeset
|
1060 self._prop, self._value) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1061 def __str__(self): |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1062 return self.plain() |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1063 def __cmp__(self, other): |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1064 if isinstance(other, HTMLProperty): |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1065 return cmp(self._value, other._value) |
|
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1066 return cmp(self._value, other) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1067 |
|
2347
fbbda3b1816d
implement __nonzero__ for HTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents:
2327
diff
changeset
|
1068 def __nonzero__(self): |
|
fbbda3b1816d
implement __nonzero__ for HTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents:
2327
diff
changeset
|
1069 return not not self._value |
|
fbbda3b1816d
implement __nonzero__ for HTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents:
2327
diff
changeset
|
1070 |
|
2180
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
1071 def isset(self): |
|
2289
6d16b967f89d
HTML templating isset() inverted [SF#951779]
Richard Jones <richard@users.sourceforge.net>
parents:
2262
diff
changeset
|
1072 '''Is my _value not None?''' |
|
6d16b967f89d
HTML templating isset() inverted [SF#951779]
Richard Jones <richard@users.sourceforge.net>
parents:
2262
diff
changeset
|
1073 return self._value is not None |
|
2180
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
1074 |
|
2002
b046b65e51db
if you're going to enforce class-level permissions...
Richard Jones <richard@users.sourceforge.net>
parents:
1983
diff
changeset
|
1075 def is_edit_ok(self): |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1076 '''Should the user be allowed to use an edit form field for this |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1077 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
|
1078 ones. |
|
2002
b046b65e51db
if you're going to enforce class-level permissions...
Richard Jones <richard@users.sourceforge.net>
parents:
1983
diff
changeset
|
1079 ''' |
|
b046b65e51db
if you're going to enforce class-level permissions...
Richard Jones <richard@users.sourceforge.net>
parents:
1983
diff
changeset
|
1080 if self._nodeid: |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1081 return self._db.security.hasPermission('Edit', self._client.userid, |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1082 self._classname, self._name, self._nodeid) |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1083 return self._db.security.hasPermission('Create', self._client.userid, |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1084 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
|
1085 |
|
b046b65e51db
if you're going to enforce class-level permissions...
Richard Jones <richard@users.sourceforge.net>
parents:
1983
diff
changeset
|
1086 def is_view_ok(self): |
|
b046b65e51db
if you're going to enforce class-level permissions...
Richard Jones <richard@users.sourceforge.net>
parents:
1983
diff
changeset
|
1087 ''' Is the user allowed to View the current class? |
|
b046b65e51db
if you're going to enforce class-level permissions...
Richard Jones <richard@users.sourceforge.net>
parents:
1983
diff
changeset
|
1088 ''' |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1089 if self._db.security.hasPermission('View', self._client.userid, |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1090 self._classname, self._name, self._nodeid): |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1091 return 1 |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1092 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
|
1093 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1094 class StringHTMLProperty(HTMLProperty): |
|
1394
d5314bfab0c0
fix incorrect hyperlinking markup
Richard Jones <richard@users.sourceforge.net>
parents:
1374
diff
changeset
|
1095 hyper_re = re.compile(r'((?P<url>\w{3,6}://\S+)|' |
|
1717
1d93289af20b
remove ; - quoted <> get picked up
Anthony Baxter <anthonybaxter@users.sourceforge.net>
parents:
1715
diff
changeset
|
1096 r'(?P<email>[-+=%/\w\.]+@[\w\.\-]+)|' |
|
2673
63f8b13ba85f
fix sre_constants.error:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2668
diff
changeset
|
1097 r'(?P<item>(?P<class>[A-Za-z_]+)(\s*)(?P<id>\d+)))') |
|
1394
d5314bfab0c0
fix incorrect hyperlinking markup
Richard Jones <richard@users.sourceforge.net>
parents:
1374
diff
changeset
|
1098 def _hyper_repl(self, match): |
|
d5314bfab0c0
fix incorrect hyperlinking markup
Richard Jones <richard@users.sourceforge.net>
parents:
1374
diff
changeset
|
1099 if match.group('url'): |
|
d5314bfab0c0
fix incorrect hyperlinking markup
Richard Jones <richard@users.sourceforge.net>
parents:
1374
diff
changeset
|
1100 s = match.group('url') |
|
d5314bfab0c0
fix incorrect hyperlinking markup
Richard Jones <richard@users.sourceforge.net>
parents:
1374
diff
changeset
|
1101 return '<a href="%s">%s</a>'%(s, s) |
|
d5314bfab0c0
fix incorrect hyperlinking markup
Richard Jones <richard@users.sourceforge.net>
parents:
1374
diff
changeset
|
1102 elif match.group('email'): |
|
d5314bfab0c0
fix incorrect hyperlinking markup
Richard Jones <richard@users.sourceforge.net>
parents:
1374
diff
changeset
|
1103 s = match.group('email') |
|
d5314bfab0c0
fix incorrect hyperlinking markup
Richard Jones <richard@users.sourceforge.net>
parents:
1374
diff
changeset
|
1104 return '<a href="mailto:%s">%s</a>'%(s, s) |
|
d5314bfab0c0
fix incorrect hyperlinking markup
Richard Jones <richard@users.sourceforge.net>
parents:
1374
diff
changeset
|
1105 else: |
|
d5314bfab0c0
fix incorrect hyperlinking markup
Richard Jones <richard@users.sourceforge.net>
parents:
1374
diff
changeset
|
1106 s = match.group('item') |
|
2668
f48a81d49a86
relaxed hyperlinking in web interface (accept "issue123" or "Issue 123")
Richard Jones <richard@users.sourceforge.net>
parents:
2664
diff
changeset
|
1107 s1 = match.group('class').lower() |
|
1394
d5314bfab0c0
fix incorrect hyperlinking markup
Richard Jones <richard@users.sourceforge.net>
parents:
1374
diff
changeset
|
1108 s2 = match.group('id') |
|
d5314bfab0c0
fix incorrect hyperlinking markup
Richard Jones <richard@users.sourceforge.net>
parents:
1374
diff
changeset
|
1109 try: |
|
d5314bfab0c0
fix incorrect hyperlinking markup
Richard Jones <richard@users.sourceforge.net>
parents:
1374
diff
changeset
|
1110 # make sure s1 is a valid tracker classname |
|
2025
e13d11bb7ee8
don't insert spaces into designators, it just confuses users [SF#898087]
Richard Jones <richard@users.sourceforge.net>
parents:
2014
diff
changeset
|
1111 cl = self._db.getclass(s1) |
|
e13d11bb7ee8
don't insert spaces into designators, it just confuses users [SF#898087]
Richard Jones <richard@users.sourceforge.net>
parents:
2014
diff
changeset
|
1112 if not cl.hasnode(s2): |
|
e13d11bb7ee8
don't insert spaces into designators, it just confuses users [SF#898087]
Richard Jones <richard@users.sourceforge.net>
parents:
2014
diff
changeset
|
1113 raise KeyError, 'oops' |
|
e13d11bb7ee8
don't insert spaces into designators, it just confuses users [SF#898087]
Richard Jones <richard@users.sourceforge.net>
parents:
2014
diff
changeset
|
1114 return '<a href="%s">%s%s</a>'%(s, s1, s2) |
|
1394
d5314bfab0c0
fix incorrect hyperlinking markup
Richard Jones <richard@users.sourceforge.net>
parents:
1374
diff
changeset
|
1115 except KeyError: |
|
d5314bfab0c0
fix incorrect hyperlinking markup
Richard Jones <richard@users.sourceforge.net>
parents:
1374
diff
changeset
|
1116 return '%s%s'%(s1, s2) |
|
1336
6a54b51b1784
hyperlinking of special message text
Richard Jones <richard@users.sourceforge.net>
parents:
1332
diff
changeset
|
1117 |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1118 def hyperlinked(self): |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1119 ''' Render a "hyperlinked" version of the text ''' |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1120 return self.plain(hyperlink=1) |
|
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1121 |
|
1374
8e4c3e8de96f
fix StringHTMLProperty hyperlinking
Richard Jones <richard@users.sourceforge.net>
parents:
1370
diff
changeset
|
1122 def plain(self, escape=0, hyperlink=0): |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
1123 '''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
|
1124 |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
1125 - "escape" turns on/off HTML quoting |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
1126 - "hyperlink" turns on/off in-text hyperlinking of URLs, email |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
1127 addresses and designators |
|
1123
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
1128 ''' |
| 2591 | 1129 self.view_check() |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1130 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1131 if self._value is None: |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1132 return '' |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1133 if escape: |
|
1336
6a54b51b1784
hyperlinking of special message text
Richard Jones <richard@users.sourceforge.net>
parents:
1332
diff
changeset
|
1134 s = cgi.escape(str(self._value)) |
|
6a54b51b1784
hyperlinking of special message text
Richard Jones <richard@users.sourceforge.net>
parents:
1332
diff
changeset
|
1135 else: |
|
1374
8e4c3e8de96f
fix StringHTMLProperty hyperlinking
Richard Jones <richard@users.sourceforge.net>
parents:
1370
diff
changeset
|
1136 s = str(self._value) |
|
1336
6a54b51b1784
hyperlinking of special message text
Richard Jones <richard@users.sourceforge.net>
parents:
1332
diff
changeset
|
1137 if hyperlink: |
|
1773
5f15fb95180c
various cosmetic fixes
Richard Jones <richard@users.sourceforge.net>
parents:
1771
diff
changeset
|
1138 # no, we *must* escape this text |
|
1374
8e4c3e8de96f
fix StringHTMLProperty hyperlinking
Richard Jones <richard@users.sourceforge.net>
parents:
1370
diff
changeset
|
1139 if not escape: |
|
8e4c3e8de96f
fix StringHTMLProperty hyperlinking
Richard Jones <richard@users.sourceforge.net>
parents:
1370
diff
changeset
|
1140 s = cgi.escape(s) |
|
1394
d5314bfab0c0
fix incorrect hyperlinking markup
Richard Jones <richard@users.sourceforge.net>
parents:
1374
diff
changeset
|
1141 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
|
1142 return s |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1143 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1144 def stext(self, escape=0): |
|
1123
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
1145 ''' Render the value of the property as StructuredText. |
|
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
1146 |
|
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
1147 This requires the StructureText module to be installed separately. |
|
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
1148 ''' |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1149 self.view_check() |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1150 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1151 s = self.plain(escape=escape) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1152 if not StructuredText: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1153 return s |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1154 return StructuredText(s,level=1,header=0) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1155 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1156 def field(self, size = 30): |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1157 ''' Render the property as a field in HTML. |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1158 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1159 If not editable, just display the value via plain(). |
|
1123
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
1160 ''' |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1161 self.view_check() |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1162 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1163 if self._value is None: |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1164 value = '' |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1165 else: |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1166 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
|
1167 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1168 if self.is_edit_ok(): |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1169 value = '"'.join(value.split('"')) |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1170 return self.input(name=self._formname,value=value,size=size) |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1171 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1172 return self.plain() |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1173 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1174 def multiline(self, escape=0, rows=5, cols=40): |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1175 ''' Render a multiline form edit field for the property. |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1176 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1177 If not editable, just display the plain() value in a <pre> tag. |
|
1123
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
1178 ''' |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1179 self.view_check() |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1180 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1181 if self._value is None: |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1182 value = '' |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1183 else: |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1184 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
|
1185 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1186 if self.is_edit_ok(): |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1187 value = '"'.join(value.split('"')) |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1188 return '<textarea name="%s" rows="%s" cols="%s">%s</textarea>'%( |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1189 self._formname, rows, cols, value) |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1190 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1191 return '<pre>%s</pre>'%self.plain() |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1192 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1193 def email(self, escape=1): |
|
1123
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
1194 ''' Render the value of the property as an obscured email address |
|
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
1195 ''' |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1196 self.view_check() |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1197 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1198 if self._value is None: |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1199 value = '' |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1200 else: |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1201 value = str(self._value) |
|
1133
36ec30d286ea
Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents:
1124
diff
changeset
|
1202 if value.find('@') != -1: |
|
36ec30d286ea
Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents:
1124
diff
changeset
|
1203 name, domain = value.split('@') |
|
36ec30d286ea
Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents:
1124
diff
changeset
|
1204 domain = ' '.join(domain.split('.')[:-1]) |
|
36ec30d286ea
Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents:
1124
diff
changeset
|
1205 name = name.replace('.', ' ') |
|
36ec30d286ea
Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents:
1124
diff
changeset
|
1206 value = '%s at %s ...'%(name, domain) |
|
36ec30d286ea
Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents:
1124
diff
changeset
|
1207 else: |
|
36ec30d286ea
Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents:
1124
diff
changeset
|
1208 value = value.replace('.', ' ') |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1209 if escape: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1210 value = cgi.escape(value) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1211 return value |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1212 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1213 class PasswordHTMLProperty(HTMLProperty): |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1214 def plain(self): |
|
1123
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
1215 ''' Render a "plain" representation of the property |
|
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
1216 ''' |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1217 self.view_check() |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1218 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1219 if self._value is None: |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1220 return '' |
|
2396
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
1221 return self._('*encrypted*') |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1222 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1223 def field(self, size = 30): |
|
1144
db13f46cb5f9
password edit now has a confirmation field
Richard Jones <richard@users.sourceforge.net>
parents:
1136
diff
changeset
|
1224 ''' 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
|
1225 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1226 If not editable, just display the value via plain(). |
|
1123
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
1227 ''' |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1228 self.view_check() |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1229 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1230 if self.is_edit_ok(): |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1231 return self.input(type="password", name=self._formname, size=size) |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1232 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1233 return self.plain() |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1234 |
|
1144
db13f46cb5f9
password edit now has a confirmation field
Richard Jones <richard@users.sourceforge.net>
parents:
1136
diff
changeset
|
1235 def confirm(self, size = 30): |
|
2327
36ae1b14aaab
remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2324
diff
changeset
|
1236 ''' 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
|
1237 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
|
1238 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
|
1239 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1240 If not editable, display nothing. |
|
1144
db13f46cb5f9
password edit now has a confirmation field
Richard Jones <richard@users.sourceforge.net>
parents:
1136
diff
changeset
|
1241 ''' |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1242 self.view_check() |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1243 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1244 if self.is_edit_ok(): |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1245 return self.input(type="password", |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1246 name="@confirm@%s"%self._formname, size=size) |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1247 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1248 return '' |
|
1144
db13f46cb5f9
password edit now has a confirmation field
Richard Jones <richard@users.sourceforge.net>
parents:
1136
diff
changeset
|
1249 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1250 class NumberHTMLProperty(HTMLProperty): |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1251 def plain(self): |
|
1123
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
1252 ''' Render a "plain" representation of the property |
|
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
1253 ''' |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1254 self.view_check() |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1255 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1256 return str(self._value) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1257 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1258 def field(self, size = 30): |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1259 ''' Render a form edit field for the property. |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1260 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1261 If not editable, just display the value via plain(). |
|
1123
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
1262 ''' |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1263 self.view_check() |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1264 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1265 if self._value is None: |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1266 value = '' |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1267 else: |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1268 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
|
1269 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1270 if self.is_edit_ok(): |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1271 value = '"'.join(value.split('"')) |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1272 return self.input(name=self._formname,value=value,size=size) |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1273 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1274 return self.plain() |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1275 |
|
1518
bb843662b708
basic numeric support for NumberHTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents:
1513
diff
changeset
|
1276 def __int__(self): |
|
bb843662b708
basic numeric support for NumberHTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents:
1513
diff
changeset
|
1277 ''' Return an int of me |
|
bb843662b708
basic numeric support for NumberHTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents:
1513
diff
changeset
|
1278 ''' |
|
bb843662b708
basic numeric support for NumberHTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents:
1513
diff
changeset
|
1279 return int(self._value) |
|
bb843662b708
basic numeric support for NumberHTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents:
1513
diff
changeset
|
1280 |
|
bb843662b708
basic numeric support for NumberHTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents:
1513
diff
changeset
|
1281 def __float__(self): |
|
bb843662b708
basic numeric support for NumberHTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents:
1513
diff
changeset
|
1282 ''' Return a float of me |
|
bb843662b708
basic numeric support for NumberHTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents:
1513
diff
changeset
|
1283 ''' |
|
bb843662b708
basic numeric support for NumberHTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents:
1513
diff
changeset
|
1284 return float(self._value) |
|
bb843662b708
basic numeric support for NumberHTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents:
1513
diff
changeset
|
1285 |
|
bb843662b708
basic numeric support for NumberHTMLProperty
Richard Jones <richard@users.sourceforge.net>
parents:
1513
diff
changeset
|
1286 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1287 class BooleanHTMLProperty(HTMLProperty): |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1288 def plain(self): |
|
1123
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
1289 ''' Render a "plain" representation of the property |
|
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
1290 ''' |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1291 self.view_check() |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1292 |
|
1289
257f0ab00d50
bugfix in boolean templating
Richard Jones <richard@users.sourceforge.net>
parents:
1284
diff
changeset
|
1293 if self._value is None: |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1294 return '' |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1295 return self._value and "Yes" or "No" |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1296 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1297 def field(self): |
|
1123
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
1298 ''' 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
|
1299 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1300 If not editable, just display the value via plain(). |
|
1123
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
1301 ''' |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1302 self.view_check() |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1303 |
|
2113
30aeb17e5b04
Boolean HTML templating was broken
Richard Jones <richard@users.sourceforge.net>
parents:
2106
diff
changeset
|
1304 if not self.is_edit_ok(): |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1305 return self.plain() |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1306 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1307 checked = self._value and "checked" or "" |
|
1952
c40ed9113285
Applied Stefan Seefeld's html4/xhtml patch with some changes.
Richard Jones <richard@users.sourceforge.net>
parents:
1932
diff
changeset
|
1308 if self._value: |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1309 s = self.input(type="radio", name=self._formname, value="yes", |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1310 checked="checked") |
|
1952
c40ed9113285
Applied Stefan Seefeld's html4/xhtml patch with some changes.
Richard Jones <richard@users.sourceforge.net>
parents:
1932
diff
changeset
|
1311 s += 'Yes' |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1312 s +=self.input(type="radio", name=self._formname, value="no") |
|
1952
c40ed9113285
Applied Stefan Seefeld's html4/xhtml patch with some changes.
Richard Jones <richard@users.sourceforge.net>
parents:
1932
diff
changeset
|
1313 s += 'No' |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1314 else: |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1315 s = self.input(type="radio", name=self._formname, value="yes") |
|
1952
c40ed9113285
Applied Stefan Seefeld's html4/xhtml patch with some changes.
Richard Jones <richard@users.sourceforge.net>
parents:
1932
diff
changeset
|
1316 s += 'Yes' |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1317 s +=self.input(type="radio", name=self._formname, value="no", |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1318 checked="checked") |
|
1952
c40ed9113285
Applied Stefan Seefeld's html4/xhtml patch with some changes.
Richard Jones <richard@users.sourceforge.net>
parents:
1932
diff
changeset
|
1319 s += 'No' |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1320 return s |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1321 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1322 class DateHTMLProperty(HTMLProperty): |
|
2314
7c8d2e9a0566
fix DateHTMLProperty so local() can override user timezone [SF#953678]
Richard Jones <richard@users.sourceforge.net>
parents:
2289
diff
changeset
|
1323 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
|
1324 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
|
1325 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
|
1326 value, anonymous=anonymous) |
|
2389
2ff93cee9c63
StaticTranslationService got methods gettext() and ngettext()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2377
diff
changeset
|
1327 if self._value: |
|
2561
0dd3dca6bd01
always use translation service set in the tracker client instance;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2558
diff
changeset
|
1328 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
|
1329 self._offset = offset |
|
7c8d2e9a0566
fix DateHTMLProperty so local() can override user timezone [SF#953678]
Richard Jones <richard@users.sourceforge.net>
parents:
2289
diff
changeset
|
1330 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1331 def plain(self): |
|
1123
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
1332 ''' Render a "plain" representation of the property |
|
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
1333 ''' |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1334 self.view_check() |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1335 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1336 if self._value is None: |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1337 return '' |
|
2314
7c8d2e9a0566
fix DateHTMLProperty so local() can override user timezone [SF#953678]
Richard Jones <richard@users.sourceforge.net>
parents:
2289
diff
changeset
|
1338 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
|
1339 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
|
1340 else: |
|
7c8d2e9a0566
fix DateHTMLProperty so local() can override user timezone [SF#953678]
Richard Jones <richard@users.sourceforge.net>
parents:
2289
diff
changeset
|
1341 offset = self._offset |
|
7c8d2e9a0566
fix DateHTMLProperty so local() can override user timezone [SF#953678]
Richard Jones <richard@users.sourceforge.net>
parents:
2289
diff
changeset
|
1342 return str(self._value.local(offset)) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1343 |
|
2580
e90d63c7eceb
fixed DateHTMLProperty for invalid date entry [SF#986538]
Richard Jones <richard@users.sourceforge.net>
parents:
2574
diff
changeset
|
1344 def now(self, str_interval=None): |
|
1436
2f6647cf5345
bugger, dropping support for "+" special char
Richard Jones <richard@users.sourceforge.net>
parents:
1421
diff
changeset
|
1345 ''' Return the current time. |
|
2f6647cf5345
bugger, dropping support for "+" special char
Richard Jones <richard@users.sourceforge.net>
parents:
1421
diff
changeset
|
1346 |
|
2f6647cf5345
bugger, dropping support for "+" special char
Richard Jones <richard@users.sourceforge.net>
parents:
1421
diff
changeset
|
1347 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
|
1348 DateHTMLProperty. |
|
2f6647cf5345
bugger, dropping support for "+" special char
Richard Jones <richard@users.sourceforge.net>
parents:
1421
diff
changeset
|
1349 ''' |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1350 self.view_check() |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1351 |
|
2524
736115d374f2
use client instance to translate Date and Interval objects
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2520
diff
changeset
|
1352 ret = date.Date('.', translator=self._client) |
|
2471
31cd032291c5
new templating features
Richard Jones <richard@users.sourceforge.net>
parents:
2466
diff
changeset
|
1353 |
|
31cd032291c5
new templating features
Richard Jones <richard@users.sourceforge.net>
parents:
2466
diff
changeset
|
1354 if isinstance(str_interval, basestring): |
|
31cd032291c5
new templating features
Richard Jones <richard@users.sourceforge.net>
parents:
2466
diff
changeset
|
1355 sign = 1 |
|
31cd032291c5
new templating features
Richard Jones <richard@users.sourceforge.net>
parents:
2466
diff
changeset
|
1356 if str_interval[0] == '-': |
|
31cd032291c5
new templating features
Richard Jones <richard@users.sourceforge.net>
parents:
2466
diff
changeset
|
1357 sign = -1 |
|
31cd032291c5
new templating features
Richard Jones <richard@users.sourceforge.net>
parents:
2466
diff
changeset
|
1358 str_interval = str_interval[1:] |
|
2524
736115d374f2
use client instance to translate Date and Interval objects
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2520
diff
changeset
|
1359 interval = date.Interval(str_interval, translator=self._client) |
|
2471
31cd032291c5
new templating features
Richard Jones <richard@users.sourceforge.net>
parents:
2466
diff
changeset
|
1360 if sign > 0: |
|
31cd032291c5
new templating features
Richard Jones <richard@users.sourceforge.net>
parents:
2466
diff
changeset
|
1361 ret = ret + interval |
|
31cd032291c5
new templating features
Richard Jones <richard@users.sourceforge.net>
parents:
2466
diff
changeset
|
1362 else: |
|
31cd032291c5
new templating features
Richard Jones <richard@users.sourceforge.net>
parents:
2466
diff
changeset
|
1363 ret = ret - interval |
|
2520
0914d72bb15b
fix single string split into three separate MsgIDs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2471
diff
changeset
|
1364 |
| 2037 | 1365 return DateHTMLProperty(self._client, self._classname, self._nodeid, |
|
2471
31cd032291c5
new templating features
Richard Jones <richard@users.sourceforge.net>
parents:
2466
diff
changeset
|
1366 self._prop, self._formname, ret) |
|
1436
2f6647cf5345
bugger, dropping support for "+" special char
Richard Jones <richard@users.sourceforge.net>
parents:
1421
diff
changeset
|
1367 |
|
2580
e90d63c7eceb
fixed DateHTMLProperty for invalid date entry [SF#986538]
Richard Jones <richard@users.sourceforge.net>
parents:
2574
diff
changeset
|
1368 def field(self, size=30, default=None): |
|
1123
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
1369 ''' 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
|
1370 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1371 If not editable, just display the value via plain(). |
|
1123
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
1372 ''' |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1373 self.view_check() |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1374 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1375 if self._value is None: |
|
2471
31cd032291c5
new templating features
Richard Jones <richard@users.sourceforge.net>
parents:
2466
diff
changeset
|
1376 if default is None: |
|
31cd032291c5
new templating features
Richard Jones <richard@users.sourceforge.net>
parents:
2466
diff
changeset
|
1377 raw_value = None |
|
31cd032291c5
new templating features
Richard Jones <richard@users.sourceforge.net>
parents:
2466
diff
changeset
|
1378 else: |
|
31cd032291c5
new templating features
Richard Jones <richard@users.sourceforge.net>
parents:
2466
diff
changeset
|
1379 if isinstance(default, basestring): |
|
2524
736115d374f2
use client instance to translate Date and Interval objects
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2520
diff
changeset
|
1380 raw_value = Date(default, translator=self._client) |
|
2471
31cd032291c5
new templating features
Richard Jones <richard@users.sourceforge.net>
parents:
2466
diff
changeset
|
1381 elif isinstance(default, date.Date): |
|
31cd032291c5
new templating features
Richard Jones <richard@users.sourceforge.net>
parents:
2466
diff
changeset
|
1382 raw_value = default |
|
31cd032291c5
new templating features
Richard Jones <richard@users.sourceforge.net>
parents:
2466
diff
changeset
|
1383 elif isinstance(default, DateHTMLProperty): |
|
31cd032291c5
new templating features
Richard Jones <richard@users.sourceforge.net>
parents:
2466
diff
changeset
|
1384 raw_value = default._value |
|
31cd032291c5
new templating features
Richard Jones <richard@users.sourceforge.net>
parents:
2466
diff
changeset
|
1385 else: |
|
2520
0914d72bb15b
fix single string split into three separate MsgIDs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2471
diff
changeset
|
1386 raise ValueError, _('default value for ' |
|
0914d72bb15b
fix single string split into three separate MsgIDs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2471
diff
changeset
|
1387 '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
|
1388 'or string date representation.') |
|
2471
31cd032291c5
new templating features
Richard Jones <richard@users.sourceforge.net>
parents:
2466
diff
changeset
|
1389 else: |
|
31cd032291c5
new templating features
Richard Jones <richard@users.sourceforge.net>
parents:
2466
diff
changeset
|
1390 raw_value = self._value |
|
31cd032291c5
new templating features
Richard Jones <richard@users.sourceforge.net>
parents:
2466
diff
changeset
|
1391 |
|
31cd032291c5
new templating features
Richard Jones <richard@users.sourceforge.net>
parents:
2466
diff
changeset
|
1392 if raw_value is None: |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1393 value = '' |
|
2580
e90d63c7eceb
fixed DateHTMLProperty for invalid date entry [SF#986538]
Richard Jones <richard@users.sourceforge.net>
parents:
2574
diff
changeset
|
1394 elif type(raw_value) is type(''): |
|
e90d63c7eceb
fixed DateHTMLProperty for invalid date entry [SF#986538]
Richard Jones <richard@users.sourceforge.net>
parents:
2574
diff
changeset
|
1395 value = raw_value |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1396 else: |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1397 tz = self._db.getUserTimezone() |
|
2471
31cd032291c5
new templating features
Richard Jones <richard@users.sourceforge.net>
parents:
2466
diff
changeset
|
1398 value = cgi.escape(str(raw_value.local(tz))) |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1399 |
|
2149
702f9a6afdcf
Added DEFAULT_TIMEZONE. Fixed up some missing info from What's New.
Richard Jones <richard@users.sourceforge.net>
parents:
2136
diff
changeset
|
1400 if self.is_edit_ok(): |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1401 value = '"'.join(value.split('"')) |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1402 return self.input(name=self._formname,value=value,size=size) |
|
2327
36ae1b14aaab
remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2324
diff
changeset
|
1403 |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1404 return self.plain() |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1405 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1406 def reldate(self, pretty=1): |
|
1124
1fc1f92c5f31
more doc, bugfix in Batch
Richard Jones <richard@users.sourceforge.net>
parents:
1123
diff
changeset
|
1407 ''' Render the interval between the date and now. |
|
1fc1f92c5f31
more doc, bugfix in Batch
Richard Jones <richard@users.sourceforge.net>
parents:
1123
diff
changeset
|
1408 |
|
1fc1f92c5f31
more doc, bugfix in Batch
Richard Jones <richard@users.sourceforge.net>
parents:
1123
diff
changeset
|
1409 If the "pretty" flag is true, then make the display pretty. |
|
1fc1f92c5f31
more doc, bugfix in Batch
Richard Jones <richard@users.sourceforge.net>
parents:
1123
diff
changeset
|
1410 ''' |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1411 self.view_check() |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1412 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1413 if not self._value: |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1414 return '' |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1415 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1416 # figure the interval |
|
2524
736115d374f2
use client instance to translate Date and Interval objects
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2520
diff
changeset
|
1417 interval = self._value - date.Date('.', translator=self._client) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1418 if pretty: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1419 return interval.pretty() |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1420 return str(interval) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1421 |
|
1453
b72f422d1e5e
better handling of format param
Richard Jones <richard@users.sourceforge.net>
parents:
1451
diff
changeset
|
1422 _marker = [] |
|
b72f422d1e5e
better handling of format param
Richard Jones <richard@users.sourceforge.net>
parents:
1451
diff
changeset
|
1423 def pretty(self, format=_marker): |
|
1272
cae50587fb96
expose the Date.pretty method to templating
Richard Jones <richard@users.sourceforge.net>
parents:
1270
diff
changeset
|
1424 ''' Render the date in a pretty format (eg. month names, spaces). |
|
cae50587fb96
expose the Date.pretty method to templating
Richard Jones <richard@users.sourceforge.net>
parents:
1270
diff
changeset
|
1425 |
|
cae50587fb96
expose the Date.pretty method to templating
Richard Jones <richard@users.sourceforge.net>
parents:
1270
diff
changeset
|
1426 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
|
1427 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
|
1428 string, then it'll be stripped from the output. This is handy |
|
cae50587fb96
expose the Date.pretty method to templating
Richard Jones <richard@users.sourceforge.net>
parents:
1270
diff
changeset
|
1429 for the situatin when a date only specifies a month and a year. |
|
cae50587fb96
expose the Date.pretty method to templating
Richard Jones <richard@users.sourceforge.net>
parents:
1270
diff
changeset
|
1430 ''' |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1431 self.view_check() |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1432 |
|
1453
b72f422d1e5e
better handling of format param
Richard Jones <richard@users.sourceforge.net>
parents:
1451
diff
changeset
|
1433 if format is not self._marker: |
|
b72f422d1e5e
better handling of format param
Richard Jones <richard@users.sourceforge.net>
parents:
1451
diff
changeset
|
1434 return self._value.pretty(format) |
|
b72f422d1e5e
better handling of format param
Richard Jones <richard@users.sourceforge.net>
parents:
1451
diff
changeset
|
1435 else: |
|
b72f422d1e5e
better handling of format param
Richard Jones <richard@users.sourceforge.net>
parents:
1451
diff
changeset
|
1436 return self._value.pretty() |
|
1272
cae50587fb96
expose the Date.pretty method to templating
Richard Jones <richard@users.sourceforge.net>
parents:
1270
diff
changeset
|
1437 |
|
1320
3758a5af985f
Lots of little fixes in this update:
Richard Jones <richard@users.sourceforge.net>
parents:
1289
diff
changeset
|
1438 def local(self, offset): |
|
3758a5af985f
Lots of little fixes in this update:
Richard Jones <richard@users.sourceforge.net>
parents:
1289
diff
changeset
|
1439 ''' Return the date/time as a local (timezone offset) date/time. |
|
3758a5af985f
Lots of little fixes in this update:
Richard Jones <richard@users.sourceforge.net>
parents:
1289
diff
changeset
|
1440 ''' |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1441 self.view_check() |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1442 |
|
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
|
1443 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
|
1444 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
|
1445 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1446 class IntervalHTMLProperty(HTMLProperty): |
|
2389
2ff93cee9c63
StaticTranslationService got methods gettext() and ngettext()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2377
diff
changeset
|
1447 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
|
1448 anonymous=0): |
|
2ff93cee9c63
StaticTranslationService got methods gettext() and ngettext()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2377
diff
changeset
|
1449 HTMLProperty.__init__(self, client, classname, nodeid, prop, |
|
2ff93cee9c63
StaticTranslationService got methods gettext() and ngettext()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2377
diff
changeset
|
1450 name, value, anonymous) |
|
2ff93cee9c63
StaticTranslationService got methods gettext() and ngettext()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2377
diff
changeset
|
1451 if self._value: |
|
2561
0dd3dca6bd01
always use translation service set in the tracker client instance;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2558
diff
changeset
|
1452 self._value.setTranslator(self._client.translator) |
|
2389
2ff93cee9c63
StaticTranslationService got methods gettext() and ngettext()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2377
diff
changeset
|
1453 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1454 def plain(self): |
|
1123
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
1455 ''' Render a "plain" representation of the property |
|
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
1456 ''' |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1457 self.view_check() |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1458 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1459 if self._value is None: |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1460 return '' |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1461 return str(self._value) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1462 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1463 def pretty(self): |
|
1124
1fc1f92c5f31
more doc, bugfix in Batch
Richard Jones <richard@users.sourceforge.net>
parents:
1123
diff
changeset
|
1464 ''' Render the interval in a pretty format (eg. "yesterday") |
|
1fc1f92c5f31
more doc, bugfix in Batch
Richard Jones <richard@users.sourceforge.net>
parents:
1123
diff
changeset
|
1465 ''' |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1466 self.view_check() |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1467 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1468 return self._value.pretty() |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1469 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1470 def field(self, size = 30): |
|
1123
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
1471 ''' 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
|
1472 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1473 If not editable, just display the value via plain(). |
|
1123
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
1474 ''' |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1475 self.view_check() |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1476 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1477 if self._value is None: |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1478 value = '' |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1479 else: |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1480 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
|
1481 |
|
2320
41bc4936e115
fix Interval editing [SF#954891]
Richard Jones <richard@users.sourceforge.net>
parents:
2314
diff
changeset
|
1482 if self.is_edit_ok(): |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1483 value = '"'.join(value.split('"')) |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1484 return self.input(name=self._formname,value=value,size=size) |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1485 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1486 return self.plain() |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1487 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1488 class LinkHTMLProperty(HTMLProperty): |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1489 ''' Link HTMLProperty |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1490 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
|
1491 information. Stringifying the object itself results in the value |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1492 from the item being displayed. Accessing attributes of this object |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1493 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
|
1494 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
|
1495 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
|
1496 name property of that user) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1497 ''' |
|
1447
6118d4498db3
added "foo@" prefix to all but "context" form variable names
Richard Jones <richard@users.sourceforge.net>
parents:
1441
diff
changeset
|
1498 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
|
1499 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
|
1500 # 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
|
1501 # 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
|
1502 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
|
1503 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
|
1504 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1505 def __getattr__(self, attr): |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1506 ''' return a new HTMLItem ''' |
|
1103
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1099
diff
changeset
|
1507 #print 'Link.getattr', (self, attr, self._value) |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1508 if not self._value: |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1509 raise AttributeError, "Can't access missing value" |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1510 i = HTMLItem(self._client, self._prop.classname, self._value) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1511 return getattr(i, attr) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1512 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1513 def plain(self, escape=0): |
|
1123
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
1514 ''' Render a "plain" representation of the property |
|
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
1515 ''' |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1516 self.view_check() |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1517 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1518 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
|
1519 return '' |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1520 linkcl = self._db.classes[self._prop.classname] |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1521 k = linkcl.labelprop(1) |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1522 value = str(linkcl.get(self._value, k)) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1523 if escape: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1524 value = cgi.escape(value) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1525 return value |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1526 |
|
1134
16874c9b86ad
generic item editing
Richard Jones <richard@users.sourceforge.net>
parents:
1133
diff
changeset
|
1527 def field(self, showid=0, size=None): |
|
1123
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
1528 ''' 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
|
1529 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1530 If not editable, just display the value via plain(). |
|
1123
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
1531 ''' |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1532 self.view_check() |
|
1322
c0546b95aad1
finished off handling of retired flag in filter() [SF#635260]
Richard Jones <richard@users.sourceforge.net>
parents:
1320
diff
changeset
|
1533 |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1534 if not self.is_edit_ok(): |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1535 return self.plain() |
|
1322
c0546b95aad1
finished off handling of retired flag in filter() [SF#635260]
Richard Jones <richard@users.sourceforge.net>
parents:
1320
diff
changeset
|
1536 |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1537 # edit field |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1538 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
|
1539 if self._value is None: |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1540 value = '' |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1541 else: |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1542 k = linkcl.getkey() |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1543 if k: |
|
2116
1ef1b050b785
fix Link HTML field()
Richard Jones <richard@users.sourceforge.net>
parents:
2113
diff
changeset
|
1544 value = linkcl.get(self._value, k) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1545 else: |
|
2116
1ef1b050b785
fix Link HTML field()
Richard Jones <richard@users.sourceforge.net>
parents:
2113
diff
changeset
|
1546 value = self._value |
|
1ef1b050b785
fix Link HTML field()
Richard Jones <richard@users.sourceforge.net>
parents:
2113
diff
changeset
|
1547 value = cgi.escape(str(value)) |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1548 value = '"'.join(value.split('"')) |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1549 return '<input name="%s" value="%s" size="%s">'%(self._formname, |
|
2116
1ef1b050b785
fix Link HTML field()
Richard Jones <richard@users.sourceforge.net>
parents:
2113
diff
changeset
|
1550 value, size) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1551 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1552 def menu(self, size=None, height=None, showid=0, additional=[], |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1553 sort_on=None, **conditions): |
|
1124
1fc1f92c5f31
more doc, bugfix in Batch
Richard Jones <richard@users.sourceforge.net>
parents:
1123
diff
changeset
|
1554 ''' 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
|
1555 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1556 If not editable, just display the value via plain(). |
|
1124
1fc1f92c5f31
more doc, bugfix in Batch
Richard Jones <richard@users.sourceforge.net>
parents:
1123
diff
changeset
|
1557 ''' |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1558 self.view_check() |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1559 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1560 if not self.is_edit_ok(): |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1561 return self.plain() |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1562 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1563 value = self._value |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1564 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1565 linkcl = self._db.getclass(self._prop.classname) |
|
1468
f57759a5ee1a
Better form name mangling, doesn't confuse other things like generic editing.
Richard Jones <richard@users.sourceforge.net>
parents:
1467
diff
changeset
|
1566 l = ['<select name="%s">'%self._formname] |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1567 k = linkcl.labelprop(1) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1568 s = '' |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1569 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
|
1570 s = 'selected="selected" ' |
|
2396
39cdddd313ca
HTMLInputMixin provides translation interface for all its hiers...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2390
diff
changeset
|
1571 l.append(self._('<option %svalue="-1">- no selection -</option>')%s) |
|
2327
36ae1b14aaab
remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2324
diff
changeset
|
1572 if linkcl.getprops().has_key('order'): |
| 1002 | 1573 sort_on = ('+', 'order') |
|
2327
36ae1b14aaab
remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2324
diff
changeset
|
1574 else: |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1575 if sort_on is None: |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1576 sort_on = ('+', linkcl.labelprop()) |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1577 else: |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1578 sort_on = ('+', sort_on) |
| 1002 | 1579 options = linkcl.filter(None, conditions, sort_on, (None, None)) |
|
1322
c0546b95aad1
finished off handling of retired flag in filter() [SF#635260]
Richard Jones <richard@users.sourceforge.net>
parents:
1320
diff
changeset
|
1580 |
|
c0546b95aad1
finished off handling of retired flag in filter() [SF#635260]
Richard Jones <richard@users.sourceforge.net>
parents:
1320
diff
changeset
|
1581 # make sure we list the current value if it's retired |
|
c0546b95aad1
finished off handling of retired flag in filter() [SF#635260]
Richard Jones <richard@users.sourceforge.net>
parents:
1320
diff
changeset
|
1582 if self._value and self._value not in options: |
|
c0546b95aad1
finished off handling of retired flag in filter() [SF#635260]
Richard Jones <richard@users.sourceforge.net>
parents:
1320
diff
changeset
|
1583 options.insert(0, self._value) |
|
c0546b95aad1
finished off handling of retired flag in filter() [SF#635260]
Richard Jones <richard@users.sourceforge.net>
parents:
1320
diff
changeset
|
1584 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1585 for optionid in options: |
|
1169
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
1586 # 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
|
1587 option = linkcl.get(optionid, k) or '' |
|
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
1588 |
|
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
1589 # figure if this option is selected |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1590 s = '' |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1591 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
|
1592 s = 'selected="selected" ' |
|
1169
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
1593 |
|
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
1594 # figure the label |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1595 if showid: |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1596 lab = '%s%s: %s'%(self._prop.classname, optionid, option) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1597 else: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1598 lab = option |
|
1169
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
1599 |
|
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
1600 # truncate if it's too long |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1601 if size is not None and len(lab) > size: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1602 lab = lab[:size-3] + '...' |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1603 if additional: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1604 m = [] |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1605 for propname in additional: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1606 m.append(linkcl.get(optionid, propname)) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1607 lab = lab + ' (%s)'%', '.join(map(str, m)) |
|
1169
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
1608 |
|
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
1609 # and generate |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1610 lab = cgi.escape(lab) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1611 l.append('<option %svalue="%s">%s</option>'%(s, optionid, lab)) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1612 l.append('</select>') |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1613 return '\n'.join(l) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1614 # def checklist(self, ...) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1615 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1616 class MultilinkHTMLProperty(HTMLProperty): |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1617 ''' Multilink HTMLProperty |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1618 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1619 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
|
1620 each entry in the multilink. |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1621 ''' |
|
1931
f1e5e5115c29
Always sort MultilinkHTMLProperty in the correct order...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1917
diff
changeset
|
1622 def __init__(self, *args, **kwargs): |
|
f1e5e5115c29
Always sort MultilinkHTMLProperty in the correct order...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1917
diff
changeset
|
1623 HTMLProperty.__init__(self, *args, **kwargs) |
|
f1e5e5115c29
Always sort MultilinkHTMLProperty in the correct order...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1917
diff
changeset
|
1624 if self._value: |
|
2244
ac4f295499a4
fixed journal marshalling in RDBMS backends [SF#943627]
Richard Jones <richard@users.sourceforge.net>
parents:
2207
diff
changeset
|
1625 self._value = lookupIds(self._db, self._prop, self._value, |
|
ac4f295499a4
fixed journal marshalling in RDBMS backends [SF#943627]
Richard Jones <richard@users.sourceforge.net>
parents:
2207
diff
changeset
|
1626 fail_ok=1) |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1627 sortfun = make_sort_function(self._db, self._prop.classname) |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1628 self._value.sort(sortfun) |
|
2327
36ae1b14aaab
remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2324
diff
changeset
|
1629 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1630 def __len__(self): |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1631 ''' length of the multilink ''' |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1632 return len(self._value) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1633 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1634 def __getattr__(self, attr): |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1635 ''' no extended attribute accesses make sense here ''' |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1636 raise AttributeError, attr |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1637 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1638 def __getitem__(self, num): |
|
1067
73e7bbb8a1fa
allow hasPermission checks on normal user class iterations
Richard Jones <richard@users.sourceforge.net>
parents:
1065
diff
changeset
|
1639 ''' iterate and return a new HTMLItem |
|
73e7bbb8a1fa
allow hasPermission checks on normal user class iterations
Richard Jones <richard@users.sourceforge.net>
parents:
1065
diff
changeset
|
1640 ''' |
|
1103
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1099
diff
changeset
|
1641 #print 'Multi.getitem', (self, num) |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1642 value = self._value[num] |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1643 return HTMLItem(self._client, self._prop.classname, value) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1644 |
|
1103
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1099
diff
changeset
|
1645 def __contains__(self, value): |
|
1325
2e5a9fc7abd5
allow StringHTMLProperty in MultilinkHTMLProperty test to work
Richard Jones <richard@users.sourceforge.net>
parents:
1323
diff
changeset
|
1646 ''' 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
|
1647 value is a string first, not a HTMLProperty. |
|
1103
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1099
diff
changeset
|
1648 ''' |
|
1325
2e5a9fc7abd5
allow StringHTMLProperty in MultilinkHTMLProperty test to work
Richard Jones <richard@users.sourceforge.net>
parents:
1323
diff
changeset
|
1649 return str(value) in self._value |
|
1103
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1099
diff
changeset
|
1650 |
|
2180
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
1651 def isset(self): |
|
2289
6d16b967f89d
HTML templating isset() inverted [SF#951779]
Richard Jones <richard@users.sourceforge.net>
parents:
2262
diff
changeset
|
1652 '''Is my _value not []?''' |
|
6d16b967f89d
HTML templating isset() inverted [SF#951779]
Richard Jones <richard@users.sourceforge.net>
parents:
2262
diff
changeset
|
1653 return self._value != [] |
|
2180
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
1654 |
| 1002 | 1655 def reverse(self): |
|
1067
73e7bbb8a1fa
allow hasPermission checks on normal user class iterations
Richard Jones <richard@users.sourceforge.net>
parents:
1065
diff
changeset
|
1656 ''' return the list in reverse order |
|
73e7bbb8a1fa
allow hasPermission checks on normal user class iterations
Richard Jones <richard@users.sourceforge.net>
parents:
1065
diff
changeset
|
1657 ''' |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1658 l = self._value[:] |
| 1002 | 1659 l.reverse() |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1660 return [HTMLItem(self._client, self._prop.classname, value) |
|
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1661 for value in l] |
| 1002 | 1662 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1663 def plain(self, escape=0): |
|
1123
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
1664 ''' Render a "plain" representation of the property |
|
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
1665 ''' |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1666 self.view_check() |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1667 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1668 linkcl = self._db.classes[self._prop.classname] |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1669 k = linkcl.labelprop(1) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1670 labels = [] |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1671 for v in self._value: |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1672 labels.append(linkcl.get(v, k)) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1673 value = ', '.join(labels) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1674 if escape: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1675 value = cgi.escape(value) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1676 return value |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1677 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1678 def field(self, size=30, showid=0): |
|
1123
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
1679 ''' 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
|
1680 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1681 If not editable, just display the value via plain(). |
|
1123
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
1682 ''' |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1683 self.view_check() |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1684 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1685 if not self.is_edit_ok(): |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1686 return self.plain() |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1687 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1688 linkcl = self._db.getclass(self._prop.classname) |
|
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1689 value = self._value[:] |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1690 # map the id to the label property |
|
1134
16874c9b86ad
generic item editing
Richard Jones <richard@users.sourceforge.net>
parents:
1133
diff
changeset
|
1691 if not linkcl.getkey(): |
|
16874c9b86ad
generic item editing
Richard Jones <richard@users.sourceforge.net>
parents:
1133
diff
changeset
|
1692 showid=1 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1693 if not showid: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1694 k = linkcl.labelprop(1) |
|
2083
a94eacad51c8
handle bad multilink input at item creation time better [SF#917834]
Richard Jones <richard@users.sourceforge.net>
parents:
2056
diff
changeset
|
1695 value = lookupKeys(linkcl, k, value) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1696 value = cgi.escape(','.join(value)) |
|
1952
c40ed9113285
Applied Stefan Seefeld's html4/xhtml patch with some changes.
Richard Jones <richard@users.sourceforge.net>
parents:
1932
diff
changeset
|
1697 return self.input(name=self._formname,size=size,value=value) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1698 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1699 def menu(self, size=None, height=None, showid=0, additional=[], |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1700 sort_on=None, **conditions): |
|
1124
1fc1f92c5f31
more doc, bugfix in Batch
Richard Jones <richard@users.sourceforge.net>
parents:
1123
diff
changeset
|
1701 ''' 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
|
1702 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1703 If not editable, just display the value via plain(). |
|
1124
1fc1f92c5f31
more doc, bugfix in Batch
Richard Jones <richard@users.sourceforge.net>
parents:
1123
diff
changeset
|
1704 ''' |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1705 self.view_check() |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1706 |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1707 if not self.is_edit_ok(): |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1708 return self.plain() |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1709 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1710 value = self._value |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1711 |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1712 linkcl = self._db.getclass(self._prop.classname) |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1713 if sort_on is None: |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1714 sort_on = ('+', find_sort_key(linkcl)) |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1715 else: |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1716 sort_on = ('+', sort_on) |
|
1931
f1e5e5115c29
Always sort MultilinkHTMLProperty in the correct order...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1917
diff
changeset
|
1717 options = linkcl.filter(None, conditions, sort_on) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1718 height = height or min(len(options), 7) |
|
1468
f57759a5ee1a
Better form name mangling, doesn't confuse other things like generic editing.
Richard Jones <richard@users.sourceforge.net>
parents:
1467
diff
changeset
|
1719 l = ['<select multiple name="%s" size="%s">'%(self._formname, height)] |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1720 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
|
1721 |
|
c0546b95aad1
finished off handling of retired flag in filter() [SF#635260]
Richard Jones <richard@users.sourceforge.net>
parents:
1320
diff
changeset
|
1722 # make sure we list the current values if they're retired |
|
1342
8de9e5940c30
fixed error in cgi/templates.py [SF#652089]
Richard Jones <richard@users.sourceforge.net>
parents:
1341
diff
changeset
|
1723 for val in value: |
|
8de9e5940c30
fixed error in cgi/templates.py [SF#652089]
Richard Jones <richard@users.sourceforge.net>
parents:
1341
diff
changeset
|
1724 if val not in options: |
|
8de9e5940c30
fixed error in cgi/templates.py [SF#652089]
Richard Jones <richard@users.sourceforge.net>
parents:
1341
diff
changeset
|
1725 options.insert(0, val) |
|
1322
c0546b95aad1
finished off handling of retired flag in filter() [SF#635260]
Richard Jones <richard@users.sourceforge.net>
parents:
1320
diff
changeset
|
1726 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1727 for optionid in options: |
|
1169
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
1728 # 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
|
1729 option = linkcl.get(optionid, k) or '' |
|
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
1730 |
|
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
1731 # figure if this option is selected |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1732 s = '' |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1733 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
|
1734 s = 'selected="selected" ' |
|
1169
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
1735 |
|
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
1736 # figure the label |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1737 if showid: |
|
1079
04b44df7af1d
removed some property name clashes
Richard Jones <richard@users.sourceforge.net>
parents:
1078
diff
changeset
|
1738 lab = '%s%s: %s'%(self._prop.classname, optionid, option) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1739 else: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1740 lab = option |
|
1169
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
1741 # truncate if it's too long |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1742 if size is not None and len(lab) > size: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1743 lab = lab[:size-3] + '...' |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1744 if additional: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1745 m = [] |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1746 for propname in additional: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1747 m.append(linkcl.get(optionid, propname)) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1748 lab = lab + ' (%s)'%', '.join(m) |
|
1169
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
1749 |
|
7b448a2425fd
bugfix to (multi)link menu() label generation
Richard Jones <richard@users.sourceforge.net>
parents:
1163
diff
changeset
|
1750 # and generate |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1751 lab = cgi.escape(lab) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1752 l.append('<option %svalue="%s">%s</option>'%(s, optionid, |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1753 lab)) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1754 l.append('</select>') |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1755 return '\n'.join(l) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1756 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1757 # set the propclasses for HTMLItem |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1758 propclasses = ( |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1759 (hyperdb.String, StringHTMLProperty), |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1760 (hyperdb.Number, NumberHTMLProperty), |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1761 (hyperdb.Boolean, BooleanHTMLProperty), |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1762 (hyperdb.Date, DateHTMLProperty), |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1763 (hyperdb.Interval, IntervalHTMLProperty), |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1764 (hyperdb.Password, PasswordHTMLProperty), |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1765 (hyperdb.Link, LinkHTMLProperty), |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1766 (hyperdb.Multilink, MultilinkHTMLProperty), |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1767 ) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1768 |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1769 def make_sort_function(db, classname, sort_on=None): |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1770 '''Make a sort function for a given class |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1771 ''' |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1772 linkcl = db.getclass(classname) |
|
1983
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1773 if sort_on is None: |
|
75437090134e
implement built-in permission checks for rendered fields...
Richard Jones <richard@users.sourceforge.net>
parents:
1956
diff
changeset
|
1774 sort_on = find_sort_key(linkcl) |
|
1931
f1e5e5115c29
Always sort MultilinkHTMLProperty in the correct order...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1917
diff
changeset
|
1775 def sortfunc(a, b): |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1776 return cmp(linkcl.get(a, sort_on), linkcl.get(b, sort_on)) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1777 return sortfunc |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1778 |
|
1931
f1e5e5115c29
Always sort MultilinkHTMLProperty in the correct order...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1917
diff
changeset
|
1779 def find_sort_key(linkcl): |
|
f1e5e5115c29
Always sort MultilinkHTMLProperty in the correct order...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1917
diff
changeset
|
1780 if linkcl.getprops().has_key('order'): |
|
f1e5e5115c29
Always sort MultilinkHTMLProperty in the correct order...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1917
diff
changeset
|
1781 return 'order' |
|
f1e5e5115c29
Always sort MultilinkHTMLProperty in the correct order...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1917
diff
changeset
|
1782 else: |
|
f1e5e5115c29
Always sort MultilinkHTMLProperty in the correct order...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1917
diff
changeset
|
1783 return linkcl.labelprop() |
|
f1e5e5115c29
Always sort MultilinkHTMLProperty in the correct order...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1917
diff
changeset
|
1784 |
|
1202
01a143f9382e
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
1201
diff
changeset
|
1785 def handleListCGIValue(value): |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1786 ''' Value is either a single item or a list of items. Each item has a |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1787 .value that we're actually interested in. |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1788 ''' |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1789 if isinstance(value, type([])): |
|
1202
01a143f9382e
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
1201
diff
changeset
|
1790 return [value.value for value in value] |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1791 else: |
|
1104
d759c3cb1f06
Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
1792 value = value.value.strip() |
|
d759c3cb1f06
Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
1793 if not value: |
|
d759c3cb1f06
Remeber values in edit/new submission error pages.
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
1794 return [] |
|
1202
01a143f9382e
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
1201
diff
changeset
|
1795 return value.split(',') |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1796 |
|
1016
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
1797 class ShowDict: |
|
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
1798 ''' A convenience access to the :columns index parameters |
|
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
1799 ''' |
|
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
1800 def __init__(self, columns): |
|
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
1801 self.columns = {} |
|
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
1802 for col in columns: |
|
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
1803 self.columns[col] = 1 |
|
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
1804 def __getitem__(self, name): |
|
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
1805 return self.columns.has_key(name) |
|
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
1806 |
|
1956
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
1807 class HTMLRequest(HTMLInputMixin): |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
1808 '''The *request*, holding the CGI form and environment. |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1809 |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
1810 - "form" the CGI form as a cgi.FieldStorage |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
1811 - "env" the CGI environment variables |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
1812 - "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
|
1813 - "user" a HTMLItem instance for this user |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
1814 - "classname" the current classname (possibly None) |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
1815 - "template" the current template (suffix, also possibly None) |
|
1004
5f12d3259f31
logout works better now
Richard Jones <richard@users.sourceforge.net>
parents:
1003
diff
changeset
|
1816 |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
1817 Index args: |
|
1004
5f12d3259f31
logout works better now
Richard Jones <richard@users.sourceforge.net>
parents:
1003
diff
changeset
|
1818 |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
1819 - "columns" dictionary of the columns to display in an index page |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
1820 - "show" a convenience access to columns - request/show/colname will |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
1821 be true if the columns should be displayed, false otherwise |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
1822 - "sort" index sort column (direction, column name) |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
1823 - "group" index grouping property (direction, column name) |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
1824 - "filter" properties to filter the index on |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
1825 - "filterspec" values to filter the index on |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
2002
diff
changeset
|
1826 - "search_text" text to perform a full-text search on for an index |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1827 ''' |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1828 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
|
1829 # _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
|
1830 self._client = self.client = client |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1831 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1832 # easier access vars |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1833 self.form = client.form |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1834 self.env = client.env |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1835 self.base = client.base |
|
2649
1df7d4a41da4
Buncha stuff (sorry about the large checkin):
Richard Jones <richard@users.sourceforge.net>
parents:
2640
diff
changeset
|
1836 self.user = HTMLItem(client, 'user', client.userid) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1837 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1838 # store the current class name and action |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1839 self.classname = client.classname |
|
1041
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
1840 self.template = client.template |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1841 |
|
1421
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
1842 # the special char to use for special vars |
|
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
1843 self.special_char = '@' |
|
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
1844 |
|
1956
1e2cccf6b53b
give access to the input() method all over the place
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
1845 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
|
1846 |
|
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
|
1847 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
|
1848 |
|
98f3d41f41d9
query "editing" now working, minus filling the form in with the query params
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
1849 def _post_init(self): |
|
98f3d41f41d9
query "editing" now working, minus filling the form in with the query params
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
1850 ''' Set attributes based on self.form |
|
98f3d41f41d9
query "editing" now working, minus filling the form in with the query params
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
1851 ''' |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1852 # 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
|
1853 self.columns = [] |
|
1436
2f6647cf5345
bugger, dropping support for "+" special char
Richard Jones <richard@users.sourceforge.net>
parents:
1421
diff
changeset
|
1854 for name in ':columns @columns'.split(): |
|
1421
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
1855 if self.form.has_key(name): |
|
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
1856 self.special_char = name[0] |
|
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
1857 self.columns = handleListCGIValue(self.form[name]) |
|
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
1858 break |
|
1016
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
1859 self.show = ShowDict(self.columns) |
| 1002 | 1860 |
| 1861 # sorting | |
| 1862 self.sort = (None, None) | |
|
1436
2f6647cf5345
bugger, dropping support for "+" special char
Richard Jones <richard@users.sourceforge.net>
parents:
1421
diff
changeset
|
1863 for name in ':sort @sort'.split(): |
|
1421
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
1864 if self.form.has_key(name): |
|
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
1865 self.special_char = name[0] |
|
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
1866 sort = self.form[name].value |
|
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
1867 if sort.startswith('-'): |
|
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
1868 self.sort = ('-', sort[1:]) |
|
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
1869 else: |
|
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
1870 self.sort = ('+', sort) |
|
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
1871 if self.form.has_key(self.special_char+'sortdir'): |
|
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
1872 self.sort = ('-', self.sort[1]) |
| 1002 | 1873 |
| 1874 # grouping | |
| 1875 self.group = (None, None) | |
|
1436
2f6647cf5345
bugger, dropping support for "+" special char
Richard Jones <richard@users.sourceforge.net>
parents:
1421
diff
changeset
|
1876 for name in ':group @group'.split(): |
|
1421
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
1877 if self.form.has_key(name): |
|
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
1878 self.special_char = name[0] |
|
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
1879 group = self.form[name].value |
|
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
1880 if group.startswith('-'): |
|
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
1881 self.group = ('-', group[1:]) |
|
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
1882 else: |
|
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
1883 self.group = ('+', group) |
|
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
1884 if self.form.has_key(self.special_char+'groupdir'): |
|
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
1885 self.group = ('-', self.group[1]) |
| 1002 | 1886 |
| 1887 # filtering | |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1888 self.filter = [] |
|
1436
2f6647cf5345
bugger, dropping support for "+" special char
Richard Jones <richard@users.sourceforge.net>
parents:
1421
diff
changeset
|
1889 for name in ':filter @filter'.split(): |
|
1421
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
1890 if self.form.has_key(name): |
|
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
1891 self.special_char = name[0] |
|
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
1892 self.filter = handleListCGIValue(self.form[name]) |
|
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
1893 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1894 self.filterspec = {} |
|
1200
0a7bd082b94a
usability improvements in API
Richard Jones <richard@users.sourceforge.net>
parents:
1183
diff
changeset
|
1895 db = self.client.db |
|
1003
f89b8d32291b
Hack hack hack...
Richard Jones <richard@users.sourceforge.net>
parents:
1002
diff
changeset
|
1896 if self.classname is not None: |
|
1200
0a7bd082b94a
usability improvements in API
Richard Jones <richard@users.sourceforge.net>
parents:
1183
diff
changeset
|
1897 props = db.getclass(self.classname).getprops() |
|
1003
f89b8d32291b
Hack hack hack...
Richard Jones <richard@users.sourceforge.net>
parents:
1002
diff
changeset
|
1898 for name in self.filter: |
|
1631
8a908bbad1ef
A couple of form value handling changes:
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
1899 if not self.form.has_key(name): |
|
8a908bbad1ef
A couple of form value handling changes:
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
1900 continue |
|
8a908bbad1ef
A couple of form value handling changes:
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
1901 prop = props[name] |
|
8a908bbad1ef
A couple of form value handling changes:
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
1902 fv = self.form[name] |
|
8a908bbad1ef
A couple of form value handling changes:
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
1903 if (isinstance(prop, hyperdb.Link) or |
|
8a908bbad1ef
A couple of form value handling changes:
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
1904 isinstance(prop, hyperdb.Multilink)): |
|
8a908bbad1ef
A couple of form value handling changes:
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
1905 self.filterspec[name] = lookupIds(db, prop, |
|
8a908bbad1ef
A couple of form value handling changes:
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
1906 handleListCGIValue(fv)) |
|
8a908bbad1ef
A couple of form value handling changes:
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
1907 else: |
|
8a908bbad1ef
A couple of form value handling changes:
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
1908 if isinstance(fv, type([])): |
|
8a908bbad1ef
A couple of form value handling changes:
Richard Jones <richard@users.sourceforge.net>
parents:
1591
diff
changeset
|
1909 self.filterspec[name] = [v.value for v in fv] |
|
1003
f89b8d32291b
Hack hack hack...
Richard Jones <richard@users.sourceforge.net>
parents:
1002
diff
changeset
|
1910 else: |
|
f89b8d32291b
Hack hack hack...
Richard Jones <richard@users.sourceforge.net>
parents:
1002
diff
changeset
|
1911 self.filterspec[name] = fv.value |
| 1002 | 1912 |
| 1913 # full-text search argument | |
| 1914 self.search_text = None | |
|
1436
2f6647cf5345
bugger, dropping support for "+" special char
Richard Jones <richard@users.sourceforge.net>
parents:
1421
diff
changeset
|
1915 for name in ':search_text @search_text'.split(): |
|
1421
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
1916 if self.form.has_key(name): |
|
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
1917 self.special_char = name[0] |
|
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
1918 self.search_text = self.form[name].value |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1919 |
|
1016
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
1920 # pagination - size and start index |
|
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
1921 # figure batch args |
|
1421
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
1922 self.pagesize = 50 |
|
1436
2f6647cf5345
bugger, dropping support for "+" special char
Richard Jones <richard@users.sourceforge.net>
parents:
1421
diff
changeset
|
1923 for name in ':pagesize @pagesize'.split(): |
|
1421
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
1924 if self.form.has_key(name): |
|
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
1925 self.special_char = name[0] |
|
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
1926 self.pagesize = int(self.form[name].value) |
|
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
1927 |
|
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
1928 self.startwith = 0 |
|
1436
2f6647cf5345
bugger, dropping support for "+" special char
Richard Jones <richard@users.sourceforge.net>
parents:
1421
diff
changeset
|
1929 for name in ':startwith @startwith'.split(): |
|
1421
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
1930 if self.form.has_key(name): |
|
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
1931 self.special_char = name[0] |
|
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
1932 self.startwith = int(self.form[name].value) |
|
1016
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
1933 |
|
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
|
1934 def updateFromURL(self, url): |
|
98f3d41f41d9
query "editing" now working, minus filling the form in with the query params
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
1935 ''' Parse the URL for query args, and update my attributes using the |
|
98f3d41f41d9
query "editing" now working, minus filling the form in with the query params
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
1936 values. |
|
2327
36ae1b14aaab
remove excessive spaces in the translatable strings;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2324
diff
changeset
|
1937 ''' |
|
1693
7218be26cf85
attempt to fix query editing
Richard Jones <richard@users.sourceforge.net>
parents:
1633
diff
changeset
|
1938 env = {'QUERY_STRING': url} |
|
7218be26cf85
attempt to fix query editing
Richard Jones <richard@users.sourceforge.net>
parents:
1633
diff
changeset
|
1939 self.form = cgi.FieldStorage(environ=env) |
|
7218be26cf85
attempt to fix query editing
Richard Jones <richard@users.sourceforge.net>
parents:
1633
diff
changeset
|
1940 |
|
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
|
1941 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
|
1942 |
|
1016
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
1943 def update(self, kwargs): |
|
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
|
1944 ''' Update my attributes using the keyword 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
|
1945 ''' |
|
1016
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
1946 self.__dict__.update(kwargs) |
|
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
1947 if kwargs.has_key('columns'): |
|
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
1948 self.show = ShowDict(self.columns) |
|
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
1949 |
|
1061
7f9b942128a3
nicer page title
Richard Jones <richard@users.sourceforge.net>
parents:
1051
diff
changeset
|
1950 def description(self): |
|
7f9b942128a3
nicer page title
Richard Jones <richard@users.sourceforge.net>
parents:
1051
diff
changeset
|
1951 ''' Return a description of the request - handle for the page title. |
|
7f9b942128a3
nicer page title
Richard Jones <richard@users.sourceforge.net>
parents:
1051
diff
changeset
|
1952 ''' |
|
1096
fa7df238e2d4
More cleaning up of configuration, and the "instance" -> "tracker" renaming.
Richard Jones <richard@users.sourceforge.net>
parents:
1080
diff
changeset
|
1953 s = [self.client.db.config.TRACKER_NAME] |
|
1061
7f9b942128a3
nicer page title
Richard Jones <richard@users.sourceforge.net>
parents:
1051
diff
changeset
|
1954 if self.classname: |
|
7f9b942128a3
nicer page title
Richard Jones <richard@users.sourceforge.net>
parents:
1051
diff
changeset
|
1955 if self.client.nodeid: |
|
7f9b942128a3
nicer page title
Richard Jones <richard@users.sourceforge.net>
parents:
1051
diff
changeset
|
1956 s.append('- %s%s'%(self.classname, self.client.nodeid)) |
|
7f9b942128a3
nicer page title
Richard Jones <richard@users.sourceforge.net>
parents:
1051
diff
changeset
|
1957 else: |
|
1123
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
1958 if self.template == 'item': |
|
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
1959 s.append('- new %s'%self.classname) |
|
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
1960 elif self.template == 'index': |
|
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
1961 s.append('- %s index'%self.classname) |
|
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
1962 else: |
|
644d3075c2df
more documentation, fixed bug in request/description
Richard Jones <richard@users.sourceforge.net>
parents:
1122
diff
changeset
|
1963 s.append('- %s %s'%(self.classname, self.template)) |
|
1061
7f9b942128a3
nicer page title
Richard Jones <richard@users.sourceforge.net>
parents:
1051
diff
changeset
|
1964 else: |
|
7f9b942128a3
nicer page title
Richard Jones <richard@users.sourceforge.net>
parents:
1051
diff
changeset
|
1965 s.append('- home') |
|
7f9b942128a3
nicer page title
Richard Jones <richard@users.sourceforge.net>
parents:
1051
diff
changeset
|
1966 return ' '.join(s) |
|
7f9b942128a3
nicer page title
Richard Jones <richard@users.sourceforge.net>
parents:
1051
diff
changeset
|
1967 |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1968 def __str__(self): |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1969 d = {} |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1970 d.update(self.__dict__) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1971 f = '' |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1972 for k in self.form.keys(): |
|
1202
01a143f9382e
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
1201
diff
changeset
|
1973 f += '\n %r=%r'%(k,handleListCGIValue(self.form[k])) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1974 d['form'] = f |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1975 e = '' |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1976 for k,v in self.env.items(): |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1977 e += '\n %r=%r'%(k, v) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1978 d['env'] = e |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1979 return ''' |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1980 form: %(form)s |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1981 base: %(base)r |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1982 classname: %(classname)r |
|
1041
c28603c9f831
Class help and generic class editing done.
Richard Jones <richard@users.sourceforge.net>
parents:
1030
diff
changeset
|
1983 template: %(template)r |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1984 columns: %(columns)r |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1985 sort: %(sort)r |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1986 group: %(group)r |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1987 filter: %(filter)r |
|
1016
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
1988 search_text: %(search_text)r |
|
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
1989 pagesize: %(pagesize)r |
|
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
1990 startwith: %(startwith)r |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1991 env: %(env)s |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1992 '''%d |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1993 |
| 1002 | 1994 def indexargs_form(self, columns=1, sort=1, group=1, filter=1, |
| 1995 filterspec=1): | |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1996 ''' return the current index args as form elements ''' |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1997 l = [] |
|
1421
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
1998 sc = self.special_char |
|
1952
c40ed9113285
Applied Stefan Seefeld's html4/xhtml patch with some changes.
Richard Jones <richard@users.sourceforge.net>
parents:
1932
diff
changeset
|
1999 s = self.input(type="hidden",name="%s",value="%s") |
| 1002 | 2000 if columns and self.columns: |
|
1421
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
2001 l.append(s%(sc+'columns', ','.join(self.columns))) |
|
1016
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
2002 if sort and self.sort[1] is not None: |
|
1003
f89b8d32291b
Hack hack hack...
Richard Jones <richard@users.sourceforge.net>
parents:
1002
diff
changeset
|
2003 if self.sort[0] == '-': |
|
f89b8d32291b
Hack hack hack...
Richard Jones <richard@users.sourceforge.net>
parents:
1002
diff
changeset
|
2004 val = '-'+self.sort[1] |
|
f89b8d32291b
Hack hack hack...
Richard Jones <richard@users.sourceforge.net>
parents:
1002
diff
changeset
|
2005 else: |
|
f89b8d32291b
Hack hack hack...
Richard Jones <richard@users.sourceforge.net>
parents:
1002
diff
changeset
|
2006 val = self.sort[1] |
|
1421
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
2007 l.append(s%(sc+'sort', val)) |
|
1016
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
2008 if group and self.group[1] is not None: |
|
1003
f89b8d32291b
Hack hack hack...
Richard Jones <richard@users.sourceforge.net>
parents:
1002
diff
changeset
|
2009 if self.group[0] == '-': |
|
f89b8d32291b
Hack hack hack...
Richard Jones <richard@users.sourceforge.net>
parents:
1002
diff
changeset
|
2010 val = '-'+self.group[1] |
|
f89b8d32291b
Hack hack hack...
Richard Jones <richard@users.sourceforge.net>
parents:
1002
diff
changeset
|
2011 else: |
|
f89b8d32291b
Hack hack hack...
Richard Jones <richard@users.sourceforge.net>
parents:
1002
diff
changeset
|
2012 val = self.group[1] |
|
1421
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
2013 l.append(s%(sc+'group', val)) |
| 1002 | 2014 if filter and self.filter: |
|
1421
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
2015 l.append(s%(sc+'filter', ','.join(self.filter))) |
| 1002 | 2016 if filterspec: |
| 2017 for k,v in self.filterspec.items(): | |
|
1353
013ae8c6c8b1
display of saved queries is now performed correctly
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1342
diff
changeset
|
2018 if type(v) == type([]): |
|
013ae8c6c8b1
display of saved queries is now performed correctly
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1342
diff
changeset
|
2019 l.append(s%(k, ','.join(v))) |
|
013ae8c6c8b1
display of saved queries is now performed correctly
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1342
diff
changeset
|
2020 else: |
|
013ae8c6c8b1
display of saved queries is now performed correctly
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1342
diff
changeset
|
2021 l.append(s%(k, v)) |
|
1016
d6c13142e7b9
Keep a cache of compiled PageTemplates.
Richard Jones <richard@users.sourceforge.net>
parents:
1008
diff
changeset
|
2022 if self.search_text: |
|
1421
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
2023 l.append(s%(sc+'search_text', self.search_text)) |
|
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
2024 l.append(s%(sc+'pagesize', self.pagesize)) |
|
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
2025 l.append(s%(sc+'startwith', self.startwith)) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2026 return '\n'.join(l) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2027 |
|
1124
1fc1f92c5f31
more doc, bugfix in Batch
Richard Jones <richard@users.sourceforge.net>
parents:
1123
diff
changeset
|
2028 def indexargs_url(self, url, args): |
|
1467
378081f066cc
registration is now a two-step process with confirmation from the
Richard Jones <richard@users.sourceforge.net>
parents:
1463
diff
changeset
|
2029 ''' Embed the current index args in a URL |
|
378081f066cc
registration is now a two-step process with confirmation from the
Richard Jones <richard@users.sourceforge.net>
parents:
1463
diff
changeset
|
2030 ''' |
|
1421
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
2031 sc = self.special_char |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2032 l = ['%s=%s'%(k,v) for k,v in args.items()] |
|
1467
378081f066cc
registration is now a two-step process with confirmation from the
Richard Jones <richard@users.sourceforge.net>
parents:
1463
diff
changeset
|
2033 |
|
378081f066cc
registration is now a two-step process with confirmation from the
Richard Jones <richard@users.sourceforge.net>
parents:
1463
diff
changeset
|
2034 # 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
|
2035 specials = {} |
|
378081f066cc
registration is now a two-step process with confirmation from the
Richard Jones <richard@users.sourceforge.net>
parents:
1463
diff
changeset
|
2036 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
|
2037 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
|
2038 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
|
2039 |
|
378081f066cc
registration is now a two-step process with confirmation from the
Richard Jones <richard@users.sourceforge.net>
parents:
1463
diff
changeset
|
2040 # 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
|
2041 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
|
2042 l.append(sc+'columns=%s'%(','.join(self.columns))) |
|
1467
378081f066cc
registration is now a two-step process with confirmation from the
Richard Jones <richard@users.sourceforge.net>
parents:
1463
diff
changeset
|
2043 if self.sort[1] is not None and not specials.has_key('sort'): |
|
1003
f89b8d32291b
Hack hack hack...
Richard Jones <richard@users.sourceforge.net>
parents:
1002
diff
changeset
|
2044 if self.sort[0] == '-': |
|
f89b8d32291b
Hack hack hack...
Richard Jones <richard@users.sourceforge.net>
parents:
1002
diff
changeset
|
2045 val = '-'+self.sort[1] |
|
f89b8d32291b
Hack hack hack...
Richard Jones <richard@users.sourceforge.net>
parents:
1002
diff
changeset
|
2046 else: |
|
f89b8d32291b
Hack hack hack...
Richard Jones <richard@users.sourceforge.net>
parents:
1002
diff
changeset
|
2047 val = self.sort[1] |
|
1421
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
2048 l.append(sc+'sort=%s'%val) |
|
1467
378081f066cc
registration is now a two-step process with confirmation from the
Richard Jones <richard@users.sourceforge.net>
parents:
1463
diff
changeset
|
2049 if self.group[1] is not None and not specials.has_key('group'): |
|
1003
f89b8d32291b
Hack hack hack...
Richard Jones <richard@users.sourceforge.net>
parents:
1002
diff
changeset
|
2050 if self.group[0] == '-': |
|
f89b8d32291b
Hack hack hack...
Richard Jones <richard@users.sourceforge.net>
parents:
1002
diff
changeset
|
2051 val = '-'+self.group[1] |
|
f89b8d32291b
Hack hack hack...
Richard Jones <richard@users.sourceforge.net>
parents:
1002
diff
changeset
|
2052 else: |
|
f89b8d32291b
Hack hack hack...
Richard Jones <richard@users.sourceforge.net>
parents:
1002
diff
changeset
|
2053 val = self.group[1] |
|
1421
90bb11eb40dc
oops, forgot the templating :)
Richard Jones <richard@users.sourceforge.net>
parents:
1417
diff
changeset
|
2054 l.append(sc+'group=%s'%val) |
|
1467
378081f066cc
registration is now a two-step process with confirmation from the
Richard Jones <richard@users.sourceforge.net>
parents:
1463
diff
changeset
|
2055 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
|
2056 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
|
2057 if self.search_text and not specials.has_key('search_text'): |
|
378081f066cc
registration is now a two-step process with confirmation from the
Richard Jones <richard@users.sourceforge.net>
parents:
1463
diff
changeset
|
2058 l.append(sc+'search_text=%s'%self.search_text) |
|
378081f066cc
registration is now a two-step process with confirmation from the
Richard Jones <richard@users.sourceforge.net>
parents:
1463
diff
changeset
|
2059 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
|
2060 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
|
2061 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
|
2062 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
|
2063 |
|
378081f066cc
registration is now a two-step process with confirmation from the
Richard Jones <richard@users.sourceforge.net>
parents:
1463
diff
changeset
|
2064 # finally, the remainder of the filter args in the request |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2065 for k,v in self.filterspec.items(): |
|
1028
16498e77e3ff
allow overiding of the index args roundup/cgi/templating.py
Richard Jones <richard@users.sourceforge.net>
parents:
1016
diff
changeset
|
2066 if not args.has_key(k): |
|
1353
013ae8c6c8b1
display of saved queries is now performed correctly
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1342
diff
changeset
|
2067 if type(v) == type([]): |
|
013ae8c6c8b1
display of saved queries is now performed correctly
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1342
diff
changeset
|
2068 l.append('%s=%s'%(k, ','.join(v))) |
|
013ae8c6c8b1
display of saved queries is now performed correctly
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1342
diff
changeset
|
2069 else: |
|
013ae8c6c8b1
display of saved queries is now performed correctly
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1342
diff
changeset
|
2070 l.append('%s=%s'%(k, v)) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2071 return '%s?%s'%(url, '&'.join(l)) |
|
1124
1fc1f92c5f31
more doc, bugfix in Batch
Richard Jones <richard@users.sourceforge.net>
parents:
1123
diff
changeset
|
2072 indexargs_href = indexargs_url |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2073 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2074 def base_javascript(self): |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2075 return ''' |
|
1824
24819ee5dfbc
First steps towards HTML4.01 Strict validation.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1773
diff
changeset
|
2076 <script type="text/javascript"> |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2077 submitted = false; |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2078 function submit_once() { |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2079 if (submitted) { |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2080 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
|
2081 event.returnValue = 0; // work-around for IE |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2082 return 0; |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2083 } |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2084 submitted = true; |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2085 return 1; |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2086 } |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2087 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2088 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
|
2089 HelpWin = window.open('%s' + helpurl, 'RoundupHelpWindow', 'scrollbars=yes,resizable=yes,toolbar=no,height='+height+',width='+width); |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2090 } |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2091 </script> |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2092 '''%self.base |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2093 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2094 def batch(self): |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2095 ''' Return a batch object for results from the "current search" |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2096 ''' |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2097 filterspec = self.filterspec |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2098 sort = self.sort |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2099 group = self.group |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2100 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2101 # get the list of ids we're batching over |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2102 klass = self.client.db.getclass(self.classname) |
| 1002 | 2103 if self.search_text: |
| 2104 matches = self.client.db.indexer.search( | |
| 2105 re.findall(r'\b\w{2,25}\b', self.search_text), klass) | |
| 2106 else: | |
| 2107 matches = None | |
| 2108 l = klass.filter(matches, filterspec, sort, group) | |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2109 |
|
1182
cb35cf3db0e0
don't create instances that aren't used
Richard Jones <richard@users.sourceforge.net>
parents:
1170
diff
changeset
|
2110 # 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
|
2111 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
|
2112 classname=self.classname) |
|
1004
5f12d3259f31
logout works better now
Richard Jones <richard@users.sourceforge.net>
parents:
1003
diff
changeset
|
2113 |
|
5f12d3259f31
logout works better now
Richard Jones <richard@users.sourceforge.net>
parents:
1003
diff
changeset
|
2114 # 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
|
2115 # Acquisition and add a couple of useful methods |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2116 class Batch(ZTUtils.Batch): |
|
1122
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
2117 ''' Use me to turn a list of items, or item ids of a given class, into a |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
2118 series of batches. |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
2119 |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
2120 ========= ======================================================== |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
2121 Parameter Usage |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
2122 ========= ======================================================== |
|
1182
cb35cf3db0e0
don't create instances that aren't used
Richard Jones <richard@users.sourceforge.net>
parents:
1170
diff
changeset
|
2123 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
|
2124 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
|
2125 size how big to make the sequence. |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
2126 start where to start (0-indexed) in the sequence. |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
2127 end where to end (0-indexed) in the sequence. |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
2128 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
|
2129 value, then it is combined with this batch |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
2130 overlap the number of items shared between adjacent batches |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
2131 ========= ======================================================== |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
2132 |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
2133 Attributes: Note that the "start" attribute, unlike the |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
2134 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
|
2135 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
|
2136 the batch. |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
2137 |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
2138 "sequence_length" is the length of the original, unbatched, sequence. |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
2139 ''' |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
2140 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
|
2141 overlap=0, classname=None): |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2142 self.client = client |
| 1002 | 2143 self.last_index = self.last_item = None |
| 2144 self.current_item = None | |
|
1182
cb35cf3db0e0
don't create instances that aren't used
Richard Jones <richard@users.sourceforge.net>
parents:
1170
diff
changeset
|
2145 self.classname = classname |
|
1124
1fc1f92c5f31
more doc, bugfix in Batch
Richard Jones <richard@users.sourceforge.net>
parents:
1123
diff
changeset
|
2146 self.sequence_length = len(sequence) |
|
1122
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
2147 ZTUtils.Batch.__init__(self, sequence, size, start, end, orphan, |
|
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
2148 overlap) |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2149 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2150 # overwrite so we can late-instantiate the HTMLItem instance |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2151 def __getitem__(self, index): |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2152 if index < 0: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2153 if index + self.end < self.first: raise IndexError, index |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2154 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
|
2155 |
|
1120
c26471971d18
Exposed the Batch mechanism through the top-level "utils" variable.
Richard Jones <richard@users.sourceforge.net>
parents:
1113
diff
changeset
|
2156 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
|
2157 raise IndexError, index |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2158 |
| 1002 | 2159 # move the last_item along - but only if the fetched index changes |
| 2160 # (for some reason, index 0 is fetched twice) | |
| 2161 if index != self.last_index: | |
| 2162 self.last_item = self.current_item | |
| 2163 self.last_index = index | |
| 2164 | |
|
1182
cb35cf3db0e0
don't create instances that aren't used
Richard Jones <richard@users.sourceforge.net>
parents:
1170
diff
changeset
|
2165 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
|
2166 if self.classname: |
|
cb35cf3db0e0
don't create instances that aren't used
Richard Jones <richard@users.sourceforge.net>
parents:
1170
diff
changeset
|
2167 # 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
|
2168 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
|
2169 self.current_item = item |
|
cb35cf3db0e0
don't create instances that aren't used
Richard Jones <richard@users.sourceforge.net>
parents:
1170
diff
changeset
|
2170 return item |
| 1002 | 2171 |
| 2172 def propchanged(self, property): | |
| 2173 ''' Detect if the property marked as being the group property | |
| 2174 changed in the last iteration fetch | |
| 2175 ''' | |
| 2176 if (self.last_item is None or | |
| 2177 self.last_item[property] != self.current_item[property]): | |
| 2178 return 1 | |
| 2179 return 0 | |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2180 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2181 # override these 'cos we don't have access to acquisition |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2182 def previous(self): |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2183 if self.start == 1: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2184 return None |
|
1122
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
2185 return Batch(self.client, self._sequence, self._size, |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2186 self.first - self._size + self.overlap, 0, self.orphan, |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2187 self.overlap) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2188 |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2189 def next(self): |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2190 try: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2191 self._sequence[self.end] |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2192 except IndexError: |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2193 return None |
|
1122
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
2194 return Batch(self.client, self._sequence, self._size, |
|
985
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2195 self.end - self.overlap, 0, self.orphan, self.overlap) |
|
55ab0c5b49f9
New CGI interface support
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2196 |
|
2640
b01eca163779
The "type" parameter is supposed to be optional
Richard Jones <richard@users.sourceforge.net>
parents:
2637
diff
changeset
|
2197 class TemplatingUtil: |
|
b01eca163779
The "type" parameter is supposed to be optional
Richard Jones <richard@users.sourceforge.net>
parents:
2637
diff
changeset
|
2198 def __init__(self, utils, callable): |
|
b01eca163779
The "type" parameter is supposed to be optional
Richard Jones <richard@users.sourceforge.net>
parents:
2637
diff
changeset
|
2199 self.utils = utils |
|
b01eca163779
The "type" parameter is supposed to be optional
Richard Jones <richard@users.sourceforge.net>
parents:
2637
diff
changeset
|
2200 self.callable = callable |
|
b01eca163779
The "type" parameter is supposed to be optional
Richard Jones <richard@users.sourceforge.net>
parents:
2637
diff
changeset
|
2201 def __call__(self, *args, **kw): |
|
b01eca163779
The "type" parameter is supposed to be optional
Richard Jones <richard@users.sourceforge.net>
parents:
2637
diff
changeset
|
2202 args = (self.utils,)+args |
|
b01eca163779
The "type" parameter is supposed to be optional
Richard Jones <richard@users.sourceforge.net>
parents:
2637
diff
changeset
|
2203 return self.callable(*args, **kw) |
|
b01eca163779
The "type" parameter is supposed to be optional
Richard Jones <richard@users.sourceforge.net>
parents:
2637
diff
changeset
|
2204 |
|
1120
c26471971d18
Exposed the Batch mechanism through the top-level "utils" variable.
Richard Jones <richard@users.sourceforge.net>
parents:
1113
diff
changeset
|
2205 class TemplatingUtils: |
|
c26471971d18
Exposed the Batch mechanism through the top-level "utils" variable.
Richard Jones <richard@users.sourceforge.net>
parents:
1113
diff
changeset
|
2206 ''' Utilities for templating |
|
c26471971d18
Exposed the Batch mechanism through the top-level "utils" variable.
Richard Jones <richard@users.sourceforge.net>
parents:
1113
diff
changeset
|
2207 ''' |
|
c26471971d18
Exposed the Batch mechanism through the top-level "utils" variable.
Richard Jones <richard@users.sourceforge.net>
parents:
1113
diff
changeset
|
2208 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
|
2209 self.client = client |
|
1122
ddbc5d1ad94f
more batching cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1120
diff
changeset
|
2210 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
|
2211 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
|
2212 overlap) |
|
c26471971d18
Exposed the Batch mechanism through the top-level "utils" variable.
Richard Jones <richard@users.sourceforge.net>
parents:
1113
diff
changeset
|
2213 |
|
2180
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
2214 def url_quote(self, url): |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
2215 '''URL-quote the supplied text.''' |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
2216 return urllib.quote(url) |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
2217 |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
2218 def html_quote(self, html): |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
2219 '''HTML-quote the supplied text.''' |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
2220 return cgi.escape(url) |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2170
diff
changeset
|
2221 |
|
2640
b01eca163779
The "type" parameter is supposed to be optional
Richard Jones <richard@users.sourceforge.net>
parents:
2637
diff
changeset
|
2222 def __getattr__(self, name): |
|
b01eca163779
The "type" parameter is supposed to be optional
Richard Jones <richard@users.sourceforge.net>
parents:
2637
diff
changeset
|
2223 '''Try the tracker's templating_utils.''' |
|
b01eca163779
The "type" parameter is supposed to be optional
Richard Jones <richard@users.sourceforge.net>
parents:
2637
diff
changeset
|
2224 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
|
2225 # backwards-compatibility |
|
b01eca163779
The "type" parameter is supposed to be optional
Richard Jones <richard@users.sourceforge.net>
parents:
2637
diff
changeset
|
2226 raise AttributeError, name |
|
b01eca163779
The "type" parameter is supposed to be optional
Richard Jones <richard@users.sourceforge.net>
parents:
2637
diff
changeset
|
2227 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
|
2228 raise AttributeError, name |
|
b01eca163779
The "type" parameter is supposed to be optional
Richard Jones <richard@users.sourceforge.net>
parents:
2637
diff
changeset
|
2229 return TemplatingUtil(self, self.client.instance.templating_utils[name]) |
|
b01eca163779
The "type" parameter is supposed to be optional
Richard Jones <richard@users.sourceforge.net>
parents:
2637
diff
changeset
|
2230 |
|
2561
0dd3dca6bd01
always use translation service set in the tracker client instance;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2558
diff
changeset
|
2231 # vim: set et sts=4 sw=4 : |
