#!/usr/local/bin/perl # edit_mod.cgi # Display details of a module or theme require './cluster-usermin-lib.pl'; &ReadParse(); $type = $in{'tedit'} || !$in{'mod'} ? 'theme' : 'mod'; $name = $in{$type}; &ui_print_header(undef, $text{"edit_title_$type"}, ""); # Find all hosts with the module or theme @hosts = &list_usermin_hosts(); @servers = &list_servers(); foreach $h (@hosts) { local ($s) = grep { $_->{'id'} == $h->{'id'} } @servers; foreach $m ($type eq 'theme' ? @{$h->{'themes'}} : @{$h->{'modules'}}) { if ($m->{'dir'} eq $name) { $s->{'module'} = $m; push(@got, $s); push(@goth, $h); $mod = $m if (!$mod); if (!$checkon && ($s->{'id'} == $in{'host'} || !$s->{'id'} && !defined($in{'host'}))) { $checkon = $s; $checkonh = $h; } } } } # Get the details from this host, or the first in the list if (!$checkon) { $checkonh = $goth[0]; $checkon = $got[0]; } #&remote_foreign_require($checkon->{'host'}, "software", "software-lib.pl"); #@pinfo = &remote_foreign_call($checkon->{'host'}, "software", "package_info", # $in{'package'}); # Show module/theme details print "\n"; print "\n"; print "
",&text("edit_header_$type", &server_name($checkon)), "
\n"; print "\n"; print "\n"; print "\n"; print "\n"; if ($type eq 'mod') { # Show details of module foreach $m (@{$checkonh->{'modules'}}) { $modmap{$m->{'dir'}} = $m; foreach $d (split(/\s+/, $m->{'depends'})) { push(@{$ondeps{$d}}, $m); } } &read_file("$usermin::config{'usermin_dir'}/webmin.catnames", \%catnames); %utext = &get_usermin_text(); print "\n"; $c = $mod->{'category'}; print "\n"; print "\n"; print "\n"; # Show operating systems print "\n"; print "\n"; # Show which modules this module depends upon local @deps = grep { !/^[0-9\.]+$/ } split(/\s+/, $mod->{'depends'}); local @pdeps = split(/\s+/, $mod->{'perldepends'}); print "\n"; print "\n"; # Show which other modules depend on this one print "\n"; print "\n"; } else { # Show details of theme } print "
$text{'edit_desc'}",$mod->{'desc'},"$text{'edit_ver'}",$mod->{'version'} ? $mod->{'version'} : $text{'edit_nover'},"
$text{'edit_cat'}",$catname{$c} ? $catname{$c} : $utext{"category_$c"} ? $utext{"category_$c"} : $utext{"category_"},"$text{'edit_dir'}$mod->{'dir'}
$text{'edit_os'}\n"; $oss = $mod->{'os_support'}; if (!$oss) { print $text{'edit_osall'}; } else { open(OSLIST, "$root_directory/os_list.txt"); while() { chop; if (/^([^\t]+)\t+([^\t]+)\t+(\S+)\t+(\S+)\t*(.*)$/) { $osname{$3} = $1 if (!$osname{$3}); } } close(OSLIST); $osname{"*-linux"} = "Linux"; while(1) { local ($os, $ver, $codes); if ($oss =~ /^([^\/\s]+)\/([^\{\s]+)\{([^\}]*)\}\s*(.*)$/) { $os = $1; $ver = $2; $codes = $3; $oss = $4; } elsif ($oss =~ /^([^\/\s]+)\/([^\/\s]+)\s*(.*)$/) { $os = $1; $ver = $2; $oss = $3; } elsif ($oss =~ /^([^\{\s]+)\{([^\}]*)\}\s*(.*)$/) { $os = $1; $codes = $2; $oss = $3; } elsif ($oss =~ /^\{([^\}]*)\}\s*(.*)$/) { $codes = $1; $oss = $2; } elsif ($oss =~ /^(\S+)\s*(.*)$/) { $os = $1; $oss = $2; } else { last; } print " , \n" if ($doneone++); $osn = $osname{$os} ? $osname{$os} : $os; $osn =~ s/\s/ /g; if ($ver) { print "$osn $ver"; } elsif ($os) { print "$osn"; } if ($codes) { $codes =~ s/\s/ /g; if ($os) { print " (",&text('edit_codes', "$codes"),")"; } else { print &text('edit_codes', "$codes"); } } } } print "
$text{'edit_deps'}\n"; if (@deps || @pdeps) { foreach $d (@deps) { local $mm = $modmap{$d}; print $mm->{'desc'}," ($mm->{'dir'})
\n"; } foreach $d (@pdeps) { print &text('edit_pdep', "$d"),"
\n"; } } else { print "$text{'edit_nodeps'}\n"; } print "
$text{'edit_ondeps'}\n"; if ($ondeps{$mod->{'dir'}}) { foreach $d (@{$ondeps{$mod->{'dir'}}}) { print $d->{'desc'}," ($d->{'dir'})
\n"; } } else { print "$text{'edit_nodeps'}\n"; } print "

\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
\n"; print "
\n"; # Show hosts with the module or theme print &ui_hr(); print &ui_subheading($text{'edit_hosts'}); @icons = map { "/servers/images/$_->{'type'}.gif" } @got; @links = map { "edit_host.cgi?id=$_->{'id'}" } @got; @titles = map { &server_name($_). ($_->{'module'}->{'version'} ? " ($text{'host_version2'} $_->{'module'}->{'version'})" : "") } @got; &icons_table(\@links, \@titles, \@icons); &remote_finished(); &ui_print_footer("", $text{'index_return'});