version 1.3, 2016/01/26 14:30:25
|
version 1.5, 2017/11/30 01:52:14
|
Line 102 sub handler {
|
Line 102 sub handler {
|
width => $toolsettings{'width'}, |
width => $toolsettings{'width'}, |
height => $toolsettings{'height'}, |
height => $toolsettings{'height'}, |
}; |
}; |
|
$toolhash{'crslabel'} = $toolsettings{'crslabel'}; |
|
$toolhash{'crstitle'} = $toolsettings{'crstitle'}; |
|
$toolhash{'crsappend'} = $toolsettings{'crsappend'}; |
$is_tool = 1; |
$is_tool = 1; |
if ($target eq 'tex') { |
if ($target eq 'tex') { |
$r->print(&mt('External Tool')); |
$r->print(&mt('External Tool')); |
} else { |
} else { |
my $submittext = &mt('Launch [_1]',$toolhash{'title'}); |
my $submittext = &mt('Launch [_1]',$toolhash{'title'}); |
if (($toolhash{'key'} ne '') && ($toolhash{'secret'} ne '') && ($toolhash{'url'} ne '')) { |
if (($toolhash{'key'} ne '') && ($toolhash{'secret'} ne '') && ($toolhash{'url'} ne '')) { |
my %lti = <i_params($r,$submittext,\%toolhash); |
my %lti = <i_params($r,$cnum,$cdom,$submittext,\%toolhash); |
$r->print(&launch_html($toolhash{'url'},$toolhash{'key'}, |
my $url = $toolhash{'url'}; |
$toolhash{'secret'},$submittext,\%lti)); |
if ($toolhash{'crsappend'} ne '') { |
|
$url .= $toolhash{'crsappend'}; |
|
} |
|
$r->print(&launch_html($url,$toolhash{'key'},$toolhash{'secret'}, |
|
$submittext,\%lti)); |
} else { |
} else { |
$r->print('<div>'.&mt('External Tool Unavailable').'</div>'); |
$r->print('<div>'.&mt('External Tool Unavailable').'</div>'); |
} |
} |
Line 129 sub handler {
|
Line 136 sub handler {
|
} |
} |
|
|
sub lti_params { |
sub lti_params { |
my ($r,$submittext,$toolsref) = @_; |
my ($r,$cnum,$cdom,$submittext,$toolsref) = @_; |
my ($version,$context_type,$msgtype,$toolname,$passback,$roster,$locale, |
my ($version,$context_type,$msgtype,$toolname,$passback,$roster,$locale, |
%fields,%rolesmap,%display,%custom,@userlangs); |
$crslabel,$crstitle,%fields,%rolesmap,%display,%custom,@userlangs); |
if (ref($toolsref) eq 'HASH') { |
if (ref($toolsref) eq 'HASH') { |
$version = $toolsref->{'version'}; |
$version = $toolsref->{'version'}; |
$toolname = $toolsref->{'title'}; |
$toolname = $toolsref->{'title'}; |
Line 150 sub lti_params {
|
Line 157 sub lti_params {
|
if (ref($toolsref->{'custom'}) eq 'HASH') { |
if (ref($toolsref->{'custom'}) eq 'HASH') { |
%custom = %{$toolsref->{'custom'}}; |
%custom = %{$toolsref->{'custom'}}; |
} |
} |
|
$crslabel = $toolsref->{'crslabel'}; |
|
$crstitle = $toolsref->{'crstitle'}; |
} |
} |
if ($version eq '') { |
if ($version eq '') { |
$version = 'LTI-1p0'; |
$version = 'LTI-1p0'; |
Line 160 sub lti_params {
|
Line 169 sub lti_params {
|
if ($msgtype eq '') { |
if ($msgtype eq '') { |
$msgtype = 'basic-lti-launch-request'; |
$msgtype = 'basic-lti-launch-request'; |
} |
} |
|
if ($crslabel eq '') { |
|
$crslabel = $env{'course.'.$env{'request.course.id'}.'.internal.coursecode'}, |
|
} |
|
if ($crstitle eq '') { |
|
$crstitle = $env{'course.'.$env{'request.course.id'}.'.description'},; |
|
} |
my $lonhost = $r->dir_config('lonHostID'); |
my $lonhost = $r->dir_config('lonHostID'); |
my $loncaparev = $r->dir_config('lonVersion'); |
my $loncaparev = $r->dir_config('lonVersion'); |
my $uname = $env{'user.name'}; |
my $uname = $env{'user.name'}; |
Line 202 sub lti_params {
|
Line 217 sub lti_params {
|
} |
} |
} |
} |
} |
} |
|
my $domdesc = &Apache::lonnet::domain($cdom); |
|
my $primary_id = &Apache::lonnet::domain($cdom,'primary'); |
|
my $int_dom = &Apache::lonnet::internet_dom($primary_id); |
|
my $portal_url = &Apache::lonnet::course_portal_url($cnum,$cdom); |
|
|
my %ltiparams = ( |
my %ltiparams = ( |
lti_version => $version, |
lti_version => $version, |
lti_message_type => $msgtype, |
lti_message_type => $msgtype, |
resource_link_title => $title, |
resource_link_title => $title, |
resource_link_id => $digest_symb, |
resource_link_id => $digest_symb, |
tool_consumer_instance_guid => $lonhost, |
tool_consumer_instance_guid => $lonhost, |
|
tool_consumer_instance_description => $domdesc, |
tool_consumer_info_product_family_code => 'loncapa', |
tool_consumer_info_product_family_code => 'loncapa', |
|
tool_consumer_instance_name => $int_dom, |
|
tool_consumer_instance_url => $portal_url, |
tool_consumer_info_version => $loncaparev, |
tool_consumer_info_version => $loncaparev, |
user_id => $digest_user, |
user_id => $digest_user, |
lis_person_sourcedid => $uname.':'.$udom, |
|
roles => $ltirole, |
roles => $ltirole, |
context_id => $env{'request.course.id'}, |
context_id => $env{'request.course.id'}, |
context_type => $context_type, |
context_type => $context_type, |
context_label => $env{'course.'.$env{'request.course.id'}.'.internal.coursecode'}, |
context_label => $crslabel, |
context_title => $env{'course.'.$env{'request.course.id'}.'.description'}, |
context_title => $crstitle, |
launch_presentation_locale => $locale, |
launch_presentation_locale => $locale, |
); |
); |
my $crshome = $env{'course.'.$env{'request.course.id'}.'.home'}; |
my $crshome = $env{'course.'.$env{'request.course.id'}.'.home'}; |
Line 228 sub lti_params {
|
Line 250 sub lti_params {
|
} |
} |
if ($passback) { |
if ($passback) { |
if ($ltirole eq 'Learner') { |
if ($ltirole eq 'Learner') { |
$ltiparams{'lis_outcome_service_url'} = $crsprotocol.'//'.$crshostname.'/adm/ltipassback'; |
$ltiparams{'lis_outcome_service_url'} = $crsprotocol.'//'.$crshostname.'/adm/service/passback'; |
$ltiparams{'ext_ims_lis_basic_outcome_url'} = $ltiparams{'lis_outcome_service_url'}; |
$ltiparams{'ext_ims_lis_basic_outcome_url'} = $ltiparams{'lis_outcome_service_url'}; |
$ltiparams{'lis_result_sourcedid'} = ''; #FIXME |
$ltiparams{'lis_result_sourcedid'} = ''; #FIXME |
} |
} |
} |
} |
if ($roster) { |
if ($roster) { |
if (&Apache::lonnet::allowed('opa',$env{'request.course.id'})) { |
if (&Apache::lonnet::allowed('opa',$env{'request.course.id'})) { |
$ltiparams{'ext_ims_lis_memberships_url'} = $crsprotocol.'//'.$crshostname.'/adm/ltiroster'; |
$ltiparams{'ext_ims_lis_memberships_url'} = $crsprotocol.'//'.$crshostname.'/adm/service/roster'; |
$ltiparams{'ext_ims_lis_memberships_id'} = ''; #FIXME |
$ltiparams{'ext_ims_lis_memberships_id'} = ''; #FIXME |
} |
} |
} |
} |
Line 269 sub lti_params {
|
Line 291 sub lti_params {
|
} |
} |
$ltiparams{'lis_person_contact_email_primary'} = $contact_email; |
$ltiparams{'lis_person_contact_email_primary'} = $contact_email; |
} |
} |
|
if ($fields{'user'}) { |
|
$ltiparams{'lis_person_sourcedid'} = $uname.':'.$udom; |
|
} |
if (keys(%custom)) { |
if (keys(%custom)) { |
foreach my $key (keys(%custom)) { |
foreach my $key (keys(%custom)) { |
$ltiparams{'custom_'.$key} = $custom{$key}; |
my $value = $custom{$key}; |
|
$value =~ s/^\s+|\s+\$//g; |
|
if ($value =~ /^\QLONCAPA::env{\E([^\}]+)\}$/) { |
|
if (exists($env{$1})) { |
|
$value = $env{$1}; |
|
} |
|
} |
|
$ltiparams{'custom_'.$key} = $value; |
} |
} |
} |
} |
foreach my $key (keys(%ltiparams)) { |
foreach my $key (keys(%ltiparams)) { |
Line 284 sub lti_params {
|
Line 316 sub lti_params {
|
sub launch_html { |
sub launch_html { |
my ($url,$key,$secret,$submittext,$paramsref) = @_; |
my ($url,$key,$secret,$submittext,$paramsref) = @_; |
my $hashref = &sign_params($url,$key,$secret,$paramsref); |
my $hashref = &sign_params($url,$key,$secret,$paramsref); |
|
my $action = &HTML::Entities::encode($url,'<>&"'); |
my $form = <<"END"; |
my $form = <<"END"; |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> |
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> |
<body> |
<body> |
<div id="LCltiLaunch"> |
<div id="LCltiLaunch"> |
<form name="LCltiLaunchForm" id="LCltiLaunchFormId" action="$url" method="post" encType="application/x-www-form-urlencoded"> |
<form name="LCltiLaunchForm" id="LCltiLaunchFormId" action="$action" method="post" encType="application/x-www-form-urlencoded"> |
END |
END |
if (ref($hashref) eq 'HASH') { |
if (ref($hashref) eq 'HASH') { |
foreach my $item (keys(%{$hashref})) { |
foreach my $item (keys(%{$hashref})) { |