--- loncom/interface/lonparmset.pm 2005/11/21 22:00:11 1.268 +++ loncom/interface/lonparmset.pm 2005/11/22 02:24:50 1.269 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to set parameters for assessments # -# $Id: lonparmset.pm,v 1.268 2005/11/21 22:00:11 albertel Exp $ +# $Id: lonparmset.pm,v 1.269 2005/11/22 02:24:50 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -88,16 +88,19 @@ Inputs: $what - a parameter spec (inclu $id - a bighash Id number $def - the resource's default value 'stupid emacs -Returns: A list, the first item is the index into the remaining list of items of parm valuse that is the active one, the list consists of parm values at the 11 possible levels +Returns: A list, the first item is the index into the remaining list of items of parm valuse that is the active one, the list consists of parm values at the 14 possible levels -11 - General Course -10 - Map or Folder level in course -9- resource default -8- map default -7 - resource level in course -6 - General for section -5 - Map or Folder level for section -4 - resource level in section +14 - General Course +13 - Map or Folder level in course +12- resource default +11- map default +10 - resource level in course +9 - General for section +8 - Map or Folder level for section +7 - resource level in section +6 - General for group +5 - Map or Folder level for group +4 - resource level in group 3 - General for specific student 2 - Map or Folder level for specific student 1 - resource level for specific student @@ -106,12 +109,12 @@ Returns: A list, the first item is the ################################################## sub parmval { - my ($what,$id,$def,$uname,$udom,$csec)=@_; - return &parmval_by_symb($what,&symbcache($id),$def,$uname,$udom,$csec); + my ($what,$id,$def,$uname,$udom,$csec,$cgroup)=@_; + return &parmval_by_symb($what,&symbcache($id),$def,$uname,$udom,$csec,$cgroup); } sub parmval_by_symb { - my ($what,$symb,$def,$uname,$udom,$csec)=@_; + my ($what,$symb,$def,$uname,$udom,$csec,$cgroup)=@_; # load caches &cacheparmhash(); @@ -121,7 +124,6 @@ sub parmval_by_symb { my $useropt=&Apache::lonnet::get_userresdata($uname,$udom); my $courseopt=&Apache::lonnet::get_courseresdata($cnum,$cdom); - my $result=''; my @outpar=(); # ----------------------------------------------------- Cascading lookup scheme @@ -130,6 +132,10 @@ sub parmval_by_symb { my $symbparm=$symb.'.'.$what; my $mapparm=$map.'___(all).'.$what; + my $grplevel=$env{'request.course.id'}.'.['.$cgroup.'].'.$what; + my $grplevelr=$env{'request.course.id'}.'.['.$cgroup.'].'.$symbparm; + my $grplevelm=$env{'request.course.id'}.'.['.$cgroup.'].'.$mapparm; + my $seclevel=$env{'request.course.id'}.'.['.$csec.'].'.$what; my $seclevelr=$env{'request.course.id'}.'.['.$csec.'].'.$symbparm; my $seclevelm=$env{'request.course.id'}.'.['.$csec.'].'.$mapparm; @@ -139,49 +145,63 @@ sub parmval_by_symb { my $courselevelm=$env{'request.course.id'}.'.'.$mapparm; - # --------------------------------------------------------- first, check course if (defined($$courseopt{$courselevel})) { - $outpar[11]=$$courseopt{$courselevel}; - $result=11; + $outpar[14]=$$courseopt{$courselevel}; + $result=14; } if (defined($$courseopt{$courselevelm})) { - $outpar[10]=$$courseopt{$courselevelm}; - $result=10; + $outpar[13]=$$courseopt{$courselevelm}; + $result=13; } # ------------------------------------------------------- second, check default - if (defined($def)) { $outpar[9]=$def; $result=9; } + if (defined($def)) { $outpar[12]=$def; $result=12; } # ------------------------------------------------------ third, check map parms my $thisparm=$parmhash{$symbparm}; - if (defined($thisparm)) { $outpar[8]=$thisparm; $result=8; } + if (defined($thisparm)) { $outpar[11]=$thisparm; $result=11; } if (defined($$courseopt{$courselevelr})) { - $outpar[7]=$$courseopt{$courselevelr}; - $result=7; + $outpar[10]=$$courseopt{$courselevelr}; + $result=10; } # ------------------------------------------------------ fourth, back to course if (defined($csec)) { if (defined($$courseopt{$seclevel})) { - $outpar[6]=$$courseopt{$seclevel}; - $result=6; + $outpar[9]=$$courseopt{$seclevel}; + $result=9; } if (defined($$courseopt{$seclevelm})) { - $outpar[5]=$$courseopt{$seclevelm}; - $result=5; + $outpar[8]=$$courseopt{$seclevelm}; + $result=8; } if (defined($$courseopt{$seclevelr})) { - $outpar[4]=$$courseopt{$seclevelr}; - $result=4; + $outpar[7]=$$courseopt{$seclevelr}; + $result=7; } } +# ------------------------------------------------------ fifth, check gourse group + if (defined($cgroup)) { + if (defined($$courseopt{$grplevel})) { + $outpar[6]=$$courseopt{$grplevel}; + $result=6; + } + if (defined($$courseopt{$grplevelm})) { + $outpar[5]=$$courseopt{$grplevelm}; + $result=5; + } + if (defined($$courseopt{$grplevelr})) { + $outpar[4]=$$courseopt{$grplevelr}; + $result=4; + } + } # ---------------------------------------------------------- fifth, check user @@ -289,8 +309,8 @@ sub preset_defaults { # - userdomain sub storeparm { - my ($sresid,$spnam,$snum,$nval,$ntype,$uname,$udom,$csec)=@_; - &storeparm_by_symb(&symbcache($sresid),$spnam,$snum,$nval,$ntype,$uname,$udom,$csec); + my ($sresid,$spnam,$snum,$nval,$ntype,$uname,$udom,$csec,$cgroup)=@_; + &storeparm_by_symb(&symbcache($sresid),$spnam,$snum,$nval,$ntype,$uname,$udom,$csec,$cgroup); } # @@ -307,7 +327,7 @@ sub storeparm { my %recstack; sub storeparm_by_symb { - my ($symb,$spnam,$snum,$nval,$ntype,$uname,$udom,$csec,$recflag)=@_; + my ($symb,$spnam,$snum,$nval,$ntype,$uname,$udom,$csec,$cgroup,$recflag)=@_; unless ($recflag) { # first time call %recstack=(); @@ -315,7 +335,7 @@ sub storeparm_by_symb { } # store parameter &storeparm_by_symb_inner - ($symb,$spnam,$snum,$nval,$ntype,$uname,$udom,$csec); + ($symb,$spnam,$snum,$nval,$ntype,$uname,$udom,$csec,$cgroup); # don't do anything if parameter was reset unless ($nval) { return; } my ($prefix,$parm)=($spnam=~/^(.*[\_\.])([^\_\.]+)$/); @@ -350,7 +370,7 @@ sub storeparm_by_symb { } if ($active) { &storeparm_by_symb($symb,$newspnam,$snum,$newvalue,&rulescache($triggered.'_type'), - $uname,$udom,$csec,$recflag); + $uname,$udom,$csec,$cgroup,$recflag); } } } @@ -359,13 +379,17 @@ sub storeparm_by_symb { sub storeparm_by_symb_inner { # ---------------------------------------------------------- Get symb, map, etc - my ($symb,$spnam,$snum,$nval,$ntype,$uname,$udom,$csec)=@_; + my ($symb,$spnam,$snum,$nval,$ntype,$uname,$udom,$csec,$cgroup)=@_; # ---------------------------------------------------------- Construct prefixes $spnam=~s/\_([^\_]+)$/\.$1/; my $map=(&Apache::lonnet::decode_symb($symb))[0]; my $symbparm=$symb.'.'.$spnam; my $mapparm=$map.'___(all).'.$spnam; + my $grplevel=$env{'request.course.id'}.'.['.$cgroup.'].'.$spnam; + my $grplevelr=$env{'request.course.id'}.'.['.$cgroup.'].'.$symbparm; + my $grplevelm=$env{'request.course.id'}.'.['.$cgroup.'].'.$mapparm; + my $seclevel=$env{'request.course.id'}.'.['.$csec.'].'.$spnam; my $seclevelr=$env{'request.course.id'}.'.['.$csec.'].'.$symbparm; my $seclevelm=$env{'request.course.id'}.'.['.$csec.'].'.$mapparm; @@ -375,12 +399,16 @@ sub storeparm_by_symb_inner { my $courselevelm=$env{'request.course.id'}.'.'.$mapparm; my $storeunder=''; - if (($snum==11) || ($snum==3)) { $storeunder=$courselevel; } - if (($snum==10) || ($snum==2)) { $storeunder=$courselevelm; } - if (($snum==7) || ($snum==1)) { $storeunder=$courselevelr; } - if ($snum==6) { $storeunder=$seclevel; } - if ($snum==5) { $storeunder=$seclevelm; } - if ($snum==4) { $storeunder=$seclevelr; } + if (($snum==14) || ($snum==3)) { $storeunder=$courselevel; } + if (($snum==13) || ($snum==2)) { $storeunder=$courselevelm; } + if (($snum==10) || ($snum==1)) { $storeunder=$courselevelr; } + if ($snum==9) { $storeunder=$seclevel; } + if ($snum==8) { $storeunder=$seclevelm; } + if ($snum==7) { $storeunder=$seclevelr; } + if ($snum==6) { $storeunder=$grplevel; } + if ($snum==5) { $storeunder=$grplevelm; } + if ($snum==4) { $storeunder=$grplevelr; } + my $delete; if ($nval eq '') { $delete=1;} @@ -394,9 +422,9 @@ sub storeparm_by_symb_inner { my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; # Expire sheets &Apache::lonnet::expirespread('','','studentcalc'); - if (($snum==7) || ($snum==4)) { + if (($snum==10) || ($snum==7) || ($snum==4)) { &Apache::lonnet::expirespread('','','assesscalc',$symb); - } elsif (($snum==8) || ($snum==5)) { + } elsif (($snum==11) || ($snum==8) || ($snum==5)) { &Apache::lonnet::expirespread('','','assesscalc',$map); } else { &Apache::lonnet::expirespread('','','assesscalc'); @@ -537,9 +565,9 @@ sub plink { sub startpage { my $r=shift; - + my $loaditems = qq|onUnload="pclose()" onLoad="group_or_section('cgroup')"|; my $bodytag=&Apache::loncommon::bodytag('Set/Modify Course Parameters','', - 'onUnload="pclose()"'); + $loaditems); my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs(undef,'Table Mode Parameter Setting'); my $selscript=&Apache::loncommon::studentbrowser_javascript(); my $pjump_def = &Apache::lonhtmlcommon::pjump_javascript_definition(); @@ -604,19 +632,19 @@ ENDHEAD sub print_row { my ($r,$which,$part,$name,$symbp,$rid,$default,$defaulttype,$display,$defbgone, - $defbgtwo,$parmlev,$uname,$udom,$csec)=@_; + $defbgtwo,$defbgthree,$parmlev,$uname,$udom,$csec,$cgroup)=@_; # get the values for the parameter in cascading order # empty levels will remain empty my ($result,@outpar)=&parmval($$part{$which}.'.'.$$name{$which}, - $rid,$$default{$which},$uname,$udom,$csec); + $rid,$$default{$which},$uname,$udom,$csec,$cgroup); # get the type for the parameters # problem: these may not be set for all levels my ($typeresult,@typeoutpar)=&parmval($$part{$which}.'.'. $$name{$which}.'.type', - $rid,$$defaulttype{$which},$uname,$udom,$csec); + $rid,$$defaulttype{$which},$uname,$udom,$csec,$cgroup); # cascade down manually my $cascadetype=$$defaulttype{$which}; - for (my $i=11;$i>0;$i--) { + for (my $i=14;$i>0;$i--) { if ($typeoutpar[$i]) { $cascadetype=$typeoutpar[$i]; } else { @@ -645,34 +673,45 @@ sub print_row { if ($uname) { &print_td($r,3,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); + } elsif ($cgroup) { + &print_td($r,6,$defbgthree,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); } elsif ($csec) { - &print_td($r,6,$defbgtwo,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); + &print_td($r,9,$defbgtwo,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); } else { - &print_td($r,11,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); + &print_td($r,14,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); } } elsif ($parmlev eq 'map') { if ($uname) { &print_td($r,2,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); + } elsif ($cgroup) { + &print_td($r,5,$defbgthree,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); } elsif ($csec) { - &print_td($r,5,$defbgtwo,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); + &print_td($r,8,$defbgtwo,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); } else { - &print_td($r,10,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); + &print_td($r,13,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); } } else { - &print_td($r,11,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); + &print_td($r,14,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); + &print_td($r,13,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); + &print_td($r,12,'#FFDDDD',$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); + &print_td($r,11,'#FFDDDD',$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); &print_td($r,10,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); - &print_td($r,9,'#FFDDDD',$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); - &print_td($r,8,'#FFDDDD',$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); - &print_td($r,7,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); if ($csec) { - &print_td($r,6,$defbgtwo,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); - &print_td($r,5,$defbgtwo,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); - &print_td($r,4,$defbgtwo,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); + &print_td($r,9,$defbgtwo,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); + &print_td($r,8,$defbgtwo,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); + &print_td($r,7,$defbgtwo,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); } + + if ($cgroup) { + &print_td($r,6,$defbgthree,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); + &print_td($r,5,$defbgthree,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); + &print_td($r,4,$defbgthree,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); + } + if ($uname) { &print_td($r,3,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); &print_td($r,2,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); @@ -701,7 +740,7 @@ sub print_td { my ($r,$which,$defbg,$result,$outpar,$mprefix,$value,$typeoutpar,$display)=@_; $r->print(''); - if ($which<8 || $which > 9) { + if ($which<11 || $which > 12) { $r->print(&plink($$typeoutpar[$which], $$display{$value},$$outpar[$which], $mprefix."$which",'parmform.pres','psub')); @@ -958,32 +997,84 @@ sub partmenu { } sub usermenu { - my ($r,$uname,$id,$udom,$csec)=@_; + my ($r,$uname,$id,$udom,$csec,$cgroup,$parmlev)=@_; my $chooseopt=&Apache::loncommon::select_dom_form($udom,'udom').' '. &Apache::loncommon::selectstudent_link('parmform','uname','udom'); my $selscript=&Apache::loncommon::studentbrowser_javascript(); my %lt=&Apache::lonlocal::texthash( - 'sg' => "Section/Group", + 'se' => "Section", + 'gr' => "Group", 'fu' => "For User", 'oi' => "or ID", 'ad' => "at Domain" ); my %sectionhash=(); my $sections=''; - if (&Apache::loncommon::get_sections( + my $numsec = &Apache::loncommon::get_sections( $env{'course.'.$env{'request.course.id'}.'.domain'}, $env{'course.'.$env{'request.course.id'}.'.num'}, - \%sectionhash)) { - $sections=$lt{'sg'}.': '.$_.''; } $sections.=''; - } - $r->print(< +function group_or_section(caller) { + if (caller == "cgroup") { + if (document.parmform.cgroup.selectedIndex != 0) { + document.parmform.csec.selectedIndex = 0; + } + } else { + if (document.parmform.csec.selectedIndex != 0) { + document.parmform.cgroup.selectedIndex = 0; + } + } +} + +|; + } else { + $sections .= qq| + +|; + } + if ($numgrp > 0) { + $groups=$lt{'gr'}.': '; + } + $r->print(< $sections +$groups
$lt{'fu'} @@ -1037,11 +1128,12 @@ sub levelmenu { sub sectionmenu { my ($r,$selectedsections)=@_; my %sectionhash=(); - - if (&Apache::loncommon::get_sections( + my $sections=''; + my $numsec = &Apache::loncommon::get_sections( $env{'course.'.$env{'request.course.id'}.'.domain'}, $env{'course.'.$env{'request.course.id'}.'.num'}, - \%sectionhash)) { + \%sectionhash); + if ($numsec) { $r->print('\n"); + $r->print("\n"); + } +} + +sub groupmenu { + my ($r,$selectedgroups)=@_; + my %grouphash; + my $numgrp = &Apache::loncommon::coursegroups( + \%grouphash, + $env{'course.'.$env{'request.course.id'}.'.domain'}, + $env{'course.'.$env{'request.course.id'}.'.num'}); + if ($numgrp) { + $r->print('\n"); } } + sub keysplit { my $keyp=shift; return (split(/\,/,$keyp)); @@ -1177,6 +1293,7 @@ sub assessparms { my $udom; my $uhome; my $csec; + my $cgroup; my $coursename=$env{'course.'.$env{'request.course.id'}.'.description'}; @@ -1198,6 +1315,7 @@ sub assessparms { my $message=''; $csec=$env{'form.csec'}; + $cgroup=$env{'form.cgroup'}; if ($udom=$env{'form.udom'}) { } elsif ($udom=$env{'request.role.domain'}) { @@ -1264,12 +1382,14 @@ sub assessparms { } else { $csec=&Apache::lonnet::getsection($udom,$uname, $env{'request.course.id'}); + if ($csec eq '-1') { $message="". &mt("User")." '$uname' ".&mt("at domain")." '$udom' ". &mt("not in this course").""; $uname=''; $csec=$env{'form.csec'}; + $cgroup=$env{'form.cgroup'}; } else { my %name=&Apache::lonnet::userenvironment($udom,$uname, ('firstname','middlename','lastname','generation','id')); @@ -1278,10 +1398,18 @@ sub assessparms { .$name{'lastname'}.' '.$name{'generation'}. "
\n".&mt('ID').": ".$name{'id'}.'

'; } + my $grouplist = &Apache::lonnet::get_users_groups( + $udom,$uname,$env{'request.course.id'}); + if ($grouplist) { + my @groups = split(/:/,$grouplist); + @groups = sort(@groups); + $cgroup = $groups[0]; + } } } unless ($csec) { $csec=''; } + unless ($cgroup) { $cgroup=''; } # --------------------------------------------------------- Get all assessments &extractResourceInformation(\@ids, \%typep,\%keyp, \%allparms, \%allparts, \%allmaps, @@ -1300,7 +1428,7 @@ sub assessparms { $message.=&storeparm(split(/\&/,$markers[$i]), $values[$i], $types[$i], - $uname,$udom,$csec); + $uname,$udom,$csec,$cgroup); } # ---------------------------------------------------------------- Done storing $message.='

'.&mt('Changes can take up to 10 minutes before being active for all students.').&Apache::loncommon::help_open_topic('Caching').'

'; @@ -1336,7 +1464,7 @@ sub assessparms { '

'); } - &usermenu($r,$uname,$id,$udom,$csec); + &usermenu($r,$uname,$id,$udom,$csec,$cgroup,$parmlev); $r->print('

'.$message.'

'); @@ -1358,6 +1486,10 @@ sub assessparms { if ($parmlev eq 'full') { my $coursespan=$csec?8:5; + if ($cgroup ne '') { + $coursespan += 3; + } + $r->print('

'); $r->print(''); $r->print(''); @@ -1391,7 +1523,11 @@ sub assessparms { ENDTABLETWO if ($csec) { $r->print(""); + &mt("in Section")." $csec"); + } + if ($cgroup) { + $r->print(""); } $r->print(< @@ -1404,6 +1540,10 @@ ENDTABLEHEADFOUR $r->print(''); } + if ($cgroup) { + $r->print(''); + } + if ($uname) { $r->print(''); } @@ -1412,6 +1552,7 @@ ENDTABLEHEADFOUR my $defbgone=''; my $defbgtwo=''; + my $defbgthree = ''; foreach (@ids) { @@ -1433,6 +1574,12 @@ ENDTABLEHEADFOUR } else { $defbgtwo='"#FFFF99"'; } + if ($defbgthree eq '"#FFBB99"') { + $defbgthree='"#FFBBDD"'; + } else { + $defbgthree='"#FFBB99"'; + } + my $thistitle=''; my %name= (); undef %name; @@ -1487,10 +1634,10 @@ ENDTABLEHEADFOUR } else { undef $firstrow; } - &print_row($r,$_,\%part,\%name,\%symbp,$rid,\%default, \%type,\%display,$defbgone,$defbgtwo, - $parmlev,$uname,$udom,$csec); + $defbgthree,$parmlev,$uname,$udom,$csec, + $cgroup); } } } @@ -1502,6 +1649,7 @@ ENDTABLEHEADFOUR if ($parmlev eq 'map') { my $defbgone = '"E0E099"'; my $defbgtwo = '"FFFF99"'; + my $defbgthree = '"FFBB99"'; my %maplist; @@ -1579,10 +1727,14 @@ ENDMAPONE } else { $r->print("".&mt('all').' '.&mt('users in')." \n"); } - - if ($csec) {$r->print(&mt("Section")." $csec ". - &mt('of')." \n")}; - + if ($cgroup) { + $r->print(&mt("Group")." $cgroup". + " ".&mt('of')." \n"); + $csec = ''; + } elsif ($csec) { + $r->print(&mt("Section")." $csec". + " ".&mt('of')." \n"); + } $r->print("$coursename
"); $r->print("\n"); #---------------------------------------------------------------- print table @@ -1594,8 +1746,8 @@ ENDMAPONE foreach (&keysinorder(\%name,\%keyorder)) { $r->print(''); &print_row($r,$_,\%part,\%name,\%symbp,$mapid,\%default, - \%type,\%display,$defbgone,$defbgtwo, - $parmlev,$uname,$udom,$csec); + \%type,\%display,$defbgone,$defbgtwo,$defbgthree, + $parmlev,$uname,$udom,$csec,$cgroup); } $r->print("
'.&mt('Any User').'". - &mt("in Section/Group")." $csec". + &mt("in Group")." $cgroup
$lt{'aut'}$lt{'type'}'.&mt('general').''.&mt('for Enclosing Map or Folder').''.&mt('for Resource').''.&mt('general').''.&mt('for Enclosing Map or Folder').''.&mt('for Resource').''.&mt('general').''.&mt('for Enclosing Map or Folder').''.&mt('for Resource').'
"); } # end each map @@ -1604,6 +1756,7 @@ ENDMAPONE if ($parmlev eq 'general') { my $defbgone = '"E0E099"'; my $defbgtwo = '"FFFF99"'; + my $defbgthree = '"FFBB99"'; #-------------------------------------------- for each map, gather information my $mapid="0.0"; @@ -1658,6 +1811,7 @@ ENDMAPONE } if ($csec) {$r->print(&mt("Section")." $csec\n")}; + if ($cgroup) {$r->print(&mt("Group")." $csec\n")}; $r->print("\n"); #---------------------------------------------------------------- print table $r->print('

'); @@ -1668,7 +1822,8 @@ ENDMAPONE foreach (&keysinorder(\%name,\%keyorder)) { $r->print(''); &print_row($r,$_,\%part,\%name,\%symbp,$mapid,\%default, - \%type,\%display,$defbgone,$defbgtwo,$parmlev,$uname,$udom,$csec); + \%type,\%display,$defbgone,$defbgtwo,$defbgthree, + $parmlev,$uname,$udom,$csec,$cgroup); } $r->print("
"); } # end of $parmlev eq general @@ -2376,6 +2531,7 @@ ENDOVER $alllevs{'Course Level'}='general'; my $csec=$env{'form.csec'}; + my $cgroup=$env{'form.cgroup'}; my @pscat=&Apache::loncommon::get_env_multiple('form.pscat'); my $pschp=$env{'form.pschp'}; @@ -2390,6 +2546,8 @@ ENDOVER @selected_sections = ('all'); } } + my @selected_groups = + &Apache::loncommon::get_env_multiple('form.Group'); my $pssymb=''; my $parmlev=''; @@ -2417,11 +2575,15 @@ ENDOVER $r->print('
'); &parmmenu($r,\%allparms,\@pscat,\%keyorder); - $r->print(''); + $r->print(''. + '
'.&mt('Parts').''.&mt('Section(s)'). + ''.&mt('Group(s)').'
'); &partmenu($r,\%allparts,\@psprt); - $r->print(''); + $r->print(' '); §ionmenu($r,\@selected_sections); - + $r->print(' '); + &groupmenu($r,\@selected_groups); + $r->print('
'); $r->print('
'); my $sortorder=$env{'form.sortorder'}; @@ -2436,37 +2598,8 @@ ENDOVER %{$listdata}=(); foreach my $cat (@pscat) { - foreach my $section (@selected_sections) { - foreach my $part (@psprt) { - my $rootparmkey=$env{'request.course.id'}; - if (($section ne 'all') && ($section ne 'none') && ($section)) { - $rootparmkey.='.['.$section.']'; - } - if ($parmlev eq 'general') { -# course-level parameter - my $newparmkey=$rootparmkey.'.'.$part.'.'.$cat; - $$listdata{$newparmkey}=1; - $$listdata{$newparmkey.'.type'}=$defkeytype{$cat}; - } elsif ($parmlev eq 'map') { -# map-level parameter - foreach my $mapid (keys %allmaps) { - if (($pschp ne 'all') && ($pschp ne $mapid)) { next; } - my $newparmkey=$rootparmkey.'.'.$allmaps{$mapid}.'___(all).'.$part.'.'.$cat; - $$listdata{$newparmkey}=1; - $$listdata{$newparmkey.'.type'}=$defkeytype{$cat}; - } - } else { -# resource-level parameter - foreach my $rid (@ids) { - my ($map,$resid,$url)=&Apache::lonnet::decode_symb($symbp{$rid}); - if (($pschp ne 'all') && ($allmaps{$pschp} ne $map)) { next; } - my $newparmkey=$rootparmkey.'.'.$symbp{$rid}.'.'.$part.'.'.$cat; - $$listdata{$newparmkey}=1; - $$listdata{$newparmkey.'.type'}=$defkeytype{$cat}; - } - } - } - } + &secgroup_lister($cat,$pschp,$parmlev,$listdata,\@psprt,\@selected_sections,\%defkeytype,\%allmaps,\@ids,\%symbp); + &secgroup_lister($cat,$pschp,$parmlev,$listdata,\@psprt,\@selected_groups,\%defkeytype,\%allmaps,\@ids,\%symbp); } if (($env{'form.store'}) || ($env{'form.dis'})) { @@ -2486,6 +2619,41 @@ ENDOVER ''); } +sub secgroup_lister { + my ($cat,$pschp,$parmlev,$listdata,$psprt,$selections,$defkeytype,$allmaps,$ids,$symbp) = @_; + foreach my $item (@{$selections}) { + foreach my $part (@{$psprt}) { + my $rootparmkey=$env{'request.course.id'}; + if (($item ne 'all') && ($item ne 'none') && ($item)) { + $rootparmkey.='.['.$item.']'; + } + if ($parmlev eq 'general') { +# course-level parameter + my $newparmkey=$rootparmkey.'.'.$part.'.'.$cat; + $$listdata{$newparmkey}=1; + $$listdata{$newparmkey.'.type'}=$$defkeytype{$cat}; + } elsif ($parmlev eq 'map') { +# map-level parameter + foreach my $mapid (keys %{$allmaps}) { + if (($pschp ne 'all') && ($pschp ne $mapid)) { next; } + my $newparmkey=$rootparmkey.'.'.$$allmaps{$mapid}.'___(all).'.$part.'.'.$cat; + $$listdata{$newparmkey}=1; + $$listdata{$newparmkey.'.type'}=$$defkeytype{$cat}; + } + } else { +# resource-level parameter + foreach my $rid (@{$ids}) { + my ($map,$resid,$url)=&Apache::lonnet::decode_symb($$symbp{$rid}); + if (($pschp ne 'all') && ($$allmaps{$pschp} ne $map)) { next; } + my $newparmkey=$rootparmkey.'.'.$$symbp{$rid}.'.'.$part.'.'.$cat; + $$listdata{$newparmkey}=1; + $$listdata{$newparmkey.'.type'}=$$defkeytype{$cat}; + } + } + } + } +} + sub overview { my $r=shift; my $bodytag=&Apache::loncommon::bodytag('Modify Parameters');