--- loncom/interface/lonparmset.pm 2005/06/05 01:37:26 1.209 +++ loncom/interface/lonparmset.pm 2005/06/06 15:13:46 1.212 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to set parameters for assessments # -# $Id: lonparmset.pm,v 1.209 2005/06/05 01:37:26 www Exp $ +# $Id: lonparmset.pm,v 1.212 2005/06/06 15:13:46 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -667,7 +667,10 @@ sub extractResourceInformation { my $symbp = shift; my $maptitles=shift; my $uris=shift; + my $keyorder=shift; + my $defkeytype=shift; + my $keyordercnt=100; my $navmap = Apache::lonnavmaps::navmap->new(); my @allres=$navmap->retrieveResources(undef,undef,1,undef,1); @@ -697,6 +700,7 @@ sub extractResourceInformation { my $parmdis = $display; $parmdis =~ s/\[Part.*$//g; $$allparms{$name}=$parmdis; + $$defkeytype{$name}=&Apache::lonnet::metadata($srcf,$key.'.type'); # # allparts is a hash of all parts # @@ -709,6 +713,14 @@ sub extractResourceInformation { } else { $$keyp{$id}=$key; } +# +# Put in order +# + unless ($$keyorder{$key}) { + $$keyorder{$key}=$keyordercnt; + $keyordercnt++; + } + } } $$mapp{$id}= @@ -731,7 +743,7 @@ sub extractResourceInformation { ################################################## sub parmmenu { - my ($r,$allparms,$pscat)=@_; + my ($r,$allparms,$pscat,$keyorder)=@_; my $tempkey; $r->print(< @@ -743,13 +755,52 @@ sub parmmenu { } } } + + function checkthis(thisvalue, checkName) { + for (i=0; i ENDSCRIPT $r->print(); $r->print("\n"); my $cnt=0; - foreach $tempkey (sort { $$allparms{$a} cmp $$allparms{$b} } - keys %{$allparms} ) { + foreach $tempkey (&keysindisplayorder($allparms,$keyorder)) { $r->print("\n '); $r->print('
print('value="'.$tempkey.'"'); if ($$pscat[0] eq "all" || grep $_ eq $tempkey, @{$pscat}) { @@ -764,9 +815,14 @@ ENDSCRIPT } $r->print('
- - - +Select All +Select Standard + +Select Dates +Select Visibilities +Select Part Parameters + +Unselect All
'); @@ -774,7 +830,7 @@ ENDSCRIPT sub partmenu { my ($r,$allparts,$psprt)=@_; - $r->print(''); $r->print(''); @@ -831,10 +887,10 @@ ENDMENU } sub displaymenu { - my ($r,$allparms,$allparts,$pscat,$psprt)=@_; + my ($r,$allparms,$allparts,$pscat,$psprt,$keyorder)=@_; $r->print('
'.&mt('Select Parameters to View').''. &mt('Select Parts to View').'
'); - &parmmenu($r,$allparms,$pscat); + &parmmenu($r,$allparms,$pscat,$keyorder); $r->print(''); &partmenu($r,$allparts,$psprt); $r->print('
'); @@ -868,6 +924,70 @@ sub levelmenu { $r->print(""); } + +sub sectionmenu { + my ($r,$selectedsections)=@_; + my %sectionhash=(); + + if (&Apache::loncommon::get_sections( + $env{'course.'.$env{'request.course.id'}.'.domain'}, + $env{'course.'.$env{'request.course.id'}.'.num'}, + \%sectionhash)) { + $r->print('\n"); + } +} + +sub keysplit { + my $keyp=shift; + return (split(/\,/,$keyp)); +} + +sub keysinorder { + my ($name,$keyorder)=@_; + return sort { + $$keyorder{$a} <=> $$keyorder{$b}; + } (keys %{$name}); +} + +sub keysindisplayorder { + my ($name,$keyorder)=@_; + return sort { + $$keyorder{'parameter_0_'.$a} <=> $$keyorder{'parameter_0_'.$b}; + } (keys %{$name}); +} + +sub standardkeyorder { + return ('parameter_0_opendate' => 1, + 'parameter_0_duedate' => 2, + 'parameter_0_answerdate' => 3, + 'parameter_0_interval' => 4, + 'parameter_0_weight' => 5, + 'parameter_0_maxtries' => 6, + 'parameter_0_hinttries' => 7, + 'parameter_0_contentopen' => 8, + 'parameter_0_contentclose' => 9, + 'parameter_0_type' => 10, + 'parameter_0_problemstatus' => 11, + 'parameter_0_hiddenresource' => 12, + 'parameter_0_hiddenparts' => 13, + 'parameter_0_display' => 14, + 'parameter_0_ordered' => 15, + 'parameter_0_tol' => 16, + 'parameter_0_sig' => 17, + 'parameter_0_turnoffunit' => 18); +} + ################################################## ################################################## @@ -928,6 +1048,10 @@ sub assessparms { my %allparms; my %allparts; +# +# Order in which these parameters will be displayed +# + my %keyorder=&standardkeyorder(); @ids=(); %symbp=(); @@ -1022,7 +1146,9 @@ sub assessparms { unless ($csec) { $csec=''; } # --------------------------------------------------------- Get all assessments - &extractResourceInformation(\@ids, \%typep,\%keyp, \%allparms, \%allparts, \%allmaps, \%mapp, \%symbp,\%maptitles,\%uris); + &extractResourceInformation(\@ids, \%typep,\%keyp, \%allparms, \%allparts, \%allmaps, + \%mapp, \%symbp,\%maptitles,\%uris, + \%keyorder); $mapp{'0.0'} = ''; $symbp{'0.0'} = ''; @@ -1054,8 +1180,6 @@ sub assessparms { $r->print(''); } - - $r->print('

'.$message.'

'); if (!$pssymb) { $r->print(''); } $r->print('
'); @@ -1066,14 +1190,16 @@ sub assessparms { $r->print('
'); - &displaymenu($r,\%allparms,\%allparts,\@pscat,\@psprt); + &displaymenu($r,\%allparms,\%allparts,\@pscat,\@psprt,\%keyorder); } else { my ($map,$id,$resource)=&Apache::lonnet::decode_symb($pssymb); $r->print(&mt('Specific Resource').": ".$resource. - ''); + '
'); } &usermenu($r,$uname,$id,$udom,$csec); + $r->print('

'.$message.'

'); + $r->print('
'); my @temp_pscat; @@ -1176,7 +1302,7 @@ ENDTABLEHEADFOUR my %default=(); my $uri=&Apache::lonnet::declutter($uris{$rid}); - foreach (split(/\,/,$keyp{$rid})) { + foreach (&keysplit($keyp{$rid})) { my $tempkeyp = $_; if (grep $_ eq $tempkeyp, @catmarker) { $part{$_}=&Apache::lonnet::metadata($uri,$_.'.part'); @@ -1220,7 +1346,7 @@ ENDTABLEHEADFOUR $r->print(''); - foreach (sort keys %name) { + foreach (&keysinorder(\%name,\%keyorder)) { unless ($firstrow) { $r->print(''); } else { @@ -1283,7 +1409,7 @@ ENDTABLEHEADFOUR # When storing information, store as part 0 # When requesting information, request from full part #------------------------------------------------------------------- - foreach (split(/\,/,$keyp{$rid})) { + foreach (&keysplit($keyp{$rid})) { my $tempkeyp = $_; my $fullkeyp = $tempkeyp; $tempkeyp =~ s/_\w+_/_0_/; @@ -1333,12 +1459,11 @@ ENDMAPONE $r->print(''.&mt('Default Value').''); $r->print(''.&mt('Parameter in Effect').''); - foreach (sort keys %name) { + foreach (&keysinorder(\%name,\%keyorder)) { $r->print(''); &print_row($r,$_,\%part,\%name,\%symbp,$mapid,\%default, \%type,\%display,$defbgone,$defbgtwo, $parmlev,$uname,$udom,$csec); -# $r->print("resource.$part{$_}.$name{$_},$symbp{$mapid}\n"); } $r->print(""); } # end each map @@ -1370,7 +1495,7 @@ ENDMAPONE # When storing information, store as part 0 # When requesting information, request from full part #------------------------------------------------------------------- - foreach (split(/\,/,$keyp{$rid})) { + foreach (&keysplit($keyp{$rid})) { my $tempkeyp = $_; my $fullkeyp = $tempkeyp; $tempkeyp =~ s/_\w+_/_0_/; @@ -1411,11 +1536,10 @@ ENDMAPONE $r->print(''.&mt('Default Value').''); $r->print(''.&mt('Parameter in Effect').''); - foreach (sort keys %name) { + foreach (&keysinorder(\%name,\%keyorder)) { $r->print(''); &print_row($r,$_,\%part,\%name,\%symbp,$mapid,\%default, \%type,\%display,$defbgone,$defbgtwo,$parmlev,$uname,$udom,$csec); -# $r->print("resource.$part{$_}.$name{$_},$symbp{$mapid}\n"); } $r->print(""); } # end of $parmlev eq general @@ -1825,9 +1949,12 @@ sub storedata { } if ($cmd eq 'set') { my $data=$env{$_}; - if ($$olddata{$thiskey} ne $data) { + my $typeof=$env{'form.typeof_'.$thiskey}; + if ($$olddata{$thiskey} ne $data) { if ($tuname) { - if (&Apache::lonnet::put('resourcedata',{$tkey=>$data},$tudom,$tuname) eq 'ok') { + if (&Apache::lonnet::put('resourcedata',{$tkey=>$data, + $tkey.'.type' => $typeof}, + $tudom,$tuname) eq 'ok') { $r->print('
'.&mt('Stored modified parameter for').' '. &Apache::loncommon::plainname($tuname,$tudom)); } else { @@ -1837,7 +1964,8 @@ sub storedata { &Apache::lonnet::devalidateuserresdata($tuname,$tudom); } else { $newdata{$thiskey}=$data; - } + $newdata{$thiskey.'.type'}=$typeof; + } } } elsif ($cmd eq 'del') { if ($tuname) { @@ -1853,9 +1981,12 @@ sub storedata { } } elsif ($cmd eq 'datepointer') { my $data=&Apache::lonhtmlcommon::get_date_from_form($env{$_}); + my $typeof=$env{'form.typeof_'.$thiskey}; if (defined($data) and $$olddata{$thiskey} ne $data) { if ($tuname) { - if (&Apache::lonnet::put('resourcedata',{$tkey=>$data},$tudom,$tuname) eq 'ok') { + if (&Apache::lonnet::put('resourcedata',{$tkey=>$data, + $tkey.'.type' => $typeof}, + $tudom,$tuname) eq 'ok') { $r->print('
'.&mt('Stored modified date for').' '.&Apache::loncommon::plainname($tuname,$tudom)); } else { $r->print('

'. @@ -1863,7 +1994,8 @@ sub storedata { } &Apache::lonnet::devalidateuserresdata($tuname,$tudom); } else { - $newdata{$thiskey}=$data; + $newdata{$thiskey}=$data; + $newdata{$thiskey.'.type'}=$typeof; } } } @@ -1884,7 +2016,7 @@ sub storedata { } if ($putentries) { if (&Apache::lonnet::put('resourcedata',\%newdata,$dom,$crs) eq 'ok') { - $r->print('

'.&mt('Stored [_1] parameter(s)

',$putentries)); + $r->print('

'.&mt('Stored [_1] parameter(s)',$putentries/2).'

'); } else { $r->print('

'. &mt('Error storing parameters').'

'); @@ -1909,7 +2041,11 @@ sub listdata { $tableopen=0; my $foundkeys=0; foreach my $thiskey (sort keys %{$listdata}) { - if ($$resourcedata{$thiskey.'.type'}) { + if ($$listdata{$thiskey.'.type'}) { + my $thistype=$$listdata{$thiskey.'.type'}; + if ($$resourcedata{$thiskey.'.type'}) { + $thistype=$$resourcedata{$thiskey.'.type'}; + } my ($middle,$part,$name)= ($thiskey=~/^$env{'request.course.id'}\.(?:(.+)\.)*([\w\s]+)\.(\w+)$/); my $section=&mt('All Students'); @@ -1953,7 +2089,7 @@ sub listdata { ':'); $foundkeys++; - if ($$resourcedata{$thiskey.'.type'}=~/^date/) { + if ($thistype=~/^date/) { my $jskey='key_'.$pointer; $pointer++; $r->print( @@ -1963,10 +2099,11 @@ sub listdata { '' ); } else { - $r->print( - ''); } + $r->print(''); $r->print(''); } } @@ -1988,10 +2125,129 @@ $html $bodytag $breadcrumbs -
+ ENDOVER - $r->print(&tableend(). - '

'); + my @ids=(); + my %typep=(); + my %keyp=(); + my %allparms=(); + my %allparts=(); + my %allmaps=(); + my %mapp=(); + my %symbp=(); + my %maptitles=(); + my %uris=(); + my %keyorder=&standardkeyorder(); + my %defkeytype=(); + + my %alllevs=(); + $alllevs{'Resource Level'}='full'; + $alllevs{'Map Level'}='map'; + $alllevs{'Course Level'}='general'; + + my $csec=$env{'form.csec'}; + + my @pscat=&Apache::loncommon::get_env_multiple('form.pscat'); + my $pschp=$env{'form.pschp'}; + my @psprt=&Apache::loncommon::get_env_multiple('form.psprt'); + if (!@psprt) { $psprt[0]='0'; } + + my @selected_sections = + &Apache::loncommon::get_env_multiple('form.Section'); + @selected_sections = ('all') if (! @selected_sections); + foreach (@selected_sections) { + if ($_ eq 'all') { + @selected_sections = ('all'); + } + } + + my $pssymb=''; + my $parmlev=''; + + unless ($env{'form.parmlev'}) { + $parmlev = 'map'; + } else { + $parmlev = $env{'form.parmlev'}; + } + + &extractResourceInformation(\@ids, \%typep,\%keyp, \%allparms, \%allparts, \%allmaps, + \%mapp, \%symbp,\%maptitles,\%uris, + \%keyorder,\%defkeytype); + +# Menu to select levels, etc + + $r->print(''); + } + $r->print('
'); + &levelmenu($r,\%alllevs,$parmlev); + if ($parmlev ne 'general') { + $r->print(''); + &mapmenu($r,\%allmaps,$pschp,\%maptitles); + $r->print('
'); + + $r->print('
'); + &parmmenu($r,\%allparms,\@pscat,\%keyorder); + $r->print(''); + &partmenu($r,\%allparts,\@psprt); + $r->print(''); + §ionmenu($r,\@selected_sections); + $r->print('
'. + '

'); + +# Build the list data hash from the specified parms + + my $listdata; + %{$listdata}=(); + + foreach my $cat (@pscat) { + foreach my $section (@selected_sections) { + foreach my $part (@psprt) { + my $rootparmkey=$env{'request.course.id'}; + if (($section ne 'all') && ($section ne 'none') && ($section)) { + $rootparmkey.='.['.$section.']'; + } + if ($parmlev eq 'general') { +# course-level parameter + my $newparmkey=$rootparmkey.'.'.$part.'.'.$cat; + $$listdata{$newparmkey}=1; + $$listdata{$newparmkey.'.type'}=$defkeytype{$cat}; + } elsif ($parmlev eq 'map') { +# map-level parameter + 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}; + } + } else { +# resource-level parameter + foreach my $rid (@ids) { + my ($map,$resid,$url)=&Apache::lonnet::decode_symb($symbp{$rid}); + if (($pschp ne 'all') && ($allmaps{$pschp} ne $map)) { next; } + my $newparmkey=$rootparmkey.'.'.$symbp{$rid}.'.'.$part.'.'.$cat; + $$listdata{$newparmkey}=1; + $$listdata{$newparmkey.'.type'}=$defkeytype{$cat}; + } + } + } + } + } + + if (($env{'form.store'}) || ($env{'form.dis'})) { + + if ($env{'form.store'}) { &storedata($r,$crs,$dom); } + +# Read modified data + + my $resourcedata=&readdata($crs,$dom); + +# List data + + &listdata($r,$resourcedata,$listdata); + } + $r->print(&tableend(). + ((($env{'form.store'}) || ($env{'form.dis'}))?'

':''). + ''); } sub overview {