version 1.512.2.10, 2015/04/21 22:48:46
|
version 1.550, 2016/09/14 02:42:43
|
Line 226 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 270 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(). |
&setmode_javascript(). |
&setmode_javascript(). |
<<"JS"; |
<<"JS"; |
<script type="text/javascript"> |
<script type="text/javascript"> |
Line 316 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 416 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 489 sub page_start {
|
Line 496 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 520 sub page_start {
|
Line 529 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 751 sub problem_edit_action_button {
|
Line 762 sub problem_edit_action_button {
|
|
|
sub problem_edit_buttons { |
sub problem_edit_buttons { |
my ($mode)=@_; |
my ($mode)=@_; |
|
# Buttons that save |
|
my $result = '<div style="float:right">'; |
|
if ($mode eq 'editxml') { |
|
$result.=&problem_edit_action_button('subsaveedit','saveeditxml','s','Save and EditXML'); |
|
$result.=&problem_edit_action_button('subsaveview','saveviewxml','v','Save and View'); |
|
} else { |
|
$result.=&problem_edit_action_button('subsaveedit','saveedit','s','Save and Edit'); |
|
$result.=&problem_edit_action_button('subsaveview','saveview','v','Save and View'); |
|
} |
|
$result.="\n</div>\n"; |
# Buttons that do not save |
# Buttons that do not save |
my $result='<div class="LC_edit_problem_discards">'. |
$result .= '<div>'. |
&problem_edit_action_button('subdiscview','discard','d','Discard Edits and View',1); |
&problem_edit_action_button('subdiscview','discard','d','Discard Edits and View',1); |
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); |
$result.=&Apache::lonhtmlcommon::dragmath_button("LC_editxmltext",1); |
if ($env{'environment.nocodemirror'}) { |
|
$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); |
} |
} |
$result.="\n</div>"; |
$result.="\n</div>"; |
# Buttons that save |
|
$result.='<div class="LC_edit_problem_saves">'; |
|
if ($mode eq 'editxml') { |
|
$result.=&problem_edit_action_button('subsaveedit','saveeditxml','s','Save and EditXML'); |
|
$result.=&problem_edit_action_button('subsaveview','saveviewxml','v','Save and View'); |
|
} else { |
|
$result.=&problem_edit_action_button('subsaveedit','saveedit','s','Save and Edit'); |
|
$result.=&problem_edit_action_button('subsaveview','saveview','v','Save and View'); |
|
} |
|
$result.="\n</div>\n"; |
|
return $result; |
return $result; |
} |
} |
|
|
sub problem_edit_header { |
sub problem_edit_header { |
return '<input type="hidden" name="submitted" value="edit" />'. |
my ($mode)=@_; |
|
my $return = '<input type="hidden" name="submitted" value="edit" />'. |
&remember_problem_state('edit').' |
&remember_problem_state('edit').' |
<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').&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><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(); |
<hr style="clear:both;" /> |
|
'.&Apache::lonxml::message_location().' |
$return .= '</div></div>' . &Apache::lonxml::message_location(); |
</div> |
$return .= '<link rel="stylesheet" href="/adm/codemirror/codemirror-combined.css" /> |
'. |
<script type="text/javascript" src="/adm/codemirror/codemirror-compressed-colorful.js"></script>'; |
'<table id="LC_edit_problem_colorful" border="0" width="100%"><tr><td bgcolor="#F8F8F8">'; |
|
|
$return .= '<script type="text/javascript" src="/adm/jQuery/addons/jquery-scrolltofixed.js"></script> |
|
<script type="text/javascript"> |
|
// unless internet explorer |
|
if (!(window.navigator.appName == "Microsoft Internet Explorer" && (document.documentMode || document.compatMode))){ |
|
$(document).ready( |
|
function() { |
|
$(\'.LC_edit_actionbar\').scrollToFixed( |
|
{ |
|
fixed: function(){ |
|
//$(this).find(\'.LC_edit_actionbar\').css(\'height\', \'31px\'); |
|
$(this).find(\'.LC_edit_actionbar\'); |
|
} |
|
} |
|
); |
|
} |
|
); |
|
} |
|
</script> |
|
<table id="LC_edit_problem_colorful" border="0" width="100%"><tr><td bgcolor="#F8F8F8">'; |
|
return $return; |
} |
} |
|
|
sub problem_edit_footer { |
sub problem_edit_footer { |
|
my $resource = $env{'request.ambiguous'}; |
return '</td></tr></table><br /> |
return '</td></tr></table><br /> |
<div class="LC_edit_problem_footer"> |
<div class="LC_edit_problem_footer"> |
<hr />'. |
<hr />'. |
&problem_edit_buttons().' |
&problem_edit_buttons().' |
<hr style="clear:both;" /> |
<hr style="clear:both;" /> |
|
<script type="text/javascript"> |
|
restoreState("'.$resource.'"); |
|
restoreScrollPosition("'.$resource.'"); |
|
</script> |
</div> |
</div> |
'. |
'. |
"\n</form>\n".&Apache::loncommon::end_page(); |
"\n</form>\n".&Apache::loncommon::end_page(); |
Line 862 sub problem_web_to_edit_header {
|
Line 901 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 947 $show_all
|
Line 986 $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 982 sub initialize_storage {
|
Line 1027 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 1005 sub initialize_storage {
|
Line 1050 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 1021 sub initialize_storage {
|
Line 1066 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 1149 sub finalize_storage {
|
Line 1194 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 1249 sub store_aggregates {
|
Line 1294 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 1283 sub checkout_msg {
|
Line 1328 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 1481 sub start_problem {
|
Line 1526 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 1489 sub start_problem {
|
Line 1535 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"); |
&Apache::lonnet::set_first_access($interval[1],$interval[0]); |
my ($timelimit) = split(/_/,$interval[0]); |
|
&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 1563 sub start_problem {
|
Line 1610 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') && |
|
(!$env{'request.role.adv'})) { |
|
# "New Problem Variation Each Try" header suppressed for Placement Tests, unless course personnel. |
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 1583 sub start_problem {
|
Line 1633 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 1616 sub start_problem {
|
Line 1667 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 1636 sub start_problem {
|
Line 1694 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 1647 sub start_problem {
|
Line 1708 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 1673 sub start_problem {
|
Line 1742 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 1859 sub end_problem {
|
Line 1933 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 2855 sub start_problemtype {
|
Line 2961 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 2898 sub end_startouttext {
|
Line 3004 sub end_startouttext {
|
if ($target eq 'edit') { |
if ($target eq 'edit') { |
my $areaid = 'homework_edit_'.$Apache::lonxml::curdepth; |
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>".&Apache::loncommon::insert_folding_button() |
|
." ".&mt('Text Block')."</td>" |
.'<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.'">'; |
.&Apache::lonhtmlcommon::dragmath_button($areaid,1) |
if ($env{'environment.nocodemirror'}) { |
.'</span></td>' |
$result.=&Apache::lonhtmlcommon::dragmath_button($areaid,1); |
|
} else { |
|
$result.=' '; |
|
} |
|
$result.='</span></td>' |
.'<td>' |
.'<td>' |
.&Apache::edit::insertlist($target,$token) |
.&Apache::edit::insertlist($target,$token) |
.'</td>' |
.'</td>' |