--- loncom/interface/lonparmset.pm 2016/03/02 14:14:06 1.556 +++ loncom/interface/lonparmset.pm 2016/03/04 21:43:15 1.557 @@ -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.557 2016/03/04 21:43:15 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 { @@ -2412,13 +2411,16 @@ sub assessparms { my $totalstored = 0; my $now = time; for (my $i=0;$i<=$#markers;$i++) { - my ($needsrelease,$needsnewer,$name); + my ($needsrelease,$needsnewer,$name,$namematch); if (($env{'request.course.sec'} ne '') && ($markers[$i] =~ /\&(9|10|11|12)$/)) { next if ($csec ne $env{'request.course.sec'}); } if ($markers[$i] =~ /\&(8|7|6|5)$/) { next if ($noeditgrp); - } + } + if ($markers[$i] =~ /\&(17|11|7|3)$/) { + $namematch = 'maplevelrecurse'; + } if ($markers[$i] =~ /^[\d.]+\&0_availablestudent\&(1|2|3|4)$/) { my (@ok_slots,@fail_slots,@del_slots); my $courseopt=&Apache::lonnet::get_courseresdata($cnum,$cdom); @@ -2505,19 +2507,42 @@ sub assessparms { } } $needsrelease = - $Apache::lonnet::needsrelease{"parameter:$name:$val:$valmatch"}; + $Apache::lonnet::needsrelease{"parameter:$name:$val:$valmatch:"}; if ($needsrelease) { unless ($got_chostname) { ($chostname,$cmajor,$cminor) = ¶meter_release_vars(); $got_chostname = 1; } - $needsnewer = ¶meter_releasecheck($name,$val,$valmatch, + $needsnewer = ¶meter_releasecheck($name,$val,$valmatch,undef, $needsrelease, $cmajor,$cminor); } } if ($needsnewer) { - $message .= &oldversion_warning($name,$values[$i],$chostname,$cmajor, + undef($namematch); + } else { + my $currneeded; + if ($needsrelease) { + $currneeded = $needsrelease; + } + if ($namematch) { + $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,undef,undef,$namematch, + $needsrelease, + $cmajor,$cminor); + } else { + undef($namematch); + } + } + } + if ($needsnewer) { + $message .= &oldversion_warning($name,$namematch,$values[$i],$chostname,$cmajor, $cminor,$needsrelease); } else { $message.=&storeparm(split(/\&/,$markers[$i]), @@ -3153,7 +3178,7 @@ sub storedata { $tkey=~s/\.\[useropt\:$tuname\:$tudom\]\./\./; } if ($cmd eq 'set' || $cmd eq 'datepointer' || $cmd eq 'dateinterval') { - my ($data, $typeof, $text, $name, $valchk, $valmatch); + my ($data, $typeof, $text, $name, $valchk, $valmatch, $namematch); if ($cmd eq 'set') { $data=$env{$key}; $valmatch = ''; @@ -3234,24 +3259,51 @@ sub storedata { $typeof=$env{'form.typeof_'.$thiskey}; $text = &mt('Saved modified date for'); } - if ($name ne '') { + if ($thiskey =~ m{\.(?:sequence|page)___\(rec\)}) { + $namematch = 'maplevelrecurse'; + } + if (($name ne '') || ($namematch ne '')) { my ($needsrelease,$needsnewer); - $needsrelease = $Apache::lonnet::needsrelease{"parameter:$name:$valchk:$valmatch"}; - if ($needsrelease) { - unless ($got_chostname) { - ($chostname,$cmajor,$cminor)=¶meter_release_vars(); - $got_chostname = 1; + if ($name ne '') { + $needsrelease = $Apache::lonnet::needsrelease{"parameter:$name:$valchk:$valmatch:"}; + if ($needsrelease) { + unless ($got_chostname) { + ($chostname,$cmajor,$cminor)=¶meter_release_vars(); + $got_chostname = 1; + } + $needsnewer = ¶meter_releasecheck($name,$valchk,$valmatch,undef, + $needsrelease, + $cmajor,$cminor); } - $needsnewer = ¶meter_releasecheck($name,$valchk,$valmatch, - $needsrelease, - $cmajor,$cminor); + } + if ($namematch ne '') { if ($needsnewer) { - $r->print('
'.&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) { @@ -3735,7 +3787,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 '') { @@ -3914,7 +3966,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 '') { @@ -3963,7 +4015,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 +4077,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). + '

'; } } @@ -5177,6 +5245,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 +5554,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; }