Diff for /loncom/interface/courseprefs.pm between versions 1.133 and 1.136

version 1.133, 2025/01/07 16:19:19 version 1.136, 2025/06/14 02:50:25
Line 1941  sub get_credentials { Line 1941  sub get_credentials {
                         my $privkey = $privhash{'key'};                          my $privkey = $privhash{'key'};
                         $privnum = $privhash{'version'};                          $privnum = $privhash{'version'};
                         if (($privnum) && ($privkey ne '')) {                          if (($privnum) && ($privkey ne '')) {
                             $cipher = Crypt::CBC->new({'key'     => $privkey,                              $cipher = Crypt::CBC->new(-pass   => $privkey,
                                                        'cipher'  => 'DES'});                                                        -cipher => 'Crypt::DES');
                         }                          }
                     }                      }
                 }                  }
Line 2026  sub process_ltitools { Line 2026  sub process_ltitools {
             } else {              } else {
                 $ltitools{$newid}{'display'}{'target'} = 'iframe';                  $ltitools{$newid}{'display'}{'target'} = 'iframe';
             }              }
             foreach my $item ('passback','roster') {              foreach my $item ('desturl','returnurl','passback','roster') {
                 if ($env{'form.ltitools_'.$item.'_add'}) {                  if ($env{'form.ltitools_'.$item.'_add'}) {
                     $ltitools{$newid}{$item} = 1;                      $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'};                          my $lifetime = $env{'form.ltitools_'.$item.'valid_add'};
                         $lifetime =~ s/^\s+|\s+$//g;                          $lifetime =~ s/^\s+|\s+$//g;
                         if ($lifetime =~ /^\d+\.?\d*$/) {                          if ($lifetime =~ /^\d+\.?\d*$/) {
Line 2213  sub process_ltitools { Line 2227  sub process_ltitools {
                     } else {                      } else {
                         $haschanges{$itemid} = 1;                          $haschanges{$itemid} = 1;
                     }                      }
                     foreach my $extra ('passback','roster') {                      foreach my $extra ('desturl','returnurl','passback','roster') {
                         if ($env{'form.ltitools_'.$extra.'_'.$i}) {                          if ($env{'form.ltitools_'.$extra.'_'.$i}) {
                             $ltitools{$itemid}{$extra} = 1;                              $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};                                  my $lifetime = $env{'form.ltitools_'.$extra.'valid_'.$i};
                                 $lifetime =~ s/^\s+|\s+$//g;                                  $lifetime =~ s/^\s+|\s+$//g;
                                 if ($lifetime =~ /^\d+\.?\d*$/) {                                  if ($lifetime =~ /^\d+\.?\d*$/) {
Line 3341  sub store_ltitools { Line 3386  sub store_ltitools {
                         $output .= ' '.&mt('None');                          $output .= ' '.&mt('None');
                     }                      }
                     $output .= '</li>';                      $output .= '</li>';
                     foreach my $item ('passback','roster') {                      foreach my $item ('desturl','returnurl','passback','roster') {
                         $output .= '<li>'.$lt{$item}.'&nbsp;';                          $output .= '<li>'.$lt{$item};
                         if ($changes->{$itemid}{$item}) {                          if ($changes->{$itemid}{$item}) {
                             $output .= &mt('Yes');                              if ($item eq 'desturl') {
                             if ($changes->{$itemid}{$item.'valid'}) {                                  $output .= ':';
                               }
                               $output .= '&nbsp;'.&mt('Yes');
                               if (($item eq 'returnurl') || ($item eq 'desturl')) {
                                   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 .= ' ]';
                                   }
                                   if ($item eq 'desturl') {
                                       $output .=  '</li><li>'.&mt('Default destination').': ';
                                       if ($changes->{$itemid}{'defdest'} ne '') {
                                           $output .= $changes->{$itemid}{'defdest'}.
                                                      '</li><li>'.&mt('Default delay between login and redirect').': ';
                                           if ($changes->{$itemid}{'defdelay'} ne '') {
                                               $output .= $changes->{$itemid}{'defdelay'}.' s';
                                           } else {
                                               $output .= &mt('None set');
                                           }
                                           $output .= '</li>';
                                       } else {
                                           $output .= &mt('None').'</li>';
                                       }
                                   }
                               } elsif ($changes->{$itemid}{$item.'valid'}) {
                                 if ($item eq 'passback') {                                  if ($item eq 'passback') {
                                     $output .= ' '.&mt('valid for at least [quant,_1,day] after launch',                                      $output .= ' '.&mt('valid for at least [quant,_1,day] after launch',
                                                        $changes->{$itemid}{$item.'valid'});                                                         $changes->{$itemid}{$item.'valid'});
Line 3354  sub store_ltitools { Line 3427  sub store_ltitools {
                                                        $changes->{$itemid}{$item.'valid'});                                                         $changes->{$itemid}{$item.'valid'});
                                 }                                  }
                             }                              }
                               unless ($item eq 'desturl') {
                                   $output .= '</li>';
                               }
                         } else {                          } else {
                             $output .= &mt('No');                              $output .= '&nbsp;'.&mt('No').'</li>';
                         }                          }
                         $output .= '</li>';  
                     }                      }
                     if (ref($changes->{$itemid}{'display'}) eq 'HASH') {                      if (ref($changes->{$itemid}{'display'}) eq 'HASH') {
                         my $displaylist;                          my $displaylist;
Line 6627  sub print_ltitools { Line 6702  sub print_ltitools {
                           '<div class="LC_left_float">'.$lt{'linktext'}.'<br />'.                            '<div class="LC_left_float">'.$lt{'linktext'}.'<br />'.
                           '<input type="text" name="ltitools_linktext_'.$i.'" size="25" value="'.$currdisp{'linktext'}.'" /></div>'.                            '<input type="text" name="ltitools_linktext_'.$i.'" size="25" value="'.$currdisp{'linktext'}.'" /></div>'.
                           '<div class="LC_left_float">'.$lt{'explanation'}.'<br />'.                            '<div class="LC_left_float">'.$lt{'explanation'}.'<br />'.
                           '<textarea name="ltitools_explanation_'.$i.'" rows="5" cols="40">'.$currdisp{'explanation'}.                            '<textarea name="ltitools_explanation_'.$i.'" rows="5" cols="30">'.$currdisp{'explanation'}.
                           '</textarea></div><div style=""></div><br />';                            '</textarea></div><div style=""></div><br />';
             my %units = (              my %units = (
                           'passback' => 'days',                            'passback' => 'days',
                           'roster'   => 'seconds',                            '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 ('desturl','returnurl','passback','roster') {
                 my $validsty = 'none';                  my $validsty = 'none';
                 my $currvalid;                  my $currvalid;
                 my $checkedon = '';                  my $checkedon = '';
                 my $checkedoff = ' checked="checked"';                  my $checkedoff = ' checked="checked"';
                   my $crscheckedon = '';
                   my $crscheckedoff = ' checked="checked"';
                   my ($defdest,$defdelay);
                 if ($settings->{$item}->{$extra}) {                  if ($settings->{$item}->{$extra}) {
                     $checkedon = $checkedoff;                      $checkedon = $checkedoff;
                     $checkedoff = '';                      $checkedoff = '';
                     $validsty = 'inline-block';                      $validsty = 'inline-block';
                     if ($settings->{$item}->{$extra.'valid'} =~ /^\d+\.?\d*$/) {                      if (($extra eq 'returnurl') || ($extra eq 'desturl')) {
                           if ($courseconfig{$extra}) {
                               $crscheckedon = ' checked="checked"';
                               $crscheckedoff = '';
                           }
                           if ($extra eq 'desturl') {
                               $defdest = $settings->{$item}->{'defdest'};
                               $defdelay = $settings->{$item}->{'defdelay'};  
                           }
                       } elsif ($settings->{$item}->{$extra.'valid'} =~ /^\d+\.?\d*$/) {
                         $currvalid = $settings->{$item}->{$extra.'valid'};                          $currvalid = $settings->{$item}->{$extra.'valid'};
                     }                      }
                 }                  }
Line 6651  sub print_ltitools { Line 6744  sub print_ltitools {
                               '<label><input type="radio" name="ltitools_'.$extra.'_'.$i.'" value="0"'.$checkedoff.$onclick.' />'.                                '<label><input type="radio" name="ltitools_'.$extra.'_'.$i.'" value="0"'.$checkedoff.$onclick.' />'.
                               &mt('No').'</label>'.('&nbsp;'x2).                                &mt('No').'</label>'.('&nbsp;'x2).
                               '<label><input type="radio" name="ltitools_'.$extra.'_'.$i.'" value="1"'.$checkedon.$onclick.' />'.                                '<label><input type="radio" name="ltitools_'.$extra.'_'.$i.'" value="1"'.$checkedon.$onclick.' />'.
                               &mt('Yes').'</label></span></div>'.                                &mt('Yes').'</label></span></div>';
                               '<div class="LC_floatleft" style="display:'.$validsty.';" id="ltitools_'.$extra.'time_'.$i.'">'.                  if (($extra eq 'returnurl') || ($extra eq 'desturl')) {
                               '<span class="LC_nobreak">'.                      $datatable .= '<div class="LC_floatleft" style="display:'.$validsty.';" id="ltitools_course'.$extra.'_'.$i.'">'.
                               &mt("until at least [_1] $units{$extra} after launch",                                    '<span class="LC_nobreak"> -- '.&mt('configurable in course').':&nbsp;'.
                                   '<input type="text" name="ltitools_'.$extra.'valid_'.$i.'" value="'.$currvalid.'" />').                                    '<label><input type="radio" name="ltitools_crs'.$extra.'_'.$i.'" value="0"'.$crscheckedoff.' />'.
                               '</span></div><div style="padding:0;clear:both;margin:0;border:0"></div>';                                    &mt('No').'</label>'.('&nbsp;'x2).
                                     '<label><input type="radio" name="ltitools_crs'.$extra.'_'.$i.'" value="1"'.$crscheckedon.' />'.
                                     &mt('Yes').'</label>';
                   } else {
                       $datatable .= '<div class="LC_floatleft" style="display:'.$validsty.';" id="ltitools_'.$extra.'time_'.$i.'">'.
                                     '<span class="LC_nobreak">'.
                                     &mt("until at least [_1] $units{$extra} after launch",
                                         '<input type="text" name="ltitools_'.$extra.'valid_'.$i.'" value="'.$currvalid.'" />');
                   }
                   $datatable .= '</span></div><div style="padding:0;clear:both;margin:0;border:0"></div>';
    if ($extra eq 'desturl') {
                       $datatable .= '<div style="display:'.$validsty.';" id="ltitools_default'.$extra.'_'.$i.'">'.
                                     '<span class="LC_nobreak"><label>'.&mt('Default destination URL').':'.
                                     '<input type="text" size="60" name="ltitools_defdest_'.$i.'" value="'.$defdest.'" />'.
                                     '</label><span><br /><span class="LC_nobreak"><label>'.
                                     &mt('Default delay between login and redirect').':'.
                                     '<input type="text" size="3" name="ltitools_defdelay_'.$i.'" value="'.$defdelay.'" />'.
                                     '(s)</label></span></div><br />';
                   }
             }              }
             $datatable .= '<span class="LC_nobreak">'.$lt{'icon'}.':&nbsp;';              $datatable .= '<span class="LC_nobreak">'.$lt{'icon'}.':&nbsp;';
             if ($imgsrc) {              if ($imgsrc) {
Line 6742  sub print_ltitools { Line 6853  sub print_ltitools {
                 }                  }
                 $datatable .= '</select></td>';                  $datatable .= '</select></td>';
             }              }
             $datatable .= '</tr></table></fieldset>';              $datatable .= '</tr></table></fieldset>'."\n".
             my %courseconfig;                            '<fieldset><legend>';
             if (ref($settings->{$item}) eq 'HASH') {  
                 if (ref($settings->{$item}->{'crsconf'}) eq 'HASH') {  
                     %courseconfig = %{$settings->{$item}->{'crsconf'}};  
                 }  
             }  
             $datatable .= '<fieldset><legend>';  
             if ($context eq 'domain') {              if ($context eq 'domain') {
                 $datatable .= &mt('Configurable in course');                  $datatable .= &mt('Configurable in course');
             } else {              } else {
Line 6776  sub print_ltitools { Line 6881  sub print_ltitools {
                                       '<label><input type="checkbox" name="ltitools_customdel_'.$i.'" value="'.                                        '<label><input type="checkbox" name="ltitools_customdel_'.$i.'" value="'.
                                       $key.'" />'.&mt('Delete').'</label></span></td><td>'.$key.'</td>'.                                        $key.'" />'.&mt('Delete').'</label></span></td><td>'.$key.'</td>'.
                                       '<td><input type="text" name="ltitools_customval_'.$key.'_'.$i.'"'.                                        '<td><input type="text" name="ltitools_customval_'.$key.'_'.$i.'"'.
                                       ' value="'.$custom{$key}.'" /></td></tr>';                                        ' value="'.$custom{$key}.'" size="35" /></td></tr>';
                     }                      }
                 }                  }
             }              }
             $datatable .= '<tr><td><span class="LC_nobreak">'.              $datatable .= '<tr><td><span class="LC_nobreak">'.
                           '<label><input type="checkbox" name="ltitools_customadd" value="'.$i.'" />'.                            '<label><input type="checkbox" name="ltitools_customadd" value="'.$i.'" />'.
                           &mt('Add').'</label></span></td><td><input type="text" name="ltitools_custom_name_'.$i.'" />'.                            &mt('Add').'</label></span></td><td><input type="text" name="ltitools_custom_name_'.$i.'" />'.
                           '</td><td><input type="text" name="ltitools_custom_value_'.$i.'" /></td></tr>';                            '</td><td><input type="text" name="ltitools_custom_value_'.$i.'" size="35" /></td></tr>';
             $datatable .= '</table></fieldset></td></tr>'."\n";              $datatable .= '</table></fieldset></td></tr>'."\n";
             $itemcount ++;              $itemcount ++;
         }          }
Line 6857  sub print_ltitools { Line 6962  sub print_ltitools {
                      'passback' => '7',                       'passback' => '7',
                      'roster'   => '300',                       'roster'   => '300',
                    );                     );
     foreach my $extra ('passback','roster') {      foreach my $extra ('desturl','returnurl','passback','roster') {
         my $onclick = ' onclick="toggleLTITools(this.form,'."'$extra','add'".');"';          my $onclick = ' onclick="toggleLTITools(this.form,'."'$extra','add'".');"';
         $datatable .= '<div class="LC_floatleft"><span class="LC_nobreak">'.$lt{$extra}.'&nbsp;'.          $datatable .= '<div class="LC_floatleft"><span class="LC_nobreak">'.$lt{$extra}.'&nbsp;'.
                       '<label><input type="radio" name="ltitools_'.$extra.'_add" value="0" checked="checked"'.$onclick.' />'.                        '<label><input type="radio" name="ltitools_'.$extra.'_add" value="0" checked="checked"'.$onclick.' />'.
                       &mt('No').'</label></span>'.('&nbsp;'x2).'<span class="LC_nobreak">'.                        &mt('No').'</label></span>'.('&nbsp;'x2).'<span class="LC_nobreak">'.
                       '<label><input type="radio" name="ltitools_'.$extra.'_add" value="1"'.$onclick.' />'.                        '<label><input type="radio" name="ltitools_'.$extra.'_add" value="1"'.$onclick.' />'.
                       &mt('Yes').'</label></span></div>'.                        &mt('Yes').'</label></span></div>';
                       '<div class="LC_floatleft" style="display:none;" id="ltitools_'.$extra.'time_add">'.          if (($extra eq 'returnurl') || ($extra eq 'desturl')) {
                       '<span class="LC_nobreak">'.              $datatable .= '<div class="LC_floatleft" style="display:none;" id="ltitools_course'.$extra.'_add">'.
                       &mt("until at least [_1] $units{$extra} after launch",                            '<span class="LC_nobreak"> -- '.&mt('configurable in course').':&nbsp;'.
                           '<input type="text" name="ltitools_'.$extra.'valid_add" value="'.$defaulttimes{$extra}.'" />').                            '<label><input type="radio" name="ltitools_crs'.$extra.'_add" value="0" checked="checked" />'.
                       '</span></div><div style="padding:0;clear:both;margin:0;border:0"></div>';                            &mt('No').'</label>'.('&nbsp;'x2).
                             '<label><input type="radio" name="ltitools_crs'.$extra.'_add" value="1" />'.
                             &mt('Yes').'</label>';
           } else {
               $datatable .= '<div class="LC_floatleft" style="display:none;" id="ltitools_'.$extra.'time_add">'.
                             '<span class="LC_nobreak">'.
                             &mt("until at least [_1] $units{$extra} after launch",
                                 '<input type="text" name="ltitools_'.$extra.'valid_add" value="'.$defaulttimes{$extra}.'" />');
           }
           $datatable .= '</span></div><div style="padding:0;clear:both;margin:0;border:0"></div>';
           if ($extra eq 'desturl') {
               $datatable .= '<div style="display:none;" id="ltitools_default'.$extra.'_add">'.
                             '<span class="LC_nobreak"><label>'.&mt('Default destination URL').':'.
                             '<input type="text" size="50" name="ltitools_defdest_add" value="" />'.
                             '</label></span><br /><span class="LC_nobreak"><label>'.
                             &mt('Default delay between login and redirect').':'.
                             '<input type="text" size="3" name="ltitools_defdelay_add" value="1" />'.
                             '(s)</label></span></div><br />';
           }
     }      }
     $datatable .= '<span class="LC_nobreak">'.$lt{'icon'}.':&nbsp;'.      $datatable .= '<span class="LC_nobreak">'.$lt{'icon'}.':&nbsp;'.
                   '('.&mt('if larger than 21x21 pixels, image will be scaled').')&nbsp;';                    '('.&mt('if larger than 21x21 pixels, image will be scaled').')&nbsp;';
Line 6965  sub ltitools_names { Line 7088  sub ltitools_names {
                                           'explanation'    => 'Default Explanation',                                            'explanation'    => 'Default Explanation',
                                           'passback'       => 'Tool can return grades:',                                            'passback'       => 'Tool can return grades:',
                                           'roster'         => 'Tool can retrieve roster:',                                            'roster'         => 'Tool can retrieve roster:',
                                             'returnurl'      => 'Return LONCAPA URL sent on launch:',
                                           'crstarget'      => 'Display target',                                            'crstarget'      => 'Display target',
                                           'crslabel'       => 'Course label',                                            'crslabel'       => 'Course label',
                                           'crstitle'       => 'Course title',                                            'crstitle'       => 'Course title',
                                           'crslinktext'    => 'Link Text',                                            'crslinktext'    => 'Link Text',
                                           'crsexplanation' => 'Explanation',                                            'crsexplanation' => 'Explanation',
                                           'crsappend'      => 'Provider URL',                                            'crsappend'      => 'Provider URL',
                                             'desturl'        => 'Destination URL different from Provider URL',
                                             'delay'          => 'Second(s) delay before redirect to destination URL',
                                         );                                          );
     return %lt;      return %lt;
 }  }

Removed from v.1.133  
changed lines
  Added in v.1.136


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>