--- loncom/homework/lonhomework.pm 2009/03/04 16:00:14 1.304 +++ loncom/homework/lonhomework.pm 2010/09/27 22:15:32 1.321 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # The LON-CAPA Homework handler # -# $Id: lonhomework.pm,v 1.304 2009/03/04 16:00:14 bisitz Exp $ +# $Id: lonhomework.pm,v 1.321 2010/09/27 22:15:32 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -47,6 +47,7 @@ use Apache::externalresponse(); use Apache::rankresponse(); use Apache::matchresponse(); use Apache::chemresponse(); +use Apache::functionplotresponse(); use Apache::drawimage(); use Apache::Constants qw(:common); use Apache::loncommon(); @@ -111,7 +112,11 @@ sub get_target { } elsif ( $env{'form.grade_target'} eq 'webgrade' && ($Apache::lonhomework::queuegrade eq 'F' )) { return ($env{'form.grade_target'}); - } + } elsif ($env{'form.grade_target'} eq 'answer') { + if ($env{'form.answer_output_mode'} eq 'tex') { + return ($env{'form.grade_target'}); + } + } if ($env{'form.webgrade'} && ($Apache::lonhomework::modifygrades eq 'F' || $Apache::lonhomework::queuegrade eq 'F' )) { @@ -170,16 +175,6 @@ sub setup_vars { # return ';$external::target='.$target.';'; } -sub createmenu { - my ($which,$request)=@_; - if ($which eq 'grade') { - $request->print(''); - } -} - sub proctor_checked_in { my ($slot_name,$slot,$type)=@_; my @possible_proctors=split(",",$slot->{'proctor'}); @@ -297,12 +292,15 @@ sub check_slot_access { return ('WAITING_FOR_GRADE'); } - # no slot is currently open, and has been checked in for this version - # previous slot is therefore CLOSED, so therefore the problem is + # Previously used slot is no longer open, and has been checked in for this version. + # However, the problem is not closed, and potentially, another slot might be + # used to gain access to it to work on it, until the due date is reached, and the + # problem then becomes CLOSED. Therefore return the slotstatus - + # (which will be NOT_IN_SLOT). if (!defined($slot_name) && $checkedin && $type eq 'problem') { - return ('CLOSED',$datemsg); + return ($slotstatus); } if ($slotstatus eq 'NOT_IN_A_SLOT' @@ -685,12 +683,24 @@ sub handle_save_or_undo { sub analyze_header { my ($request) = @_; my $js = &Apache::structuretags::setmode_javascript(); - my $result = - &Apache::loncommon::start_page('Analyzing a problem',$js); + # Breadcrumbs + my $brcrum = [{'href' => &Apache::loncommon::authorspace(), + 'text' => 'Construction Space'}, + {'href' => '', + 'text' => 'Problem Testing'}, + {'href' => '', + 'text' => 'Analyzing a problem'}]; + + my $result = + &Apache::loncommon::start_page('Analyzing a problem', + $js, + {'bread_crumbs' => $brcrum,}) + .&Apache::loncommon::head_subbox( + &Apache::loncommon::CSTR_pageheader()); $result .= &Apache::lonxml::message_location().' -
'. ''. @@ -700,10 +710,10 @@ sub analyze_header { 'onclick="javascript:setmode(this.form,'."'editxml'".')" /> -
+
-
+
'; &Apache::lonxml::add_messages(\$result); @@ -777,37 +787,62 @@ sub analyze { } &Apache::lonhtmlcommon::Update_PrgWin($request,\%prog_state, &mt('Analyzing Results')); - $request->print('
'.&mt('List of possible answers').': '); + $request->print('
' + .'

' + .&mt('List of possible answers') + .'

' + ); foreach my $part (sort(keys(%allparts))) { if (defined(@{ $overall{$part.'.answer'} })) { for (my $i=0;$iprint(''); + $request->print('' + .&Apache::loncommon::end_data_table_header_row() + ); my %frequency; foreach my $answer (sort {$a->[0] <=> $b->[0]} (@{ $overall{$part.'.answer'}[$i] })) { $frequency{join("\0",@{ $answer })}++; } - $request->print(''); + $request->print(&Apache::loncommon::start_data_table_header_row() + .'' + .'' + .&Apache::loncommon::end_data_table_header_row() + ); foreach my $answer (sort {(split("\0",$a))[0] <=> (split("\0",$b))[0]} (keys(%frequency))) { - $request->print(''); + $request->print(&Apache::loncommon::start_data_table_row() + .'' + .'' + .&Apache::loncommon::end_data_table_row() + ); } - $request->print('
'.&mt('Part').' '.$part); + $request->print(&Apache::loncommon::start_data_table() + .&Apache::loncommon::start_data_table_header_row() + .'' + .&mt('Part').' '.$part + ); if (scalar(@{ $overall{$part.'.answer'} }) > 1) { - $request->print(&mt(' Answer [_1]',$i+1)); + $request->print(' '.&mt('Answer [_1]',$i+1)); } - $request->print('
'.&mt('Answer').''.&mt('Frequency').'
(' - .&mt('click for example').')
'.&mt('Answer').''.&mt('Frequency').'
' + .'('.&mt('click for example').')
'. - join('',split("\0",$answer)). - ''.$frequency{$answer}. - '
' + .join('',split("\0",$answer)) + .'' + .''.$frequency{$answer}.'' + .'
'); + $request->print(&Apache::loncommon::end_data_table()); } } else { - $request->print('

'.&mt('Response').' '.$part.' '. - &mt('is not analyzable at this time').'

'); + $request->print('

' + .&mt('Response [_1] is not analyzable at this time.',$part) + .'

' + ); } } if (scalar(keys(%allparts)) == 0 ) { - $request->print('

'.&mt('Found no analyzable responses in this problem, currently only Numerical, Formula and String response styles are supported.').'

'); + $request->print('

' + .&mt('Found no analyzable responses in this problem.' + .' Currently only Numerical, Formula and String response styles are supported.') + .'

' + ); } &Apache::lonhtmlcommon::Close_PrgWin($request,\%prog_state); &analyze_footer($request); @@ -855,8 +890,12 @@ sub editxmlmode { my $result; my $problem=&Apache::lonnet::getfile($file); if ($problem eq -1) { - &Apache::lonxml::error(" ".&mt('Unable to find'). - " $file"); + &Apache::lonxml::error( + ' ' + .&mt('Unable to find [_1]', + ''.$file.'') + .''); + $problem=''; } if (defined($env{'form.editxmltext'}) || defined($env{'form.Undo'})) { @@ -879,25 +918,36 @@ sub editxmlmode { &Apache::loncommon::resize_textarea_js(). &Apache::structuretags::setmode_javascript(). &Apache::lonhtmlcommon::dragmath_js("EditMathPopup"); - my $only_body = ($env{'environment.remote'} eq 'off')? 0 : 1; my $dragmath_button = &Apache::lonhtmlcommon::dragmath_button("LC_editxmltext",1); + + # Breadcrumbs + my $brcrum = [{'href' => &Apache::loncommon::authorspace(), + 'text' => 'Construction Space'}, + {'href' => '', + 'text' => 'Problem Editing'}]; + my $start_page = &Apache::loncommon::start_page(&mt("EditXML [_1]",$file),$js, {'no_auto_mt_title' => 1, - 'only_body' => $only_body, + 'only_body' => 0, 'add_entries' => { 'onresize' => q[resize_textarea('LC_editxmltext','LC_aftertextarea')], 'onload' => q[resize_textarea('LC_editxmltext','LC_aftertextarea')], - }}); - $result.=$start_page. - &renderpage($request,$file,['no_output_web'],1). - '
'. &Apache::structuretags::remember_problem_state().'
@@ -915,7 +965,7 @@ sub editxmlmode { -
+
'.&Apache::lonxml::message_location().' ' . ' @@ -963,7 +1013,7 @@ sub renderpage { my $filename=(split('/',$file))[-1]; my $error = " ".&mt('Unable to find [_1]', - ' '.$filename.'') + ''.$filename.'') .""; $result.= &Apache::loncommon::simple_error_page($request,'Not available', @@ -1045,15 +1095,21 @@ sub get_template_list { } my $count = 0; my $currentcategory=''; + my $first = 1; foreach my $file (@files) { next if ($file->[1] !~ /\S/); if ($file->[2] ne $currentcategory) { $currentcategory=$file->[2]; if ((!$seconddiv) && ($count >= $midpoint)) { - $result .= ''."\n".'
'."\n"; + $result .= '
'."\n".'
'."\n"; $seconddiv = 1; + } elsif (!$first) { + $result.='
'."\n"; + } else { + $first = 0; } - $result.='

'.$currentcategory.'

'; + $result.= '
'."\n" + .'

'.$currentcategory.'

'."\n"; $count++; } $result .= @@ -1064,11 +1120,13 @@ sub get_template_list { } my $filename=$file->[0]; $filename=~s/^\/home\/httpd\/html//; - $result.=' '.&mt('Example').'
'."\n"; + $result.=' ' + .''.&mt('Example').'' + .'
'."\n"; $count ++; } if ($numfiles > 0) { - $result .= '
'."\n".''."\n"; + $result .= ''."\n".''."\n"; } return $result; } @@ -1102,26 +1160,33 @@ sub newproblem { my $dest = &Apache::lonnet::filelocation("",$request->uri); my $errormsg; my $instructions; + my $brcrum = [{'href' => &Apache::loncommon::authorspace(), + 'text' => 'Construction Space'}, + {'href' => '', + 'text' => "Create New $extension"}]; my $start_page = - &Apache::loncommon::start_page("Create New $extension"); - $request->print(" -$start_page -

".&mt("Creating a new $extension resource.")."

+ &Apache::loncommon::start_page("Create New $extension", + undef, + {'bread_crumbs' => $brcrum,}); + $request->print( + $start_page + .&Apache::loncommon::head_subbox( + &Apache::loncommon::CSTR_pageheader()) + .'

'.&mt("Creating a new $extension resource.")."

$errormsg ".&mt("The requested file [_1] currently does not exist.", - "$shownurl")." -

- -".&mt("To create a new $extension, select a template from the". - " list below. Then click on the \"Create $extension\" button.")." -

"); + ''.$shownurl.'').' +

+'.&mt("To create a new $extension, select a template from the". + " list below. Then click on the \"Create $extension\" button.").' +

'); if (defined($templatelist)) { $request->print($templatelist); } $request->print('
'); - $request->print("

".&Apache::loncommon::end_page()); + $request->print('
'.&Apache::loncommon::end_page()); } return; }
- '.&mt('Problem Editing').&Apache::loncommon::help_open_topic('Problem_Editor_XML_Index').' +

'.&mt('Problem Editing').' '.&Apache::loncommon::help_open_topic('Problem_Editor_XML_Index').'

'.&Apache::loncommon::helpLatexCheatsheet('Problem_LON-CAPA_Functions','Script Functions').'