<?cs include:"header.cs" ?>
<?cs include:"macros.cs" ?>
<div id="ctxtnav" class="nav"><?cs
if:query.report_href ?><ul>
<li class="first"><a href="<?cs
var:query.report_href ?>">Available Reports</a></li>
<li class="last">Custom Query</li></ul><?cs
/if ?>
</div>
<?cs def:num_matches(v) ?><span class="numrows">(<?cs
alt:v ?>No<?cs /alt ?> match<?cs if:v != 1 ?>es<?cs /if ?>)</span><?cs
/def ?>
<div id="content" class="query">
<h1><?cs var:title ?> <?cs call:num_matches(query.num_matches) ?></h1>
<form id="query" method="post" action="<?cs var:trac.href.query ?>">
<fieldset id="filters">
<legend>Filters</legend>
<?cs def:checkbox_checked(constraint, option) ?><?cs
set:checked = 0 ?><?cs
each:value = constraint.values ?><?cs
if:(value == option) == (constraint.mode == '') ?><?cs
set:checked = 1 ?><?cs
/if ?><?cs
/each ?><?cs
if:checked ?> checked="checked"<?cs /if ?><?cs
/def ?>
<table summary="Query filters">
<tbody><tr style="height: 1px"><td colspan="4"></td></tr></tbody><?cs
each:field = query.fields ?><?cs
each:constraint = query.constraints ?><?cs
if:name(field) == name(constraint) ?>
<tbody><tr class="<?cs var:name(field) ?>">
<th scope="row"><label><?cs var:field.label ?></label></th><?cs
if:field.type != "radio" && field.type != "checkbox" ?>
<td class="mode">
<select name="<?cs var:name(field) ?>_mode"><?cs
each:mode = query.modes[field.type] ?>
<option value="<?cs var:mode.value ?>"<?cs
if:mode.value == constraint.mode ?> selected="selected"<?cs
/if ?>><?cs var:mode.name ?></option><?cs
/each ?>
</select>
</td><?cs
/if ?>
<td class="filter"<?cs
if:field.type == "radio" || field.type == "checkbox" ?> colspan="2"<?cs
/if ?>><?cs
if:field.type == "select" ?><?cs
each:value = constraint.values ?>
<select name="<?cs var:name(constraint) ?>"><option></option><?cs
each:option = field.options ?>
<option<?cs if:option == value ?> selected="selected"<?cs /if ?>><?cs
var:option ?></option><?cs
/each ?></select><?cs
if:name(value) != len(constraint.values) - 1 ?>
</td>
<td class="actions"><input type="submit" name="rm_filter_<?cs
var:name(field) ?>_<?cs var:name(value) ?>" value="-" /></td>
</tr><tr class="<?cs var:name(field) ?>">
<th colspan="2"><label>or</label></th>
<td class="filter"><?cs
/if ?><?cs
/each ?><?cs
elif:field.type == "radio" ?><?cs
each:option = field.options ?>
<input type="checkbox" id="<?cs var:name(field) ?>_<?cs
var:option ?>" name="<?cs var:name(field) ?>" value="<?cs
var:option ?>"<?cs call:checkbox_checked(constraint, option) ?> />
<label for="<?cs var:name(field) ?>_<?cs var:option ?>"><?cs
alt:option ?>none<?cs /alt ?></label><?cs
/each ?><?cs
elif:field.type == "checkbox" ?>
<input type="radio" id="<?cs var:name(field) ?>_on" name="<?cs
var:name(field) ?>" value="1"<?cs
if:constraint.mode != '!' ?> checked="checked"<?cs /if ?> />
<label for="<?cs var:name(field) ?>_on">yes</label>
<input type="radio" id="<?cs var:name(field) ?>_off" name="<?cs
var:name(field) ?>" value="!1"<?cs
if:constraint.mode == '!' ?> checked="checked"<?cs /if ?> />
<label for="<?cs var:name(field) ?>_off">no</label><?cs
elif:field.type == "text" ?><?cs
each:value = constraint.values ?>
<input type="text" name="<?cs var:name(field) ?>" value="<?cs
var:value ?>" size="42" /><?cs
if:name(value) != len(constraint.values) - 1 ?>
</td>
<td class="actions"><input type="submit" name="rm_filter_<?cs
var:name(field) ?>_<?cs var:name(value) ?>" value="-" /></td>
</tr><tr class="<?cs var:name(field) ?>">
<th colspan="2"><label>or</label></th>
<td class="filter"><?cs
/if ?><?cs
/each ?><?cs
/if ?>
</td>
<td class="actions"><input type="submit" name="rm_filter_<?cs
var:name(field) ?><?cs
if:field.type != 'radio' ?>_<?cs
var:len(constraint.values) - 1 ?><?cs
/if ?>" value="-" /></td>
</tr></tbody><?cs /if ?><?cs
/each ?><?cs
/each ?>
<tbody><tr class="actions">
<td class="actions" colspan="4" style="text-align: right">
<label for="add_filter">Add filter</label>
<select name="add_filter" id="add_filter">
<option></option><?cs
each:field = query.fields ?>
<option value="<?cs var:name(field) ?>"<?cs
if:field.type == "radio" ?><?cs
if:len(query.constraints[name(field)]) != 0 ?> disabled="disabled"<?cs
/if ?><?cs
/if ?>><?cs var:field.label ?></option><?cs
/each ?>
</select>
<input type="submit" name="add" value="+" />
</td>
</tr></tbody>
</table>
</fieldset>
<p class="option">
<label for="group">Group results by</label>
<select name="group" id="group">
<option></option><?cs
each:field = query.fields ?><?cs
if:field.type == 'select' || field.type == 'radio' ||
name(field) == 'owner' ?>
<option value="<?cs var:name(field) ?>"<?cs
if:name(field) == query.group ?> selected="selected"<?cs /if ?>><?cs
var:field.label ?></option><?cs
/if ?><?cs
/each ?>
</select>
<input type="checkbox" name="groupdesc" id="groupdesc"<?cs
if:query.groupdesc ?> checked="checked"<?cs /if ?> />
<label for="groupdesc">descending</label>
<script type="text/javascript">
var group = document.getElementById("group");
var updateGroupDesc = function() {
enableControl('groupdesc', group.selectedIndex > 0);
}
addEvent(window, 'load', updateGroupDesc);
addEvent(group, 'change', updateGroupDesc);
</script>
</p>
<p class="option">
<input type="checkbox" name="verbose" id="verbose"<?cs
if:query.verbose ?> checked="checked"<?cs /if ?> />
<label for="verbose">Show full description under each result</label>
</p>
<div class="buttons">
<input type="hidden" name="order" value="<?cs var:query.order ?>" />
<?cs if:query.desc ?><input type="hidden" name="desc" value="1" /><?cs /if ?>
<input type="submit" name="update" value="Update" />
</div>
<hr />
</form>
<script type="text/javascript"><?cs set:idx = 0 ?>
var properties={<?cs each:field = query.fields ?><?cs
var:name(field) ?>:{type:"<?cs var:field.type ?>",label:"<?cs
var:field.label ?>",options:[<?cs
each:option = field.options ?>"<?cs var:option ?>"<?cs
if:name(option) < len(field.options) -1 ?>,<?cs /if ?><?cs
/each ?>]}<?cs
set:idx = idx + 1 ?><?cs if:idx < len(query.fields) ?>,<?cs /if ?><?cs
/each ?>};<?cs set:idx = 0 ?>
var modes = {<?cs each:type = query.modes ?><?cs var:name(type) ?>:[<?cs
each:mode = type ?>{text:"<?cs var:mode.name ?>",value:"<?cs var:mode.value ?>"}<?cs
if:name(mode) < len(type) -1 ?>,<?cs /if ?><?cs
/each ?>]<?cs
set:idx = idx + 1 ?><?cs if:idx < len(query.modes) ?>,<?cs /if ?><?cs
/each ?>};
initializeFilters();
</script>
<?cs def:thead() ?>
<thead><tr><?cs each:header = query.headers ?>
<th class="<?cs var:header.name ?><?cs if:query.order == header.name ?> <?cs
if:query.desc ?>desc<?cs else ?>asc<?cs /if ?><?cs /if ?>">
<a title="Sort by <?cs var:header.label ?><?cs
if:query.order == header.name && !query.desc ?> (descending)<?cs
/if ?>" href="<?cs var:header.href ?>"><?cs var:header.label ?></a>
</th><?cs
/each ?></tr></thead>
<?cs /def ?>
<?cs if:len(query.results) ?><?cs
if:!query.group ?>
<table class="listing tickets">
<?cs call:thead() ?><tbody><?cs
/if ?><?cs
each:result = query.results ?><?cs
if:result[query.group] != prev_group ?>
<?cs if:prev_group ?></tbody></table><?cs /if ?>
<h2><?cs
each:field = query.fields ?><?cs
if:name(field) == query.group ?><?cs
var:field.label ?><?cs
/if ?><?cs
/each ?>: <?cs var:result[query.group] ?> <?cs call:num_matches(query.num_matches_group["_"+result[query.group]+"_"]) ?></h2>
<table class="listing tickets">
<?cs call:thead() ?><tbody><?cs
/if ?>
<tr class="<?cs
if:name(result) % 2 ?>odd<?cs else ?>even<?cs /if ?> prio<?cs
var:result.priority_value ?><?cs
if:result.added ?> added<?cs /if ?><?cs
if:result.changed ?> changed<?cs /if ?><?cs
if:result.removed ?> removed<?cs /if ?>"><?cs
each:header = query.headers ?><?cs
if:name(header) == 0 ?><td class="id"><a href="<?cs
var:result.href ?>" title="View ticket"><?cs var:result.id ?></a></td><?cs
else ?><td class="<?cs var:header.name ?>"><?cs
if:header.name == 'summary' ?><a href="<?cs
var:result.href ?>" title="View ticket"><?cs
var:result.summary ?></a><?cs
else ?><span><?cs var:result[header.name] ?></span><?cs
/if ?></td><?cs
/if ?><?cs
/each ?>
<?cs if:query.verbose ?>
</tr><tr class="fullrow"><td colspan="<?cs var:len(query.headers) ?>">
<p class="meta">Reported by <strong><?cs var:result.reporter ?></strong>,
<?cs var:result.time ?><?cs if:result.description ?>:<?cs /if ?></p>
<?cs if:result.description ?><p><?cs var:result.description ?></p><?cs /if ?>
</td>
<?cs /if ?><?cs set:prev_group = result[query.group] ?>
</tr><?cs /each ?>
</tbody></table><?cs
/if ?>
<div id="help">
<strong>Note:</strong> See <a href="<?cs var:trac.href.wiki ?>/TracQuery">TracQuery</a>
for help on using queries.
</div>
</div>
<?cs include:"footer.cs" ?>