--- loncom/interface/lonparmset.pm 2003/06/04 18:23:54 1.95.2.1 +++ loncom/interface/lonparmset.pm 2003/07/16 19:36:02 1.116 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to set parameters for assessments # -# $Id: lonparmset.pm,v 1.95.2.1 2003/06/04 18:23:54 albertel Exp $ +# $Id: lonparmset.pm,v 1.116 2003/07/16 19:36:02 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -58,7 +58,6 @@ use Apache::lonnet; use Apache::Constants qw(:common :http REDIRECT); use Apache::lonhtmlcommon(); use Apache::loncommon; -use Apache::lonmenu; use GDBM_File; use Apache::lonhomework; use Apache::lonxml; @@ -286,14 +285,10 @@ sub plink { sub startpage { - my ($r,$id,$udom,$csec,$uname)=@_; - - my $bodytag=&Apache::lonmenu::registerurl(). - &Apache::loncommon::bodytag('Set Course Parameters','', - 'onUnload="'. - &Apache::lonmenu::unloadevents().';pclose();" onLoad="'. - &Apache::lonmenu::loadevents().'"'). - &Apache::lonmenu::regflush(); + my ($r,$id,$udom,$csec,$uname,$have_assesments)=@_; + + my $bodytag=&Apache::loncommon::bodytag('Set Course Parameters','', + 'onUnload="pclose()"'); my $chooseopt=&Apache::loncommon::select_dom_form($udom,'udom').' '. &Apache::loncommon::selectstudent_link('parmform','uname','udom'); my $selscript=&Apache::loncommon::studentbrowser_javascript(); @@ -347,15 +342,23 @@ $selscript $bodytag - -

Course Environment

+

Course Assessments

+ +Use Assignment Parameter Helper, a +simpler interface to set open, due, or answer open dates for problems or +sequences.
 
+ENDHEAD + + if (!$have_assesments) { + $r->print('There are no assesment parameters in this course to set.
'); + } else { + $r->print(< Section/Group: @@ -371,7 +374,7 @@ $chooseopt ENDHEAD - + } } sub print_row { @@ -485,9 +488,15 @@ sub print_row { sub print_td { my ($r,$which,$defbg,$result,$outpar,$mprefix,$value,$typeoutpar,$display)=@_; $r->print(''. - &plink($$typeoutpar[$which],$$display{$value},$$outpar[$which], - $mprefix."$which",'parmform.pres','psub').''."\n"); + ' align="center">'); + if ($which<10) { + $r->print(&plink($$typeoutpar[$which], + $$display{$value},$$outpar[$which], + $mprefix."$which",'parmform.pres','psub')); + } else { + $r->print(&valout($$outpar[$which],$$typeoutpar[$which])); + } + $r->print(''."\n"); } sub get_env_multiple { @@ -725,8 +734,8 @@ sub assessparms { "Unknown user '$uname' at domain '$udom'"; $uname=''; } else { - $csec=&Apache::lonnet::usection($udom,$uname, - $ENV{'request.course.id'}); + $csec=&Apache::lonnet::getsection($udom,$uname, + $ENV{'request.course.id'}); if ($csec eq '-1') { $message="". "User '$uname' at domain '$udom' not ". @@ -766,6 +775,7 @@ sub assessparms { $mapp{'0.0'} = ''; $symbp{'0.0'} = ''; + # ---------------------------------------------------------- Anything to store? if ($ENV{'form.pres_marker'}) { my ($sresid,$spnam,$snum)=split(/\&/,$ENV{'form.pres_marker'}); @@ -848,12 +858,13 @@ sub assessparms { $message.="Write Error: $1"; } # ---------------------------------------------------------------- Done storing - $message.='

Changes can take up to 10 minutes before being active for all students

'; + $message.='

Changes can take up to 10 minutes before being active for all students.'.&Apache::loncommon::help_open_topic('Caching').'

'; } # --------------------------------------------- Devalidate cache for this child - &Apache::lonnet::devalidatecourseresdata( + &Apache::lonnet::devalidatecourseresdata( $ENV{'course.'.$ENV{'request.course.id'}.'.num'}, $ENV{'course.'.$ENV{'request.course.id'}.'.domain'}); + &Apache::lonnet::clear_EXT_cache_status(); # -------------------------------------------------------------- Get coursedata %courseopt = &Apache::lonnet::dump ('resourcedata', @@ -882,7 +893,16 @@ sub assessparms { if ($psprt[0] eq "all" || !@psprt) {@psprt = (keys %allparts);} # ------------------------------------------------------------------ Start page - &startpage($r,$id,$udom,$csec,$uname); + my $have_assesments=1; + if (scalar(keys(%allkeys)) eq 0) { $have_assesments=0; } + + &startpage($r,$id,$udom,$csec,$uname,$have_assesments); + + if (!$have_assesments) { + untie(%bighash); + untie(%parmhash); + return ''; + } # if ($ENV{'form.url'}) { # $r->print(''); @@ -897,16 +917,9 @@ sub assessparms { $r->print('

'.$message.'

'); - $r->print(''); - my $submitmessage; - if (($prevvisit) || ($pschp) || ($pssymb)) { - $submitmessage = "Update Display"; - } else { - $submitmessage = "Display"; - } if (!$pssymb) { - $r->print('\n"); - - $r->print(''); - $r->print(''); + $r->print(''); $r->print(''); $r->print(''); + $r->print(' name="showoptions" value="show">Show More Options
'); # $r->print(""); # $r->print(""); # $r->print(""); @@ -1025,7 +1036,13 @@ sub assessparms { } } - $r->print('

Select Parameter Level'); + $r->print('
Select Parameter Level'); $r->print('

Select Enclosing Map or Folder

print(" checked ");} - $r->print(' name="showoptions" value="show" onclick="form.submit();">Show More Options
Show: $showoptions
pscat: @pscat
psprt: @psprt
'); + $r->print('
'); + if (($prevvisit) || ($pschp) || ($pssymb)) { + $submitmessage = "Update Course Assessment Parameter Display"; + } else { + $submitmessage = "Set Course Assessment Parameters"; + } + $r->print(''); # my @temp_psprt; # foreach my $t (@psprt) { @@ -1048,9 +1065,7 @@ sub assessparms { my $csuname=$ENV{'user.name'}; my $csudom=$ENV{'user.domain'}; - if ($parmlev eq 'full' || $parmlev eq 'brief') { - my $coursespan=$csec?8:5; $r->print('

'); $r->print(''); @@ -1070,7 +1085,7 @@ ENDTABLETWO } $r->print(< - + ENDTABLEHEADFOUR @@ -1367,7 +1382,7 @@ ENDMAPONE =item crsenv -Show course data and parameters. This is a large routine that should +Show and set course data and parameters. This is a large routine that should be simplified and shortened... someday. Inputs: $r @@ -1385,50 +1400,71 @@ sub crsenv { 'Set Course Environment Parameters'); my $dom = $ENV{'course.'.$ENV{'request.course.id'}.'.domain'}; my $crs = $ENV{'course.'.$ENV{'request.course.id'}.'.num'}; -# -------------------------------------------------- Go through list of changes + + # + # Go through list of changes foreach (keys %ENV) { - if ($_=~/^form\.(.+)\_setparmval$/) { - my $name=$1; - my $value=$ENV{'form.'.$name.'_value'}; - if ($name eq 'newp') { - $name=$ENV{'form.newp_name'}; - } - if ($name eq 'url') { - $value=~s/^\/res\///; - my $bkuptime=time; - my @tmp = &Apache::lonnet::get - ('environment',['url'],$dom,$crs); - $setoutput.='Backing up previous URL: '. - &Apache::lonnet::put - ('environment', - {'top level map backup '.$bkuptime => $tmp[1] }, - $dom,$crs). - '
'; + next if ($_!~/^form\.(.+)\_setparmval$/); + my $name = $1; + my $value = $ENV{'form.'.$name.'_value'}; + if ($name eq 'newp') { + $name = $ENV{'form.newp_name'}; + } + if ($name eq 'url') { + $value=~s/^\/res\///; + my $bkuptime=time; + my @tmp = &Apache::lonnet::get + ('environment',['url'],$dom,$crs); + $setoutput.='Backing up previous URL: '. + &Apache::lonnet::put + ('environment', + {'top level map backup '.$bkuptime => $tmp[1] }, + $dom,$crs). + '
'; + } + # + # Deal with modified default spreadsheets + if ($name =~ /^spreadsheet_default_(classcalc| + studentcalc| + assesscalc)$/x) { + my $sheettype = $1; + if ($sheettype eq 'classcalc') { + # no need to do anything since viewing the sheet will + # cause it to be updated. + } elsif ($sheettype eq 'studentcalc') { + # expire all the student spreadsheets + &Apache::lonnet::expirespread('','','studentcalc'); + } else { + # expire all the assessment spreadsheets + # this includes non-default spreadsheets, but better to + # be safe than sorry. + &Apache::lonnet::expirespread('','','assesscalc'); + # expire all the student spreadsheets + &Apache::lonnet::expirespread('','','studentcalc'); } - if ($name =~ /^spreadsheet_default_(classcalc| - studentcalc| - assesscalc)$/x) { - my $sheettype = $1; - if ($sheettype eq 'classcalc') { - # no need to do anything since viewing the sheet will - # cause it to be updated. - } elsif ($sheettype eq 'studentcalc') { - # expire all the student spreadsheets - &Apache::lonnet::expirespread('','','studentcalc'); - } else { - # expire all the default assessment spreadsheets - } + } + # + # Deal with the enrollment dates + if ($name =~ /^default_enrollment_(start|end)_date$/) { + $value=&Apache::lonhtmlcommon::get_date_from_form($name.'_value'); + } + # + # Let the user know we made the changes + if ($name) { + my $put_result = &Apache::lonnet::put('environment', + {$name=>$value},$dom,$crs); + if ($put_result eq 'ok') { + $setoutput.='Set '.$name.' to '.$value.'.
'; + } else { + $setoutput.='Unable to set '.$name.' to '. + ''.$value.' due to '.$put_result.'.
'; } - - if ($name) { - $setoutput.='Setting '.$name.' to '. - $value.': '. - &Apache::lonnet::put - ('environment',{$name=>$value},$dom,$crs). - '
'; - } } } +# ------------------------- Re-init course environment entries for this session + + &Apache::lonnet::coursedescription($ENV{'request.course.id'}); + # -------------------------------------------------------- Get parameters again my %values=&Apache::lonnet::dump('environment',$dom,$crs); @@ -1438,7 +1474,7 @@ sub crsenv { ('url' => 'Top Level Map '. '". - 'Browse
'. + 'Select Map
'. 'Modification may make assessment data '. 'inaccessible', 'description' => 'Course Description', @@ -1447,7 +1483,7 @@ sub crsenv { 'default_xml_style' => 'Default XML Style File '. 'Browse
", + ",'sty')\">Select Style File
", 'question.email' => 'Feedback Addresses for Resource Content '. 'Questions
(user:domain,'. 'user:domain(section;section;...;*;...),...)', @@ -1473,43 +1509,85 @@ sub crsenv { => 'Default Course Spreadsheet '. 'Browse
", + ",'spreadsheet')\">Select Spreadsheet File
", 'spreadsheet_default_studentcalc' => 'Default Student Spreadsheet '. 'Browse
", + ",'spreadsheet')\">Select Spreadsheet File
", 'spreadsheet_default_assesscalc' => 'Default Assessment Spreadsheet '. 'Browse
", + ",'spreadsheet')\">Select Spreadsheet File
", 'allow_limited_html_in_feedback' => 'Allow limited HTML in discussion posts
'. - '(Set value to yes to allow)', + '(Set value to "yes" to allow)', 'rndseed' => 'Randomization algorithm used
'. 'Modifying this will make problems '. 'have different numbers and answers', 'problem_stream_switch' - => 'Allow problems to be splitted over pages
'. - ' (yes if allow anything else if not)' - ); - foreach (keys(%values)) { - unless ($descriptions{$_}) { - $descriptions{$_}=$_; + => 'Allow problems to be split over pages
'. + ' ("yes" if allowed, anything else if not)', + 'anonymous_quiz' + => 'Anonimous quiz/exam
'. + ' (yes to avoid print students names )', + 'default_enrollment_start_date' => 'Default beginning date '. + 'when enrolling students', + 'default_enrollment_end_date' => 'Default ending date '. + 'when enrolling students', + 'languages' => 'Languages used', + 'disable_receipt_display' + => 'Disable display of problem receipts
'. + ' ("yes" to disable, anything else if not)' + ); + my @Display_Order = ('url','description','courseid', + 'default_xml_style','pageseparators', + 'question.email','comment.email','policy.email', + 'pch.roles.denied','pch.users.denied', + 'allow_limited_html_in_feedback', + 'languages', + 'rndseed', + 'problem_stream_switch', + 'disable_receipt_display', + 'spreadsheet_default_classcalc', + 'spreadsheet_default_studentcalc', + 'spreadsheet_default_assesscalc', + 'hideemptyrows', + 'default_enrollment_start_date', + 'default_enrollment_end_date', + ); + foreach my $parameter (sort(keys(%values))) { + if (! $descriptions{$parameter}) { + $descriptions{$parameter}=$parameter; + push(@Display_Order,$parameter); } } - foreach (sort keys %descriptions) { + foreach my $parameter (@Display_Order) { + my $description = $descriptions{$parameter}; # onchange is javascript to automatically check the 'Set' button. my $onchange = 'onFocus="javascript:window.document.forms'. - '[\'envform\'].elements[\''.$_.'_setparmval\']'. + "['envform'].elements['".$parameter."_setparmval']". '.checked=true;"'; - $output.='
'. - ''. - ''. - ''."\n"; + $output .= ''; + if ($parameter =~ /^default_enrollment_(start|end)_date$/) { + $output .= ''; + } else { + $output .= ''; + } + $output .= ''; + $output .= "\n"; } my $onchange = 'onFocus="javascript:window.document.forms'. '[\'envform\'].elements[\'newp_setparmval\']'. @@ -1589,13 +1667,13 @@ sub handler { } &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}); - $r->content_type('text/html'); - $r->send_http_header; - # ----------------------------------------------------- Needs to be in a course if (($ENV{'request.course.id'}) && (&Apache::lonnet::allowed('opa',$ENV{'request.course.id'}))) { + + $r->content_type('text/html'); + $r->send_http_header; $coursename=$ENV{'course.'.$ENV{'request.course.id'}.'.description'};
Assessment URL and TitleTypeEnclosing Map or FolderPart No.Parameter NameEnclosing Map or FolderPartParameter Name defaultfrom Enclosing Map or Folder generalfor Enclosing Map or Folderfor Resource
'.$descriptions{$_}.'
'.$description.''. + &Apache::lonhtmlcommon::date_setter('envform', + $parameter.'_value', + $values{$parameter}, + $onchange). + ''. + &Apache::lonhtmlcommon::textbox($parameter.'_value', + $values{$parameter}, + 40,$onchange).''. + &Apache::lonhtmlcommon::checkbox($parameter.'_setparmval'). + '