--- loncom/interface/lonparmset.pm 2005/02/05 06:21:57 1.182 +++ loncom/interface/lonparmset.pm 2005/05/06 19:00:31 1.192 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to set parameters for assessments # -# $Id: lonparmset.pm,v 1.182 2005/02/05 06:21:57 albertel Exp $ +# $Id: lonparmset.pm,v 1.192 2005/05/06 19:00:31 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -75,12 +75,6 @@ my %keyp; my %maptitles; -my $uname; -my $udom; -my $uhome; -my $csec; -my $coursename; - ################################################## ################################################## @@ -113,7 +107,7 @@ Returns: A list, the first item is the ################################################## ################################################## sub parmval { - my ($what,$id,$def)=@_; + my ($what,$id,$def,$uname,$udom,$csec)=@_; my $result=''; my @outpar=(); # ----------------------------------------------------- Cascading lookup scheme @@ -121,13 +115,13 @@ sub parmval { my $symbparm=$symbp{$id}.'.'.$what; my $mapparm=$mapp{$id}.'___(all).'.$what; - my $seclevel=$ENV{'request.course.id'}.'.['.$csec.'].'.$what; - my $seclevelr=$ENV{'request.course.id'}.'.['.$csec.'].'.$symbparm; - my $seclevelm=$ENV{'request.course.id'}.'.['.$csec.'].'.$mapparm; - - my $courselevel=$ENV{'request.course.id'}.'.'.$what; - my $courselevelr=$ENV{'request.course.id'}.'.'.$symbparm; - my $courselevelm=$ENV{'request.course.id'}.'.'.$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; + + my $courselevel=$env{'request.course.id'}.'.'.$what; + my $courselevelr=$env{'request.course.id'}.'.'.$symbparm; + my $courselevelm=$env{'request.course.id'}.'.'.$mapparm; @@ -195,6 +189,105 @@ sub parmval { return ($result,@outpar); } + +################################################## +################################################## +# +# Store a parameter +# +# Takes +# - resource id +# - name of parameter +# - level +# - new value +# - new type +# - username +# - userdomain + +sub storeparm { + my ($sresid,$spnam,$snum,$nval,$ntype,$uname,$udom,$csec)=@_; + $spnam=~s/\_([^\_]+)$/\.$1/; +# ---------------------------------------------------------- Construct prefixes + + my $symbparm=$symbp{$sresid}.'.'.$spnam; + my $mapparm=$mapp{$sresid}.'___(all).'.$spnam; + + my $seclevel=$env{'request.course.id'}.'.['.$csec.'].'.$spnam; + my $seclevelr=$env{'request.course.id'}.'.['.$csec.'].'.$symbparm; + my $seclevelm=$env{'request.course.id'}.'.['.$csec.'].'.$mapparm; + + my $courselevel=$env{'request.course.id'}.'.'.$spnam; + my $courselevelr=$env{'request.course.id'}.'.'.$symbparm; + 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; } + + my $delete; + if ($nval eq '') { $delete=1;} + my %storecontent = ($storeunder => $nval, + $storeunder.'.type' => $ntype); + my $reply=''; + if ($snum>3) { +# ---------------------------------------------------------------- Store Course +# +# Expire sheets + &Apache::lonnet::expirespread('','','studentcalc'); + if (($snum==7) || ($snum==4)) { + &Apache::lonnet::expirespread('','','assesscalc',$symbp{$sresid}); + } elsif (($snum==8) || ($snum==5)) { + &Apache::lonnet::expirespread('','','assesscalc',$mapp{$sresid}); + } else { + &Apache::lonnet::expirespread('','','assesscalc'); + } +# Store parameter + if ($delete) { + $reply=&Apache::lonnet::del + ('resourcedata',[keys(%storecontent)], + $env{'course.'.$env{'request.course.id'}.'.domain'}, + $env{'course.'.$env{'request.course.id'}.'.num'}); + } else { + $reply=&Apache::lonnet::cput + ('resourcedata',\%storecontent, + $env{'course.'.$env{'request.course.id'}.'.domain'}, + $env{'course.'.$env{'request.course.id'}.'.num'}); + } + } else { +# ------------------------------------------------------------------ Store User +# +# Expire sheets + &Apache::lonnet::expirespread($uname,$udom,'studentcalc'); + if ($snum==1) { + &Apache::lonnet::expirespread + ($uname,$udom,'assesscalc',$symbp{$sresid}); + } elsif ($snum==2) { + &Apache::lonnet::expirespread + ($uname,$udom,'assesscalc',$mapp{$sresid}); + } else { + &Apache::lonnet::expirespread($uname,$udom,'assesscalc'); + } +# Store parameter + if ($delete) { + $reply=&Apache::lonnet::del + ('resourcedata',[keys(%storecontent)],$udom,$uname); + } else { + $reply=&Apache::lonnet::cput + ('resourcedata',\%storecontent,$udom,$uname); + } + &Apache::lonnet::devalidateuserresdata($uname,$udom); + } + + if ($reply=~/^error\:(.*)/) { + return "Write Error: $1"; + } + return ''; +} + ################################################## ################################################## @@ -275,9 +368,9 @@ sub plink { my $winvalue=$value; unless ($winvalue) { if ($type=~/^date/) { - $winvalue=$ENV{'form.recent_'.$type}; + $winvalue=$env{'form.recent_'.$type}; } else { - $winvalue=$ENV{'form.recent_'.(split(/\_/,$type))[0]}; + $winvalue=$env{'form.recent_'.(split(/\_/,$type))[0]}; } } return @@ -312,8 +405,9 @@ sub startpage { my $overallhelp= &Apache::loncommon::help_open_menu('','Setting Parameters','Course_Setting_Parameters','',10,'Instructor Interface'); my $assessparmhelp=&Apache::loncommon::help_open_topic("Cascading_Parameters","Assessment Parameters"); + my $html=&Apache::lonxml::xmlbegin(); $r->print(< +$html LON-CAPA Course Parameters - LON-CAPA Course Environment $bodytag @@ -1777,7 +1812,7 @@ $output -ENDENV +ENDenv } ################################################## @@ -1806,10 +1841,11 @@ sub overview { my $r=shift; my $bodytag=&Apache::loncommon::bodytag( 'Set/Modify Course Assessment Parameters'); - my $dom = $ENV{'course.'.$ENV{'request.course.id'}.'.domain'}; - my $crs = $ENV{'course.'.$ENV{'request.course.id'}.'.num'}; + my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'}; + my $crs = $env{'course.'.$env{'request.course.id'}.'.num'}; + my $html=&Apache::lonxml::xmlbegin(); $r->print(< +$html LON-CAPA Course Environment @@ -1823,17 +1859,17 @@ ENDOVER undef %newdata; my @deldata=(); undef @deldata; - foreach (keys %ENV) { + foreach (keys %env) { if ($_=~/^form\.([a-z]+)\_(.+)$/) { my $cmd=$1; my $thiskey=$2; if ($cmd eq 'set') { - my $data=$ENV{$_}; + my $data=$env{$_}; if ($olddata{$thiskey} ne $data) { $newdata{$thiskey}=$data; } } elsif ($cmd eq 'del') { push (@deldata,$thiskey); } elsif ($cmd eq 'datepointer') { - my $data=&Apache::lonhtmlcommon::get_date_from_form($ENV{$_}); + my $data=&Apache::lonhtmlcommon::get_date_from_form($env{$_}); if (defined($data) and $olddata{$thiskey} ne $data) { $newdata{$thiskey}=$data; } } } @@ -1954,8 +1990,8 @@ Returns: sub change_clone { my ($clonelist,$oldcloner) = @_; my ($uname,$udom); - my $cnum = $ENV{'course.'.$ENV{'request.course.id'}.'.num'}; - my $cdom = $ENV{'course.'.$ENV{'request.course.id'}.'.domain'}; + my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; + my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; my $clone_crs = $cnum.':'.$cdom; if ($cnum && $cdom) { @@ -2051,22 +2087,20 @@ sub handler { # ----------------------------------------------------- Needs to be in a course - if (($ENV{'request.course.id'}) && - (&Apache::lonnet::allowed('opa',$ENV{'request.course.id'}) || - &Apache::lonnet::allowed('opa',$ENV{'request.course.id'}.'/'. - $ENV{'request.course.sec'}) + if (($env{'request.course.id'}) && + (&Apache::lonnet::allowed('opa',$env{'request.course.id'}) || + &Apache::lonnet::allowed('opa',$env{'request.course.id'}.'/'. + $env{'request.course.sec'}) )) { &Apache::loncommon::content_type($r,'text/html'); $r->send_http_header; - - $coursename=$ENV{'course.'.$ENV{'request.course.id'}.'.description'}; - if (($ENV{'form.crsenv'}) || (!$ENV{'request.course.fn'})) { + if (($env{'form.crsenv'}) || (!$env{'request.course.fn'})) { # ---------------------------------------------- This is for course environment # -------------------------- also call if toplevel map coudl not be initialized &crsenv($r); - } elsif ($ENV{'form.overview'}) { + } elsif ($env{'form.overview'}) { # --------------------------------------------------------------- Overview mode &overview($r); } else { @@ -2075,7 +2109,7 @@ sub handler { } } else { # ----------------------------- Not in a course, or not allowed to modify parms - $ENV{'user.error.msg'}= + $env{'user.error.msg'}= "/adm/parmset:opa:0:0:Cannot modify assessment parameters"; return HTTP_NOT_ACCEPTABLE; }