--- loncom/interface/domainprefs.pm	2011/07/31 23:05:00	1.145
+++ loncom/interface/domainprefs.pm	2011/08/09 00:54:43	1.149
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Handler to set domain-wide configuration settings
 #
-# $Id: domainprefs.pm,v 1.145 2011/07/31 23:05:00 raeburn Exp $
+# $Id: domainprefs.pm,v 1.149 2011/08/09 00:54:43 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -362,7 +362,7 @@ sub handler {
                               col2 => 'Rules'}],
                  },
     );
-    my %servers = &dom_servers($dom);
+    my %servers = &Apache::lonnet::internet_dom_servers($dom);
     if (keys(%servers) > 1) {
         $prefs{'login'}  = { text   => 'Log-in page options',
                              help   => 'Domain_Configuration_Login_Page',
@@ -707,7 +707,7 @@ sub print_login {
     my %choices = &login_choices();
 
     if ($position eq 'top') {
-        my %servers = &dom_servers($dom);
+        my %servers = &Apache::lonnet::internet_dom_servers($dom);
         my $choice = $choices{'disallowlogin'};
         $css_class = ' class="LC_odd_row"';
         $datatable .= '<tr'.$css_class.'><td>'.$choice.'</td>'.
@@ -2307,7 +2307,7 @@ sub print_usersessions {
 
     my @alldoms = &Apache::lonnet::all_domains();
     my %uniques = &Apache::lonnet::get_unique_servers(\@alldoms);
-    my %servers = &dom_servers($dom);
+    my %servers = &Apache::lonnet::internet_dom_servers($dom);
     my $itemcount = 1;
     if ($position eq 'top') {
         if (keys(%uniques) > 1) {
@@ -3990,7 +3990,7 @@ sub modify_login {
                                          \%loginhash);
     }
 
-    my %servers = &dom_servers($dom);
+    my %servers = &Apache::lonnet::internet_dom_servers($dom);
     my @loginvia_attribs = ('serverpath','custompath','exempt');
     if (keys(%servers) > 1) {
         foreach my $lonhost (keys(%servers)) {
@@ -7062,7 +7062,7 @@ sub modify_usersessions {
 
     my @alldoms = &Apache::lonnet::all_domains();
     my %uniques = &Apache::lonnet::get_unique_servers(\@alldoms);
-    my %servers = &dom_servers($dom);
+    my %servers = &Apache::lonnet::internet_dom_servers($dom);
     my %spareid = &current_offloads_to($dom,$domconfig{'usersessions'},\%servers);
     my $savespares;
 
@@ -7099,7 +7099,12 @@ sub modify_usersessions {
                     }
                 }
             }
-            my @spares = sort(@okspares,$newspare);
+            my @spares;
+            if (($newspare ne '') && (!grep(/^\Q$newspare\E$/,@okspares))) {
+                @spares = sort(@okspares,$newspare);
+            } else {
+                @spares = sort(@okspares);
+            }
             $defaultshash{'usersessions'}{'spares'}{$lonhost}{$type} = \@spares;
         }
         if (keys(%spareschg) > 0) {
@@ -7119,7 +7124,8 @@ sub modify_usersessions {
         }
     }
 
-    if (keys(%changes) > 0) {
+    my $nochgmsg = &mt('No changes made to settings for user session hosting/offloading.');
+    if ((keys(%changes) > 0) || ($savespares)) {
         my $putresult = &Apache::lonnet::put_dom('configuration',\%defaultshash,
                                                  $dom);
         if ($putresult eq 'ok') {
@@ -7133,71 +7139,77 @@ sub modify_usersessions {
             }
             my $cachetime = 24*60*60;
             &Apache::lonnet::do_cache_new('domdefaults',$dom,\%domdefaults,$cachetime);
-            my %lt = &usersession_titles();
-            $resulttext = &mt('Changes made:').'<ul>';
-            foreach my $prefix (@prefixes) {
-                if (ref($changes{$prefix}) eq 'HASH') {
-                    $resulttext .= '<li>'.$lt{$prefix}.'<ul>';
-                    if ($prefix eq 'spares') {
-                        if (ref($changes{$prefix}) eq 'HASH') {
-                            foreach my $lonhost (sort(keys(%{$changes{$prefix}}))) {
-                                $resulttext .= '<li><b>'.$lonhost.'</b> ';
-                                if (ref($changes{$prefix}{$lonhost}) eq 'HASH') {
-                                    foreach my $type (@{$types{$prefix}}) {
-                                        if ($changes{$prefix}{$lonhost}{$type}) {
-                                            my $offloadto = &mt('None');
-                                            if (ref($defaultshash{'usersessions'}{'spares'}{$lonhost}{$type}) eq 'ARRAY') {
-                                                if (@{$defaultshash{'usersessions'}{'spares'}{$lonhost}{$type}} > 0) {   
-                                                    $offloadto = join(', ',@{$defaultshash{'usersessions'}{'spares'}{$lonhost}{$type}});
+            if (keys(%changes) > 0) {
+                my %lt = &usersession_titles();
+                $resulttext = &mt('Changes made:').'<ul>';
+                foreach my $prefix (@prefixes) {
+                    if (ref($changes{$prefix}) eq 'HASH') {
+                        $resulttext .= '<li>'.$lt{$prefix}.'<ul>';
+                        if ($prefix eq 'spares') {
+                            if (ref($changes{$prefix}) eq 'HASH') {
+                                foreach my $lonhost (sort(keys(%{$changes{$prefix}}))) {
+                                    $resulttext .= '<li><b>'.$lonhost.'</b> ';
+                                    my $lonhostdom = &Apache::lonnet::host_domain($lonhost);
+                                    &Apache::lonnet::remote_devalidate_cache($lonhost,'spares',$lonhostdom);
+                                    if (ref($changes{$prefix}{$lonhost}) eq 'HASH') {
+                                        foreach my $type (@{$types{$prefix}}) {
+                                            if ($changes{$prefix}{$lonhost}{$type}) {
+                                                my $offloadto = &mt('None');
+                                                if (ref($defaultshash{'usersessions'}{'spares'}{$lonhost}{$type}) eq 'ARRAY') {
+                                                    if (@{$defaultshash{'usersessions'}{'spares'}{$lonhost}{$type}} > 0) {   
+                                                        $offloadto = join(', ',@{$defaultshash{'usersessions'}{'spares'}{$lonhost}{$type}});
+                                                    }
                                                 }
+                                                $resulttext .= &mt('[_1] set to: [_2].','<i>'.$lt{$type}.'</i>',$offloadto).('&nbsp;'x3);
                                             }
-                                            $resulttext .= &mt('[_1] set to: [_2]','<i>'.$lt{'type'}.'</i>',$offloadto).('&nbsp;'x3);
                                         }
                                     }
+                                    $resulttext .= '</li>';
                                 }
-                                $resulttext .= '</li>';
                             }
-                        }
-                    } else {
-                        foreach my $type (@{$types{$prefix}}) {
-                            if (defined($changes{$prefix}{$type})) {
-                                my $newvalue;
-                                if (ref($defaultshash{'usersessions'}) eq 'HASH') {
-                                    if (ref($defaultshash{'usersessions'}{$prefix})) {
-                                        if ($type eq 'version') {
-                                            $newvalue = $defaultshash{'usersessions'}{$prefix}{$type};
-                                        } elsif (ref($defaultshash{'usersessions'}{$prefix}{$type}) eq 'ARRAY') {
-                                            if (@{$defaultshash{'usersessions'}{$prefix}{$type}} > 0) {
-                                                $newvalue = join(', ',@{$defaultshash{'usersessions'}{$prefix}{$type}});
+                        } else {
+                            foreach my $type (@{$types{$prefix}}) {
+                                if (defined($changes{$prefix}{$type})) {
+                                    my $newvalue;
+                                    if (ref($defaultshash{'usersessions'}) eq 'HASH') {
+                                        if (ref($defaultshash{'usersessions'}{$prefix})) {
+                                            if ($type eq 'version') {
+                                                $newvalue = $defaultshash{'usersessions'}{$prefix}{$type};
+                                            } elsif (ref($defaultshash{'usersessions'}{$prefix}{$type}) eq 'ARRAY') {
+                                                if (@{$defaultshash{'usersessions'}{$prefix}{$type}} > 0) {
+                                                    $newvalue = join(', ',@{$defaultshash{'usersessions'}{$prefix}{$type}});
+                                                }
                                             }
                                         }
                                     }
-                                }
-                                if ($newvalue eq '') {
-                                    if ($type eq 'version') {
-                                        $resulttext .= '<li>'.&mt('[_1] set to: off',$lt{$type}).'</li>';
+                                    if ($newvalue eq '') {
+                                        if ($type eq 'version') {
+                                            $resulttext .= '<li>'.&mt('[_1] set to: off',$lt{$type}).'</li>';
+                                        } else {
+                                            $resulttext .= '<li>'.&mt('[_1] set to: none',$lt{$type}).'</li>';
+                                        }
                                     } else {
-                                        $resulttext .= '<li>'.&mt('[_1] set to: none',$lt{$type}).'</li>';
-                                    }
-                                } else {
-                                    if ($type eq 'version') {
-                                        $newvalue .= ' '.&mt('(or later)'); 
+                                        if ($type eq 'version') {
+                                            $newvalue .= ' '.&mt('(or later)'); 
+                                        }
+                                        $resulttext .= '<li>'.&mt('[_1] set to: [_2].',$lt{$type},$newvalue).'</li>';
                                     }
-                                    $resulttext .= '<li>'.&mt('[_1] set to: [_2].',$lt{$type},$newvalue).'</li>';
                                 }
                             }
                         }
+                        $resulttext .= '</ul>';
                     }
-                    $resulttext .= '</ul>';
                 }
+                $resulttext .= '</ul>';
+            } else {
+                $resulttext = $nochgmsg;
             }
-            $resulttext .= '</ul>';
         } else {
             $resulttext = '<span class="LC_error">'.
                           &mt('An error occurred: [_1]',$putresult).'</span>';
         }
     } else {
-        $resulttext =  &mt('No changes made to settings for user session hosting/offloading.');
+        $resulttext = $nochgmsg;
     }
     return $resulttext;
 }
@@ -7242,39 +7254,6 @@ sub recurse_cat_deletes {
     return;
 }
 
-sub dom_servers {
-    my ($dom) = @_;
-    my (%uniqservers,%servers);
-    my $primaryserver = &Apache::lonnet::hostname(&Apache::lonnet::domain($dom,'primary'));
-    my @machinedoms = &Apache::lonnet::machine_domains($primaryserver);
-    foreach my $mdom (@machinedoms) {
-        my %currservers = %servers;
-        my %server = &Apache::lonnet::get_servers($mdom);
-        %servers = (%currservers,%server);
-    }
-    my %by_hostname;
-    foreach my $id (keys(%servers)) {
-        push(@{$by_hostname{$servers{$id}}},$id);
-    }
-    foreach my $hostname (sort(keys(%by_hostname))) {
-        if (@{$by_hostname{$hostname}} > 1) {
-            my $match = 0;
-            foreach my $id (@{$by_hostname{$hostname}}) {
-                if (&Apache::lonnet::host_domain($id) eq $dom) {
-                    $uniqservers{$id} = $hostname;
-                    $match = 1;
-                }
-            }
-            unless ($match) {
-                $uniqservers{$by_hostname{$hostname}[0]} = $hostname;
-            }
-        } else {
-            $uniqservers{$by_hostname{$hostname}[0]} = $hostname;
-        }
-    }
-    return %uniqservers;
-}
-
 sub get_active_dcs {
     my ($dom) = @_;
     my %dompersonnel = &Apache::lonnet::get_domain_roles($dom,['dc']);