Mercurial > p > roundup > code
annotate roundup/template_funcs.py @ 936:57d09949380e
cleanup
| author | Richard Jones <richard@users.sourceforge.net> |
|---|---|
| date | Thu, 15 Aug 2002 00:40:10 +0000 |
| parents | fdcf16b444a9 |
| children | d435bf1ecd8d |
| rev | line source |
|---|---|
| 936 | 1 # |
| 2 # $Id: template_funcs.py,v 1.2 2002-08-15 00:40:10 richard Exp $ | |
| 3 # | |
|
934
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
4 import hyperdb, date, password |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
5 from i18n import _ |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
6 import htmltemplate |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
7 import cgi, os, StringIO, urllib, types |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
8 |
| 936 | 9 def do_plain(client, classname, cl, props, nodeid, filterspec, property, |
| 10 escape=0, lookup=1): | |
|
934
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
11 ''' display a String property directly; |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
12 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
13 display a Date property in a specified time zone with an option to |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
14 omit the time from the date stamp; |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
15 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
16 for a Link or Multilink property, display the key strings of the |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
17 linked nodes (or the ids if the linked class has no key property) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
18 when the lookup argument is true, otherwise just return the |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
19 linked ids |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
20 ''' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
21 if not nodeid and client.form is None: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
22 return _('[Field: not called from item]') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
23 propclass = props[property] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
24 value = determine_value(cl, props, nodeid, filterspec, property) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
25 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
26 if isinstance(propclass, hyperdb.Password): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
27 value = _('*encrypted*') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
28 elif isinstance(propclass, hyperdb.Boolean): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
29 value = value and "Yes" or "No" |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
30 elif isinstance(propclass, hyperdb.Link): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
31 if value: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
32 if lookup: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
33 linkcl = client.db.classes[propclass.classname] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
34 k = linkcl.labelprop(1) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
35 value = linkcl.get(value, k) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
36 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
37 value = _('[unselected]') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
38 elif isinstance(propclass, hyperdb.Multilink): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
39 if value: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
40 if lookup: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
41 linkcl = client.db.classes[propclass.classname] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
42 k = linkcl.labelprop(1) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
43 labels = [] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
44 for v in value: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
45 labels.append(linkcl.get(v, k)) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
46 value = ', '.join(labels) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
47 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
48 value = ', '.join(value) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
49 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
50 value = '' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
51 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
52 value = str(value) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
53 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
54 if escape: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
55 value = cgi.escape(value) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
56 return value |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
57 |
| 936 | 58 def do_stext(client, classname, cl, props, nodeid, filterspec, property, |
| 59 escape=0): | |
|
934
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
60 '''Render as structured text using the StructuredText module |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
61 (see above for details) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
62 ''' |
| 936 | 63 s = do_plain(client, classname, cl, props, nodeid, filterspec, property, |
| 64 escape=escape) | |
|
934
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
65 if not StructuredText: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
66 return s |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
67 return StructuredText(s,level=1,header=0) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
68 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
69 def determine_value(cl, props, nodeid, filterspec, property): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
70 '''determine the value of a property using the node, form or |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
71 filterspec |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
72 ''' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
73 if nodeid: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
74 value = cl.get(nodeid, property, None) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
75 if value is None: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
76 if isinstance(props[property], hyperdb.Multilink): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
77 return [] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
78 return '' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
79 return value |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
80 elif filterspec is not None: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
81 if isinstance(props[property], hyperdb.Multilink): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
82 return filterspec.get(property, []) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
83 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
84 return filterspec.get(property, '') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
85 # TODO: pull the value from the form |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
86 if isinstance(props[property], hyperdb.Multilink): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
87 return [] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
88 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
89 return '' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
90 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
91 def make_sort_function(client, filterspec, classname): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
92 '''Make a sort function for a given class |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
93 ''' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
94 linkcl = client.db.getclass(classname) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
95 if linkcl.getprops().has_key('order'): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
96 sort_on = 'order' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
97 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
98 sort_on = linkcl.labelprop() |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
99 def sortfunc(a, b, linkcl=linkcl, sort_on=sort_on): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
100 return cmp(linkcl.get(a, sort_on), linkcl.get(b, sort_on)) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
101 return sortfunc |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
102 |
| 936 | 103 def do_field(client, classname, cl, props, nodeid, filterspec, property, |
| 104 size=None, showid=0): | |
|
934
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
105 ''' display a property like the plain displayer, but in a text field |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
106 to be edited |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
107 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
108 Note: if you would prefer an option list style display for |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
109 link or multilink editing, use menu(). |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
110 ''' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
111 if not nodeid and client.form is None and filterspec is None: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
112 return _('[Field: not called from item]') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
113 if size is None: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
114 size = 30 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
115 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
116 propclass = props[property] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
117 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
118 # get the value |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
119 value = determine_value(cl, props, nodeid, filterspec, property) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
120 # now display |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
121 if (isinstance(propclass, hyperdb.String) or |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
122 isinstance(propclass, hyperdb.Date) or |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
123 isinstance(propclass, hyperdb.Interval)): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
124 if value is None: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
125 value = '' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
126 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
127 value = cgi.escape(str(value)) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
128 value = '"'.join(value.split('"')) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
129 s = '<input name="%s" value="%s" size="%s">'%(property, value, size) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
130 elif isinstance(propclass, hyperdb.Boolean): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
131 checked = value and "checked" or "" |
| 936 | 132 s = '<input type="radio" name="%s" value="yes" %s>Yes'%(property, |
| 133 checked) | |
|
934
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
134 if checked: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
135 checked = "" |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
136 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
137 checked = "checked" |
| 936 | 138 s += '<input type="radio" name="%s" value="no" %s>No'%(property, |
| 139 checked) | |
|
934
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
140 elif isinstance(propclass, hyperdb.Number): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
141 s = '<input name="%s" value="%s" size="%s">'%(property, value, size) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
142 elif isinstance(propclass, hyperdb.Password): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
143 s = '<input type="password" name="%s" size="%s">'%(property, size) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
144 elif isinstance(propclass, hyperdb.Link): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
145 linkcl = client.db.getclass(propclass.classname) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
146 if linkcl.getprops().has_key('order'): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
147 sort_on = 'order' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
148 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
149 sort_on = linkcl.labelprop() |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
150 options = linkcl.filter(None, {}, [sort_on], []) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
151 # TODO: make this a field display, not a menu one! |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
152 l = ['<select name="%s">'%property] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
153 k = linkcl.labelprop(1) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
154 if value is None: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
155 s = 'selected ' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
156 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
157 s = '' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
158 l.append(_('<option %svalue="-1">- no selection -</option>')%s) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
159 for optionid in options: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
160 option = linkcl.get(optionid, k) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
161 s = '' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
162 if optionid == value: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
163 s = 'selected ' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
164 if showid: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
165 lab = '%s%s: %s'%(propclass.classname, optionid, option) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
166 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
167 lab = option |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
168 if size is not None and len(lab) > size: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
169 lab = lab[:size-3] + '...' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
170 lab = cgi.escape(lab) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
171 l.append('<option %svalue="%s">%s</option>'%(s, optionid, lab)) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
172 l.append('</select>') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
173 s = '\n'.join(l) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
174 elif isinstance(propclass, hyperdb.Multilink): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
175 sortfunc = make_sort_function(client, filterspec, propclass.classname) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
176 linkcl = client.db.getclass(propclass.classname) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
177 if value: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
178 value.sort(sortfunc) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
179 # map the id to the label property |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
180 if not showid: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
181 k = linkcl.labelprop(1) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
182 value = [linkcl.get(v, k) for v in value] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
183 value = cgi.escape(','.join(value)) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
184 s = '<input name="%s" size="%s" value="%s">'%(property, size, value) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
185 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
186 s = _('Plain: bad propclass "%(propclass)s"')%locals() |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
187 return s |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
188 |
| 936 | 189 def do_multiline(client, classname, cl, props, nodeid, filterspec, property, |
| 190 rows=5, cols=40): | |
|
934
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
191 ''' display a string property in a multiline text edit field |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
192 ''' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
193 if not nodeid and client.form is None and filterspec is None: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
194 return _('[Multiline: not called from item]') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
195 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
196 propclass = props[property] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
197 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
198 # make sure this is a link property |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
199 if not isinstance(propclass, hyperdb.String): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
200 return _('[Multiline: not a string]') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
201 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
202 # get the value |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
203 value = determine_value(cl, props, nodeid, filterspec, property) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
204 if value is None: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
205 value = '' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
206 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
207 # display |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
208 return '<textarea name="%s" rows="%s" cols="%s">%s</textarea>'%( |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
209 property, rows, cols, value) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
210 |
| 936 | 211 def do_menu(client, classname, cl, props, nodeid, filterspec, property, |
| 212 size=None, height=None, showid=0, additional=[], **conditions): | |
|
934
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
213 ''' For a Link/Multilink property, display a menu of the available |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
214 choices |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
215 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
216 If the additional properties are specified, they will be |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
217 included in the text of each option in (brackets, with, commas). |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
218 ''' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
219 if not nodeid and client.form is None and filterspec is None: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
220 return _('[Field: not called from item]') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
221 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
222 propclass = props[property] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
223 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
224 # make sure this is a link property |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
225 if not (isinstance(propclass, hyperdb.Link) or |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
226 isinstance(propclass, hyperdb.Multilink)): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
227 return _('[Menu: not a link]') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
228 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
229 # sort function |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
230 sortfunc = make_sort_function(client, filterspec, propclass.classname) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
231 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
232 # get the value |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
233 value = determine_value(cl, props, nodeid, filterspec, property) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
234 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
235 # display |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
236 if isinstance(propclass, hyperdb.Multilink): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
237 linkcl = client.db.getclass(propclass.classname) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
238 if linkcl.getprops().has_key('order'): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
239 sort_on = 'order' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
240 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
241 sort_on = linkcl.labelprop() |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
242 options = linkcl.filter(None, conditions, [sort_on], []) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
243 height = height or min(len(options), 7) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
244 l = ['<select multiple name="%s" size="%s">'%(property, height)] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
245 k = linkcl.labelprop(1) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
246 for optionid in options: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
247 option = linkcl.get(optionid, k) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
248 s = '' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
249 if optionid in value or option in value: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
250 s = 'selected ' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
251 if showid: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
252 lab = '%s%s: %s'%(propclass.classname, optionid, option) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
253 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
254 lab = option |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
255 if size is not None and len(lab) > size: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
256 lab = lab[:size-3] + '...' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
257 if additional: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
258 m = [] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
259 for propname in additional: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
260 m.append(linkcl.get(optionid, propname)) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
261 lab = lab + ' (%s)'%', '.join(m) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
262 lab = cgi.escape(lab) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
263 l.append('<option %svalue="%s">%s</option>'%(s, optionid, |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
264 lab)) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
265 l.append('</select>') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
266 return '\n'.join(l) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
267 if isinstance(propclass, hyperdb.Link): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
268 # force the value to be a single choice |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
269 if type(value) is types.ListType: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
270 value = value[0] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
271 linkcl = client.db.getclass(propclass.classname) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
272 l = ['<select name="%s">'%property] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
273 k = linkcl.labelprop(1) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
274 s = '' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
275 if value is None: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
276 s = 'selected ' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
277 l.append(_('<option %svalue="-1">- no selection -</option>')%s) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
278 if linkcl.getprops().has_key('order'): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
279 sort_on = 'order' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
280 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
281 sort_on = linkcl.labelprop() |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
282 options = linkcl.filter(None, conditions, [sort_on], []) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
283 for optionid in options: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
284 option = linkcl.get(optionid, k) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
285 s = '' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
286 if value in [optionid, option]: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
287 s = 'selected ' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
288 if showid: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
289 lab = '%s%s: %s'%(propclass.classname, optionid, option) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
290 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
291 lab = option |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
292 if size is not None and len(lab) > size: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
293 lab = lab[:size-3] + '...' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
294 if additional: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
295 m = [] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
296 for propname in additional: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
297 m.append(linkcl.get(optionid, propname)) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
298 lab = lab + ' (%s)'%', '.join(map(str, m)) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
299 lab = cgi.escape(lab) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
300 l.append('<option %svalue="%s">%s</option>'%(s, optionid, lab)) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
301 l.append('</select>') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
302 return '\n'.join(l) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
303 return _('[Menu: not a link]') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
304 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
305 #XXX deviates from spec |
| 936 | 306 def do_link(client, classname, cl, props, nodeid, filterspec, property=None, |
| 307 is_download=0, showid=0): | |
|
934
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
308 '''For a Link or Multilink property, display the names of the linked |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
309 nodes, hyperlinked to the item views on those nodes. |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
310 For other properties, link to this node with the property as the |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
311 text. |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
312 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
313 If is_download is true, append the property value to the generated |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
314 URL so that the link may be used as a download link and the |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
315 downloaded file name is correct. |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
316 ''' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
317 if not nodeid and client.form is None: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
318 return _('[Link: not called from item]') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
319 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
320 # get the value |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
321 value = determine_value(cl, props, nodeid, filterspec, property) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
322 propclass = props[property] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
323 if isinstance(propclass, hyperdb.Boolean): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
324 value = value and "Yes" or "No" |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
325 elif isinstance(propclass, hyperdb.Link): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
326 if value in ('', None, []): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
327 return _('[no %(propname)s]')%{'propname':property.capitalize()} |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
328 linkname = propclass.classname |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
329 linkcl = client.db.getclass(linkname) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
330 k = linkcl.labelprop(1) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
331 linkvalue = cgi.escape(str(linkcl.get(value, k))) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
332 if showid: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
333 label = value |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
334 title = ' title="%s"'%linkvalue |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
335 # note ... this should be urllib.quote(linkcl.get(value, k)) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
336 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
337 label = linkvalue |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
338 title = '' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
339 if is_download: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
340 return '<a href="%s%s/%s"%s>%s</a>'%(linkname, value, |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
341 linkvalue, title, label) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
342 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
343 return '<a href="%s%s"%s>%s</a>'%(linkname, value, title, label) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
344 elif isinstance(propclass, hyperdb.Multilink): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
345 if value in ('', None, []): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
346 return _('[no %(propname)s]')%{'propname':property.capitalize()} |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
347 linkname = propclass.classname |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
348 linkcl = client.db.getclass(linkname) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
349 k = linkcl.labelprop(1) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
350 l = [] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
351 for value in value: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
352 linkvalue = cgi.escape(str(linkcl.get(value, k))) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
353 if showid: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
354 label = value |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
355 title = ' title="%s"'%linkvalue |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
356 # note ... this should be urllib.quote(linkcl.get(value, k)) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
357 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
358 label = linkvalue |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
359 title = '' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
360 if is_download: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
361 l.append('<a href="%s%s/%s"%s>%s</a>'%(linkname, value, |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
362 linkvalue, title, label)) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
363 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
364 l.append('<a href="%s%s"%s>%s</a>'%(linkname, value, |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
365 title, label)) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
366 return ', '.join(l) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
367 if is_download: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
368 if value in ('', None, []): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
369 return _('[no %(propname)s]')%{'propname':property.capitalize()} |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
370 return '<a href="%s%s/%s">%s</a>'%(classname, nodeid, |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
371 value, value) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
372 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
373 if value in ('', None, []): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
374 value = _('[no %(propname)s]')%{'propname':property.capitalize()} |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
375 return '<a href="%s%s">%s</a>'%(classname, nodeid, value) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
376 |
| 936 | 377 def do_count(client, classname, cl, props, nodeid, filterspec, property, |
| 378 **args): | |
|
934
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
379 ''' for a Multilink property, display a count of the number of links in |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
380 the list |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
381 ''' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
382 if not nodeid: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
383 return _('[Count: not called from item]') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
384 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
385 propclass = props[property] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
386 if not isinstance(propclass, hyperdb.Multilink): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
387 return _('[Count: not a Multilink]') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
388 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
389 # figure the length then... |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
390 value = cl.get(nodeid, property) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
391 return str(len(value)) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
392 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
393 # XXX pretty is definitely new ;) |
| 936 | 394 def do_reldate(client, classname, cl, props, nodeid, filterspec, property, |
| 395 pretty=0): | |
|
934
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
396 ''' display a Date property in terms of an interval relative to the |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
397 current date (e.g. "+ 3w", "- 2d"). |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
398 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
399 with the 'pretty' flag, make it pretty |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
400 ''' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
401 if not nodeid and client.form is None: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
402 return _('[Reldate: not called from item]') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
403 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
404 propclass = props[property] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
405 if not isinstance(propclass, hyperdb.Date): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
406 return _('[Reldate: not a Date]') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
407 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
408 if nodeid: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
409 value = cl.get(nodeid, property) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
410 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
411 return '' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
412 if not value: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
413 return '' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
414 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
415 # figure the interval |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
416 interval = date.Date('.') - value |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
417 if pretty: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
418 if not nodeid: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
419 return _('now') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
420 return interval.pretty() |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
421 return str(interval) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
422 |
| 936 | 423 def do_download(client, classname, cl, props, nodeid, filterspec, property, |
| 424 **args): | |
|
934
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
425 ''' show a Link("file") or Multilink("file") property using links that |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
426 allow you to download files |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
427 ''' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
428 if not nodeid: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
429 return _('[Download: not called from item]') |
| 936 | 430 return do_link(client, classname, cl, props, nodeid, filterspec, property, |
| 431 is_download=1) | |
|
934
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
432 |
| 936 | 433 def do_checklist(client, classname, cl, props, nodeid, filterspec, property, |
| 434 sortby=None): | |
|
934
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
435 ''' for a Link or Multilink property, display checkboxes for the |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
436 available choices to permit filtering |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
437 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
438 sort the checklist by the argument (+/- property name) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
439 ''' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
440 propclass = props[property] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
441 if (not isinstance(propclass, hyperdb.Link) and not |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
442 isinstance(propclass, hyperdb.Multilink)): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
443 return _('[Checklist: not a link]') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
444 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
445 # get our current checkbox state |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
446 if nodeid: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
447 # get the info from the node - make sure it's a list |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
448 if isinstance(propclass, hyperdb.Link): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
449 value = [cl.get(nodeid, property)] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
450 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
451 value = cl.get(nodeid, property) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
452 elif filterspec is not None: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
453 # get the state from the filter specification (always a list) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
454 value = filterspec.get(property, []) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
455 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
456 # it's a new node, so there's no state |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
457 value = [] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
458 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
459 # so we can map to the linked node's "lable" property |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
460 linkcl = client.db.getclass(propclass.classname) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
461 l = [] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
462 k = linkcl.labelprop(1) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
463 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
464 # build list of options and then sort it, either |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
465 # by id + label or <sortby>-value + label; |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
466 # a minus reverses the sort order, while + or no |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
467 # prefix sort in increasing order |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
468 reversed = 0 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
469 if sortby: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
470 if sortby[0] == '-': |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
471 reversed = 1 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
472 sortby = sortby[1:] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
473 elif sortby[0] == '+': |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
474 sortby = sortby[1:] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
475 options = [] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
476 for optionid in linkcl.list(): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
477 if sortby: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
478 sortval = linkcl.get(optionid, sortby) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
479 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
480 sortval = int(optionid) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
481 option = cgi.escape(str(linkcl.get(optionid, k))) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
482 options.append((sortval, option, optionid)) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
483 options.sort() |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
484 if reversed: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
485 options.reverse() |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
486 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
487 # build checkboxes |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
488 for sortval, option, optionid in options: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
489 if optionid in value or option in value: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
490 checked = 'checked' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
491 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
492 checked = '' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
493 l.append('%s:<input type="checkbox" %s name="%s" value="%s">'%( |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
494 option, checked, property, option)) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
495 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
496 # for Links, allow the "unselected" option too |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
497 if isinstance(propclass, hyperdb.Link): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
498 if value is None or '-1' in value: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
499 checked = 'checked' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
500 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
501 checked = '' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
502 l.append(_('[unselected]:<input type="checkbox" %s name="%s" ' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
503 'value="-1">')%(checked, property)) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
504 return '\n'.join(l) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
505 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
506 def do_note(client, classname, cl, props, nodeid, filterspec, rows=5, cols=80): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
507 ''' display a "note" field, which is a text area for entering a note to |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
508 go along with a change. |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
509 ''' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
510 # TODO: pull the value from the form |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
511 return '<textarea name="__note" wrap="hard" rows=%s cols=%s>'\ |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
512 '</textarea>'%(rows, cols) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
513 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
514 # XXX new function |
| 936 | 515 def do_list(client, classname, cl, props, nodeid, filterspec, property, |
| 516 reverse=0, xtracols=None): | |
|
934
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
517 ''' list the items specified by property using the standard index for |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
518 the class |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
519 ''' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
520 propcl = props[property] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
521 if not isinstance(propcl, hyperdb.Multilink): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
522 return _('[List: not a Multilink]') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
523 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
524 value = determine_value(cl, props, nodeid, filterspec, property) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
525 if not value: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
526 return '' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
527 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
528 # sort, possibly revers and then re-stringify |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
529 value = map(int, value) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
530 value.sort() |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
531 if reverse: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
532 value.reverse() |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
533 value = map(str, value) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
534 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
535 # render the sub-index into a string |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
536 fp = StringIO.StringIO() |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
537 try: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
538 write_save = client.write |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
539 client.write = fp.write |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
540 client.listcontext = ('%s%s' % (classname, nodeid), property) |
| 936 | 541 index = htmltemplate.IndexTemplate(client, client.instance.TEMPLATES, |
| 542 propcl.classname) | |
|
934
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
543 index.render(nodeids=value, show_display_form=0, xtracols=xtracols) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
544 finally: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
545 client.listcontext = None |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
546 client.write = write_save |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
547 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
548 return fp.getvalue() |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
549 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
550 # XXX new function |
| 936 | 551 def do_history(client, classname, cl, props, nodeid, filterspec, |
| 552 direction='descending'): | |
|
934
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
553 ''' list the history of the item |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
554 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
555 If "direction" is 'descending' then the most recent event will |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
556 be displayed first. If it is 'ascending' then the oldest event |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
557 will be displayed first. |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
558 ''' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
559 if nodeid is None: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
560 return _("[History: node doesn't exist]") |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
561 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
562 l = ['<table width=100% border=0 cellspacing=0 cellpadding=2>', |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
563 '<tr class="list-header">', |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
564 _('<th align=left><span class="list-item">Date</span></th>'), |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
565 _('<th align=left><span class="list-item">User</span></th>'), |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
566 _('<th align=left><span class="list-item">Action</span></th>'), |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
567 _('<th align=left><span class="list-item">Args</span></th>'), |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
568 '</tr>'] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
569 comments = {} |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
570 history = cl.history(nodeid) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
571 history.sort() |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
572 if direction == 'descending': |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
573 history.reverse() |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
574 for id, evt_date, user, action, args in history: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
575 date_s = str(evt_date).replace("."," ") |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
576 arg_s = '' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
577 if action == 'link' and type(args) == type(()): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
578 if len(args) == 3: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
579 linkcl, linkid, key = args |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
580 arg_s += '<a href="%s%s">%s%s %s</a>'%(linkcl, linkid, |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
581 linkcl, linkid, key) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
582 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
583 arg_s = str(args) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
584 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
585 elif action == 'unlink' and type(args) == type(()): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
586 if len(args) == 3: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
587 linkcl, linkid, key = args |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
588 arg_s += '<a href="%s%s">%s%s %s</a>'%(linkcl, linkid, |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
589 linkcl, linkid, key) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
590 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
591 arg_s = str(args) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
592 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
593 elif type(args) == type({}): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
594 cell = [] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
595 for k in args.keys(): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
596 # try to get the relevant property and treat it |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
597 # specially |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
598 try: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
599 prop = props[k] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
600 except: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
601 prop = None |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
602 if prop is not None: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
603 if args[k] and (isinstance(prop, hyperdb.Multilink) or |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
604 isinstance(prop, hyperdb.Link)): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
605 # figure what the link class is |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
606 classname = prop.classname |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
607 try: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
608 linkcl = client.db.getclass(classname) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
609 except KeyError: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
610 labelprop = None |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
611 comments[classname] = _('''The linked class |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
612 %(classname)s no longer exists''')%locals() |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
613 labelprop = linkcl.labelprop(1) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
614 hrefable = os.path.exists( |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
615 os.path.join(client.instance.TEMPLATES, classname+'.item')) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
616 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
617 if isinstance(prop, hyperdb.Multilink) and \ |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
618 len(args[k]) > 0: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
619 ml = [] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
620 for linkid in args[k]: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
621 label = classname + linkid |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
622 # if we have a label property, try to use it |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
623 # TODO: test for node existence even when |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
624 # there's no labelprop! |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
625 try: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
626 if labelprop is not None: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
627 label = linkcl.get(linkid, labelprop) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
628 except IndexError: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
629 comments['no_link'] = _('''<strike>The |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
630 linked node no longer |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
631 exists</strike>''') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
632 ml.append('<strike>%s</strike>'%label) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
633 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
634 if hrefable: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
635 ml.append('<a href="%s%s">%s</a>'%( |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
636 classname, linkid, label)) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
637 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
638 ml.append(label) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
639 cell.append('%s:\n %s'%(k, ',\n '.join(ml))) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
640 elif isinstance(prop, hyperdb.Link) and args[k]: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
641 label = classname + args[k] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
642 # if we have a label property, try to use it |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
643 # TODO: test for node existence even when |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
644 # there's no labelprop! |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
645 if labelprop is not None: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
646 try: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
647 label = linkcl.get(args[k], labelprop) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
648 except IndexError: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
649 comments['no_link'] = _('''<strike>The |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
650 linked node no longer |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
651 exists</strike>''') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
652 cell.append(' <strike>%s</strike>,\n'%label) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
653 # "flag" this is done .... euwww |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
654 label = None |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
655 if label is not None: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
656 if hrefable: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
657 cell.append('%s: <a href="%s%s">%s</a>\n'%(k, |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
658 classname, args[k], label)) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
659 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
660 cell.append('%s: %s' % (k,label)) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
661 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
662 elif isinstance(prop, hyperdb.Date) and args[k]: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
663 d = date.Date(args[k]) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
664 cell.append('%s: %s'%(k, str(d))) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
665 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
666 elif isinstance(prop, hyperdb.Interval) and args[k]: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
667 d = date.Interval(args[k]) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
668 cell.append('%s: %s'%(k, str(d))) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
669 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
670 elif isinstance(prop, hyperdb.String) and args[k]: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
671 cell.append('%s: %s'%(k, cgi.escape(args[k]))) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
672 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
673 elif not args[k]: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
674 cell.append('%s: (no value)\n'%k) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
675 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
676 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
677 cell.append('%s: %s\n'%(k, str(args[k]))) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
678 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
679 # property no longer exists |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
680 comments['no_exist'] = _('''<em>The indicated property |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
681 no longer exists</em>''') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
682 cell.append('<em>%s: %s</em>\n'%(k, str(args[k]))) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
683 arg_s = '<br />'.join(cell) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
684 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
685 # unkown event!! |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
686 comments['unknown'] = _('''<strong><em>This event is not |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
687 handled by the history display!</em></strong>''') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
688 arg_s = '<strong><em>' + str(args) + '</em></strong>' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
689 date_s = date_s.replace(' ', ' ') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
690 l.append('<tr><td nowrap valign=top>%s</td><td valign=top>%s</td>' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
691 '<td valign=top>%s</td><td valign=top>%s</td></tr>'%(date_s, |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
692 user, action, arg_s)) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
693 if comments: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
694 l.append(_('<tr><td colspan=4><strong>Note:</strong></td></tr>')) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
695 for entry in comments.values(): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
696 l.append('<tr><td colspan=4>%s</td></tr>'%entry) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
697 l.append('</table>') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
698 return '\n'.join(l) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
699 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
700 # XXX new function |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
701 def do_submit(client, classname, cl, props, nodeid, filterspec, value=None): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
702 ''' add a submit button for the item |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
703 ''' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
704 if value is None: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
705 if nodeid: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
706 value = "Submit Changes" |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
707 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
708 value = "Submit New Entry" |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
709 if nodeid or client.form is not None: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
710 return _('<input type="submit" name="submit" value="%s">' % value) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
711 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
712 return _('[Submit: not called from item]') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
713 |
| 936 | 714 def do_classhelp(client, classname, cl, props, nodeid, filterspec, clname, |
| 715 properties, label='?', width='400', height='400'): | |
|
934
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
716 '''pop up a javascript window with class help |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
717 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
718 This generates a link to a popup window which displays the |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
719 properties indicated by "properties" of the class named by |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
720 "classname". The "properties" should be a comma-separated list |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
721 (eg. 'id,name,description'). |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
722 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
723 You may optionally override the label displayed, the width and |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
724 height. The popup window will be resizable and scrollable. |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
725 ''' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
726 return '<a href="javascript:help_window(\'classhelp?classname=%s&' \ |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
727 'properties=%s\', \'%s\', \'%s\')"><b>(%s)</b></a>'%(clname, |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
728 properties, width, height, label) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
729 |
| 936 | 730 def do_email(client, classname, cl, props, nodeid, filterspec, property, |
| 731 escape=0): | |
|
934
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
732 '''display the property as one or more "fudged" email addrs |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
733 ''' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
734 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
735 if not nodeid and client.form is None: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
736 return _('[Email: not called from item]') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
737 propclass = props[property] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
738 if nodeid: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
739 # get the value for this property |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
740 try: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
741 value = cl.get(nodeid, property) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
742 except KeyError: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
743 # a KeyError here means that the node doesn't have a value |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
744 # for the specified property |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
745 value = '' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
746 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
747 value = '' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
748 if isinstance(propclass, hyperdb.String): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
749 if value is None: value = '' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
750 else: value = str(value) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
751 value = value.replace('@', ' at ') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
752 value = value.replace('.', ' ') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
753 else: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
754 value = _('[Email: not a string]')%locals() |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
755 if escape: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
756 value = cgi.escape(value) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
757 return value |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
758 |
| 936 | 759 def do_filterspec(client, classname, cl, props, nodeid, filterspec, classprop, |
| 760 urlprop): | |
| 761 | |
|
934
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
762 qs = cl.get(nodeid, urlprop) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
763 classname = cl.get(nodeid, classprop) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
764 filterspec = {} |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
765 query = cgi.parse_qs(qs) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
766 for k,v in query.items(): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
767 query[k] = v[0].split(',') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
768 pagesize = query.get(':pagesize',['25'])[0] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
769 search_text = query.get('search_text', [''])[0] |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
770 search_text = urllib.unquote(search_text) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
771 for k,v in query.items(): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
772 if k[0] != ':': |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
773 filterspec[k] = v |
| 936 | 774 ixtmplt = htmltemplate.IndexTemplate(client, client.instance.TEMPLATES, |
| 775 classname) | |
|
934
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
776 qform = '<form onSubmit="return submit_once()" action="%s%s">\n'%( |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
777 classname,nodeid) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
778 qform += ixtmplt.filter_form(search_text, |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
779 query.get(':filter', []), |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
780 query.get(':columns', []), |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
781 query.get(':group', []), |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
782 [], |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
783 query.get(':sort',[]), |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
784 filterspec, |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
785 pagesize) |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
786 return qform + '</table>\n' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
787 |
| 936 | 788 def do_href(client, classname, cl, props, nodeid, filterspec, property, |
| 789 prefix='', suffix='', label=''): | |
| 790 ''' Generate a link to the value of the property, with the form: | |
| 791 | |
| 792 <a href="[prefix][value][suffix]">[label]</a> | |
| 793 | |
| 794 where the [value] is the specified property value. | |
| 795 ''' | |
|
934
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
796 value = determine_value(cl, props, nodeid, filterspec, property) |
| 936 | 797 return '<a href="%s%s%s">%s</a>'%(prefix, value, suffix, label) |
|
934
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
798 |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
799 def do_remove(client, classname, cl, props, nodeid, filterspec): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
800 ''' put a remove href for an item in a list ''' |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
801 if not nodeid: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
802 return _('[Remove not called from item]') |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
803 try: |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
804 parentdesignator, mlprop = client.listcontext |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
805 except (AttributeError, TypeError): |
|
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
806 return _('[Remove not called form listing of multilink]') |
| 936 | 807 return '<a href="remove?:target=%s%s&:multilink=%s:%s">[Remove]</a>'%( |
| 808 classname, nodeid, parentdesignator, mlprop) | |
|
934
fdcf16b444a9
Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff
changeset
|
809 |
| 936 | 810 # |
| 811 # $Log: not supported by cvs2svn $ | |
| 812 # | |
| 813 # | |
| 814 # vim: set filetype=python ts=4 sw=4 et si |
