#!/usr/local/bin/perl
# search.cgi
# Display a list of packages where the name or description matches some string
require './cluster-software-lib.pl';
&ReadParse();
$s = $in{'search'};
@hosts = &list_software_hosts();
@servers = &list_servers();
foreach $h (@hosts) {
$anymatch = 0;
foreach $p (@{$h->{'packages'}}) {
if (($p->{'name'} =~ /\Q$s\E/i || $p->{'desc'} =~ /\Q$s\E/i) &&
!$already{$p->{'name'}}++) {
push(@match, $p);
$anymatch = 1;
}
}
if ($anymatch) {
push(@servs, &host_to_server($h));
}
}
if (@match == 1) {
&redirect("edit_pack.cgi?package=".&urlize($match[0]->{'name'}));
exit;
}
&ui_print_header(undef, $text{'search_title'}, "", "search");
if (@match) {
@match = sort { lc($a->{'name'}) cmp lc($b->{'name'}) } @match;
print "",&text('search_match', "$s"),"
\n";
print &ui_form_start("delete_packs.cgi", "post");
print &ui_hidden("search", $in{'search'}),"\n";
@links = ( &select_all_link("del", 0),
&select_invert_link("del", 0) );
@tds = ( "width=5" );
print &ui_links_row(\@links);
print &ui_columns_start([ "",
$text{'search_pack'},
$text{'search_class'},
$text{'search_desc'} ], 100, 0, \@tds);
foreach $i (@match) {
local @cols;
push(@cols, "{'name'})."\">$i->{'name'}");
$c = $i->{'class'};
push(@cols, $i->{'class'} || $text{'search_none'});
push(@cols, $i->{'desc'});
print &ui_checked_columns_row(\@cols, \@tds,
"del", $i->{'name'});
}
print &ui_columns_end();
print &ui_links_row(\@links);
# Show button to delete, and servers to remove from
print &ui_submit($text{'search_delete'}),"\n";
print &ui_select("server", undef,
[ [ -1, $text{'edit_all'} ],
map { [ $_->{'id'}, &server_name($_) ] } @servs ]);
print &ui_form_end();
}
else {
print "",&text('search_nomatch', "$s"),"\n";
}
&ui_print_footer("", $text{'index_return'});