--- loncom/lonnet/perl/lonnet.pm 2006/05/16 18:24:58 1.737 +++ loncom/lonnet/perl/lonnet.pm 2006/05/18 01:08:54 1.739 @@ -1,7 +1,7 @@ # The LearningOnline Network # TCP networking package # -# $Id: lonnet.pm,v 1.737 2006/05/16 18:24:58 albertel Exp $ +# $Id: lonnet.pm,v 1.739 2006/05/18 01:08:54 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -3982,7 +3982,6 @@ sub modify_group_roles { if ($result eq 'ok') { &devalidate_getgroups_cache($udom,$uname,$cdom,$cnum); } - return $result; } @@ -4125,6 +4124,8 @@ sub assignrole { $command.='_0_'.$start; } } + my $origstart = $start; + my $origend = $end; # actually delete if ($deleteflag) { if ((&allowed('dro',$udom)) || (&allowed('dro',$url))) { @@ -4142,6 +4143,11 @@ sub assignrole { # log new user role if status is ok if ($answer eq 'ok') { &userrolelog($role,$uname,$udom,$url,$start,$end); +# for course roles, perform group memberships changes triggered by role change. + unless ($role =~ /^gr/) { + &Apache::longroup::group_changes($udom,$uname,$url,$role,$origend, + $origstart); + } } return $answer; } @@ -5319,9 +5325,29 @@ sub sort_course_groups { # Sort groups b sub packages_tab_default { my ($uri,$varname)=@_; my (undef,$part,$name)=split(/\./,$varname); - my $packages=&metadata($uri,'packages'); - foreach my $package (split(/,/,$packages)) { + + my (@extension,@specifics,$do_default); + foreach my $package (split(/,/,&metadata($uri,'packages'))) { my ($pack_type,$pack_part)=split(/_/,$package,2); + if ($pack_type eq 'default') { + $do_default=1; + } elsif ($pack_type eq 'extension') { + push(@extension,[$package,$pack_type,$pack_part]); + } else { + push(@specifics,[$package,$pack_type,$pack_part]); + } + } + # first look for a package that matches the requested part id + foreach my $package (@specifics) { + my (undef,$pack_type,$pack_part)=@{$package}; + next if ($pack_part ne $part); + if (defined($packagetab{"$pack_type&$name&default"})) { + return $packagetab{"$pack_type&$name&default"}; + } + } + # look for any possible matching non extension_ package + foreach my $package (@specifics) { + my (undef,$pack_type,$pack_part)=@{$package}; if (defined($packagetab{"$pack_type&$name&default"})) { return $packagetab{"$pack_type&$name&default"}; } @@ -5330,6 +5356,20 @@ sub packages_tab_default { return $packagetab{$pack_type."_".$pack_part."&$name&default"}; } } + # look for any posible extension_ match + foreach my $package (@extension) { + my ($package,$pack_type)=@{$package}; + if (defined($packagetab{"$pack_type&$name&default"})) { + return $packagetab{"$pack_type&$name&default"}; + } + if (defined($packagetab{$package."&$name&default"})) { + return $packagetab{$package."&$name&default"}; + } + } + # look for a global default setting + if ($do_default && defined($packagetab{"default&$name&default"})) { + return $packagetab{"default&$name&default"}; + } return undef; }