1
<?cs include:"header.cs" ?>
2
<?cs include:"macros.cs" ?>
4
<div id="ctxtnav" class="nav"><?cs
5
if:query.report_href ?><ul>
6
<li class="first"><a href="<?cs
7
var:query.report_href ?>">Available Reports</a></li>
8
<li class="last">Custom Query</li></ul><?cs
12
<?cs def:num_matches(v) ?><span class="numrows">(<?cs
13
alt:v ?>No<?cs /alt ?> match<?cs if:v != 1 ?>es<?cs /if ?>)</span><?cs
16
<div id="content" class="query">
17
<h1><?cs var:title ?> <?cs call:num_matches(query.num_matches) ?></h1>
19
<form id="query" method="post" action="<?cs var:trac.href.query ?>">
20
<fieldset id="filters">
21
<legend>Filters</legend>
22
<?cs def:checkbox_checked(constraint, option) ?><?cs
23
set:checked = 0 ?><?cs
24
each:value = constraint.values ?><?cs
25
if:(value == option) == (constraint.mode == '') ?><?cs
26
set:checked = 1 ?><?cs
29
if:checked ?> checked="checked"<?cs /if ?><?cs
31
<table summary="Query filters">
32
<tbody><tr style="height: 1px"><td colspan="4"></td></tr></tbody><?cs
33
each:field = query.fields ?><?cs
34
each:constraint = query.constraints ?><?cs
35
if:name(field) == name(constraint) ?>
36
<tbody><tr class="<?cs var:name(field) ?>">
37
<th scope="row"><label><?cs var:field.label ?></label></th><?cs
38
if:field.type != "radio" && field.type != "checkbox" ?>
40
<select name="<?cs var:name(field) ?>_mode"><?cs
41
each:mode = query.modes[field.type] ?>
42
<option value="<?cs var:mode.value ?>"<?cs
43
if:mode.value == constraint.mode ?> selected="selected"<?cs
44
/if ?>><?cs var:mode.name ?></option><?cs
49
<td class="filter"<?cs
50
if:field.type == "radio" || field.type == "checkbox" ?> colspan="2"<?cs
52
if:field.type == "select" ?><?cs
53
each:value = constraint.values ?>
54
<select name="<?cs var:name(constraint) ?>"><option></option><?cs
55
each:option = field.options ?>
56
<option<?cs if:option == value ?> selected="selected"<?cs /if ?>><?cs
57
var:option ?></option><?cs
59
if:name(value) != len(constraint.values) - 1 ?>
61
<td class="actions"><input type="submit" name="rm_filter_<?cs
62
var:name(field) ?>_<?cs var:name(value) ?>" value="-" /></td>
63
</tr><tr class="<?cs var:name(field) ?>">
64
<th colspan="2"><label>or</label></th>
65
<td class="filter"><?cs
68
elif:field.type == "radio" ?><?cs
69
each:option = field.options ?>
70
<input type="checkbox" id="<?cs var:name(field) ?>_<?cs
71
var:option ?>" name="<?cs var:name(field) ?>" value="<?cs
72
var:option ?>"<?cs call:checkbox_checked(constraint, option) ?> />
73
<label for="<?cs var:name(field) ?>_<?cs var:option ?>"><?cs
74
alt:option ?>none<?cs /alt ?></label><?cs
76
elif:field.type == "checkbox" ?>
77
<input type="radio" id="<?cs var:name(field) ?>_on" name="<?cs
78
var:name(field) ?>" value="1"<?cs
79
if:constraint.mode != '!' ?> checked="checked"<?cs /if ?> />
80
<label for="<?cs var:name(field) ?>_on">yes</label>
81
<input type="radio" id="<?cs var:name(field) ?>_off" name="<?cs
82
var:name(field) ?>" value="!1"<?cs
83
if:constraint.mode == '!' ?> checked="checked"<?cs /if ?> />
84
<label for="<?cs var:name(field) ?>_off">no</label><?cs
85
elif:field.type == "text" ?><?cs
86
each:value = constraint.values ?>
87
<input type="text" name="<?cs var:name(field) ?>" value="<?cs
88
var:value ?>" size="42" /><?cs
89
if:name(value) != len(constraint.values) - 1 ?>
91
<td class="actions"><input type="submit" name="rm_filter_<?cs
92
var:name(field) ?>_<?cs var:name(value) ?>" value="-" /></td>
93
</tr><tr class="<?cs var:name(field) ?>">
94
<th colspan="2"><label>or</label></th>
95
<td class="filter"><?cs
100
<td class="actions"><input type="submit" name="rm_filter_<?cs
101
var:name(field) ?><?cs
102
if:field.type != 'radio' ?>_<?cs
103
var:len(constraint.values) - 1 ?><?cs
104
/if ?>" value="-" /></td>
105
</tr></tbody><?cs /if ?><?cs
108
<tbody><tr class="actions">
109
<td class="actions" colspan="4" style="text-align: right">
110
<label for="add_filter">Add filter</label>
111
<select name="add_filter" id="add_filter">
112
<option></option><?cs
113
each:field = query.fields ?>
114
<option value="<?cs var:name(field) ?>"<?cs
115
if:field.type == "radio" ?><?cs
116
if:len(query.constraints[name(field)]) != 0 ?> disabled="disabled"<?cs
118
/if ?>><?cs var:field.label ?></option><?cs
121
<input type="submit" name="add" value="+" />
127
<label for="group">Group results by</label>
128
<select name="group" id="group">
129
<option></option><?cs
130
each:field = query.fields ?><?cs
131
if:field.type == 'select' || field.type == 'radio' ||
132
name(field) == 'owner' ?>
133
<option value="<?cs var:name(field) ?>"<?cs
134
if:name(field) == query.group ?> selected="selected"<?cs /if ?>><?cs
135
var:field.label ?></option><?cs
139
<input type="checkbox" name="groupdesc" id="groupdesc"<?cs
140
if:query.groupdesc ?> checked="checked"<?cs /if ?> />
141
<label for="groupdesc">descending</label>
142
<script type="text/javascript">
143
var group = document.getElementById("group");
144
var updateGroupDesc = function() {
145
enableControl('groupdesc', group.selectedIndex > 0);
147
addEvent(window, 'load', updateGroupDesc);
148
addEvent(group, 'change', updateGroupDesc);
152
<input type="checkbox" name="verbose" id="verbose"<?cs
153
if:query.verbose ?> checked="checked"<?cs /if ?> />
154
<label for="verbose">Show full description under each result</label>
156
<div class="buttons">
157
<input type="hidden" name="order" value="<?cs var:query.order ?>" />
158
<?cs if:query.desc ?><input type="hidden" name="desc" value="1" /><?cs /if ?>
159
<input type="submit" name="update" value="Update" />
163
<script type="text/javascript"><?cs set:idx = 0 ?>
164
var properties={<?cs each:field = query.fields ?><?cs
165
var:name(field) ?>:{type:"<?cs var:field.type ?>",label:"<?cs
166
var:field.label ?>",options:[<?cs
167
each:option = field.options ?>"<?cs var:option ?>"<?cs
168
if:name(option) < len(field.options) -1 ?>,<?cs /if ?><?cs
170
set:idx = idx + 1 ?><?cs if:idx < len(query.fields) ?>,<?cs /if ?><?cs
171
/each ?>};<?cs set:idx = 0 ?>
172
var modes = {<?cs each:type = query.modes ?><?cs var:name(type) ?>:[<?cs
173
each:mode = type ?>{text:"<?cs var:mode.name ?>",value:"<?cs var:mode.value ?>"}<?cs
174
if:name(mode) < len(type) -1 ?>,<?cs /if ?><?cs
176
set:idx = idx + 1 ?><?cs if:idx < len(query.modes) ?>,<?cs /if ?><?cs
182
<thead><tr><?cs each:header = query.headers ?>
183
<th class="<?cs var:header.name ?><?cs if:query.order == header.name ?> <?cs
184
if:query.desc ?>desc<?cs else ?>asc<?cs /if ?><?cs /if ?>">
185
<a title="Sort by <?cs var:header.label ?><?cs
186
if:query.order == header.name && !query.desc ?> (descending)<?cs
187
/if ?>" href="<?cs var:header.href ?>"><?cs var:header.label ?></a>
189
/each ?></tr></thead>
192
<?cs if:len(query.results) ?><?cs
194
<table class="listing tickets">
195
<?cs call:thead() ?><tbody><?cs
197
each:result = query.results ?><?cs
198
if:result[query.group] != prev_group ?>
199
<?cs if:prev_group ?></tbody></table><?cs /if ?>
201
each:field = query.fields ?><?cs
202
if:name(field) == query.group ?><?cs
203
var:field.label ?><?cs
205
/each ?>: <?cs var:result[query.group] ?> <?cs call:num_matches(query.num_matches_group["_"+result[query.group]+"_"]) ?></h2>
206
<table class="listing tickets">
207
<?cs call:thead() ?><tbody><?cs
210
if:name(result) % 2 ?>odd<?cs else ?>even<?cs /if ?> prio<?cs
211
var:result.priority_value ?><?cs
212
if:result.added ?> added<?cs /if ?><?cs
213
if:result.changed ?> changed<?cs /if ?><?cs
214
if:result.removed ?> removed<?cs /if ?>"><?cs
215
each:header = query.headers ?><?cs
216
if:name(header) == 0 ?><td class="id"><a href="<?cs
217
var:result.href ?>" title="View ticket"><?cs var:result.id ?></a></td><?cs
218
else ?><td class="<?cs var:header.name ?>"><?cs
219
if:header.name == 'summary' ?><a href="<?cs
220
var:result.href ?>" title="View ticket"><?cs
221
var:result.summary ?></a><?cs
222
else ?><span><?cs var:result[header.name] ?></span><?cs
226
<?cs if:query.verbose ?>
227
</tr><tr class="fullrow"><td colspan="<?cs var:len(query.headers) ?>">
228
<p class="meta">Reported by <strong><?cs var:result.reporter ?></strong>,
229
<?cs var:result.time ?><?cs if:result.description ?>:<?cs /if ?></p>
230
<?cs if:result.description ?><p><?cs var:result.description ?></p><?cs /if ?>
232
<?cs /if ?><?cs set:prev_group = result[query.group] ?>
238
<strong>Note:</strong> See <a href="<?cs var:trac.href.wiki ?>/TracQuery">TracQuery</a>
239
for help on using queries.
243
<?cs include:"footer.cs" ?>