--- loncom/interface/lonparmset.pm 2013/06/27 18:12:22 1.534 +++ loncom/interface/lonparmset.pm 2016/03/15 14:25:26 1.558 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to set parameters for assessments # -# $Id: lonparmset.pm,v 1.534 2013/06/27 18:12:22 raeburn Exp $ +# $Id: lonparmset.pm,v 1.558 2016/03/15 14:25:26 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -46,8 +46,6 @@ This module sets coursewide and assessme =over -=pod - =item parmval() Figure out a cascading parameter. @@ -56,21 +54,25 @@ 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 14 possible levels +Returns: A list, the first item is the index into the remaining list of items of parm values that is the active one, the list consists of parm values at the 18 possible levels -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 +18 - General Course +17 - Map or Folder level in course (recursive) +16 - Map or Folder level in course (non-recursive) +15 - resource default +14 - map default +13 - resource level in course +12 - General for section +11 - Map or Folder level for section (recursive) +10 - Map or Folder level for section (non-recursive) +9 - resource level in section +8 - General for group +7 - Map or Folder level for group (recursive) +6 - Map or Folder level for group (non-recursive) +5 - resource level in group +4 - General for specific student +3 - Map or Folder level for specific student (recursive) +2 - Map or Folder level for specific student (non-recursive) 1 - resource level for specific student =item parmval_by_symb() @@ -139,16 +141,22 @@ javascript function 'pjump'. extractResourceInformation extracts lots of information about all of the the course's resources into a variety of hashes. -Input: See list below: +Input: See list below + +=over 4 =item * B : Current username =item * B : Domain of current user. -=item * b : Course + +=back Outputs: See list below: +=over 4 + =item * B (out) : An array that will contain all of the ids in the course. =item * B(out) : hash, id->type, where "type" contains the extension of the file, thus, I. @@ -173,6 +181,8 @@ Outputs: See list below: =item * B +=back + =item isdateparm() =item parmmenu() @@ -210,6 +220,8 @@ Returns: nothing Variables used (guessed by Jeremy): +=over + =item * B: ParameterS CATegories? ends up a list of the types of parameters that exist, e.g., tol, weight, acc, opendate, duedate, answerdate, sig, maxtries, type. =item * B: ParameterS PaRTs? a list of the parts of a problem that we are displaying? Used to display only selected parts? @@ -222,6 +234,8 @@ Variables used (guessed by Jeremy): When storing information, store as part 0 When requesting information, request from full part +=back + =item tablestart() =item tableend() @@ -288,7 +302,6 @@ Set portfolio metadata Main handler. Calls &assessparms subroutine. - =back =cut @@ -360,84 +373,106 @@ sub parmval_by_symb { $map = &Apache::lonnet::deversion($map); my $symbparm=$symb.'.'.$what; + my $recurseparm=$map.'___(rec).'.$what; my $mapparm=$map.'___(all).'.$what; my $grplevel=$env{'request.course.id'}.'.['.$cgroup.'].'.$what; my $grplevelr=$env{'request.course.id'}.'.['.$cgroup.'].'.$symbparm; + my $grpleveli=$env{'request.course.id'}.'.['.$cgroup.'].'.$recurseparm; 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 $secleveli=$env{'request.course.id'}.'.['.$csec.'].'.$recurseparm; my $seclevelm=$env{'request.course.id'}.'.['.$csec.'].'.$mapparm; my $courselevel=$env{'request.course.id'}.'.'.$what; my $courselevelr=$env{'request.course.id'}.'.'.$symbparm; + my $courseleveli=$env{'request.course.id'}.'.'.$recurseparm; my $courselevelm=$env{'request.course.id'}.'.'.$mapparm; # --------------------------------------------------------- first, check course if (defined($$courseopt{$courselevel})) { - $outpar[14]=$$courseopt{$courselevel}; - $result=14; + $outpar[18]=$$courseopt{$courselevel}; + $result=18; + } + + if (defined($$courseopt{$courseleveli})) { + $outpar[17]=$$courseopt{$courseleveli}; + $result=17; } if (defined($$courseopt{$courselevelm})) { - $outpar[13]=$$courseopt{$courselevelm}; - $result=13; + $outpar[16]=$$courseopt{$courselevelm}; + $result=16; } # ------------------------------------------------------- second, check default - if (defined($def)) { $outpar[12]=$def; $result=12; } + if (defined($def)) { $outpar[15]=$def; $result=15; } # ------------------------------------------------------ third, check map parms + my $thisparm=&parmhash($symbparm); - if (defined($thisparm)) { $outpar[11]=$thisparm; $result=11; } + if (defined($thisparm)) { $outpar[14]=$thisparm; $result=14; } if (defined($$courseopt{$courselevelr})) { - $outpar[10]=$$courseopt{$courselevelr}; - $result=10; + $outpar[13]=$$courseopt{$courselevelr}; + $result=13; } # ------------------------------------------------------ fourth, back to course if ($csec ne '') { if (defined($$courseopt{$seclevel})) { - $outpar[9]=$$courseopt{$seclevel}; - $result=9; - } + $outpar[12]=$$courseopt{$seclevel}; + $result=12; + } + if (defined($$courseopt{$secleveli})) { + $outpar[11]=$$courseopt{$secleveli}; + $result=11; + } if (defined($$courseopt{$seclevelm})) { - $outpar[8]=$$courseopt{$seclevelm}; - $result=8; - } - + $outpar[10]=$$courseopt{$seclevelm}; + $result=10; + } if (defined($$courseopt{$seclevelr})) { - $outpar[7]=$$courseopt{$seclevelr}; - $result=7; - } + $outpar[9]=$$courseopt{$seclevelr}; + $result=9; + } } # ------------------------------------------------------ fifth, check course group if ($cgroup ne '') { if (defined($$courseopt{$grplevel})) { - $outpar[6]=$$courseopt{$grplevel}; - $result=6; + $outpar[8]=$$courseopt{$grplevel}; + $result=8; + } + if (defined($$courseopt{$grpleveli})) { + $outpar[7]=$$courseopt{$grpleveli}; + $result=7; } if (defined($$courseopt{$grplevelm})) { - $outpar[5]=$$courseopt{$grplevelm}; - $result=5; + $outpar[6]=$$courseopt{$grplevelm}; + $result=6; } if (defined($$courseopt{$grplevelr})) { - $outpar[4]=$$courseopt{$grplevelr}; - $result=4; + $outpar[5]=$$courseopt{$grplevelr}; + $result=5; } } -# ---------------------------------------------------------- fifth, check user +# ---------------------------------------------------------- sixth, check user if ($uname ne '') { if (defined($$useropt{$courselevel})) { - $outpar[3]=$$useropt{$courselevel}; + $outpar[4]=$$useropt{$courselevel}; + $result=4; + } + + if (defined($$useropt{$courseleveli})) { + $outpar[3]=$$useropt{$courseleveli}; $result=3; } @@ -677,30 +712,37 @@ sub storeparm_by_symb_inner { $map = &Apache::lonnet::deversion($map); my $symbparm=$symb.'.'.$spnam; + my $recurseparm=$map.'___(rec).'.$spnam; my $mapparm=$map.'___(all).'.$spnam; my $grplevel=$env{'request.course.id'}.'.['.$cgroup.'].'.$spnam; my $grplevelr=$env{'request.course.id'}.'.['.$cgroup.'].'.$symbparm; + my $grpleveli=$env{'request.course.id'}.'.['.$cgroup.'].'.$recurseparm; 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 $secleveli=$env{'request.course.id'}.'.['.$csec.'].'.$recurseparm; my $seclevelm=$env{'request.course.id'}.'.['.$csec.'].'.$mapparm; my $courselevel=$env{'request.course.id'}.'.'.$spnam; my $courselevelr=$env{'request.course.id'}.'.'.$symbparm; + my $courseleveli=$env{'request.course.id'}.'.'.$recurseparm; my $courselevelm=$env{'request.course.id'}.'.'.$mapparm; my $storeunder=''; - 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; } + if (($snum==18) || ($snum==4)) { $storeunder=$courselevel; } + if (($snum==17) || ($snum==3)) { $storeunder=$courseleveli; } + if (($snum==16) || ($snum==2)) { $storeunder=$courselevelm; } + if (($snum==13) || ($snum==1)) { $storeunder=$courselevelr; } + if ($snum==12) { $storeunder=$seclevel; } + if ($snum==11) { $storeunder=$secleveli; } + if ($snum==10) { $storeunder=$seclevelm; } + if ($snum==9) { $storeunder=$seclevelr; } + if ($snum==8) { $storeunder=$grplevel; } + if ($snum==7) { $storeunder=$grpleveli; } + if ($snum==6) { $storeunder=$grplevelm; } + if ($snum==5) { $storeunder=$grplevelr; } my $delete; @@ -708,16 +750,16 @@ sub storeparm_by_symb_inner { my %storecontent = ($storeunder => $nval, $storeunder.'.type' => $ntype); my $reply=''; - if ($snum>3) { + if ($snum>4) { # ---------------------------------------------------------------- Store Course # my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; # Expire sheets &Apache::lonnet::expirespread('','','studentcalc'); - if (($snum==10) || ($snum==7) || ($snum==4)) { + if (($snum==13) || ($snum==9) || ($snum==5)) { &Apache::lonnet::expirespread('','','assesscalc',$symb); - } elsif (($snum==11) || ($snum==8) || ($snum==5)) { + } elsif (($snum==14) || ($snum==10) || ($snum==6)) { &Apache::lonnet::expirespread('','','assesscalc',$map); } else { &Apache::lonnet::expirespread('','','assesscalc'); @@ -768,7 +810,7 @@ sub storeparm_by_symb_inner { sub valout { - my ($value,$type,$editable)=@_; + my ($value,$type,$name,$editable)=@_; my $result = ''; # Values of zero are valid. if (! $value && $value ne '0') { @@ -776,13 +818,14 @@ sub valout { $result = ''.&mt('Change').''; + .' title="'.&mt('Change').'" style="border:0;" />'; } else { $result=' '; } } else { if ($type eq 'date_interval') { - my ($sec,$min,$hour,$mday,$mon,$year)=gmtime($value); + my ($totalsecs,$donebutton,$proctor,$secretkey) = split(/_/,$value); + my ($sec,$min,$hour,$mday,$mon,$year)=gmtime($totalsecs); my @timer; $year=$year-70; $mday--; @@ -815,6 +858,13 @@ sub valout { push(@timer,&mt('[quant,_1,sec]',0)); } $result.=join(", ",@timer); + if ($donebutton eq 'done') { + if ($secretkey) { + $result .= ' '.&mt('+ "done" with proctor key: [_1]',$secretkey); + } else { + $result .= ' '.&mt('+ "done"'); + } + } } elsif (&isdateparm($type)) { $result = &Apache::lonlocal::locallocaltime($value). &date_sanity_info($value); @@ -841,7 +891,7 @@ sub plink { my ($parmname)=((split(/\&/,$marker))[1]=~/\_([^\_]+)$/); my ($hour,$min,$sec,$val)=&preset_defaults($parmname); unless (defined($winvalue)) { $winvalue=$val; } - my $valout = &valout($value,$type,1); + my $valout = &valout($value,$type,$parmname,1); my $unencmarker = $marker; foreach my $item (\$type, \$dis, \$winvalue, \$marker, \$return, \$call, \$hour, \$min, \$sec) { @@ -923,6 +973,187 @@ function showHide_courseContent() { COURSECONTENTSCRIPT } +sub toggleparmtextbox_js { + return <<"ENDSCRIPT"; + +if (!document.getElementsByClassName) { + function getElementsByClassName(node, classname) { + var a = []; + var re = new RegExp('(^| )'+classname+'( |$)'); + var els = node.getElementsByTagName("*"); + for(var i=0,j=els.length; i$remove'); + }); + + \$(wrapper).delegate(".LC_remove_ipacc","click", function(e){ + e.preventDefault(); \$(this).closest("div").remove(); + }) +}); + + +END +} + +sub done_proctor_js { + return <<"END"; +function toggleSecret(form,radio,key) { + var radios = form[radio+key]; + if (radios.length) { + for (var i=0; i0;$i--) { + for (my $i=18;$i>0;$i--) { if ($typeoutpar[$i]) { $cascadetype=$typeoutpar[$i]; } else { @@ -1012,30 +1244,32 @@ sub print_row { my $thismarker=$which; $thismarker=~s/^parameter\_//; my $mprefix=$rid.'&'.$thismarker.'&'; - my $effective_parm = &valout($outpar[$result],$typeoutpar[$result]); + my $effective_parm = &valout($outpar[$result],$typeoutpar[$result],$thismarker); my ($othergrp,$grp_parm,$controlgrp); if ($parmlev eq 'general') { - if ($uname) { - &print_td($r,3,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); + &print_td($r,4,$defbgone,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display); } elsif ($cgroup) { - &print_td($r,6,$defbgthree,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); + &print_td($r,8,$defbgthree,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display,$noeditgrp); } elsif ($csec) { - &print_td($r,9,$defbgtwo,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); + &print_td($r,12,$defbgtwo,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display); } else { - &print_td($r,14,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); + &print_td($r,18,$defbgone,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display); } } elsif ($parmlev eq 'map') { - if ($uname) { - &print_td($r,2,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); + &print_td($r,3,$defbgone,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display); + &print_td($r,2,$defbgone,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display); } elsif ($cgroup) { - &print_td($r,5,$defbgthree,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); + &print_td($r,7,$defbgthree,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display,$noeditgrp); + &print_td($r,6,$defbgthree,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display,$noeditgrp); } elsif ($csec) { - &print_td($r,8,$defbgtwo,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); + &print_td($r,11,$defbgtwo,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display); + &print_td($r,10,$defbgtwo,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display); } else { - &print_td($r,13,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); + &print_td($r,17,$defbgone,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display); + &print_td($r,16,$defbgone,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display); } } else { if ($uname) { @@ -1044,7 +1278,7 @@ sub print_row { ($coursereply,$othergrp,$grp_parm,$controlgrp) = &print_usergroups($r,$$part{$which}.'.'.$$name{$which}, $rid,$cgroup,$defbgone,$usersgroups,$result,$courseopt); - if ($coursereply && $result > 3) { + if ($coursereply && $result > 4) { if (defined($controlgrp)) { if ($cgroup ne $controlgrp) { $effective_parm = $grp_parm; @@ -1055,33 +1289,36 @@ sub print_row { } } - &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); - - if ($csec) { - &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); - } + &print_td($r,18,$defbgone,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display); + &print_td($r,17,$defbgone,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display); + &print_td($r,16,$defbgone,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display); + &print_td($r,15,'#FFDDDD',$result,\@outpar,$mprefix,$which,\@typeoutpar,$display); + &print_td($r,14,'#FFDDDD',$result,\@outpar,$mprefix,$which,\@typeoutpar,$display); + &print_td($r,13,$defbgone,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display); + + if ($csec) { + &print_td($r,12,$defbgtwo,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display); + &print_td($r,11,$defbgtwo,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display); + &print_td($r,10,$defbgtwo,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display); + &print_td($r,9,$defbgtwo,$result,\@outpar,$mprefix,$which,\@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); + &print_td($r,8,$defbgthree,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display,$noeditgrp); + &print_td($r,7,$defbgthree,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display,$noeditgrp); + &print_td($r,6,$defbgthree,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display,$noeditgrp); + &print_td($r,5,$defbgthree,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display,$noeditgrp); } - if ($uname) { + if ($uname) { if ($othergrp) { $r->print($othergrp); } - &print_td($r,3,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); - &print_td($r,2,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); - &print_td($r,1,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); - } + &print_td($r,4,$defbgone,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display); + &print_td($r,3,$defbgone,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display); + &print_td($r,2,$defbgone,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display); + &print_td($r,1,$defbgone,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display); + } } # end of $parmlev if/else $r->print(''.$effective_parm.''); @@ -1092,7 +1329,7 @@ sub print_row { my $sessionvaltype=$typeoutpar[$result]; if (!defined($sessionvaltype)) { $sessionvaltype=$$defaulttype{$which}; } $r->print(''. - &valout($sessionval,$sessionvaltype).' '. + &valout($sessionval,$sessionvaltype,$$name{$which}).' '. ''); } $r->print(''); @@ -1100,14 +1337,20 @@ sub print_row { } sub print_td { - my ($r,$which,$defbg,$result,$outpar,$mprefix,$value,$typeoutpar,$display)=@_; + my ($r,$which,$defbg,$result,$outpar,$mprefix,$value,$typeoutpar,$display,$noeditgrp)=@_; $r->print(''); my $nolink = 0; - if ($which == 11 || $which == 12) { + if ($which == 14 || $which == 15) { + $nolink = 1; + } elsif (($env{'request.course.sec'} ne '') && ($which > 12)) { $nolink = 1; + } elsif ($which == 5 || $which == 6 || $which == 7 || $which == 8) { + if ($noeditgrp) { + $nolink = 1; + } } elsif ($mprefix =~ /availablestudent\&$/) { - if ($which > 3) { + if ($which > 4) { $nolink = 1; } } elsif ($mprefix =~ /examcode\&$/) { @@ -1116,7 +1359,7 @@ sub print_td { } } if ($nolink) { - $r->print(&valout($$outpar[$which],$$typeoutpar[$which])); + $r->print(&valout($$outpar[$which],$$typeoutpar[$which],$mprefix)); } else { $r->print(&plink($$typeoutpar[$which], $$display{$value},$$outpar[$which], @@ -1132,18 +1375,19 @@ sub print_usergroups { my $symb = &symbcache($rid); my $symbparm=$symb.'.'.$what; my $map=(&Apache::lonnet::decode_symb($symb))[0]; + my $recurseparm=$map.'___(rec).'.$what; my $mapparm=$map.'___(all).'.$what; my ($coursereply,$resultitem,$resultgroup,$resultlevel,$resulttype) = - &parm_control_group($courseid,$usersgroups,$symbparm,$mapparm,$what, - $courseopt); + &parm_control_group($courseid,$usersgroups,$symbparm,$mapparm, + $recurseparm,$what,$courseopt); my $bgcolor = $defbg; my $grp_parm; if (($coursereply) && ($cgroup ne $resultgroup)) { if ($result > 3) { $bgcolor = '#AAFFAA'; - $grp_parm = &valout($coursereply,$resulttype); + $grp_parm = &valout($coursereply,$resulttype,$what); } - $grp_parm = &valout($coursereply,$resulttype); + $grp_parm = &valout($coursereply,$resulttype,$what); $output = ''; if ($resultgroup && $resultlevel) { $output .= ''.$resultgroup.' ('.$resultlevel.'): '.$grp_parm; @@ -1158,11 +1402,11 @@ sub print_usergroups { } sub parm_control_group { - my ($courseid,$usersgroups,$symbparm,$mapparm,$what,$courseopt) = @_; + my ($courseid,$usersgroups,$symbparm,$mapparm,$recurseparm,$what,$courseopt) = @_; my ($coursereply,$resultitem,$resultgroup,$resultlevel,$resulttype); my $grpfound = 0; - my @levels = ($symbparm,$mapparm,$what); - my @levelnames = ('resource','map/folder','general'); + my @levels = ($symbparm,$mapparm,$recurseparm,$what); + my @levelnames = ('resource','map/folder','recursive','general'); foreach my $group (@{$usersgroups}) { if ($grpfound) { last; } for (my $i=0; $i<@levels; $i++) { @@ -1272,7 +1516,9 @@ sub extractResourceInformation { $$maptitles{$mapid}=&Apache::lonnet::gettitle($$mapp{$id}); } $$maptitles{$$mapp{$id}}=$$maptitles{$mapid}; - $$symbp{$mapid}=$$mapp{$id}.'___(all)'; + $$symbp{$mapid}=$$mapp{$id}.'___(all)'; # Added in rev. 1.57, but seems not to be used. + # Lines 1038 and 1114 which use $symbp{$mapid} + # are commented out in rev. 1.57 } else { $$mapp{$id} = $$mapp{$mapid}; } @@ -1401,8 +1647,8 @@ sub lookUpTableParameter { 'contentopen' => 'time_settings', 'contentclose' => 'time_settings', 'discussend' => 'time_settings', - 'printopendate' => 'time_settings', - 'printclosedate' => 'time_settings', + 'printstartdate' => 'time_settings', + 'printenddate' => 'time_settings', 'weight' => 'grading', 'handgrade' => 'grading', 'maxtries' => 'tries', @@ -1489,9 +1735,7 @@ sub category_order { sub parmboxes { my ($r,$allparms,$pscat,$keyorder)=@_; - my $tempkey; - my $tempparameter; - my %categories = &categories; + my %categories = &categories(); my %category_order = &category_order(); my %categoryList = ( 'time_settings' => [], @@ -1506,37 +1750,29 @@ sub parmboxes { 'misc' => [], ); - foreach $tempparameter (keys %$allparms) { + foreach my $tempparameter (keys(%$allparms)) { &whatIsMyCategory($tempparameter, \%categoryList); } #part to print the parm-list - $r->print('
'."\n"); - - #Print parameters - for my $key (sort { $category_order{$a} <=> $category_order{$b} } keys %categoryList) { - if(@{$categoryList{$key}} == 0) { - next; - } else { - $r->print('
' - .'

' - .&mt($categories{$key}) - .'

'."\n"); - foreach $tempkey (&keysindisplayorderCategory($categoryList{$key},$keyorder)) { - $r->print('' - .'
'."\n"); + foreach my $key (sort { $category_order{$a} <=> $category_order{$b} } keys(%categoryList)) { + next if (@{$categoryList{$key}} == 0); + next if ($key eq ''); + $r->print('
' + .'

'.&mt($categories{$key}).'

'."\n"); + foreach my $tempkey (&keysindisplayorderCategory($categoryList{$key},$keyorder)) { + $r->print('' + .'
\n"); + $r->print(' />'.($$allparms{$tempkey}=~/\S/ ? $$allparms{$tempkey} + : $tempkey) + .'
'."\n"); } + $r->print('
'); } - - $r->print("
\n"); + $r->print("\n"); } # # This function offers some links on the parameter section to get with one click a group a parameters @@ -1601,7 +1837,7 @@ sub partmenu { } sub usermenu { - my ($r,$uname,$id,$udom,$csec,$cgroup,$parmlev,$usersgroups)=@_; + my ($r,$uname,$id,$udom,$csec,$cgroup,$parmlev,$usersgroups,$pssymb)=@_; my $chooseopt=&Apache::loncommon::select_dom_form($udom,'udom').' '. &Apache::loncommon::selectstudent_link('parmform','uname','udom'); my $selscript=&Apache::loncommon::studentbrowser_javascript(); @@ -1610,18 +1846,29 @@ sub usermenu { my %sectionhash = &Apache::loncommon::get_sections(); my $groups; - my %grouphash = &Apache::longroup::coursegroups(); + my %grouphash; + if (($pssymb) || &Apache::lonnet::allowed('mdg',$env{'request.course.id'})) { + %grouphash = &Apache::longroup::coursegroups(); + } elsif ($env{'request.course.groups'} ne '') { + map { $grouphash{$_} = 1; } split(/,/,$env{'request.course.groups'}); + } my $g_s_header=''; my $g_s_footer=''; - if (%sectionhash) { + my $currsec = $env{'request.course.sec'}; + if ($currsec) { + $sections=&mt('Section:').' '.$currsec; + if (%grouphash) { + $sections .= ';'.(' ' x2); + } + } elsif (%sectionhash && $currsec eq '') { $sections=&mt('Section:').' '; } - if (%sectionhash && %grouphash && $parmlev ne 'full') { + if (%sectionhash && %grouphash && $parmlev ne 'full' && $currsec eq '') { $sections .= ' '.&mt('or').' '; $sections .= qq| '; + my $start_page = &Apache::loncommon::start_page('Set Parameters',$js, {'add_entries' => \%loaditems,}); my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs('Overview'); $r->print($start_page.$breadcrumbs); &startSettingsScreen($r,'parmset',$crstype); $r->print(< +
ENDOVER my @ids=(); my %typep=(); @@ -3381,6 +4239,9 @@ ENDOVER @selected_sections = ('all'); } } + if ($env{'request.course.sec'} ne '') { + @selected_sections = ($env{'request.course.sec'}); + } my @selected_groups = &Apache::loncommon::get_env_multiple('form.Group'); @@ -3420,16 +4281,26 @@ ENDOVER &displaymenu($r,\%allparms,\@pscat,\%keyorder); $r->print(&Apache::lonhtmlcommon::start_pick_box()); $r->print(&Apache::lonhtmlcommon::row_title(&mt('Select Parts to View'))); + my $sectionselector = §ionmenu(\@selected_sections); + my $groupselector = &groupmenu(\@selected_groups); $r->print(''. - ''); + if ($sectionselector) { + $r->print(''); + } + if ($groupselector) { + $r->print(''); + } + $r->print('
'.&mt('Parts').''.&mt('Section(s)'). - ''.&mt('Group(s)').'
'); + '
'.&mt('Parts').''.&mt('Section(s)').''.&mt('Group(s)').'
'); &partmenu($r,\%allparts,\@psprt); - $r->print(''); - §ionmenu($r,\@selected_sections); - $r->print(''); - &groupmenu($r,\@selected_groups); - $r->print('
'); - #$r->print(''); + $r->print(''); + if ($sectionselector) { + $r->print(''.$sectionselector.''); + } + if ($groupselector) { + $r->print(''.$groupselector.''); + } + $r->print(''); $r->print(&Apache::lonhtmlcommon::row_closure(1)); $r->print(&Apache::lonhtmlcommon::end_pick_box()); $r->print(''); @@ -3463,7 +4334,7 @@ ENDOVER # List data - &listdata($r,$resourcedata,$listdata,$sortorder); + &listdata($r,$resourcedata,$listdata,$sortorder,'newoverview'); } $r->print(&tableend(). ((($env{'form.store'}) || ($env{'form.dis'}))?'

':''). @@ -3487,11 +4358,14 @@ sub secgroup_lister { $$listdata{$newparmkey.'.type'}=$$defkeytype{$cat}; } elsif ($parmlev eq 'map') { # map-level parameter - foreach my $mapid (keys %{$allmaps}) { + 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}; + $newparmkey=$rootparmkey.'.'.$$allmaps{$mapid}.'___(rec).'.$part.'.'.$cat; + $$listdata{$newparmkey}=1; + $$listdata{$newparmkey.'.type'}=$$defkeytype{$cat}; } } else { # resource-level parameter @@ -3512,14 +4386,25 @@ sub overview { my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'}; my $crs = $env{'course.'.$env{'request.course.id'}.'.num'}; my $crstype = $env{'course.'.$env{'request.course.id'}.'.type'}; - + my $js = ''."\n"; &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=setoverview', text=>"Overview Mode"}); - my $start_page=&Apache::loncommon::start_page('Modify Parameters'); + my %loaditems = ( + 'onload' => "showHideLenient();", + ); + + my $start_page=&Apache::loncommon::start_page('Modify Parameters',$js,{'add_entries' => \%loaditems,}); my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs('Overview'); $r->print($start_page.$breadcrumbs); &startSettingsScreen($r,'parmset',$crstype); - $r->print(''); + $r->print(''); # Store modified @@ -3527,7 +4412,7 @@ sub overview { # Read modified data - my $resourcedata=&readdata($crs,$dom); + my ($resourcedata,$classlist)=&readdata($crs,$dom); my $sortorder=$env{'form.sortorder'}; @@ -3536,8 +4421,7 @@ sub overview { # List data - my $foundkeys=&listdata($r,$resourcedata,$resourcedata,$sortorder); - + my $foundkeys=&listdata($r,$resourcedata,$resourcedata,$sortorder,'overview',$classlist); $r->print(&tableend().'

'. ($foundkeys?'':''.&mt('There are no parameters.').'').'

'. &Apache::loncommon::end_page()); @@ -3643,12 +4527,11 @@ sub date_shift_one { my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs('Shift'); $r->print($start_page.$breadcrumbs); &startSettingsScreen($r,'parmset',$crstype); - $r->print('
'. + $r->print(''. ''. '
'.&mt('Currently set date:').''. &Apache::lonlocal::locallocaltime($env{'form.timebase'}).'
'.&mt('Shifted date:').''. - &Apache::lonhtmlcommon::dshowerfuck.net -ate_setter('shiftform', + &Apache::lonhtmlcommon::date_setter('shiftform', 'timeshifted', $env{'form.timebase'},, ''). @@ -3672,11 +4555,17 @@ sub date_shift_two { $r->print($start_page.$breadcrumbs); &startSettingsScreen($r,'parmset',$crstype); my $timeshifted=&Apache::lonhtmlcommon::get_date_from_form('timeshifted'); - $r->print(&mt('Shifting all dates such that [_1] becomes [_2]', + $r->print('

'.&mt('Shift Dates').'

'. + '

'.&mt('Shifting all dates such that [_1] becomes [_2]', &Apache::lonlocal::locallocaltime($env{'form.timebase'}), - &Apache::lonlocal::locallocaltime($timeshifted))); + &Apache::lonlocal::locallocaltime($timeshifted)).'

'); my $delta=$timeshifted-$env{'form.timebase'}; &dateshift($delta); + $r->print( + &Apache::lonhtmlcommon::confirm_success(&mt('Done')). + '

'. + &Apache::lonhtmlcommon::actionbox( + [''.&mt('Content and Problem Settings').''])); &endSettingsScreen($r); $r->print(&Apache::loncommon::end_page()); } @@ -3818,7 +4707,9 @@ ENDMAINFORMHEAD }]} ); $r->print(&Apache::lonhtmlcommon::generate_menu(@menu)); + $r->print(''); &endSettingsScreen($r); + $r->print(&Apache::loncommon::end_page()); return; } @@ -3900,7 +4791,7 @@ sub order_meta_fields { my $newpos = $env{'form.newpos'} - 1; my $currentpos = $env{'form.currentpos'} - 1; my @neworder = (); - my @oldorder = split /,/,$env{'course.'.$env{'request.course.id'}.'.metadata.addedorder'}; + my @oldorder = split(/,/,$env{'course.'.$env{'request.course.id'}.'.metadata.addedorder'}); my $i; if ($newpos > $currentpos) { # moving stuff up @@ -3934,10 +4825,10 @@ sub order_meta_fields { } my $fields = &get_added_meta_fieldnames($env{'request.course.id'}); my $ordered_fields; - my @fields_in_order = split /,/,$env{'course.'.$env{'request.course.id'}.'.metadata.addedorder'}; + my @fields_in_order = split(/,/,$env{'course.'.$env{'request.course.id'}.'.metadata.addedorder'}); if (!@fields_in_order) { # no order found, pick sorted order then create metadata.addedorder key. - foreach my $key (sort keys %$fields) { + foreach my $key (sort(keys(%$fields))) { push @fields_in_order, $key; $ordered_fields = join ",", @fields_in_order; } @@ -3949,7 +4840,7 @@ sub order_meta_fields { foreach my $key (@fields_in_order) { $r->print('
'); $r->print('
'); - $r->print(''); for (my $i = 1;$i le $num_fields;$i ++) { if ($i eq $idx) { $r->print(''); @@ -4218,7 +5109,7 @@ sub defaultsetter { } } } - foreach my $key (keys %allparms) { + foreach my $key (keys(%allparms)) { $newrules{$key.'_triggers'}=$triggers{$key}; } &Apache::lonnet::put('parmdefactions',\%newrules,$cdom,$cnum); @@ -4340,9 +5231,15 @@ sub components { } my $realm=''.&mt('All Resources').''; my $realmdescription=&mt('all resources'); - if ($middle=~/^(.+)\_\_\_\(all\)$/) { - $realm=''.&mt('Folder/Map').': '.&Apache::lonnet::gettitle($1).'
('.$1.')
'; - $realmdescription=&mt('folder').' '.&Apache::lonnet::gettitle($1); + if ($middle=~/^(.+)\_\_\_\((all|rec)\)$/) { + my $mapurl = $1; + my $maplevel = $2; + my $leveltitle = &mt('Folder/Map'); + if ($maplevel eq 'rec') { + $leveltitle = &mt('Recursive'); + } + $realm=''.$leveltitle.': '.&Apache::lonnet::gettitle($mapurl).'
('.$mapurl.')
'; + $realmdescription=&mt('folder').' '.&Apache::lonnet::gettitle($mapurl); } elsif ($middle) { my ($map,$id,$url)=&Apache::lonnet::decode_symb($middle); $realm=''.&mt('Resource').': '.&Apache::lonnet::gettitle($middle).'
('.$url.' in '.$map.' id: '.$id.')
'; @@ -4397,6 +5294,20 @@ sub standard_parameter_types { return; } +sub standard_parameter_levels { + my ($name)=@_; + my %levels = ( + 'resourcelevel' => 'a single resource', + 'maplevel' => 'the enclosing map/folder', + 'maplevelrecurse' => 'the enclosing map/folder (recursive into sub-folders)', + 'courselevel' => 'the general (course) level', + ); + if ($levels{$name}) { + return $levels{$name}; + } + return; +} + sub parm_change_log { my ($r)=@_; my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; @@ -4484,6 +5395,13 @@ sub parm_change_log { !exists($parmlog{$id}{'logentry'}{$changed.'.type'})); my ($realm,$section,$parmname,$part,$what,$middle,$uname,$udom,$issection,$realmdescription)= &components($changed,$parmlog{$id}{'uname'},$parmlog{$id}{'udom'},undef,undef,$typeflag); + if ($env{'request.course.sec'} ne '') { + next if (($issection ne '') && ($issection ne $env{'request.course.sec'})); + if ($uname ne '') { + my $stusection = &Apache::lonnet::getsection($uname,$udom,$env{'request.course.id'}); + next if (($stusection ne '-1') && ($stusection ne $env{'request.course.sec'})); + } + } if ($env{'form.displayfilter'} eq 'currentfolder') { if ($folder) { if ($middle!~/^\Q$folder\E/) { next; } @@ -4685,50 +5603,22 @@ sub parameter_release_vars { } sub parameter_releasecheck { - my ($name,$value,$needsrelease,$chostname,$cmajor,$cminor) = @_; + my ($name,$value,$valmatch,$namematch,$needsrelease,$cmajor,$cminor) = @_; my $needsnewer; my ($needsmajor,$needsminor) = split(/\./,$needsrelease); if (($cmajor < $needsmajor) || ($cmajor == $needsmajor && $cminor < $needsminor)) { $needsnewer = 1; - } else { - &Apache::lonnet::update_released_required($Apache::lonnet::needsrelease{'parameter:'.$name.':'.$value}); - } - return $needsnewer; -} - -sub oldversion_warning { - my ($name,$value,$chostname,$cmajor,$cminor,$needsrelease) = @_; - my $desc; - my %stringtypes = ( - type => 'string_questiontype', - lenient => 'string_lenient', - retrypartial => 'string_yesno', - discussvote => 'string_discussvote', - examcode => 'string_examcode', - ); - if (exists($stringtypes{$name})) { - if ($name eq 'examcode') { - - } elsif (ref($strings{$stringtypes{$name}}) eq 'ARRAY') { - foreach my $possibilities (@{ $strings{$stringtypes{$name}} }) { - next unless (ref($possibilities) eq 'ARRAY'); - my ($parmval, $description) = @{ $possibilities }; - if ($parmval eq $value) { - $desc = $description; - last; - } - } + } elsif ($name) { + if ($valmatch) { + &Apache::lonnet::update_released_required($Apache::lonnet::needsrelease{'parameter:'.$name.'::'.$valmatch.':'}); + } elsif ($value) { + &Apache::lonnet::update_released_required($Apache::lonnet::needsrelease{'parameter:'.$name.':'.$value.'::'}); } + } elsif ($namematch) { + &Apache::lonnet::update_released_required($Apache::lonnet::needsrelease{'parameter::::'.$namematch}); } - my $standard_name = &standard_parameter_names($name); - return '

'. - &mt('[_1] was [_2]not[_3] set to [_4].', - $standard_name,'','','"'.$desc.'"').'
'. - &mt('LON-CAPA version ([_1]) installed on home server ([_2]) does not meet version requirements ([_3] or newer).', - $cmajor.'.'.$cminor,$chostname, - $needsrelease). - '

'; + return $needsnewer; } sub handler {