- add user to result display and allow searching/limiting by user email (admin only)

Other:
- search results now validate as XHTML transitional
This commit is contained in:
ccooper%deadsquid.com 2005-12-23 23:08:08 +00:00
Родитель 683322a8ad
Коммит 6bd65a6d5f
15 изменённых файлов: 138 добавлений и 80 удалений

Просмотреть файл

@ -81,10 +81,10 @@ Litmus::DB::Testresult->has_many(bugs => "Litmus::DB::Resultbug", {order_by => '
Litmus::DB::Testresult->autoinflate(dates => 'Time::Piece');
Litmus::DB::Testresult->set_sql(DefaultTestResults => qq{
SELECT tr.testresult_id,tr.test_id,t.summary,tr.submission_time AS created,p.name AS platform_name,pr.name as product_name,trsl.name AS result_status,trsl.class_name result_status_class,b.name AS branch_name,tg.name AS test_group_name, tr.locale_abbrev
SELECT tr.testresult_id,tr.test_id,t.summary,tr.submission_time AS created,p.name AS platform_name,pr.name as product_name,trsl.name AS result_status,trsl.class_name result_status_class,b.name AS branch_name,tg.name AS test_group_name, tr.locale_abbrev, u.email
FROM test_results tr, tests t, platforms p, opsyses o, branches b, products
pr, test_result_status_lookup trsl, test_groups tg, subgroups sg
WHERE tr.test_id=t.test_id AND tr.platform_id=p.platform_id AND tr.opsys_id=o.opsys_id AND tr.branch_id=b.branch_id AND b.product_id=pr.product_id AND tr.result_id=trsl.result_status_id AND t.subgroup_id=sg.subgroup_id AND sg.testgroup_id=tg.testgroup_id
pr, test_result_status_lookup trsl, test_groups tg, subgroups sg, users u
WHERE tr.test_id=t.test_id AND tr.platform_id=p.platform_id AND tr.opsys_id=o.opsys_id AND tr.branch_id=b.branch_id AND b.product_id=pr.product_id AND tr.result_id=trsl.result_status_id AND t.subgroup_id=sg.subgroup_id AND sg.testgroup_id=tg.testgroup_id AND tr.user_id=u.user_id
ORDER BY tr.submission_time DESC
LIMIT $_num_results_default
});
@ -165,7 +165,7 @@ sub istrusted {
sub getDefaultTestResults($) {
my $self = shift;
my @rows = $self->search_DefaultTestResults();
my $criteria = "Default<br/>Ordered by Created<br>Limit to $_num_results_default results";
my $criteria = "Default<br/>Ordered by Created<br/>Limit to $_num_results_default results";
return $criteria, \@rows;
}
@ -176,11 +176,11 @@ sub getDefaultTestResults($) {
sub getTestResults($\@\@$) {
my ($self,$where_criteria,$order_by_criteria,$limit_value) = @_;
my $select = 'SELECT tr.testresult_id,tr.test_id,t.summary,tr.submission_time AS created,p.name AS platform_name,pr.name as product_name,trsl.name AS result_status,trsl.class_name AS result_status_class,b.name AS branch_name,tg.name AS test_group_name, tr.locale_abbrev';
my $select = 'SELECT tr.testresult_id,tr.test_id,t.summary,tr.submission_time AS created,p.name AS platform_name,pr.name as product_name,trsl.name AS result_status,trsl.class_name AS result_status_class,b.name AS branch_name,tg.name AS test_group_name, tr.locale_abbrev, u.email';
my $from = 'FROM test_results tr, tests t, platforms p, opsyses o, branches b, products pr, test_result_status_lookup trsl, test_groups tg, subgroups sg';
my $from = 'FROM test_results tr, tests t, platforms p, opsyses o, branches b, products pr, test_result_status_lookup trsl, test_groups tg, subgroups sg, users u';
my $where = 'WHERE tr.test_id=t.test_id AND tr.platform_id=p.platform_id AND tr.opsys_id=o.opsys_id AND tr.branch_id=b.branch_id AND b.product_id=pr.product_id AND tr.result_id=trsl.result_status_id AND t.subgroup_id=sg.subgroup_id AND sg.testgroup_id=tg.testgroup_id';
my $where = 'WHERE tr.test_id=t.test_id AND tr.platform_id=p.platform_id AND tr.opsys_id=o.opsys_id AND tr.branch_id=b.branch_id AND b.product_id=pr.product_id AND tr.result_id=trsl.result_status_id AND t.subgroup_id=sg.subgroup_id AND sg.testgroup_id=tg.testgroup_id AND tr.user_id=u.user_id';
my $limit = 'LIMIT ';
@ -199,6 +199,8 @@ sub getTestResults($\@\@$) {
$where .= " AND tr.test_id='" . $criterion->{'value'} . "'";
} elsif ($criterion->{'field'} eq 'summary') {
$where .= ' AND t.summary LIKE \'%%' . $criterion->{'value'} . '%%\'';
} elsif ($criterion->{'field'} eq 'email') {
$where .= ' AND u.email LIKE \'%%' . $criterion->{'value'} . '%%\'';
} elsif ($criterion->{'field'} eq 'result_status') {
$where .= " AND trsl.class_name='" . $criterion->{'value'} . "'";
} elsif ($criterion->{'field'} eq 'trusted_only') {
@ -259,6 +261,8 @@ sub getTestResults($\@\@$) {
$order_by .= "b.name $criterion->{'direction'},";
} elsif ($criterion->{'field'} eq 'locale') {
$order_by .= "tr.locale_abbrev $criterion->{'direction'},";
} elsif ($criterion->{'field'} eq 'email') {
$order_by .= "u.email $criterion->{'direction'},";
} else {
# Skip unknown field
}

Просмотреть файл

@ -140,13 +140,6 @@ sub getBranches()
return _getValues($sql);
}
#########################################################################
sub getLocales()
{
my $sql = "SELECT DISTINCT(abbrev) FROM locale_lookup ORDER BY abbrev";
return _getValues($sql);
}
#########################################################################
sub getOpsyses()
{
@ -198,6 +191,15 @@ sub getLocales()
return \@locales;
}
#########################################################################
sub getUsers()
{
my @users = Litmus::DB::User->retrieve_all(
{ order_by => 'email' }
);
return \@users;
}
#########################################################################
sub getFields()
{
@ -219,7 +221,7 @@ sub getFields()
{ name => 'subgroup',
display_string => "Subgroup", },
{ name => 'email',
display_string => "Submitter", },
display_string => "Submitted By", },
{ name => 'summary',
display_string => "Summary", },
{ name => 'test_group',
@ -260,24 +262,26 @@ sub getMatchCriteria()
sub getSortFields()
{
my @sort_fields = (
{ name => "branch",
display_string => "Branch"},
{ name => "created",
display_string => "Date"},
{ name => "product",
display_string => "Product"},
{ name => "locale",
display_string => "Locale"},
{ name => "platform",
display_string => "Platform"},
{ name => "test_group",
display_string => "Testgroup"},
{ name => "test_id",
display_string => "Testcase ID#"},
{ name => "product",
display_string => "Product"},
{ name => "email",
display_string => "Submitted By"},
{ name => "summary",
display_string => "Summary"},
{ name => "result_status",
display_string => "Status"},
{ name => "branch",
display_string => "Branch"},
{ name => "locale",
display_string => "Locale"},
{ name => "test_id",
display_string => "Testcase ID#"},
{ name => "test_group",
display_string => "Testgroup"},
);
return \@sort_fields;
}

Просмотреть файл

@ -92,7 +92,6 @@ if ($c->param) {
'search_field' => $search_field,
'match_criteria' => $match_criteria,
'value' => $value};
$where_criteria .= "$search_field $match_criteria '$value'<br/>";
} elsif ($param eq 'start_date') {
@ -131,6 +130,12 @@ if ($c->param) {
value => $value};
$where_criteria .= "Locale is \'".$c->param($param)."\'<br/>";
$defaults->{locale} = $c->param($param);
} elsif ($param eq 'email') {
my $value = $c->param($param);
push @where, {field => 'email',
value => $value};
$where_criteria .= "Submitted By is \'".$c->param($param)."\'<br/>";
$defaults->{locale} = $c->param($param);
} elsif ($param eq 'product') {
my $value = $c->param($param);
push @where, {field => $param,
@ -202,6 +207,7 @@ my $test_ids = Litmus::FormWidget->getTestIDs;
my $result_statuses = Litmus::FormWidget->getResultStatuses;
my $branches = Litmus::FormWidget->getBranches;
my $locales = Litmus::FormWidget->getLocales;
my $users = Litmus::FormWidget->getUsers;
my $fields = Litmus::FormWidget->getFields;
my $match_criteria = Litmus::FormWidget->getMatchCriteria;
@ -219,6 +225,7 @@ my $vars = {
result_statuses => $result_statuses,
branches => $branches,
locales => $locales,
users => $users,
fields => $fields,
match_criteria => $match_criteria,
sort_fields => $sort_fields,

Просмотреть файл

@ -939,13 +939,23 @@ table.category h1 {
font-size: 1.1em;
}
input.category {
input.category, input.button {
font-size: 1em;
margin: 5px 0px 0px 0px;
}
input.textbox {
font-size: .9em;
margin: 5px 0px 0px 0px;
}
div.advSearchForm {
padding: 0px;
margin: 0px;
border: 0px;
}
div.formButtons {
padding-bottom: 15px;
}

Просмотреть файл

@ -99,6 +99,11 @@ if ($c->param) {
push @where, {field => $param,
value => $value};
$where_criteria .= "Summary like \'".$c->param($param)."\'<br/>";
} elsif ($param eq 'email') {
my $value = quotemeta($c->param($param));
push @where, {field => $param,
value => $value};
$where_criteria .= "Submitted By like \'".$c->param($param)."\'<br/>";
} elsif ($param eq 'result_status') {
my $value = quotemeta($c->param($param));
push @where, {field => $param,

Просмотреть файл

@ -1 +1 @@
<input type="text" size="20" name="summary" value="-Summary-" onFocus="if(this.value=='-Summary-'){this.value = '';}">
<input class="textbox" type="text" size="20" name="summary" value="-Summary-" onFocus="if(this.value=='-Summary-'){this.value = '';}">

Просмотреть файл

@ -1,4 +1,4 @@
<select name="[% name %]"[% IF size %] size="[% size %]"[% END %][% IF disabled %] disabled[% END %][% IF onChange %] onChange="[% onChange %]"[% END %]>
<select id="[% name %]" name="[% name %]"[% IF size %] size="[% size %]"[% END %][% IF disabled %] disabled[% END %][% IF onChange %] onChange="[% onChange %]"[% END %]>
[% IF placeholder %]<option value="">-Product-</option>[% END %]
[% IF products %]
[% FOREACH product=products %]

Просмотреть файл

@ -2,8 +2,10 @@
<option value="">-Field-</option>
[% IF fields %]
[% FOREACH field=fields %]
[% IF field.name!='email' || show_admin==1 %]
<option value="[% field.name | html %]">
[% field.display_string | html %]</option>
[% END %]
[% END %]
[% END %]
</select>

Просмотреть файл

@ -2,8 +2,10 @@
<option value="">-Sort Field-</option>
[% IF sort_fields %]
[% FOREACH sort_field=sort_fields %]
[% IF sort_field.name!='email' || show_admin==1 %]
<option value="[% sort_field.name | html %]">
[% sort_field.display_string | html %]</option>
[% END %]
[% END %]
[% END %]
</select>

Просмотреть файл

@ -29,7 +29,7 @@
[% onload = "$onload selects_onload();" %]
[% END %]
<body onLoad="init();[% IF onload %][% onload %][% END %]">
<body onload="init();[% IF onload %][% onload %][% END %]">
<script type="text/javascript">function init(){}</script>
<script type="text/javascript" src="js/FormPersist.js"></script>

Просмотреть файл

@ -1,10 +1,10 @@
<ul class="instructions">
<li>click on the number in the "result id#" column to see a full
listing of the test result, including comments</li>
<li>click on the number at the start of the "testcase id#: summary"
<li>Click on the number in the "result id#" column to see a full
listing of the test result, including comments.</li>
<li>Click on the number at the start of the "testcase id#: summary"
column to see a more detailed description of that particular
testcase</li>
<li>results marked with the star icon ([% icon %]) have comments
testcase.</li>
<li>Results marked with the star icon ([% icon %]) have comments
associated with them. Clicking on the star will display the
comments in-page more test is required to get this to wrap</li>
comments in-page.</li>
</ul>

Просмотреть файл

@ -29,7 +29,7 @@
<form id="advanced_search" name="advanced_search" method="get" action="advanced_search.cgi">
<script>
<script type="text/javascript">
function init()
{
FormInit(document.forms['advanced_search'], document.location.search);
@ -48,26 +48,6 @@ Limit your search to specific values of visible fields.
</td>
</tr>
<tr>
<td class="heading">Product:</td>
<td>[% INCLUDE form_widgets/select_product.tmpl name="product" placeholder=1 %]</td>
</tr>
<tr>
<td class="heading">Platform:</td>
<td>[% INCLUDE form_widgets/select_unique_platform.tmpl name="platform" placeholder=1 %]</td>
</tr>
<tr>
<td class="heading">Testgroup:</td>
<td>[% INCLUDE form_widgets/select_test_group.tmpl name="test_group" placeholder=1 %]</td>
</tr>
<tr>
<td class="heading">Testcase ID#:</td>
<td>[% INCLUDE form_widgets/select_test_id.tmpl name="test_id" placeholder=1 %]</td>
</tr>
<tr>
<td class="heading">Status:</td>
<td>[% INCLUDE form_widgets/select_result_status.tmpl name="result_status" placeholder=1 %]</td>
</tr>
<tr>
<td class="heading">Branch:</td>
<td>[% INCLUDE form_widgets/select_branch.tmpl name="branch" placeholder=1 %]</td>
</tr>
@ -75,6 +55,32 @@ Limit your search to specific values of visible fields.
<td class="heading">Locale:</td>
<td>[% INCLUDE form_widgets/select_locale.tmpl name="locale" placeholder=1 %]</td>
</tr>
<tr>
<td class="heading">Platform:</td>
<td>[% INCLUDE form_widgets/select_unique_platform.tmpl name="platform" placeholder=1 %]</td>
</tr>
<tr>
<td class="heading">Product:</td>
<td>[% INCLUDE form_widgets/select_product.tmpl name="product" placeholder=1 %]</td>
</tr>
<tr>
<td class="heading">Status:</td>
<td>[% INCLUDE form_widgets/select_result_status.tmpl name="result_status" placeholder=1 %]</td>
</tr>
[% IF show_admin==1 %]
<tr>
<td class="heading">Submitted By:</td>
<td>[% INCLUDE form_widgets/select_email.tmpl name="email" placeholder=1 %]</td>
</tr>
[% END %]
<tr>
<td class="heading">Testcase ID#:</td>
<td>[% INCLUDE form_widgets/select_test_id.tmpl name="test_id" placeholder=1 %]</td>
</tr>
<tr>
<td class="heading">Testgroup:</td>
<td>[% INCLUDE form_widgets/select_test_group.tmpl name="test_group" placeholder=1 %]</td>
</tr>
</table>
</div>
</div>
@ -86,15 +92,15 @@ Limit your search to specific values of visible fields.
<div class="section-content">
<table class="advanced-search">
<tr>
<td colspan="2" class="instructions">Display only results between these two dates.</p><p>NOTE: the preferred format for dates is YYYYMMDDhhmmss, although the search engine will do its best (within reason) to parse dates from whatever is submitted.</td>
<td colspan="2" class="instructions"><p>Display only results between these two dates.</p><p>NOTE: the preferred format for dates is YYYYMMDDhhmmss, although the search engine will do its best (within reason) to parse dates from whatever is submitted.</p></td>
</tr>
<tr>
<td class="heading">Start Date:</td>
<td><input type="text" name="start_date" value=""></td>
<td><input type="text" name="start_date" value="" /></td>
</tr>
<tr>
<td class="heading">End Date:</td>
<td><input type="text" name="end_date" value="Now"></td>
<td><input type="text" name="end_date" value="Now" /></td>
</tr>
</table>
</div>
@ -114,22 +120,22 @@ Perform more elaborate pattern matching against all fields.
<tr>
<td>[% INCLUDE form_widgets/select_search_field.tmpl name="search_field1" %]</td>
<td>[% INCLUDE form_widgets/select_match_criteria.tmpl name="match_criteria1" %]</td>
<td><input type="text" name="search_value1" value=""></td>
<td><input type="text" name="search_value1" value="" /></td>
</tr>
<tr>
<td>[% INCLUDE form_widgets/select_search_field.tmpl name="search_field2" %]</td>
<td>[% INCLUDE form_widgets/select_match_criteria.tmpl name="match_criteria2" %]</td>
<td><input type="text" name="search_value2" value=""></td>
<td><input type="text" name="search_value2" value="" /></td>
</tr>
<tr>
<td>[% INCLUDE form_widgets/select_search_field.tmpl name="search_field3" %]</td>
<td>[% INCLUDE form_widgets/select_match_criteria.tmpl name="match_criteria3" %]</td>
<td><input type="text" name="search_value3" value=""></td>
<td><input type="text" name="search_value3" value="" /></td>
</tr>
<tr>
<td>[% INCLUDE form_widgets/select_search_field.tmpl name="search_field4" %]</td>
<td>[% INCLUDE form_widgets/select_match_criteria.tmpl name="match_criteria4" %]</td>
<td><input type="text" name="search_value4" value=""></td>
<td><input type="text" name="search_value4" value="" /></td>
</tr>
</table>
</div>
@ -181,7 +187,8 @@ Define the sort order for your results.
Use this to limit the number of results displayed.
</td>
</tr>
<td colspan="2">Limit to <input type="text" name="limit" value="15" size="5"> results</td>
<tr>
<td colspan="2">Limit to <input type="text" name="limit" value="15" size="5" /> results</td>
</tr>
</table>
</div>
@ -198,14 +205,15 @@ Use this to limit the number of results displayed.
Admin-specific limiting criteria go here. These criteria are not available to regular users.
</td>
</tr>
<td colspan="2"><input type="checkbox" name="trusted_only">&nbsp;Display only test results from trusted sources</td>
<tr>
<td colspan="2"><input type="checkbox" name="trusted_only" />&nbsp;Display only test results from trusted sources</td>
</tr>
</table>
</div>
</div>
<div>
<input class="button" type="reset" onclick="FormInit(this.parent, '');">&nbsp;<input class="button" type="submit">
<div class="formButtons">
<input class="button" type="reset" onclick="FormInit(this.parent, '');" />&nbsp;<input class="button" type="submit" />
</div>
</form>

Просмотреть файл

@ -28,8 +28,8 @@
[% icon="<img class=icon src='images/star1.gif' title='This result has comments' alt='*'>" %]
[% IF results %]
<script src="js/Comments.js"></script>
<script>
<script type="text/javascript" src="js/Comments.js"></script>
<script type="text/javascript">
var comments = new Array();
[% subscript=0 %]
[% FOREACH result=results %]
@ -57,13 +57,18 @@
<td colspan="2" class="header">Submission Date</td>
<td class="header">Result ID#</td>
<td class="header">Testcase ID#: Summary</td>
[% IF show_admin==1 %]<td class="header">Submitted By</td>[% END %]
<td class="header">Testgroup</td>
<td class="header">Product</td>
<td class="header">Platform</td>
<td class="header">Branch</td>
<td class="header">Locale</td>
</tr>
<tr>
[% colspan=9 %]
[% IF show_admin==1 %]
[% colspan=10 %]
[% END %]
[% IF results AND results.size > 0 %]
[% subscript=0 %]
@ -79,6 +84,7 @@
</td>
<td align="left"><a href="show_test.cgi?id=[% result.test_id | html | uri %]">
[% result.test_id | html %]</a>: [% result.summary | html %]</td>
[% IF show_admin==1 %]<td align="center">[% result.email FILTER html | uri | email %]</td>[% END %]
<td align="center">[% result.test_group_name | html %]</td>
<td align="center">[% result.product_name | html %]</td>
<td align="center">[% result.platform_name | html %]</td>
@ -90,13 +96,12 @@
[% ELSE %]
<tr>
<td class="no-results" colspan="8">No test results match the search criteria.</td>
<td class="no-results" colspan="[% colspan %]">No test results match the search criteria.</td>
</tr>
[% END %]
[% IF include_limit_criteria==1 %]
[% INCLUDE reporting/test_results_limit.tmpl %]
[% END %]
</table>

Просмотреть файл

@ -27,9 +27,9 @@
[% PROCESS global/selects.none.tmpl %]
<form name="search_results" method="get" action="search_results.cgi" onSubmit="if(this.summary.value=='-Summary-'){this.summary.value = '';}">
<form name="search_results" method="get" action="search_results.cgi" onSubmit="if(this.summary.value=='-Summary-'){this.summary.value = '';}if(this.email.value=='-Submitted By-'){this.email.value = '';}">
<script>
<script type="text/javascript">
function init()
{
FormInit(document.forms['search_results'], document.location.search);
@ -54,6 +54,16 @@ function init()
<option[% IF order_bys.test_id == 'DESC' %] selected[% END %] value="DESC">Z->A</option>
</select></td>
[% colspan=7 %]
[% IF show_admin==1 %]
[% colspan=8 %]
<td class="search"><select name="order_by_email">
<option value="">-Sort-</option>
<option[% IF order_bys.email == 'ASC' %] selected[% END %] value="ASC">A->Z</option>
<option[% IF order_bys.email == 'DESC' %] selected[% END %] value="DESC">Z->A</option>
</select></td>
[% END %]
<td class="search"><select name="order_by_test_group">
<option value="">-Sort-</option>
<option[% IF order_bys.test_group == 'ASC' %] selected[% END %] value="ASC">A->Z</option>
@ -92,6 +102,7 @@ function init()
<td class="search">[% INCLUDE form_widgets/select_timespan.tmpl %]</td>
<td class="search"></td>
<td class="search">[% INCLUDE form_widgets/input_summary.tmpl %]</td>
[% IF show_admin==1 %]<td class="search">[% INCLUDE form_widgets/input_email.tmpl %]</td>[% END %]
<td class="search">[% INCLUDE form_widgets/select_test_group.tmpl name="test_group" placeholder=1 %]</td>
<td class="search">[% INCLUDE form_widgets/select_product.tmpl name="product" placeholder=1 %]</td>
<td class="search">[% INCLUDE form_widgets/select_unique_platform.tmpl name="platform" placeholder=1 %]</td>
@ -103,10 +114,10 @@ function init()
<td class="search-heading" align="center">
Limit to</td>
<td class="search">
<input type="text" name="limit" value="[% limit | html %]" size="5"> results</td>
<td class="search-submit" colspan="7">
<input class="button" type="reset" onclick="FormInit(this.parent, '');">&nbsp;
<input class="button" type="submit" value="Show Results">
<input type="text" name="limit" value="[% limit | html %]" size="5" /> results</td>
<td class="search-submit" colspan="[% colspan %]">
<input class="button" type="reset" onclick="FormInit(this.parent, '');" />&nbsp;
<input class="button" type="submit" value="Show Results" />
</td>
</tr>

Просмотреть файл

@ -1,7 +1,7 @@
<div class="pagetools">
<div>
<h3>Search Criteria</h3>
<p>[% criteria | none %]</p>
<p>[% criteria | email %]</p>
[% IF results AND results.size > 0 %]
<hr/>
<p># results: [% results.size %]</p>