#!/usr/local/bin/perl # edit_domain.cgi # Display details of a domain for editing require './virtual-server-lib.pl'; use POSIX; &ReadParse(); $d = &get_domain($in{'dom'}); $d || &error($text{'edit_egone'}); &can_config_domain($d) || &error($text{'edit_ecannot'}); if ($d->{'parent'}) { $parentdom = &get_domain($d->{'parent'}); } if ($d->{'alias'}) { $aliasdom = &get_domain($d->{'alias'}); } if ($d->{'subdom'}) { $subdom = &get_domain($d->{'subdom'}); } $tmpl = &get_template($d->{'template'}); &ui_print_header(&domain_in($d), $aliasdom ? $text{'edit_title3'} : $subdom ? $text{'edit_title4'} : $parentdom ? $text{'edit_title2'} : $text{'edit_title'}, ""); @tds = ( "width=30%" ); print &ui_form_start("save_domain.cgi", "post"); print &ui_hidden("dom", $in{'dom'}),"\n"; print &ui_hidden_table_start($text{'edit_header'}, "width=100%", 4, "basic", 1); # Domain name, with link print &ui_table_row($text{'edit_domain'}, $d->{'web'} ? "{'dom'}/>$d->{'dom'}" : "$d->{'dom'}", undef, \@tds); # Username print &ui_table_row($text{'edit_user'}, "$d->{'user'}", undef, \@tds); # Group name print &ui_table_row($text{'edit_group'}, ($d->{'unix'} || $d->{'parent'}) && $d->{'group'} ? "$d->{'group'}" : $text{'edit_nogroup'}, undef, \@tds); if (!$aliasdom) { # Only show database name/count for non-alias domains @dbs = &domain_databases($d); print &ui_table_row($text{'edit_dbs'}, @dbs > 0 ? scalar(@dbs) : $text{'edit_nodbs'}, undef, \@tds); } else { print &ui_table_row(" ", " "); # End of row } # Show creator print &ui_table_row($text{'edit_created'}, $d->{'creator'} ? &text('edit_createdby', &make_date($d->{'created'}), $d->{'creator'}) : &make_date($d->{'created'}), undef, \@tds); if ($virtualmin_pro) { # Show reseller print &ui_table_row($text{'edit_reseller'}, $d->{'reseller'} ? "$d->{'reseller'}" : $text{'edit_noreseller'}, undef, \@tds); } if (!$aliasdom && $d->{'dir'}) { # Show home directory print &ui_table_row($text{'edit_home'}, "$d->{'home'}", 3, \@tds); } if ($d->{'proxy_pass_mode'} && $d->{'proxy_pass'} && $d->{'web'}) { # Show forwarding / proxy destination print &ui_table_row($text{'edit_proxy'.$d->{'proxy_pass_mode'}}, "$d->{'proxy_pass'}", 3, \@tds); } if ($aliasdom) { # Show link to aliased domain print &ui_table_row($text{'edit_aliasto'}, "". "$aliasdom->{'dom'}", 3, \@tds); } elsif ($parentdom) { # Show link to parent domain print &ui_table_row($text{'edit_parent'}, "". "$parentdom->{'dom'}", 3, \@tds); } print &ui_hidden_table_end("basic"); # Configuration settings section print &ui_hidden_table_start($text{'edit_headerc'}, "width=100%", 2, "config", 0); # Show username prefix, with option to change if (!$aliasdom) { @users = &list_domain_users($d, 1, 1, 1, 1); $msg = $tmpl->{'append_style'} == 0 || $tmpl->{'append_style'} == 1 || $tmpl->{'append_style'} == 5 ? 'edit_prefix' : 'edit_suffix'; print &ui_table_row($text{$msg}, @users ? "$d->{'prefix'} (". &text('edit_noprefix', scalar(@users)).")" : &ui_textbox("prefix", $d->{'prefix'}, 30), undef, \@tds); } # Show active template foreach $t (&list_templates()) { next if ($t->{'deleted'}); next if (($d->{'parent'} && !$d->{'alias'}) && !$t->{'for_sub'}); next if (!$d->{'parent'} && !$t->{'for_parent'}); next if (!&master_admin() && !&reseller_admin() && !$t->{'for_users'}); next if ($d->{'alias'} && !$t->{'for_alias'}); next if (!&can_use_template($t)); push(@cantmpls, $t); $gottmpl = 1 if ($t->{'id'} == $tmpl->{'id'}); } push(@cantmpls, $tmpl) if (!$gottmpl); print &ui_table_row($text{'edit_tmpl'}, &ui_select("template", $tmpl->{'id'}, [ map { [ $_->{'id'}, $_->{'name'} ] } @cantmpls ]), undef, \@tds); if (!$aliasdom) { # Show IP-related options if ($d->{'reseller'}) { $resel = &get_reseller($d->{'reseller'}); if ($resel) { $reselip = $resel->{'acl'}->{'defip'}; } } print &ui_table_row($text{'edit_ip'}, "$d->{'ip'} ". ($d->{'virt'} ? $text{'edit_private'} : $d->{'ip'} eq $reselip ? &text('edit_rshared', "$resel->{'name'}") : $d->{'ip'} eq &get_default_ip() ? $text{'edit_shared'} : $text{'edit_shared2'}), 1, \@tds); if ($d->{'virt'}) { # Got a virtual IP .. show option to remove local $iface = &get_address_iface($d->{'ip'}); $ipfield = &ui_radio("virt", 1, [ [ 0, $text{'edit_virtoff'} ], [ 1, &text('edit_virton', "$iface") ] ]); } elsif ($config{'all_namevirtual'}) { # Always name-based, but IP can be changed $ipfield = &ui_textbox("ip", $d->{'ip'}, 15); } elsif (!&can_use_feature("virt")) { # Not allowed to add virtual IP $ipfield = $text{'edit_virtnone'}; } else { # No IP .. show option to add $ipfield = &ui_oneradio("virt", 0, $text{'edit_virtnone'}, 1); if ($tmpl->{'ranges'} ne "none") { # Can do automatic allocation local %racl = $d->{'reseller'} ? &get_reseller_acl($d->{'reseller'}) : (); local $alloc = $racl{'ranges'} ? &free_ip_address(\%racl) : &free_ip_address($tmpl); if ($alloc) { $ipfield .= &ui_oneradio("virt", 1, &text('edit_alloc', $alloc), 0); } else { # None left! $ipfield .= $text{'form_noalloc'}; } } else { # Use must enter IP $ipfield .= &ui_oneradio("virt", 1, $text{'edit_virtalloc'}, 0). " ".&ui_textbox("ip", undef, 15); } } if (&can_use_feature("virt")) { print &ui_table_row($text{'edit_virt'}, $ipfield, 1, \@tds); } } # Show description print &ui_table_row($text{'edit_owner'}, &ui_textbox("owner", $d->{'owner'}, 50), 1, \@tds); # Show alias mode &require_mail(); if ($d->{'alias'} && $supports_aliascopy && $d->{'mail'}) { print &ui_table_row($text{'edit_aliascopy'}, &ui_radio("aliascopy", int($d->{'aliascopy'}), [ [ 1, $text{'tmpl_aliascopy1'} ], [ 0, $text{'tmpl_aliascopy0'} ] ])); } if (!$parentdom) { # Show owner's email address and password print &ui_table_row($text{'edit_email'}, $d->{'unix'} ? &ui_opt_textbox("email", $d->{'email'}, 30, $text{'edit_email_def'}) : &ui_textbox("email", $d->{'email'}, 30), 1, \@tds); print &ui_table_row($text{'edit_passwd'}, &ui_opt_textbox("passwd", undef, 20, $text{'edit_lv'}." ".&show_password_popup($d), $text{'edit_set'}), 1, \@tds); } print &ui_hidden_table_end("config"); # Related servers section @aliasdoms = &get_domain_by("alias", $d->{'id'}); @subdoms = &get_domain_by("parent", $d->{'id'}, "alias", undef); if (@aliasdoms || @subdoms) { print &ui_hidden_table_start($text{'edit_headers'}, "width=100%", 4, "subs", 0); } # Show any sub-servers if (@subdoms) { print &ui_table_row($text{'edit_subdoms'}, &domains_list_links(\@subdoms, "parent", $d->{'dom'}), 3, \@tds); } # Show any alias domains if (@aliasdoms) { print &ui_table_row($text{'edit_aliasdoms'}, &domains_list_links(\@aliasdoms, "alias", $d->{'dom'}), 3, \@tds); } if (@aliasdoms || @subdoms) { print &ui_hidden_table_end("subs"); } # Start of collapsible section for limits $limits_section = !$parentdom && (&has_home_quotas() && (&can_edit_quotas() || $d->{'unix'}) || $config{'bw_active'}); if ($limits_section) { print &ui_hidden_table_start($text{'edit_limitsect'}, "width=100%", 2, "limits", 0); } # Show user and group quota editing inputs if (&has_home_quotas() && !$parentdom && &can_edit_quotas()) { print &ui_table_row($text{'edit_quota'}, &opt_quota_input("quota", $d->{'quota'}, "home"), 3, \@tds); print &ui_table_row($text{'edit_uquota'}, &opt_quota_input("uquota", $d->{'uquota'}, "home"), 3, \@tds); } if ($config{'bw_active'} && !$parentdom) { # Show bandwidth limit and usage if (&can_edit_bandwidth()) { print &ui_table_row($text{'edit_bw'}, &bandwidth_input("bw", $d->{'bw_limit'}), 3, \@tds); # If bandwidth disabling is enabled, show option to turn off # for this domain if ($config{'bw_disable'}) { print &ui_table_row($text{'edit_bw_disable'}, &ui_radio("bw_no_disable", int($d->{'bw_no_disable'}), [ [ 0, $text{'yes'} ], [ 1, $text{'no'} ] ])); } } else { print &ui_table_row($text{'edit_bw'}, $d->{'bw_limit'} ? &text('edit_bwpast_'.$config{'bw_past'}, &nice_size($d->{'bw_limit'}), $config{'bw_period'}) : $text{'edit_bwnone'}, 3, \@tds); } } # Show total disk usage, broken down into unix user and mail users if (&has_home_quotas() && !$parentdom && $d->{'unix'}) { &show_domain_quota_usage($d); } if ($config{'bw_active'} && !$parentdom) { # Show usage over current period &show_domain_bw_usage($d); } if ($limits_section) { print &ui_hidden_table_end("limits"); } # Show section for custom fields, if any $fields = &show_custom_fields($d, \@tds); if ($fields) { print &ui_hidden_table_start($text{'edit_customsect'}, "width=100%", 2, "custom", 0); print $fields; print &ui_hidden_table_end("custom"); } # Show buttons for turning features on and off (if allowed) if ($d->{'disabled'}) { # Disabled, so tell the user that features cannot be changed print "". "".$text{'edit_disabled_'.$d->{'disabled_reason'}}."\n". $text{'edit_disabled'}."
". ($d->{'disabled_why'} ? &text('edit_disabled_why', $d->{'disabled_why'}) : ""). "
\n"; } else { # Show features for this domain print &ui_hidden_table_start($text{'edit_featuresect'}, "width=100%", 2, "feature", 0); @grid = ( ); $i = 0; @dom_features = $aliasdom ? @opt_alias_features : $subdom ? @opt_subdom_features : @opt_features; foreach $f (@dom_features) { # Webmin feature is not needed for sub-servers next if ($d->{'parent'} && $f eq "webmin"); # Unix feature is not needed for subdomains next if ($d->{'parent'} && $f eq "unix"); # Cannot enable features not in alias next if ($aliasdom && !$aliasdom->{$f}); # Don't show features that are always enabled, if currently set if ($config{$f} == 3 && $d->{$f}) { print &ui_hidden($f, $d->{$f}),"\n"; next; } # Don't show features that are globally disabled next if (!$config{$f} && defined($config{$f})); local $txt = $parentdom ? $text{'edit_sub'.$f} : undef; $txt ||= $text{'edit_'.$f}; if (!&can_use_feature($f)) { push(@grid, &ui_checkbox($f."_dis", 1, undef, $d->{$f}, undef, 1). &ui_hidden($f, $d->{$f}). " ".&hlink($txt, $f).""); } else { push(@grid, &ui_checkbox($f, 1, "", $d->{$f}). " ".&hlink($txt, $f).""); } } foreach $f (@feature_plugins) { next if (!&plugin_call($f, "feature_suitable", $parentdom, $aliasdom, $subdom)); $label = &plugin_call($f, "feature_label", 1); $label = "$label"; $hlink = &plugin_call($f, "feature_hlink"); $label = &hlink($label, $hlink, $f) if ($hlink); if (!&can_use_feature($f)) { push(@grid, &ui_checkbox($f."_dis", 1, "", $d->{$f}, undef, 1). &ui_hidden($f, $d->{$f}). " ".$label); } else { push(@grid, &ui_checkbox($f, 1, "", $d->{$f}). " ".$label); } } $ftable = &ui_grid_table(\@grid, 2, 100, [ "width=30% align=left", "width=70% align=left" ]); print &ui_table_row(undef, $ftable, 4); print &ui_hidden_table_end("feature"); } # Save changes button print &ui_form_end([ [ "save", $text{'edit_save'} ] ]); # Show actions for this domain, unless the theme vetos it (cause they are on # the left menu) if ($current_theme ne "virtual-server-theme" && !$main::basic_virtualmin_domain) { &show_domain_buttons($d); } # Make sure the left menu is showing this domain if (defined(&theme_select_domain)) { &theme_select_domain($d); } &ui_print_footer("", $text{'index_return'});