version 1.512.2.13.4.4, 2020/10/01 18:54:21
|
version 1.548, 2016/04/04 17:24:18
|
Line 63 use Apache::londefdef;
|
Line 63 use Apache::londefdef;
|
use Apache::lonenc(); |
use Apache::lonenc(); |
use Apache::loncommon(); |
use Apache::loncommon(); |
use Time::HiRes qw( gettimeofday tv_interval ); |
use Time::HiRes qw( gettimeofday tv_interval ); |
use HTML::Entities(); |
|
use lib '/home/httpd/lib/perl/'; |
use lib '/home/httpd/lib/perl/'; |
use LONCAPA; |
use LONCAPA; |
|
|
Line 227 sub end_tex {
|
Line 226 sub end_tex {
|
sub homework_js { |
sub homework_js { |
my ($postsubmit,$timeout); |
my ($postsubmit,$timeout); |
if (($env{'request.course.id'}) && ($env{'request.state'} ne 'construct')) { |
if (($env{'request.course.id'}) && ($env{'request.state'} ne 'construct')) { |
my $crstype; |
my $crstype = &Apache::loncommon::course_type(); |
if (&Apache::loncommon::course_type() eq 'Community') { |
if ($crstype eq 'Community') { |
$crstype = 'community'; |
$crstype = 'community'; |
|
} elsif ($crstype eq 'Placement') { |
|
$crstype = 'placement'; |
} else { |
} else { |
if ($env{'course.'.$env{'request.course.id'}.'.internal.coursecode'}) { |
if ($env{'course.'.$env{'request.course.id'}.'.internal.coursecode'}) { |
$crstype = 'official'; |
$crstype = 'official'; |
Line 271 sub homework_js {
|
Line 272 sub homework_js {
|
$jstimeout = 1000 * $timeout; |
$jstimeout = 1000 * $timeout; |
} |
} |
return &Apache::loncommon::resize_textarea_js(). |
return &Apache::loncommon::resize_textarea_js(). |
&Apache::loncommon::colorfuleditor_js(). |
&Apache::loncommon::colorfuleditor_js(). |
&setmode_javascript(). |
&setmode_javascript(). |
<<"JS"; |
<<"JS"; |
<script type="text/javascript"> |
<script type="text/javascript"> |
Line 318 var keypresshandled = 0;
|
Line 319 var keypresshandled = 0;
|
var postsubmit = '$postsubmit'; |
var postsubmit = '$postsubmit'; |
|
|
\$(document).ready(function(){ |
\$(document).ready(function(){ |
if (postsubmit != 'off') { |
if (postsubmit != 'off') { |
\$(document).keypress(function(event){ |
\$(document).keypress(function(event){ |
var keycode = (event.keyCode ? event.keyCode : event.which); |
var keycode = (event.keyCode ? event.keyCode : event.which); |
if ((keycode == '13') && (keypresshandled == 0)) { |
if ((keycode == '13') && (keypresshandled == 0)) { |
Line 391 sub setmode_javascript {
|
Line 392 sub setmode_javascript {
|
<script type="text/javascript"> |
<script type="text/javascript"> |
// <![CDATA[ |
// <![CDATA[ |
function setmode(form,probmode) { |
function setmode(form,probmode) { |
var initial = form.problemmode.value; |
|
form.problemmode.value = probmode; |
form.problemmode.value = probmode; |
form.submit(); |
form.submit(); |
form.problemmode.value = initial; |
|
} |
} |
// ]]> |
// ]]> |
</script> |
</script> |
Line 420 sub page_start {
|
Line 419 sub page_start {
|
$extra_head .= &homework_js(). |
$extra_head .= &homework_js(). |
&Apache::lonhtmlcommon::dragmath_js("EditMathPopup"); |
&Apache::lonhtmlcommon::dragmath_js("EditMathPopup"); |
if (&Apache::lonhtmlcommon::htmlareabrowser()) { |
if (&Apache::lonhtmlcommon::htmlareabrowser()) { |
my %textarea_args; |
my %textarea_args = ( |
if (($env{'request.state'} ne 'construct') || |
|
($env{'environment.nocodemirror'})) { |
|
%textarea_args = ( |
|
dragmath => 'math', |
dragmath => 'math', |
); |
); |
} |
|
$extra_head .= &Apache::lonhtmlcommon::htmlareaselectactive(\%textarea_args); |
$extra_head .= &Apache::lonhtmlcommon::htmlareaselectactive(\%textarea_args); |
} |
} |
my $is_task = ($env{'request.uri'} =~ /\.task$/); |
my $is_task = ($env{'request.uri'} =~ /\.task$/); |
Line 497 sub page_start {
|
Line 492 sub page_start {
|
} |
} |
} |
} |
if ($needs_upload) { |
if ($needs_upload) { |
$extra_head .= &Apache::lonhtmlcommon::file_submissionchk_js(); |
$extra_head .= &Apache::lonhtmlcommon::file_submissionchk_js() |
|
.'<script type="text/javascript" |
|
src="/res/adm/includes/file_upload.js"></script>'; |
} |
} |
} |
} |
|
|
Line 528 sub page_start {
|
Line 525 sub page_start {
|
} 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') { |
# Breadcrumbs for Authoring Space |
unless ($env{'form.inhibitmenu'} eq 'yes') { |
&Apache::lonhtmlcommon::clear_breadcrumbs(); |
# Breadcrumbs for Authoring Space |
&Apache::lonhtmlcommon::add_breadcrumb({ |
&Apache::lonhtmlcommon::clear_breadcrumbs(); |
'text' => 'Authoring Space', |
&Apache::lonhtmlcommon::add_breadcrumb({ |
'href' => &Apache::loncommon::authorspace($env{'request.uri'}), |
'text' => 'Authoring Space', |
}); |
'href' => &Apache::loncommon::authorspace($env{'request.uri'}), |
# breadcrumbs (and tools) will be created |
}); |
# in start_page->bodytag->innerregister |
# breadcrumbs (and tools) will be created |
|
# in start_page->bodytag->innerregister |
|
|
# FIXME Where are we? |
# FIXME Where are we? |
# &Apache::lonhtmlcommon::add_breadcrumb({ |
# &Apache::lonhtmlcommon::add_breadcrumb({ |
# 'text' => 'Problem Editing', # 'Problem Testing' |
# 'text' => 'Problem Editing', # 'Problem Testing' |
# 'href' => '', |
# 'href' => '', |
# }); |
# }); |
$pageheader =&Apache::loncommon::head_subbox( |
$pageheader = &Apache::loncommon::head_subbox( |
&Apache::loncommon::CSTR_pageheader()); |
&Apache::loncommon::CSTR_pageheader()); |
} |
} |
|
} |
} elsif (!defined($found{'body'})) { |
} elsif (!defined($found{'body'})) { |
my %add_entries; |
my %add_entries; |
my $background=&Apache::lonxml::get_param('background',$parstack, |
my $background=&Apache::lonxml::get_param('background',$parstack, |
Line 651 sub setup_rndseed {
|
Line 650 sub setup_rndseed {
|
unless (defined($questiontype)) { |
unless (defined($questiontype)) { |
$questiontype = $Apache::lonhomework::type; |
$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' |
|| ($Apache::lonhomework::history{'resource.CODE'}) |
|| $Apache::lonhomework::history{'resource.CODE'}) { |
|| (($env{'form.code_for_randomlist'}) && ($target eq 'analyze'))) { |
|
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
['rndseed']); |
['rndseed']); |
$rndseed=$env{'form.rndseed'}; |
$rndseed=$env{'form.rndseed'}; |
Line 664 sub setup_rndseed {
|
Line 662 sub setup_rndseed {
|
if (!$rndseed) { |
if (!$rndseed) { |
$rndseed=time; |
$rndseed=time; |
} |
} |
unless ($env{'form.code_for_randomlist'}) { |
$env{'form.rndseed'}=$rndseed; |
$env{'form.rndseed'}=$rndseed; |
|
} |
|
} |
} |
if (($env{'request.state'} eq "construct") && |
if (($env{'request.state'} eq "construct") && |
($Apache::lonhomework::type eq 'randomizetry')) { |
($Apache::lonhomework::type eq 'randomizetry')) { |
Line 694 sub setup_rndseed {
|
Line 690 sub setup_rndseed {
|
$rndseed=join(':',&Apache::lonnet::digest($rndseed)); |
$rndseed=join(':',&Apache::lonnet::digest($rndseed)); |
} |
} |
} |
} |
if (($env{'form.code_for_randomlist'}) && ($target eq 'analyze')) { |
if ($Apache::lonhomework::history{'resource.CODE'}) { |
$env{'form.CODE'} = $env{'form.code_for_randomlist'}; |
|
$rndseed=&Apache::lonnet::rndseed(); |
|
undef($env{'form.CODE'}); |
|
} elsif ($Apache::lonhomework::history{'resource.CODE'}) { |
|
$rndseed=&Apache::lonnet::rndseed(); |
$rndseed=&Apache::lonnet::rndseed(); |
} |
} |
$set_safespace = 1; |
$set_safespace = 1; |
Line 782 sub problem_edit_buttons {
|
Line 774 sub problem_edit_buttons {
|
if ($mode eq 'editxml') { |
if ($mode eq 'editxml') { |
$result.=&problem_edit_action_button('subedit','edit','e','Edit',1); |
$result.=&problem_edit_action_button('subedit','edit','e','Edit',1); |
$result.=&problem_edit_action_button('subundo','undoxml','u','Undo',1); |
$result.=&problem_edit_action_button('subundo','undoxml','u','Undo',1); |
if ($env{'environment.nocodemirror'}) { |
$result.=&Apache::lonhtmlcommon::dragmath_button("LC_editxmltext",1); |
$result.=&Apache::lonhtmlcommon::dragmath_button("LC_editxmltext",1); |
|
} |
|
} else { |
} else { |
$result.=&problem_edit_action_button('subeditxml','editxml','x','EditXML',1); |
$result.=&problem_edit_action_button('subeditxml','editxml','x','EditXML',1); |
$result.=&problem_edit_action_button('subundo','undo','u','Undo',1); |
$result.=&problem_edit_action_button('subundo','undo','u','Undo',1); |
Line 800 sub problem_edit_header {
|
Line 790 sub problem_edit_header {
|
<div class="LC_edit_problem_header"> |
<div class="LC_edit_problem_header"> |
<div class="LC_edit_problem_header_title"> |
<div class="LC_edit_problem_header_title"> |
'.&mt('Problem Editing').$mode.&Apache::loncommon::help_open_menu('Problem Editing','Problem_Editor_XML_Index',5,'Authoring').' |
'.&mt('Problem Editing').$mode.&Apache::loncommon::help_open_menu('Problem Editing','Problem_Editor_XML_Index',5,'Authoring').' |
</div><div class="LC_edit_actionbar" id="actionbar">'. |
</div><div class="LC_edit_actionbar" id="actionbar">'. |
'<input type="hidden" name="problemmode" value="saveedit" />'. |
'<input type="hidden" name="problemmode" value="saveedit" />'. |
&problem_edit_buttons(); |
&problem_edit_buttons(); |
|
|
$return .= '</div></div>' . &Apache::lonxml::message_location(); |
$return .= '</div></div>' . &Apache::lonxml::message_location(); |
$return .= '<link rel="stylesheet" href="/adm/codemirror/codemirror-combined.css" /> |
$return .= '<link rel="stylesheet" href="/adm/codemirror/codemirror-combined.css" /> |
Line 830 sub problem_edit_header {
|
Line 820 sub problem_edit_header {
|
return $return; |
return $return; |
} |
} |
|
|
|
|
sub problem_edit_footer { |
sub problem_edit_footer { |
my $resource = $env{'request.ambiguous'}; |
my $resource = $env{'request.ambiguous'}; |
return '</td></tr></table><br /> |
return '</td></tr></table><br /> |
Line 906 sub problem_web_to_edit_header {
|
Line 895 sub problem_web_to_edit_header {
|
".&mt("Problem Type:")." |
".&mt("Problem Type:")." |
<select name='problemtype'> |
<select name='problemtype'> |
<option value=''></option> |
<option value=''></option> |
".&option('exam' ,'problemtype').&mt("Exam Problem")."</option> |
".&option('exam' ,'problemtype').&mt("Bubblesheet 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('surveycred' ,'problemtype').&mt("Survey Question (with credit)")."</option> |
Line 991 $show_all
|
Line 980 $show_all
|
'onclick="javascript:setmode(this.form,'."'edit'".')" />'; |
'onclick="javascript:setmode(this.form,'."'edit'".')" />'; |
$result .= '<input type="button" name="submitmode" accesskey="x" value="'.&mt('EditXML').'" '. |
$result .= '<input type="button" name="submitmode" accesskey="x" value="'.&mt('EditXML').'" '. |
'onclick="javascript:setmode(this.form,'."'editxml'".')" />'; |
'onclick="javascript:setmode(this.form,'."'editxml'".')" />'; |
|
if ($env{'browser.type'} ne 'explorer' || $env{'browser.version'} > 9) { |
|
my $uri = $env{'request.uri'}; |
|
my $daxeurl = '/daxepage'.$uri; |
|
$result .= '<input type="button" value="'.&mt('Edit with Daxe').'" '. |
|
'onclick="window.open(\''.$daxeurl.'\',\'_blank\');" />'; |
|
} |
$result.=' |
$result.=' |
</div> |
</div> |
<hr /> |
<hr /> |
Line 1026 sub initialize_storage {
|
Line 1021 sub initialize_storage {
|
} |
} |
%Apache::lonhomework::history= |
%Apache::lonhomework::history= |
&Apache::lonnet::tmprestore($namespace,'',$domain,$name); |
&Apache::lonnet::tmprestore($namespace,'',$domain,$name); |
my ($temp)=keys(%Apache::lonhomework::history); |
my ($temp)=keys(%Apache::lonhomework::history) ; |
&Apache::lonxml::debug("Return message of $temp"); |
&Apache::lonxml::debug("Return message of $temp"); |
} else { |
} else { |
%Apache::lonhomework::history= |
%Apache::lonhomework::history= |
Line 1049 sub initialize_storage {
|
Line 1044 sub initialize_storage {
|
&check_correctness_changes() is called in two circumstances |
&check_correctness_changes() is called in two circumstances |
in which the results hash is to be stored permanently, for |
in which the results hash is to be stored permanently, for |
grading triggered by a student's submission, where feedback on |
grading triggered by a student's submission, where feedback on |
correctness is to be provided to the student. |
correctness is to be provided to the student. |
|
|
1. Immediately prior to storing the results hash |
1. Immediately prior to storing the results hash |
|
|
To handle the case where a student's submission (and award) were |
To handle the case where a student's submission (and award) were |
stored after history was retrieved in &initialize_storage(), e.g., |
stored after history was retrieved in &initialize_storage(), e.g., |
if a student submitted answers in quick succession (e.g., from |
if a student submitted answers in quick succession (e.g., from |
multiple tabs). &Apache::inputtags::hidealldata() is called for |
multiple tabs). &Apache::inputtags::hidealldata() is called for |
any parts with out-of-order storage (i.e., correct then incorrect, |
any parts with out-of-order storage (i.e., correct then incorrect, |
where awarded >= 1 when correct). |
where awarded >= 1 when correct). |
Line 1065 sub initialize_storage {
|
Line 1060 sub initialize_storage {
|
To handle the case where lond on the student's homeserver returns |
To handle the case where lond on the student's homeserver returns |
delay:N -- where N is the number of transactions between the last |
delay:N -- where N is the number of transactions between the last |
retrieved in &initialize_storage() and the last stored immediately |
retrieved in &initialize_storage() and the last stored immediately |
before permanent storage of the current transaction via |
before permanent storage of the current transaction via |
lond::store_handler(). &Apache::grades::makehidden() is called |
lond::store_handler(). &Apache::grades::makehidden() is called |
for any parts with out-of-order storage (i.e., correct then incorrect, |
for any parts with out-of-order storage (i.e., correct then incorrect, |
where awarded >= 1 when correct). |
where awarded >= 1 when correct). |
|
|
Will call &store_aggregates() to increment totals for attempts, |
Will call &store_aggregates() to increment totals for attempts, |
students, and corrects, if running user has student role. |
students, and corrects, if running user has student role. |
|
|
=cut |
=cut |
|
|
|
|
Line 1193 sub finalize_storage {
|
Line 1188 sub finalize_storage {
|
=item check_correctness_changes() |
=item check_correctness_changes() |
|
|
For all parts for which current results contain a solved status |
For all parts for which current results contain a solved status |
of "incorrect_attempted", check if there was a transaction in which |
of "incorrect_attempted", check if there was a transaction in which |
solved was set to "correct_by_student" in the time since the last |
solved was set to "correct_by_student" in the time since the last |
transaction (retrieved when &initialize_storage() was called i.e., |
transaction (retrieved when &initialize_storage() was called i.e., |
when &start_problem() was called), unless: |
when &start_problem() was called), unless: |
(a) questiontype parameter is set to survey or anonymous survey (+/- credit) |
(a) questiontype parameter is set to survey or anonymous survey (+/- credit) |
(b) problemstatus is set to no or no_feedback_ever |
(b) problemstatus is set to no or no_feedback_ever |
If such a transaction exists, and did not occur after "reset status" |
If such a transaction exists, and did not occur after "reset status" |
by a user with grading privileges, then the current transaction is an |
by a user with grading privileges, then the current transaction is an |
example of an out-of-order transaction (i.e., incorrect occurring after |
example of an out-of-order transaction (i.e., incorrect occurring after |
correct). Accordingly, the current transaction should be hidden. |
correct). Accordingly, the current transaction should be hidden. |
Line 1293 sub store_aggregates {
|
Line 1288 sub store_aggregates {
|
} else { |
} else { |
$anoncounter{$symb."\0".$part} = 1; |
$anoncounter{$symb."\0".$part} = 1; |
} |
} |
my $needsrelease = $Apache::lonnet::needsrelease{'parameter:type:'.$Apache::lonhomework::results{'resource.'.$part.'.type'}}; |
my $needsrelease = $Apache::lonnet::needsrelease{'parameter:type:'.$Apache::lonhomework::results{'resource.'.$part.'.type'}.'::'}; |
if ($needsrelease) { |
if ($needsrelease) { |
my $curr_required = $env{'course.'.$env{'request.course.id'}.'.internal.releaserequired'}; |
my $curr_required = $env{'course.'.$env{'request.course.id'}.'.internal.releaserequired'}; |
if ($curr_required eq '') { |
if ($curr_required eq '') { |
&Apache::lonnet::update_released_required($needsrelease); |
&Apache::lonnet::update_released_required($needsrelease); |
Line 1327 sub checkout_msg {
|
Line 1322 sub checkout_msg {
|
'resource'=>'The resource needs to be checked out', |
'resource'=>'The resource needs to be checked out', |
'id_expln'=>'As a resource gets checked out, a unique timestamped ID is given to it, and a permanent record is left in the system.', |
'id_expln'=>'As a resource gets checked out, a unique timestamped ID is given to it, and a permanent record is left in the system.', |
'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 Bubblesheet Exam for Viewing', |
'checkout?'=>'Check out Exam?'); |
'checkout?'=>'Check out Bubblesheet Exam?'); |
my $uri = &Apache::lonenc::check_encrypt($env{'request.uri'}); |
my $uri = &Apache::lonenc::check_encrypt($env{'request.uri'}); |
return (<<ENDCHECKOUT); |
return (<<ENDCHECKOUT); |
<h2>$lt{'resource'}</h2> |
<h2>$lt{'resource'}</h2> |
Line 1367 sub firstaccess_msg {
|
Line 1362 sub firstaccess_msg {
|
my $uri = &Apache::lonenc::check_encrypt($env{'request.uri'}); |
my $uri = &Apache::lonenc::check_encrypt($env{'request.uri'}); |
my $buttontext = &mt('Show Resource'); |
my $buttontext = &mt('Show Resource'); |
my $timertext = &mt('Start Timer?'); |
my $timertext = &mt('Start Timer?'); |
my $shownsymb = &HTML::Entities::encode(&Apache::lonenc::check_encrypt($symb),'\'"<>&'); |
|
$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="hidden" name="symb" value="$shownsymb" /> |
|
<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> |
ENDCHECKOUT |
ENDCHECKOUT |
Line 1527 sub start_problem {
|
Line 1520 sub start_problem {
|
my $status; |
my $status; |
my $accessmsg; |
my $accessmsg; |
my $resource_due; |
my $resource_due; |
|
my $ipused; |
|
|
my $name= &get_resource_name($parstack,$safeeval); |
my $name= &get_resource_name($parstack,$safeeval); |
my ($result,$form_tag_start,$slot_name,$slot,$probpartlist); |
my ($result,$form_tag_start,$slot_name,$slot,$probpartlist); |
Line 1535 sub start_problem {
|
Line 1529 sub start_problem {
|
$target eq 'tex') { |
$target eq 'tex') { |
if ($env{'form.markaccess'}) { |
if ($env{'form.markaccess'}) { |
my @interval=&Apache::lonnet::EXT("resource.0.interval"); |
my @interval=&Apache::lonnet::EXT("resource.0.interval"); |
my ($timelimit) = ($interval[0] =~ /^(\d+)/); |
my ($timelimit) = split(/_/,$interval[0]); |
&Apache::lonnet::set_first_access($interval[1],$timelimit); |
&Apache::lonnet::set_first_access($interval[1],$timelimit); |
} |
} |
|
|
($status,$accessmsg,$slot_name,$slot) = |
($status,$accessmsg,$slot_name,$slot,$ipused) = |
&Apache::lonhomework::check_slot_access('0','problem'); |
&Apache::lonhomework::check_slot_access('0','problem'); |
push (@Apache::inputtags::status,$status); |
push (@Apache::inputtags::status,$status); |
} |
} |
Line 1610 sub start_problem {
|
Line 1604 sub start_problem {
|
$form_tag_start.='<hr />'; |
$form_tag_start.='<hr />'; |
} elsif (($env{'request.state'} ne "construct") && |
} elsif (($env{'request.state'} ne "construct") && |
($Apache::lonhomework::type eq 'randomizetry') && |
($Apache::lonhomework::type eq 'randomizetry') && |
($status eq 'CAN_ANSWER')) { |
($status eq 'CAN_ANSWER') && |
|
($env{'course.'.$env{'request.course.id'}.'.type'} ne 'Placement')) { |
|
# "New Problem Variation Each Try" header suppressed for Placement Tests. |
my $reqtries = &Apache::lonnet::EXT("resource.$Apache::inputtags::part.randomizeontries"); |
my $reqtries = &Apache::lonnet::EXT("resource.$Apache::inputtags::part.randomizeontries"); |
my $problemstatus = &get_problem_status($Apache::inputtags::part); |
my $problemstatus = &get_problem_status($Apache::inputtags::part); |
$form_tag_start.=&randomizetry_problem_header($problemstatus,$reqtries); |
$form_tag_start.=&randomizetry_problem_header($problemstatus,$reqtries); |
Line 1630 sub start_problem {
|
Line 1626 sub start_problem {
|
( $status eq 'NOTRESERVABLE') || |
( $status eq 'NOTRESERVABLE') || |
( $status eq 'RESERVABLE') || |
( $status eq 'RESERVABLE') || |
( $status eq 'RESERVABLE_LATER') || |
( $status eq 'RESERVABLE_LATER') || |
( $status eq 'INVALID_ACCESS')) { |
( $status eq 'INVALID_ACCESS') || |
|
( $status eq 'NEED_DIFFERENT_IP')) { |
my $bodytext=&Apache::lonxml::get_all_text("/problem",$parser, |
my $bodytext=&Apache::lonxml::get_all_text("/problem",$parser, |
$style); |
$style); |
if ( $target eq "web" ) { |
if ( $target eq "web" ) { |
Line 1663 sub start_problem {
|
Line 1660 sub start_problem {
|
&Apache::lonnavmaps::timeToHumanString($accessmsg,'start')); |
&Apache::lonnavmaps::timeToHumanString($accessmsg,'start')); |
} elsif ($status eq 'NOTRESERVABLE') { |
} elsif ($status eq 'NOTRESERVABLE') { |
$msg.=&mt('Not available to make a reservation.'); |
$msg.=&mt('Not available to make a reservation.'); |
} |
} elsif ($status eq 'NEED_DIFFERENT_IP') { |
|
if ($ipused) { |
|
$msg.=&mt('You must use the same computer ([_1]) you used when you first accessed this resource using your time/place-based reservation.',"IP: $ipused"); |
|
} else { |
|
$msg.=&mt('Each student must use a different computer to access this resource at this time and/or place.').'<br />'. |
|
&mt('Somebody else has already used this particular computer for that purpose.'); |
|
} |
|
} |
$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)? '' |
Line 1683 sub start_problem {
|
Line 1687 sub start_problem {
|
$result .= |
$result .= |
&Apache::bridgetask::proctor_validation_screen($slot); |
&Apache::bridgetask::proctor_validation_screen($slot); |
} elsif ($target eq 'grade') { |
} elsif ($target eq 'grade') { |
&Apache::bridgetask::proctor_check_auth($slot_name,$slot, |
my $checkinresult = &Apache::bridgetask::proctor_check_auth($slot_name,$slot, |
'problem'); |
'problem'); |
|
if ($checkinresult = /^error:/) { |
|
$result .= 'error'; |
|
} |
} |
} |
} elsif ($target eq 'web') { |
} elsif ($target eq 'web') { |
if ($status eq 'CAN_ANSWER') { |
if ($status eq 'CAN_ANSWER') { |
Line 1694 sub start_problem {
|
Line 1701 sub start_problem {
|
$Apache::lonhomework::history{'resource.0.checkedin'}; |
$Apache::lonhomework::history{'resource.0.checkedin'}; |
if ($checked_in eq '') { |
if ($checked_in eq '') { |
# unproctored slot access, self checkin |
# unproctored slot access, self checkin |
&Apache::bridgetask::check_in('problem',undef,undef, |
my $needsiptied; |
$slot_name); |
if (ref($slot)) { |
$checked_in = |
$needsiptied = $slot->{'iptied'}; |
$Apache::lonhomework::results{"resource.0.checkedin"}; |
} |
|
my $check = &Apache::bridgetask::check_in('problem',undef,undef, |
|
$slot_name,$needsiptied); |
|
if ($check =~ /^error: /) { |
|
&Apache::lonnet::logthis("Error during self-checkin of problem (symb: $env{'request.symb'}) using slot: $slot_name"); |
|
} else { |
|
$checked_in = |
|
$Apache::lonhomework::results{"resource.0.checkedin"}; |
|
} |
} |
} |
if ((ref($slot) eq 'HASH') && ($checked_in ne '')) { |
if ((ref($slot) eq 'HASH') && ($checked_in ne '')) { |
if ($slot->{'starttime'} < time()) { |
if ($slot->{'starttime'} < time()) { |
Line 1720 sub start_problem {
|
Line 1735 sub start_problem {
|
'<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 |
if ($env{'request.state'} eq "construct") { |
if ($env{'request.state'} eq "construct") { |
$result.= &problem_web_to_edit_header($env{'form.rndseed'}); |
if ($env{'form.inhibitmenu'} eq 'yes') { |
|
# error messages can be useful in any case |
|
$result.= &Apache::lonxml::message_location(); |
|
} else { |
|
$result.= &problem_web_to_edit_header($env{'form.rndseed'}); |
|
} |
if ($Apache::lonhomework::type eq 'practice') { |
if ($Apache::lonhomework::type eq 'practice') { |
$result.= '<input type="submit" name="resetdata" '. |
$result.= '<input type="submit" name="resetdata" '. |
'value="'.&mt('New Problem Variation').'" />'. |
'value="'.&mt('New Problem Variation').'" />'. |
Line 1906 sub end_problem {
|
Line 1926 sub end_problem {
|
# Added separately at end of this routine, after added |
# Added separately at end of this routine, after added |
# <script></script> so document will be valid xhtml. |
# <script></script> so document will be valid xhtml. |
# |
# |
$result.= &Apache::loncommon::end_page({'discussion' => 1, |
my $showdisc = 1; |
|
if (($env{'course.'.$env{'request.course.id'}.'.type'} eq 'Placement') && |
|
(!$env{'request.role.adv'})) { |
|
# For Placement Tests footer with "Post Discussion" and "Send Feedback" links is suppressed. |
|
$showdisc = 0; |
|
my ($symb)= &Apache::lonnet::whichuser(); |
|
if ($symb) { |
|
my $navmap = Apache::lonnavmaps::navmap->new(); |
|
if (ref($navmap)) { |
|
my $hastries = &Apache::lonplacementtest::has_tries($symb,$navmap); |
|
# For Placement Tests test status is displayed if this is the last resource in the course |
|
# and there are no tries left; |
|
unless ($hastries) { |
|
if (&Apache::lonplacementtest::is_lastres($symb,$navmap)) { |
|
my ($score,$incomplete) = |
|
&Apache::lonplacementtest::check_completion(undef,undef,1); |
|
if (!$incomplete) { |
|
$result .= &Apache::lonplacementtest::showresult(1,1); |
|
} elsif ($incomplete < 100) { |
|
$result.= &Apache::lonplacementtest::showincomplete($incomplete,1); |
|
} |
|
} else { |
|
# For Placement Tests score is displayed if test has just been completed |
|
my ($score,$incomplete) = &Apache::lonplacementtest::check_completion(undef,undef,1); |
|
if (!$incomplete) { |
|
$result.= &Apache::lonplacementtest::showresult(1,1); |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
$result.= &Apache::loncommon::end_page({'discussion' => $showdisc, |
'notbody' => 1}); |
'notbody' => 1}); |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
my $endminipage = ''; |
my $endminipage = ''; |
Line 2020 sub end_library {
|
Line 2072 sub end_library {
|
&& ($#$tagstack eq 0 && $$tagstack[0] eq 'library') |
&& ($#$tagstack eq 0 && $$tagstack[0] eq 'library') |
&& $env{'request.state'} eq "construct") { |
&& $env{'request.state'} eq "construct") { |
$result.='</form>'.&Apache::loncommon::end_page({'discussion' => 1}); |
$result.='</form>'.&Apache::loncommon::end_page({'discussion' => 1}); |
} elsif ($target eq 'meta') { |
|
$result.=&Apache::response::meta_response_order(); |
|
} |
} |
if ( $#$tagstack eq 0 && $$tagstack[0] eq 'library') { |
if ( $#$tagstack eq 0 && $$tagstack[0] eq 'library') { |
&reset_problem_globals('library'); |
&reset_problem_globals('library'); |
Line 2504 sub start_randomlist {
|
Line 2554 sub start_randomlist {
|
} |
} |
if (@randomlist) { |
if (@randomlist) { |
my @idx_arr = (0 .. $#randomlist); |
my @idx_arr = (0 .. $#randomlist); |
if ($env{'form.code_for_randomlist'}) { |
&Apache::structuretags::shuffle(\@idx_arr); |
&Apache::structuretags::shuffle(\@idx_arr,$target); |
|
undef($env{'form.code_for_randomlist'}); |
|
} else { |
|
&Apache::structuretags::shuffle(\@idx_arr); |
|
} |
|
my $bodytext = ''; |
my $bodytext = ''; |
my $show=$#randomlist; |
my $show=$#randomlist; |
my $showarg=&Apache::lonxml::get_param('show',$parstack,$safeeval); |
my $showarg=&Apache::lonxml::get_param('show',$parstack,$safeeval); |
Line 2548 sub start_randomlist {
|
Line 2593 sub start_randomlist {
|
} |
} |
|
|
sub shuffle { |
sub shuffle { |
my ($a,$target) = @_; |
my $a=shift; |
my $i; |
my $i; |
if (ref($a) eq 'ARRAY' && @$a) { |
if (ref($a) eq 'ARRAY' && @$a) { |
&Apache::response::pushrandomnumber(undef,$target); |
&Apache::response::pushrandomnumber(); |
for($i=@$a;--$i;) { |
for($i=@$a;--$i;) { |
my $j=int(&Math::Random::random_uniform() * ($i+1)); |
my $j=int(&Math::Random::random_uniform() * ($i+1)); |
next if $i == $j; |
next if $i == $j; |
Line 2909 sub start_problemtype {
|
Line 2954 sub start_problemtype {
|
['hide','Hide']] |
['hide','Hide']] |
,$token); |
,$token); |
$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','Bubblesheet Exam/Quiz Problem'], |
['survey','Survey'], |
['survey','Survey'], |
['surveycred','Survey (with credit)'], |
['surveycred','Survey (with credit)'], |
['anonsurvey','Anonymous Survey'], |
['anonsurvey','Anonymous Survey'], |
Line 2957 sub end_startouttext {
|
Line 3002 sub end_startouttext {
|
.'<td><span class="LC_nobreak">'.&mt('Delete?').' ' |
.'<td><span class="LC_nobreak">'.&mt('Delete?').' ' |
.&Apache::edit::deletelist($target,$token) |
.&Apache::edit::deletelist($target,$token) |
.'</span></td>' |
.'</span></td>' |
.'<td><span id="math_'.$areaid.'">'; |
.'<td><span id="math_'.$areaid.'">' |
if ($env{'environment.nocodemirror'}) { |
.&Apache::lonhtmlcommon::dragmath_button($areaid,1) |
$result.=&Apache::lonhtmlcommon::dragmath_button($areaid,1); |
.'</span></td>' |
} else { |
|
$result.=' '; |
|
} |
|
$result.='</span></td>' |
|
.'<td>' |
.'<td>' |
.&Apache::edit::insertlist($target,$token) |
.&Apache::edit::insertlist($target,$token) |
.'</td>' |
.'</td>' |