--- loncom/interface/lonparmset.pm 2002/08/29 03:57:45 1.61.2.1 +++ loncom/interface/lonparmset.pm 2002/09/07 18:25:42 1.68 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to set parameters for assessments # -# $Id: lonparmset.pm,v 1.61.2.1 2002/08/29 03:57:45 albertel Exp $ +# $Id: lonparmset.pm,v 1.68 2002/09/07 18:25:42 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -201,7 +201,30 @@ sub valout { if (! $value && $value ne '0') { $result = '  '; } else { - if ($type=~/^date/) { + if ($type eq 'date_interval') { + my ($sec,$min,$hour,$mday,$mon,$year)=gmtime($value); + $year=$year-70; + $mday--; + if ($year) { + $result.=$year.' yrs '; + } + if ($mon) { + $result.=$mon.' mths '; + } + if ($mday) { + $result.=$mday.' days '; + } + if ($hour) { + $result.=$hour.' hrs '; + } + if ($min) { + $result.=$min.' mins '; + } + if ($sec) { + $result.=$sec.' secs '; + } + $result=~s/\s+$//; + } elsif ($type=~/^date/) { $result = localtime($value); } else { $result = $value; @@ -249,6 +272,9 @@ sub startpage { my ($r,$id,$udom,$csec,$uname)=@_; $r->content_type('text/html'); $r->send_http_header; + + my $bodytag=&Apache::loncommon::bodytag('Set Course Parameters','', + 'onUnload="pclose()"'); $r->print(< @@ -303,9 +329,7 @@ sub startpage { } - -

Set Course Parameters for Course: -$ENV{'course.'.$ENV{'request.course.id'}.'.description'}

+$bodytag

Course Environment

@@ -331,10 +355,27 @@ ENDHEAD } sub print_row { - my ($r,$which,$part,$name,$rid,$default,$type,$display,$defbgone, + my ($r,$which,$part,$name,$rid,$default,$defaulttype,$display,$defbgone, $defbgtwo,$parmlev)=@_; +# 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}); +# 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}); +# cascade down manually + my $cascadetype=$defaulttype; + for (my $i=$#typeoutpar;$i>0;$i--) { + if ($typeoutpar[$i]) { + $cascadetype=$typeoutpar[$i]; + } else { + $typeoutpar[$i]=$cascadetype; + } + } + my $parm=$$display{$which}; if ($parmlev eq 'full' || $parmlev eq 'brief') { @@ -353,73 +394,75 @@ sub print_row { if ($parmlev eq 'general') { if ($uname) { - &print_td($r,3,$defbgone,$result,\@outpar,$mprefix,$_,$type,$display); + &print_td($r,3,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); } elsif ($csec) { - &print_td($r,6,$defbgtwo,$result,\@outpar,$mprefix,$_,$type,$display); + &print_td($r,6,$defbgtwo,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); } else { - &print_td($r,9,$defbgone,$result,\@outpar,$mprefix,$_,$type,$display); + &print_td($r,9,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); } } elsif ($parmlev eq 'map') { if ($uname) { - &print_td($r,2,$defbgone,$result,\@outpar,$mprefix,$_,$type,$display); + &print_td($r,2,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); } elsif ($csec) { - &print_td($r,5,$defbgtwo,$result,\@outpar,$mprefix,$_,$type,$display); + &print_td($r,5,$defbgtwo,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); } else { - &print_td($r,8,$defbgone,$result,\@outpar,$mprefix,$_,$type,$display); + &print_td($r,8,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); } } else { - &print_td($r,11,'#FFDDDD',$result,\@outpar,$mprefix,$_,$type,$display); + &print_td($r,11,'#FFDDDD',$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); if ($parmlev eq 'brief') { - &print_td($r,7,$defbgone,$result,\@outpar,$mprefix,$_,$type,$display); + &print_td($r,7,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); if ($csec) { - &print_td($r,4,$defbgtwo,$result,\@outpar,$mprefix,$_,$type,$display); + &print_td($r,4,$defbgtwo,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); } if ($uname) { - &print_td($r,1,$defbgone,$result,\@outpar,$mprefix,$_,$type,$display); + &print_td($r,1,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); } } else { - &print_td($r,10,'#FFDDDD',$result,\@outpar,$mprefix,$_,$type,$display); - &print_td($r,9,$defbgone,$result,\@outpar,$mprefix,$_,$type,$display); - &print_td($r,8,$defbgone,$result,\@outpar,$mprefix,$_,$type,$display); - &print_td($r,7,$defbgone,$result,\@outpar,$mprefix,$_,$type,$display); + &print_td($r,10,'#FFDDDD',$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); + &print_td($r,9,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); + &print_td($r,8,$defbgone,$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,$_,$type,$display); - &print_td($r,5,$defbgtwo,$result,\@outpar,$mprefix,$_,$type,$display); - &print_td($r,4,$defbgtwo,$result,\@outpar,$mprefix,$_,$type,$display); + &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); } if ($uname) { - &print_td($r,3,$defbgone,$result,\@outpar,$mprefix,$_,$type,$display); - &print_td($r,2,$defbgone,$result,\@outpar,$mprefix,$_,$type,$display); - &print_td($r,1,$defbgone,$result,\@outpar,$mprefix,$_,$type,$display); + &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); } } # end of $brief if/else } # end of $parmlev if/else if ($parmlev eq 'full' || $parmlev eq 'brief') { $r->print(''. - &valout($outpar[$result],$$type{$which}).''); + &valout($outpar[$result],$typeoutpar[$result]).''); } my $sessionval=&Apache::lonnet::EXT('resource.'.$$part{$which}. '.'.$$name{$which},$symbp{$rid}); + my $sessionvaltype=&Apache::lonnet::EXT('resource.'.$$part{$which}. + '.'.$$name{$which}.'.type',$symbp{$rid}); $r->print(''. - &valout($sessionval,$$type{$which}).' '. + &valout($sessionval,$sessionvaltype).' '. ''); $r->print(''); $r->print("\n"); } sub print_td { - my ($r,$which,$defbg,$result,$outpar,$mprefix,$value,$type,$display)=@_; + my ($r,$which,$defbg,$result,$outpar,$mprefix,$value,$typeoutpar,$display)=@_; $r->print(''. - &plink($$type{$value},$$display{$value},$$outpar[$which], + &plink($$typeoutpar[$which],$$display{$value},$$outpar[$which], $mprefix."$which",'parmform.pres','psub').''."\n"); } @@ -437,6 +480,102 @@ sub get_env_multiple { return(@values); } +=pod + +=item B: Given the course data hash, extractResourceInformation extracts lots of information about the course's resources into a variety of hashes. + +Input: See list below: + +=over 4 + +=item B: An array that will contain all of the ids in the course. + +=item B: hash, id->type, where "type" contains the extension of the file, thus, I. + +=item B: hash, id->key list, will contain a comma seperated list of the meta-data keys available for the given id + +=item B: hash, name of parameter->display value (what is the display value?) + +=item B: hash, part identification->text representation of part, where the text representation is "[Part $part]" + +=item B: hash, full key to part->display value (what's display value?) + +=item B: hash, ??? + +=item B: ??? + +=item B: hash, ??? + +=item B: ?? + +=item B: hash, id->full sym? + +=back + +=cut + +sub extractResourceInformation { + my $bighash = shift; + my $ids = shift; + my $typep = shift; + my $keyp = shift; + my $allparms = shift; + my $allparts = shift; + my $allkeys = shift; + my $allmaps = shift; + my $fcat = shift; + my $defp = shift; + my $mapp = shift; + my $symbp = shift; + + foreach (keys %$bighash) { + if ($_=~/^src\_(\d+)\.(\d+)$/) { + my $mapid=$1; + my $resid=$2; + my $id=$mapid.'.'.$resid; + my $srcf=$$bighash{$_}; + if ($srcf=~/\.(problem|exam|quiz|assess|survey|form)$/) { + $$ids[$#$ids+1]=$id; + $$typep{$id}=$1; + $$keyp{$id}=''; + foreach (split(/\,/,&Apache::lonnet::metadata($srcf,'allpossiblekeys'))) { + if ($_=~/^parameter\_(.*)/) { + my $key=$_; + my $allkey=$1; + $allkey=~s/\_/\./g; + my $display= &Apache::lonnet::metadata($srcf,$key.'.display'); + my $name=&Apache::lonnet::metadata($srcf,$key.'.name'); + my $part= &Apache::lonnet::metadata($srcf,$key.'.part'); + my $parmdis = $display; + $parmdis =~ s|(\[Part.*$)||g; + my $partkey = $part; + $partkey =~ tr|_|.|; + $$allparms{$name} = $parmdis; + $$allparts{$part} = "[Part $part]"; + $$allkeys{$allkey}=$display; + if ($allkey eq $fcat) { + $$defp{$id}= &Apache::lonnet::metadata($srcf,$key); + } + if ($$keyp{$id}) { + $$keyp{$id}.=','.$key; + } else { + $$keyp{$id}=$key; + } + } + } + $$mapp{$id}= + &Apache::lonnet::declutter($$bighash{'map_id_'.$mapid}); + $$mapp{$mapid}=$$mapp{$id}; + $$allmaps{$mapid}=$$mapp{$id}; + $$symbp{$id}=$$mapp{$id}. + '___'.$resid.'___'. + &Apache::lonnet::declutter($srcf); + $$symbp{$mapid}=$$mapp{$id}.'___(all)'; + } + } + } +} + ################################################## ################################################## @@ -451,6 +590,18 @@ Inputs: $r Returns: nothing +Variables used (guessed by Jeremy): + +=over 4 + +=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? + +=item B: + +=back + =cut ################################################## @@ -580,53 +731,10 @@ sub assessparms { $r->print("Unable to access parameter data. (File $ENV{'request.course.fn'}_parms.db not tieable)"); return ; } + # --------------------------------------------------------- Get all assessments - foreach (keys %bighash) { - if ($_=~/^src\_(\d+)\.(\d+)$/) { - my $mapid=$1; - my $resid=$2; - my $id=$mapid.'.'.$resid; - my $srcf=$bighash{$_}; - if ($srcf=~/\.(problem|exam|quiz|assess|survey|form)$/) { - $ids[$#ids+1]=$id; - $typep{$id}=$1; - $keyp{$id}=''; - foreach (split(/\,/,&Apache::lonnet::metadata($srcf,'allpossiblekeys'))) { - if ($_=~/^parameter\_(.*)/) { - my $key=$_; - my $allkey=$1; - $allkey=~s/\_/\./g; - my $display= &Apache::lonnet::metadata($srcf,$key.'.display'); - my $name=&Apache::lonnet::metadata($srcf,$key.'.name'); - my $part= &Apache::lonnet::metadata($srcf,$key.'.part'); - my $parmdis = $display; - $parmdis =~ s|(\[Part.*$)||g; - my $partkey = $part; - $partkey =~ tr|_|.|; - $allparms{$name} = $parmdis; - $allparts{$part} = "[Part $part]"; - $allkeys{$allkey}=$display; - if ($allkey eq $fcat) { - $defp{$id}= &Apache::lonnet::metadata($srcf,$key); - } - if ($keyp{$id}) { - $keyp{$id}.=','.$key; - } else { - $keyp{$id}=$key; - } - } - } - $mapp{$id}= - &Apache::lonnet::declutter($bighash{'map_id_'.$mapid}); - $mapp{$mapid}=$mapp{$id}; - $allmaps{$mapid}=$mapp{$id}; - $symbp{$id}=$mapp{$id}. - '___'.$resid.'___'. - &Apache::lonnet::declutter($srcf); - $symbp{$mapid}=$mapp{$id}.'___(all)'; - } - } - } + extractResourceInformation(\%bighash, \@ids, \%typep,\%keyp, \%allparms, \%allparts, \%allkeys, \%allmaps, $fcat, \%defp, \%mapp, \%symbp); + $mapp{'0.0'} = ''; $symbp{'0.0'} = ''; # ---------------------------------------------------------- Anything to store? @@ -654,8 +762,8 @@ sub assessparms { if ($snum==5) { $storeunder=$seclevelm; } if ($snum==4) { $storeunder=$seclevelr; } - my %storecontent = ($storeunder => $ENV{'form.pres_value'}, - $storeunder.'type' => $ENV{'form.pres_type'}); + my %storecontent = ($storeunder => $ENV{'form.pres_value'}, + $storeunder.'.type' => $ENV{'form.pres_type'}); my $reply=''; if ($snum>3) { # ---------------------------------------------------------------- Store Course @@ -698,6 +806,10 @@ sub assessparms { } # ---------------------------------------------------------------- Done storing } +# --------------------------------------------- Devalidate cache for this child + &Apache::lonnet::devalidatecourseresdata( + $ENV{'course.'.$ENV{'request.course.id'}.'.num'}, + $ENV{'course.'.$ENV{'request.course.id'}.'.domain'}); # -------------------------------------------------------------- Get coursedata %courseopt = &Apache::lonnet::dump ('resourcedata', @@ -725,6 +837,7 @@ sub assessparms { if ($pscat[0] eq "all" || !@pscat) {@pscat = (keys %allparms);} if ($psprt[0] eq "all" || !@psprt) {@psprt = (keys %allparts);} # ------------------------------------------------------------------ Start page + &startpage($r,$id,$udom,$csec,$uname); # if ($ENV{'form.url'}) { # $r->print(' -

Set Course Parameters

+$bodytag -

Course: $ENV{'course.'.$ENV{'request.course.id'}.'.description'}

-

Course Environment

$setoutput