--- loncom/interface/courseprefs.pm 2025/01/07 16:19:19 1.133 +++ loncom/interface/courseprefs.pm 2025/06/14 02:50:25 1.136 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to set configuration settings for a course # -# $Id: courseprefs.pm,v 1.133 2025/01/07 16:19:19 raeburn Exp $ +# $Id: courseprefs.pm,v 1.136 2025/06/14 02:50:25 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -1941,8 +1941,8 @@ sub get_credentials { my $privkey = $privhash{'key'}; $privnum = $privhash{'version'}; if (($privnum) && ($privkey ne '')) { - $cipher = Crypt::CBC->new({'key' => $privkey, - 'cipher' => 'DES'}); + $cipher = Crypt::CBC->new(-pass => $privkey, + -cipher => 'Crypt::DES'); } } } @@ -2026,10 +2026,24 @@ sub process_ltitools { } else { $ltitools{$newid}{'display'}{'target'} = 'iframe'; } - foreach my $item ('passback','roster') { + foreach my $item ('desturl','returnurl','passback','roster') { if ($env{'form.ltitools_'.$item.'_add'}) { $ltitools{$newid}{$item} = 1; - if ($env{'form.ltitools_'.$item.'valid_add'} ne '') { + if (($item eq 'returnurl') || ($item eq 'desturl')) { + if ($env{'form.ltitools_crs'.$item.'_add'}) { + $ltitools{$newid}{'crsconf'}{$item} = 1; + } + if ($item eq 'desturl') { + $env{'form.ltitools_defdest_add'} =~ s{^\s+|\s+$}{}g; + $env{'form.ltitools_defdelay_add'} =~ s{^\s+|\s+$}{}g; + if ($env{'form.ltitools_defdest_add'} ne '') { + $ltitools{$newid}{'defdest'} = $env{'form.ltitools_defdest_add'}; + if ($env{'form.ltitools_defdelay_add'} =~ /^(\d+\.?\d*)$/) { + $ltitools{$newid}{'defdelay'} = $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*$/) { @@ -2213,10 +2227,41 @@ sub process_ltitools { } else { $haschanges{$itemid} = 1; } - foreach my $extra ('passback','roster') { + foreach my $extra ('desturl','returnurl','passback','roster') { if ($env{'form.ltitools_'.$extra.'_'.$i}) { $ltitools{$itemid}{$extra} = 1; - if ($env{'form.ltitools_'.$extra.'valid_'.$i} ne '') { + if (($extra eq 'returnurl') || ($extra eq 'desturl')) { + 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; + } + } + if ($extra eq 'desturl') { + $env{'form.ltitools_defdest_'.$i} =~ s{^\s+|\s+$}{}g; + $env{'form.ltitools_defdelay_'.$i} =~ s{^\s+|\s+$}{}g; + if ($env{'form.ltitools_defdest_'.$i} =~ m{^(https?\://|/)}) { + $ltitools{$itemid}{'defdest'} = $env{'form.ltitools_defdest_'.$i}; + if ($values->{$itemid}{'defdest'} ne $ltitools{$itemid}{'defdest'}) { + $haschanges{$itemid} = 1; + } + } elsif ($values->{$itemid}{'defdest'} ne '') { + $haschanges{$itemid} = 1; + } + if ($env{'form.ltitools_defdelay_'.$i} =~ /^(\d+\.?\d*)$/) { + $ltitools{$itemid}{'defdelay'} = $1; + if ($values->{$itemid}{'defdelay'} ne $ltitools{$itemid}{'defdelay'}) { + $haschanges{$itemid} = 1; + } + } elsif ($values->{$itemid} =~ /^(\d+\.?\d*)$/) { + $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*$/) { @@ -3341,11 +3386,39 @@ sub store_ltitools { $output .= ' '.&mt('None'); } $output .= ''; - foreach my $item ('passback','roster') { - $output .= '