--- loncom/interface/loncommon.pm 2015/08/05 18:47:21 1.1226 +++ loncom/interface/loncommon.pm 2015/08/16 20:45:41 1.1228 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # a pile of common routines # -# $Id: loncommon.pm,v 1.1226 2015/08/05 18:47:21 raeburn Exp $ +# $Id: loncommon.pm,v 1.1228 2015/08/16 20:45:41 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -2271,12 +2271,16 @@ See lonrights.pm for an example invocati #------------------------------------------- sub select_form { - my ($def,$name,$hashref,$onchange) = @_; + my ($def,$name,$hashref,$onchange,$readonly) = @_; return unless (ref($hashref) eq 'HASH'); if ($onchange) { $onchange = ' onchange="'.$onchange.'"'; } - my $selectform = "\n"; my @keys; if (exists($hashref->{'select_form_order'})) { @keys=@{$hashref->{'select_form_order'}}; @@ -9779,13 +9783,19 @@ sub user_rule_check { if ($checkid) { if (ref($usershash->{$user}) eq 'HASH') { if ($usershash->{$user}->{'id'} ne '') { - $by_id{$udom}{$usershash->{$user}->{'id'}} = 1; + $by_id{$udom}{$usershash->{$user}->{'id'}} = $uname; $userdoms{$udom} = 1; + if (ref($inst_results) eq 'HASH') { + $inst_results->{$uname.':'.$udom} = {}; + } } } } else { $by_username{$udom}{$uname} = 1; $userdoms{$udom} = 1; + if (ref($inst_results) eq 'HASH') { + $inst_results->{$uname.':'.$udom} = {}; + } } } foreach my $udom (keys(%userdoms)) { @@ -9795,8 +9805,8 @@ sub user_rule_check { if (ref($domconfig{'usercreation'}) eq 'HASH') { foreach my $item ('username','id') { if (ref($domconfig{'usercreation'}{$item.'_rule'}) eq 'ARRAY') { - $$curr_rules{$udom}{$item} = - $domconfig{'usercreation'}{$item.'_rule'}; + $$curr_rules{$udom}{$item} = + $domconfig{'usercreation'}{$item.'_rule'}; } } } @@ -9807,10 +9817,16 @@ sub user_rule_check { foreach my $udom (keys(%by_id)) { my ($outcome,$results) = &Apache::lonnet::get_multiple_instusers($udom,$by_id{$udom},'id'); if ($outcome eq 'ok') { + foreach my $id (keys(%{$by_id{$udom}})) { + my $uname = $by_id{$udom}{$id}; + $inst_response{$uname.':'.$udom} = $outcome; + } if (ref($results) eq 'HASH') { foreach my $uname (keys(%{$results})) { - $inst_response{$uname.':'.$udom} = $outcome; - $inst_results->{$uname.':'.$udom} = $results->{$uname}; + if (exists($inst_response{$uname.':'.$udom})) { + $inst_response{$uname.':'.$udom} = $outcome; + $inst_results->{$uname.':'.$udom} = $results->{$uname}; + } } } } @@ -9819,9 +9835,11 @@ sub user_rule_check { foreach my $udom (keys(%by_username)) { my ($outcome,$results) = &Apache::lonnet::get_multiple_instusers($udom,$by_username{$udom}); if ($outcome eq 'ok') { + foreach my $uname (keys(%{$by_username{$udom}})) { + $inst_response{$uname.':'.$udom} = $outcome; + } if (ref($results) eq 'HASH') { foreach my $uname (keys(%{$results})) { - $inst_response{$uname.':'.$udom} = $outcome; $inst_results->{$uname.':'.$udom} = $results->{$uname}; } } @@ -9876,8 +9894,15 @@ sub user_rule_check { my ($uname,$udom) = split(/:/,$user); next if (($udom eq '') || ($uname eq '')); my $id; - if (ref($usershash->{$user})) { - $id = $usershash->{$user}->{'id'}; + if (ref($inst_results) eq 'HASH') { + if (ref($inst_results->{$user}) eq 'HASH') { + $id = $inst_results->{$user}->{'id'}; + } + } + if ($id eq '') { + if (ref($usershash->{$user})) { + $id = $usershash->{$user}->{'id'}; + } } foreach my $item (keys(%{$checks})) { if (ref($$curr_rules{$udom}) eq 'HASH') { @@ -9893,6 +9918,10 @@ sub user_rule_check { if (ref($inst_results->{$user}) eq 'HASH') { if (keys(%{$inst_results->{$user}}) == 0) { $$alerts{$item}{$udom}{$uname} = 1; + } elsif ($item eq 'id') { + if ($inst_results->{$user}->{'id'} eq '') { + $$alerts{$item}{$udom}{$uname} = 1; + } } } }