Diff for /loncom/interface/courseprefs.pm between versions 1.98 and 1.99

version 1.98, 2022/02/01 18:23:24 version 1.99, 2022/02/01 23:13:19
Line 365  sub handler { Line 365  sub handler {
     }      }
   
     my %values=&Apache::lonnet::dump('environment',$cdom,$cnum);      my %values=&Apache::lonnet::dump('environment',$cdom,$cnum);
     my %courselti=&Apache::lonnet::dump('lti',$cdom,$cnum,undef,undef,undef,1);      my %lti=&Apache::lonnet::dump('lti',$cdom,$cnum,undef,undef,undef,1);
     if ($courselti{'lock'}) {      my %ltienc = &Apache::lonnet::dump('nohist_ltienc',$cdom,$cnum,undef,undef,undef,1);
         delete($courselti{'lock'});      foreach my $id (keys(%lti)) {
           if (ref($lti{$id}) eq 'HASH') {
               if (ref($ltienc{$id}) eq 'HASH') {
                   $values{'linkprotection'}{$id} = { %{$lti{$id}}, %{$ltienc{$id}} };
               } else {
                   $values{'linkprotection'}{$id} = $lti{$id};
               }
           }
           unless ($phase eq 'process') {
               if (ref($values{'linkprotection'}{$id}) eq 'HASH') {
                   delete($values{'linkprotection'}{$id}{'secret'});
               }
           }
       }
       if ($lti{'lock'}) {
           delete($lti{'lock'});
     }      }
     $values{'linkprotection'} = \%courselti;  
     my @prefs_order = ('courseinfo','localization','feedback','discussion',      my @prefs_order = ('courseinfo','localization','feedback','discussion',
                        'classlists','appearance','grading','printouts',                         'classlists','appearance','grading','printouts',
                        'menuitems','linkprotection','spreadsheet','bridgetasks',                         'menuitems','linkprotection','spreadsheet','bridgetasks',
Line 596  sub handler { Line 610  sub handler {
         my $jscript = &get_jscript($cid,$cdom,$phase,$crstype,\%values,$noedit);          my $jscript = &get_jscript($cid,$cdom,$phase,$crstype,\%values,$noedit);
         my @allitems = &get_allitems(%prefs);          my @allitems = &get_allitems(%prefs);
         &Apache::lonconfigsettings::display_settings($r,$cdom,$phase,$context,          &Apache::lonconfigsettings::display_settings($r,$cdom,$phase,$context,
             \@prefs_order,\%prefs,\%values,undef,$jscript,\@allitems,$crstype,              \@prefs_order,\%prefs,\%values,$cnum,$jscript,\@allitems,$crstype,
             'coursepref',$parm_permission);              'coursepref',$parm_permission);
     } else {      } else {
         &Apache::lonconfigsettings::display_choices($r,$phase,$context,          &Apache::lonconfigsettings::display_choices($r,$phase,$context,
Line 649  sub get_allitems { Line 663  sub get_allitems {
 }  }
   
 sub print_config_box {  sub print_config_box {
     my ($r,$cdom,$phase,$action,$item,$settings,$allitems,$crstype,$parm_permission) = @_;      my ($r,$cdom,$cnum,$phase,$action,$item,$settings,$allitems,$crstype,$parm_permission) = @_;
     my $ordered = $item->{'ordered'};      my $ordered = $item->{'ordered'};
     my $itemtext = $item->{'itemtext'};      my $itemtext = $item->{'itemtext'};
     my $noedit;      my $noedit;
Line 780  sub print_config_box { Line 794  sub print_config_box {
     } elsif ($action eq 'menuitems') {      } elsif ($action eq 'menuitems') {
         $output .= &print_menuitems('bottom',$cdom,$settings,$itemtext,\$rowtotal,$crstype,$noedit);          $output .= &print_menuitems('bottom',$cdom,$settings,$itemtext,\$rowtotal,$crstype,$noedit);
     } elsif ($action eq 'linkprotection') {      } elsif ($action eq 'linkprotection') {
         $output .= &print_linkprotection($cdom,$settings,\$rowtotal,$crstype,$noedit);          $output .= &print_linkprotection($cdom,$cnum,$settings,\$rowtotal,$crstype,$noedit);
     } elsif ($action eq 'other') {      } elsif ($action eq 'other') {
         $output .= &print_other($cdom,$settings,$allitems,\$rowtotal,$crstype,$noedit);          $output .= &print_other($cdom,$settings,$allitems,\$rowtotal,$crstype,$noedit);
     }      }
Line 794  sub print_config_box { Line 808  sub print_config_box {
   
 sub process_changes {  sub process_changes {
     my ($cdom,$cnum,$action,$values,$item,$changes,$allitems,$disallowed,$crstype) = @_;      my ($cdom,$cnum,$action,$values,$item,$changes,$allitems,$disallowed,$crstype) = @_;
     my (%newvalues,%courselti,$errors);      my (%newvalues,%lti,%ltienc,$errors);
     if (ref($item) eq 'HASH') {      if (ref($item) eq 'HASH') {
         if (ref($changes) eq 'HASH') {          if (ref($changes) eq 'HASH') {
             my @ordered;              my @ordered;
Line 812  sub process_changes { Line 826  sub process_changes {
                     }                      }
                 }                  }
             } elsif ($action eq 'linkprotection') {              } elsif ($action eq 'linkprotection') {
                 if (ref($values->{'linkprotection'}) eq 'HASH') {                  if (ref($values->{$action}) eq 'HASH') {
                     foreach my $id (keys(%{$values->{'linkprotection'}})) {                      foreach my $id (keys(%{$values->{$action}})) {
                         if ($id =~ /^\d+$/) {                          if ($id =~ /^\d+$/) {
                             push(@ordered,$id);                              push(@ordered,$id);
                             unless (ref($values->{'linkprotection'}->{$id}) eq 'HASH') {                              unless (ref($values->{$action}->{$id}) eq 'HASH') {
                                 $courselti{$id} = '';                                  $lti{$id} = '';
                             }                              }
                         }                          }
                     }                      }
Line 965  sub process_changes { Line 979  sub process_changes {
                     }                      }
                 } elsif ($action eq 'linkprotection') {                  } elsif ($action eq 'linkprotection') {
                     my %menutitles = &ltimenu_titles();                      my %menutitles = &ltimenu_titles();
                       my $switchserver = &check_switchserver($cdom,$cnum);
                     my (@items,%deletions,%itemids,%haschanges);                      my (@items,%deletions,%itemids,%haschanges);
                     if ($env{'form.linkprot_add'}) {                      if ($env{'form.linkprot_add'}) {
                         my $name = $env{'form.linkprot_name_add'};                          my $name = $env{'form.linkprot_name_add'};
Line 980  sub process_changes { Line 995  sub process_changes {
                                        '</span>';                                         '</span>';
                         }                          }
                     }                      }
                     if (ref($values->{'linkprotection'}) eq 'HASH') {                      if (ref($values->{$action}) eq 'HASH') {
                         my @todelete = &Apache::loncommon::get_env_multiple('form.linkprot_del');                          my @todelete = &Apache::loncommon::get_env_multiple('form.linkprot_del');
                         my $maxnum = $env{'form.linkprot_maxnum'};                          my $maxnum = $env{'form.linkprot_maxnum'};
                         for (my $i=0; $i<=$maxnum; $i++) {                          for (my $i=0; $i<=$maxnum; $i++) {
                             my $itemid = $env{'form.linkprot_id_'.$i};                              my $itemid = $env{'form.linkprot_id_'.$i};
                             $itemid =~ s/\D+//g;                              $itemid =~ s/\D+//g;
                             if ($itemid) {                              if ($itemid) {
                                 if (ref($values->{'linkprotection'}->{$itemid}) eq 'HASH') {                                  if (ref($values->{$action}->{$itemid}) eq 'HASH') {
                                     push(@items,$i);                                      push(@items,$i);
                                     $itemids{$i} = $itemid;                                      $itemids{$i} = $itemid;
                                     if ((@todelete > 0) && (grep(/^$i$/,@todelete))) {                                      if ((@todelete > 0) && (grep(/^$i$/,@todelete))) {
                                         $deletions{$itemid} = $values->{'linkprotection'}->{$itemid}->{'name'};                                          $deletions{$itemid} = $values->{$action}->{$itemid}->{'name'};
                                     }                                      }
                                 }                                  }
                             }                              }
Line 1002  sub process_changes { Line 1017  sub process_changes {
                         my $itemid = $itemids{$idx};                          my $itemid = $itemids{$idx};
                         next unless ($itemid);                          next unless ($itemid);
                         if (exists($deletions{$itemid})) {                          if (exists($deletions{$itemid})) {
                             $courselti{$itemid} = $deletions{$itemid};                              $lti{$itemid} = $deletions{$itemid};
                             $haschanges{$itemid} = 1;                              $haschanges{$itemid} = 1;
                             next;                              next;
                         }                          }
                         my %current;                          my %current;
                         if (ref($values->{'linkprotection'}) eq 'HASH') {                          if (ref($values->{$action}) eq 'HASH') {
                             if (ref($values->{'linkprotection'}->{$itemid}) eq 'HASH') {                              if (ref($values->{$action}->{$itemid}) eq 'HASH') {
                                 foreach my $key (keys(%{$values->{'linkprotection'}->{$itemid}})) {                                  foreach my $key (keys(%{$values->{$action}->{$itemid}})) {
                                     $current{$key} = $values->{'linkprotection'}->{$itemid}->{$key};                                      $current{$key} = $values->{$action}->{$itemid}->{$key};
                                 }                                  }
                             }                              }
                         }                          }
                         foreach my $inner ('name','key','secret','lifetime','version') {                          foreach my $inner ('name','lifetime','version') {
                             my $formitem = 'form.linkprot_'.$inner.'_'.$idx;                              my $formitem = 'form.linkprot_'.$inner.'_'.$idx;
                             $env{$formitem} =~ s/(`)/'/g;                              $env{$formitem} =~ s/(`)/'/g;
                             if ($inner eq 'lifetime') {                              if ($inner eq 'lifetime') {
Line 1026  sub process_changes { Line 1041  sub process_changes {
                                 }                                  }
                             }                              }
                             if ($env{$formitem} ne '') {                              if ($env{$formitem} ne '') {
                                 $courselti{$itemid}{$inner} = $env{$formitem};                                  $lti{$itemid}{$inner} = $env{$formitem};
                               }
                           }
                           unless ($switchserver) {
                               my $keyitem = 'form.linkprot_key_'.$idx;
                               $env{$keyitem} =~ s/(`)/'/g;
                               unless ($idx eq 'add') {
                                   if ($current{'key'} ne $env{$keyitem}) {
                                       $haschanges{$itemid} = 1;
                                   }
                               }
                               if ($env{$keyitem} ne '') {
                                   $lti{$itemid}{'key'} = $env{$keyitem};
                               }
                               my $secretitem = 'form.linkprot_secret_'.$idx;
                               $env{$secretitem} =~ s/(`)/'/g;
                               if ($current{'usable'}) {
                                   if ($env{'form.linkprot_changesecret_'.$idx}) {
                                       if ($env{$secretitem} ne '') {
                                           $lti{$itemid}{'secret'} = $env{$secretitem};
                                           $haschanges{$itemid} = 1;
                                       }
                                   } else {
                                       $lti{$itemid}{'secret'} = $current{'secret'};
                                   }
                               } elsif ($env{$secretitem} ne '') {
                                   $lti{$itemid}{'secret'} = $env{$secretitem};
                                   $haschanges{$itemid} = 1;
                             }                              }
                         }                          }
                     }                      }
                     if (keys(%haschanges)) {                      if (keys(%haschanges)) {
                         foreach my $entry (keys(%haschanges)) {                          foreach my $entry (keys(%haschanges)) {
                             $changes->{$entry} = $courselti{$entry};                              $changes->{$entry} = $lti{$entry};
                         }                          }
                     }                      }
                 } else {                  } else {
Line 1655  sub store_changes { Line 1697  sub store_changes {
         if (grep(/^\Q$item\E$/,@{$actions})) {          if (grep(/^\Q$item\E$/,@{$actions})) {
             $output .= '<h3>'.&mt($prefs->{$item}{'text'}).'</h3>';              $output .= '<h3>'.&mt($prefs->{$item}{'text'}).'</h3>';
             if (ref($changes->{$item}) eq 'HASH') {              if (ref($changes->{$item}) eq 'HASH') {
                 if ((keys(%{$changes->{$item}}) > 0) || ($item eq 'linkprotection')) {                  if (keys(%{$changes->{$item}}) > 0) {
                     $output .= &mt('Changes made:').'<ul style="list-style:none;">';                      $output .= &mt('Changes made:').'<ul style="list-style:none;">';
                     if ($item eq 'other') {                      if ($item eq 'other') {
                         foreach my $key (sort(keys(%{$changes->{$item}}))) {                          foreach my $key (sort(keys(%{$changes->{$item}}))) {
Line 1669  sub store_changes { Line 1711  sub store_changes {
                             }                              }
                         }                          }
                     } elsif ($item eq 'linkprotection') {                      } elsif ($item eq 'linkprotection') {
                         if (&Apache::lonnet::put('lti',$changes->{'linkprotection'},$cdom,$cnum,1) eq 'ok') {                          my (%ltienc,$lti_save_error);
                             my $hashid=$cdom.'_'.$cnum;                          if (ref($changes->{$item}) eq 'HASH') {
                             &Apache::lonnet::devalidate_cache_new('courselti',$hashid);                              foreach my $id (sort { $a <=> $b } keys(%{$changes->{$item}})) {
                             foreach my $itemid (sort { $a <=> $b } %{$changes->{'linkprotection'}}) {                                  if (ref($changes->{$item}->{$id}) eq 'HASH') {
                                 if (ref($changes->{'linkprotection'}->{$itemid}) eq 'HASH') {                                      if (exists($changes->{$item}->{$id}->{'key'})) {
                                     my %values = %{$changes->{'linkprotection'}->{$itemid}};                                          $ltienc{$id}{'key'} = $changes->{$item}->{$id}->{'key'};
                                     my %desc = &linkprot_names();                                          delete($changes->{$item}->{$id}->{'key'});
                                     my $display;                                      }
                                     foreach my $title ('name','lifetime','version','key','secret') {                                      if (exists($changes->{$item}->{$id}->{'secret'})) {
                                         if ($title eq 'secret') {                                          $ltienc{$id}{'secret'} = $changes->{$item}->{$id}->{'secret'};
                                             my $length = length($values{$title});                                          delete($changes->{$item}->{$id}->{'secret'});
                                             $display .= $desc{$title}.': '.('*' x $length);                                      } elsif (ref($oldlinkprot{$id}) eq 'HASH') {
                                         } elsif ($title eq 'version') {                                          if (exists($oldlinkprot{$id}{'usable'})) {
                                             if ($values{$title} eq 'LTI-1p0') {                                              $changes->{$item}->{$id}->{'usable'} = 1;
                                                 $display .= $desc{$title}.': 1.1, ';                                          }
                                       }
                                   }
                               }
                           }
                           if (keys(%ltienc) > 0) {
                               if (&Apache::lonnet::put('nohist_ltienc',\%ltienc,$cdom,$cnum,1) eq 'ok') {
                                   foreach my $id (keys(%ltienc)) {
                                       if (exists($ltienc{$id}{'secret'})) {
                                           $changes->{$item}->{$id}->{'usable'} = 1;
                                       }
                                   }
                               } else {
                                   $lti_save_error = 1;
                               }
                           }
                           unless ($lti_save_error) {
                               if (&Apache::lonnet::put('lti',$changes->{$item},$cdom,$cnum,1) eq 'ok') {
                                   my $hashid=$cdom.'_'.$cnum;
                                   &Apache::lonnet::devalidate_cache_new('courselti',$hashid);
                                   $chome = &Apache::lonnet::homeserver($cnum,$cdom);
                                   unless (($chome eq 'no_host') || ($chome eq '')) {
                                       my @ids=&Apache::lonnet::current_machine_ids();
                                       unless (grep(/^\Q$chome\E$/,@ids)) {
                                           &Apache::lonnet::devalidate_cache_new('courseltienc',$hashid);
                                       }
                                   }
                                   foreach my $id (sort { $a <=> $b } %{$changes->{$item}}) {
                                       if (ref($changes->{$item}->{$id}) eq 'HASH') {
                                           my %values = %{$changes->{$item}->{$id}};
                                           my %desc = &linkprot_names();
                                           my $display;
                                           foreach my $title ('name','lifetime','version','key','secret') {
                                               if (($title eq 'key') || ($title eq 'secret')) {
                                                   if (ref($ltienc{$id}) eq 'HASH') {
                                                       if (exists($ltienc{$id}{$title})) {
                                                           if ($title eq 'secret') {
                                                               my $length = length($ltienc{$id}{$title});
                                                               $display .= $desc{$title}.': '.('*' x $length);
                                                           } else {
                                                               $display .= $desc{$title}.': '.$ltienc{$id}{$title}.', ';
                                                           }
                                                       }
                                                   }
                                               } elsif ($title eq 'version') {
                                                   if ($values{$title} eq 'LTI-1p0') {
                                                       $display .= $desc{$title}.': 1.1, ';
                                                   }
                                               } else {
                                                   $display .= $desc{$title}.': '.$values{$title}.', ';
                                             }                                              }
                                         } else {  
                                             $display .= $desc{$title}.': '.$values{$title}.', ';  
                                         }                                          }
                                           $display =~ s/, $//;
                                           $output .= '<li>'.&Apache::lonhtmlcommon::confirm_success(&mt('[_1] set to [_2]','<i>'.$id.'</i>',
                                                      "'$display'")).'</li>';
                                       } elsif (ref($oldlinkprot{$id}) eq 'HASH') {
                                           my $oldname = $oldlinkprot{$id}{'name'};
                                           $output .= '<li>'.&Apache::lonhtmlcommon::confirm_success(&mt('Deleted setting for [_1]','<i>'."$id ($oldname)".'</i>')).'</li>';
                                     }                                      }
                                     $output .= '<li>'.&Apache::lonhtmlcommon::confirm_success(&mt('[_1] set to [_2]','<i>'.$itemid.'</i>',  
                                                "'$display'")).'</li>';  
                                 } elsif (ref($oldlinkprot{$itemid}) eq 'HASH') {  
                                     my $oldname = $oldlinkprot{$itemid}{'name'};  
                                     $output .= '<li>'.&Apache::lonhtmlcommon::confirm_success(&mt('Deleted setting for [_1]','<i>'."$itemid ($oldname)".'</i>')).'</li>';  
                                 }                                  }
                               } else {
                                   $lti_save_error = 1;
                             }                              }
                         } else {                          }
                           unless ($lti_save_error) {
                               my @deletions;
                               foreach my $id (sort { $a <=> $b } keys(%{$changes->{$item}})) {
                                   unless (ref($changes->{$item}->{$id}) eq 'HASH') {
                                       push (@deletions,$id);
                                   }
                               }
                               if (@deletions) {
                                   &Apache::lonnet::del('nohist_ltienc',\@deletions,$cdom,$cnum);
                               }
                           }
                           if ($lti_save_error) {
                             $output .= '<li>'.                              $output .= '<li>'.
                                        '<span class="LC_error">'.                                         '<span class="LC_error">'.
                                        &mt('An error occurred when saving changes to link protection settings, which remain unchanged.').                                         &mt('An error occurred when saving changes to link protection settings, which remain unchanged.').
Line 2375  function toggleAddmenucoll() { Line 2479  function toggleAddmenucoll() {
 }  }
 ENDSCRIPT  ENDSCRIPT
     }      }
       my $linkprotector_js = <<"ENDSCRIPT";
   function toggleLTI(form,num,item) {
       var radioname = '';
       var currdivid = '';
       var newdivid = '';
       if ((document.getElementById('linkprot_divcurr'+item+'_'+num)) &&
           (document.getElementById('linkprot_divchg'+item+'_'+num))) {
           currdivid = document.getElementById('linkprot_divcurr'+item+'_'+num);
           newdivid = document.getElementById('linkprot_divchg'+item+'_'+num);
           radioname = form.elements['linkprot_change'+item+'_'+num];
           if (radioname) {
               if (radioname.length > 0) {
                   var setvis;
                   for (var i=0; i<radioname.length; i++) {
                       if (radioname[i].checked == true) {
                           if (radioname[i].value == 1) {
                               newdivid.style.display = 'inline-block';
                               currdivid.style.display = 'none';
                               setvis = 1;
                           }
                           break;
                       }
                   }
                   if (!setvis) {
                       newdivid.style.display = 'none';
                       currdivid.style.display = 'inline-block';
                   }
               }
           }
       }
       return;
   }
   ENDSCRIPT
     $jscript = '<script type="text/javascript" language="Javascript">'."\n".      $jscript = '<script type="text/javascript" language="Javascript">'."\n".
                '// <![CDATA['."\n".                   '// <![CDATA['."\n".  
                $browse_js."\n".$categorize_js."\n".$loncaparev_js."\n".                 $browse_js."\n".$categorize_js."\n".$loncaparev_js."\n".
                $cloners_js."\n".$instcode_js.                 $cloners_js."\n".$instcode_js.
                $syllabus_js."\n".$menuitems_js."\n".'//]]>'."\n".                 $syllabus_js."\n".$menuitems_js."\n".
                  $linkprotector_js."\n".'//]]>'."\n".
                '</script>'."\n".$stubrowse_js."\n";                 '</script>'."\n".$stubrowse_js."\n";
     return $jscript;      return $jscript;
 }  }
Line 5268  sub menucollections_display { Line 5406  sub menucollections_display {
 }  }
   
 sub print_linkprotection {  sub print_linkprotection {
     my ($cdom,$settings,$rowtotal,$crstype,$noedit) = @_;      my ($cdom,$cnum,$settings,$rowtotal,$crstype,$noedit) = @_;
     unless (ref($settings) eq 'HASH') {      unless (ref($settings) eq 'HASH') {
         return;          return;
     }      }
Line 5283  sub print_linkprotection { Line 5421  sub print_linkprotection {
     my %lt = &linkprot_names();      my %lt = &linkprot_names();
     my $itemcount = 0;      my $itemcount = 0;
   
       my $switchserver = &check_switchserver($cdom,$cnum);
   
     if (ref($settings->{'linkprotection'}) eq 'HASH') {      if (ref($settings->{'linkprotection'}) eq 'HASH') {
         if (keys(%{$settings->{'linkprotection'}})) {          if (keys(%{$settings->{'linkprotection'}})) {
             my @current = sort { $a <=> $b } keys(%{$settings->{'linkprotection'}});              my @current = sort { $a <=> $b } keys(%{$settings->{'linkprotection'}});
Line 5307  sub print_linkprotection { Line 5447  sub print_linkprotection {
                     '<td><span class="LC_nobreak">'.$lt{'name'}.                      '<td><span class="LC_nobreak">'.$lt{'name'}.
                     ':<input type="text" size="15" name="linkprot_name_'.$i.'" value="'.$values{'name'}.'" autocomplete="off"'.$disabled.' /></span> '.                      ':<input type="text" size="15" name="linkprot_name_'.$i.'" value="'.$values{'name'}.'" autocomplete="off"'.$disabled.' /></span> '.
                     ('&nbsp;'x2).                      ('&nbsp;'x2).
                     '<span class="LC_nobreak">'.$lt{'version'}.':<select name="linkprot_version_'.$i.'">'.                      '<span class="LC_nobreak">'.$lt{'version'}.':<select name="linkprot_version_'.$i.'"'.$disabled.'>'.
                     '<option value="LTI-1p0" '.$selected.'>1.1</option></select></span> '."\n".                      '<option value="LTI-1p0" '.$selected.'>1.1</option></select></span> '."\n".
                     ('&nbsp;'x2).                      ('&nbsp;'x2).
                     '<span class="LC_nobreak">'.$lt{'lifetime'}.':<input type="text" name="linkprot_lifetime_'.$i.'"'.                      '<span class="LC_nobreak">'.$lt{'lifetime'}.':<input type="text" name="linkprot_lifetime_'.$i.'"'.
                     'value="'.$values{'lifetime'}.'" size="3"'.$disabled.' /></span>'.                      'value="'.$values{'lifetime'}.'" size="3"'.$disabled.' /></span>'.
                     '<br /><br />'.                      '<br /><br />';
                     '<span class="LC_nobreak">'.$lt{'key'}.                  if ($values{'key'} ne '') {
                     ':<input type="text" size="25" name="linkprot_key_'.$i.'" value="'.$values{'key'}.'" autocomplete="off"'.$disabled.' /></span> '.                      $datatable .= '<span class="LC_nobreak">'.$lt{'key'};
                     ('&nbsp;'x2).                      if ($noedit) {
                     '<span class="LC_nobreak">'.$lt{'secret'}.':'.                          $datatable .= ': ['.&mt('not shown').']';
                     '<input type="password" size="20" name="linkprot_secret_'.$i.'" value="'.$values{'secret'}.'" autocomplete="off"'.$disabled.' />'.                      } elsif ($switchserver) {
                     '<label><input type="checkbox" name="visible" onclick="if (this.checked) { this.form.linkprot_secret_'.$i.'.type='."'text'".' } else { this.form.linkprot_secret_'.$i.'.type='."'password'".' }"'.$disabled.' />'.&mt('Visible input').'</label>'.                          $datatable .= ': ['.&mt('[_1] to view/edit',$switchserver).']';
                     '<input type="hidden" name="linkprot_id_'.$i.'" value="'.$num.'" /></span>'.                      } else {
                     '</td></tr>';                          $datatable .= ':<input type="text" size="25" name="linkprot_key_'.$i.'" value="'.$values{'key'}.'" autocomplete="off"'.$disabled.' />';
                       }
                       $datatable .= '</span> '.('&nbsp;'x2);
                   } elsif (!$switchserver) {
                       $datatable .= '<span class="LC_nobreak">'.$lt{'key'}.':'.
                                     '<input type="text" size="25" name="linkprot_key_'.$i.'" value="'.$values{'key'}.'" autocomplete="off"'.$disabled.' />'.
                                     '</span> '.('&nbsp;'x2);
                   }
                   if ($switchserver) {
                       if ($values{'usable'} ne '') {
                           $datatable .= '<div id="linkprot_divcurrsecret_'.$i.'" style="display:inline-block" /><span class="LC_nobreak">'.
                                         $lt{'secret'}.': ['.&mt('not shown').'] '.('&nbsp;'x2).'</span></div>'.
                                         '<span class="LC_nobreak">'.&mt('Change secret?').
                                         '<label><input type="radio" value="0" name="linkprot_changesecret_'.$i.'" onclick="javascript:toggleLTI(this.form,'."'$i','secret'".');" checked="checked"'.$disabled.' />'.&mt('No').'</label>'.
                                         ('&nbsp;'x2).
                                         '<label><input type="radio" value="1" name="linkprot_changesecret_'.$i.'" onclick="javascript:toggleLTI(this.form,'."'$i','secret'".');" '.$disabled.' />'.&mt('Yes').'</label>'.('&nbsp;'x2).
                                         '</span><div id="linkprot_divchgsecret_'.$i.'" style="display:none" />'.
                                         '<span class="LC_nobreak"> - '.&mt("submit from course's home server: [_1].",$switchserver).'</span>'.
                                         '</div>';
                       } elsif ($values{'key'} eq '') {
                           $datatable .= '<span class="LC_nobreak">'.&mt('Key and Secret are required').' - '.&mt("submit from course's home server: [_1].",$switchserver).'</span>'."\n";
                       } else {
                           $datatable .= '<span class="LC_nobreak">'.&mt('Secret required').' - '.&mt("submit from course's home server: [_1].",$switchserver).'</span>'."\n";
                       }
                   } else {
                       if ($values{'usable'} ne '') {
                           $datatable .= '<div id="linkprot_divcurrsecret_'.$i.'" style="display:inline-block" /><span class="LC_nobreak">'.
                                         $lt{'secret'}.': ['.&mt('not shown').'] '.('&nbsp;'x2).'</span></div>'.
                                         '<span class="LC_nobreak">'.&mt('Change?').
                                         '<label><input type="radio" value="0" name="linkprot_changesecret_'.$i.'" onclick="javascript:toggleLTI(this.form,'."'$i','secret'".');" checked="checked"'.$disabled.' />'.&mt('No').'</label>'.
                                         ('&nbsp;'x2).
                                         '<label><input type="radio" value="1" name="linkprot_changesecret_'.$i.'" onclick="javascript:toggleLTI(this.form,'."'$i','secret'".');"'.$disabled.' />'.&mt('Yes').
                                         '</label>&nbsp;&nbsp;</span><div id="linkprot_divchgsecret_'.$i.'" style="display:none" />'.
                                         '<span class="LC_nobreak">'.&mt('New Secret').':'.
                                         '<input type="password" size="20" name="linkprot_secret_'.$i.'" value="" autocomplete="off"'.$disabled.' />'.
                                         '<label><input type="checkbox" name="visible" onclick="if (this.checked) { this.form.linkprot_secret_'.$i.'.type='."'text'".' } else { this.form.linkprot_secret_'.$i.'.type='."'password'".' }"'.$disabled.' />'.&mt('Visible input').'</label>'.
                                         '<input type="hidden" name="linkprot_id_'.$i.'" value="'.$num.'" /></span></div>';
                       } else {
                           $datatable .=
                               '<span class="LC_nobreak">'.$lt{'secret'}.':'.
                               '<input type="password" size="20" name="linkprot_secret_'.$i.'" value="" autocomplete="off"'.$disabled.' />'.
                               '<label><input type="checkbox" name="visible" onclick="if (this.checked) { this.form.linkprot_secret_'.$i.'.type='."'text'".' } else { this.form.linkprot_secret_'.$i.'.type='."'password'".' }"'.$disabled.' />'.&mt('Visible input').'</label>'.
                               '<input type="hidden" name="linkprot_id_'.$i.'" value="'.$num.'" /></span>';
                       }
                   }
                   $datatable .= '</td></tr>';
                 $itemcount ++;                  $itemcount ++;
             }              }
         }          }
Line 5337  sub print_linkprotection { Line 5522  sub print_linkprotection {
                   '<option value="LTI-1p0" selected="selected">1.1</option></select></span> '."\n".                    '<option value="LTI-1p0" selected="selected">1.1</option></select></span> '."\n".
                   ('&nbsp;'x2).                    ('&nbsp;'x2).
                   '<span class="LC_nobreak">'.$lt{'lifetime'}.':<input type="text" size="3" name="linkprot_lifetime_add" value="300"'.$disabled.' /></span> '."\n".                    '<span class="LC_nobreak">'.$lt{'lifetime'}.':<input type="text" size="3" name="linkprot_lifetime_add" value="300"'.$disabled.' /></span> '."\n".
                   '<br /><br />'.                    '<br /><br />';
                   '<span class="LC_nobreak">'.$lt{'key'}.':<input type="text" size="25" name="linkprot_key_add" value="" autocomplete="off"'.$disabled.' /></span> '."\n".      if ($switchserver) {
                   ('&nbsp;'x2).          $datatable .= '<span class="LC_nobreak">'.&mt('Key and Secret are required').' - '.&mt("submit from course's home server: [_1].",$switchserver).'</span>'."\n";
                   '<span class="LC_nobreak">'.$lt{'secret'}.':<input type="password" size="20" name="linkprot_secret_add" value="" autocomplete="off"'.$disabled.' />'.      } else {
                   '<label><input type="checkbox" name="visible" onclick="if (this.checked) { this.form.linkprot_secret_add.type='."'text'".' } else { this.form.linkprot_secret_add.type='."'password'".' }"'.$disabled.' />'.&mt('Visible input').'</label></span> '."\n".          $datatable .= '<span class="LC_nobreak">'.$lt{'key'}.':<input type="text" size="25" name="linkprot_key_add" value="" autocomplete="off"'.$disabled.' /></span> '."\n".
                   '</td></tr>';                        ('&nbsp;'x2).
                         '<span class="LC_nobreak">'.$lt{'secret'}.':<input type="password" size="20" name="linkprot_secret_add" value="" autocomplete="off"'.$disabled.' />'.
                         '<label><input type="checkbox" name="visible" onclick="if (this.checked) { this.form.linkprot_secret_add.type='."'text'".' } else { this.form.linkprot_secret_add.type='."'password'".' }"'.$disabled.' />'.&mt('Visible input').'</label></span> '."\n";
       }
       $datatable .= '</td></tr>';
     $$rowtotal ++;      $$rowtotal ++;
     return $datatable;;      return $datatable;;
 }  }
Line 5358  sub linkprot_names { Line 5547  sub linkprot_names {
     return %lt;      return %lt;
 }  }
   
   sub check_switchserver {
       my ($cdom,$cnum) = @_;
       my ($allowed,$switchserver);
       my $home = &Apache::lonnet::homeserver($cnum,$cdom);
       unless ($home eq 'no_host') {
           my @ids=&Apache::lonnet::current_machine_ids();
           foreach my $id (@ids) { if ($id eq $home) { $allowed=1; } }
           if (!$allowed) {
               $switchserver='<a href="/adm/switchserver?otherserver='.$home.'&amp;role='.
                             &HTML::Entities::encode($env{'request.role'},'\'<>"&').
                             '&amp;destinationurl=/adm/courseprefs">'.&mt('Switch Server').'</a>';
           }
       }
       return $switchserver;
   }
   
 sub print_other {  sub print_other {
     my ($cdom,$settings,$allitems,$rowtotal,$crstype,$noedit) = @_;      my ($cdom,$settings,$allitems,$rowtotal,$crstype,$noedit) = @_;
     unless ((ref($settings) eq 'HASH') && (ref($allitems) eq 'ARRAY')) {      unless ((ref($settings) eq 'HASH') && (ref($allitems) eq 'ARRAY')) {

Removed from v.1.98  
changed lines
  Added in v.1.99


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