/usr/local/CPAN/CPANXR/CPANXR/Apache/Search.pm
# $Id: Search.pm,v 1.7 2003/10/04 10:22:08 clajac Exp $
package CPANXR::Apache::Search;
use CPANXR::Apache::Util;
use CPANXR::Database;
use Data::Page;
use strict;
sub search {
my ($self, $r, $q) = @_;
my $symbol = $q->param('symbol');
my $case = $q->param('casing');
my $current = $q->param('p') || 1;
unless($symbol) {
$r->print("Empty <b>symbol</b>");
return;
}
unless($symbol =~ /^[A-Za-z_][A-Za-z0-9_]*(?:(?:\:\:|\')[A-Za-z0-9_]*)*$/) {
$r->print("Symbol <b>$symbol</b> is invalid");
return;
}
my $result = CPANXR::Database->select_symbol_by_name($symbol . "%", $case);
unless(@$result) {
$r->print("Sorry, I can't find <b>$symbol</b>");
return;
}
$r->print("Looking for <b>$symbol</b> and found:<br>");
$r->print("<blockquote>\n");
my $table = CPANXR::Apache::Util::Table->new($r, 2, [qw(80% 20%)]);
$table->begin;
$table->header("<b>Symbol:</b>", "<b>ID:</b>");
my $page = Data::Page->new(scalar @$result, 10, $current);
for($page->splice($result)) {
my $url = qq{<a href="find?symbol=$_->[0]">$_->[1]</a>};
$table->print($url, $_->[0]);
}
$table->end;
# Write navigation
my $base = "search?symbol=$symbol&casing=$case";
CPANXR::Apache::Util->navigator($r, $page, $base);
$r->print("</blockquote>");
}
1;