--- loncom/interface/domainprefs.pm 2013/02/02 02:54:04 1.160.6.15
+++ loncom/interface/domainprefs.pm 2012/08/27 00:53:22 1.168
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler to set domain-wide configuration settings
#
-# $Id: domainprefs.pm,v 1.160.6.15 2013/02/02 02:54:04 raeburn Exp $
+# $Id: domainprefs.pm,v 1.168 2012/08/27 00:53:22 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -45,7 +45,7 @@ described at http://www.lon-capa.org.
=head1 OVERVIEW
Each institution using LON-CAPA will typically have a single domain designated
-for use by individuals affiliated with the institution. Accordingly, each domain
+for use by individuals affliated with the institution. Accordingly, each domain
may define a default set of logos and a color scheme which can be used to "brand"
the LON-CAPA instance. In addition, an institution will typically have a language
and timezone which are used for the majority of courses.
@@ -86,7 +86,7 @@ $dom,$settings,$rowtotal,$action.
$dom is the domain, $settings is a reference to a hash of current settings for
the current context, $rowtotal is a reference to the scalar used to record the
-number of rows displayed on the page, and $action is the context (quotas,
+number of rows displayed on the page, and $action is the context (quotas,
requestcourses or requestauthor).
The print_quotas routine was orginally created to display/store information
@@ -210,18 +210,16 @@ sub handler {
'quotas','autoenroll','autoupdate','autocreate',
'directorysrch','usercreation','usermodification',
'contacts','defaults','scantron','coursecategories',
- 'serverstatuses','requestcourses','usersessions',
- 'loadbalancing','requestauthor'],$dom);
+ 'serverstatuses','requestcourses','helpsettings',
+ 'coursedefaults','usersessions','loadbalancing',
+ 'requestauthor'],$dom);
my @prefs_order = ('rolecolors','login','defaults','quotas','autoenroll',
'autoupdate','autocreate','directorysrch','contacts',
'usercreation','usermodification','scantron',
'requestcourses','requestauthor','coursecategories',
- 'serverstatuses','usersessions');
- my %existing;
- if (ref($domconfig{'loadbalancing'}) eq 'HASH') {
- %existing = %{$domconfig{'loadbalancing'}};
- }
- if ((keys(%servers) > 1) || (keys(%existing) > 0)) {
+ 'serverstatuses','helpsettings',
+ 'coursedefaults','usersessions');
+ if (keys(%servers) > 1) {
push(@prefs_order,'loadbalancing');
}
my %prefs = (
@@ -353,6 +351,26 @@ sub handler {
col3 => 'Specific IPs',
}],
},
+ 'helpsettings' =>
+ {text => 'Help page settings',
+ help => 'Domain_Configuration_Help_Settings',
+ header => [{col1 => 'Help Settings (logged-in users)',
+ col2 => 'Value'}],
+ },
+ 'coursedefaults' =>
+ {text => 'Course/Community defaults',
+ help => 'Domain_Configuration_Course_Defaults',
+ header => [{col1 => 'Defaults which can be overridden in each course by a CC',
+ col2 => 'Value',},
+ {col1 => 'Defaults which can be overridden for each course by a DC',
+ col2 => 'Value',},],
+ },
+ 'privacy' =>
+ {text => 'User Privacy',
+ help => 'Domain_Configuration_User_Privacy',
+ header => [{col1 => 'Setting',
+ col2 => 'Value',}],
+ },
'usersessions' =>
{text => 'User session hosting/offloading',
help => 'Domain_Configuration_User_Sessions',
@@ -364,11 +382,11 @@ sub handler {
col2 => 'Rules'}],
},
'loadbalancing' =>
- {text => 'Dedicated Load Balancer(s)',
+ {text => 'Dedicated Load Balancer',
help => 'Domain_Configuration_Load_Balancing',
- header => [{col1 => 'Balancers',
+ header => [{col1 => 'Server',
col2 => 'Default destinations',
- col3 => 'User affiliation',
+ col3 => 'User affliation',
col4 => 'Overrides'},
],
},
@@ -384,57 +402,26 @@ sub handler {
col2 => 'Value'}],
};
}
-
my @roles = ('student','coordinator','author','admin');
my @actions = &Apache::loncommon::get_env_multiple('form.actions');
&Apache::lonhtmlcommon::add_breadcrumb
({href=>"javascript:changePage(document.$phase,'pickactions')",
text=>"Settings to display/modify"});
my $confname = $dom.'-domainconfig';
-
if ($phase eq 'process') {
&Apache::lonconfigsettings::make_changes($r,$dom,$phase,$context,\@prefs_order,\%prefs,\%domconfig,$confname,\@roles);
} elsif ($phase eq 'display') {
my $js = &recaptcha_js();
- if ((keys(%servers) > 1) || (keys(%existing) > 0)) {
+ if (keys(%servers) > 1) {
my ($othertitle,$usertypes,$types) =
&Apache::loncommon::sorted_inst_types($dom);
- $js .= &lonbalance_targets_js($dom,$types,\%servers,
- $domconfig{'loadbalancing'}).
- &new_spares_js().
- &common_domprefs_js().
- &Apache::loncommon::javascript_array_indexof();
+ $js = &lonbalance_targets_js($dom,$types,\%servers).
+ &new_spares_js().
+ &common_domprefs_js().
+ &Apache::loncommon::javascript_array_indexof();
}
&Apache::lonconfigsettings::display_settings($r,$dom,$phase,$context,\@prefs_order,\%prefs,\%domconfig,$confname,$js);
} else {
-# check if domconfig user exists for the domain.
- my $servadm = $r->dir_config('lonAdmEMail');
- my ($configuserok,$author_ok,$switchserver) =
- &config_check($dom,$confname,$servadm);
- unless ($configuserok eq 'ok') {
- &Apache::lonconfigsettings::print_header($r,$phase,$context);
- $r->print(&mt('The domain configuration user "[_1]" has yet to be created.',
- $confname).
- ' '
- );
- if ($switchserver) {
- $r->print(&mt('Ordinarily, that domain configuration user is created when the ./UPDATE script is run to install LON-CAPA for the first time.').
- ' '.
- &mt('However, that does not apply when new domains are added to a multi-domain server, and ./UPDATE has not been run recently.').
- ' '.
- &mt('The "[_1]" user can be created automatically when a Domain Coordinator visits the web-based "Set domain configuration" screen, in a session hosted on the primary library server.',$confname).
- ' '.
- &mt('To do that now, use the following link: [_1]',$switchserver)
- );
- } else {
- $r->print(&mt('To create that user from the command line run the ./UPDATE script found in the top level directory of the extracted LON-CAPA tarball.').
- ' '.
- &mt('Once that is done, you will be able to use the web-based "Set domain configuration" to configure the domain')
- );
- }
- $r->print(&Apache::loncommon::end_page());
- return OK;
- }
if (keys(%domconfig) == 0) {
my $primarylibserv = &Apache::lonnet::domain($dom,'primary');
my @ids=&Apache::lonnet::current_machine_ids();
@@ -513,6 +500,10 @@ sub process_changes {
$output = &modify_quotas($dom,$action,%domconfig);
} elsif ($action eq 'requestauthor') {
$output = &modify_quotas($dom,$action,%domconfig);
+ } elsif ($action eq 'helpsettings') {
+ $output = &modify_helpsettings($r,$dom,$confname,%domconfig);
+ } elsif ($action eq 'coursedefaults') {
+ $output = &modify_coursedefaults($dom,%domconfig);
} elsif ($action eq 'usersessions') {
$output = &modify_usersessions($dom,%domconfig);
} elsif ($action eq 'loadbalancing') {
@@ -543,7 +534,7 @@ sub print_config_box {
if ($numheaders > 1) {
my $colspan = '';
my $rightcolspan = '';
- if (($action eq 'rolecolors') || ($action eq 'coursecategories') ||
+ if (($action eq 'rolecolors') || ($action eq 'coursecategories') ||
(($action eq 'login') && ($numheaders < 3))) {
$colspan = ' colspan="2"';
}
@@ -582,6 +573,8 @@ sub print_config_box {
$output .= &print_usersessions('top',$dom,$settings,\$rowtotal);
} elsif ($action eq 'rolecolors') {
$output .= &print_rolecolors($phase,'student',$dom,$confname,$settings,\$rowtotal);
+ } elsif ($action eq 'coursedefaults') {
+ $output .= &print_coursedefaults('top',$dom,$settings,\$rowtotal);
}
$output .= '
@@ -811,7 +804,7 @@ sub print_login {
'
'.
''.$choices{'directlogin'}.
' ';
- foreach my $hostid (sort(keys(%servers))) {
+ foreach my $hostid (keys(%servers)) {
next if ($servers{$hostid} eq $servers{$lonhost});
my $selected = '';
if (ref($disallowed{$lonhost}) eq 'HASH') {
@@ -854,11 +847,10 @@ sub print_login {
} elsif ($caller eq 'page') {
my %defaultchecked = (
'coursecatalog' => 'on',
- 'helpdesk' => 'on',
'adminmail' => 'off',
'newuser' => 'off',
);
- my @toggles = ('coursecatalog','adminmail','helpdesk','newuser');
+ my @toggles = ('coursecatalog','adminmail','newuser');
my (%checkedon,%checkedoff);
foreach my $item (@toggles) {
if ($defaultchecked{$item} eq 'on') {
@@ -1062,9 +1054,7 @@ sub print_login {
$datatable .= ' ';
}
$datatable .= ' ';
- $itemcount ++;
}
- $datatable .= &captcha_choice('login',$settings,$itemcount);
}
return $datatable;
}
@@ -1074,7 +1064,6 @@ sub login_choices {
&Apache::lonlocal::texthash (
coursecatalog => 'Display Course/Community Catalog link?',
adminmail => "Display Administrator's E-mail Address?",
- helpdesk => 'Display "Contact Helpdesk" link',
disallowlogin => "Login page requests redirected",
hostid => "Server",
server => "Redirect to:",
@@ -1195,12 +1184,13 @@ sub display_color_options {
} else {
$datatable .= ' ';
}
- my $current_color = $designs->{'font'} ? $designs->{'font'} : $defaults->{'font'};
-
+ my $fontlink = &color_pick($phase,$role,'font',$choices->{'font'},$designs->{'font'});
$datatable .= ''.
- ' '.
- ' ';
+ ' '.$fontlink.
+ ' '.
+ '';
unless ($role eq 'login') {
$datatable .= ''.
''.$choices->{'fontmenu'}.' ';
@@ -1209,13 +1199,13 @@ sub display_color_options {
} else {
$datatable .= ' ';
}
- $current_color = $designs->{'fontmenu'} ?
- $designs->{'fontmenu'} : $defaults->{'fontmenu'};
+ $fontlink = &color_pick($phase,$role,'fontmenu',$choices->{'fontmenu'},$designs->{'fontmenu'});
$datatable .= ''.
- ' '.
- ' ';
+ ' '.$fontlink.
+ ' '.
+ '';
}
my $switchserver = &check_switchserver($dom,$confname);
foreach my $img (@{$images}) {
@@ -1342,14 +1332,13 @@ sub display_color_options {
}
$datatable .= ''.
' ';
@@ -1371,13 +1360,13 @@ sub display_color_options {
$datatable .= ''.
'';
foreach my $item (@{$links}) {
- my $color = $designs->{'link'}{$item} ? $designs->{'link'}{$item} : $defaults->{'links'}{$item};
- $datatable .= ''."\n";
-
+ $datatable .= ' '."\n".
+ &color_pick($phase,$role,$item,$choices->{$item},
+ $designs->{'links'}{$item});
if ($designs->{'links'}{$item}) {
- $datatable.=' ';
+ $datatable.=' ';
}
- $datatable .= ' ';
}
$$rowtotal += $itemcount;
@@ -1507,7 +1496,7 @@ sub print_quotas {
} elsif ($context eq 'requestauthor') {
@usertools = ('author');
@options = ('norequest','approval','automatic');
- %titles = &authorrequest_titles();
+ %titles = &authorrequest_titles();
} else {
@usertools = ('aboutme','blog','webdav','portfolio');
%titles = &tool_titles();
@@ -1718,7 +1707,9 @@ sub print_quotas {
} elsif ($context eq 'requestauthor') {
my $curroption;
if (ref($settings) eq 'HASH') {
- $curroption = $settings->{'default'};
+ if (ref($settings->{'requestauthor'}) eq 'HASH') {
+ $curroption = $settings->{'requestauthor'};
+ }
}
if (!$curroption) {
$curroption = 'norequest';
@@ -1863,8 +1854,8 @@ sub print_quotas {
$checked = ' checked="checked"';
}
$datatable .= ''.
- ' '.
+ ' '.
$titles{$option}.' ';
}
} else {
@@ -1967,7 +1958,7 @@ sub print_requestmail {
$datatable .= ''.
' '.
- $fullname.' ('.$uname.':'.$udom.') ';
+ $fullname.'';
}
$datatable .= '
';
} else {
@@ -2294,7 +2285,7 @@ sub print_contacts {
my @contacts = ('adminemail','supportemail');
my (%checked,%to,%otheremails,%bccemails);
my @mailings = ('errormail','packagesmail','lonstatusmail','helpdeskmail',
- 'requestsmail','updatesmail');
+ 'requestsmail');
foreach my $type (@mailings) {
$otheremails{$type} = '';
}
@@ -2330,7 +2321,6 @@ sub print_contacts {
$checked{'helpdeskmail'}{'supportemail'} = ' checked="checked" ';
$checked{'lonstatusmail'}{'adminemail'} = ' checked="checked" ';
$checked{'requestsmail'}{'adminemail'} = ' checked="checked" ';
- $checked{'updatesmail'}{'adminemail'} = ' checked="checked" ';
}
my ($titles,$short_titles) = &contact_titles();
my $rownum = 0;
@@ -2394,7 +2384,7 @@ sub radiobutton_prefs {
return unless ((ref($toggles) eq 'ARRAY') && (ref($defaultchecked) eq 'HASH') &&
(ref($choices) eq 'HASH'));
- my (%checkedon,%checkedoff,$datatable,$css_class);
+ my (%checkedon,%checkedoff,$datatable,$css_class,$cell_colspan);
foreach my $item (@{$toggles}) {
if ($defaultchecked->{$item} eq 'on') {
@@ -2761,10 +2751,7 @@ sub spares_row {
$css_class = $itemcount%2 ? ' class="LC_odd_row"' : '';
$datatable .= '
- '.
- &mt('[_1] when busy, offloads to:'
- ,''.$server.' ').
- "\n";
+ '.$server.' when busy, offloads to: '."\n";
my (%current,%canselect);
my @choices =
&possible_newspares($server,$spareid->{$server},$serverhomes,$altids);
@@ -2888,13 +2875,16 @@ sub print_loadbalancing {
my $numinrow = 1;
my $datatable;
my %servers = &Apache::lonnet::internet_dom_servers($dom);
- my (%currbalancer,%currtargets,%currrules,%existing);
- if (ref($settings) eq 'HASH') {
- %existing = %{$settings};
- }
- if ((keys(%servers) > 1) || (keys(%existing) > 0)) {
- &get_loadbalancers_config(\%servers,\%existing,\%currbalancer,
- \%currtargets,\%currrules);
+ my ($currbalancer,$currtargets,$currrules);
+ if (keys(%servers) > 1) {
+ if (ref($settings) eq 'HASH') {
+ $currbalancer = $settings->{'lonhost'};
+ $currtargets = $settings->{'targets'};
+ $currrules = $settings->{'rules'};
+ } else {
+ ($currbalancer,$currtargets) =
+ &Apache::lonnet::get_lonbalancer_config(\%servers);
+ }
} else {
return;
}
@@ -2904,190 +2894,104 @@ sub print_loadbalancing {
if (ref($types) eq 'ARRAY') {
$rownum += scalar(@{$types});
}
- my @css_class = ('LC_odd_row','LC_even_row');
- my $balnum = 0;
- my $islast;
- my (@toshow,$disabledtext);
- if (keys(%currbalancer) > 0) {
- @toshow = sort(keys(%currbalancer));
- if (scalar(@toshow) < scalar(keys(%servers)) + 1) {
- push(@toshow,'');
- }
- } else {
- @toshow = ('');
- $disabledtext = &mt('No existing load balancer');
- }
- foreach my $lonhost (@toshow) {
- if ($balnum == scalar(@toshow)-1) {
- $islast = 1;
- } else {
- $islast = 0;
- }
- my $cssidx = $balnum%2;
- my $targets_div_style = 'display: none';
- my $disabled_div_style = 'display: block';
- my $homedom_div_style = 'display: none';
- $datatable .= ' '.
- ''.
- '';
- if ($lonhost eq '') {
- $datatable .= '';
- if (keys(%currbalancer) > 0) {
- $datatable .= &mt('Add balancer:');
- } else {
- $datatable .= &mt('Enable balancer:');
- }
- $datatable .= ' '.
- ''."\n".
- ''.&mt('None').
- ' '."\n";
- foreach my $server (sort(keys(%servers))) {
- next if ($currbalancer{$server});
- $datatable .= ''.$server.' '."\n";
- }
- $datatable .=
- ' '."\n".
- ' '."\n";
- } else {
- $datatable .= ''.$lonhost.' '.
- ' '.
- &mt('Stop balancing').' '.
- ' ';
- $targets_div_style = 'display: block';
- $disabled_div_style = 'display: none';
- if ($dom eq &Apache::lonnet::host_domain($lonhost)) {
- $homedom_div_style = 'display: block';
- }
- }
- $datatable .= '
'.
- ''.$disabledtext.'
'."\n".
- ''.&mt('Offloads to:').' ';
- my ($numspares,@spares) = &count_servers($lonhost,%servers);
- my @sparestypes = ('primary','default');
- my %typetitles = &sparestype_titles();
- foreach my $sparetype (@sparestypes) {
- my $targettable;
- for (my $i=0; $i<$numspares; $i++) {
- my $checked;
- if (ref($currtargets{$lonhost}) eq 'HASH') {
- if (ref($currtargets{$lonhost}{$sparetype}) eq 'ARRAY') {
- if (grep(/^\Q$spares[$i]\E$/,@{$currtargets{$lonhost}{$sparetype}})) {
- $checked = ' checked="checked"';
- }
- }
- }
- my ($chkboxval,$disabled);
- if (($lonhost ne '') && (exists($servers{$lonhost}))) {
- $chkboxval = $spares[$i];
- }
- if (exists($currbalancer{$spares[$i]})) {
- $disabled = ' disabled="disabled"';
- }
- $targettable .=
- '
'.$chkboxval.
- ' ';
- my $rem = $i%($numinrow);
- if ($rem == 0) {
- if (($i > 0) && ($i < $numspares-1)) {
- $targettable .= ' ';
- }
- if ($i < $numspares-1) {
- $targettable .= '';
+ my $css_class = ' class="LC_odd_row"';
+ my $targets_div_style = 'display: none';
+ my $disabled_div_style = 'display: block';
+ my $homedom_div_style = 'display: none';
+ $datatable = ' '.
+ ''.
+ ''."\n".
+ ''."\n";
+ foreach my $lonhost (sort(keys(%servers))) {
+ my $selected;
+ if ($lonhost eq $currbalancer) {
+ $selected .= ' selected="selected"';
+ }
+ $datatable .= ' '.$lonhost.' '."\n";
+ }
+ $datatable .= '
'.
+ ''.&mt('No dedicated Load Balancer').'
'."\n".
+ ''.&mt('Offloads to:').'
';
+ my ($numspares,@spares) = &count_servers($currbalancer,%servers);
+ my @sparestypes = ('primary','default');
+ my %typetitles = &sparestype_titles();
+ foreach my $sparetype (@sparestypes) {
+ my $targettable;
+ for (my $i=0; $i<$numspares; $i++) {
+ my $checked;
+ if (ref($currtargets) eq 'HASH') {
+ if (ref($currtargets->{$sparetype}) eq 'ARRAY') {
+ if (grep(/^\Q$spares[$i]\E$/,@{$currtargets->{$sparetype}})) {
+ $checked = ' checked="checked"';
}
}
}
- if ($targettable ne '') {
- my $rem = $numspares%($numinrow);
- my $colsleft = $numinrow - $rem;
- if ($colsleft > 1 ) {
- $targettable .= '
'.
- ' ';
- } elsif ($colsleft == 1) {
- $targettable .= '
';
- }
- $datatable .= '
'.$typetitles{$sparetype}.' '.
- '
';
- }
- }
- $datatable .= '
'.
- &loadbalancing_rules($dom,$intdom,$currrules{$lonhost},
- $othertitle,$usertypes,$types,\%servers,
- \%currbalancer,$lonhost,
- $targets_div_style,$homedom_div_style,
- $css_class[$cssidx],$balnum,$islast);
- $$rowtotal += $rownum;
- $balnum ++;
- }
- $datatable .= ' ';
- return $datatable;
-}
-
-sub get_loadbalancers_config {
- my ($servers,$existing,$currbalancer,$currtargets,$currrules) = @_;
- return unless ((ref($servers) eq 'HASH') &&
- (ref($existing) eq 'HASH') && (ref($currbalancer) eq 'HASH') &&
- (ref($currtargets) eq 'HASH') && (ref($currrules) eq 'HASH'));
- if (keys(%{$existing}) > 0) {
- my $oldlonhost;
- foreach my $key (sort(keys(%{$existing}))) {
- if ($key eq 'lonhost') {
- $oldlonhost = $existing->{'lonhost'};
- $currbalancer->{$oldlonhost} = 1;
- } elsif ($key eq 'targets') {
- if ($oldlonhost) {
- $currtargets->{$oldlonhost} = $existing->{'targets'};
- }
- } elsif ($key eq 'rules') {
- if ($oldlonhost) {
- $currrules->{$oldlonhost} = $existing->{'rules'};
- }
- } elsif (ref($existing->{$key}) eq 'HASH') {
- $currbalancer->{$key} = 1;
- $currtargets->{$key} = $existing->{$key}{'targets'};
- $currrules->{$key} = $existing->{$key}{'rules'};
+ my $chkboxval;
+ if (($currbalancer ne '') && (grep((/^\Q$currbalancer\E$/,keys(%servers))))) {
+ $chkboxval = $spares[$i];
+ }
+ $targettable .= ' '.$chkboxval.
+ ' ';
+ my $rem = $i%($numinrow);
+ if ($rem == 0) {
+ if ($i > 0) {
+ $targettable .= '';
+ }
+ $targettable .= '';
}
}
- } else {
- my ($balancerref,$targetsref) =
- &Apache::lonnet::get_lonbalancer_config($servers);
- if ((ref($balancerref) eq 'HASH') && (ref($targetsref) eq 'HASH')) {
- foreach my $server (sort(keys(%{$balancerref}))) {
- $currbalancer->{$server} = 1;
- $currtargets->{$server} = $targetsref->{$server};
+ if ($targettable ne '') {
+ my $rem = $numspares%($numinrow);
+ my $colsleft = $numinrow - $rem;
+ if ($colsleft > 1 ) {
+ $targettable .= ''.
+ ' ';
+ } elsif ($colsleft == 1) {
+ $targettable .= ' ';
}
+ $datatable .= ''.$typetitles{$sparetype}.' '.
+ ' ';
}
}
- return;
+ $datatable .= ' '.
+ &loadbalancing_rules($dom,$intdom,$currrules,$othertitle,
+ $usertypes,$types,\%servers,$currbalancer,
+ $targets_div_style,$homedom_div_style,$css_class);
+ $$rowtotal += $rownum;
+ return $datatable;
}
sub loadbalancing_rules {
my ($dom,$intdom,$currrules,$othertitle,$usertypes,$types,$servers,
- $currbalancer,$lonhost,$targets_div_style,$homedom_div_style,
- $css_class,$balnum,$islast) = @_;
+ $currbalancer,$targets_div_style,$homedom_div_style,$css_class) = @_;
my $output;
- my $num = 0;
- my ($alltypes,$othertypes,$titles) =
+ my ($alltypes,$othertypes,$titles) =
&loadbalancing_titles($dom,$intdom,$usertypes,$types);
if ((ref($alltypes) eq 'ARRAY') && (ref($titles) eq 'HASH')) {
foreach my $type (@{$alltypes}) {
- $num ++;
my $current;
if (ref($currrules) eq 'HASH') {
$current = $currrules->{$type};
}
if (($type eq '_LC_external') || ($type eq '_LC_internetdom')) {
- if ($dom ne &Apache::lonnet::host_domain($lonhost)) {
+ if ($dom ne &Apache::lonnet::host_domain($currbalancer)) {
$current = '';
}
}
$output .= &loadbalance_rule_row($type,$titles->{$type},$current,
- $servers,$currbalancer,$lonhost,$dom,
- $targets_div_style,$homedom_div_style,
- $css_class,$balnum,$num,$islast);
+ $servers,$currbalancer,$dom,
+ $targets_div_style,$homedom_div_style,$css_class);
}
}
return $output;
@@ -3124,8 +3028,8 @@ sub loadbalancing_titles {
}
sub loadbalance_rule_row {
- my ($type,$title,$current,$servers,$currbalancer,$lonhost,$dom,
- $targets_div_style,$homedom_div_style,$css_class,$balnum,$num,$islast) = @_;
+ my ($type,$title,$current,$servers,$currbalancer,$dom,$targets_div_style,
+ $homedom_div_style,$css_class) = @_;
my @rulenames = ('default','homeserver');
my %ruletitles = &offloadtype_text();
if ($type eq '_LC_external') {
@@ -3138,15 +3042,9 @@ sub loadbalance_rule_row {
if (($type eq '_LC_external') || ($type eq '_LC_internetdom')) {
$style = $homedom_div_style;
}
- my $space;
- if ($islast && $num == 1) {
- $space = '
';
- }
- my $output =
- ''.$space.
- ''.$title.'
'."\n".
- ''.$space.
- ''."\n";
+ my $output =
+ '
'.$title.'
'."\n".
+ ''."\n";
for (my $i=0; $i<@rulenames; $i++) {
my $rule = $rulenames[$i];
my ($checked,$extra);
@@ -3162,20 +3060,17 @@ sub loadbalance_rule_row {
unless ($checked) {
$default = ' selected="selected"';
}
- $extra =
- ':
'."\n".
- ' '."\n";
- foreach my $server (sort(keys(%{$servers}))) {
- if (ref($currbalancer) eq 'HASH') {
- next if (exists($currbalancer->{$server}));
- }
+ $extra = ': '."\n".
+ ' '."\n";
+ foreach my $lonhost (sort(keys(%{$servers}))) {
+ next if ($lonhost eq $currbalancer);
my $selected;
- if ($server eq $current) {
+ if ($lonhost eq $current) {
$selected = ' selected="selected"';
}
- $extra .= ''.$server.' ';
+ $extra .= ''.$lonhost.' ';
}
$extra .= ' ';
}
@@ -3183,9 +3078,9 @@ sub loadbalance_rule_row {
$checked = ' checked="checked"';
}
$output .= ''.
- ' '.$ruletitles{$rulenames[$i]}.
' '.$extra.' '."\n";
}
@@ -3221,7 +3116,6 @@ sub contact_titles {
'helpdeskmail' => 'Helpdesk requests to be e-mailed to',
'lonstatusmail' => 'E-mail from nightly status check (warnings/errors)',
'requestsmail' => 'E-mail from course requests requiring approval',
- 'updatesmail' => 'E-mail from nightly check of LON-CAPA module integrity/updates',
);
my %short_titles = &Apache::lonlocal::texthash (
adminemail => 'Admin E-mail address',
@@ -3264,7 +3158,7 @@ sub authorrequest_titles {
automatic => 'Automatic approval',
);
return %titles;
-}
+}
sub courserequest_conditions {
my %conditions = &Apache::lonlocal::texthash (
@@ -3405,10 +3299,9 @@ sub print_usercreation {
$dom,$numinrow,$othertitle,
'statustocreate');
$$rowtotal ++;
- $rownum ++;
}
}
- $datatable .= &captcha_choice('cancreate',$createsettings,$rownum);
+ $datatable .= &captcha_choice('cancreate',$createsettings);
} else {
my @contexts = ('author','course','domain');
my @authtypes = ('int','krb4','krb5','loc');
@@ -3461,14 +3354,14 @@ sub print_usercreation {
}
sub captcha_choice {
- my ($context,$settings,$itemcount) = @_;
+ my ($context,$settings) = @_;
my ($keyentry,$currpub,$currpriv,%checked,$rowname,$pubtext,$privtext);
my %lt = &captcha_phrases();
$keyentry = 'hidden';
if ($context eq 'cancreate') {
$rowname = &mt('CAPTCHA validation (e-mail as username)');
- } elsif ($context eq 'login') {
- $rowname = &mt('"Contact helpdesk" CAPTCHA validation');
+ } elsif ($context eq 'help') {
+ $rowname = &mt('CAPTCHA validation');
}
if (ref($settings) eq 'HASH') {
if ($settings->{'captcha'}) {
@@ -3488,9 +3381,8 @@ sub captcha_choice {
} else {
$checked{'original'} = ' checked="checked"';
}
- my $css_class = $itemcount%2?' class="LC_odd_row"':'';
- my $output = ''.
- ''.$rowname.' '."\n".
+ my $output = ' '.
+ ''.$rowname.' '."\n".
''."\n";
foreach my $option ('original','recaptcha','notused') {
$output .= ''."\n".
''.$pubtext.' '."\n".
@@ -4184,7 +4076,7 @@ sub print_serverstatuses {
sub serverstatus_pages {
return ('userstatus','lonstatus','loncron','server-status','codeversions',
- 'checksums','clusterstatus','metadata_keywords','metadata_harvest',
+ 'clusterstatus','metadata_keywords','metadata_harvest',
'takeoffline','takeonline','showenv','toggledebug','ping','domconf');
}
@@ -4639,7 +4531,6 @@ sub modify_login {
%curr_loginvia,%loginhash,@currlangs,@newlangs,$addedfile,%title,@offon);
%title = ( coursecatalog => 'Display course catalog',
adminmail => 'Display administrator E-mail address',
- helpdesk => 'Display "Contact Helpdesk" link',
newuser => 'Link for visitors to create a user account',
loginheader => 'Log-in box header');
@offon = ('off','on');
@@ -4652,7 +4543,7 @@ sub modify_login {
}
($errors,%colchanges) = &modify_colors($r,$dom,$confname,['login'],
\%domconfig,\%loginhash);
- my @toggles = ('coursecatalog','adminmail','helpdesk','newuser');
+ my @toggles = ('coursecatalog','adminmail','newuser');
foreach my $item (@toggles) {
$loginhash{login}{$item} = $env{'form.'.$item};
}
@@ -4722,6 +4613,7 @@ sub modify_login {
$new = '';
}
}
+
$loginhash{login}{loginvia}{$lonhost}{$item} = $new;
}
}
@@ -4814,7 +4706,7 @@ sub modify_login {
} else {
my $puberror = &mt("Upload of [_1] failed because an error occurred publishing the file in RES space. Error was: [_2].",$newfile{$lang},$result);
$errors .= ''.$puberror.' ';
- if ((grep(/^\Q$lang\E$/,@currlangs)) &&
+ if ((grep(/^\Q$lang\E$/,@currlangs)) &&
(!grep(/^\Q$lang\E$/,@delurls))) {
$loginhash{'login'}{'helpurl'}{$lang} = $domconfig{'login'}{'helpurl'}{$lang};
@@ -4832,7 +4724,6 @@ sub modify_login {
$errors .= ''.$error.' ';
}
}
- &process_captcha('login',\%changes,$loginhash{'login'},$domconfig{'login'});
my $defaulthelpfile = '/adm/loginproblems.html';
my $defaulttext = &mt('Default in use');
@@ -4840,10 +4731,9 @@ sub modify_login {
my $putresult = &Apache::lonnet::put_dom('configuration',\%loginhash,
$dom);
if ($putresult eq 'ok') {
- my @toggles = ('coursecatalog','adminmail','helpdesk','newuser');
+ my @toggles = ('coursecatalog','adminmail','newuser');
my %defaultchecked = (
'coursecatalog' => 'on',
- 'helpdesk' => 'on',
'adminmail' => 'off',
'newuser' => 'off',
);
@@ -4929,42 +4819,6 @@ sub modify_login {
}
}
}
- } elsif ($item eq 'captcha') {
- if (ref($loginhash{'login'}) eq 'HASH') {
- my $chgtxt;
- if ($loginhash{'login'}{$item} eq 'notused') {
- $chgtxt .= &mt('No CAPTCHA validation in use for helpdesk form.');
- } else {
- my %captchas = &captcha_phrases();
- if ($captchas{$loginhash{'login'}{$item}}) {
- $chgtxt .= &mt("Validation for helpdesk form set to $captchas{$loginhash{'login'}{$item}}.");
- } else {
- $chgtxt .= &mt('Validation for helpdesk form set to unknown type.');
- }
- }
- $resulttext .= ''.$chgtxt.' ';
- }
- } elsif ($item eq 'recaptchakeys') {
- if (ref($loginhash{'login'}) eq 'HASH') {
- my ($privkey,$pubkey);
- if (ref($loginhash{'login'}{$item}) eq 'HASH') {
- $pubkey = $loginhash{'login'}{$item}{'public'};
- $privkey = $loginhash{'login'}{$item}{'private'};
- }
- my $chgtxt .= &mt('ReCAPTCHA keys changes').'';
- if (!$pubkey) {
- $chgtxt .= ''.&mt('Public key deleted').' ';
- } else {
- $chgtxt .= ''.&mt('Public key set to [_1]',$pubkey).' ';
- }
- if (!$privkey) {
- $chgtxt .= ''.&mt('Private key deleted').' ';
- } else {
- $chgtxt .= ''.&mt('Private key set to [_1]',$pubkey).' ';
- }
- $chgtxt .= ' ';
- $resulttext .= ''.$chgtxt.' ';
- }
} else {
$resulttext .= ''.&mt("$title{$item} set to $offon[$env{'form.'.$item}]").' ';
}
@@ -5409,7 +5263,7 @@ sub publishlogo {
# See if there is anything left
unless ($fname) { return ('error: no uploaded file'); }
$fname="$subdir/$fname";
- my $docroot=$r->dir_config('lonDocRoot');
+ my $docroot=$r->dir_config('lonDocRoot');
my $filepath="$docroot/priv";
my $relpath = "$dom/$confname";
my ($fnamepath,$file,$fetchthumb);
@@ -5417,7 +5271,7 @@ sub publishlogo {
if ($fname=~m|/|) {
($fnamepath,$file) = ($fname =~ m|^(.*)/([^/]+)$|);
}
- my @parts=split(/\//,"$filepath/$relpath/$fnamepath");
+ my @parts=split(/\//,"$filepath/$relpath/$fnamepath");
my $count;
for ($count=5;$count<=$#parts;$count++) {
$filepath.="/$parts[$count]";
@@ -5588,7 +5442,7 @@ sub write_metadata {
print $logfile "\nWrite metadata file for ".$targetdir.'/'.$file;
my $mfh;
if (open($mfh,'>'.$targetdir.'/'.$file.'.meta')) {
- foreach (sort(keys(%metadatafields))) {
+ foreach (sort keys %metadatafields) {
unless ($_=~/\./) {
my $unikey=$_;
$unikey=~/^([A-Za-z]+)/;
@@ -5672,7 +5526,7 @@ sub check_switchserver {
my @ids=&Apache::lonnet::current_machine_ids();
foreach my $id (@ids) { if ($id eq $home) { $allowed=1; } }
if (!$allowed) {
- $switchserver=''.&mt('Switch Server').' ';
+ $switchserver=''.&mt('Switch Server').' ';
}
return $switchserver;
}
@@ -5683,7 +5537,7 @@ sub modify_quotas {
%limithash,$toolregexp,%conditions,$resulttext,%changes);
if ($action eq 'quotas') {
$context = 'tools';
- } else {
+ } else {
$context = $action;
}
if ($context eq 'requestcourses') {
@@ -5873,7 +5727,7 @@ sub modify_quotas {
&Apache::lonnet::do_cache_new('domdefaults',$dom,\%domdefaults,$cachetime);
$resulttext = &mt('Changes made:').'';
- unless (($context eq 'requestcourses') ||
+ unless (($context eq 'requestcourses') ||
($context eq 'requestauthor')) {
if (ref($changes{'defaultquota'}) eq 'HASH') {
$resulttext .= ''.&mt('Portfolio default quotas').'';
@@ -5894,7 +5748,7 @@ sub modify_quotas {
my (%haschgs,%inconf);
if ($context eq 'requestauthor') {
%haschgs = %changes;
- %inconf = %confhash;
+ %inconf = %confhash;
} else {
if (ref($changes{$item}) eq 'HASH') {
%haschgs = %{$changes{$item}};
@@ -5908,7 +5762,7 @@ sub modify_quotas {
&Apache::lonnet::usertools_access($env{'user.name'},
$env{'user.domain'},
$item,'reload',$context);
- if (($context eq 'requestcourses') ||
+ if (($context eq 'requestcourses') ||
($context eq 'requestauthor')) {
if ($env{'environment.canrequest.'.$item} ne $newacc) {
$newenv{'environment.canrequest.'.$item} = $newacc;
@@ -5942,10 +5796,6 @@ sub modify_quotas {
$cond = $conditions{$inconf{$type}};
}
$resulttext .= ''.&mt('Set to be available to [_1].',$typetitle).' '.$cond.' ';
- } elsif ($context eq 'requestauthor') {
- $resulttext .= ''.&mt('Set to "[_1]" for "[_2]".',
- $titles{$inconf{$type}},$typetitle);
-
} else {
$resulttext .= ' '.&mt('Set to be available to [_1]',$typetitle).' ';
}
@@ -6319,16 +6169,13 @@ sub modify_autocreate {
foreach my $item (@types) {
if ($changes{$item}) {
my $newtxt = $offon[$newvals{$item}];
- $resulttext .= ''.
- &mt("$title{$item} set to [_1]$newtxt [_2]",
- '',' ').
- ' ';
+ $resulttext .= ''.&mt("$title{$item} set to [_1]$newtxt [_2]",'',' ').' ';
}
}
if ($changes{'xmldc'}) {
my ($dcname,$dcdom) = split(':',$newvals{'xmldc'});
my $newtxt = &Apache::loncommon::plainname($dcname,$dcdom);
- $resulttext .= ''.&mt("$title{'xmldc'} set to [_1]",''.$newtxt.' ').' ';
+ $resulttext .= ''.&mt("$title{'xmldc'} set to [_1]$newtxt [_2]",'',' ').' ';
}
$resulttext .= ' ';
} else {
@@ -6474,11 +6321,7 @@ sub modify_directorysrch {
} else {
$chgtext =~ s/\; $//;
}
- $resulttext .=
- ' '.
- &mt("Users from domain '[_1]' permitted to search the institutional directory set to: [_2]",
- ''.$dom.' ',$chgtext).
- ' ';
+ $resulttext .= ''.&mt("Users from domain '[_1] ' permitted to search the institutional directory set to: [_2]",$dom,$chgtext).' ';
}
}
}
@@ -6506,7 +6349,7 @@ sub modify_directorysrch {
}
}
$chgtext =~ s/\; $//;
- $resulttext .= ''.&mt($title{'searchtypes'}.' set to: "[_1]"',$chgtext).' ';
+ $resulttext .= ''.&mt("$title{'searchtypes'} set to: \"[_1]\"",$chgtext).' ';
}
$resulttext .= ' ';
} else {
@@ -6530,7 +6373,7 @@ sub modify_contacts {
my (%others,%to,%bcc);
my @contacts = ('supportemail','adminemail');
my @mailings = ('errormail','packagesmail','helpdeskmail','lonstatusmail',
- 'requestsmail','updatesmail');
+ 'requestsmail');
foreach my $type (@mailings) {
@{$newsetting{$type}} =
&Apache::loncommon::get_env_multiple('form.'.$type);
@@ -6586,7 +6429,6 @@ sub modify_contacts {
$default{'helpdeskmail'} = 'supportemail';
$default{'lonstatusmail'} = 'adminemail';
$default{'requestsmail'} = 'adminemail';
- $default{'updatesmail'} = 'adminemail';
foreach my $item (@contacts) {
if ($to{$item} ne $default{$item}) {
$changes{$item} = 1;
@@ -6941,7 +6783,7 @@ sub modify_usercreation {
if ($captchas{$cancreate{$type}}) {
$chgtext .= &mt("Validation for self-creation screen set to $captchas{$cancreate{$type}}.");
} else {
- $chgtext .= &mt('Validation for self-creation screen set to unknown type.');
+ $chgtext .= &mt('Validation for self-creation screen set to unknown type.');
}
}
} elsif ($type eq 'recaptchakeys') {
@@ -7069,46 +6911,30 @@ sub process_captcha {
$newsettings->{'captcha'} = 'original';
}
if ($current->{'captcha'} ne $newsettings->{'captcha'}) {
- if ($container eq 'cancreate') {
- if (ref($changes->{'cancreate'}) eq 'ARRAY') {
- push(@{$changes->{'cancreate'}},'captcha');
- } elsif (!defined($changes->{'cancreate'})) {
- $changes->{'cancreate'} = ['captcha'];
- }
- } else {
- $changes->{'captcha'} = 1;
+ if (ref($changes->{'cancreate'}) eq 'ARRAY') {
+ push(@{$changes->{'cancreate'}},'captcha');
+ } elsif (!defined($changes->{'cancreate'})) {
+ $changes->{'cancreate'} = ['captcha'];
}
}
my ($newpub,$newpriv,$currpub,$currpriv);
if ($newsettings->{'captcha'} eq 'recaptcha') {
$newpub = $env{'form.'.$container.'_recaptchapub'};
$newpriv = $env{'form.'.$container.'_recaptchapriv'};
- $newpub =~ s/\W//g;
- $newpriv =~ s/\W//g;
- $newsettings->{'recaptchakeys'} = {
- public => $newpub,
- private => $newpriv,
- };
}
+ $newsettings->{'recaptchakeys'} = {
+ public => $newpub,
+ private => $newpriv,
+ };
if (ref($current->{'recaptchakeys'}) eq 'HASH') {
$currpub = $current->{'recaptchakeys'}{'public'};
$currpriv = $current->{'recaptchakeys'}{'private'};
- unless ($newsettings->{'captcha'} eq 'recaptcha') {
- $newsettings->{'recaptchakeys'} = {
- public => '',
- private => '',
- }
- }
}
if (($newpub ne $currpub) || ($newpriv ne $currpriv)) {
- if ($container eq 'cancreate') {
- if (ref($changes->{'cancreate'}) eq 'ARRAY') {
- push(@{$changes->{'cancreate'}},'recaptchakeys');
- } elsif (!defined($changes->{'cancreate'})) {
- $changes->{'cancreate'} = ['recaptchakeys'];
- }
- } else {
- $changes->{'recaptchakeys'} = 1;
+ if (ref($changes->{'cancreate'}) eq 'ARRAY') {
+ push(@{$changes->{'cancreate'}},'recaptchakeys');
+ } elsif (!defined($changes->{'cancreate'})) {
+ $changes->{'cancreate'} = ['recaptchakeys'];
}
}
return;
@@ -7792,8 +7618,8 @@ sub modify_helpsettings {
} elsif ($domconfig{'helpsettings'}{$item} ne $env{'form.'.$item}) {
$changes{$item} = 1;
}
- }
- if (($env{'form.'.$item} eq '0') || ($env{'form.'.$item} eq '1')) {
+ }
+ if (($env{'form.'.$item} eq '0') || ($env{'form.'.$item} eq '1')) {
$helphash{'helpsettings'}{$item} = $env{'form.'.$item};
}
}
@@ -8184,192 +8010,186 @@ sub modify_loadbalancing {
my @sparestypes = ('primary','default');
my %typetitles = &sparestype_titles();
my $resulttext;
- my (%currbalancer,%currtargets,%currrules,%existing);
- if (ref($domconfig{'loadbalancing'}) eq 'HASH') {
- %existing = %{$domconfig{'loadbalancing'}};
- }
- &get_loadbalancers_config(\%servers,\%existing,\%currbalancer,
- \%currtargets,\%currrules);
- my ($saveloadbalancing,%defaultshash,%changes);
- my ($alltypes,$othertypes,$titles) =
- &loadbalancing_titles($dom,$intdom,$usertypes,$types);
- my %ruletitles = &offloadtype_text();
- my @deletions = &Apache::loncommon::get_env_multiple('form.loadbalancing_delete');
- for (my $i=0; $i<$env{'form.loadbalancing_total'}; $i++) {
- my $balancer = $env{'form.loadbalancing_lonhost_'.$i};
- if ($balancer eq '') {
- next;
- }
- if (!exists($servers{$balancer})) {
- if (exists($currbalancer{$balancer})) {
- push(@{$changes{'delete'}},$balancer);
+ if (keys(%servers) > 1) {
+ my ($currbalancer,$currtargets,$currrules);
+ if (ref($domconfig{'loadbalancing'}) eq 'HASH') {
+ $currbalancer = $domconfig{'loadbalancing'}{'lonhost'};
+ $currtargets = $domconfig{'loadbalancing'}{'targets'};
+ $currrules = $domconfig{'loadbalancing'}{'rules'};
+ } else {
+ ($currbalancer,$currtargets) =
+ &Apache::lonnet::get_lonbalancer_config(\%servers);
+ }
+ my ($saveloadbalancing,%defaultshash,%changes);
+ my ($alltypes,$othertypes,$titles) =
+ &loadbalancing_titles($dom,$intdom,$usertypes,$types);
+ my %ruletitles = &offloadtype_text();
+ my $balancer = $env{'form.loadbalancing_lonhost'};
+ if (!$servers{$balancer}) {
+ undef($balancer);
+ }
+ if ($currbalancer ne $balancer) {
+ $changes{'lonhost'} = 1;
+ }
+ $defaultshash{'loadbalancing'}{'lonhost'} = $balancer;
+ if ($balancer ne '') {
+ unless (ref($domconfig{'loadbalancing'}) eq 'HASH') {
+ $saveloadbalancing = 1;
}
- next;
- }
- if ((@deletions > 0) && (grep(/^\Q$i\E$/,@deletions))) {
- push(@{$changes{'delete'}},$balancer);
- next;
- }
- if (!exists($currbalancer{$balancer})) {
- push(@{$changes{'add'}},$balancer);
- }
- $defaultshash{'loadbalancing'}{$balancer}{'targets'}{'primary'} = [];
- $defaultshash{'loadbalancing'}{$balancer}{'targets'}{'default'} = [];
- $defaultshash{'loadbalancing'}{$balancer}{'rules'} = {};
- unless (ref($domconfig{'loadbalancing'}) eq 'HASH') {
- $saveloadbalancing = 1;
- }
- foreach my $sparetype (@sparestypes) {
- my @targets = &Apache::loncommon::get_env_multiple('form.loadbalancing_target_'.$i.'_'.$sparetype);
- my @offloadto;
- foreach my $target (@targets) {
- if (($servers{$target}) && ($target ne $balancer)) {
- if ($sparetype eq 'default') {
- if (ref($defaultshash{'loadbalancing'}{$balancer}{'targets'}{'primary'}) eq 'ARRAY') {
- next if (grep(/^\Q$target\E$/,@{$defaultshash{'loadbalancing'}{$balancer}{'targets'}{'primary'}}));
+ foreach my $sparetype (@sparestypes) {
+ my @targets = &Apache::loncommon::get_env_multiple('form.loadbalancing_target_'.$sparetype);
+ my @offloadto;
+ foreach my $target (@targets) {
+ if (($servers{$target}) && ($target ne $balancer)) {
+ if ($sparetype eq 'default') {
+ if (ref($defaultshash{'loadbalancing'}{'targets'}{'primary'}) eq 'ARRAY') {
+ next if (grep(/^\Q$target\E$/,@{$defaultshash{'loadbalancing'}{'targets'}{'primary'}}));
+ }
+ }
+ unless(grep(/^\Q$target\E$/,@offloadto)) {
+ push(@offloadto,$target);
}
}
- unless(grep(/^\Q$target\E$/,@offloadto)) {
- push(@offloadto,$target);
- }
+ $defaultshash{'loadbalancing'}{'targets'}{$sparetype} = \@offloadto;
}
- $defaultshash{'loadbalancing'}{$balancer}{'targets'}{$sparetype} = \@offloadto;
+ }
+ } else {
+ foreach my $sparetype (@sparestypes) {
+ $defaultshash{'loadbalancing'}{'targets'}{$sparetype} = [];
}
}
- if (ref($currtargets{$balancer}) eq 'HASH') {
+ if (ref($currtargets) eq 'HASH') {
foreach my $sparetype (@sparestypes) {
- if (ref($currtargets{$balancer}{$sparetype}) eq 'ARRAY') {
- my @targetdiffs = &Apache::loncommon::compare_arrays($currtargets{$balancer}{$sparetype},$defaultshash{'loadbalancing'}{$balancer}{'targets'}{$sparetype});
+ if (ref($currtargets->{$sparetype}) eq 'ARRAY') {
+ my @targetdiffs = &Apache::loncommon::compare_arrays($currtargets->{$sparetype},$defaultshash{'loadbalancing'}{'targets'}{$sparetype});
if (@targetdiffs > 0) {
- $changes{'curr'}{$balancer}{'targets'} = 1;
+ $changes{'targets'} = 1;
}
- } elsif (ref($defaultshash{'loadbalancing'}{$balancer}{'targets'}{$sparetype}) eq 'ARRAY') {
- if (@{$defaultshash{'loadbalancing'}{$balancer}{'targets'}{$sparetype}} > 0) {
- $changes{'curr'}{$balancer}{'targets'} = 1;
+ } elsif (ref($defaultshash{'loadbalancing'}{'targets'}{$sparetype}) eq 'ARRAY') {
+ if (@{$defaultshash{'loadbalancing'}{'targets'}{$sparetype}} > 0) {
+ $changes{'targets'} = 1;
}
}
}
} else {
- if (ref($defaultshash{'loadbalancing'}{$balancer}) eq 'HASH') {
- foreach my $sparetype (@sparestypes) {
- if (ref($defaultshash{'loadbalancing'}{$balancer}{'targets'}{$sparetype}) eq 'ARRAY') {
- if (@{$defaultshash{'loadbalancing'}{$balancer}{'targets'}{$sparetype}} > 0) {
- $changes{'curr'}{$balancer}{'targets'} = 1;
- }
+ foreach my $sparetype (@sparestypes) {
+ if (ref($defaultshash{'loadbalancing'}{'targets'}{$sparetype}) eq 'ARRAY') {
+ if (@{$defaultshash{'loadbalancing'}{'targets'}{$sparetype}} > 0) {
+ $changes{'targets'} = 1;
}
}
- }
+ }
}
my $ishomedom;
- if (&Apache::lonnet::host_domain($balancer) eq $dom) {
- $ishomedom = 1;
+ if ($balancer ne '') {
+ if (&Apache::lonnet::host_domain($balancer) eq $dom) {
+ $ishomedom = 1;
+ }
}
if (ref($alltypes) eq 'ARRAY') {
foreach my $type (@{$alltypes}) {
my $rule;
- unless ((($type eq '_LC_external') || ($type eq '_LC_internetdom')) &&
+ if ($balancer ne '') {
+ unless ((($type eq '_LC_external') || ($type eq '_LC_internetdom')) &&
(!$ishomedom)) {
- $rule = $env{'form.loadbalancing_rules_'.$i.'_'.$type};
- }
- if ($rule eq 'specific') {
- $rule = $env{'form.loadbalancing_singleserver_'.$i.'_'.$type};
+ $rule = $env{'form.loadbalancing_rules_'.$type};
+ }
+ if ($rule eq 'specific') {
+ $rule = $env{'form.loadbalancing_singleserver_'.$type};
+ }
}
- $defaultshash{'loadbalancing'}{$balancer}{'rules'}{$type} = $rule;
- if (ref($currrules{$balancer}) eq 'HASH') {
- if ($rule ne $currrules{$balancer}{$type}) {
- $changes{'curr'}{$balancer}{'rules'}{$type} = 1;
+ $defaultshash{'loadbalancing'}{'rules'}{$type} = $rule;
+ if (ref($currrules) eq 'HASH') {
+ if ($rule ne $currrules->{$type}) {
+ $changes{'rules'}{$type} = 1;
}
} elsif ($rule ne '') {
- $changes{'curr'}{$balancer}{'rules'}{$type} = 1;
+ $changes{'rules'}{$type} = 1;
}
}
}
- }
- my $nochgmsg = &mt('No changes made to Load Balancer settings.');
- if ((keys(%changes) > 0) || ($saveloadbalancing)) {
- unless (ref($defaultshash{'loadbalancing'}) eq 'HASH') {
- $defaultshash{'loadbalancing'} = {};
- }
- my $putresult = &Apache::lonnet::put_dom('configuration',
- \%defaultshash,$dom);
-
- if ($putresult eq 'ok') {
- if (keys(%changes) > 0) {
- if (ref($changes{'delete'}) eq 'ARRAY') {
- foreach my $balancer (sort(@{$changes{'delete'}})) {
- $resulttext .= ''.&mt('Load Balancing discontinued for: [_1]',$balancer).' ';
+ my $nochgmsg = &mt('No changes made to Load Balancer settings.');
+ if ((keys(%changes) > 0) || ($saveloadbalancing)) {
+ my $putresult = &Apache::lonnet::put_dom('configuration',
+ \%defaultshash,$dom);
+ if ($putresult eq 'ok') {
+ if (keys(%changes) > 0) {
+ if ($changes{'lonhost'}) {
+ if ($currbalancer ne '') {
+ &Apache::lonnet::remote_devalidate_cache($currbalancer,'loadbalancing',$dom);
+ }
+ if ($balancer eq '') {
+ $resulttext .= ''.&mt('Load Balancing with dedicated server discontinued').' ';
+ } else {
+ &Apache::lonnet::remote_devalidate_cache($balancer,'loadbalancing',$dom);
+ $resulttext .= ''.&mt('Dedicated Load Balancer server set to [_1]',$balancer);
+ }
+ } else {
&Apache::lonnet::remote_devalidate_cache($balancer,'loadbalancing',$dom);
}
- }
- if (ref($changes{'add'}) eq 'ARRAY') {
- foreach my $balancer (sort(@{$changes{'add'}})) {
- $resulttext .= ' '.&mt('Load Balancing enabled for: [_1]',$balancer);
- }
- }
- if (ref($changes{'curr'}) eq 'HASH') {
- foreach my $balancer (sort(keys(%{$changes{'curr'}}))) {
- if (ref($changes{'curr'}{$balancer}) eq 'HASH') {
- if ($changes{'curr'}{$balancer}{'targets'}) {
- my %offloadstr;
- foreach my $sparetype (@sparestypes) {
- if (ref($defaultshash{'loadbalancing'}{$balancer}{'targets'}{$sparetype}) eq 'ARRAY') {
- if (@{$defaultshash{'loadbalancing'}{$balancer}{'targets'}{$sparetype}} > 0) {
- $offloadstr{$sparetype} = join(', ',@{$defaultshash{'loadbalancing'}{$balancer}{'targets'}{$sparetype}});
- }
- }
+ if (($changes{'targets'}) && ($balancer ne '')) {
+ my %offloadstr;
+ foreach my $sparetype (@sparestypes) {
+ if (ref($defaultshash{'loadbalancing'}{'targets'}{$sparetype}) eq 'ARRAY') {
+ if (@{$defaultshash{'loadbalancing'}{'targets'}{$sparetype}} > 0) {
+ $offloadstr{$sparetype} = join(', ',@{$defaultshash{'loadbalancing'}{'targets'}{$sparetype}});
}
- if (keys(%offloadstr) == 0) {
- $resulttext .= ' '.&mt("Servers to which Load Balance server offloads set to 'None', by default").' ';
+ }
+ }
+ if (keys(%offloadstr) == 0) {
+ $resulttext .= ''.&mt("Servers to which Load Balance server offloads set to 'None', by default").' ';
+ } else {
+ my $showoffload;
+ foreach my $sparetype (@sparestypes) {
+ $showoffload .= ''.$typetitles{$sparetype}.' : ';
+ if (defined($offloadstr{$sparetype})) {
+ $showoffload .= $offloadstr{$sparetype};
} else {
- my $showoffload;
- foreach my $sparetype (@sparestypes) {
- $showoffload .= ''.$typetitles{$sparetype}.' : ';
- if (defined($offloadstr{$sparetype})) {
- $showoffload .= $offloadstr{$sparetype};
- } else {
- $showoffload .= &mt('None');
- }
- $showoffload .= (' 'x3);
- }
- $resulttext .= ''.&mt('By default, Load Balancer: [_1] set to offload to - [_2]',$balancer,$showoffload).' ';
+ $showoffload .= &mt('None');
}
+ $showoffload .= (' 'x3);
}
+ $resulttext .= ''.&mt('By default, Load Balancer server set to offload to: [_1]',$showoffload).' ';
}
- if (ref($changes{'curr'}{$balancer}{'rules'}) eq 'HASH') {
- if ((ref($alltypes) eq 'ARRAY') && (ref($titles) eq 'HASH')) {
- foreach my $type (@{$alltypes}) {
- if ($changes{'curr'}{$balancer}{'rules'}{$type}) {
- my $rule = $defaultshash{'loadbalancing'}{$balancer}{'rules'}{$type};
- my $balancetext;
- if ($rule eq '') {
- $balancetext = $ruletitles{'default'};
- } elsif (($rule eq 'homeserver') || ($rule eq 'externalbalancer')) {
- $balancetext = $ruletitles{$rule};
- } else {
- $balancetext = &mt('offload to [_1]',$defaultshash{'loadbalancing'}{$balancer}{'rules'}{$type});
- }
- $resulttext .= ''.&mt('Load Balancer: [_1] -- balancing for [_2] set to - "[_3]"',$balancer,$titles->{$type},$balancetext).' ';
+ }
+ if ((ref($changes{'rules'}) eq 'HASH') && ($balancer ne '')) {
+ if ((ref($alltypes) eq 'ARRAY') && (ref($titles) eq 'HASH')) {
+ foreach my $type (@{$alltypes}) {
+ if ($changes{'rules'}{$type}) {
+ my $rule = $defaultshash{'loadbalancing'}{'rules'}{$type};
+ my $balancetext;
+ if ($rule eq '') {
+ $balancetext = $ruletitles{'default'};
+ } elsif (($rule eq 'homeserver') || ($rule eq 'externalbalancer')) {
+ $balancetext = $ruletitles{$rule};
+ } else {
+ $balancetext = &mt('offload to [_1]',$defaultshash{'loadbalancing'}{'rules'}{$type});
}
+ $resulttext .= ''.&mt('Load Balancing for [_1] set to: [_2]',$titles->{$type},$balancetext).' ';
}
}
}
- &Apache::lonnet::remote_devalidate_cache($balancer,'loadbalancing',$dom);
}
- }
- if ($resulttext ne '') {
- $resulttext = &mt('Changes made:').'';
+ if ($resulttext ne '') {
+ $resulttext = &mt('Changes made:').'';
+ } else {
+ $resulttext = $nochgmsg;
+ }
} else {
$resulttext = $nochgmsg;
+ if ($balancer ne '') {
+ &Apache::lonnet::remote_devalidate_cache($balancer,'loadbalancing',$dom);
+ }
}
} else {
- $resulttext = $nochgmsg;
+ $resulttext = ''.
+ &mt('An error occurred: [_1]',$putresult).' ';
}
} else {
- $resulttext = ''.
- &mt('An error occurred: [_1]',$putresult).' ';
+ $resulttext = $nochgmsg;
}
} else {
- $resulttext = $nochgmsg;
+ $resulttext = &mt('Load Balancing unavailable as this domain only has one server.');
}
return $resulttext;
}
@@ -8408,7 +8228,7 @@ sub recurse_cat_deletes {
delete($coursecategories->{$subitem});
$deletions->{$subitem} = 1;
&recurse_cat_deletes($subitem,$coursecategories,$deletions);
- }
+ }
}
}
return;
@@ -8474,7 +8294,6 @@ sub active_dc_picker {
' '.
&Apache::loncommon::plainname($dcname,$dcdom).
- ' ('.$dcname.':'.$dcdom.')'.
' ';
}
$datatable .= '
';
@@ -8526,7 +8345,7 @@ sub count_servers {
}
sub lonbalance_targets_js {
- my ($dom,$types,$servers,$settings) = @_;
+ my ($dom,$types,$servers) = @_;
my $select = &mt('Select');
my ($alltargets,$allishome,$allinsttypes,@alltypes);
if (ref($servers) eq 'HASH') {
@@ -8548,71 +8367,39 @@ sub lonbalance_targets_js {
}
push(@alltypes,'default','_LC_adv','_LC_author','_LC_internetdom','_LC_external');
$allinsttypes = join("','",@alltypes);
- my (%currbalancer,%currtargets,%currrules,%existing);
- if (ref($settings) eq 'HASH') {
- %existing = %{$settings};
- }
- &get_loadbalancers_config($servers,\%existing,\%currbalancer,
- \%currtargets,\%currrules);
- my $balancers = join("','",sort(keys(%currbalancer)));
return <<"END";