\n"; # Add rows for core features @table_order_initial = ( ); foreach $f (@features) { # Skip features for modules that aren't enabled in Webmin my $cfunc = "check_module_".$f; if (!$config{$f} && defined(&$cfunc) && !&$cfunc()) { next; } local @acts; push(@acts, ui_link("search.cgi?field=$f&what=1", $text{'features_used'})); my $vital = &indexof($f, @vital_features) >= 0; my $deprecated = &indexof($f, @deprecated_features) >= 0; my $always = &indexof($f, @can_always_features) >= 0; if ($vital) { # Some features are *never* disabled, but may be not checked # by default push(@table_order_initial, $f); push(@table, [ { 'type' => 'checkbox', 'checked' => 1, 'disabled' => 1 }, $text{'feature_'.$f}, $text{'features_feature'}, get_module_version_and_type(), $fcount{$f} || 0, { 'type' => 'checkbox', 'name' => 'factive', 'value' => $f, 'checked' => $config{$f} == 3 }, &ui_links_row(\@acts) ]); } elsif ($deprecated && !$config{$f} && &check_feature_depends($f)) { # Some features are now hidden unless already enabled next; } else { # Other features can be disabled push(@table_order_initial, $f); push(@table, [ { 'type' => 'checkbox', 'name' => 'fmods', 'value' => $f, 'checked' => $config{$f} != 0, 'tags' => "onClick='this.closest(\"tr\").querySelector(\"td:nth-child(6) input\").disabled = !this.checked;'", }, $text{'feature_'.$f}, $text{'features_feature'}, get_module_version_and_type(), $fcount{$f} || 0, { 'type' => 'checkbox', 'name' => 'factive', 'value' => $f, 'checked' => $config{$f} != 2, 'disabled' => $config{$f} == 0 }, &ui_links_row(\@acts) ]); } } # Add rows for all plugins %plugins = map { $_, 1 } @plugins; %inactive = map { $_, 1 } @plugins_inactive; foreach $m (sort { $a->{'desc'} cmp $b->{'desc'} } &get_all_module_infos()) { $mdir = &module_root_directory($m->{'dir'}); if (-r "$mdir/virtual_feature.pl") { &foreign_require($m->{'dir'}, "virtual_feature.pl"); local @acts; if (-r "$mdir/config.info") { push(@acts, ui_link("edit_plugconfig.cgi?mod=$m->{'dir'}", $text{'newplugin_conf'})); } if (!$m->{'hidden'}) { push(@acts, ui_link("../$m->{'dir'}/", $text{'newplugin_open'})); } if (!$donesep++) { print &ui_columns_row([ "