--- loncom/interface/courseprefs.pm 2023/12/29 19:44:06 1.49.2.28.2.19
+++ loncom/interface/courseprefs.pm 2025/03/15 01:24:03 1.49.2.28.2.22
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler to set configuration settings for a course
#
-# $Id: courseprefs.pm,v 1.49.2.28.2.19 2023/12/29 19:44:06 raeburn Exp $
+# $Id: courseprefs.pm,v 1.49.2.28.2.22 2025/03/15 01:24:03 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -372,6 +372,12 @@ sub handler {
my %values=&Apache::lonnet::dump('environment',$cdom,$cnum);
my %linkprot=&Apache::lonnet::dump('lti',$cdom,$cnum,undef,undef,undef,1);
+ my %domdefs = &Apache::lonnet::get_domain_defaults($cdom);
+ unless ($phase eq 'process') {
+ if (ref($domdefs{'linkprotsuggested'}) eq 'HASH') {
+ $values{'suggested'} = $domdefs{'linkprotsuggested'};
+ }
+ }
my %ltienc = &Apache::lonnet::dump('nohist_ltienc',$cdom,$cnum,undef,undef,undef,1);
my %ltitools = &Apache::lonnet::dump('ltitools',$cdom,$cnum,undef,undef,undef,1);
my %ltitoolsenc = &Apache::lonnet::dump('nohist_toolsenc',$cdom,$cnum,undef,undef,undef,1);
@@ -778,9 +784,38 @@ sub print_config_box {
';
+ if ($action eq 'linkprot') {
+ if ((ref($settings) eq 'HASH') && (ref($settings->{'suggested'}) eq 'HASH')) {
+ my $hints;
+ my $hintcount = 0;
+ foreach my $key (sort { $a <=> $b } keys(%{$settings->{'suggested'}})) {
+ if ((ref($settings->{'suggested'}->{$key}) eq 'HASH')) {
+ if (($settings->{'suggested'}->{$key}-{'name'} ne '') &&
+ ($settings->{'suggested'}->{$key}-{'info'} ne '')) {
+ my $css_class = $hintcount%2?' class="LC_odd_row"':' class="LC_even_row"';
+ $hints .= ''.
+ $settings->{'suggested'}->{$key}->{'name'}.' | '.
+ ''.
+ $settings->{'suggested'}->{$key}->{'info'}.
+ ' | ';
+ $hintcount ++;
+ }
+ }
+ }
+ if ($hintcount) {
+ $output .= ''.
+ ''.&mt('Recommendation(s) for specific launcher application(s)').' | '.
+ ' '."\n".
+ ''.
+ ''.&mt('Launcher Application').' | '.
+ ''.&mt('Recommendation(s)').' | '."\n".
+ $hints;
+ }
+ }
+ }
if (exists $item->{'header'}->[0]->{'col1'} ||
exists $item->{'header'}->[0]->{'col2'}) {
- $output .= '
+ $output .= '
'.&mt($item->{'header'}->[0]->{'col1'}).' | ';
if (($action eq 'courseinfo') || ($action eq 'localization') ||
@@ -1940,10 +1975,14 @@ sub process_ltitools {
} else {
$ltitools{$newid}{'display'}{'target'} = 'iframe';
}
- foreach my $item ('passback','roster') {
+ foreach my $item ('passback','roster','returnurl') {
if ($env{'form.ltitools_'.$item.'_add'}) {
$ltitools{$newid}{$item} = 1;
- if ($env{'form.ltitools_'.$item.'valid_add'} ne '') {
+ if ($item eq 'returnurl') {
+ if ($env{'form.ltitools_crs'.$item.'_add'}) {
+ $ltitools{$newid}{'crsconf'}{$item} = 1;
+ }
+ } elsif ($env{'form.ltitools_'.$item.'valid_add'} ne '') {
my $lifetime = $env{'form.ltitools_'.$item.'valid_add'};
$lifetime =~ s/^\s+|\s+$//g;
if ($lifetime =~ /^\d+\.?\d*$/) {
@@ -2127,10 +2166,21 @@ sub process_ltitools {
} else {
$haschanges{$itemid} = 1;
}
- foreach my $extra ('passback','roster') {
+ foreach my $extra ('passback','roster','returnurl') {
if ($env{'form.ltitools_'.$extra.'_'.$i}) {
$ltitools{$itemid}{$extra} = 1;
- if ($env{'form.ltitools_'.$extra.'valid_'.$i} ne '') {
+ if ($extra eq 'returnurl') {
+ if ($env{'form.ltitools_crs'.$extra.'_'.$i}) {
+ $ltitools{$itemid}{'crsconf'}{$extra} = 1;
+ if (ref($values->{$itemid}{'crsconf'}) eq 'HASH') {
+ if (!$values->{$itemid}{'crsconf'}{$extra}) {
+ $haschanges{$itemid} = 1;
+ }
+ } else {
+ $haschanges{$itemid} = 1;
+ }
+ }
+ } elsif ($env{'form.ltitools_'.$extra.'valid_'.$i} ne '') {
my $lifetime = $env{'form.ltitools_'.$extra.'valid_'.$i};
$lifetime =~ s/^\s+|\s+$//g;
if ($lifetime =~ /^\d+\.?\d*$/) {
@@ -3203,7 +3253,7 @@ sub store_ltitools {
}
}
}
- $output .= ''.&mt('Configurable in course:');
+ $output .= ''.&mt('Configurable in course').':';
my @possconfig = ('label','title','target','linktext','explanation','append');
my $numconfig = 0;
if (ref($changes->{$itemid}{'crsconf'}) eq 'HASH') {
@@ -3218,11 +3268,21 @@ sub store_ltitools {
$output .= ' '.&mt('None');
}
$output .= '';
- foreach my $item ('passback','roster') {
+ foreach my $item ('passback','roster','returnurl') {
$output .= ''.$lt{$item}.' ';
if ($changes->{$itemid}{$item}) {
$output .= &mt('Yes');
- if ($changes->{$itemid}{$item.'valid'}) {
+ if ($item eq 'returnurl') {
+ if (ref($changes->{$itemid}{'crsconf'}) eq 'HASH') {
+ $output .= ' ['.&mt('Configurable in course').': ';
+ if ($changes->{$itemid}{'crsconf'}{$item}) {
+ $output .= &mt('Yes');
+ } else {
+ $output .= &mt('No');
+ }
+ $output .= ']';
+ }
+ } elsif ($changes->{$itemid}{$item.'valid'}) {
if ($item eq 'passback') {
$output .= ' '.&mt('valid for at least [quant,_1,day] after launch',
$changes->{$itemid}{$item.'valid'});
@@ -5034,8 +5094,7 @@ sub update_releasereq {
}
$modified_courses = [];
}
- undef($registered_cleanup);
- return;
+ return OK;
}
sub show_autocoowners {
@@ -6341,22 +6400,35 @@ sub print_ltitools {
''.$lt{'linktext'}.' '.
' '.
''.$lt{'explanation'}.' '.
- ' ';
my %units = (
'passback' => 'days',
'roster' => 'seconds',
);
- foreach my $extra ('passback','roster') {
+ my %courseconfig;
+ if (ref($settings->{$item}) eq 'HASH') {
+ if (ref($settings->{$item}->{'crsconf'}) eq 'HASH') {
+ %courseconfig = %{$settings->{$item}->{'crsconf'}};
+ }
+ }
+ foreach my $extra ('passback','roster','returnurl') {
my $validsty = 'none';
my $currvalid;
my $checkedon = '';
my $checkedoff = ' checked="checked"';
+ my $crscheckedon = '';
+ my $crscheckedoff = ' checked="checked"';
if ($settings->{$item}->{$extra}) {
$checkedon = $checkedoff;
$checkedoff = '';
$validsty = 'inline-block';
- if ($settings->{$item}->{$extra.'valid'} =~ /^\d+\.?\d*$/) {
+ if ($extra eq 'returnurl') {
+ if ($courseconfig{$extra}) {
+ $crscheckedon = ' checked="checked"';
+ $crscheckedoff = '';
+ }
+ } elsif ($settings->{$item}->{$extra.'valid'} =~ /^\d+\.?\d*$/) {
$currvalid = $settings->{$item}->{$extra.'valid'};
}
}
@@ -6365,12 +6437,21 @@ sub print_ltitools {
''.(' 'x2).
''.
- '';
+ &mt('Yes').'';
+ if ($extra eq 'returnurl') {
+ $datatable .= ' ';
- my %courseconfig;
- if (ref($settings->{$item}) eq 'HASH') {
- if (ref($settings->{$item}->{'crsconf'}) eq 'HASH') {
- %courseconfig = %{$settings->{$item}->{'crsconf'}};
- }
- }
- $datatable .= ' |
'."\n".
+ ''."\n";
$itemcount ++;
}
@@ -6565,18 +6640,27 @@ sub print_ltitools {
'passback' => '7',
'roster' => '300',
);
- foreach my $extra ('passback','roster') {
+ foreach my $extra ('passback','roster','returnurl') {
my $onclick = ' onclick="toggleLTITools(this.form,'."'$extra','add'".');"';
$datatable .= ''.$lt{$extra}.' '.
''.(' 'x2).''.
'
'.
- '';
+ &mt('Yes').'';
+ if ($extra eq 'returnurl') {
+ $datatable .= '