Diff for /loncom/interface/courseprefs.pm between versions 1.103 and 1.113

version 1.103, 2022/02/16 00:06:04 version 1.113, 2022/07/08 04:24:24
Line 601  sub handler { Line 601  sub handler {
     );      );
     if (($phase eq 'process') && ($parm_permission->{'process'})) {      if (($phase eq 'process') && ($parm_permission->{'process'})) {
         my @allitems = &get_allitems(%prefs);          my @allitems = &get_allitems(%prefs);
         &Apache::lonconfigsettings::make_changes($r,$cdom,$phase,$context,          my $result = &Apache::lonconfigsettings::make_changes($r,$cdom,$phase,$context,
                                                  \@prefs_order,\%prefs,\%values,                                                                \@prefs_order,\%prefs,\%values,
                                                   $cnum,undef,\@allitems,                                                                $cnum,undef,\@allitems,
                                                   'coursepref',$parm_permission);                                                                'coursepref',$parm_permission);
           if ((ref($result) eq 'HASH') && (keys(%{$result}))) {
               $r->rflush();
               &devalidate_remote_courseprefs($cdom,$cnum,$result);
           }
     } elsif (($phase eq 'display') && ($parm_permission->{'display'})) {      } elsif (($phase eq 'display') && ($parm_permission->{'display'})) {
         my $noedit;          my $noedit;
         if (ref($parm_permission) eq 'HASH') {          if (ref($parm_permission) eq 'HASH') {
Line 812  sub print_config_box { Line 816  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,$lastactref) = @_;
     my (%newvalues,$errors);      my (%newvalues,$errors);
     if (ref($item) eq 'HASH') {      if (ref($item) eq 'HASH') {
         if (ref($changes) eq 'HASH') {          if (ref($changes) eq 'HASH') {
Line 981  sub process_changes { Line 985  sub process_changes {
                     }                      }
                 } elsif ($action eq 'linkprot') {                  } elsif ($action eq 'linkprot') {
                     if (ref($values) eq 'HASH') {                      if (ref($values) eq 'HASH') {
                         $errors = &process_linkprot($cdom,$cnum,$values->{$action},$changes,'course');                          $errors = &process_linkprot($cdom,$cnum,$values->{$action},$changes,'course',$lastactref);
                     }                      }
                 } else {                  } else {
                     foreach my $entry (@ordered) {                      foreach my $entry (@ordered) {
Line 1477  sub process_changes { Line 1481  sub process_changes {
 }  }
   
 sub process_linkprot {  sub process_linkprot {
     my ($cdom,$cnum,$values,$changes,$context) = @_;      my ($cdom,$cnum,$values,$changes,$context,$lastactref) = @_;
     my ($home,$dest,$ltiauth,$privkey,$privnum,$cipher,$errors,%linkprot);      my ($home,$dest,$ltiauth,$privkey,$privnum,$cipher,$errors,%linkprot);
     if (ref($values) eq 'HASH') {      if (ref($values) eq 'HASH') {
         foreach my $id (keys(%{$values})) {          foreach my $id (keys(%{$values})) {
Line 1501  sub process_linkprot { Line 1505  sub process_linkprot {
             if (grep(/^\Q$home\E$/,@ids)) {              if (grep(/^\Q$home\E$/,@ids)) {
                 if (ref($domdefs{'privhosts'}) eq 'ARRAY') {                  if (ref($domdefs{'privhosts'}) eq 'ARRAY') {
                     if (grep(/^\Q$home\E$/,@{$domdefs{'privhosts'}})) {                      if (grep(/^\Q$home\E$/,@{$domdefs{'privhosts'}})) {
                         my %privhash  = &Apache::lonnet::restore_dom('lti','private',$cdom,$home,1);                           my %privhash  = &Apache::lonnet::restore_dom('lti','private',$cdom,$home,1);
                         $privkey = $privhash{'key'};                          $privkey = $privhash{'key'};
                         $privnum = $privhash{'version'};                          $privnum = $privhash{'version'};
                         if (($privnum) && ($privkey ne '')) {                          if (($privnum) && ($privkey ne '')) {
Line 1544  sub process_linkprot { Line 1548  sub process_linkprot {
     if (ref($values) eq 'HASH') {      if (ref($values) 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) {
Line 1589  sub process_linkprot { Line 1593  sub process_linkprot {
                 $linkprot{$itemid}{$inner} = $env{$formitem};                  $linkprot{$itemid}{$inner} = $env{$formitem};
             }              }
         }          }
           my $urlitem = 'form.linkprot_returnurl_'.$idx;
           my $urlparamname = 'form.linkprot_urlparam_'.$idx;
           if ($env{$urlitem} == 1) {
               $env{$urlparamname} =~ s/(`)/'/g;
           } elsif (exists($env{$urlparamname})) {
               $env{$urlparamname} = '';
           }
           unless ($idx eq 'add') {
               if ((!$current{'returnurl'} && ($env{$urlparamname} ne '')) ||
                   ($current{'returnurl'} && ($env{$urlparamname} eq ''))) {
                   $haschanges{$itemid} = 1;
               }
           }
           if ($env{$urlparamname} ne '') {
               $linkprot{$itemid}{'returnurl'} = $env{$urlparamname};
           }
         if ($ltiauth) {          if ($ltiauth) {
             my $reqitem = 'form.linkprot_requser_'.$idx;              my $reqitem = 'form.linkprot_requser_'.$idx;
             $env{$reqitem} =~ s/(`)/'/g;              $env{$reqitem} =~ s/(`)/'/g;
             unless ($idx eq 'add') {              unless ($idx eq 'add') {
                 if ($current{'requser'} ne $env{$reqitem}) {                  if ((!$current{'requser'} && $env{$reqitem}) ||
                       ($current{'requser'} && !$env{$reqitem})) {
                     $haschanges{$itemid} = 1;                      $haschanges{$itemid} = 1;
                 }                  }
             }              }
Line 1655  sub process_linkprot { Line 1676  sub process_linkprot {
                     }                      }
                 } else {                  } else {
                     $linkprot{$itemid}{'secret'} = $current{'secret'};                      $linkprot{$itemid}{'secret'} = $current{'secret'};
                       $linkprot{$itemid}{'cipher'} = $current{'cipher'};
                 }                  }
             } elsif ($env{$secretitem} ne '') {              } elsif ($env{$secretitem} ne '') {
                 if ($privnum && $cipher) {                  if ($privnum && $cipher) {
Line 1671  sub process_linkprot { Line 1693  sub process_linkprot {
         foreach my $entry (keys(%haschanges)) {          foreach my $entry (keys(%haschanges)) {
             $changes->{$entry} = $linkprot{$entry};              $changes->{$entry} = $linkprot{$entry};
         }          }
           if (ref($lastactref) eq 'HASH') {
               $lastactref->{'courselti'} = 1;
           }
     }      }
     return $errors;      return $errors;
 }  }
Line 2204  sub store_linkprot { Line 2229  sub store_linkprot {
                     if (exists($oldlinkprot->{$id}{'usable'})) {                      if (exists($oldlinkprot->{$id}{'usable'})) {
                         $changes->{$id}->{'usable'} = 1;                          $changes->{$id}->{'usable'} = 1;
                     }                      }
                       if (exists($oldlinkprot->{$id}{'cipher'})) {
                           $changes->{$id}->{'cipher'} = $oldlinkprot->{$id}{'cipher'};
                       }
                 }                  }
             }              }
         }          }
Line 2254  sub store_linkprot { Line 2282  sub store_linkprot {
                     my %values = %{$changes->{$id}};                      my %values = %{$changes->{$id}};
                     my %desc = &linkprot_names();                      my %desc = &linkprot_names();
                     my $display;                      my $display;
                     foreach my $title ('name','lifetime','version','key','secret') {                      foreach my $title ('name','lifetime','version','key','secret','returnurl') {
                         if (($title eq 'key') || ($title eq 'secret')) {                          if (($title eq 'key') || ($title eq 'secret')) {
                             if (ref($ltienc{$id}) eq 'HASH') {                              if (ref($ltienc{$id}) eq 'HASH') {
                                 if (exists($ltienc{$id}{$title})) {                                  if (exists($ltienc{$id}{$title})) {
Line 2270  sub store_linkprot { Line 2298  sub store_linkprot {
                             if ($values{$title} eq 'LTI-1p0') {                              if ($values{$title} eq 'LTI-1p0') {
                                 $display .= $desc{$title}.': 1.1, ';                                  $display .= $desc{$title}.': 1.1, ';
                             }                              }
                           } elsif ($title eq 'returnurl') {
                               if ($values{$title}) {
                                   $display .= &mt('Return URL parameter').': '.$values{$title}.', '; 
                               }
                         } else {                          } else {
                             $display .= $desc{$title}.': '.$values{$title}.', ';                              $display .= $desc{$title}.': '.$values{$title}.', ';
                         }                          }
Line 2790  function toggleLinkProt(form,num,item) { Line 2822  function toggleLinkProt(form,num,item) {
     return;      return;
 }  }
   
 function toggleLinkProtReqUser(form,item,extra,valon,styleon,num) {  function toggleLinkProtExtra(form,item,extra,valon,styleon,num) {
     if (document.getElementById('linkprot_'+extra+'_'+num)) {      if (document.getElementById('linkprot_'+extra+'_'+num)) {
         var extraid = document.getElementById('linkprot_'+extra+'_'+num);          var extraid = document.getElementById('linkprot_'+extra+'_'+num);
         var itemname = form.elements['linkprot_'+item+'_'+num];          var itemname = form.elements['linkprot_'+item+'_'+num];
Line 2814  function toggleLinkProtReqUser(form,item Line 2846  function toggleLinkProtReqUser(form,item
     }      }
     return;      return;
 }  }
   
   function uncheckLinkProtMakeVis(item,num) {
       if (document.getElementById('linkprot_'+item+'_'+num)) {
           var currtype = document.getElementById('linkprot_'+item+'_'+num).type;
           if (currtype.toLowerCase() == 'checkbox') {
               document.getElementById('linkprot_'+item+'_'+num).checked = false;
           }
       }
       return;
   }
 ENDSCRIPT  ENDSCRIPT
   
 }  }
Line 5622  sub menucollections_display { Line 5664  sub menucollections_display {
   
 sub print_linkprotection {  sub print_linkprotection {
     my ($cdom,$cnum,$settings,$rowtotal,$crstype,$noedit,$context) = @_;      my ($cdom,$cnum,$settings,$rowtotal,$crstype,$noedit,$context) = @_;
     unless (ref($settings) eq 'HASH') {  
         return;  
     }  
   
     my %linkprotection;      my %linkprotection;
     my $count = 0;      my $count = 0;
Line 5669  sub print_linkprotection { Line 5708  sub print_linkprotection {
         }          }
     }      }
   
     if (ref($settings->{'linkprot'}) eq 'HASH') {      if ((ref($settings) eq 'HASH') && (ref($settings->{'linkprot'}) eq 'HASH')) {
         if (keys(%{$settings->{'linkprot'}})) {          if (keys(%{$settings->{'linkprot'}})) {
             my @current = sort { $a <=> $b } keys(%{$settings->{'linkprot'}});              my @current = sort { $a <=> $b } keys(%{$settings->{'linkprot'}});
             $next += $current[-1];              $next += $current[-1];
Line 5690  sub print_linkprotection { Line 5729  sub print_linkprotection {
                     '<tr '.$css_class.'><td><span class="LC_nobreak">'.                      '<tr '.$css_class.'><td><span class="LC_nobreak">'.
                     '<label><input type="checkbox" name="linkprot_del" value="'.$i.'"'.$disabled.' />'.                      '<label><input type="checkbox" name="linkprot_del" value="'.$i.'"'.$disabled.' />'.
                     &mt('Delete?').'</label></span></td><td>';                      &mt('Delete?').'</label></span></td><td>';
                 my ($usersty,$onclickrequser,%checkedrequser);                  my ($usersty,$onclickrequser,%checkedrequser,$onclickreturnurl,%checkedreturnurl);
                 if ($ltiauth) {                  if ($ltiauth) {
                     $usersty = 'display:none';                      $usersty = 'display:none';
                     $onclickrequser = ' onclick="toggleLinkProtReqUser(this.form,'."'requser','optional','1','block','$i'".');"';                      $onclickrequser = ' onclick="toggleLinkProtExtra(this.form,'."'requser','optional','1','block','$i'".');"';
                     %checkedrequser = (                      %checkedrequser = (
                         no => ' checked="checked"',                          no => ' checked="checked"',
                         yes  => '',                          yes  => '',
Line 5707  sub print_linkprotection { Line 5746  sub print_linkprotection {
                         $usersty = 'display:inline-block';                          $usersty = 'display:inline-block';
                     }                      }
                 }                  }
                   $onclickreturnurl = ' onclick="toggleLinkProtExtra(this.form,'."'returnurl','divurlparam','1','inline-block','$i'".');"';
                   %checkedreturnurl = (
                       no => ' checked="checked"',
                       yes  => '',
                   );
                   if ($values{'returnurl'} ne '') {
                       $checkedreturnurl{'yes'} = $checkedreturnurl{'no'};
                       $checkedreturnurl{'no'} = '';
                   }
                 $datatable .=                  $datatable .=
                     '<span class="LC_nobreak">'.$desc{'name'}.                      '<span class="LC_nobreak">'.$desc{'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> '.
Line 5715  sub print_linkprotection { Line 5763  sub print_linkprotection {
                     '<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">'.$desc{'lifetime'}.':<input type="text" name="linkprot_lifetime_'.$i.'"'.                      '<span class="LC_nobreak">'.$desc{'lifetime'}.':<input type="text" name="linkprot_lifetime_'.$i.'"'.
                     ' value="'.$values{'lifetime'}.'" size="3"'.$disabled.' /></span>';                      ' value="'.$values{'lifetime'}.'" size="3"'.$disabled.' /></span><br /><br />';
                 if ($ltiauth) {  
                     $datatable .= ('&nbsp;'x2).'<span class="LC_nobreak">'.$desc{'requser'}.'?'.  
                                   '<label><input type="radio" name="linkprot_requser_'.$i.'" value="0"'.  
                                   $onclickrequser.$checkedrequser{'no'}.$disabled.' />'.&mt('No').'</label>&nbsp;'.  
                                   '<label><input type="radio" name="linkprot_requser_'.$i.'" value="1"'.  
                                   $onclickrequser.$checkedrequser{'yes'}.$disabled.' />'.&mt('Yes').'</label></span>';  
                 }  
                 $datatable .= '<br /><br />';  
                 if ($values{'key'} ne '') {                  if ($values{'key'} ne '') {
                     $datatable .= '<span class="LC_nobreak">'.$desc{'key'};                      $datatable .= '<span class="LC_nobreak">'.$desc{'key'};
                     if ($noedit) {                      if ($noedit) {
Line 5755  sub print_linkprotection { Line 5795  sub print_linkprotection {
                     } else {                      } else {
                         $datatable .= '<span class="LC_nobreak">'.&mt('Secret required').' - '.$switchmessage.'</span>'."\n";                          $datatable .= '<span class="LC_nobreak">'.&mt('Secret required').' - '.$switchmessage.'</span>'."\n";
                     }                      }
                       $datatable .= '<input type="hidden" name="linkprot_id_'.$i.'" value="'.$num.'" />';
                 } else {                  } else {
                     if ($values{'usable'} ne '') {                      if ($values{'usable'} ne '') {
                         $datatable .= '<div id="linkprot_divcurrsecret_'.$i.'" style="display:inline-block" /><span class="LC_nobreak">'.                          $datatable .= '<div id="linkprot_divcurrsecret_'.$i.'" style="display:inline-block" /><span class="LC_nobreak">'.
Line 5766  sub print_linkprotection { Line 5807  sub print_linkprotection {
                                       '</label>&nbsp;&nbsp;</span><div id="linkprot_divchgsecret_'.$i.'" style="display:none" />'.                                        '</label>&nbsp;&nbsp;</span><div id="linkprot_divchgsecret_'.$i.'" style="display:none" />'.
                                       '<span class="LC_nobreak">'.&mt('New Secret').':'.                                        '<span class="LC_nobreak">'.&mt('New Secret').':'.
                                       '<input type="password" size="20" name="linkprot_secret_'.$i.'" value="" autocomplete="off"'.$disabled.' />'.                                        '<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>'.                                        '<label><input type="checkbox" name="linkprot_visible_'.$i.'" id="linkprot_visible_'.$i.'" 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>';                                        '<input type="hidden" name="linkprot_id_'.$i.'" value="'.$num.'" /></span></div>';
                     } else {                      } else {
                         $datatable .=                          $datatable .=
                             '<span class="LC_nobreak">'.$desc{'secret'}.':'.                              '<span class="LC_nobreak">'.$desc{'secret'}.':'.
                             '<input type="password" size="20" name="linkprot_secret_'.$i.'" value="" autocomplete="off"'.$disabled.' />'.                              '<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>'.                              '<label><input type="checkbox" name="linkprot_visible_'.$i.'" id="linkprot_visible_'.$i.'" 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>';                              '<input type="hidden" name="linkprot_id_'.$i.'" value="'.$num.'" /></span>';
                     }                      }
                 }                  }
                   $datatable .= '<br /><br />'.
                                 '<span class="LC_nobreak">'.$desc{'returnurl'}.'?'.
                                 '<label><input type="radio" name="linkprot_returnurl_'.$i.'" value="0"'.
                                 $onclickreturnurl.$checkedreturnurl{'no'}.$disabled.' />'.&mt('No').'</label>&nbsp;'.
                                 '<label><input type="radio" name="linkprot_returnurl_'.$i.'" value="1"'.
                                 $onclickreturnurl.$checkedreturnurl{'yes'}.$disabled.' />'.&mt('Yes').'</label></span>'.
                                 '&nbsp;&nbsp;</span><div id="linkprot_divurlparam_'.$i.'" style="display:none" />'.
                                 '<span class="LC_nobreak">'.&mt('Parameter name').':'.
                                 '<input type="text" size="15" name="linkprot_urlparam_'.$i.'" value="'.$values{'returnurl'}.'" autocomplete="off"'.$disabled.' />'.
                                 '</span></div> ';
                 if ($ltiauth) {                  if ($ltiauth) {
                     $datatable .=                       $datatable .= ('&nbsp;'x2).'<span class="LC_nobreak">'.$desc{'requser'}.'?'.
                                     '<label><input type="radio" name="linkprot_requser_'.$i.'" value="0"'.
                                     $onclickrequser.$checkedrequser{'no'}.$disabled.' />'.&mt('No').'</label>&nbsp;'.
                                     '<label><input type="radio" name="linkprot_requser_'.$i.'" value="1"'.
                                     $onclickrequser.$checkedrequser{'yes'}.$disabled.' />'.&mt('Yes').'</label></span>'.
                         '</fieldset>'.                          '</fieldset>'.
                         '<fieldset id="linkprot_optional_'.$i.'" style="'.$usersty.'"><legend>'.$lt{'opti'}.'</legend>'.                          '<fieldset id="linkprot_optional_'.$i.'" style="'.$usersty.'"><legend>'.$lt{'opti'}.'</legend>'.
                         &linkprot_options($i,$itemcount,$disabled,\%values,\%desc).                          &linkprot_options($i,$itemcount,$disabled,\%values,\%desc).
Line 5792  sub print_linkprotection { Line 5847  sub print_linkprotection {
     $datatable .= '<tr '.$css_class.'><td><span class="LC_nobreak">'."\n".      $datatable .= '<tr '.$css_class.'><td><span class="LC_nobreak">'."\n".
                   '<input type="hidden" name="linkprot_maxnum" value="'.$next.'" />'."\n".                    '<input type="hidden" name="linkprot_maxnum" value="'.$next.'" />'."\n".
                   '<input type="checkbox" name="linkprot_add" value="1"'.$disabled.' />'.&mt('Add').'</span></td>'."\n".                    '<input type="checkbox" name="linkprot_add" value="1"'.$disabled.' />'.&mt('Add').'</span></td>'."\n".
                   '<td>';                    '<td width="100%">';
     my ($usersty,$onclickrequser,%checkedrequser);      my ($usersty,$onclickrequser,%checkedrequser,$onclickreturnurl,%checkedreturnurl);
     if ($ltiauth) {      if ($ltiauth) {
         $usersty = 'display:none';          $usersty = 'display:none';
         $onclickrequser = ' onclick="toggleLinkProtReqUser(this.form,'."'requser','optional','1','block','add'".');"';          $onclickrequser = ' onclick="toggleLinkProtExtra(this.form,'."'requser','optional','1','block','add'".');"';
         %checkedrequser = (          %checkedrequser = (
             no => ' checked="checked"',              no => ' checked="checked"',
             yes  => '',              yes  => '',
         );          );
         $datatable .= '<fieldset><legend>'.$lt{'requ'}.'</legend>';          $datatable .= '<fieldset><legend>'.$lt{'requ'}.'</legend>';
     }      }
       $onclickreturnurl = ' onclick="toggleLinkProtExtra(this.form,'."'returnurl','divurlparam','1','inline-block','add'".');"';
       %checkedreturnurl = (
           no => ' checked="checked"',
           yes => '',
       );
     $datatable .= '<span class="LC_nobreak">'.$desc{'name'}.      $datatable .= '<span class="LC_nobreak">'.$desc{'name'}.
                   ':<input type="text" size="15" name="linkprot_name_add" value="" autocomplete="off"'.$disabled.' /></span> '."\n".                    ':<input type="text" size="15" name="linkprot_name_add" value="" autocomplete="off"'.$disabled.' /></span> '."\n".
                   ('&nbsp;'x2).                    ('&nbsp;'x2).
                   '<span class="LC_nobreak">'.$desc{'version'}.':<select name="linkprot_version_add"'.$disabled.'>'.                    '<span class="LC_nobreak">'.$desc{'version'}.':<select name="linkprot_version_add"'.$disabled.'>'.
                   '<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">'.$desc{'lifetime'}.':<input type="text" size="3" name="linkprot_lifetime_add" value="300"'.$disabled.' /></span> '."\n";                    '<span class="LC_nobreak">'.$desc{'lifetime'}.':<input type="text" size="3" name="linkprot_lifetime_add" value="300"'.$disabled.' /></span> '."\n".
     if ($ltiauth) {                    '<br /><br />';
         $datatable .= ('&nbsp;'x2).'<span class="LC_nobreak">'.$desc{'requser'}.'?'.  
                       '<label><input type="radio" name="linkprot_requser_add" value="0"'.  
                       $onclickrequser.$checkedrequser{'no'}.$disabled.' />'.&mt('No').'</label>&nbsp;'.  
                       '<label><input type="radio" name="linkprot_requser_add" value="1"'.  
                       $onclickrequser.$checkedrequser{'yes'}.$disabled.' />'.&mt('Yes').'</label></span>';  
     }  
     $datatable .= '<br /><br />';  
     if ($switchserver) {      if ($switchserver) {
         $datatable .= '<span class="LC_nobreak">'.&mt('Key and Secret are required').' - '.$switchmessage.'</span>'."\n";          $datatable .= '<span class="LC_nobreak">'.&mt('Key and Secret are required').' - '.$switchmessage.'</span>'."\n";
     } else {      } else {
         $datatable .= '<span class="LC_nobreak">'.$desc{'key'}.':<input type="text" size="25" name="linkprot_key_add" value="" autocomplete="off"'.$disabled.' /></span> '."\n".          $datatable .= '<span class="LC_nobreak">'.$desc{'key'}.':<input type="text" size="25" name="linkprot_key_add" value="" autocomplete="off"'.$disabled.' /></span> '."\n".
                       ('&nbsp;'x2).                        ('&nbsp;'x2).
                       '<span class="LC_nobreak">'.$desc{'secret'}.':<input type="password" size="20" name="linkprot_secret_add" value="" autocomplete="off"'.$disabled.' />'.                        '<span class="LC_nobreak">'.$desc{'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";                        '<label><input type="checkbox" name="linkprot_visible_add" id="linkprot_visible_add" 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 .= '<br /><br />'.
                     '<span class="LC_nobreak">'.$desc{'returnurl'}.'?'.
                     '<label><input type="radio" name="linkprot_returnurl_add" value="0"'.
                     $onclickreturnurl.$checkedreturnurl{'no'}.$disabled.' />'.&mt('No').'</label>&nbsp;'.
                     '<label><input type="radio" name="linkprot_returnurl_add" value="1"'.
                     $onclickreturnurl.$checkedreturnurl{'yes'}.$disabled.' />'.&mt('Yes').'</label></span>'.
                     '&nbsp;&nbsp;</span><div id="linkprot_divurlparam_add" style="display:none" />'.
                     '<span class="LC_nobreak">'.&mt('Parameter name').':'.
                     '<input type="text" size="15" name="linkprot_urlparam_add" value="" autocomplete="off"'.$disabled.' />'.
                     '</span></div> ';
     if ($ltiauth) {      if ($ltiauth) {
         $datatable .= '</fieldset>'.          $datatable .= ('&nbsp;'x2).'<span class="LC_nobreak">'.$desc{'requser'}.'?'.
                         '<label><input type="radio" name="linkprot_requser_add" value="0"'.
                         $onclickrequser.$checkedrequser{'no'}.$disabled.' />'.&mt('No').'</label>&nbsp;'.
                         '<label><input type="radio" name="linkprot_requser_add" value="1"'.
                         $onclickrequser.$checkedrequser{'yes'}.$disabled.' />'.&mt('Yes').'</label></span>'.
                         '</fieldset>'.
                       '<fieldset id="linkprot_optional_add" style="'.$usersty.'"><legend>'.$lt{'opti'}.'</legend>'.                        '<fieldset id="linkprot_optional_add" style="'.$usersty.'"><legend>'.$lt{'opti'}.'</legend>'.
                       &linkprot_options('add',$itemcount,$disabled,{},\%desc).                        &linkprot_options('add',$itemcount,$disabled,{},\%desc).
                      '</fieldset>';                       '</fieldset>';
Line 5844  sub linkprot_names { Line 5912  sub linkprot_names {
                                           'lifetime'  => 'Nonce lifetime (s)',                                            'lifetime'  => 'Nonce lifetime (s)',
                                           'name'      => 'Launcher Application',                                            'name'      => 'Launcher Application',
                                           'secret'    => 'Secret',                                            'secret'    => 'Secret',
                                             'returnurl' => 'Launcher return URL',
                                           'requser'   => 'Use identity',                                            'requser'   => 'Use identity',
                                           'email'     => 'Email address',                                            'email'     => 'Email address',
                                           'sourcedid' => 'User ID',                                            'sourcedid' => 'User ID',
Line 5899  sub linkprot_options { Line 5968  sub linkprot_options {
             $checked{'auth'} = ' checked="checked"';              $checked{'auth'} = ' checked="checked"';
         }          }
     }      }
     my $onclickuser = ' onclick="toggleLinkProtReqUser(this.form,'."'mapuser','userfield','other','inline-block','$num'".');"';      my $onclickuser = ' onclick="toggleLinkProtExtra(this.form,'."'mapuser','userfield','other','inline-block','$num'".');"';
     my $output = '<div class="LC_floatleft"><span class="LC_nobreak">'.      my $output = '<div class="LC_floatleft"><span class="LC_nobreak">'.
                  &mt('Source of LON-CAPA username in LTI request').':&nbsp;';                   &mt('Source of LON-CAPA username in LTI request').':&nbsp;';
     foreach my $option ('sourcedid','email','other') {      foreach my $option ('sourcedid','email','other') {
Line 6542  sub change_clone { Line 6611  sub change_clone {
             }              }
         }          }
     }      }
       return;
   }
   
   sub devalidate_remote_courseprefs {
       my ($cdom,$cnum,$cachekeys) = @_;
       return unless (ref($cachekeys) eq 'HASH');
       my %servers = &Apache::lonnet::internet_dom_servers($cdom);
       my %thismachine;
       map { $thismachine{$_} = 1; } &Apache::lonnet::current_machine_ids();
       my @posscached = ('courselti');
       if (keys(%servers)) {
           foreach my $server (keys(%servers)) {
               next if ($thismachine{$server});
               my @cached;
               foreach my $name (@posscached) {
                   if ($cachekeys->{$name}) {
                       push(@cached,&escape($name).':'.&escape($cdom.'_'.$cnum));
                   }
               }
               if (@cached) {
                   &Apache::lonnet::remote_devalidate_cache($server,\@cached);
               }
           }
       }
     return;      return;
 }  }
   

Removed from v.1.103  
changed lines
  Added in v.1.113


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