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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
936
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
1 #
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
2 # $Id: template_funcs.py,v 1.2 2002-08-15 00:40:10 richard Exp $
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
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
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
9 def do_plain(client, classname, cl, props, nodeid, filterspec, property,
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
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
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
58 def do_stext(client, classname, cl, props, nodeid, filterspec, property,
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
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
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
63 s = do_plain(client, classname, cl, props, nodeid, filterspec, property,
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
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
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
103 def do_field(client, classname, cl, props, nodeid, filterspec, property,
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
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 = '&quot;'.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
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
132 s = '<input type="radio" name="%s" value="yes" %s>Yes'%(property,
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
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
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
138 s += '<input type="radio" name="%s" value="no" %s>No'%(property,
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
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
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
189 def do_multiline(client, classname, cl, props, nodeid, filterspec, property,
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
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
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
211 def do_menu(client, classname, cl, props, nodeid, filterspec, property,
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
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
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
306 def do_link(client, classname, cl, props, nodeid, filterspec, property=None,
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
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
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
377 def do_count(client, classname, cl, props, nodeid, filterspec, property,
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
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
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
394 def do_reldate(client, classname, cl, props, nodeid, filterspec, property,
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
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
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
423 def do_download(client, classname, cl, props, nodeid, filterspec, property,
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
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
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
430 return do_link(client, classname, cl, props, nodeid, filterspec, property,
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
431 is_download=1)
934
fdcf16b444a9 Use a real parser for templates.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
diff changeset
432
936
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
433 def do_checklist(client, classname, cl, props, nodeid, filterspec, property,
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
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
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
515 def do_list(client, classname, cl, props, nodeid, filterspec, property,
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
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
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
541 index = htmltemplate.IndexTemplate(client, client.instance.TEMPLATES,
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
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
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
551 def do_history(client, classname, cl, props, nodeid, filterspec,
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
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(' ', '&nbsp;')
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
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
714 def do_classhelp(client, classname, cl, props, nodeid, filterspec, clname,
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
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
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
730 def do_email(client, classname, cl, props, nodeid, filterspec, property,
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
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
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
759 def do_filterspec(client, classname, cl, props, nodeid, filterspec, classprop,
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
760 urlprop):
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
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
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
774 ixtmplt = htmltemplate.IndexTemplate(client, client.instance.TEMPLATES,
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
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
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
788 def do_href(client, classname, cl, props, nodeid, filterspec, property,
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
789 prefix='', suffix='', label=''):
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
790 ''' Generate a link to the value of the property, with the form:
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
791
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
792 <a href="[prefix][value][suffix]">[label]</a>
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
793
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
794 where the [value] is the specified property value.
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
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
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
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
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
807 return '<a href="remove?:target=%s%s&:multilink=%s:%s">[Remove]</a>'%(
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
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
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
810 #
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
811 # $Log: not supported by cvs2svn $
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
812 #
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
813 #
57d09949380e cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 934
diff changeset
814 # vim: set filetype=python ts=4 sw=4 et si

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