version 1.421, 2008/05/27 22:25:56
|
version 1.481, 2010/12/20 18:33:20
|
Line 27
|
Line 27
|
# |
# |
### |
### |
|
|
|
=pod |
|
|
|
=head1 NAME |
|
|
|
Apache::structuretags |
|
|
|
=head1 SYNOPSIS |
|
|
|
|
|
This is part of the LearningOnline Network with CAPA project |
|
described at http://www.lon-capa.org. |
|
|
|
|
|
=head1 NOTABLE SUBROUTINES |
|
|
|
=over |
|
|
|
=item |
|
|
|
=back |
|
|
|
=cut |
|
|
|
|
package Apache::structuretags; |
package Apache::structuretags; |
|
|
Line 36 use Apache::File();
|
Line 59 use Apache::File();
|
use Apache::lonmenu; |
use Apache::lonmenu; |
use Apache::lonlocal; |
use Apache::lonlocal; |
use Apache::lonxml; |
use Apache::lonxml; |
|
use Apache::londefdef; |
use Apache::lonenc(); |
use Apache::lonenc(); |
use Time::HiRes qw( gettimeofday tv_interval ); |
use Time::HiRes qw( gettimeofday tv_interval ); |
use lib '/home/httpd/lib/perl/'; |
use lib '/home/httpd/lib/perl/'; |
use LONCAPA; |
use LONCAPA; |
|
|
BEGIN { |
BEGIN { |
&Apache::lonxml::register('Apache::structuretags',('block','languageblock','translated','instructorcomment','while','randomlist','problem','library','web','tex','part','preduedate','postanswerdate','solved','notsolved','problemtype','startouttext','endouttext','simpleeditbutton','definetag')); |
&Apache::lonxml::register('Apache::structuretags',('block','languageblock','translated','instructorcomment','while','randomlist','problem','library','web','tex','part','preduedate','postanswerdate','solved','notsolved','problemtype','startpartmarker','startouttext','endpartmarker','endouttext','simpleeditbutton','definetag')); |
} |
} |
|
|
sub start_web { |
sub start_web { |
Line 74 sub start_tex {
|
Line 98 sub start_tex {
|
if ($target ne 'edit' && $target ne 'modified') { |
if ($target ne 'edit' && $target ne 'modified') { |
my $bodytext=&Apache::lonxml::get_all_text("/tex",$parser,$style); |
my $bodytext=&Apache::lonxml::get_all_text("/tex",$parser,$style); |
if ($target eq 'tex') { |
if ($target eq 'tex') { |
return $bodytext.' '; |
|
|
# If inside a table, occurrences of \\ must be removed; |
|
# else the table blows up. |
|
|
|
if (&Apache::londefdef::is_inside_of($tagstack, "table")) { |
|
$bodytext =~ s/\\\\//g; |
|
} |
|
return $bodytext.'{}'; |
} |
} |
} elsif ($target eq "edit" ) { |
} elsif ($target eq "edit" ) { |
my $bodytext = |
my $bodytext = |
Line 130 function setmode(form,probmode) {
|
Line 161 function setmode(form,probmode) {
|
ENDSCRIPT |
ENDSCRIPT |
} |
} |
|
|
|
sub file_delchk_js { |
|
my $delfilewarn = &mt('You have indicated you wish to delete some files previously included for submission.').'\\n'. |
|
&mt('Deleted files will not be graded.').' '. |
|
&mt('Submit Answer?'); |
|
return <<"ENDSCRIPT"; |
|
<script type="text/javascript"> |
|
function file_deletion_check(formname) { |
|
var str = new RegExp("^HWFILE.+_delete\$"); |
|
var delfilecount = 0; |
|
var elemnum = formname.elements.length; |
|
if (elemnum == 0) { |
|
return true; |
|
} |
|
for (i=0; i<formname.elements.length; i++) { |
|
var id = formname.elements[i].id; |
|
if (id != '') { |
|
if (str.test(id)) { |
|
if (formname.elements[i].type == 'checkbox') { |
|
if (formname.elements[i].checked) { |
|
delfilecount ++; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
if (delfilecount > 0) { |
|
if (confirm("$delfilewarn")) { |
|
return true; |
|
} else { |
|
return false; |
|
} |
|
} else { |
|
return true; |
|
} |
|
} |
|
</script> |
|
ENDSCRIPT |
|
} |
|
|
sub page_start { |
sub page_start { |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$name, |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$name, |
$extra_head)=@_; |
$extra_head)=@_; |
Line 146 sub page_start {
|
Line 216 sub page_start {
|
$parstack,$parser,$safeeval); |
$parstack,$parser,$safeeval); |
} |
} |
|
|
$extra_head .= &homework_js(); |
$extra_head .= &homework_js(). |
|
&Apache::lonhtmlcommon::dragmath_js("EditMathPopup"); |
|
if (&Apache::lonhtmlcommon::htmlareabrowser()) { |
|
my %textarea_args = ( |
|
dragmath => 'math', |
|
); |
|
$extra_head .= &Apache::lonhtmlcommon::htmlareaselectactive(\%textarea_args); |
|
} |
|
my $is_task = ($env{'request.uri'} =~ /\.task$/); |
|
if ($is_task) { |
|
$extra_head .= &file_delchk_js(); |
|
} |
|
|
my %body_args; |
my %body_args; |
if (defined($found{'html'})) { |
if (defined($found{'html'})) { |
Line 166 sub page_start {
|
Line 247 sub page_start {
|
} |
} |
} |
} |
|
|
|
my $pageheader = ''; |
if (defined($found{'body'})) { |
if (defined($found{'body'})) { |
$body_args{'skip_phases'}{'body'}=1; |
$body_args{'skip_phases'}{'body'}=1; |
} elsif (!defined($found{'body'}) |
} elsif (!defined($found{'body'}) |
&& $env{'request.state'} eq 'construct') { |
&& $env{'request.state'} eq 'construct') { |
if ($target eq 'web' || $target eq 'edit') { |
if ($target eq 'web' || $target eq 'edit') { |
if ($env{'environment.remote'} ne 'off') { |
# Breadcrumbs for Construction Space |
$body_args{'only_body'} = 1; |
&Apache::lonhtmlcommon::clear_breadcrumbs(); |
} |
&Apache::lonhtmlcommon::add_breadcrumb({ |
|
'text' => 'Construction Space', |
|
'href' => &Apache::loncommon::authorspace(), |
|
}); |
|
# breadcrumbs (and tools) will be created |
|
# in start_page->bodytag->innerregister |
|
|
|
# FIXME Where are we? |
|
# &Apache::lonhtmlcommon::add_breadcrumb({ |
|
# 'text' => 'Problem Editing', # 'Problem Testing' |
|
# 'href' => '', |
|
# }); |
|
$pageheader =&Apache::loncommon::head_subbox( |
|
&Apache::loncommon::CSTR_pageheader()); |
} |
} |
} elsif (!defined($found{'body'})) { |
} elsif (!defined($found{'body'})) { |
my %add_entries; |
my %add_entries; |
Line 185 sub page_start {
|
Line 280 sub page_start {
|
|
|
my $bgcolor=&Apache::lonxml::get_param('bgcolor',$parstack, |
my $bgcolor=&Apache::lonxml::get_param('bgcolor',$parstack, |
$safeeval); |
$safeeval); |
if ($bgcolor eq '' ) { $bgcolor = '#FFFFFF'; } |
if ($bgcolor eq '' ) { $bgcolor = '#FFFFFF'; } |
|
|
$body_args{'bgcolor'} = $bgcolor; |
$body_args{'bgcolor'} = $bgcolor; |
$body_args{'no_title'} = 1; |
# $body_args{'no_title'} = 1; |
$body_args{'force_register'} = 1; |
$body_args{'force_register'} = 1; |
$body_args{'add_entries'} = \%add_entries; |
$body_args{'add_entries'} = \%add_entries; |
if ($env{'environment.remote'} eq 'off' |
if ( $env{'request.state'} eq 'construct') { |
&& $env{'request.state'} eq 'construct') { |
$body_args{'only_body'} = 1; |
$body_args{'only_body'} = 1; |
} |
} |
|
} |
} |
$body_args{'no_auto_mt_title'} = 1; |
$body_args{'no_auto_mt_title'} = 1; |
my $page_start = &Apache::loncommon::start_page($name,$extra_head, |
my $page_start = &Apache::loncommon::start_page($name,$extra_head, |
\%body_args); |
\%body_args); |
|
$page_start .= $pageheader; |
if (!defined($found{'body'}) |
if (!defined($found{'body'}) |
&& $env{'request.state'} ne 'construct' |
&& $env{'request.state'} ne 'construct' |
&& ($target eq 'web' || $target eq 'webgrade')) { |
&& ($target eq 'web' || $target eq 'webgrade')) { |
|
|
my ($symb,undef,undef,undef,$publicuser)= &Apache::lonnet::whichuser(); |
my ($symb,undef,undef,undef,$publicuser)= &Apache::lonnet::whichuser(); |
if ($symb eq '' && !$publicuser) { |
if ($symb eq '' && !$publicuser) { |
my $help = &Apache::loncommon::help_open_topic("Ambiguous_Reference"); |
$page_start .= '<p class="LC_info">' |
$help=&mt("Browsing resource, all submissions are temporary.")."<br />"; |
.&mt('Browsing resource, all submissions are temporary.') |
$page_start .= $help; |
.'</p>'; |
} |
} |
} |
} |
|
|
if (!defined($found{'body'}) && $env{'request.state'} ne 'construct') { |
if (!defined($found{'body'}) && $env{'request.state'} ne 'construct') { |
Line 219 sub page_start {
|
Line 313 sub page_start {
|
my $form_tag_start; |
my $form_tag_start; |
if (!defined($found{'form'})) { |
if (!defined($found{'form'})) { |
$form_tag_start='<form name="lonhomework" enctype="multipart/form-data" method="post" action="'; |
$form_tag_start='<form name="lonhomework" enctype="multipart/form-data" method="post" action="'; |
my $uri = &Apache::lonenc::check_encrypt($env{'request.uri'}); |
my $uri = &Apache::loncommon::inhibit_menu_check( |
|
&Apache::lonenc::check_encrypt($env{'request.uri'})); |
|
$uri = &HTML::Entities::encode($uri,'<>&"'); |
$form_tag_start.=$uri.'" '; |
$form_tag_start.=$uri.'" '; |
if ($target eq 'edit') { |
if ($target eq 'edit') { |
$form_tag_start.=&Apache::edit::form_change_detection(); |
$form_tag_start.=&Apache::edit::form_change_detection(); |
} |
} |
|
if ($is_task) { |
|
$form_tag_start .= ' onsubmit="return file_deletion_check(this);"'; |
|
} |
$form_tag_start.='>'."\n"; |
$form_tag_start.='>'."\n"; |
|
|
my $symb=&Apache::lonnet::symbread(); |
my $symb=&Apache::lonnet::symbread(); |
Line 265 sub get_resource_name {
|
Line 364 sub get_resource_name {
|
} |
} |
|
|
sub setup_rndseed { |
sub setup_rndseed { |
my ($safeeval)=@_; |
my ($safeeval,$target)=@_; |
my $rndseed; |
|
my ($symb)=&Apache::lonnet::whichuser(); |
my ($symb)=&Apache::lonnet::whichuser(); |
|
my ($questiontype,$set_safespace,$rndseed); |
|
if ($target eq 'analyze') { |
|
$questiontype = $env{'form.grade_questiontype'}; |
|
} |
|
unless (defined($questiontype)) { |
|
$questiontype = $Apache::lonhomework::type; |
|
} |
if ($env{'request.state'} eq "construct" |
if ($env{'request.state'} eq "construct" |
|| $symb eq '' |
|| $symb eq '' |
|| $Apache::lonhomework::type eq 'practice' |
|| $Apache::lonhomework::type eq 'practice' |
Line 282 sub setup_rndseed {
|
Line 387 sub setup_rndseed {
|
} |
} |
$env{'form.rndseed'}=$rndseed; |
$env{'form.rndseed'}=$rndseed; |
} |
} |
|
if (($env{'request.state'} eq "construct") && |
|
($Apache::lonhomework::type eq 'randomizetry')) { |
|
my $tries = $Apache::lonhomework::history{"resource.$Apache::inputtags::part.tries"}; |
|
if ($tries) { |
|
$rndseed += $tries; |
|
} |
|
$env{'form.'.$Apache::inputtags::part.'.rndseed'}=$rndseed; |
|
} |
if ( ($env{'form.resetdata'} eq &mt('New Problem Variation') |
if ( ($env{'form.resetdata'} eq &mt('New Problem Variation') |
&& $env{'form.submitted'} eq 'yes') || |
&& $env{'form.submitted'} eq 'yes') || |
$env{'form.newrandomization'} eq &mt('New Randomization')) { |
$env{'form.newrandomization'} eq &mt('New Randomization')) { |
Line 297 sub setup_rndseed {
|
Line 410 sub setup_rndseed {
|
if ($Apache::lonhomework::history{'resource.CODE'}) { |
if ($Apache::lonhomework::history{'resource.CODE'}) { |
$rndseed=&Apache::lonnet::rndseed(); |
$rndseed=&Apache::lonnet::rndseed(); |
} |
} |
if ($safeeval) { |
$set_safespace = 1; |
&Apache::lonxml::debug("Setting rndseed to $rndseed"); |
} elsif ($questiontype eq 'randomizetry') { |
&Apache::run::run('$external::randomseed="'.$rndseed.'";',$safeeval); |
if ($target eq 'analyze') { |
} |
if (defined($env{'form.grade_rndseed'})) { |
|
$rndseed = $env{'form.grade_rndseed'}; |
|
} |
|
} |
|
unless (($target eq 'analyze') && (defined($rndseed))) { |
|
$rndseed=&Apache::lonnet::rndseed(); |
|
my $curr_try = $Apache::lonhomework::history{"resource.$Apache::inputtags::part.tries"}; |
|
if ($Apache::inputtags::status[-1] eq 'CAN_ANSWER') { |
|
$curr_try ++; |
|
} |
|
if ($rndseed =~/^(\d+)[,:](\d+)$/) { |
|
$rndseed = $1; |
|
} |
|
if ($curr_try) { |
|
my $reqtries = &Apache::lonnet::EXT("resource.$Apache::inputtags::part.randomizeontries"); |
|
if (($reqtries =~ /^\d+$/) && ($reqtries > 1)) { |
|
my $inc = int(($curr_try-1)/$reqtries); |
|
$rndseed += $inc; |
|
} else { |
|
$rndseed += $curr_try; |
|
} |
|
} |
|
} |
|
$set_safespace = 1; |
|
} |
|
if ($set_safespace) { |
|
if ($safeeval) { |
|
&Apache::lonxml::debug("Setting rndseed to $rndseed"); |
|
&Apache::run::run('$external::randomseed="'.$rndseed.'";',$safeeval); |
|
} |
|
} |
|
unless (($env{'request.state'} eq "construct") || ($symb eq '')) { |
|
$env{'form.'.$Apache::inputtags::part.'.rndseed'}=$rndseed; |
} |
} |
return $rndseed; |
return $rndseed; |
} |
} |
Line 312 sub remember_problem_state {
|
Line 457 sub remember_problem_state {
|
<input type="hidden" name="problemstatus" value="'.$env{'form.problemstatus'}.'" />'; |
<input type="hidden" name="problemstatus" value="'.$env{'form.problemstatus'}.'" />'; |
} |
} |
|
|
sub problem_edit_header { |
sub problem_edit_buttons { |
return '<input type="hidden" name="submitted" value="edit" />'. |
return ' |
&Apache::structuretags::remember_problem_state().' |
|
<div class="LC_edit_problem_header"> |
|
<div class="LC_edit_problem_header_title"> |
|
'.&mt('Problem Editing').&Apache::loncommon::help_open_menu('Problem Editing','Problem_Editor_XML_Index',5,'Authoring').' |
|
</div> |
|
<div class="LC_edit_problem_discards"> |
<div class="LC_edit_problem_discards"> |
<input type="hidden" name="problemmode" value="edit" /> |
|
<input type="button" name="submitmode" accesskey="d" value="'.&mt('Discard Edits and View').'" '. |
<input type="button" name="submitmode" accesskey="d" value="'.&mt('Discard Edits and View').'" '. |
' onclick="javscript:setmode(this.form,'."'discard.'".')" /> |
' onclick="javscript:setmode(this.form,'."'discard'".')" /> |
<input '.&Apache::edit::submit_ask_anyway('setmode(this.form,'."'editxml'".')').' type="button" name="submitmode" accesskey="x" value="'.&mt('EditXML').'" /> |
<input '.&Apache::edit::submit_ask_anyway('setmode(this.form,'."'editxml'".')').' type="button" name="submitmode" accesskey="x" value="'.&mt('EditXML').'" /> |
<input type="submit" name="Undo" accesskey="u" value="'.&mt('undo').'" /> |
<input type="submit" name="Undo" accesskey="u" value="'.&mt('undo').'" /> |
</div> |
</div> |
<div class="LC_edit_problem_saves"> |
<div class="LC_edit_problem_saves"> |
<input type="submit" name="submitbutton" accesskey="s" value="'.&mt('Save and Edit').'" /> |
<input type="submit" name="submitbutton" accesskey="s" value="'.&mt('Save and Edit').'" /> |
<input type="submit" name="submitbutton" accesskey="v" value="'.&mt('Save and View').'" /> |
<input type="submit" name="submitbutton" accesskey="v" value="'.&mt('Save and View').'" /> |
</div> |
</div>'; |
<hr class="LC_edit_problem_divide" /> |
} |
|
|
|
sub problem_edit_header { |
|
return '<input type="hidden" name="submitted" value="edit" /><input type="hidden" name="problemmode" value="edit" />'. |
|
&Apache::structuretags::remember_problem_state().' |
|
<div class="LC_edit_problem_header"> |
|
<div class="LC_edit_problem_header_title"> |
|
'.&mt('Problem Editing').&Apache::loncommon::help_open_menu('Problem Editing','Problem_Editor_XML_Index',5,'Authoring').' |
|
</div>'. |
|
&problem_edit_buttons().' |
|
<hr style="clear:both;" /> |
'.&Apache::lonxml::message_location().' |
'.&Apache::lonxml::message_location().' |
</div> |
</div> |
'. |
'. |
'<table border="0" width="100%"><tr><td bgcolor="#DDDDDD">'; |
'<table border="0" width="100%"><tr><td bgcolor="#F8F8F8">'; |
} |
} |
|
|
sub problem_edit_footer { |
sub problem_edit_footer { |
return '</td></tr></table><br /> |
return '</td></tr></table><br /> |
<div class="LC_edit_problem_footer"> |
<div class="LC_edit_problem_footer"> |
<hr class="LC_edit_problem_divide" /> |
<hr />'. |
<div class="LC_edit_problem_discards"> |
&problem_edit_buttons().' |
<input type="button" name="submitmode" accesskey="d" value="'.&mt('Discard Edits and View').'" '. |
<hr style="clear:both;" /> |
'onclick=javascript:setmode(this.form,'."'discard'".')" /> |
|
<input '.&Apache::edit::submit_ask_anyway('setmode(this.form,'."'editxml'".')').' type="button" name="submitmode" accesskey="x" value="'.&mt('EditXML').'" /> |
|
<input type="submit" name="Undo" accesskey="u" value="'.&mt('undo').'" /> |
|
</div> |
|
<div class="LC_edit_problem_saves"> |
|
<input type="submit" name="submitbutton" value="'.&mt('Save and Edit').'" /> |
|
<input type="submit" name="submitbutton" value="'.&mt('Save and View').'" /> |
|
</div> |
|
<hr class="LC_edit_problem_divide" /> |
|
</div> |
</div> |
'. |
'. |
|
|
&Apache::lonhtmlcommon::htmlareaselectactive(&Apache::lonhtmlcommon::get_htmlareafields()). |
|
"\n</form>\n".&Apache::loncommon::end_page(); |
"\n</form>\n".&Apache::loncommon::end_page(); |
} |
} |
|
|
Line 388 sub problem_web_to_edit_header {
|
Line 526 sub problem_web_to_edit_header {
|
|
|
my $show_all_foils_text = |
my $show_all_foils_text = |
($Apache::lonhomework::parsing_a_task) ? |
($Apache::lonhomework::parsing_a_task) ? |
&mt(' Show All Instances') |
&mt('Show All Instances') |
: &mt(' Show All Foils'); |
: &mt('Show All Foils'); |
|
|
my $show_all= '<span class="LC_nobreak"><label><input type="checkbox" name="showallfoils" '; |
my $show_all= '<span class="LC_nobreak"><label for="showallfoils">' |
if (defined($env{'form.showallfoils'})) { $show_all.='checked="checked"'; } |
.'<input type="checkbox" name="showallfoils"'; |
$show_all.= ' />'.$show_all_foils_text.'</label></span>'; |
if (defined($env{'form.showallfoils'})) { $show_all.=' checked="checked"'; } |
|
$show_all.= ' /> '.$show_all_foils_text |
|
.'</label></span>'; |
|
|
|
|
|
|
Line 417 sub problem_web_to_edit_header {
|
Line 557 sub problem_web_to_edit_header {
|
<select name='problemtype'> |
<select name='problemtype'> |
<option value=''></option> |
<option value=''></option> |
".&option('exam' ,'problemtype').&mt("Exam Problem")."</option> |
".&option('exam' ,'problemtype').&mt("Exam Problem")."</option> |
".&option('problem','problemtype').&mt("Homework problem")."</option> |
".&option('problem','problemtype').&mt("Homework Problem")."</option> |
".&option('survey' ,'problemtype').&mt("Survey Question")."</option> |
".&option('survey' ,'problemtype').&mt("Survey Question")."</option> |
|
".&option('surveycred' ,'problemtype').&mt("Survey Question (with credit)")."</option> |
|
".&option('anonsurvey' ,'problemtype').&mt("Anonymous Survey Question")."</option> |
|
".&option('anonsurveycred' ,'problemtype').&mt("Anonymous Survey Question (with credit)")."</option> |
|
".&option('practice' ,'problemtype').&mt("Practice Problem")."</option> |
|
".&option('randomizetry' ,'problemtype').&mt("New Randomization Each Try")."</option> |
</select> |
</select> |
</span> |
</span> |
$show_all |
$show_all |
Line 451 $show_all
|
Line 596 $show_all
|
$show_all |
$show_all |
"; |
"; |
} |
} |
my %langchoices=('' => ''); |
|
foreach (&Apache::loncommon::languageids()) { |
|
if (&Apache::loncommon::supportedlanguagecode($_)) { |
|
$langchoices{&Apache::loncommon::supportedlanguagecode($_)} |
|
= &Apache::loncommon::plainlanguagedescription($_); |
|
} |
|
} |
|
$result.=' |
$result.=' |
<span class="LC_nobreak"> |
<span class="LC_nobreak"> |
'.&mt('Apply style file: ').' |
'.&mt('Apply style file: ').' |
<input type="text" name="style_file" value="'.&HTML::Entities::encode($env{'construct.style'},'"<>&').'" /> |
<input type="text" name="style_file" value="'.&HTML::Entities::encode($env{'construct.style'},'"<>&').'" /> |
<a href="javascript:openbrowser(\'lonhomework\',\'style_file\',\'sty\')">'.&mt('Select').'</a> |
<a href="javascript:openbrowser(\'lonhomework\',\'style_file\',\'sty\')">'.&mt('Select').'</a> |
</span> |
</span> |
</div><div class="LC_edit_problem_header_row1"> |
</div> |
<span class="LC_nobreak">'. |
<div class="LC_edit_problem_header_row1">'. |
&mt('Language: '). |
&Apache::lonxml::renderingoptions().' |
&Apache::loncommon::select_form($env{'form.languages'},'languages', |
|
%langchoices).' |
|
</span> |
|
<span class="LC_nobreak">'. |
|
&mt('Math Rendering: '). |
|
&Apache::loncommon::select_form($env{'form.texengine'},'texengine', |
|
('' => '', |
|
'tth' => 'tth', |
|
'jsMath' => 'jsMath', |
|
'mimetex' => 'mimetex')).' |
|
</span> |
|
</div> |
</div> |
<input type="submit" name="changeproblemmode" value="'.&mt("Change View").'" /> |
<input type="submit" name="changeproblemmode" value="'.&mt("Change View").'" /> |
<input type="submit" name="clear_style_file" accesskey="d" value="'.&mt('Show Default View').'" /> |
<input type="submit" name="clear_style_file" accesskey="d" value="'.&mt('Show Default View').'" /> |
<input type="submit" name="resetdata" accesskey="r" value="'.&mt('Reset Submissions').'" /> |
<input type="submit" name="resetdata" accesskey="r" value="'.&mt('Reset Submissions').'" /> |
</div> |
</div> |
<hr class="LC_edit_problem_divide" /> |
<hr /> |
<div class="LC_edit_problem_header_randomize_row"> |
<div class="LC_edit_problem_header_randomize_row"> |
<input type="submit" name="newrandomization" accesskey="a" value="'.&mt('New Randomization').'" /> |
<input type="submit" name="newrandomization" accesskey="a" value="'.&mt('New Randomization').'" /> |
<input type="submit" name="changerandseed" value="'.&mt('Change Random Seed To:').'" /> |
<input type="submit" name="changerandseed" value="'.&mt('Change Random Seed To:').'" /> |
Line 507 $show_all
|
Line 634 $show_all
|
|
|
$result.=' |
$result.=' |
</div> |
</div> |
<div class="LC_edit_problem_header_edit_row">'; |
<hr /> |
|
<div>'; |
$result.='<input type="hidden" name="problemmode" value="view" />'; |
$result.='<input type="hidden" name="problemmode" value="view" />'; |
$result .= '<input type="button" name="submitmode" accesskey="e" value="'.&mt('Edit').'" '. |
$result .= '<input type="button" name="submitmode" accesskey="e" value="'.&mt('Edit').'" '. |
'onclick="javascript:setmode(this.form,'."'edit'".')" />'; |
'onclick="javascript:setmode(this.form,'."'edit'".')" />'; |
Line 515 $show_all
|
Line 643 $show_all
|
'onclick="javascript:setmode(this.form,'."'editxml'".')" />'; |
'onclick="javascript:setmode(this.form,'."'editxml'".')" />'; |
$result.=' |
$result.=' |
</div> |
</div> |
|
<hr /> |
'.&Apache::lonxml::message_location().' |
'.&Apache::lonxml::message_location().' |
</div>'; |
</div>'; |
return $result; |
return $result; |
Line 559 sub initialize_storage {
|
Line 688 sub initialize_storage {
|
if ($temp =~ m/^error:.*/) { %Apache::lonhomework::history=(); } |
if ($temp =~ m/^error:.*/) { %Apache::lonhomework::history=(); } |
} |
} |
|
|
# -------------------------------------------------------------finalize_storage |
=pod |
# Stores away the result has to a student's environment |
|
# checks form.grade_ for specific values, other wises stores |
=item finalize_storage() |
# to the running users environment |
|
# Will increment totals for attempts, students, and corrects |
Stores away the result has to a student's environment |
# if running user has student role. |
checks form.grade_ for specific values, other wises stores |
|
to the running users environment |
|
Will increment totals for attempts, students, and corrects |
|
if running user has student role. |
|
|
|
=cut |
|
|
|
|
sub finalize_storage { |
sub finalize_storage { |
my ($given_symb) = @_; |
my ($given_symb) = @_; |
my $result; |
my $result; |
Line 585 sub finalize_storage {
|
Line 721 sub finalize_storage {
|
$result=&Apache::lonnet::cstore(\%Apache::lonhomework::results, |
$result=&Apache::lonnet::cstore(\%Apache::lonhomework::results, |
$symb,$courseid,$domain,$name); |
$symb,$courseid,$domain,$name); |
&Apache::lonxml::debug('Store return message:'.$result); |
&Apache::lonxml::debug('Store return message:'.$result); |
if ($env{'request.role'} =~/^st/) { |
&store_aggregates($symb,$courseid); |
&store_aggregates($symb,$courseid); |
|
} |
|
} |
} |
} else { |
} else { |
&Apache::lonxml::debug('Nothing to store'); |
&Apache::lonxml::debug('Nothing to store'); |
Line 595 sub finalize_storage {
|
Line 729 sub finalize_storage {
|
return $result; |
return $result; |
} |
} |
|
|
# -------------------------------------------------------------store_aggregates |
=pod |
# Sends hash of values to be incremented in nohist_resourcetracker.db |
|
# for the course. Increments total number of attempts, unique students |
item store_aggregates() |
# and corrects for each part for an instance of a problem, as appropriate. |
|
|
Sends hash of values to be incremented in nohist_resourcetracker.db |
|
for the course. Increments total number of attempts, unique students |
|
and corrects for each part for an instance of a problem, as appropriate. |
|
|
|
=cut |
|
|
sub store_aggregates { |
sub store_aggregates { |
my ($symb,$courseid) = @_; |
my ($symb,$courseid) = @_; |
my %aggregate; |
my (%aggregate,%anoncounter,%randtrycounter); |
my @parts; |
my @parts; |
my $cdomain = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
my $cdomain = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
my $cname = $env{'course.'.$env{'request.course.id'}.'.num'}; |
my $cname = $env{'course.'.$env{'request.course.id'}.'.num'}; |
Line 611 sub store_aggregates {
|
Line 751 sub store_aggregates {
|
} |
} |
} |
} |
foreach my $part (@parts) { |
foreach my $part (@parts) { |
if ($Apache::lonhomework::results{'resource.'.$part.'.award'} |
if ($env{'request.role'} =~/^st/) { |
eq 'APPROX_ANS' || |
if ($Apache::lonhomework::results{'resource.'.$part.'.award'} |
$Apache::lonhomework::results{'resource.'.$part.'.award'} |
eq 'APPROX_ANS' || |
eq 'EXACT_ANS') { |
$Apache::lonhomework::results{'resource.'.$part.'.award'} |
$aggregate{$symb."\0".$part."\0correct"} = 1; |
eq 'EXACT_ANS') { |
|
$aggregate{$symb."\0".$part."\0correct"} = 1; |
|
} |
|
if ($Apache::lonhomework::results{'resource.'.$part.'.tries'} == 1) { |
|
$aggregate{$symb."\0".$part."\0users"} = 1; |
|
} else { |
|
my (undef,$last_reset) = &Apache::grades::get_last_resets($symb,$env{'request.course.id'},[$part]); |
|
if ($last_reset) { |
|
if (&Apache::grades::get_num_tries(\%Apache::lonhomework::history,$last_reset,$part) == 0) { |
|
$aggregate{$symb."\0".$part."\0users"} = 1; |
|
} |
|
} |
|
} |
|
$aggregate{$symb."\0".$part."\0attempts"} = 1; |
} |
} |
if ($Apache::lonhomework::results{'resource.'.$part.'.tries'} == 1) { |
if (($Apache::lonhomework::results{'resource.'.$part.'.type'} eq 'anonsurvey') || |
$aggregate{$symb."\0".$part."\0users"} = 1; |
($Apache::lonhomework::results{'resource.'.$part.'.type'} eq 'anonsurveycred') || |
} else { |
($Apache::lonhomework::results{'resource.'.$part.'.type'} eq 'randomizetry')) { |
my (undef,$last_reset) = &Apache::grades::get_last_resets($symb,$env{'request.course.id'},[$part]); |
if ($Apache::lonhomework::results{'resource.'.$part.'.type'} eq 'randomizetry') { |
if ($last_reset) { |
$randtrycounter{$symb."\0".$part} = 1; |
if (&Apache::grades::get_num_tries(\%Apache::lonhomework::history,$last_reset,$part) == 0) { |
} else { |
$aggregate{$symb."\0".$part."\0users"} = 1; |
$anoncounter{$symb."\0".$part} = 1; |
|
} |
|
my $needsrelease = $Apache::lonnet::needsrelease{'parameter:type:'.$Apache::lonhomework::results{'resource.'.$part.'.type'}}; |
|
if ($needsrelease) { |
|
my $curr_required = $env{'course.'.$env{'request.course.id'}.'.internal.releaserequired'}; |
|
if ($curr_required eq '') { |
|
&Apache::lonnet::update_released_required($needsrelease); |
|
} else { |
|
my ($currmajor,$currminor) = split(/\./,$curr_required); |
|
my ($needsmajor,$needsminor) = split(/\./,$needsrelease); |
|
if (($currmajor < $needsmajor) || ($currmajor == $needsmajor && $currminor < $needsminor)) { |
|
&Apache::lonnet::update_released_required($needsrelease); |
|
} |
} |
} |
} |
} |
} |
} |
$aggregate{$symb."\0".$part."\0attempts"} = 1; |
|
} |
} |
if (keys (%aggregate) > 0) { |
if (keys (%aggregate) > 0) { |
&Apache::lonnet::cinc('nohist_resourcetracker',\%aggregate, |
&Apache::lonnet::cinc('nohist_resourcetracker',\%aggregate, |
$cdomain,$cname); |
$cdomain,$cname); |
} |
} |
|
if (keys(%anoncounter) > 0) { |
|
&Apache::lonnet::cput('nohist_anonsurveys',\%anoncounter, |
|
$cdomain,$cname); |
|
} |
|
if (keys(%randtrycounter) > 0) { |
|
&Apache::lonnet::cput('nohist_randomizetry',\%randtrycounter, |
|
$cdomain,$cname); |
|
} |
} |
} |
|
|
sub checkout_msg { |
sub checkout_msg { |
Line 646 sub checkout_msg {
|
Line 818 sub checkout_msg {
|
return (<<ENDCHECKOUT); |
return (<<ENDCHECKOUT); |
<h2>$lt{'resource'}</h2> |
<h2>$lt{'resource'}</h2> |
<p>$lt{'id_expln'}</p> |
<p>$lt{'id_expln'}</p> |
<font color="red"> |
<p class="LC_warning">$lt{'warning'}</p> |
<p>$lt{'warning'}</p> |
<form name="checkout" method="post" action="$uri"> |
</font> |
|
<form name="checkout" method="POST" action="$uri"> |
|
<input type="hidden" name="doescheckout" value="yes" /> |
<input type="hidden" name="doescheckout" value="yes" /> |
<input type="button" name="checkoutbutton" value="$lt{'checkout'}" onClick="javascript:if (confirm('$lt{'checkout?'}')) { document.checkout.submit(); }" /> |
<input type="button" name="checkoutbutton" value="$lt{'checkout'}" onClick="javascript:if (confirm('$lt{'checkout?'}')) { document.checkout.submit(); }" /> |
</form> |
</form> |
Line 683 sub firstaccess_msg {
|
Line 853 sub firstaccess_msg {
|
my $buttontext = &mt('Show Resource'); |
my $buttontext = &mt('Show Resource'); |
my $timertext = &mt('Start Timer?'); |
my $timertext = &mt('Start Timer?'); |
$result .= (<<ENDCHECKOUT); |
$result .= (<<ENDCHECKOUT); |
<form name="markaccess" method="POST" action="$uri"> |
<form name="markaccess" method="post" action="$uri"> |
<input type="hidden" name="markaccess" value="yes" /> |
<input type="hidden" name="markaccess" value="yes" /> |
<input type="button" name="accessbutton" value="$buttontext" onClick="javascript:if (confirm('$timertext')) { document.markaccess.submit(); }" /> |
<input type="button" name="accessbutton" value="$buttontext" onClick="javascript:if (confirm('$timertext')) { document.markaccess.submit(); }" /> |
</form> |
</form> |
Line 715 sub init_problem_globals {
|
Line 885 sub init_problem_globals {
|
&Apache::lonhomework::reset_show_problem_status(); |
&Apache::lonhomework::reset_show_problem_status(); |
$Apache::lonhomework::ignore_response_errors=1; |
$Apache::lonhomework::ignore_response_errors=1; |
} |
} |
|
@Apache::functionplotresponse::callscripts=(); |
@Apache::inputtags::responselist = (); |
@Apache::inputtags::responselist = (); |
@Apache::inputtags::importlist = (); |
@Apache::inputtags::importlist = (); |
@Apache::inputtags::previous=(); |
@Apache::inputtags::previous=(); |
Line 742 sub reset_problem_globals {
|
Line 913 sub reset_problem_globals {
|
undef($Apache::lonhomework::type); |
undef($Apache::lonhomework::type); |
undef($Apache::lonhomework::scantronmode); |
undef($Apache::lonhomework::scantronmode); |
undef($Apache::lonhomework::ignore_response_errors); |
undef($Apache::lonhomework::ignore_response_errors); |
|
undef(@Apache::functionplotresponse::callscripts); |
&Apache::lonhomework::reset_show_problem_status(); |
&Apache::lonhomework::reset_show_problem_status(); |
} |
} |
|
|
Line 842 sub start_problem {
|
Line 1014 sub start_problem {
|
|
|
if ($target eq 'tex' and $env{'request.symb'} =~ m/\.page_/) {$result='';} |
if ($target eq 'tex' and $env{'request.symb'} =~ m/\.page_/) {$result='';} |
|
|
if ($target eq 'analyze') { my $rndseed=&setup_rndseed($safeeval); } |
if ($target eq 'analyze') { my $rndseed=&setup_rndseed($safeeval,$target); } |
if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' || |
if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' || |
$target eq 'tex') { |
$target eq 'tex') { |
#handle exam checkout |
|
if ($Apache::lonhomework::type eq 'exam') { |
|
my $token= |
|
$Apache::lonhomework::history{"resource.0.outtoken"}; |
|
if (($env{'form.doescheckout'}) && (!$token)) { |
|
$token=&Apache::lonxml::maketoken(); |
|
$Apache::lonhomework::history{"resource.0.outtoken"}= |
|
$token; |
|
} |
|
$result.=&Apache::lonxml::printtokenheader($target,$token); |
|
} |
|
if ($env{'form.markaccess'}) { |
if ($env{'form.markaccess'}) { |
my @interval=&Apache::lonnet::EXT("resource.0.interval"); |
my @interval=&Apache::lonnet::EXT("resource.0.interval"); |
&Apache::lonnet::set_first_access($interval[1]); |
&Apache::lonnet::set_first_access($interval[1]); |
} |
} |
|
|
|
($status,$accessmsg,my $slot_name,my $slot) = |
|
&Apache::lonhomework::check_slot_access('0','problem'); |
|
push (@Apache::inputtags::status,$status); |
|
|
#handle rand seed in construction space |
#handle rand seed in construction space |
my $rndseed=&setup_rndseed($safeeval); |
my $rndseed=&setup_rndseed($safeeval,$target); |
my ($symb)=&Apache::lonnet::whichuser(); |
my ($symb)=&Apache::lonnet::whichuser(); |
|
|
if ($env{'request.state'} ne "construct" && |
if ($env{'request.state'} ne "construct" && |
($symb eq '' || $Apache::lonhomework::type eq 'practice')) { |
($symb eq '' || $Apache::lonhomework::type eq 'practice')) { |
$form_tag_start.='<input type="hidden" name="rndseed" value="'. |
$form_tag_start.='<input type="hidden" name="rndseed" value="'. |
Line 875 sub start_problem {
|
Line 1042 sub start_problem {
|
value="'.$env{'form.username'}.'" />'; |
value="'.$env{'form.username'}.'" />'; |
} |
} |
if ($env{'request.role.adv'}) { |
if ($env{'request.role.adv'}) { |
$form_tag_start.= |
$form_tag_start.= ' <label class="LC_nobreak">' |
' <label><input type="checkbox" name="showallfoils" '; |
.'<input type="checkbox" name="showallfoils"'; |
if (defined($env{'form.showallfoils'})) { |
if (defined($env{'form.showallfoils'})) { |
$form_tag_start.='checked="on"'; |
$form_tag_start.=' checked="checked"'; |
} |
} |
$form_tag_start.= ' />'.&mt(' Show All Foils'). |
$form_tag_start.= ' /> ' |
'</label>'; |
.&mt('Show All Foils') |
|
.'</label>'; |
} |
} |
if ($Apache::lonhomework::type eq 'practice') { |
if ($Apache::lonhomework::type eq 'practice') { |
$form_tag_start.='<span class="LC_info"><h3>'.&mt('Practice Problem').'</h3></span>'. |
$form_tag_start.=&practice_problem_header(); |
'<span class="LC_info">'.&mt('Submissions are not permanently recorded').'</span>'; |
|
} |
} |
$form_tag_start.='<hr />'; |
$form_tag_start.='<hr />'; |
} |
} elsif (($env{'request.state'} ne "construct") && |
|
($Apache::lonhomework::type eq 'randomizetry') && |
($status,$accessmsg,my $slot_name,my $slot) = |
($status eq 'CAN_ANSWER')) { |
&Apache::lonhomework::check_slot_access('0','problem'); |
my $reqtries = &Apache::lonnet::EXT("resource.$Apache::inputtags::part.randomizeontries"); |
push (@Apache::inputtags::status,$status); |
my $problemstatus = &get_problem_status($Apache::inputtags::part); |
|
$form_tag_start.=&randomizetry_problem_header($problemstatus,$reqtries); |
|
} |
|
|
my $expression='$external::datestatus="'.$status.'";'; |
my $expression='$external::datestatus="'.$status.'";'; |
$expression.='$external::gradestatus="'.$Apache::lonhomework::history{"resource.0.solved"}.'";'; |
$expression.='$external::gradestatus="'.$Apache::lonhomework::history{"resource.0.solved"}.'";'; |
Line 912 sub start_problem {
|
Line 1081 sub start_problem {
|
my $msg; |
my $msg; |
if ($status eq 'UNAVAILABLE') { |
if ($status eq 'UNAVAILABLE') { |
$msg.='<h1>'.&mt('Unable to determine if this resource is open due to network problems. Please try again later.').'</h1>'; |
$msg.='<h1>'.&mt('Unable to determine if this resource is open due to network problems. Please try again later.').'</h1>'; |
|
} elsif ($status eq 'NOT_IN_A_SLOT') { |
|
$msg.='<h1>'.&mt('You are not currently signed up to work at this time and/or place.').'</h1>'; |
} elsif ($status ne 'NOT_YET_VIEWED') { |
} elsif ($status ne 'NOT_YET_VIEWED') { |
$msg.='<h1>'.&mt('Not open to be viewed').'</h1>'; |
$msg.='<h1>'.&mt('Not open to be viewed').'</h1>'; |
} |
} |
Line 922 sub start_problem {
|
Line 1093 sub start_problem {
|
} elsif ($status eq 'NOT_YET_VIEWED') { |
} elsif ($status eq 'NOT_YET_VIEWED') { |
$msg.=&firstaccess_msg($accessmsg,$symb); |
$msg.=&firstaccess_msg($accessmsg,$symb); |
} elsif ($status eq 'NOT_IN_A_SLOT') { |
} elsif ($status eq 'NOT_IN_A_SLOT') { |
$msg.=&Apache::bridgetask::add_request_another_attempt_button("Sign up for time to work."); |
$msg.=&Apache::bridgetask::add_request_another_attempt_button("Sign up for time to work"); |
} |
} |
$result.=$msg.'<br />'; |
$result.=$msg.'<br />'; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
my $startminipage = ($env{'form.problem_split'}=~/yes/i)? '' |
my $startminipage = ($env{'form.problem_split'}=~/yes/i)? '' |
: '\begin{minipage}{\textwidth}'; |
: '\begin{minipage}{\textwidth}'; |
$result.='\begin{document}\noindent \vskip 1 mm '. |
$result.='\noindent \vskip 1 mm '. |
$startminipage.'\vskip 0 mm'; |
$startminipage.'\vskip 0 mm'; |
if ($status eq 'UNAVAILABLE') { |
if ($status eq 'UNAVAILABLE') { |
$result.=&mt('Unable to determine if this resource is open due to network problems. Please try again later.').'\vskip 0 mm '; |
$result.=&mt('Unable to determine if this resource is open due to network problems. Please try again later.').'\vskip 0 mm '; |
Line 959 sub start_problem {
|
Line 1130 sub start_problem {
|
# create a page header and exit |
# create a page header and exit |
if ($env{'request.state'} eq "construct") { |
if ($env{'request.state'} eq "construct") { |
$result.= &problem_web_to_edit_header($env{'form.rndseed'}); |
$result.= &problem_web_to_edit_header($env{'form.rndseed'}); |
|
if ($Apache::lonhomework::type eq 'practice') { |
|
$result.= '<input type="submit" name="resetdata" '. |
|
'value="'.&mt('New Problem Variation').'" />'. |
|
&practice_problem_header().'<hr />'; |
|
} |
} |
} |
# if we are viewing someone else preserve that info |
# if we are viewing someone else preserve that info |
if (defined $env{'form.grade_symb'}) { |
if (defined $env{'form.grade_symb'}) { |
Line 966 sub start_problem {
|
Line 1142 sub start_problem {
|
$result .= '<input type="hidden" name="grade_'.$field. |
$result .= '<input type="hidden" name="grade_'.$field. |
'" value="'.$env{"form.grade_$field"}.'" />'."\n"; |
'" value="'.$env{"form.grade_$field"}.'" />'."\n"; |
} |
} |
|
foreach my $field ('trial','questiontype') { |
|
if ($env{"form.grade_$field"} ne '') { |
|
$result .= '<input type="hidden" name="grade_'.$field. |
|
'" value="'.$env{"form.grade_$field"}.'" />'."\n"; |
|
} |
|
} |
} |
} |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
$result .= 'INSERTTEXFRONTMATTERHERE'; |
$result .= 'INSERTTEXFRONTMATTERHERE'; |
Line 1024 sub end_problem {
|
Line 1206 sub end_problem {
|
$allow_print_points=0; |
$allow_print_points=0; |
} |
} |
my $name_of_resourse= &Apache::lonxml::latex_special_symbols(&get_resource_name($parstack,$safeeval),'header'); |
my $name_of_resourse= &Apache::lonxml::latex_special_symbols(&get_resource_name($parstack,$safeeval),'header'); |
my $begin_doc='\begin{document} \typeout{STAMPOFPASSEDRESOURCESTART Resource <h2>"'.$name_of_resourse.'"</h2> located in <br /><small><b>'.$env{'request.uri'}.'</b></small><br /> STAMPOFPASSEDRESOURCEEND} \noindent '; |
my $begin_doc=' \typeout{STAMPOFPASSEDRESOURCESTART Resource <h2>"'.$name_of_resourse.'"</h2> located in <br /><small><b>'.$env{'request.uri'}.'</b></small><br /> STAMPOFPASSEDRESOURCEEND} \noindent '; |
my $toc_line='\vskip 1 mm\noindent '.$startminipage. |
my $toc_line='\vskip 1 mm\noindent '.$startminipage. |
'\addcontentsline{toc}{subsection}{'.$name_of_resourse.'}'; |
'\addcontentsline{toc}{subsection}{'.$name_of_resourse.'}'; |
|
|
Line 1034 sub end_problem {
|
Line 1216 sub end_problem {
|
|
|
my $duetime = &Apache::lonnet::EXT("resource.$id.duedate"); |
my $duetime = &Apache::lonnet::EXT("resource.$id.duedate"); |
my $duedate = POSIX::strftime("%c",localtime($duetime)); |
my $duedate = POSIX::strftime("%c",localtime($duetime)); |
|
my $duedate_text = &mt('Due date: [_1]' |
|
,&Apache::lonlocal::locallocaltime($duetime)); |
my $temp_file; |
my $temp_file; |
my $filename = "/home/httpd/prtspool/$env{'user.name'}_$env{'user.domain'}_printout.due"; |
my $filename = "/home/httpd/prtspool/$env{'user.name'}_$env{'user.domain'}_printout.due"; |
|
|
Line 1065 sub end_problem {
|
Line 1249 sub end_problem {
|
if (not $env{'request.symb'} =~ m/\.page_/) { |
if (not $env{'request.symb'} =~ m/\.page_/) { |
if(not $duedate=~m/1969/ and $Apache::lonhomework::type ne 'exam') { |
if(not $duedate=~m/1969/ and $Apache::lonhomework::type ne 'exam') { |
$frontmatter .= $begin_doc. |
$frontmatter .= $begin_doc. |
'\textit{Due date: '.$duedate.'} '.$toc_line; |
'\textit{'.$duedate_text.'} '.$toc_line; |
} else { |
} else { |
$frontmatter.= $begin_doc.$toc_line; |
$frontmatter.= $begin_doc.$toc_line; |
if ($Apache::lonhomework::type eq 'exam' and $allow_print_points==1) { $frontmatter .= '\fbox{\textit{'.$weight.' pt}}';} |
if ($Apache::lonhomework::type eq 'exam' and $allow_print_points==1) { |
|
$frontmatter .= '\fbox{\textit{'.$weight.' pt}}'; |
|
} |
} |
} |
} else { |
} else { |
$frontmatter .= '\vskip 1mm\textit{Due date: '.$duedate.'} \\\\\\\\'.$startminipage; |
$frontmatter .= '\vskip 1mm\textit{'.$duedate_text.'} \\\\\\\\'.$startminipage; |
} |
} |
} else { |
} else { |
if (not $env{'request.symb'} =~ m/\.page_/) { |
if (not $env{'request.symb'} =~ m/\.page_/) { |
$frontmatter .= $begin_doc.$toc_line; |
$frontmatter .= $begin_doc.$toc_line; |
if (($Apache::lonhomework::type eq 'exam') and ($allow_print_points==1)) { $frontmatter .= '\fbox{\textit{'.$weight.' pt}}';} |
if (($Apache::lonhomework::type eq 'exam') and ($allow_print_points==1)) { |
|
$frontmatter .= '\fbox{\textit{'.$weight.' pt}}'; |
|
} |
} else { |
} else { |
$frontmatter .= '\vskip 1mm \\\\\\\\'.$startminipage; |
$frontmatter .= '\vskip 1mm \\\\\\\\'.$startminipage; |
} |
} |
Line 1112 sub end_problem {
|
Line 1300 sub end_problem {
|
if ($target ne 'tex' && |
if ($target ne 'tex' && |
$env{'form.answer_output_mode'} ne 'tex') { |
$env{'form.answer_output_mode'} ne 'tex') { |
$result.="</form>"; |
$result.="</form>"; |
$result.= &Apache::lonhtmlcommon::htmlareaselectactive(&Apache::lonhtmlcommon::get_htmlareafields()); |
|
} |
} |
if ($target eq 'web') { |
if ($target eq 'web') { |
$result.= &Apache::loncommon::end_page({'discussion' => 1}); |
$result.= &Apache::loncommon::end_page({'discussion' => 1}); |
Line 1133 sub end_problem {
|
Line 1320 sub end_problem {
|
} |
} |
} |
} |
} |
} |
|
if ($target eq 'web') { |
|
$result.=&Apache::functionplotresponse::init_script(); |
|
} |
if ($target eq 'grade') { |
if ($target eq 'grade') { |
&Apache::lonhomework::showhash(%Apache::lonhomework::results); |
&Apache::lonhomework::showhash(%Apache::lonhomework::results); |
&finalize_storage(); |
&finalize_storage(); |
Line 1190 sub start_library {
|
Line 1380 sub start_library {
|
($result,$form_tag_start)= |
($result,$form_tag_start)= |
&page_start($target,$token,$tagstack,$parstack,$parser,$safeeval, |
&page_start($target,$token,$tagstack,$parstack,$parser,$safeeval, |
$name); |
$name); |
my $rndseed=&setup_rndseed($safeeval); |
my $rndseed=&setup_rndseed($safeeval,$target); |
$result.=" \n $form_tag_start". |
$result.=" \n $form_tag_start". |
'<input type="hidden" name="submitted" value="yes" />'; |
'<input type="hidden" name="submitted" value="yes" />'; |
$result.=&problem_web_to_edit_header($rndseed); |
$result.=&problem_web_to_edit_header($rndseed); |
|
if ($Apache::lonhomework::type eq 'practice') { |
|
$result.= '<input type="submit" name="resetdata" '. |
|
'value="'.&mt('New Problem Variation').'" />'. |
|
&practice_problem_header().'<hr />'; |
|
} |
} |
} |
return $result; |
return $result; |
} |
} |
Line 1294 sub start_languageblock {
|
Line 1489 sub start_languageblock {
|
$target eq 'tex' || $target eq 'analyze' || $target eq 'webgrade') { |
$target eq 'tex' || $target eq 'analyze' || $target eq 'webgrade') { |
my $include = $token->[2]->{'include'}; |
my $include = $token->[2]->{'include'}; |
my $exclude = $token->[2]->{'exclude'}; |
my $exclude = $token->[2]->{'exclude'}; |
my @preferred_languages=&Apache::loncommon::preferred_languages(); |
my @preferred_languages=&Apache::lonlocal::preferred_languages(); |
# This should not even happen, since we should at least have the server language |
# This should not even happen, since we should at least have the server language |
if (!$preferred_languages[0]) { $preferred_languages[0]='en'; } |
if (!$preferred_languages[0]) { $preferred_languages[0]='en'; } |
# Now loop over all languages in order of preference |
# Now loop over all languages in order of preference |
Line 1401 sub end_languageblock {
|
Line 1596 sub end_languageblock {
|
my $result = &Apache::lonxml::endredirection(); |
my $result = &Apache::lonxml::endredirection(); |
my $which = &Apache::lonxml::get_param('which',$parstack, |
my $which = &Apache::lonxml::get_param('which',$parstack, |
$safeeval); |
$safeeval); |
$available_texts{$which} = $result; |
if ($which=~/\w/) { |
|
$available_texts{$which} = $result; |
|
} |
|
my $otherlangs = &Apache::lonxml::get_param('other',$parstack, |
|
$safeeval); |
|
foreach my $language (split(/\s*\,\s*/,$otherlangs)) { |
|
if ($language=~/\w/) { |
|
$available_texts{$language} = $result; |
|
} |
|
} |
|
|
} |
} |
return ''; |
return ''; |
} |
} |
Line 1414 sub start_instructorcomment {
|
Line 1619 sub start_instructorcomment {
|
|
|
if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' || |
if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' || |
$target eq 'tex' || $target eq 'analyze' || $target eq 'webgrade') { |
$target eq 'tex' || $target eq 'analyze' || $target eq 'webgrade') { |
$result=($env{'request.role'}=~/^(in|cc|au|ca|li)/); |
$result=($env{'request.role'}=~/^(in|cc|co|au|ca|li)/); |
if ( (! $result) or ($env{'form.instructor_comments'} eq 'hide')) { |
if ( (! $result) or ($env{'form.instructor_comments'} eq 'hide')) { |
my $skip=&Apache::lonxml::get_all_text("/instructorcomment", |
my $skip=&Apache::lonxml::get_all_text("/instructorcomment", |
$parser,$style); |
$parser,$style); |
Line 1498 sub end_while {
|
Line 1703 sub end_while {
|
$return = &Apache::run::run($code,$safeeval); |
$return = &Apache::run::run($code,$safeeval); |
} |
} |
if ($error) { |
if ($error) { |
&Apache::lonxml::error('<pre>'.&mt('Code ran too long. It ran for more than').' '.$Apache::lonnet::perlvar{'lonScriptTimeout'}.' '.&mt('seconds occured while running <while> on line').' '.$line.'</pre>'); |
&Apache::lonxml::error('<pre>'.&mt('Code ran too long. It ran for more than').' '.$Apache::lonnet::perlvar{'lonScriptTimeout'}.' '.&mt('seconds occurred while running <while> on line').' '.$line.'</pre>'); |
} |
} |
} elsif ($target eq "edit") { |
} elsif ($target eq "edit") { |
$result.= &Apache::edit::tag_end($target,$token,''); |
$result.= &Apache::edit::tag_end($target,$token,''); |
Line 1552 sub start_randomlist {
|
Line 1757 sub start_randomlist {
|
my $showarg=&Apache::lonxml::get_param('show',$parstack,$safeeval); |
my $showarg=&Apache::lonxml::get_param('show',$parstack,$safeeval); |
$showarg--; |
$showarg--; |
if ( ($showarg >= 0) && ($showarg < $show) ) { $show = $showarg; } |
if ( ($showarg >= 0) && ($showarg < $show) ) { $show = $showarg; } |
|
if (($target eq 'analyze') && ($env{'form.check_parts_withrandomlist'})) { |
|
my @currlist; |
|
my $part = $Apache::inputtags::part; |
|
if ($part ne '') { |
|
if (ref($Apache::lonhomework::analyze{'parts_withrandomlist'}) eq 'ARRAY') { |
|
my @currlist = @{$Apache::lonhomework::analyze{'parts_withrandomlist'}}; |
|
if (!(grep(/^\Q$part\E$/,@currlist))) { |
|
push(@{$Apache::lonhomework::analyze{'parts_withrandomlist'}},$part); |
|
} |
|
} else { |
|
push(@{$Apache::lonhomework::analyze{'parts_withrandomlist'}},$part); |
|
} |
|
} |
|
} |
for(0 .. $show) { |
for(0 .. $show) { |
$bodytext .= "$randomlist[ $idx_arr[$_] ]"; |
$bodytext .= "$randomlist[ $idx_arr[$_] ]"; |
} |
} |
Line 1605 sub ordered_show_check {
|
Line 1824 sub ordered_show_check {
|
return $in_order_show; |
return $in_order_show; |
} |
} |
|
|
|
|
|
sub start_startpartmarker { |
|
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; |
|
my $result=''; |
|
if ($target eq 'edit') { |
|
$result=&Apache::edit::tag_start($target,$token); |
|
$result.=&mt('Marker for the start of a part. Place end marker below to wrap in-between tags into a new part.').'</td></tr>'; |
|
$result.=&Apache::edit::end_table(); |
|
|
|
} |
|
return $result; |
|
} |
|
|
|
sub end_startpartmarker { |
|
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; |
|
my @result; |
|
if ($target eq 'edit') { $result[1]='no'; } |
|
return @result; |
|
} |
|
|
|
sub start_endpartmarker { |
|
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; |
|
my $result=''; |
|
if ($target eq 'edit') { |
|
$result=&Apache::edit::tag_start($target,$token); |
|
$result.=&mt('Marker for the end of a part. Place start marker above to wrap in-between tags into a new part.').'</td></tr>'; |
|
$result.=&Apache::edit::end_table(); |
|
|
|
} |
|
return $result; |
|
} |
|
|
|
sub end_endpartmarker { |
|
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; |
|
my @result; |
|
if ($target eq 'edit') { $result[1]='no'; } |
|
return @result; |
|
} |
|
|
|
|
|
|
|
|
|
|
sub start_part { |
sub start_part { |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
if (!$Apache::lonxml::metamode) { |
if (!$Apache::lonxml::metamode) { |
Line 1689 sub start_part {
|
Line 1951 sub start_part {
|
'.disableexampointprint'}) eq 'yes') { |
'.disableexampointprint'}) eq 'yes') { |
$allow_print_points=0; |
$allow_print_points=0; |
} |
} |
if (($Apache::lonhomework::type eq 'exam') && ($allow_print_points)) { $result .= '\fbox{\textit{'.$weight.' pt}}';} |
if (($Apache::lonhomework::type eq 'exam') && ($allow_print_points)) { |
|
$result .= '\vskip 10mm\fbox{\textit{'.$weight.' pt}}'; |
|
|
|
} |
} elsif ($target eq 'web') { |
} elsif ($target eq 'web') { |
$result.='<a name="'.&escape($Apache::inputtags::part).'" />'; |
if ($status eq 'CAN_ANSWER') { |
|
my $problemstatus = &get_problem_status($Apache::inputtags::part); |
|
my $probrandomize = &Apache::lonnet::EXT("resource.$Apache::inputtags::partlist[0].type"); |
|
my $probrandtries = &Apache::lonnet::EXT("resource.$Apache::inputtags::partlist[0].randomizeontries"); |
|
my $num = scalar(@Apache::inputtags::partlist)-1; |
|
if ($probrandomize eq 'randomizetry') { |
|
if (&Apache::lonnet::EXT("resource.$Apache::inputtags::part.type") ne 'randomizetry') { |
|
$result .= &randomizetry_part_header($problemstatus,'none',$num); |
|
} else { |
|
my $reqtries = &Apache::lonnet::EXT("resource.$Apache::inputtags::part.randomizeontries"); |
|
if ($probrandtries ne $reqtries) { |
|
$result .= &randomizetry_part_header($problemstatus,$reqtries,$num); |
|
} |
|
} |
|
} elsif (&Apache::lonnet::EXT("resource.$Apache::inputtags::part.type") eq 'randomizetry') { |
|
my $reqtries = &Apache::lonnet::EXT("resource.$Apache::inputtags::part.randomizeontries"); |
|
$result .= &randomizetry_part_header($problemstatus,$reqtries,$num); |
|
} |
|
} |
|
$result.='<a name="'.&escape($Apache::inputtags::part).'" ></a>'; |
} |
} |
} |
} |
} |
} |
Line 1858 sub start_problemtype {
|
Line 2142 sub start_problemtype {
|
$result .=&Apache::edit::checked_arg('When used as type(s):','for', |
$result .=&Apache::edit::checked_arg('When used as type(s):','for', |
[ ['exam','Exam/Quiz Problem'], |
[ ['exam','Exam/Quiz Problem'], |
['survey','Survey'], |
['survey','Survey'], |
['problem','Homework Problem'] ] |
['surveycred','Survey (with credit)'], |
|
['anonsurvey','Anonymous Survey'], |
|
['anonsurveycred','Anonymous Survey (with credit)'], |
|
['problem','Homework Problem'], |
|
['practice','Practice Problem'], |
|
['randomizetry','New Randomization Each Try'] ] |
,$token); |
,$token); |
$result .=&Apache::edit::end_row().&Apache::edit::start_spanning_row(); |
$result .=&Apache::edit::end_row().&Apache::edit::start_spanning_row(); |
} elsif ($target eq 'modified') { |
} elsif ($target eq 'modified') { |
Line 1891 sub end_startouttext {
|
Line 2180 sub end_startouttext {
|
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my $result=''; |
my $result=''; |
my $text=''; |
my $text=''; |
|
|
if ($target eq 'edit') { |
if ($target eq 'edit') { |
|
my $areaid = 'homework_edit_'.$Apache::lonxml::curdepth; |
$text=&Apache::lonxml::get_all_text("endouttext",$parser,$style); |
$text=&Apache::lonxml::get_all_text("endouttext",$parser,$style); |
$result.=&Apache::edit::start_table($token)."<tr><td>".&mt('Text Block')."</td> |
$result.=&Apache::edit::start_table($token)."<tr><td>".&mt('Text Block')."</td>" |
<td>".&mt('Delete:'). |
.'<td><span class="LC_nobreak">'.&mt('Delete?').' ' |
&Apache::edit::deletelist($target,$token) |
.&Apache::edit::deletelist($target,$token) |
."</td> |
.'</span></td>' |
<td>". |
.'<td align="left"><span id="math_'.$areaid.'" />' |
&Apache::edit::insertlist($target,$token). |
.&Apache::lonhtmlcommon::dragmath_button($areaid,1) |
'</td><td align="right" valign="top">' . |
.'<span></td>' |
&Apache::loncommon::helpLatexCheatsheet(). |
.'<td>' |
|
.&Apache::edit::insertlist($target,$token) |
|
.'</td>' |
|
.'<td align="right" valign="top">' . |
|
&Apache::loncommon::helpLatexCheatsheet(). |
&Apache::edit::end_row(). |
&Apache::edit::end_row(). |
&Apache::edit::start_spanning_row()."\n". |
&Apache::edit::start_spanning_row()."\n". |
&Apache::edit::editfield($token->[1],$text,"",80,8,1); |
&Apache::edit::editfield($token->[1],$text,"",80,8,1); |
Line 1964 sub start_simpleeditbutton {
|
Line 2257 sub start_simpleeditbutton {
|
my $url=$env{'request.noversionuri'}; |
my $url=$env{'request.noversionuri'}; |
$url=~s/\?.*$//; |
$url=~s/\?.*$//; |
my ($symb) = &Apache::lonnet::whichuser(); |
my ($symb) = &Apache::lonnet::whichuser(); |
$result='<table width="100%" bgcolor="#FFFFAA" border="2"><tr><td>'. |
# Warning makes more sense and is more important on edit screen |
'<a href="'.$url.'/smpedit?symb='.&escape($symb).'">'.&mt('Edit').'</a> - '.&mt('Note: it can take up to 10 minutes for changes to take effect for all users.'). |
# $result='<p class="LC_warning">' |
&Apache::loncommon::help_open_topic('Caching').'</td></tr></table><br />'; |
# .&mt('Note: it can take up to 10 minutes for changes to take effect for all users.') |
|
# .&Apache::loncommon::help_open_topic('Caching') |
|
# .'</p>'; |
|
$result.=&Apache::lonhtmlcommon::start_funclist() |
|
.&Apache::lonhtmlcommon::add_item_funclist( |
|
'<a href="'.$url.'/smpedit?symb='.&escape($symb).'">' |
|
.&mt('Edit').'</a>') |
|
.&Apache::lonhtmlcommon::end_funclist(); |
|
|
} |
} |
return $result; |
return $result; |
} |
} |
Line 1975 sub end_simpleeditbutton {
|
Line 2276 sub end_simpleeditbutton {
|
return ''; |
return ''; |
} |
} |
|
|
|
sub practice_problem_header { |
|
return '<span class="LC_info"><h3>'.&mt('Practice Problem').'</h3></span>'. |
|
'<span class="LC_info">'.&mt('Submissions are not permanently recorded'). |
|
'</span>'; |
|
} |
|
|
|
sub randomizetry_problem_header { |
|
my ($problemstatus,$reqtries) = @_; |
|
my ($header,$text); |
|
if ($reqtries > 1) { |
|
$header = &mt('New Problem Variation After Every [quant,_1,Try,Tries]',$reqtries); |
|
if (($problemstatus eq 'no') || |
|
($problemstatus eq 'no_feedback_ever')) { |
|
$text = &mt('A new variation will be generated after every [quant,_1,try,tries], until the tries limit is reached.',$reqtries); |
|
} else { |
|
$text = &mt('A new variation will be generated after every [quant,_1,try,tries], until correct or tries limit is reached.',$reqtries); |
|
} |
|
} else { |
|
$header = &mt('New Problem Variation Each Try'); |
|
if (($problemstatus eq 'no') || |
|
($problemstatus eq 'no_feedback_ever')) { |
|
$text = &mt('A new variation will be generated after each try until the tries limit is reached.'); |
|
|
|
} else { |
|
$text = &mt('A new variation will be generated after each try until correct or tries limit is reached.'); |
|
} |
|
} |
|
return '<span class="LC_info"><h3>'.$header.'</h3></span>'. |
|
'<span class="LC_info">'.$text.'</span><hr />'; |
|
} |
|
|
|
sub randomizetry_part_header { |
|
my ($problemstatus,$reqtries,$num) = @_; |
|
my ($header,$text); |
|
if ($reqtries eq 'none') { |
|
$header = &mt('No Question Variation'); |
|
$text = &mt('For this question there will no new variation after a try.'); |
|
} elsif ($reqtries > 1) { |
|
$header = &mt('New Question Variation After Every [quant,_1,Try,Tries]',$reqtries); |
|
if (($problemstatus eq 'no') || |
|
($problemstatus eq 'no_feedback_ever')) { |
|
$text = &mt('For this question a new variation will be generated after every [quant,_1,try,tries], until the tries limit is reached.',$reqtries); |
|
} else { |
|
$text = &mt('For this question a new variation will be generated after every [quant,_1,try,tries], until correct or tries limit is reached.',$reqtries); |
|
} |
|
} else { |
|
$header = &mt('New Question Variation For Each Try'); |
|
if (($problemstatus eq 'no') || |
|
($problemstatus eq 'no_feedback_ever')) { |
|
$text = &mt('For this question a new variation will be generated after each try until the tries limit is reached.'); |
|
} else { |
|
$text = &mt('For this question a new variation will be generated after each try until correct or tries limit is reached.'); |
|
} |
|
} |
|
my $output; |
|
if ($num > 1) { |
|
$output .= '<hr />'; |
|
} |
|
$output .= '<span class="LC_info"><h4>'.$header.'</h4></span>'. |
|
'<span class="LC_info">'.$text.'</span><br /><br />'; |
|
return $output; |
|
} |
|
|
1; |
1; |
__END__ |
__END__ |
|
|
|
=pod |
|
|
|
=back |
|
|
|
=cut |