--- loncom/interface/loncoursegroups.pm 2006/05/18 18:35:13 1.19 +++ loncom/interface/loncoursegroups.pm 2006/05/18 22:13:48 1.20 @@ -476,7 +476,7 @@ sub group_administration { } if (defined($env{'form.sectionpick'})) { @sections=&Apache::loncommon::get_env_multiple('form.sectionpick'); - if (grep/^_all$/,@sections) { + if (grep/^all$/,@sections) { @sections = sort {$a cmp $b} keys(%sectioncount); } } @@ -561,7 +561,7 @@ sub group_administration { if (($state eq 'pick_privs') || ($state eq 'change_privs') || (($specificity eq 'No') && - (($state eq 'result') || ($state eq 'memresult')))) { + (($state eq 'addresult') || ($state eq 'memresult')))) { foreach my $tool (@tools) { my @values = &Apache::loncommon::get_env_multiple('form.user_'.$tool); foreach my $user (@values) { @@ -2905,6 +2905,7 @@ sub process_membership { my $num_ok = 0; my $num_fail = 0; my %group_privs = (); + my %curr_privs = (); my %tooltype = (); foreach my $tool (@{$tools}) { @@ -2943,6 +2944,7 @@ sub process_membership { my @expire = (); my @deletion = (); my @reenable = (); + my @unchanged = (); if ($state eq 'memresult') { if (ref($$memchg{'activate'}) eq 'ARRAY') { @activate = @{$$memchg{'activate'}}; @@ -2956,21 +2958,25 @@ sub process_membership { if (ref($$memchg{'reenable'}) eq 'ARRAY') { @reenable = @{$$memchg{'reenable'}}; } + my %membership = &Apache::lonnet::get_group_membership($cdom,$cnum, + $groupname); + foreach my $key (sort(keys(%membership))) { + if ($key =~ /^\Q$groupname\E:([^:]+:[^:]+)$/) { + (undef,undef,$curr_privs{$1})=split(/:/,$membership{$key},3); + } + } if (@expire + @deletion > 0) { - my %membership = &Apache::lonnet::get_group_membership($cdom,$cnum, - $groupname); foreach my $user (@expire) { - my ($currend,$currstart,@userprivs) = - split(/:/,$membership{$groupname.':'.$user}); - $group_privs{$user} = join(':',@userprivs); + my ($currend,$currstart,$grp_privs) = + split(/:/,$membership{$groupname.':'.$user},3); if ($currstart > $now) { $currstart = $now; } $usersettings{$groupname.':'.$user} = $now.':'.$currstart.':'. - $group_privs{$user}; + $grp_privs; if (&Apache::lonnet::modify_group_roles($cdom,$cnum,$groupname, $user,$now,$currstart, - $group_privs{$user}) eq 'ok') { + $grp_privs) eq 'ok') { push(@{$added{'expired'}},$user); $num_ok ++; } else { @@ -2994,10 +3000,17 @@ sub process_membership { } foreach my $user (sort(keys(%{$usertools}))) { + if ((grep(/^$user$/,@expire)) || (grep(/^$user$/,@deletion))) { + next; + } my $type; my $start = $startdate; my $end = $enddate; if ($state eq 'memresult') { + if ($curr_privs{$user} eq $group_privs{$user}) { + push(@unchanged,$user); + next; + } $type = 'modified'; if (@activate > 0) { if (grep/^$user$/,@activate) { @@ -3030,7 +3043,7 @@ sub process_membership { if ($num_ok) { foreach my $type (sort(keys(%added))) { $r->print(&mt('The following users were successfully [_1]',$type)); - if (!($type eq 'deleted' || $type eq 'expired')) { + if (!($type eq 'deleted' || $type eq 'expired')) { $r->print(&mt(' with the following privileges')); } $r->print(':
'); @@ -3051,6 +3064,7 @@ sub process_membership { } $r->print($$userdata{$user}[$$idx{fullname}].' - '.$user.$privlist.'
'); } + $r->print('
'); } } if ($num_fail) { @@ -3060,6 +3074,14 @@ sub process_membership { $r->print($$userdata{$user}[$$idx{fullname}].' - '.$user.'
'); } } + $r->print('
'); + } + if (@unchanged > 0) { + $r->print(&mt('No change occurred for the following users:
')); + foreach my $user (sort(@unchanged)) { + $r->print($$userdata{$user}[$$idx{fullname}].' - '.$user.'
'); + } + $r->print('
'); } if ($roster_result eq 'ok') { $r->print('
'.&mt('Group membership list updated.'));