version 1.571, 2020/09/28 00:10:28
|
version 1.575, 2023/06/02 01:20:27
|
Line 62 use Apache::lonxml;
|
Line 62 use Apache::lonxml;
|
use Apache::londefdef; |
use Apache::londefdef; |
use Apache::lonenc(); |
use Apache::lonenc(); |
use Apache::loncommon(); |
use Apache::loncommon(); |
|
use Apache::lonnavmaps; |
use Time::HiRes qw( gettimeofday tv_interval ); |
use Time::HiRes qw( gettimeofday tv_interval ); |
use HTML::Entities(); |
use HTML::Entities(); |
use lib '/home/httpd/lib/perl/'; |
use lib '/home/httpd/lib/perl/'; |
Line 625 sub page_start {
|
Line 626 sub page_start {
|
my ($symb,$courseid,$udom,$uname)=&Apache::lonnet::whichuser(); |
my ($symb,$courseid,$udom,$uname)=&Apache::lonnet::whichuser(); |
my ($path,$multiresp) = |
my ($path,$multiresp) = |
&Apache::loncommon::get_turnedin_filepath($symb,$uname,$udom); |
&Apache::loncommon::get_turnedin_filepath($symb,$uname,$udom); |
if (($is_task) || ($needs_upload)) { |
if ($env{'request.user_in_effect'}) { |
|
$form_tag_start .= ' onsubmit="preventDefault();"'; |
|
} elsif (($is_task) || ($needs_upload)) { |
$form_tag_start .= ' onsubmit="return file_submission_check(this,'."'$path','$multiresp'".');"'; |
$form_tag_start .= ' onsubmit="return file_submission_check(this,'."'$path','$multiresp'".');"'; |
} |
} |
$form_tag_start.='>'."\n"; |
$form_tag_start.='>'."\n"; |
Line 1147 sub finalize_storage {
|
Line 1150 sub finalize_storage {
|
delete(@Apache::lonhomework::results{@remove}); |
delete(@Apache::lonhomework::results{@remove}); |
my ($symb,$courseid,$domain,$name) = |
my ($symb,$courseid,$domain,$name) = |
&Apache::lonnet::whichuser($given_symb); |
&Apache::lonnet::whichuser($given_symb); |
my ($passback,$ltiscope,$ltimap,$ltisymb,$ltiref,$total,$possible,$dopassback); |
my ($passback,$pbscope,$pbmap,$pbsymb,$pbtype,$crsdef,$ltinum, |
|
$ltiref,$total,$possible,$dopassback); |
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 1161 sub finalize_storage {
|
Line 1165 sub finalize_storage {
|
if (($env{'user.name'} eq $name) && ($env{'user.domain'} eq $domain) && |
if (($env{'user.name'} eq $name) && ($env{'user.domain'} eq $domain) && |
(!$Apache::lonhomework::scantronmode) && (!defined($env{'form.grade_symb'})) && |
(!$Apache::lonhomework::scantronmode) && (!defined($env{'form.grade_symb'})) && |
(!defined($env{'form.grade_courseid'}))) { |
(!defined($env{'form.grade_courseid'}))) { |
if ($env{'request.lti.login'}) { |
if (($env{'request.lti.login'}) || ($env{'request.deeplink.login'})) { |
my ($map)=&Apache::lonnet::decode_symb($symb); |
my ($map)=&Apache::lonnet::decode_symb($symb); |
$map = &Apache::lonnet::clutter($map); |
$map = &Apache::lonnet::clutter($map); |
($passback,$ltiscope,$ltimap,$ltisymb,$ltiref) = |
if ($env{'request.lti.login'}) { |
&needs_lti_passback($courseid,$symb,$map); |
($passback,$pbscope,$pbmap,$pbsymb,$ltinum,$ltiref) = |
|
&needs_lti_passback($courseid,$symb,$map); |
|
} elsif ($env{'request.deeplink.login'}) { |
|
($passback,$pbscope,$pbmap,$pbsymb,$crsdef,$ltinum,$ltiref) = |
|
&needs_linkprot_passback($courseid,$symb,$map); |
|
} |
} |
} |
if ($Apache::lonhomework::history{'version'}) { |
if ($Apache::lonhomework::history{'version'}) { |
$laststore = $Apache::lonhomework::history{'version'}.'='. |
$laststore = $Apache::lonhomework::history{'version'}.'='. |
Line 1262 sub finalize_storage {
|
Line 1271 sub finalize_storage {
|
} |
} |
} |
} |
} |
} |
if (($dopassback) && ($ltiscope eq 'resource') && ($ltisymb eq $symb)) { |
if (($dopassback) && ($pbscope eq 'resource') && ($pbsymb eq $symb)) { |
$total = 0; |
$total = 0; |
$possible = 0; |
$possible = 0; |
my $navmap = Apache::lonnavmaps::navmap->new(); |
my $navmap = Apache::lonnavmaps::navmap->new(); |
Line 1303 sub finalize_storage {
|
Line 1312 sub finalize_storage {
|
&store_aggregates($symb,$courseid); |
&store_aggregates($symb,$courseid); |
if ($dopassback) { |
if ($dopassback) { |
my $scoreformat = 'decimal'; |
my $scoreformat = 'decimal'; |
if (ref($ltiref) eq 'HASH') { |
if (($env{'request.lti.login'}) || ($env{'request.deeplink.login'})) { |
if ($ltiref->{'scoreformat'} =~ /^(decimal|ratio|percentage)$/) { |
if (ref($ltiref) eq 'HASH') { |
$scoreformat = $1; |
if ($ltiref->{'scoreformat'} =~ /^(decimal|ratio|percentage)$/) { |
|
$scoreformat = $1; |
|
} |
} |
} |
} |
} |
|
my ($pbid,$pburl,$pbtype); |
|
if ($env{'request.lti.login'}) { |
|
$pbid = $env{'request.lti.passbackid'}; |
|
$pburl = $env{'request.lti.passbackurl'}; |
|
$pbtype = 'lti'; |
|
} elsif ($env{'request.deeplink.login'}) { |
|
$pbid = $env{'request.linkprotpbid'}; |
|
$pburl = $env{'request.linkprotpburl'}; |
|
$pbtype = 'linkprot'; |
|
} |
my $ltigrade = { |
my $ltigrade = { |
|
'ltinum' => $ltinum, |
'lti' => $ltiref, |
'lti' => $ltiref, |
|
'crsdef' => $crsdef, |
'cid' => $courseid, |
'cid' => $courseid, |
'uname' => $env{'user.name'}, |
'uname' => $env{'user.name'}, |
'udom' => $env{'user.domain'}, |
'udom' => $env{'user.domain'}, |
'pbid' => $env{'request.lti.passbackid'}, |
'pbid' => $pbid, |
'pburl' => $env{'request.lti.passbackurl'}, |
'pburl' => $pburl, |
'scope' => $ltiscope, |
'pbtype' => $pbtype, |
'ltimap' => $ltimap, |
'scope' => $pbscope, |
'ltisymb' => $ltisymb, |
'pbmap' => $pbmap, |
|
'pbsymb' => $pbsymb, |
'format' => $scoreformat, |
'format' => $scoreformat, |
}; |
}; |
if ($ltiscope eq 'resource') { |
if ($pbscope eq 'resource') { |
$ltigrade->{'total'} = $total; |
$ltigrade->{'total'} = $total; |
$ltigrade->{'possible'} = $possible; |
$ltigrade->{'possible'} = $possible; |
} |
} |
Line 1341 sub needs_lti_passback {
|
Line 1365 sub needs_lti_passback {
|
my %lti = &Apache::lonnet::get_domain_lti($cdom,'provider'); |
my %lti = &Apache::lonnet::get_domain_lti($cdom,'provider'); |
if (ref($lti{$env{'request.lti.login'}}) eq 'HASH') { |
if (ref($lti{$env{'request.lti.login'}}) eq 'HASH') { |
if ($lti{$env{'request.lti.login'}}{'passback'}) { |
if ($lti{$env{'request.lti.login'}}{'passback'}) { |
|
my $itemnum = $env{'request.lti.login'}; |
my ($ltiscope,$ltiuri,$ltisymb) = |
my ($ltiscope,$ltiuri,$ltisymb) = |
&LONCAPA::ltiutils::lti_provider_scope($env{'request.lti.uri'}, |
&LONCAPA::ltiutils::lti_provider_scope($env{'request.lti.uri'}, |
$cdom,$cnum,1); |
$cdom,$cnum,1); |
Line 1359 sub needs_lti_passback {
|
Line 1384 sub needs_lti_passback {
|
$passback = 1; |
$passback = 1; |
} |
} |
} |
} |
return ($passback,$ltiscope,$ltimap,$ltisymb,$lti{$env{'request.lti.login'}}); |
return ($passback,$ltiscope,$ltimap,$ltisymb,$itemnum,$lti{$itemnum}); |
} |
} |
} |
} |
} |
} |
Line 1367 sub needs_lti_passback {
|
Line 1392 sub needs_lti_passback {
|
return; |
return; |
} |
} |
|
|
|
sub needs_linkprot_passback { |
|
my ($courseid,$symb,$map) = @_; |
|
if (($env{'request.linkprotpbid'}) && ($env{'request.linkprotpburl'})) { |
|
if ($courseid =~ /^($LONCAPA::match_domain)_($LONCAPA::match_courseid)$/) { |
|
my ($cdom,$cnum) = ($1,$2); |
|
my ($deeplink_symb,$deeplink_map,$deeplink,$passback); |
|
$deeplink_symb = &Apache::loncommon::deeplink_login_symb($cnum,$cdom); |
|
if ($deeplink_symb) { |
|
if ($deeplink_symb =~ /\.(page|sequence)$/) { |
|
$deeplink_map = &Apache::lonnet::deversion((&Apache::lonnet::decode_symb($deeplink_symb))[2]); |
|
my $navmap = Apache::lonnavmaps::navmap->new(); |
|
if (ref($navmap)) { |
|
$deeplink = $navmap->get_mapparam(undef,$deeplink_map,'0.deeplink'); |
|
} |
|
} else { |
|
$deeplink = &Apache::lonnet::EXT('resource.0.deeplink',$deeplink_symb); |
|
$deeplink_map = &Apache::lonnet::deversion((&Apache::lonnet::decode_symb($deeplink_symb))[0]); |
|
} |
|
if (($deeplink ne '') && ($env{'request.linkprot'} ne '')) { |
|
my ($itemid,$tinyurl) = split(/:/,$env{'request.linkprot'}); |
|
if ($itemid =~ /^(\d+)(c|d)$/) { |
|
my ($itemnum,$itemtype) = ($1,$2); |
|
my ($crsdef,$lti_in_use); |
|
if ($itemtype eq 'c') { |
|
$crsdef = 1; |
|
my %crslti = &Apache::lonnet::get_course_lti($cnum,$cdom,'provider'); |
|
$lti_in_use = $crslti{$itemnum}; |
|
} else { |
|
my %domlti = &Apache::lonnet::get_domain_lti($cdom,'linkprot'); |
|
$lti_in_use = $domlti{$itemnum}; |
|
} |
|
my ($state,$others,$listed,$scope,$protect,$display,$target,$exit) = split(/,/,$deeplink); |
|
my $passback; |
|
if ($scope eq 'resource') { |
|
if ($deeplink_symb eq $symb) { |
|
$passback = 1; |
|
} |
|
} elsif ($scope eq 'map') { |
|
if (&Apache::lonnet::clutter($deeplink_map) eq $map) { |
|
$passback = 1; |
|
} |
|
} elsif ($scope eq 'recurse') { |
|
#FIXME check if $deeplink_map contains $map |
|
$passback = 1; |
|
} |
|
return ($passback,$scope,$deeplink_map,$deeplink_symb,$crsdef,$itemnum,$lti_in_use); |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
|
=pod |
=pod |
|
|
=item check_correctness_changes() |
=item check_correctness_changes() |
Line 1845 sub start_problem {
|
Line 1923 sub start_problem {
|
} |
} |
} |
} |
|
|
|
if (($target eq 'web') && ($env{'request.user_in_effect'})) { |
|
&Apache::lonxml::get_all_text("/problem",$parser,$style); |
|
return $result; |
|
} |
|
|
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') { |
|
|
Line 2129 sub end_problem {
|
Line 2212 sub end_problem {
|
} |
} |
} |
} |
$result =~ s/INSERTTEXFRONTMATTERHERE/$frontmatter/; |
$result =~ s/INSERTTEXFRONTMATTERHERE/$frontmatter/; |
|
} elsif ($target eq 'web') { |
|
if ($env{'request.user_in_effect'}) { |
|
&reset_problem_globals('problem'); |
|
$result .= &Apache::lonhtmlcommon::set_compute_end_time(); |
|
return $result; |
|
} |
} |
} |
|
|
my $status=$Apache::inputtags::status['-1']; |
my $status=$Apache::inputtags::status['-1']; |
Line 3107 sub end_part {
|
Line 3196 sub end_part {
|
$gradestatus=''; |
$gradestatus=''; |
} |
} |
$result.=$gradestatus; |
$result.=$gradestatus; |
if ($$tagstack[-2] eq 'td' and $target eq 'tex') {$result.='\end{minipage}';} |
if ($$tagstack[-2] eq 'td' and $target eq 'tex') { |
|
if (not $env{'form.problem_split'}=~/yes/) { |
|
$result.='\end{minipage}'; |
|
} |
|
} |
} elsif ($target eq 'edit') { |
} elsif ($target eq 'edit') { |
$result.=&Apache::edit::end_table(); |
$result.=&Apache::edit::end_table(); |
} elsif ($target eq 'modified') { |
} elsif ($target eq 'modified') { |