Diff for /loncom/interface/lonexttool.pm between versions 1.22.2.7 and 1.28

version 1.22.2.7, 2025/06/14 18:51:58 version 1.28, 2025/06/06 20:36:58
Line 96  sub handler { Line 96  sub handler {
     my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};      my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
     my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};      my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
     my $chome = $env{'course.'.$env{'request.course.id'}.'.home'};      my $chome = $env{'course.'.$env{'request.course.id'}.'.home'};
     my ($idx,$crstool,$is_tool,%toolhash,%toolsettings,$desturl,$delay);      my ($idx,$crstool,$is_tool,%toolhash,%toolsettings);
   
     if ($r->uri eq "/adm/$cdom/$cnum/$marker/$exttool") {      if ($r->uri eq "/adm/$cdom/$cnum/$marker/$exttool") {
         %toolsettings=&Apache::lonnet::dump('exttool_'.$marker,$cdom,$cnum);          %toolsettings=&Apache::lonnet::dump('exttool_'.$marker,$cdom,$cnum);
Line 131  sub handler { Line 131  sub handler {
                         }                          }
                     }                      }
                     unless ($gotreturnurl) {                      unless ($gotreturnurl) {
                         $toolhash{'returnurl'} = 'default';                               $toolhash{'returnurl'} = 'default';
                     }                      }
                 } else {                  } else {
                     $toolhash{'returnurl'} = 'none';                      $toolhash{'returnurl'} = 'none';
                 }                  }
                 if ($toolhash{'desturl'}) {  
                     if ((ref($toolhash{'crsconf'}) eq 'HASH')) {  
                         if ($toolhash{'crsconf'}{'desturl'}) {  
                             if ((exists($toolsettings{'desturl'})) &&  
                                 ($toolsettings{'desturl'} =~ m{^(https?\://|/)})) {  
                                 $desturl = $toolsettings{'desturl'};  
                                 if ((exists($toolsettings{'delay'})) &&  
                                     ($toolsettings{'delay'} =~ /^\d+\.?\d*$/)) {  
                                     $delay = $toolsettings{'delay'};  
                                 }  
                             }  
                         } elsif ($toolhash{'defdest'} =~ m{^(https?\://|/)}) {  
                             $desturl = $toolhash{'defdest'};  
                             if ($toolhash{'defdelay'} =~ /^\d+\.?\d*$/) {  
                                 $delay = $toolhash{'defdelay'};  
                             }  
                         }  
                     }  
                 }  
                 $is_tool = 1;                  $is_tool = 1;
             }              }
         }          }
Line 252  sub handler { Line 233  sub handler {
             if ($toolhash{'crsappend'} ne '') {              if ($toolhash{'crsappend'} ne '') {
                 $url .= $toolhash{'crsappend'};                  $url .= $toolhash{'crsappend'};
             }              }
             if ($desturl ne '') {  
                 my ($scheme,$provider,$path);  
                 if ($url =~ m{^https?\://}) {  
                     ($scheme,$provider,$path) = ($url =~ m{^(https?\://)([^/]+)(|/.+)$});  
                     if ($desturl =~ m{^/}) {  
                         if ($path eq $desturl) {  
                             undef($desturl);  
                         } else {  
                             $desturl = $scheme.$provider.$desturl;  
                         }  
                     } elsif ($desturl =~ m{^https?\://}) {  
                         if ($url eq $desturl) {  
                             undef($desturl);  
                         }  
                     }  
                 } elsif ($url eq $desturl) {  
                     undef($desturl);  
                 }  
             }  
             my %info = (              my %info = (
                          method => $toolhash{'sigmethod'},                           method => $toolhash{'sigmethod'},
                        );                         );
             $r->print(&launch_html($cdom,$cnum,$crstool,$url,$idx,              $r->print(&launch_html($cdom,$cnum,$crstool,$url,$idx,
                                    $toolhash{'cipher'},$submittext,                                     $toolhash{'cipher'},$submittext,\%lti,\%info));
                                    \%lti,\%info,$desturl,$delay));  
         } else {          } else {
             $r->print('<div class="LC_warning">'.&mt('External Tool Unavailable').'</div>');              $r->print('<div class="LC_warning">'.&mt('External Tool Unavailable').'</div>');
         }          }
Line 530  sub lti_params { Line 491  sub lti_params {
                 my $mapurl = &Apache::lonnet::clutter($map);                  my $mapurl = &Apache::lonnet::clutter($map);
                 my $mapsymb = &Apache::lonnet::symbread($map);                  my $mapsymb = &Apache::lonnet::symbread($map);
                 if ((&Apache::lonnet::EXT('resource.0.encrypturl',$mapsymb) =~ /^yes$/i) &&                  if ((&Apache::lonnet::EXT('resource.0.encrypturl',$mapsymb) =~ /^yes$/i) &&
                     (!$env{'request.role.adv'})) {                       (!$env{'request.role.adv'})) {
                     $return_url = &Apache::lonenc::encrypted($mapurl);                      $return_url = &Apache::lonenc::encrypted($mapurl);
                 } else {                  } else {
                     $return_url = $mapurl;                      $return_url = $mapurl;
                 }                  }
                 $return_url .= '?navmap=1';                  $return_url .= '?navmap=1';
             } elsif ($env{'httpref.'.$uri} eq '/adm/coursedoc') {              } elsif ($env{'httpref.'.$uri} eq '/adm/coursedoc') {
                 $return_url = '/adm/supplemental';                          $return_url = '/adm/supplemental';
             } else {              } else {
                 $return_url = '/adm/navmaps';                  $return_url = '/adm/navmaps';
             }              }
Line 558  sub lti_params { Line 519  sub lti_params {
 }  }
   
 sub launch_html {  sub launch_html {
     my ($cdom,$cnum,$crstool,$url,$idx,$keynum,$submittext,$paramsref,      my ($cdom,$cnum,$crstool,$url,$idx,$keynum,$submittext,$paramsref,$inforef) = @_;
         $inforef,$desturl,$delay) = @_;  
     my ($status,$hashref) =      my ($status,$hashref) =
         &Apache::lonnet::sign_lti($cdom,$cnum,$crstool,'tools','launch',$url,$idx,$keynum,          &Apache::lonnet::sign_lti($cdom,$cnum,$crstool,'tools','launch',$url,$idx,$keynum,
                                   $paramsref,$inforef);                                    $paramsref,$inforef);
     unless ($status eq 'ok') {      unless ($status eq 'ok') {
         return '<div class="LC_warning">'.&mt('External Tool Unavailable').'</div>';          return '<div class="LC_warning">'.&mt('External Tool Unavailable').'</div>';
     }      }
     my ($action,$js_html,$header,$title,$bodytag,$form,$divsty,$delay_in_ms);      my $action = &HTML::Entities::encode($url,'<>&"');
     if ($delay ne '') {      my $form = <<"END";
         $delay_in_ms = int(1000 * $delay);  
     }  
     $action = &HTML::Entities::encode($url,'<>&"');  
     $title = &mt('Launcher');  
     $header = <<"END";  
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">  <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
 END  
     if ($desturl) {  
         $divsty = 'none';  
         if ($delay_in_ms eq '') {  
             $delay_in_ms = 1000;  
         }  
         $bodytag = <<"END";  
 <body onload="setTimeout(document.LCltiLaunchForm.submit(),$delay_in_ms);">  
 END  
     } else {  
         $divsty = 'block';  
         $bodytag = <<"END";  
 <body>  <body>
 END  <div id="LCltiLaunch">
     }  
     $form = <<"END";  
 <div id="LCltiLaunch" style="display:$divsty;">  
 <form name="LCltiLaunchForm" id="LCltiLaunchFormId" action="$action" method="post" encType="application/x-www-form-urlencoded">  <form name="LCltiLaunchForm" id="LCltiLaunchFormId" action="$action" method="post" encType="application/x-www-form-urlencoded">
 END  END
     if (ref($hashref) eq 'HASH') {      if (ref($hashref) eq 'HASH') {
         foreach my $item (keys(%{$hashref})) {          foreach my $item (keys(%{$hashref})) {
             my $type = 'hidden';              my $type = 'hidden';
             if ($item eq 'basiclti_submit') {              if ($item eq 'basiclti_submit') {
                 unless ($desturl) {                  $type = 'submit';
                     $type = 'submit';  
                 }  
             }              }
             $form .= '<input type="'.$type.'" name="'.$item.'" value="'.$hashref->{$item}.'" id="id_'.$item.'" />'."\n";              $form .= '<input type="'.$type.'" name="'.$item.'" value="'.$hashref->{$item}.'" id="id_'.$item.'" />'."\n";
         }          }
     }      }
     $form .= "</form></div>\n";      $form .= "</form></div>\n";
     my $footer = <<"END";      $form .= <<"ENDJS";
 </body>  
 </html>  
 END  
     if ($desturl) {  
         $js_html = $header.$bodytag.$form.$footer;  
         &js_escape(\$js_html);  
         &js_escape(\$desturl);  
         return <<"END";  
 $header  
 <head>  
 <title>$title</title>  
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
 <meta name="google" content="notranslate" />  
 </head>  
 <body onload="javascript:addcontent();">  
 <iframe id="LC_launcher_iframe" style="position: absolute; width:0; height:0; border:0;">  
 </iframe>  
 <script type="text/javascript">  <script type="text/javascript">
 // <![CDATA[  
 function addcontent() {  
     if (document.getElementById('LC_launcher_iframe')) {  
         document.getElementById('LC_launcher_iframe').src = "data:text/html;charset=utf-8," + escape("$js_html");  
     }  
     setTimeout(() => {  
         document.location.href="$desturl";  
     }, $delay_in_ms);  
 }  
 // ]]>  
 </script>  
 $footer  
 END  
     } else {  
         return <<"END";  
 $header  
 $bodytag  
 $form  
 <script type="text/javascript">  
 // <![CDATA[  
     document.getElementById("LCltiLaunch").style.display = "none";      document.getElementById("LCltiLaunch").style.display = "none";
     nei = document.createElement('input');      nei = document.createElement('input');
     nei.setAttribute('type','hidden');      nei.setAttribute('type','hidden');
Line 652  $form Line 553  $form
     nei.setAttribute('value','$submittext');      nei.setAttribute('value','$submittext');
     document.getElementById("LCltiLaunchFormId").appendChild(nei);      document.getElementById("LCltiLaunchFormId").appendChild(nei);
     document.LCltiLaunchForm.submit();      document.LCltiLaunchForm.submit();
 // ]]>   </script>
 </script>  ENDJS
 $footer      $form .= "</body></html>\n";
 END      return $form;
     }  
 }  }
   
 sub gradabletool_access_check {  sub gradabletool_access_check {

Removed from v.1.22.2.7  
changed lines
  Added in v.1.28


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