--- loncom/interface/domainprefs.pm 2009/10/23 16:14:43 1.116 +++ loncom/interface/domainprefs.pm 2009/10/25 15:53:25 1.117 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to set domain-wide configuration settings # -# $Id: domainprefs.pm,v 1.116 2009/10/23 16:14:43 bisitz Exp $ +# $Id: domainprefs.pm,v 1.117 2009/10/25 15:53:25 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -320,7 +320,7 @@ sub handler { }], }, ); - my %servers = &Apache::lonnet::get_servers($dom); + my %servers = &dom_servers($dom); if (keys(%servers) > 1) { $prefs{'login'} = { text => 'Log-in page options', help => 'Domain_Configuration_Login_Page', @@ -617,7 +617,7 @@ sub print_login { my $itemcount = 1; if ($position eq 'top') { - my %servers = &Apache::lonnet::get_servers($dom); + my %servers = &dom_servers($dom); my $choice = $choices{'disallowlogin'}; $css_class = ' class="LC_odd_row"'; $datatable .= ''.$choices{'disallowlogin'}.''. @@ -3163,7 +3163,7 @@ sub modify_login { \%loginhash); } - my %servers = &Apache::lonnet::get_servers($dom); + my %servers = &dom_servers($dom); if (keys(%servers) > 1) { foreach my $lonhost (keys(%servers)) { next if ($env{'form.'.$lonhost.'_serverurl'} eq $curr_loginvia{$lonhost}); @@ -5666,4 +5666,37 @@ 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; +} + 1;