--- loncom/interface/lonparmset.pm 2012/05/01 15:54:49 1.505.2.1.2.2 +++ loncom/interface/lonparmset.pm 2011/01/15 15:14:47 1.508 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to set parameters for assessments # -# $Id: lonparmset.pm,v 1.505.2.1.2.2 2012/05/01 15:54:49 raeburn Exp $ +# $Id: lonparmset.pm,v 1.508 2011/01/15 15:14:47 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -302,9 +302,31 @@ use Apache::lonlocal; use Apache::lonnavmaps; use Apache::longroup; use Apache::lonrss; +use HTML::Entities; use LONCAPA qw(:DEFAULT :match); +sub startSettingsScreen { + my ($r,$mode)=@_; + + $r->print("\n".''."\n"); + $r->print('
'); +} + +sub endSettingsScreen { + my ($r)=@_; + $r->print('
'); +} + + + sub parmval { my ($what,$id,$def,$uname,$udom,$csec,$cgroup,$courseopt)=@_; return &parmval_by_symb($what,&symbcache($id),$def,$uname,$udom,$csec, @@ -868,6 +890,7 @@ $selscript ENDJS } + sub startpage { my ($r) = @_; @@ -890,14 +913,18 @@ sub startpage { {'add_entries' => \%loaditems,}); my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs('Table Mode Parameter Setting','Table_Mode'); + my $escfilter=&Apache::lonhtmlcommon::entity_encode($env{'form.filter'}); + my $escpart=&Apache::lonhtmlcommon::entity_encode($env{'form.part'}); + $r->print($start_page.$breadcrumbs); + &startSettingsScreen($r,'parmset'); $r->print(< + + ENDHEAD } @@ -930,7 +957,7 @@ sub print_row { if ($parmlev eq 'full') { $r->print('' - .$$part{$which}.''); + .($$part{$which} eq '0'?'0 ('.&mt('default').')':$$part{$which}).''); } else { $parm=~s|\[.*\]\s||g; } @@ -1265,7 +1292,6 @@ sub parmmenu { function checkdisset() { checkthis('discussend','pscat'); checkthis('discusshide','pscat'); - checkthis('discussvote','pscat'); } function checkcontdates() { @@ -1404,7 +1430,6 @@ sub lookUpTableParameter { 'acc' => 'misc', 'maxcollaborators' => 'misc', 'scoreformat' => 'misc', - 'discussvote' => 'misc', ); } @@ -1751,10 +1776,11 @@ sub mapmenu { $r->print( '
' .&mt('You can only select maps and folders which have modifiable settings.') - .' '.&Apache::loncommon::help_open_topic('Parameter_Set_Folder') + .' '.&Apache::loncommon::help_open_topic('Parameter_Set_Folder') .'
' ); + $r->print(&Apache::loncommon::start_data_table()); # Display row: "All Maps or Folders" @@ -1960,9 +1986,8 @@ sub standardkeyorder { 'parameter_0_tol' => 16, 'parameter_0_sig' => 17, 'parameter_0_turnoffunit' => 18, - 'parameter_0_discussend' => 19, - 'parameter_0_discusshide' => 20, - 'parameter_0_discussvote' => 21); + 'parameter_0_discussend' => 19, + 'parameter_0_discusshide' => 20); } @@ -2022,8 +2047,11 @@ sub assessparms { 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'; } + if (($env{'form.part'}) && ($psprt[0] ne 'all')) { $psprt[0]=$env{'form.part'}; } my $pssymb=''; my $parmlev=''; @@ -2125,7 +2153,7 @@ sub assessparms { my ($got_chostname,$chostname,$cmajor,$cminor); my $totalstored = 0; for (my $i=0;$i<=$#markers;$i++) { - my ($needsrelease,$needsnewer,$name); + my ($needsrelease,$needsnewer); if ($markers[$i] =~ /^[\d.]+\&0_availablestudent\&(1|2|3)$/) { my (@ok_slots,@fail_slots,@del_slots); my $courseopt=&Apache::lonnet::get_courseresdata($cnum,$cdom); @@ -2156,23 +2184,22 @@ sub assessparms { } } } - } elsif ($markers[$i] =~ /_(type|discussvote)\&\d+$/) { - $name = $1; + } elsif ($markers[$i] =~ /_type\&\d+$/) { $needsrelease = - $Apache::lonnet::needsrelease{"parameter:$name:$values[$i]"}; + $Apache::lonnet::needsrelease{'parameter:type:'.$values[$i]}; if ($needsrelease) { unless ($got_chostname) { - ($chostname,$cmajor,$cminor) = ¶meter_release_vars(); + ($chostname,$cmajor,$cminor) = &questiontype_release_vars(); $got_chostname = 1; } - $needsnewer = ¶meter_releasecheck($name,$values[$i], - $needsrelease, - $chostname, - $cmajor,$cminor); + $needsnewer = &questiontype_releasecheck($values[$i], + $needsrelease, + $chostname, + $cmajor,$cminor); } } if ($needsnewer) { - $message .= &oldversion_warning($name,$values[$i],$chostname,$cmajor, + $message .= &oldversion_warning($values[$i],$chostname,$cmajor, $cminor,$needsrelease); } else { $message.=&storeparm(split(/\&/,$markers[$i]), @@ -2334,6 +2361,9 @@ COURSECONTENTSCRIPT my $csudom=$env{'user.domain'}; if ($parmlev eq 'full') { +# +# This produces the cascading table output of parameters +# my $coursespan=$csec?8:5; my $userspan=3; if ($cgroup ne '') { @@ -2341,6 +2371,9 @@ COURSECONTENTSCRIPT } $r->print('

'); +# +# This produces the headers +# $r->print(''); $r->print(''); if ($uname) { @@ -2404,7 +2437,9 @@ ENDTABLEHEADFOUR } $r->print(''); - +# +# Done with the headers +# my $defbgone=''; my $defbgtwo=''; my $defbgthree = ''; @@ -2444,11 +2479,19 @@ ENDTABLEHEADFOUR my %default=(); my $uri=&Apache::lonnet::declutter($uris{$rid}); + my $filter=$env{'form.filter'}; + foreach (&keysplit($keyp{$rid})) { my $tempkeyp = $_; if (grep $_ eq $tempkeyp, @catmarker) { + my $parmname=&Apache::lonnet::metadata($uri,$_.'.name'); +# We may only want certain parameters listed + if ($filter) { + unless ($filter=~/\Q$parmname\E/) { next; } + } + $name{$_}=$parmname; $part{$_}=&Apache::lonnet::metadata($uri,$_.'.part'); - $name{$_}=&Apache::lonnet::metadata($uri,$_.'.name'); + my $parmdis=&Apache::lonnet::metadata($uri,$_.'.display'); if ($allparms{$name{$_}} ne '') { my $identifier; @@ -2724,7 +2767,9 @@ ENDMAPONE ); } # end of $parmlev eq general } - $r->print(''.&Apache::loncommon::end_page()); + $r->print(''); + &endSettingsScreen($r); + $r->print(&Apache::loncommon::end_page()); } # end sub assessparms ################################################## @@ -2797,32 +2842,25 @@ sub storedata { $tkey=~s/\.\[useropt\:$tuname\:$tudom\]\./\./; } if ($cmd eq 'set' || $cmd eq 'datepointer' || $cmd eq 'dateinterval') { - my ($data, $typeof, $text, $name); + my ($data, $typeof, $text); if ($cmd eq 'set') { $data=$env{$key}; $typeof=$env{'form.typeof_'.$thiskey}; $text = &mt('Saved modified parameter for'); if ($typeof eq 'string_questiontype') { - $name = 'type'; - } elsif ($typeof eq 'string_discussvote') { - $name = 'discussvote'; - } - if ($name ne '') { my ($needsrelease,$needsnewer); $needsrelease = $Apache::lonnet::needsrelease{'parameter:type:'.$data}; if ($needsrelease) { unless ($got_chostname) { - ($chostname,$cmajor,$cminor)=¶meter_release_vars(); + ($chostname,$cmajor,$cminor)=&questiontype_release_vars(); $got_chostname = 1; } - $needsnewer = ¶meter_releasecheck($name,$data, - $needsrelease, - $chostname,$cmajor, - $cminor); + $needsnewer = &questiontype_releasecheck($data,$needsrelease, + $chostname,$cmajor, + $cminor); } if ($needsnewer) { - $r->print('
'.&oldversion_warning($name,$data, - $chostname,$cmajor, + $r->print('
'.&oldversion_warning($data,$chostname,$cmajor, $cminor,$needsrelease)); next; } @@ -3057,7 +3095,7 @@ sub listdata { $$resourcedata{$thiskey})); } elsif ($thistype =~ m/^string/) { $r->print(&string_selector($thistype,$thiskey, - $$resourcedata{$thiskey},$name)); + $$resourcedata{$thiskey})); } else { $r->print(&default_selector($thiskey,$$resourcedata{$thiskey})); } @@ -3131,10 +3169,6 @@ my %strings = [ 'randomizetry', 'New Randomization Each N Tries (default N=1)'], [ 'practice', 'Practice'], [ 'surveycred', 'Survey (credit for submission)']], - 'string_discussvote' - => [['yes','Yes'], - ['notended','Yes, unless discussion ended'], - ['no','No']], ); sub standard_string_options { @@ -3146,30 +3180,29 @@ sub standard_string_options { } sub string_selector { - my ($thistype, $thiskey, $showval, $name) = @_; + my ($thistype, $thiskey, $showval) = @_; if (!exists($strings{$thistype})) { return &default_selector($thiskey,$showval); } my %skiptype; - if (($thistype eq 'string_questiontype') || - ($thistype eq 'string_discussvote')) { + if ($thistype eq 'string_questiontype') { my ($got_chostname,$chostname,$cmajor,$cminor); foreach my $possibilities (@{ $strings{$thistype} }) { next unless (ref($possibilities) eq 'ARRAY'); - my ($parmval, $description) = @{ $possibilities }; - my $needsrelease=$Apache::lonnet::needsrelease{"parameter:$name:$parmval"}; + my ($name, $description) = @{ $possibilities }; + my $needsrelease=$Apache::lonnet::needsrelease{'parameter:type:'.$name}; if ($needsrelease) { unless ($got_chostname) { - ($chostname,$cmajor,$cminor)=¶meter_release_vars(); + ($chostname,$cmajor,$cminor)=&questiontype_release_vars(); $got_chostname = 1; } - my $needsnewer=¶meter_releasecheck($name,$parmval,$needsrelease, - $chostname,$cmajor, - $cminor); + my $needsnewer=&questiontype_releasecheck($name,$needsrelease, + $chostname,$cmajor, + $cminor); if ($needsnewer) { - $skiptype{$parmval} = 1; + $skiptype{$name} = 1; } } } @@ -3268,9 +3301,9 @@ sub newoverview { text=>"Overview Mode"}); my $start_page = &Apache::loncommon::start_page('Set Parameters'); my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs('Overview'); + $r->print($start_page.$breadcrumbs); + &startSettingsScreen($r,'parmset'); $r->print(< ENDOVER my @ids=(); @@ -3296,6 +3329,7 @@ ENDOVER 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'; } @@ -3396,7 +3430,9 @@ ENDOVER } $r->print(&tableend(). ((($env{'form.store'}) || ($env{'form.dis'}))?'

':''). - ''.&Apache::loncommon::end_page()); + ''); + &endSettingsScreen($r); + $r->print(&Apache::loncommon::end_page()); } sub secgroup_lister { @@ -3443,11 +3479,10 @@ sub overview { text=>"Overview Mode"}); my $start_page=&Apache::loncommon::start_page('Modify Parameters'); my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs('Overview'); - $r->print(< -ENDOVER + $r->print($start_page.$breadcrumbs); + &startSettingsScreen($r,'parmset'); + $r->print('
'); + # Store modified &storedata($r,$crs,$dom); @@ -3552,8 +3587,9 @@ ENDOVER } $r->print(&Apache::loncommon::end_data_table().'

'. ''. - '

'. - &Apache::loncommon::end_page()); + '

'); + &endSettingsScreen($r); + $r->print(&Apache::loncommon::end_page()); } sub date_shift_one { @@ -3565,10 +3601,8 @@ sub date_shift_one { text=>"Shifting Dates"}); my $start_page=&Apache::loncommon::start_page('Shift Dates'); my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs('Shift'); - $r->print(<print($start_page.$breadcrumbs); + &startSettingsScreen($r,'parmset'); $r->print('
'. '
'.&mt('Any User').'
'. @@ -3581,6 +3615,7 @@ ENDOVER ''. ''. ''); + &endSettingsScreen($r); $r->print(&Apache::loncommon::end_page()); } @@ -3592,16 +3627,15 @@ sub date_shift_two { text=>"Shifting Dates"}); my $start_page=&Apache::loncommon::start_page('Shift Dates'); my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs('Shift'); - $r->print(<print($start_page.$breadcrumbs); + &startSettingsScreen($r,'parmset'); my $timeshifted=&Apache::lonhtmlcommon::get_date_from_form('timeshifted'); $r->print(&mt('Shifting all dates such that [_1] becomes [_2]', &Apache::lonlocal::locallocaltime($env{'form.timebase'}), &Apache::lonlocal::locallocaltime($timeshifted))); my $delta=$timeshifted-$env{'form.timebase'}; &dateshift($delta); + &endSettingsScreen($r); $r->print(&Apache::loncommon::end_page()); } @@ -3646,7 +3680,7 @@ sub parse_key { sub header { - return &Apache::loncommon::start_page('Parameter Manager'); + return &Apache::loncommon::start_page('Settings'); } @@ -3655,7 +3689,8 @@ sub print_main_menu { my ($r,$parm_permission)=@_; # $r->print(&header()); - $r->print(&Apache::lonhtmlcommon::breadcrumbs('Parameter Manager')); + $r->print(&Apache::lonhtmlcommon::breadcrumbs('Content and Problem Settings')); + &startSettingsScreen($r,'parmset'); $r->print(< @@ -3670,7 +3705,7 @@ ENDMAINFORMHEAD my $lc_crstype = lc($crstype); my @menu = - ( { categorytitle=>"Settings for this $crstype", + ( { categorytitle=>"Content Settings for this $crstype", items => [ { linktext => 'Portfolio Metadata', url => '/adm/parmset?action=setrestrictmeta', @@ -3731,6 +3766,7 @@ ENDMAINFORMHEAD }]} ); $r->print(&Apache::lonhtmlcommon::generate_menu(@menu)); + &endSettingsScreen($r); return; } @@ -3806,6 +3842,7 @@ sub order_meta_fields { text=>"Restrict Metadata"}, {text=>"Order Metadata"}); $r->print(&Apache::lonhtmlcommon::breadcrumbs('Order Metadata')); + &startSettingsScreen($r,'parmset'); if ($env{'form.storeorder'}) { my $newpos = $env{'form.newpos'} - 1; my $currentpos = $env{'form.currentpos'} - 1; @@ -3875,6 +3912,7 @@ sub order_meta_fields { $idx ++; } $r->print('
'.&mt('Currently set date:').''. &Apache::lonlocal::locallocaltime($env{'form.timebase'}).'
'); + &endSettingsScreen($r); return 'ok'; } @@ -3894,6 +3932,7 @@ sub addmetafield { text=>"Add Metadata Field"}); $r->print(&Apache::loncommon::start_page('Add Metadata Field')); $r->print(&Apache::lonhtmlcommon::breadcrumbs('Add Metadata Field')); + &startSettingsScreen($r,'parmset'); my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'}; my $crs = $env{'course.'.$env{'request.course.id'}.'.num'}; if (exists($env{'form.undelete'})) { @@ -3935,6 +3974,7 @@ sub addmetafield { $r->print(''); } $r->print(''); + &endSettingsScreen($r); } @@ -3949,6 +3989,7 @@ sub setrestrictmeta { text=>"Restrict Metadata"}); $r->print(&Apache::loncommon::start_page('Restrict Metadata')); $r->print(&Apache::lonhtmlcommon::breadcrumbs('Restrict Metadata')); + &startSettingsScreen($r,'parmset'); my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'}; my $crs = $env{'course.'.$env{'request.course.id'}.'.num'}; my $key_base = $env{'course.'.$env{'request.course.id'}.'.'}; @@ -4021,6 +4062,7 @@ ENDButtons $buttons ENDenv + &endSettingsScreen($r); $r->print(&Apache::loncommon::end_page()); return 'ok'; } @@ -4064,11 +4106,9 @@ sub defaultsetter { my $start_page = &Apache::loncommon::start_page('Parameter Setting Default Actions'); my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs('Defaults'); - $r->print(< -ENDDEFHEAD + $r->print($start_page.$breadcrumbs); + &startSettingsScreen($r,'parmset'); + $r->print('

'); my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'}; my $crs = $env{'course.'.$env{'request.course.id'}.'.num'}; @@ -4213,8 +4253,9 @@ ENDYESNO } $r->print(&Apache::loncommon::end_data_table(). "\n".'
'."\n". - &Apache::loncommon::end_page()); + &mt('Save').'" />'."\n"); + &endSettingsScreen($r); + $r->print(&Apache::loncommon::end_page()); return; } @@ -4306,7 +4347,7 @@ sub parm_change_log { text=>"Parameter Change Log"}); $r->print(&Apache::loncommon::start_page('Parameter Change Log')); $r->print(&Apache::lonhtmlcommon::breadcrumbs('Parameter Change Log')); - + &startSettingsScreen($r,'parmset'); my %parmlog=&Apache::lonnet::dump('nohist_parameterlog', $env{'course.'.$env{'request.course.id'}.'.domain'}, $env{'course.'.$env{'request.course.id'}.'.num'}); @@ -4474,6 +4515,7 @@ sub parm_change_log { || $shown<=$env{'form.show'})) { last; } } $r->print(&Apache::loncommon::end_data_table()); + &endSettingsScreen($r); $r->print(&Apache::loncommon::end_page()); } @@ -4571,7 +4613,7 @@ sub check_for_course_info { return 0; } -sub parameter_release_vars { +sub questiontype_release_vars { my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; my $chome = $env{'course.'.$env{'request.course.id'}.'.home'}; my $chostname = &Apache::lonnet::hostname($chome); @@ -4580,42 +4622,35 @@ sub parameter_release_vars { return ($chostname,$cmajor,$cminor); } -sub parameter_releasecheck { - my ($name,$value,$needsrelease,$chostname,$cmajor,$cminor) = @_; +sub questiontype_releasecheck { + my ($questiontype,$needsrelease,$chostname,$cmajor,$cminor) = @_; my $needsnewer; my ($needsmajor,$needsminor) = split(/\./,$needsrelease); if (($cmajor < $needsmajor) || ($cmajor == $needsmajor && $cminor < $needsminor)) { $needsnewer = 1; } else { - &Apache::lonnet::update_released_required($Apache::lonnet::needsrelease{'parameter:'.$name.':'.$value}); + &Apache::lonnet::update_released_required($Apache::lonnet::needsrelease{'parameter:type:'.$questiontype}); } return $needsnewer; } sub oldversion_warning { - my ($name,$value,$chostname,$cmajor,$cminor,$needsrelease) = @_; + my ($questiontype,$chostname,$cmajor,$cminor,$needsrelease) = @_; my $desc; - my %stringtypes = ( - type => 'string_questiontype', - discussvote => 'string_discussvote', - ); - if (exists($stringtypes{$name})) { - if (ref($strings{$stringtypes{$name}}) eq 'ARRAY') { - foreach my $possibilities (@{ $strings{$stringtypes{$name}} }) { - next unless (ref($possibilities) eq 'ARRAY'); - my ($parmval, $description) = @{ $possibilities }; - if ($parmval eq $value) { - $desc = $description; - last; - } + if (ref($strings{'string_questiontype'}) eq 'ARRAY') { + foreach my $possibilities (@{ $strings{'string_questiontype'} }) { + next unless (ref($possibilities) eq 'ARRAY'); + my ($name, $description) = @{ $possibilities }; + if ($name eq $questiontype) { + $desc = $description; + last; } } } - my $standard_name = &standard_parameter_names($name); return '

'. - &mt('[_1] was [_2]not[_3] set to [_4].', - $standard_name,'','','"'.$desc.'"').'
'. + &mt('Question Type was [_1]not[_2] set to [_3].', + '','','"'.$desc.'"').'
'. &mt('LON-CAPA version ([_1]) installed on home server ([_2]) does not meet version requirements ([_3] or newer).', $cmajor.'.'.$cminor,$chostname, $needsrelease). @@ -4636,12 +4671,13 @@ sub handler { 'pres_marker', 'pres_value', 'pres_type', + 'filter','part', 'udom','uname','symb','serial','timebase']); &Apache::lonhtmlcommon::clear_breadcrumbs(); &Apache::lonhtmlcommon::add_breadcrumb({href=>"/adm/parmset", - text=>"Parameter Manager", + text=>"Content and Problem Settings", faq=>10, bug=>'Instructor Interface', help =>