version 1.346, 2006/04/15 01:06:59
|
version 1.362, 2006/07/27 20:47:03
|
Line 38 use Apache::lonlocal;
|
Line 38 use Apache::lonlocal;
|
use Apache::lonxml; |
use Apache::lonxml; |
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 LONCAPA; |
|
|
BEGIN { |
BEGIN { |
&Apache::lonxml::register('Apache::structuretags',('block','languageblock','instructorcomment','while','randomlist','problem','library','web','tex','part','preduedate','postanswerdate','solved','notsolved','problemtype','startouttext','endouttext','simpleeditbutton','definetag')); |
&Apache::lonxml::register('Apache::structuretags',('block','languageblock','instructorcomment','while','randomlist','problem','library','web','tex','part','preduedate','postanswerdate','solved','notsolved','problemtype','startouttext','endouttext','simpleeditbutton','definetag')); |
} |
} |
Line 79 sub page_start {
|
Line 82 sub page_start {
|
} |
} |
} |
} |
|
|
|
|
if ($target eq 'tex') { |
if ($target eq 'tex') { |
return |
return |
&Apache::londefdef::start_html($target,$token,$tagstack, |
&Apache::londefdef::start_html($target,$token,$tagstack, |
Line 161 sub page_start {
|
Line 163 sub page_start {
|
$form_tag_start.=&Apache::edit::form_change_detection(); |
$form_tag_start.=&Apache::edit::form_change_detection(); |
} |
} |
$form_tag_start.='>'; |
$form_tag_start.='>'; |
} |
|
|
|
|
my $symb=&Apache::lonnet::symbread(); |
|
if ($symb =~ /\S/) { |
|
$symb= |
|
&HTML::Entities::encode(&Apache::lonenc::check_encrypt($symb)); |
|
$form_tag_start.= |
|
'<input type="hidden" name="symb" value="'.$symb.'" />'; |
|
} |
|
} |
return ($page_start,$form_tag_start); |
return ($page_start,$form_tag_start); |
} |
} |
|
|
Line 242 sub problem_edit_header {
|
Line 251 sub problem_edit_header {
|
<input type="submit" name="Undo" accesskey="u" value="'.&mt('undo').'" /> <hr /> |
<input type="submit" name="Undo" accesskey="u" value="'.&mt('undo').'" /> <hr /> |
<input type="submit" name="submit" accesskey="s" value="'.&mt('Submit Changes and Edit').'" /> |
<input type="submit" name="submit" accesskey="s" value="'.&mt('Submit Changes and Edit').'" /> |
<input type="submit" name="submit" accesskey="v" value="'.&mt('Submit Changes and View').'" /><table><tr><td>'. |
<input type="submit" name="submit" accesskey="v" value="'.&mt('Submit Changes and View').'" /><table><tr><td>'. |
&Apache::loncommon::help_open_menu('','Problem Editing Help','Problem_Editor_XML_Index','',5,'Authoring',undef,undef,undef,'Problem Editing Help') |
&Apache::loncommon::help_open_menu('Problem Editing Help','Problem_Editor_XML_Index',5,'Authoring',undef,undef,undef,'Problem Editing Help') |
.'</td></tr></table>'. |
.'</td></tr></table>'. |
'<table border="0" width="100%"><tr><td bgcolor="#DDDDDD">'; |
'<table border="0" width="100%"><tr><td bgcolor="#DDDDDD">'; |
} |
} |
Line 250 sub problem_edit_header {
|
Line 259 sub problem_edit_header {
|
sub problem_edit_footer { |
sub problem_edit_footer { |
return '</td></tr></table><br /><input type="submit" name="submit" value="'.&mt('Submit Changes and Edit').'" /> |
return '</td></tr></table><br /><input type="submit" name="submit" value="'.&mt('Submit Changes and Edit').'" /> |
<input type="submit" name="submit" value="'.&mt('Submit Changes and View').'" />'. |
<input type="submit" name="submit" value="'.&mt('Submit Changes and View').'" />'. |
&Apache::lonhtmlcommon::htmlareaselectactive(@Apache::lonxml::htmlareafields). |
&Apache::lonhtmlcommon::htmlareaselectactive(&Apache::lonhtmlcommon::get_htmlareafields()). |
"\n</form>\n".&Apache::loncommon::end_page(); |
"\n</form>\n".&Apache::loncommon::end_page(); |
} |
} |
|
|
Line 333 Feedback Mode:
|
Line 342 Feedback Mode:
|
} |
} |
|
|
sub initialize_storage { |
sub initialize_storage { |
%Apache::lonhomework::results=(); |
my ($given_symb) = @_; |
%Apache::lonhomework::history=(); |
undef(%Apache::lonhomework::results); |
my ($symb,$courseid,$domain,$name) = &Apache::lonxml::whichuser(); |
undef(%Apache::lonhomework::history); |
|
my ($symb,$courseid,$domain,$name) = |
|
&Apache::lonxml::whichuser($given_symb); |
|
|
|
# anonymous users (CODEd exams) have no data |
|
if ($name eq 'anonymous' |
|
&& !defined($domain)) { |
|
return; |
|
} |
|
|
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 355 sub initialize_storage {
|
Line 373 sub initialize_storage {
|
%Apache::lonhomework::history= |
%Apache::lonhomework::history= |
&Apache::lonnet::restore($symb,$courseid,$domain,$name); |
&Apache::lonnet::restore($symb,$courseid,$domain,$name); |
} |
} |
|
|
#ignore error conditions |
#ignore error conditions |
my ($temp)=keys %Apache::lonhomework::history ; |
my ($temp)=keys %Apache::lonhomework::history ; |
if ($temp =~ m/^error:.*/) { %Apache::lonhomework::history=(); } |
if ($temp =~ m/^error:.*/) { %Apache::lonhomework::history=(); } |
Line 367 sub initialize_storage {
|
Line 386 sub initialize_storage {
|
# Will increment totals for attempts, students, and corrects |
# Will increment totals for attempts, students, and corrects |
# if running user has student role. |
# if running user has student role. |
sub finalize_storage { |
sub finalize_storage { |
|
my ($given_symb) = @_; |
my $result; |
my $result; |
if (%Apache::lonhomework::results) { |
if (%Apache::lonhomework::results) { |
my @remove = grep(/^INTERNAL_/,keys(%Apache::lonhomework::results)); |
my @remove = grep(/^INTERNAL_/,keys(%Apache::lonhomework::results)); |
delete(@Apache::lonhomework::results{@remove}); |
delete(@Apache::lonhomework::results{@remove}); |
my ($symb,$courseid,$domain,$name) = &Apache::lonxml::whichuser(); |
my ($symb,$courseid,$domain,$name) = |
|
&Apache::lonxml::whichuser($given_symb); |
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 442 sub checkout_msg {
|
Line 463 sub checkout_msg {
|
'warning'=>'Checking out resources is subject to course policies, and may exclude future credit even if done erroneously.', |
'warning'=>'Checking out resources is subject to course policies, and may exclude future credit even if done erroneously.', |
'checkout'=>'Check out Exam for Viewing', |
'checkout'=>'Check out Exam for Viewing', |
'checkout?'=>'Check out Exam?'); |
'checkout?'=>'Check out Exam?'); |
|
my $uri = &Apache::lonenc::check_encrypt($env{'request.uri'}); |
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"> |
<font color="red"> |
<p>$lt{'warning'}</p> |
<p>$lt{'warning'}</p> |
</font> |
</font> |
<form name="checkout" method="POST" action="$env{'request.uri'}"> |
<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 460 sub firstaccess_msg {
|
Line 482 sub firstaccess_msg {
|
my ($map)=&Apache::lonnet::decode_symb($symb); |
my ($map)=&Apache::lonnet::decode_symb($symb); |
my $foldertitle=&Apache::lonnet::gettitle($map); |
my $foldertitle=&Apache::lonnet::gettitle($map); |
&Apache::lonxml::debug("map is $map title is $foldertitle"); |
&Apache::lonxml::debug("map is $map title is $foldertitle"); |
|
my $uri = &Apache::lonenc::check_encrypt($env{'request.uri'}); |
return (<<ENDCHECKOUT); |
return (<<ENDCHECKOUT); |
<h2>The resources in "$foldertitle" are open for a limited time. Once you click the 'Show Resource' button below you have $time to complete all resources "$foldertitle".</h2> |
<h2>The resources in "$foldertitle" are open for a limited time. Once you click the 'Show Resource' button below you have $time to complete all resources "$foldertitle".</h2> |
<form name="markaccess" method="POST" action="$env{'request.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="Show Resource" onClick="javascript:if (confirm('Start Timer?')) { document.markaccess.submit(); }" /> |
<input type="button" name="accessbutton" value="Show Resource" onClick="javascript:if (confirm('Start Timer?')) { document.markaccess.submit(); }" /> |
</form> |
</form> |
Line 503 sub init_problem_globals {
|
Line 526 sub init_problem_globals {
|
@Apache::structuretags::whileline=(); |
@Apache::structuretags::whileline=(); |
$Apache::lonhomework::scantronmode=0; |
$Apache::lonhomework::scantronmode=0; |
undef($Apache::lonhomework::name); |
undef($Apache::lonhomework::name); |
|
undef($Apache::lonhomework::default_type); |
|
undef($Apache::lonhomework::type); |
} |
} |
|
|
sub reset_problem_globals { |
sub reset_problem_globals { |
Line 515 sub reset_problem_globals {
|
Line 539 sub reset_problem_globals {
|
#detect if we try to do 2 problems in one file |
#detect if we try to do 2 problems in one file |
# undef($Apache::lonhomework::parsing_a_problem); |
# undef($Apache::lonhomework::parsing_a_problem); |
undef($Apache::lonhomework::name); |
undef($Apache::lonhomework::name); |
|
undef($Apache::lonhomework::default_type); |
|
undef($Apache::lonhomework::type); |
|
undef($Apache::lonhomework::scantronmode); |
|
undef($Apache::lonhomework::problemstatus); |
|
undef($Apache::lonhomework::ignore_response_errors); |
} |
} |
|
|
sub set_problem_state { |
sub set_problem_state { |
Line 597 sub start_problem {
|
Line 626 sub start_problem {
|
my $accessmsg; |
my $accessmsg; |
|
|
my $name= &get_resource_name($parstack,$safeeval); |
my $name= &get_resource_name($parstack,$safeeval); |
my ($result,$form_tag_start)= |
my ($result,$form_tag_start); |
&page_start($target,$token,$tagstack,$parstack,$parser,$safeeval, |
if ($target eq 'web' || $target eq 'webgrade' || $target eq 'tex' |
$name); |
|| $target eq 'edit') { |
|
($result,$form_tag_start) = |
|
&page_start($target,$token,$tagstack,$parstack,$parser,$safeeval, |
|
$name); |
|
} |
|
|
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); } |
Line 701 sub start_problem {
|
Line 735 sub start_problem {
|
'problem'); |
'problem'); |
} |
} |
} elsif ($target eq 'web') { |
} elsif ($target eq 'web') { |
|
if ($status eq 'CAN_ANSWER' |
|
&& $slot_name ne '' |
|
&& $Apache::lonhomework::history{'resource.0.checkedin'} eq '') { |
|
# unproctored slot access, self checkin |
|
&Apache::bridgetask::check_in('problem',undef,undef, |
|
$slot_name); |
|
} |
$result.="\n $form_tag_start". |
$result.="\n $form_tag_start". |
'<input type="hidden" name="submitted" value="yes" />'; |
'<input type="hidden" name="submitted" value="yes" />'; |
# create a page header and exit |
# create a page header and exit |
Line 861 sub end_problem {
|
Line 902 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::lonxml::htmlareafields); |
$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 872 sub end_problem {
|
Line 913 sub end_problem {
|
} |
} |
if ($env{'form.print_discussions'} eq 'yes') { |
if ($env{'form.print_discussions'} eq 'yes') { |
$result.=&Apache::lonxml::xmlend($target,$parser); |
$result.=&Apache::lonxml::xmlend($target,$parser); |
$result=~s/<\/html>//; |
|
} else { |
} else { |
$result .= '\keephidden{ENDOFPROBLEM}\vskip 0.5mm\noindent\makebox[\textwidth/$number_of_columns][b]{\hrulefill}'; |
$result .= '\keephidden{ENDOFPROBLEM}\vskip 0.5mm\noindent\makebox[\textwidth/$number_of_columns][b]{\hrulefill}'; |
if (not $env{'request.symb'} =~ m/\.page_/) { |
if (not $env{'request.symb'} =~ m/\.page_/) { |
Line 957 sub end_library {
|
Line 997 sub end_library {
|
$result=&problem_edit_footer(); |
$result=&problem_edit_footer(); |
} elsif ($target eq 'web' && $$tagstack[0] ne 'problem' && |
} elsif ($target eq 'web' && $$tagstack[0] ne 'problem' && |
$env{'request.state'} eq "construct") { |
$env{'request.state'} eq "construct") { |
$result.='</form>'.&Apache::lonxml::xmlend(); |
$result.='</form>'.&Apache::loncommon::end_page({'discussion' => 1}); |
} |
} |
if ($$tagstack[0] eq 'library') { &reset_problem_globals('library') }; |
if ($$tagstack[0] eq 'library') { &reset_problem_globals('library') }; |
return $result; |
return $result; |
Line 1360 sub start_part {
|
Line 1400 sub start_part {
|
} |
} |
if (($Apache::lonhomework::type eq 'exam') && ($allow_print_points)) { $result .= '\fbox{\textit{'.$weight.' pt}}';} |
if (($Apache::lonhomework::type eq 'exam') && ($allow_print_points)) { $result .= '\fbox{\textit{'.$weight.' pt}}';} |
} elsif ($target eq 'web') { |
} elsif ($target eq 'web') { |
$result.='<a name="'.&Apache::lonnet::escape($Apache::inputtags::part).'" />'; |
$result.='<a name="'.&escape($Apache::inputtags::part).'" />'; |
} |
} |
} |
} |
} |
} |
Line 1558 sub end_startouttext {
|
Line 1598 sub end_startouttext {
|
."</td> |
."</td> |
<td>". |
<td>". |
&Apache::edit::insertlist($target,$token). |
&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::loncommon::helpLatexCheatsheet () . |
|
&Apache::edit::editfield($token->[1],$text,"",80,8,1); |
&Apache::edit::editfield($token->[1],$text,"",80,8,1); |
} |
} |
if ($target eq 'modified') { |
if ($target eq 'modified') { |
Line 1613 sub start_simpleeditbutton {
|
Line 1654 sub start_simpleeditbutton {
|
$url=~s/\?.*$//; |
$url=~s/\?.*$//; |
my ($symb) = &Apache::lonxml::whichuser(); |
my ($symb) = &Apache::lonxml::whichuser(); |
$result='<table width="100%" bgcolor="#FFFFAA" border="2"><tr><td>'. |
$result='<table width="100%" bgcolor="#FFFFAA" border="2"><tr><td>'. |
'<a href="'.$url.'/smpedit?symb='.&Apache::lonnet::escape($symb).'">'.&mt('Edit').'</a> - '.&mt('Note: it can take up to 10 minutes for changes to take effect for all users.'). |
'<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.'). |
&Apache::loncommon::help_open_topic('Caching').'</td></tr></table><br />'; |
&Apache::loncommon::help_open_topic('Caching').'</td></tr></table><br />'; |
} |
} |
return $result; |
return $result; |