version 1.574, 2023/04/02 03:16: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 1149 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 1163 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 1264 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 1305 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 1343 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 1361 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 1369 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() |