--- loncom/interface/courseprefs.pm 2023/06/01 20:04:36 1.121 +++ loncom/interface/courseprefs.pm 2023/06/03 02:29:57 1.122 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to set configuration settings for a course # -# $Id: courseprefs.pm,v 1.121 2023/06/01 20:04:36 raeburn Exp $ +# $Id: courseprefs.pm,v 1.122 2023/06/03 02:29:57 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -1661,14 +1661,28 @@ sub process_linkprot { } elsif (exists($env{$urlparamname})) { $env{$urlparamname} = ''; } + my $passback = 'form.linkprot_passback_'.$idx; + my $passbackparamname = 'form.linkprot_passbackformat_'.$idx; + if ($env{$passback} == 1) { + unless ($env{$passbackparamname} =~ /^1\.(0|1)$/) { + $env{$passbackparamname} = ''; + } + } elsif (exists($env{$passbackparamname})) { + $env{$passbackparamname} = ''; + } unless ($idx eq 'add') { if ((!$current{'returnurl'} && ($env{$urlparamname} ne '')) || ($current{'returnurl'} && ($env{$urlparamname} eq ''))) { $haschanges{$itemid} = 1; } + if ((!$current{'passback'} && ($env{$passbackparamname} ne '')) || + ($current{'passback'} && ($env{$passbackparamname} eq ''))) { + $haschanges{$itemid} = 1; + } } - if ($env{$urlparamname} ne '') { - $linkprot{$itemid}{'returnurl'} = $env{$urlparamname}; + if ($env{$passbackparamname} ne '') { + $linkprot{$itemid}{'passback'} = 1; + $linkprot{$itemid}{'passbackformat'} = $env{$passbackparamname}; } if ($ltiauth) { my $reqitem = 'form.linkprot_requser_'.$idx; @@ -3088,7 +3102,7 @@ sub store_linkprot { my %values = %{$changes->{$id}}; my %desc = &linkprot_names(); my $display; - foreach my $title ('name','lifetime','version','key','secret','returnurl') { + foreach my $title ('name','lifetime','version','key','secret','returnurl','passbackformat') { if (($title eq 'key') || ($title eq 'secret')) { if (ref($ltienc{$id}) eq 'HASH') { if (exists($ltienc{$id}{$title})) { @@ -3108,6 +3122,12 @@ sub store_linkprot { if ($values{$title}) { $display .= &mt('Return URL parameter').': '.$values{$title}.', '; } + } elsif ($title eq 'passbackformat') { + if ($values{$title} eq '1.0') { + $display .= &mt('Can return grades to Launcher with Outcomes Service 1.0 format').', '; + } elsif ($values{$title} eq '1.1') { + $display .= &mt('Can return grades to Launcher with Outcomes Service 1.1 format').', '; + } } else { $display .= $desc{$title}.': '.$values{$title}.', '; } @@ -7316,7 +7336,27 @@ sub print_linkprotection { ''. ''; - my ($usersty,$onclickrequser,%checkedrequser,$onclickreturnurl,%checkedreturnurl); + my ($usersty,$onclickrequser,%checkedrequser,$onclickreturnurl,%checkedreturnurl, + $onclickpassback,%checkedpassback,$passbacksty,%checkedpassbackfmt); + $passbacksty = 'none'; + $onclickpassback = ' onclick="toggleLinkProtExtra(this.form,'."'passback','passbackparam','1','inline-block','$i'".');"'; + %checkedpassback = ( + 'no' => ' checked="checked"', + 'yes' => '', + ); + %checkedpassbackfmt = ( + '1p1' => ' checked="checked"', + '1p0' => '', + ); + if ($values{'passback'} ne '') { + $passbacksty = 'inline-block'; + $checkedpassback{'yes'} = ' checked="checked"'; + $checkedpassback{'no'} = ''; + if ($values{'passbackformat'} eq '1.0') { + $checkedpassbackfmt{'1p0'} = ' checked="checked"'; + $checkedpassbackfmt{'1p1'} = ''; + } + } if ($ltiauth) { $usersty = 'display:none'; $onclickrequser = ' onclick="toggleLinkProtExtra(this.form,'."'requser','optional','1','block','$i'".');"'; @@ -7405,6 +7445,19 @@ sub print_linkprotection { } } $datatable .= '

'. + ''.$desc{'passback'}.'?'. + ' '. + '
'. + '
'. + ''.&mt('Grade format'). + ''.(' 'x2). + '
'. + '
'. + '
'. ''.$desc{'returnurl'}.'?'. ' '. @@ -7435,7 +7488,8 @@ sub print_linkprotection { ''."\n". ''.&mt('Add').''."\n". ''; - my ($usersty,$onclickrequser,%checkedrequser,$onclickreturnurl,%checkedreturnurl); + my ($usersty,$onclickrequser,%checkedrequser,$onclickreturnurl,%checkedreturnurl, + $onclickpassback,%checkedpassback,%checkedpassbackfmt); if ($ltiauth) { $usersty = 'display:none'; $onclickrequser = ' onclick="toggleLinkProtExtra(this.form,'."'requser','optional','1','block','add'".');"'; @@ -7445,6 +7499,15 @@ sub print_linkprotection { ); $datatable .= '
'.$lt{'requ'}.''; } + $onclickpassback = ' onclick="toggleLinkProtExtra(this.form,'."'passback','passbackparam','1','inline-block','add'".');"'; + %checkedpassback = ( + 'no' => ' checked="checked"', + 'yes' => '', + ); + %checkedpassbackfmt = ( + '1p1' => ' checked="checked"', + '1p0' => '', + ); $onclickreturnurl = ' onclick="toggleLinkProtExtra(this.form,'."'returnurl','divurlparam','1','inline-block','add'".');"'; %checkedreturnurl = ( no => ' checked="checked"', @@ -7467,6 +7530,19 @@ sub print_linkprotection { ' '."\n"; } $datatable .= '

'. + ''.$desc{'passback'}.'?'. + ' '. + ''. + '
'. + '
'. + '
'. ''.$desc{'returnurl'}.'?'. ' '. @@ -7499,6 +7575,7 @@ sub linkprot_names { 'lifetime' => 'Nonce lifetime (s)', 'name' => 'Launcher Application', 'secret' => 'Secret', + 'passback' => 'Can return grades to Launcher', 'returnurl' => 'Launcher return URL', 'requser' => 'Use identity', 'email' => 'Email address',