Started work on Webmin search from left menu
authorJamie Cameron <jcameron@webmin.com>
Sun, 11 Nov 2007 22:41:15 +0000 (22:41 +0000)
committerJamie Cameron <jcameron@webmin.com>
Sun, 11 Nov 2007 22:41:15 +0000 (22:41 +0000)
blue-theme/blue_search.cgi [new file with mode: 0644]
blue-theme/lang/en
blue-theme/left.cgi

diff --git a/blue-theme/blue_search.cgi b/blue-theme/blue_search.cgi
new file mode 100644 (file)
index 0000000..2294cac
--- /dev/null
@@ -0,0 +1,82 @@
+#!/usr/local/bin/perl
+# Search Webmin modules and help pages and text and config.info
+
+do './web-lib.pl';
+&init_config();
+do './ui-lib.pl';
+&ReadParse();
+&load_theme_library();
+%text = &load_language($current_theme);
+
+$prod = &get_product_name();
+$ucprod = ucfirst($prod);
+&ui_print_header(undef, &text('search_title', $ucprod), "", undef, 0, 1);
+
+# XXX what if nothing was entered?
+$re = $in{'search'};
+
+print &ui_columns_start([ $text{'search_what'},
+                         $text{'search_type'},
+                         $text{'search_text'} ]);
+
+# Search module names first
+@mods = &get_available_module_infos();
+foreach $m (@mods) {
+       if ($m->{'desc'} =~ /\Q$re\E/i || $m->{'dir'} =~ /\Q$re\E/i) {
+               print &ui_columns_row([
+                       "<a href='$m->{'dir'}/'>$m->{'desc'}</a>",
+                       &text('search_mod', $ucprod),
+                       $m->{'desc'} =~ /\Q$re\E/i ?
+                               &highlight_text($m->{'desc'}) :
+                               &highlight_text($m->{'dir'}),
+                       ]);
+               }
+       }
+
+# Then do module configs
+foreach $m (@mods) {
+       %access = &get_module_acl(undef, $m);
+       next if ($access{'noconfig'});
+       $file = $prod eq 'webmin' ? "$m->{'dir'}/config.info"
+                                 : "$m->{'dir'}/uconfig.info";
+       %info = ( );
+       @info_order = ( );
+       &read_file($file, \%info, \@info_order);
+       foreach $o (@lang_order_list) {
+               &read_file("$file.$o", \%info);
+               }
+       foreach $c (@info_order) {
+               @p = split(/,/, $info{$c});
+               if ($p[0] =~ /\Q$re\E/i) {
+                       print &ui_columns_row([
+                               "<a href='config.cgi?$m->{'dir'}'>$m->{'desc'}</a>",
+                               $text{'search_config_'.$prod},
+                               &highlight_text($p[0]),
+                               ]);
+                       }
+               }
+       }
+
+# Then do help pages
+
+# Then do text strings
+
+print &ui_columns_end();
+
+&ui_print_footer();
+
+# Returns text with the search term bolded, and truncated to 60 characters
+sub highlight_text
+{
+local ($str, $len) = @_;
+$len ||= 60;
+if ($str =~ /^(.*)(\Q$re\E)(.*)$/i) {
+       $str = $1."<b>".$2."</b>".$3;
+       if (length($str) > $len) {
+               $str = substr($str, (length($str)-$len)/2, $len);
+               $str = "... ".$str." ...";
+               }
+       }
+return $str;
+}
+
index 9813536..df026e2 100644 (file)
@@ -2,6 +2,9 @@ left_login=Login: $1
 left_home=System Information
 left_oc=Sponsored by OpenCountry
 left_feedback=Send Feedback
+left_search_webmin=Search Webmin:
+left_search_usermin=Search Usermin:
+left_search=Search:
 
 right_header0=System Information
 right_host=System hostname
@@ -23,4 +26,10 @@ right_header5=Account Information
 right_uquota=Disk quota and usage
 right_time=Time on server
 
-
+search_title=Search $1
+search_what=Matching page
+search_type=Match type
+search_text=Matching text
+search_mod=$1 module
+search_config_webmin=Webmin module config
+search_config_usermin=Usermin preferences
index 4e8c596..1d44039 100755 (executable)
@@ -69,6 +69,12 @@ else {
                print "</div>\n";
                }
        }
+
+# Show module/help search form
+print "<form action=blue_search.cgi target=right>\n";
+print $text{'left_search'},"&nbsp;";
+print &ui_textbox("search", undef, 15);
+
 print "<div class='leftlink'><hr></div>\n";
 
 # Show info link
@@ -111,6 +117,7 @@ if ($ENV{'HTTP_WEBMIN_SERVERS'}) {
        }
 
 print <<EOF;
+</form>
 </div>
 </body>
 EOF