--- loncom/interface/lonparmset.pm 2016/03/02 14:14:06 1.556 +++ 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.556 2016/03/02 14:14:06 raeburn Exp $ +# $Id: lonparmset.pm,v 1.558 2016/03/15 14:25:26 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -759,7 +759,6 @@ sub storeparm_by_symb_inner { &Apache::lonnet::expirespread('','','studentcalc'); if (($snum==13) || ($snum==9) || ($snum==5)) { &Apache::lonnet::expirespread('','','assesscalc',$symb); -#FIXME } elsif (($snum==14) || ($snum==10) || ($snum==6)) { &Apache::lonnet::expirespread('','','assesscalc',$map); } else { @@ -825,7 +824,7 @@ sub valout { } } else { if ($type eq 'date_interval') { - my ($totalsecs,$donebutton) = split(/_/,$value); + my ($totalsecs,$donebutton,$proctor,$secretkey) = split(/_/,$value); my ($sec,$min,$hour,$mday,$mon,$year)=gmtime($totalsecs); my @timer; $year=$year-70; @@ -860,7 +859,11 @@ sub valout { } $result.=join(", ",@timer); if ($donebutton eq 'done') { - $result .= ' '.&mt('+ "done"'); + if ($secretkey) { + $result .= ' '.&mt('+ "done" with proctor key: [_1]',$secretkey); + } else { + $result .= ' '.&mt('+ "done"'); + } } } elsif (&isdateparm($type)) { $result = &Apache::lonlocal::locallocaltime($value). @@ -1126,6 +1129,31 @@ sub ipacc_boxes_js { END } +sub done_proctor_js { + return <<"END"; +function toggleSecret(form,radio,key) { + var radios = form[radio+key]; + if (radios.length) { + for (var i=0; iprint('
'.&oldversion_warning($name,$data, - $chostname,$cmajor, - $cminor,$needsrelease)); - next; + undef($namematch); + } else { + my $currneeded; + if ($needsrelease) { + $currneeded = $needsrelease; + } + $needsrelease = + $Apache::lonnet::needsrelease{"parameter::::$namematch"}; + if (($needsrelease) && (($currneeded eq '') || ($needsrelease < $currneeded))) { + unless ($got_chostname) { + ($chostname,$cmajor,$cminor) = ¶meter_release_vars(); + $got_chostname = 1; + } + $needsnewer = ¶meter_releasecheck(undef,$valchk,$valmatch,$namematch, + $needsrelease,$cmajor,$cminor); + } else { + undef($namematch); + } } } + if ($needsnewer) { + $r->print('
'.&oldversion_warning($name,$namematch,$data, + $chostname,$cmajor, + $cminor,$needsrelease)); + next; + } } if (defined($data) and $$olddata{$thiskey} ne $data) { if ($tuname) { @@ -3549,8 +3630,11 @@ sub get_date_interval_from_form { $seconds += $env{'form.'.$name.'_'.$key} * $factor; } } - if (($key =~ /\.interval$/) && ($env{'form.done_'.$key} eq '_done')) { + if (($key =~ /\.interval$/) && (($env{'form.done_'.$key} eq '_done') || ($env{'form.done_'.$key} eq '_done_proctor'))) { $seconds .= $env{'form.done_'.$key}; + if ($env{'form.done_'.$key.'_proctorkey'}) { + $seconds .= '_'.$env{'form.done_'.$key.'_proctorkey'}; + } } return $seconds; } @@ -3735,7 +3819,7 @@ sub string_selector { ($chostname,$cmajor,$cminor)=¶meter_release_vars(); $got_chostname = 1; } - my $needsnewer=¶meter_releasecheck($name,$parmval,$parmmatch, + my $needsnewer=¶meter_releasecheck($name,$parmval,$parmmatch,undef, $needsrelease,$cmajor,$cminor); if ($needsnewer) { if ($parmmatch ne '') { @@ -3851,12 +3935,14 @@ my %intervals = ( 'date_interval' => [[ 'done', 'Yes' ], + [ 'done_proctor', 'Yes, with proctor key'], [ '', 'No' ]], ); my %intervalmatches = ( 'date_interval' - => [['done','\d+_done$'],], + => [['done','\d+_done$'], + ['done_proctor','\d+_done_proctor_']], ); my %intervaltypes = ( @@ -3914,7 +4000,7 @@ sub date_interval_selector { ($chostname,$cmajor,$cminor)=¶meter_release_vars(); $got_chostname = 1; } - my $needsnewer=¶meter_releasecheck($name,$parmval,$parmmatch, + my $needsnewer=¶meter_releasecheck($name,$parmval,$parmmatch,undef, $needsrelease,$cmajor,$cminor); if ($needsnewer) { if ($parmmatch ne '') { @@ -3944,16 +4030,29 @@ sub date_interval_selector { if ($name eq 'interval') { unless ($skipval{'done'}) { my $checkedon = ''; + my $checkedproc = ''; + my $currproctorkey = ''; + my $currprocdisplay = 'hidden'; my $checkedoff = ' checked="checked"'; if ($currval =~ /^(\d+)_done$/) { $checkedon = ' checked="checked"'; $checkedoff = ''; + } elsif ($currval =~ /^(?:\d+)_done_proctor_(.+)$/) { + $currproctorkey = $1; + $checkedproc = ' checked="checked"'; + $checkedoff = ''; + $currprocdisplay = 'text'; } - $result .= ''.(' ' x 3).'('.&mt('Include "done" button'). - ''. - ')'; + my $onclick = ' onclick="toggleSecret(this.form,'."'done_','$thiskey'".');"'; + $result .= '
'.&mt('Include "done" button'). + ''.(' 'x2). + ''.(' 'x2). + ''. + ''; } } unless ($readonly) { @@ -3963,7 +4062,24 @@ sub date_interval_selector { } sub oldversion_warning { - my ($name,$value,$chostname,$cmajor,$cminor,$needsrelease) = @_; + my ($name,$namematch,$value,$chostname,$cmajor,$cminor,$needsrelease) = @_; + my $standard_name = &standard_parameter_names($name); + if ($namematch) { + my $level = &standard_parameter_levels($namematch); + my $msg = ''; + if ($level) { + $msg = &mt('[_1] was [_2]not[_3] set at the level of: [_4].', + $standard_name,'','','"'.$level.'"'); + } else { + $msg = &mt('[_1] was [_2]not[_3] set.', + $standard_name,'',''); + } + return '

'.$msg.'
'. + &mt('LON-CAPA version ([_1]) installed on home server ([_2]) does not meet version requirements ([_3] or newer).', + $cmajor.'.'.$cminor,$chostname, + $needsrelease). + '

'; + } my $desc; my $stringtype = &get_stringtype($name); if ($stringtype ne '') { @@ -4008,14 +4124,13 @@ sub oldversion_warning { } } } - 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). - '

'; + &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). + '

'; } } @@ -4076,6 +4191,7 @@ sub newoverview { &toggleparmtextbox_js()."\n". &validateparms_js()."\n". &ipacc_boxes_js()."\n". + &done_proctor_js()."\n". '// ]]> '; @@ -4275,6 +4391,7 @@ sub overview { &toggleparmtextbox_js()."\n". &validateparms_js()."\n". &ipacc_boxes_js()."\n". + &done_proctor_js()."\n". '// ]]>'."\n". ''."\n"; &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=setoverview', @@ -5177,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'}; @@ -5472,16 +5603,20 @@ sub parameter_release_vars { } sub parameter_releasecheck { - my ($name,$value,$valmatch,$needsrelease,$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; - } elsif ($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 ($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}); } return $needsnewer; }