--- loncom/interface/domainprefs.pm 2010/07/17 20:02:07 1.137 +++ loncom/interface/domainprefs.pm 2010/08/13 05:45:05 1.138.2.1 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to set domain-wide configuration settings # -# $Id: domainprefs.pm,v 1.137 2010/07/17 20:02:07 raeburn Exp $ +# $Id: domainprefs.pm,v 1.138.2.1 2010/08/13 05:45:05 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -202,13 +202,12 @@ sub handler { 'quotas','autoenroll','autoupdate','autocreate', 'directorysrch','usercreation','usermodification', 'contacts','defaults','scantron','coursecategories', - 'serverstatuses','requestcourses','helpsettings', - 'coursedefaults','usersessions'],$dom); + 'serverstatuses','requestcourses','usersessions'],$dom); my @prefs_order = ('rolecolors','login','defaults','quotas','autoenroll', 'autoupdate','autocreate','directorysrch','contacts', 'usercreation','usermodification','scantron', - 'requestcourses','coursecategories','serverstatuses','helpsettings', - 'coursedefaults','usersessions'); + 'requestcourses','coursecategories','serverstatuses', + 'usersessions'); my %prefs = ( 'rolecolors' => { text => 'Default color schemes', @@ -455,10 +454,6 @@ sub process_changes { $output = &modify_serverstatuses($dom,%domconfig); } elsif ($action eq 'requestcourses') { $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); } @@ -666,10 +661,6 @@ sub print_config_box { $output .= &print_scantronformat($r,$dom,$confname,$settings,\$rowtotal); } elsif ($action eq 'serverstatuses') { $output .= &print_serverstatuses($dom,$settings,\$rowtotal); - } elsif ($action eq 'helpsettings') { - $output .= &print_helpsettings('top',$dom,$confname,$settings,\$rowtotal); - } elsif ($action eq 'coursedefaults') { - $output .= &print_coursedefaults($dom,$settings,\$rowtotal); } } $output .= ' @@ -2270,10 +2261,12 @@ sub print_usersessions { } else { $prefix = 'remote'; @types = ('version','excludedomain','includedomain'); - } + } my (%current,%checkedon,%checkedoff); my @lcversions = &Apache::lonnet::all_loncaparevs(); - my @alldoms = sort(&Apache::lonnet::all_domains()); + my (%by_ip,%by_location,@intdoms); + &build_location_hashes(\@intdoms,\%by_ip,\%by_location); + my @locations = sort(keys(%by_location)); foreach my $type (@types) { $checkedon{$type} = ''; $checkedoff{$type} = ' checked="checked"'; @@ -2322,12 +2315,21 @@ sub print_usersessions { "\n". '
'; my $rem; - for (my $i=0; $i<@alldoms; $i++) { - next if ($alldoms[$i] eq $dom); - my $checkedtype; - if (ref($current{$type}) eq 'ARRAY') { - if (grep(/^\Q$alldoms[$i]\E$/,@{$current{$type}})) { - $checkedtype = ' checked="checked"'; + for (my $i=0; $i<@locations; $i++) { + my ($showloc,$value,$checkedtype); + if (ref($by_location{$locations[$i]}) eq 'ARRAY') { + my $ip = $by_location{$locations[$i]}->[0]; + if (ref($by_ip{$ip}) eq 'ARRAY') { + $value = join(':',@{$by_ip{$ip}}); + $showloc = join(', ',@{$by_ip{$ip}}); + if (ref($current{$type}) eq 'ARRAY') { + foreach my $loc (@{$by_ip{$ip}}) { + if (grep(/^\Q$loc\E$/,@{$current{$type}})) { + $checkedtype = ' checked="checked"'; + last; + } + } + } } } $rem = $i%($numinrow); @@ -2340,10 +2342,10 @@ sub print_usersessions { $datatable .= ''; } - $rem = @alldoms%($numinrow); + $rem = @locations%($numinrow); my $colsleft = $numinrow - $rem; if ($colsleft > 1 ) { $datatable .= '
'. ''. @@ -2360,6 +2362,54 @@ sub print_usersessions { return $datatable; } +sub build_location_hashes { + my ($intdoms,$by_ip,$by_location) = @_; + return unless((ref($intdoms) eq 'ARRAY') && (ref($by_ip) eq 'HASH') && + (ref($by_location) eq 'HASH')); + my %iphost = &Apache::lonnet::get_iphost(); + my $primary_id = &Apache::lonnet::domain($env{'request.role.domain'},'primary'); + my $primary_ip = &Apache::lonnet::get_host_ip($primary_id); + if (ref($iphost{$primary_ip}) eq 'ARRAY') { + foreach my $id (@{$iphost{$primary_ip}}) { + my $intdom = &Apache::lonnet::internet_dom($id); + unless(grep(/^\Q$intdom\E$/,@{$intdoms})) { + push(@{$intdoms},$intdom); + } + } + } + foreach my $ip (keys(%iphost)) { + if (ref($iphost{$ip}) eq 'ARRAY') { + foreach my $id (@{$iphost{$ip}}) { + my $location = &Apache::lonnet::internet_dom($id); + if ($location) { + next if (grep(/^\Q$location\E$/,@{$intdoms})); + if (ref($by_ip->{$ip}) eq 'ARRAY') { + unless(grep(/^\Q$location\E$/,@{$by_ip->{$ip}})) { + push(@{$by_ip->{$ip}},$location); + } + } else { + $by_ip->{$ip} = [$location]; + } + } + } + } + } + foreach my $ip (sort(keys(%{$by_ip}))) { + if (ref($by_ip->{$ip}) eq 'ARRAY') { + @{$by_ip->{$ip}} = sort(@{$by_ip->{$ip}}); + my $first = $by_ip->{$ip}->[0]; + if (ref($by_location->{$first}) eq 'ARRAY') { + unless (grep(/^\Q$ip\E$/,@{$by_location->{$first}})) { + push(@{$by_location->{$first}},$ip); + } + } else { + $by_location->{$first} = [$ip]; + } + } + } + return; +} + sub contact_titles { my %titles = &Apache::lonlocal::texthash ( 'supportemail' => 'Support E-mail address', @@ -6642,12 +6692,16 @@ sub modify_usersessions { my @types = ('version','excludedomain','includedomain'); my @prefixes = ('remote','hosted'); my @lcversions = &Apache::lonnet::all_loncaparevs(); + my (%by_ip,%by_location,@intdoms); + &build_location_hashes(\@intdoms,\%by_ip,\%by_location); + my @locations = sort(keys(%by_location)); my (%defaultshash,%changes); foreach my $prefix (@prefixes) { $defaultshash{'usersessions'}{$prefix} = {}; } my %domdefaults = &Apache::lonnet::get_domain_defaults($dom); my $resulttext; + my %iphost = &Apache::lonnet::get_iphost(); foreach my $prefix (@prefixes) { foreach my $type (@types) { my $inuse = $env{'form.'.$prefix.'_'.$type.'_inuse'}; @@ -6694,8 +6748,17 @@ sub modify_usersessions { my @vals = &Apache::loncommon::get_env_multiple('form.'.$prefix.'_'.$type); my @okvals; foreach my $val (@vals) { - if (&Apache::lonnet::domain($val) ne '') { - push(@okvals,$val); + if ($val =~ /:/) { + my @items = split(/:/,$val); + foreach my $item (@items) { + if (ref($by_location{$item}) eq 'ARRAY') { + push(@okvals,$item); + } + } + } else { + if (ref($by_location{$val}) eq 'ARRAY') { + push(@okvals,$val); + } } } @okvals = sort(@okvals); @@ -6942,8 +7005,8 @@ sub usersession_titles { remote => 'Hosting of sessions for users in this domain on servers in other domains', version => 'LON-CAPA version requirement', - excludedomain => 'Specific domains excluded', - includedomain => 'Specific domains included', + excludedomain => 'Allow all, but exclude specific domains', + includedomain => 'Deny all, but include specific domains', ); }