Handle hostnames with upper-case letters
[webmin.git] / software / search.cgi
1 #!/usr/local/bin/perl
2 # search.cgi
3 # Display a list of packages where the name or description matches some string
4
5 require './software-lib.pl';
6 &ReadParse();
7
8 $in{'search'} || &error($text{'search_esearch'});
9 if (defined(&package_search)) {
10         # Use system-specific search function
11         $n = &package_search($in{'search'});
12         @match = ( 0 .. $n-1 ) if ($n);
13         }
14 else {
15         # Search manually through entire list
16         $n = &list_packages();
17         $s = $in{'search'};
18         for($i=0; $i<$n; $i++) {
19                 if ($packages{$i,'name'} =~ /\Q$s\E/i ||
20                     $packages{$i,'desc'} =~ /\Q$s\E/i) {
21                         push(@match, $i);
22                         }
23                 }
24         }
25 if (@match == 1 && $in{'goto'}) {
26         $p = $packages{$match[0],'name'};
27         $v = $packages{$match[0],'version'};
28         &redirect("edit_pack.cgi?package=".&urlize($p)."&version=".&urlize($v));
29         exit;
30         }
31
32 &ui_print_header(undef, $text{'search_title'}, "", "search");
33
34 if (@match) {
35         @match = sort { lc($packages{$a,'name'}) cmp lc($packages{$b,'name'}) }
36                       @match;
37         print "<b>",&text('search_match', "<tt>$s</tt>"),"</b><p>\n";
38         print &ui_form_start("delete_packs.cgi", "post");
39         print &ui_hidden("search", $in{'search'});
40         @tds = ( "width=5" );
41         @links = ( &select_all_link("del", 0),
42                    &select_invert_link("del", 0) );
43         print &ui_links_row(\@links);
44         print &ui_columns_start([ "",
45                                   $text{'search_pack'},
46                                   $text{'search_class'},
47                                   $text{'search_desc'} ], 100, 0, \@tds);
48         foreach $i (@match) {
49                 local @cols;
50                 local $v = $packages{$i,'shortversion'} ||
51                            $packages{$i,'version'};
52                 push(@cols, "<a href=\"edit_pack.cgi?search=$s&package=".
53                       &urlize($packages{$i,'name'})."&version=".
54                       &urlize($packages{$i,'version'})."\">".&html_escape(
55                         $packages{$i,'name'}.($v ?  " $v" : ""))."</a>");
56                 $c = $packages{$i,'class'};
57                 push(@cols, $c ? &html_escape($c)
58                                 : $text{'search_none'});
59                 push(@cols, &html_escape($packages{$i,'desc'}));
60                 if ($packages{$i,'nouninstall'}) {
61                         print &ui_columns_row([ "", @cols ], \@tds);
62                         }
63                 else {
64                         print &ui_checked_columns_row(\@cols, \@tds, "del",
65                               $packages{$i,'name'}." ".$packages{$i,'version'});
66                         }
67                 }
68         print &ui_columns_end();
69         print &ui_links_row(\@links);
70         print &ui_form_end([ [ undef, $text{'search_delete'} ] ]);
71         }
72 else {
73         print "<b>",&text('search_nomatch', "<tt>$s</tt>"),"</b><p>\n";
74         }
75
76 &ui_print_footer("", $text{'index_return'});
77