return map { $_->{Message} } values %refs;
}
-sub listall ($$) {
+sub listall ($$;%) {
my $class = shift;
my $dbh = shift;
+ my %args = @_;
- my $sth = $dbh->prepare( "
- SELECT $SELECT_FIELDS FROM bugs ORDER BY id
- " );
+ my @where;
+
+ if ( $args{State} eq "Open" ) { push @where, qq(open = "true" ) }
+ elsif ( $args{State} eq "Closed" ) { push @where, qq(open = "false" ) }
+
+ if ( $args{Severities} ) {
+ push @where,
+ join( " OR ", map { qq{severity = "$_"} } @{ $args{Severities} } );
+ }
+ my $select = "SELECT $SELECT_FIELDS FROM bugs ";
+ $select .= "WHERE " . join( " AND ", map { qq{($_)} } @where ) if @where;
+ $select .= " ORDER BY id";
+
+ #print "<p>$select</p>";
+ my $sth = $dbh->prepare($select);
$sth->execute();
my @r;
while ( my @row = $sth->fetchrow_array ) {
my $ml = htmlsanit( $c{ListAddress} );
-my @all_bugs = Bugs::Bug->listall($dbh);
-
my @index;
my $lists;
+# Parameter defaults.
+param('severityfilter')
+ || param( -name => 'severityfilter', -value => $c{SeverityLevels} );
+param('state') or param( -name => 'state', -default => "Open" );
+
+my @bugs;
+
sub buglist ($$) {
my $open = shift;
my $sev = shift;
my @bugs =
- grep { $_->{open} == $open and $_->{severity} eq $sev } @all_bugs;
+ grep { $_->{open} == $open and $_->{severity} eq $sev } @bugs;
- return "" unless @bugs;
+ return unless @bugs;
sub bug($) {
return (
$lists .= "\n";
}
-foreach my $open ( 1, 0 ) {
- foreach my $sev ( @{ $c{SeverityLevels} } ) { buglist( $open, $sev ); }
-}
-
print header;
print start_html(
]
) . "\n";
-print hr . "\n";
+@bugs = Bugs::Bug->listall(
+ $dbh,
+ State => param('state'),
+ Severities => [ param('severityfilter') ],
+);
+
+foreach my $open ( 1, 0 ) {
+ foreach my $sev ( @{ $c{SeverityLevels} } ) { buglist( $open, $sev ); }
+}
-print ul (@index);
+print ul (@index) if @index;
-print hr . "\n";
+if ( !$lists ) {
+ $lists = h1("No bugs match the criteria.");
+}
+print hr(), "\n", $lists, hr(), "\n";
+
+print h2("Search");
+
+print
+ start_form( -method => "POST" ),
+ table(
+ Tr(
+ [
+ td(
+ [
+ "State:",
+ popup_menu(
+ -name => 'state',
+ -values => [ "Any", "Open", "Closed" ]
+ )
+ ]
+ ),
+ td( [ "Title contains:", textfield('titlefilter') ] ),
+ td(
+ [
+ "Severities:",
+ join(
+ "",
+ checkbox_group(
+ -name => 'severityfilter',
+ -values => $c{SeverityLevels}
+ )
+ )
+ ]
+ ),
+ ]
+ ),
+ ),
+ submit, "\n",
+ end_form,
+ hr, "\n";
-print $lists;
print end_html;