[LON-CAPA-cvs] cvs: loncom /interface domainprefs.pm /lti ltiauth.pm
raeburn
raeburn at source.lon-capa.org
Mon Nov 22 18:41:00 EST 2021
raeburn Mon Nov 22 23:41:00 2021 EDT
Modified files:
/loncom/interface domainprefs.pm
/loncom/lti ltiauth.pm
Log:
- Bug 6754
Basic LTI authentication option for launch from Consumer for which user
information but no course information are provided on launch.
-------------- next part --------------
Index: loncom/interface/domainprefs.pm
diff -u loncom/interface/domainprefs.pm:1.390 loncom/interface/domainprefs.pm:1.391
--- loncom/interface/domainprefs.pm:1.390 Mon Nov 22 22:19:58 2021
+++ loncom/interface/domainprefs.pm Mon Nov 22 23:40:59 2021
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler to set domain-wide configuration settings
#
-# $Id: domainprefs.pm,v 1.390 2021/11/22 22:19:58 raeburn Exp $
+# $Id: domainprefs.pm,v 1.391 2021/11/22 23:40:59 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -3249,32 +3249,65 @@
localauth => 'Local auth argument',
krb => 'Kerberos domain',
);
+ my $crsincalert = &mt('"User\'s identity sent" needs to be set to "Yes" first,[_1] before setting "Course\'s identity sent" to "Yes"',"\n");
+ &js_escape(\$crsincalert);
return <<"ENDSCRIPT";
<script type="text/javascript">
// <![CDATA[
function toggleLTI(form,setting,item) {
- if (setting == 'requser') {
- var fieldsets = document.getElementsByClassName('ltioption_'+item);
- if (fieldsets.length) {
- var radioname = 'lti_'+setting+'_'+item;
+ if ((setting == 'requser') || (setting == 'crsinc')) {
+ var usrfieldsets = document.getElementsByClassName('ltioption_usr_'+item);
+ var setvis = '';
+ var radioname = 'lti_requser_'+item;
+ var num = form.elements[radioname].length;
+ if (num) {
+ for (var i=0; i<num; i++) {
+ if (form.elements[radioname][i].checked) {
+ if (form.elements[radioname][i].value == '1') {
+ setvis = 1;
+ break;
+ }
+ }
+ }
+ }
+ if (usrfieldsets.length) {
+ for (var j=0; j<usrfieldsets.length; j++) {
+ if (setvis) {
+ usrfieldsets[j].style.display = 'block';
+ } else {
+ usrfieldsets[j].style.display = 'none';
+ }
+ }
+ }
+ var crsfieldsets = document.getElementsByClassName('ltioption_crs_'+item);
+ if (crsfieldsets.length) {
+ radioname = 'lti_crsinc_'+item;
var num = form.elements[radioname].length;
if (num) {
- var setvis = '';
+ var crsvis = '';
for (var i=0; i<num; i++) {
if (form.elements[radioname][i].checked) {
if (form.elements[radioname][i].value == '1') {
- setvis = 1;
- break;
+ if (setvis == '') {
+ if (setting == 'crsinc'){
+ alert("$crsincalert");
+ form.elements[radioname][0].checked = true;
+ }
+ } else {
+ crsvis = 1;
+ }
+ break;
}
}
}
- for (var j=0; j<fieldsets.length; j++) {
- if (setvis) {
- fieldsets[j].style.display = 'block';
- } else {
- fieldsets[j].style.display = 'none';
- }
+ setvis = crsvis;
+ }
+ for (var j=0; j<crsfieldsets.length; j++) {
+ if (setvis) {
+ crsfieldsets[j].style.display = 'block';
+ } else {
+ crsfieldsets[j].style.display = 'none';
}
}
}
@@ -5954,13 +5987,14 @@
for (my $i=0; $i<@items; $i++) {
$css_class = $itemcount%2?' class="LC_odd_row"':'';
my $item = $ordered{$items[$i]};
- my ($key,$secret,$lifetime,$consumer,$requser,$current);
+ my ($key,$secret,$lifetime,$consumer,$requser,$crsinc,$current);
if (ref($settings->{$item}) eq 'HASH') {
$key = $settings->{$item}->{'key'};
$secret = $settings->{$item}->{'secret'};
$lifetime = $settings->{$item}->{'lifetime'};
$consumer = $settings->{$item}->{'consumer'};
$requser = $settings->{$item}->{'requser'};
+ $crsinc = $settings->{$item}->{'crsinc'};
$current = $settings->{$item};
}
my $onclickrequser = ' onclick="toggleLTI(this.form,'."'requser','$i'".');"';
@@ -5972,6 +6006,15 @@
$checkedrequser{'no'} = $checkedrequser{'yes'};
$checkedrequser{'yes'} = '';
}
+ my $onclickcrsinc = ' onclick="toggleLTI(this.form,'."'crsinc','$i'".');"';
+ my %checkedcrsinc = (
+ yes => ' checked="checked"',
+ no => '',
+ );
+ if (!$crsinc) {
+ $checkedcrsinc{'no'} = $checkedcrsinc{'yes'};
+ $checkedcrsinc{'yes'} = '';
+ }
my $chgstr = ' onchange="javascript:reorderLTI(this.form,'."'lti_pos_".$item."'".');"';
$datatable .= '<tr '.$css_class.'><td><span class="LC_nobreak">'
.'<select name="lti_pos_'.$item.'"'.$chgstr.'>';
@@ -6001,6 +6044,10 @@
'<label><input type="radio" name="lti_requser_'.$i.'" value="1"'.$onclickrequser.$checkedrequser{yes}.' />'.&mt('Yes').'</label> '."\n".
'<label><input type="radio" name="lti_requser_'.$i.'" value="0"'.$onclickrequser.$checkedrequser{no}.' />'.&mt('No').'</label></span>'."\n".
'<br /><br />'.
+ '<span class="LC_nobreak">'.$lt{'crsinc'}.':'.
+ '<label><input type="radio" name="lti_crsinc_'.$i.'" value="1"'.$onclickcrsinc.$checkedcrsinc{yes}.' />'.&mt('Yes').'</label> '."\n".
+ '<label><input type="radio" name="lti_crsinc_'.$i.'" value="0"'.$onclickcrsinc.$checkedcrsinc{no}.' />'.&mt('No').'</label></span>'."\n".
+ (' 'x4).
'<span class="LC_nobreak">'.$lt{'key'}.
':<input type="text" size="25" name="lti_key_'.$i.'" value="'.$key.'" /></span> '.
(' 'x2).
@@ -6041,6 +6088,10 @@
'<label><input type="radio" name="lti_requser_add" value="1" onclick="toggleLTI(this.form,'."'requser','add'".');" checked="checked" />'.&mt('Yes').'</label> '."\n".
'<label><input type="radio" name="lti_requser_add" value="0" onclick="toggleLTI(this.form,'."'requser','add'".');" />'.&mt('No').'</label></span>'."\n".
'<br /><br />'.
+ '<span class="LC_nobreak">'.$lt{'crsinc'}.':'.
+ '<label><input type="radio" name="lti_crsinc_add" value="1" onclick="toggleLTI(this.form,'."'crsinc','add'".');" checked="checked" />'.&mt('Yes').'</label> '."\n".
+ '<label><input type="radio" name="lti_crsinc_add" value="0" onclick="toggleLTI(this.form,'."'crsinc','add'".');" />'.&mt('No').'</label></span>'."\n".
+ (' 'x4).
'<span class="LC_nobreak">'.$lt{'key'}.':<input type="text" size="25" name="lti_key_add" value="" /></span> '."\n".
(' 'x2).
'<span class="LC_nobreak">'.$lt{'secret'}.':<input type="password" size="20" name="lti_secret_add" value="" />'.
@@ -6061,6 +6112,7 @@
'consumer' => 'Consumer',
'secret' => 'Secret',
'requser' => "User's identity sent",
+ 'crsinc' => "Course's identity sent",
'email' => 'Email address',
'sourcedid' => 'User ID',
'other' => 'Other',
@@ -6095,6 +6147,7 @@
my $callbacksty = 'none';
my $passbacksty = 'none';
my $optionsty = 'block';
+ my $crssty = 'block';
my $lcauthparm;
my $lcauthparmstyle = 'display:none';
my $lcauthparmtext;
@@ -6105,6 +6158,9 @@
if (ref($current) eq 'HASH') {
if (!$current->{'requser'}) {
$optionsty = 'none';
+ $crssty = 'none';
+ } elsif (!$current->{'crsinc'}) {
+ $crssty = 'none';
}
if (($current->{'mapuser'} ne '') && ($current->{'mapuser'} ne 'lis_person_sourcedid')) {
$checked{'mapuser'}{'sourcedid'} = '';
@@ -6237,7 +6293,17 @@
my $onclicksecsrc = ' onclick="toggleLTI(this.form,'."'secsrc','$num'".')"';
my $onclicklcauth = ' onclick="toggleLTI(this.form,'."'lcauth','$num'".')"';
my $onclickmenu = ' onclick="toggleLTI(this.form,'."'lcmenu','$num'".');"';
- my $output = '<fieldset class="ltioption_'.$num.'" style="display:'.$optionsty.'"><legend>'.&mt('Mapping users').'</legend>'.
+ my $output = '<fieldset class="ltioption_usr_'.$num.'" style="display:'.$optionsty.'"><legend>'.&mt('Logout options').'</legend>'.
+ '<div class="LC_floatleft"><span class="LC_nobreak">'.&mt('Callback on logout').': '.
+ '<label><input type="radio" name="lti_callback_'.$num.'" value="0"'.
+ $checked{'callback'}{'N'}.$onclickcallback.' />'.&mt('No').'</label>'.(' 'x2).
+ '<label><input type="radio" name="lti_callback_'.$num.'" value="1"'.
+ $checked{'callback'}{'Y'}.$onclickcallback.' />'.&mt('Yes').'</label></span></div>'.
+ '<div class="LC_floatleft" style="display:'.$callbacksty.';" id="lti_callbackfield_'.$num.'">'.
+ '<span class="LC_nobreak">'.&mt('Parameter').': '.
+ '<input type="text" name="lti_callbackparam_'.$num.'" value="'.$callback.'" /></span>'.
+ '</div><div style="padding:0;clear:both;margin:0;border:0"></div></fieldset>'.
+ '<fieldset class="ltioption_usr_'.$num.'" style="display:'.$optionsty.'"><legend>'.&mt('Mapping users').'</legend>'.
'<div class="LC_floatleft"><span class="LC_nobreak">'.&mt('LON-CAPA username').': ';
foreach my $option ('sourcedid','email','other') {
$output .= '<label><input type="radio" name="lti_mapuser_'.$num.'" value="'.$option.'"'.
@@ -6248,37 +6314,13 @@
'<div class="LC_floatleft" style="display:'.$userfieldsty.';" id="lti_userfield_'.$num.'">'.
'<input type="text" name="lti_customuser_'.$num.'" '.
'value="'.$userfield.'" /></div></fieldset>'.
- '<fieldset class="ltioption_'.$num.'" style="display:'.$optionsty.'"><legend>'.&mt('Mapping course roles').'</legend><table><tr>';
- foreach my $ltirole (@lticourseroles) {
- my ($selected,$selectnone);
- if ($rolemaps{$ltirole} eq '') {
- $selectnone = ' selected="selected"';
- }
- $output .= '<td style="text-align: center">'.$ltirole.'<br />'.
- '<select name="lti_maprole_'.$ltirole.'_'.$num.'">'.
- '<option value=""'.$selectnone.'>'.&mt('Select').'</option>';
- foreach my $role (@courseroles) {
- unless ($selectnone) {
- if ($rolemaps{$ltirole} eq $role) {
- $selected = ' selected="selected"';
- } else {
- $selected = '';
- }
- }
- $output .= '<option value="'.$role.'"'.$selected.'>'.
- &Apache::lonnet::plaintext($role,'Course').
- '</option>';
- }
- $output .= '</select></td>';
- }
- $output .= '</tr></table></fieldset>'.
- '<fieldset class="ltioption_'.$num.'" style="display:'.$optionsty.'"><legend>'.&mt('Roles which may create user accounts').'</legend>';
+ '<fieldset class="ltioption_usr_'.$num.'" style="display:'.$optionsty.'"><legend>'.&mt('Roles which may create user accounts').'</legend>';
foreach my $ltirole (@ltiroles) {
$output .= '<span class="LC_nobreak"><label><input type="checkbox" name="lti_makeuser_'.$num.'" value="'.$ltirole.'"'.
$checked{'makeuser'}{$ltirole}.' />'.$ltirole.'</label> </span> ';
}
$output .= '</fieldset>'.
- '<fieldset class="ltioption_'.$num.'" style="display:'.$optionsty.'"><legend>'.&mt('New user accounts created for LTI users').'</legend>'.
+ '<fieldset class="ltioption_usr_'.$num.'" style="display:'.$optionsty.'"><legend>'.&mt('New user accounts created for LTI users').'</legend>'.
'<table>'.
&modifiable_userdata_row('lti','instdata_'.$num,$current,$numinrow,$itemcount).
'</table>'.
@@ -6301,7 +6343,29 @@
'<span id="lti_lcauth_parmtext_'.$num.'">'.$lcauthparmtext.'</span>'.
'<input type="text" name="lti_lcauthparm_'.$num.'" value="" /></span></td></tr>'.
'</table></fieldset>'.
- '<fieldset class="ltioption_'.$num.'" style="display:'.$optionsty.'"><legend>'.&mt('Mapping courses').'</legend>'.
+ '<fieldset class="ltioption_usr_'.$num.'" style="display:'.$optionsty.'"><legend>'.
+ &mt('LON-CAPA menu items (Course Coordinator can override)').'</legend>'.
+ '<div class="LC_floatleft"><span class="LC_nobreak">'.$lt{'topmenu'}.': '.
+ '<label><input type="radio" name="lti_topmenu_'.$num.'" value="0"'.
+ $checked{'topmenu'}{'N'}.$onclickmenu.' />'.&mt('No').'</label>'.(' 'x2).
+ '<label><input type="radio" name="lti_topmenu_'.$num.'" value="1"'.
+ $checked{'topmenu'}{'Y'}.$onclickmenu.' />'.&mt('Yes').'</label></span></div>'.
+ '<div style="padding:0;clear:both;margin:0;border:0"></div>'.
+ '<div class="LC_floatleft"><span class="LC_nobreak">'.$lt{'inlinemenu'}.': '.
+ '<label><input type="radio" name="lti_inlinemenu_'.$num.'" value="0"'.
+ $checked{'inlinemenu'}{'N'}.$onclickmenu.' />'.&mt('No').'</label>'.(' 'x2).
+ '<label><input type="radio" name="lti_inlinemenu_'.$num.'" value="1"'.
+ $checked{'inlinemenu'}{'Y'}.$onclickmenu.' />'.&mt('Yes').'</label></span></div>';
+ $output .='<div style="padding:0;clear:both;margin:0;border:0"></div>'.
+ '<div class="LC_floatleft" style="display:'.$menusty.';" id="lti_menufield_'.$num.'">'.
+ '<span class="LC_nobreak">'.&mt('Menu items').': ';
+ foreach my $type ('fullname','coursetitle','role','logout','grades') {
+ $output .= '<label><input type="checkbox" name="lti_menuitem_'.$num.'" value="'.$type.'"'.
+ $checked{'menuitem'}{$type}.' />'.$menutitles{$type}.'</label>'.
+ (' 'x2);
+ }
+ $output .= '</span></div></fieldset>'.
+ '<fieldset class="ltioption_crs_'.$num.'" style="display:'.$crssty.'"><legend>'.&mt('Mapping courses').'</legend>'.
'<div class="LC_floatleft"><span class="LC_nobreak">'.
&mt('Unique course identifier').': ';
foreach my $option ('course_offering_sourcedid','context_id','other') {
@@ -6319,20 +6383,44 @@
(' 'x2);
}
$output .= '</span></fieldset>'.
- '<fieldset class="ltioption_'.$num.'" style="display:'.$optionsty.'"><legend>'.&mt('Creating courses').'</legend>'.
+ '<fieldset class="ltioption_crs_'.$num.'" style="display:'.$crssty.'"><legend>'.&mt('Mapping course roles').'</legend><table><tr>';
+ foreach my $ltirole (@lticourseroles) {
+ my ($selected,$selectnone);
+ if ($rolemaps{$ltirole} eq '') {
+ $selectnone = ' selected="selected"';
+ }
+ $output .= '<td style="text-align: center">'.$ltirole.'<br />'.
+ '<select name="lti_maprole_'.$ltirole.'_'.$num.'">'.
+ '<option value=""'.$selectnone.'>'.&mt('Select').'</option>';
+ foreach my $role (@courseroles) {
+ unless ($selectnone) {
+ if ($rolemaps{$ltirole} eq $role) {
+ $selected = ' selected="selected"';
+ } else {
+ $selected = '';
+ }
+ }
+ $output .= '<option value="'.$role.'"'.$selected.'>'.
+ &Apache::lonnet::plaintext($role,'Course').
+ '</option>';
+ }
+ $output .= '</select></td>';
+ }
+ $output .= '</tr></table></fieldset>'.
+ '<fieldset class="ltioption_crs_'.$num.'" style="display:'.$crssty.'"><legend>'.&mt('Creating courses').'</legend>'.
'<span class="LC_nobreak">'.&mt('Course created (if absent) on Instructor access').': '.
'<label><input type="radio" name="lti_makecrs_'.$num.'" value="0"'.
$checked{'makecrs'}{'N'}.' />'.&mt('No').'</label>'.(' 'x2).
'<label><input type="radio" name="lti_makecrs_'.$num.'" value="1"'.
$checked{'makecrs'}{'Y'}.' />'.&mt('Yes').'</label></span>'.
'</fieldset>'.
- '<fieldset class="ltioption_'.$num.'" style="display:'.$optionsty.'"><legend>'.&mt('Roles which may self-enroll').'</legend>';
+ '<fieldset class="ltioption_crs_'.$num.'" style="display:'.$crssty.'"><legend>'.&mt('Roles which may self-enroll').'</legend>';
foreach my $lticrsrole (@lticourseroles) {
$output .= '<span class="LC_nobreak"><label><input type="checkbox" name="lti_selfenroll_'.$num.'" value="'.$lticrsrole.'"'.
$checked{'selfenroll'}{$lticrsrole}.' />'.$lticrsrole.'</label> </span> ';
}
$output .= '</fieldset>'.
- '<fieldset class="ltioption_'.$num.'" style="display:'.$optionsty.'"><legend>'.&mt('Course options').'</legend>'.
+ '<fieldset class="ltioption_crs_'.$num.'" style="display:'.$crssty.'"><legend>'.&mt('Course options').'</legend>'.
'<div class="LC_floatleft"><span class="LC_nobreak">'.&mt('Assign users to sections').': '.
'<label><input type="radio" name="lti_crssec_'.$num.'" value="0"'.
$checked{'crssec'}{'N'}.$onclicksec.' />'.&mt('No').'</label>'.(' 'x2).
@@ -6384,36 +6472,7 @@
&mt('Outcomes Service (1.1)').'</label>'.(' 'x2).
'<label><input type="radio" name="lti_passbackformat_'.$num.'" value="1.0"'.$pb1p0chk.'/>'.
&mt('Outcomes Extension (1.0)').'</label></span></div>'.
- '<div style="padding:0;clear:both;margin:0;border:0"></div>'.
- '<div class="LC_floatleft"><span class="LC_nobreak">'.&mt('Callback on logout').': '.
- '<label><input type="radio" name="lti_callback_'.$num.'" value="0"'.
- $checked{'callback'}{'N'}.$onclickcallback.' />'.&mt('No').'</label>'.(' 'x2).
- '<label><input type="radio" name="lti_callback_'.$num.'" value="1"'.
- $checked{'callback'}{'Y'}.$onclickcallback.' />'.&mt('Yes').'</label></span></div>'.
- '<div class="LC_floatleft" style="display:'.$callbacksty.';" id="lti_callbackfield_'.$num.'">'.
- '<span class="LC_nobreak">'.&mt('Parameter').': '.
- '<input type="text" name="lti_callbackparam_'.$num.'" value="'.$callback.'" /></span>'.
- '</div><div style="padding:0;clear:both;margin:0;border:0"></div></fieldset>'.
- '<fieldset class="ltioption_'.$num.'" style="display:'.$optionsty.'"><legend>'.&mt('Course defaults (Course Coordinator can override)').'</legend>'.
- '<div class="LC_floatleft"><span class="LC_nobreak">'.$lt{'topmenu'}.': '.
- '<label><input type="radio" name="lti_topmenu_'.$num.'" value="0"'.
- $checked{'topmenu'}{'N'}.$onclickmenu.' />'.&mt('No').'</label>'.(' 'x2).
- '<label><input type="radio" name="lti_topmenu_'.$num.'" value="1"'.
- $checked{'topmenu'}{'Y'}.$onclickmenu.' />'.&mt('Yes').'</label></span></div>'.
- '<div style="padding:0;clear:both;margin:0;border:0"></div>'.
- '<div class="LC_floatleft"><span class="LC_nobreak">'.$lt{'inlinemenu'}.': '.
- '<label><input type="radio" name="lti_inlinemenu_'.$num.'" value="0"'.
- $checked{'inlinemenu'}{'N'}.$onclickmenu.' />'.&mt('No').'</label>'.(' 'x2).
- '<label><input type="radio" name="lti_inlinemenu_'.$num.'" value="1"'.
- $checked{'inlinemenu'}{'Y'}.$onclickmenu.' />'.&mt('Yes').'</label></span></div>';
- $output .='<div style="padding:0;clear:both;margin:0;border:0"></div>'.
- '<div class="LC_floatleft" style="display:'.$menusty.';" id="lti_menufield_'.$num.'">'.
- '<span class="LC_nobreak">'.&mt('Menu items').': ';
- foreach my $type ('fullname','coursetitle','role','logout','grades') {
- $output .= '<label><input type="checkbox" name="lti_menuitem_'.$num.'" value="'.$type.'"'.
- $checked{'menuitem'}{$type}.' />'.$menutitles{$type}.'</label>'.
- (' 'x2);
- }
+ '<div style="padding:0;clear:both;margin:0;border:0"></div></fieldset>';
$output .= '</span></div></fieldset>';
# '<fieldset><legend>'.&mt('Assigning author roles').'</legend>';
#
@@ -14773,7 +14832,7 @@
if ($position ne '') {
$allpos[$position] = $itemid;
}
- foreach my $item ('consumer','key','secret','lifetime','requser') {
+ foreach my $item ('consumer','key','secret','lifetime','requser','crsinc') {
my $formitem = 'form.lti_'.$item.'_'.$idx;
$env{$formitem} =~ s/(`)/'/g;
if ($item eq 'lifetime') {
@@ -14806,12 +14865,6 @@
$mapuser =~ s/^\s+|\s+$//g;
$confhash{$itemid}{'mapuser'} = $mapuser;
}
- foreach my $ltirole (@lticourseroles) {
- my $possrole = $env{'form.lti_maprole_'.$ltirole.'_'.$idx};
- if (grep(/^\Q$possrole\E$/, at courseroles)) {
- $confhash{$itemid}{'maproles'}{$ltirole} = $possrole;
- }
- }
my @possmakeuser = &Apache::loncommon::get_env_multiple('form.lti_makeuser_'.$idx);
my @makeuser;
foreach my $ltirole (sort(@possmakeuser)) {
@@ -14844,46 +14897,6 @@
}
}
}
- if (($env{'form.lti_mapcrs_'.$idx} eq 'course_offering_sourcedid') ||
- ($env{'form.lti_mapcrs_'.$idx} eq 'context_id')) {
- $confhash{$itemid}{'mapcrs'} = $env{'form.lti_mapcrs_'.$idx};
- } elsif ($env{'form.lti_mapcrs_'.$idx} eq 'other') {
- my $mapcrs = $env{'form.lti_mapcrsfield_'.$idx};
- $mapcrs =~ s/(`)/'/g;
- $mapcrs =~ s/^\s+|\s+$//g;
- $confhash{$itemid}{'mapcrs'} = $mapcrs;
- }
- my @posstypes = &Apache::loncommon::get_env_multiple('form.lti_mapcrstype_'.$idx);
- my @crstypes;
- foreach my $type (sort(@posstypes)) {
- if ($posscrstype{$type}) {
- push(@crstypes,$type);
- }
- }
- $confhash{$itemid}{'mapcrstype'} = \@crstypes;
- if ($env{'form.lti_makecrs_'.$idx}) {
- $confhash{$itemid}{'makecrs'} = 1;
- }
- my @possenroll = &Apache::loncommon::get_env_multiple('form.lti_selfenroll_'.$idx);
- my @selfenroll;
- foreach my $type (sort(@possenroll)) {
- if ($posslticrs{$type}) {
- push(@selfenroll,$type);
- }
- }
- $confhash{$itemid}{'selfenroll'} = \@selfenroll;
- if ($env{'form.lti_crssec_'.$idx}) {
- if ($env{'form.lti_crssecsrc_'.$idx} eq 'course_section_sourcedid') {
- $confhash{$itemid}{'section'} = $env{'form.lti_crssecsrc_'.$idx};
- } elsif ($env{'form.lti_crssecsrc_'.$idx} eq 'other') {
- my $section = $env{'form.lti_customsection_'.$idx};
- $section =~ s/(`)/'/g;
- $section =~ s/^\s+|\s+$//g;
- if ($section ne '') {
- $confhash{$itemid}{'section'} = $section;
- }
- }
- }
if ($env{'form.lti_callback_'.$idx}) {
if ($env{'form.lti_callbackparam_'.$idx}) {
my $callback = $env{'form.lti_callbackparam_'.$idx};
@@ -14891,18 +14904,11 @@
$confhash{$itemid}{'callback'} = $callback;
}
}
- foreach my $field ('passback','roster','topmenu','inlinemenu') {
+ foreach my $field ('topmenu','inlinemenu') {
if ($env{'form.lti_'.$field.'_'.$idx}) {
$confhash{$itemid}{$field} = 1;
}
}
- if ($env{'form.lti_passback_'.$idx}) {
- if ($env{'form.lti_passbackformat_'.$idx} eq '1.0') {
- $confhash{$itemid}{'passbackformat'} = '1.0';
- } else {
- $confhash{$itemid}{'passbackformat'} = '1.1';
- }
- }
if ($env{'form.lti_topmenu_'.$idx} || $env{'form.lti_inlinemenu_'.$idx}) {
$confhash{$itemid}{lcmenu} = [];
my @possmenu = &Apache::loncommon::get_env_multiple('form.lti_menuitem_'.$idx);
@@ -14915,64 +14921,152 @@
}
}
}
- unless (($idx eq 'add') || ($changes{$itemid})) {
- foreach my $field ('mapuser','mapcrs','makecrs','section','passback','roster','lcauth','lcauthparm','topmenu','inlinemenu','callback') {
- if ($domconfig{$action}{$itemid}{$field} ne $confhash{$itemid}{$field}) {
- $changes{$itemid} = 1;
+ if ($confhash{$itemid}{'crsinc'}) {
+ if (($env{'form.lti_mapcrs_'.$idx} eq 'course_offering_sourcedid') ||
+ ($env{'form.lti_mapcrs_'.$idx} eq 'context_id')) {
+ $confhash{$itemid}{'mapcrs'} = $env{'form.lti_mapcrs_'.$idx};
+ } elsif ($env{'form.lti_mapcrs_'.$idx} eq 'other') {
+ my $mapcrs = $env{'form.lti_mapcrsfield_'.$idx};
+ $mapcrs =~ s/(`)/'/g;
+ $mapcrs =~ s/^\s+|\s+$//g;
+ $confhash{$itemid}{'mapcrs'} = $mapcrs;
+ }
+ my @posstypes = &Apache::loncommon::get_env_multiple('form.lti_mapcrstype_'.$idx);
+ my @crstypes;
+ foreach my $type (sort(@posstypes)) {
+ if ($posscrstype{$type}) {
+ push(@crstypes,$type);
+ }
+ }
+ $confhash{$itemid}{'mapcrstype'} = \@crstypes;
+ if ($env{'form.lti_makecrs_'.$idx}) {
+ $confhash{$itemid}{'makecrs'} = 1;
+ }
+ foreach my $ltirole (@lticourseroles) {
+ my $possrole = $env{'form.lti_maprole_'.$ltirole.'_'.$idx};
+ if (grep(/^\Q$possrole\E$/, at courseroles)) {
+ $confhash{$itemid}{'maproles'}{$ltirole} = $possrole;
+ }
+ }
+ my @possenroll = &Apache::loncommon::get_env_multiple('form.lti_selfenroll_'.$idx);
+ my @selfenroll;
+ foreach my $type (sort(@possenroll)) {
+ if ($posslticrs{$type}) {
+ push(@selfenroll,$type);
+ }
+ }
+ $confhash{$itemid}{'selfenroll'} = \@selfenroll;
+ if ($env{'form.lti_crssec_'.$idx}) {
+ if ($env{'form.lti_crssecsrc_'.$idx} eq 'course_section_sourcedid') {
+ $confhash{$itemid}{'section'} = $env{'form.lti_crssecsrc_'.$idx};
+ } elsif ($env{'form.lti_crssecsrc_'.$idx} eq 'other') {
+ my $section = $env{'form.lti_customsection_'.$idx};
+ $section =~ s/(`)/'/g;
+ $section =~ s/^\s+|\s+$//g;
+ if ($section ne '') {
+ $confhash{$itemid}{'section'} = $section;
+ }
}
}
- unless ($changes{$itemid}) {
- if ($domconfig{$action}{$itemid}{'passback'} eq $confhash{$itemid}{'passback'}) {
- if ($domconfig{$action}{$itemid}{'passbackformat'} ne $confhash{$itemid}{'passbackformat'}) {
+ foreach my $field ('passback','roster') {
+ if ($env{'form.lti_'.$field.'_'.$idx}) {
+ $confhash{$itemid}{$field} = 1;
+ }
+ }
+ if ($env{'form.lti_passback_'.$idx}) {
+ if ($env{'form.lti_passbackformat_'.$idx} eq '1.0') {
+ $confhash{$itemid}{'passbackformat'} = '1.0';
+ } else {
+ $confhash{$itemid}{'passbackformat'} = '1.1';
+ }
+ }
+ }
+ unless (($idx eq 'add') || ($changes{$itemid})) {
+ if ($confhash{$itemid}{'crsinc'}) {
+ foreach my $field ('mapcrs','makecrs','section','passback','roster') {
+ if ($domconfig{$action}{$itemid}{$field} ne $confhash{$itemid}{$field}) {
$changes{$itemid} = 1;
}
}
- }
- foreach my $field ('makeuser','mapcrstype','selfenroll','instdata','lcmenu') {
unless ($changes{$itemid}) {
- if (ref($domconfig{$action}{$itemid}{$field}) eq 'ARRAY') {
- if (ref($confhash{$itemid}{$field}) eq 'ARRAY') {
- my @diffs = &Apache::loncommon::compare_arrays($domconfig{$action}{$itemid}{$field},
- $confhash{$itemid}{$field});
- if (@diffs) {
- $changes{$itemid} = 1;
- }
- } elsif (@{$domconfig{$action}{$itemid}{$field}} > 0) {
- $changes{$itemid} = 1;
- }
- } elsif (ref($confhash{$itemid}{$field}) eq 'ARRAY') {
- if (@{$confhash{$itemid}{$field}} > 0) {
+ if ($domconfig{$action}{$itemid}{'passback'} eq $confhash{$itemid}{'passback'}) {
+ if ($domconfig{$action}{$itemid}{'passbackformat'} ne $confhash{$itemid}{'passbackformat'}) {
$changes{$itemid} = 1;
}
}
}
- }
- unless ($changes{$itemid}) {
- if (ref($domconfig{$action}{$itemid}{'maproles'}) eq 'HASH') {
- if (ref($confhash{$itemid}{'maproles'}) eq 'HASH') {
- foreach my $ltirole (keys(%{$domconfig{$action}{$itemid}{'maproles'}})) {
- if ($domconfig{$action}{$itemid}{'maproles'}{$ltirole} ne
- $confhash{$itemid}{'maproles'}{$ltirole}) {
+ foreach my $field ('mapcrstype','selfenroll') {
+ unless ($changes{$itemid}) {
+ if (ref($domconfig{$action}{$itemid}{$field}) eq 'ARRAY') {
+ if (ref($confhash{$itemid}{$field}) eq 'ARRAY') {
+ my @diffs = &Apache::loncommon::compare_arrays($domconfig{$action}{$itemid}{$field},
+ $confhash{$itemid}{$field});
+ if (@diffs) {
+ $changes{$itemid} = 1;
+ }
+ } elsif (@{$domconfig{$action}{$itemid}{$field}} > 0) {
+ $changes{$itemid} = 1;
+ }
+ } elsif (ref($confhash{$itemid}{$field}) eq 'ARRAY') {
+ if (@{$confhash{$itemid}{$field}} > 0) {
$changes{$itemid} = 1;
- last;
}
}
- unless ($changes{$itemid}) {
- foreach my $ltirole (keys(%{$confhash{$itemid}{'maproles'}})) {
- if ($confhash{$itemid}{'maproles'}{$ltirole} ne
- $domconfig{$action}{$itemid}{'maproles'}{$ltirole}) {
+ }
+ }
+ unless ($changes{$itemid}) {
+ if (ref($domconfig{$action}{$itemid}{'maproles'}) eq 'HASH') {
+ if (ref($confhash{$itemid}{'maproles'}) eq 'HASH') {
+ foreach my $ltirole (keys(%{$domconfig{$action}{$itemid}{'maproles'}})) {
+ if ($domconfig{$action}{$itemid}{'maproles'}{$ltirole} ne
+ $confhash{$itemid}{'maproles'}{$ltirole}) {
$changes{$itemid} = 1;
last;
}
}
+ unless ($changes{$itemid}) {
+ foreach my $ltirole (keys(%{$confhash{$itemid}{'maproles'}})) {
+ if ($confhash{$itemid}{'maproles'}{$ltirole} ne
+ $domconfig{$action}{$itemid}{'maproles'}{$ltirole}) {
+ $changes{$itemid} = 1;
+ last;
+ }
+ }
+ }
+ } elsif (keys(%{$domconfig{$action}{$itemid}{'maproles'}}) > 0) {
+ $changes{$itemid} = 1;
}
- } elsif (keys(%{$domconfig{$action}{$itemid}{'maproles'}}) > 0) {
+ } elsif (ref($confhash{$itemid}{'maproles'}) eq 'HASH') {
+ unless ($changes{$itemid}) {
+ if (keys(%{$confhash{$itemid}{'maproles'}}) > 0) {
+ $changes{$itemid} = 1;
+ }
+ }
+ }
+ }
+ }
+ unless ($changes{$itemid}) {
+ foreach my $field ('mapuser','lcauth','lcauthparm','topmenu','inlinemenu','callback') {
+ if ($domconfig{$action}{$itemid}{$field} ne $confhash{$itemid}{$field}) {
$changes{$itemid} = 1;
}
- } elsif (ref($confhash{$itemid}{'maproles'}) eq 'HASH') {
- unless ($changes{$itemid}) {
- if (keys(%{$confhash{$itemid}{'maproles'}}) > 0) {
- $changes{$itemid} = 1;
+ }
+ unless ($changes{$itemid}) {
+ foreach my $field ('makeuser','lcmenu') {
+ if (ref($domconfig{$action}{$itemid}{$field}) eq 'ARRAY') {
+ if (ref($confhash{$itemid}{$field}) eq 'ARRAY') {
+ my @diffs = &Apache::loncommon::compare_arrays($domconfig{$action}{$itemid}{$field},
+ $confhash{$itemid}{$field});
+ if (@diffs) {
+ $changes{$itemid} = 1;
+ }
+ } elsif (@{$domconfig{$action}{$itemid}{$field}} > 0) {
+ $changes{$itemid} = 1;
+ }
+ } elsif (ref($confhash{$itemid}{$field}) eq 'ARRAY') {
+ if (@{$confhash{$itemid}{$field}} > 0) {
+ $changes{$itemid} = 1;
+ }
}
}
}
@@ -15048,6 +15142,11 @@
$resulttext .= ('*'x$num).'</li>';
}
if ($confhash{$itemid}{'requser'}) {
+ if ($confhash{$itemid}{'callback'}) {
+ $resulttext .= '<li>'.&mt('Callback setting').': '.$confhash{$itemid}{'callback'}.'</li>';
+ } else {
+ $resulttext .= '<li>'.&mt('No callback to logout LON-CAPA session when user logs out of Comsumer').'</li>';
+ }
if ($confhash{$itemid}{'mapuser'}) {
my $shownmapuser;
if ($confhash{$itemid}{'mapuser'} eq 'lis_person_sourcedid') {
@@ -15059,20 +15158,6 @@
}
$resulttext .= '<li>'.&mt('LON-CAPA username').': '.$shownmapuser.'</li>';
}
- if (ref($confhash{$itemid}{'maproles'}) eq 'HASH') {
- my $rolemaps;
- foreach my $role (@ltiroles) {
- if ($confhash{$itemid}{'maproles'}{$role}) {
- $rolemaps .= (' 'x2).$role.'='.
- &Apache::lonnet::plaintext($confhash{$itemid}{'maproles'}{$role},
- 'Course').',';
- }
- }
- if ($rolemaps) {
- $rolemaps =~ s/,$//;
- $resulttext .= '<li>'.&mt('Role mapping:').$rolemaps.'</li>';
- }
- }
if (ref($confhash{$itemid}{'makeuser'}) eq 'ARRAY') {
if (@{$confhash{$itemid}{'makeuser'}} > 0) {
$resulttext .= '<li>'.&mt('Following roles may create user accounts: [_1]',
@@ -15105,59 +15190,10 @@
$resulttext .= '<li>'.&mt('No institutional data used when creating a new user.').'</li>';
}
}
- if ($confhash{$itemid}{'mapcrs'}) {
- $resulttext .= '<li>'.&mt('Unique course identifier').': '.$confhash{$itemid}{'mapcrs'}.'</li>';
- }
- if (ref($confhash{$itemid}{'mapcrstype'}) eq 'ARRAY') {
- if (@{$confhash{$itemid}{'mapcrstype'}} > 0) {
- $resulttext .= '<li>'.&mt('Mapping for the following LON-CAPA course types: [_1]',
- join(', ',map { $coursetypetitles{$_}; } @coursetypes)).
- '</li>';
- } else {
- $resulttext .= '<li>'.&mt('No mapping to LON-CAPA courses').'</li>';
- }
- }
- if ($confhash{$itemid}{'makecrs'}) {
- $resulttext .= '<li>'.&mt('Instructor may create course (if absent).').'</li>';
- } else {
- $resulttext .= '<li>'.&mt('Instructor may not create course (if absent).').'</li>';
- }
- if (ref($confhash{$itemid}{'selfenroll'}) eq 'ARRAY') {
- if (@{$confhash{$itemid}{'selfenroll'}} > 0) {
- $resulttext .= '<li>'.&mt('Self-enrollment for following roles: [_1]',
- join(', ',@{$confhash{$itemid}{'selfenroll'}})).
- '</li>';
- } else {
- $resulttext .= '<li>'.&mt('Self-enrollment not permitted').'</li>';
- }
- }
- if ($confhash{$itemid}{'section'}) {
- if ($confhash{$itemid}{'section'} eq 'course_section_sourcedid') {
- $resulttext .= '<li>'.&mt('User section from standard field:').
- ' (course_section_sourcedid)'.'</li>';
- } else {
- $resulttext .= '<li>'.&mt('User section from:').' '.
- $confhash{$itemid}{'section'}.'</li>';
- }
- } else {
- $resulttext .= '<li>'.&mt('No section assignment').'</li>';
- }
- if ($confhash{$itemid}{'callback'}) {
- $resulttext .= '<li>'.&mt('Callback setting').': '.$confhash{$itemid}{'callback'}.'</li>';
- } else {
- $resulttext .= '<li>'.&mt('No callback to logout LON-CAPA session when user logs out of Comsumer');
- }
- foreach my $item ('passback','roster','topmenu','inlinemenu') {
+ foreach my $item ('topmenu','inlinemenu') {
$resulttext .= '<li>'.$lt{$item}.': ';
if ($confhash{$itemid}{$item}) {
$resulttext .= &mt('Yes');
- if ($item eq 'passback') {
- if ($confhash{$itemid}{'passbackformat'} eq '1.0') {
- $resulttext .= ' ('.&mt('Outcomes Extension (1.0)').')';
- } elsif ($confhash{$itemid}{'passbackformat'} eq '1.1') {
- $resulttext .= ' ('.&mt('Outcomes Service (1.1)').')';
- }
- }
} else {
$resulttext .= &mt('No');
}
@@ -15166,9 +15202,86 @@
if (ref($confhash{$itemid}{'lcmenu'}) eq 'ARRAY') {
if (@{$confhash{$itemid}{'lcmenu'}} > 0) {
$resulttext .= '<li>'.&mt('Menu items:').' '.
- join(', ', map { $menutitles{$_}; } (@{$confhash{$itemid}{'lcmenu'}})).'</li>';
+ join(', ', map { $menutitles{$_}; } (@{$confhash{$itemid}{'lcmenu'}})).'</li>';
+ } else {
+ $resulttext .= '<li>'.&mt('No menu items displayed in header or online menu').'</li>';
+ }
+ }
+ if ($confhash{$itemid}{'crsinc'}) {
+ if (ref($confhash{$itemid}{'maproles'}) eq 'HASH') {
+ my $rolemaps;
+ foreach my $role (@ltiroles) {
+ if ($confhash{$itemid}{'maproles'}{$role}) {
+ $rolemaps .= (' 'x2).$role.'='.
+ &Apache::lonnet::plaintext($confhash{$itemid}{'maproles'}{$role},
+ 'Course').',';
+ }
+ }
+ if ($rolemaps) {
+ $rolemaps =~ s/,$//;
+ $resulttext .= '<li>'.&mt('Role mapping:').$rolemaps.'</li>';
+ }
+ }
+ if ($confhash{$itemid}{'mapcrs'}) {
+ $resulttext .= '<li>'.&mt('Unique course identifier').': '.$confhash{$itemid}{'mapcrs'}.'</li>';
+ }
+ if (ref($confhash{$itemid}{'mapcrstype'}) eq 'ARRAY') {
+ if (@{$confhash{$itemid}{'mapcrstype'}} > 0) {
+ $resulttext .= '<li>'.&mt('Mapping for the following LON-CAPA course types: [_1]',
+ join(', ',map { $coursetypetitles{$_}; } @coursetypes)).
+ '</li>';
+ } else {
+ $resulttext .= '<li>'.&mt('No mapping to LON-CAPA courses').'</li>';
+ }
+ }
+ if ($confhash{$itemid}{'makecrs'}) {
+ $resulttext .= '<li>'.&mt('Instructor may create course (if absent).').'</li>';
+ } else {
+ $resulttext .= '<li>'.&mt('Instructor may not create course (if absent).').'</li>';
+ }
+ if (ref($confhash{$itemid}{'selfenroll'}) eq 'ARRAY') {
+ if (@{$confhash{$itemid}{'selfenroll'}} > 0) {
+ $resulttext .= '<li>'.&mt('Self-enrollment for following roles: [_1]',
+ join(', ',@{$confhash{$itemid}{'selfenroll'}})).
+ '</li>';
+ } else {
+ $resulttext .= '<li>'.&mt('Self-enrollment not permitted').'</li>';
+ }
+ }
+ if ($confhash{$itemid}{'section'}) {
+ if ($confhash{$itemid}{'section'} eq 'course_section_sourcedid') {
+ $resulttext .= '<li>'.&mt('User section from standard field:').
+ ' (course_section_sourcedid)'.'</li>';
+ } else {
+ $resulttext .= '<li>'.&mt('User section from:').' '.
+ $confhash{$itemid}{'section'}.'</li>';
+ }
} else {
- $resulttext .= '<li>'.&mt('No menu items displayed in header or online menu').'</li>';
+ $resulttext .= '<li>'.&mt('No section assignment').'</li>';
+ }
+ foreach my $item ('passback','roster','topmenu','inlinemenu') {
+ $resulttext .= '<li>'.$lt{$item}.': ';
+ if ($confhash{$itemid}{$item}) {
+ $resulttext .= &mt('Yes');
+ if ($item eq 'passback') {
+ if ($confhash{$itemid}{'passbackformat'} eq '1.0') {
+ $resulttext .= ' ('.&mt('Outcomes Extension (1.0)').')';
+ } elsif ($confhash{$itemid}{'passbackformat'} eq '1.1') {
+ $resulttext .= ' ('.&mt('Outcomes Service (1.1)').')';
+ }
+ }
+ } else {
+ $resulttext .= &mt('No');
+ }
+ $resulttext .= '</li>';
+ }
+ if (ref($confhash{$itemid}{'lcmenu'}) eq 'ARRAY') {
+ if (@{$confhash{$itemid}{'lcmenu'}} > 0) {
+ $resulttext .= '<li>'.&mt('Menu items:').' '.
+ join(', ', map { $menutitles{$_}; } (@{$confhash{$itemid}{'lcmenu'}})).'</li>';
+ } else {
+ $resulttext .= '<li>'.&mt('No menu items displayed in header or online menu').'</li>';
+ }
}
}
}
Index: loncom/lti/ltiauth.pm
diff -u loncom/lti/ltiauth.pm:1.25 loncom/lti/ltiauth.pm:1.26
--- loncom/lti/ltiauth.pm:1.25 Mon Nov 22 03:19:05 2021
+++ loncom/lti/ltiauth.pm Mon Nov 22 23:41:00 2021
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Basic LTI Authentication Module
#
-# $Id: ltiauth.pm,v 1.25 2021/11/22 03:19:05 raeburn Exp $
+# $Id: ltiauth.pm,v 1.26 2021/11/22 23:41:00 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -613,20 +613,26 @@
my $reqcrs;
if ($cnum eq '') {
- if ((@ltiroles) && ($lti{$itemid}{'mapcrs'}) &&
- ($ltiroles[0] eq 'Instructor') && ($lcroles[0] eq 'cc') && ($lti{$itemid}{'makecrs'})) {
- my (%can_request,%request_domains);
- &Apache::lonnet::check_can_request($cdom,\%can_request,\%request_domains,$uname,$udom);
- if ($can_request{'lti'}) {
- $reqcrs = 1;
- <i_session($r,$itemid,$uname,$udom,$uhome,$lonhost,undef,$mapurl,$tail,
- $symb,$cdom,$cnum,$params,\@ltiroles,$lti{$itemid},\@lcroles,
- $reqcrs,$sourcecrs);
+ if ($lti{$itemid}{'crsinc'}) {
+ if ((@ltiroles) && ($lti{$itemid}{'mapcrs'}) &&
+ ($ltiroles[0] eq 'Instructor') && ($lcroles[0] eq 'cc') && ($lti{$itemid}{'makecrs'})) {
+ my (%can_request,%request_domains);
+ &Apache::lonnet::check_can_request($cdom,\%can_request,\%request_domains,$uname,$udom);
+ if ($can_request{'lti'}) {
+ $reqcrs = 1;
+ <i_session($r,$itemid,$uname,$udom,$uhome,$lonhost,undef,$mapurl,$tail,
+ $symb,$cdom,$cnum,$params,\@ltiroles,$lti{$itemid},\@lcroles,
+ $reqcrs,$sourcecrs);
+ } else {
+ &invalid_request($r,27);
+ }
} else {
- &invalid_request($r,27);
+ &invalid_request($r,28);
}
} else {
- &invalid_request($r,28);
+ <i_session($r,$itemid,$uname,$udom,$uhome,$lonhost,undef,$mapurl,$tail,
+ $symb,$cdom,$cnum,$params,\@ltiroles,$lti{$itemid},\@lcroles,
+ $reqcrs,$sourcecrs);
}
return OK;
}
@@ -894,7 +900,9 @@
$env{'request.lti.uri'} = $tail;
} else {
unless ($tail eq '/adm/roles') {
- $env{'form.origurl'} = '/adm/navmaps';
+ if ($cnum) {
+ $env{'form.origurl'} = '/adm/navmaps';
+ }
}
}
}
@@ -1002,7 +1010,9 @@
$info{'origurl'} = $tail;
} else {
unless ($tail eq '/adm/roles') {
- $info{'origurl'} = '/adm/navmaps';
+ if ($cnum) {
+ $info{'origurl'} = '/adm/navmaps';
+ }
}
}
}
More information about the LON-CAPA-cvs
mailing list