Diff for /rat/lonwrapper.pm between versions 1.49.2.7.2.1 and 1.63

version 1.49.2.7.2.1, 2020/01/14 17:14:11 version 1.63, 2017/05/10 13:49:21
Line 38  use Apache::loncommon(); Line 38  use Apache::loncommon();
 use Apache::lonhtmlcommon();  use Apache::lonhtmlcommon();
 use Apache::lonextresedit();  use Apache::lonextresedit();
 use Apache::lonexttool();  use Apache::lonexttool();
 use LONCAPA qw(:DEFAULT :match);  use LONCAPA qw(:DEFAULT :match);;
 use HTML::Entities();  
   
 # ================================================================ Main Handler  # ================================================================ Main Handler
 sub wrapper {  sub wrapper {
     my ($r,$url,$brcrum,$absolute,$is_ext,$is_pdf,$exttool,$linktext,$explanation,      my ($url,$brcrum,$absolute,$is_ext,$is_pdf,$exttool,$linktext,$explanation,
         $title,$width,$height) = @_;          $title,$width,$height) = @_;
   
     my $forcereg;      my $forcereg;
     unless ($env{'form.folderpath'}) {      unless ($env{'form.folderpath'}) {
         $forcereg = 1;          $forcereg = 1;
     }      }
   
     my %lt = &Apache::lonlocal::texthash(      my %lt = &Apache::lonlocal::texthash(
                                           'noif' => 'No iframe support.',                                            'noif' => 'No iframe support.',
                                           'show' => 'Show content in pop-up window',                                            'show' => 'Show content in pop-up window',
                                         );                                          );
   
     my ($anchor,$uselink);      my $anchor;
     if ($is_ext) {      if ($is_ext) {
         if ($env{'form.symb'}) {          if ($env{'form.symb'}) {
             (undef,undef,my $res) = &Apache::lonnet::decode_symb($env{'form.symb'});              (undef,undef,my $res) = &Apache::lonnet::decode_symb($env{'form.symb'});
Line 66  sub wrapper { Line 64  sub wrapper {
         } elsif ($env{'form.anchor'} ne '') {          } elsif ($env{'form.anchor'} ne '') {
             $anchor = '#'.$env{'form.anchor'};              $anchor = '#'.$env{'form.anchor'};
         }          }
         unless (($is_pdf) && ($env{'browser.mobile'})) {  
             my $hostname = $r->hostname();  
             my $lonhost = $r->dir_config('lonHostID');  
             my $ip = &Apache::lonnet::get_host_ip($lonhost);  
             $uselink = &Apache::loncommon::is_nonframeable($url,$absolute,$hostname,$ip);  
         }  
     }      }
   
     my $noiframe = &Apache::loncommon::modal_link($url.$anchor,$lt{'show'},500,400);      my $noiframe = &Apache::loncommon::modal_link($url.$anchor,$lt{'show'},500,400);
Line 91  sub wrapper { Line 83  sub wrapper {
   
     my $startpage = &Apache::loncommon::start_page('Menu',undef,$args);      my $startpage = &Apache::loncommon::start_page('Menu',undef,$args);
     my $endpage = &Apache::loncommon::end_page();      my $endpage = &Apache::loncommon::end_page();
       
     if (($uselink) && ($title eq '')) {  
         if ($env{'form.symb'}) {  
             $title=&Apache::lonnet::gettitle($env{'form.symb'});  
         } else {  
             my $symb=&Apache::lonnet::symbread($r->uri);  
             if ($symb) {  
                 $title=&Apache::lonnet::gettitle($symb);  
             }  
         }  
     }  
     if (($env{'browser.mobile'}) || ($exttool eq 'window') || ($exttool eq 'tab')) {      if (($env{'browser.mobile'}) || ($exttool eq 'window') || ($exttool eq 'tab')) {
         my $output = $startpage;          my $output = $startpage;
         if ($is_pdf) {          if ($is_pdf) {
             $linktext = &mt('Link to PDF (for mobile devices)');              if ($title eq '') {
             $output .= &create_link($url,$anchor,$title,$linktext);                  $title = $env{'form.title'};
                   if ($title eq '') {
                       unless ($env{'request.enc'}) {
                           ($title) = ($url =~ m{/([^/]+)$});
                           $title =~ s/(\?[^\?]+)$//;
                       }
                   }
               }
               unless ($title eq '') {
                   $output .= $title.'<br />';
               }
               $output .= '<a href="'.$url.'">'.&mt('Link to PDF (for mobile devices)').'</a>';
         } elsif (($exttool eq 'window') || ($exttool eq 'tab')) {          } elsif (($exttool eq 'window') || ($exttool eq 'tab')) {
             if ($linktext eq '') {              if ($linktext eq '') {
                 $linktext = &mt('Launch External Tool');                  $linktext = &mt('Launch External Tool');
             }              }
             $url = &HTML::Entities::encode($url,'"<>&');  
             if ($exttool eq 'tab') {              if ($exttool eq 'tab') {
                 $output .= '<div>'.                  $output .= '<div>'.
                            '<a href="'.$url.'" target="LCExternalToolTab" style="padding:0;clear:both;margin:0;border:0">'.                             '<a href="'.$url.'" target="LCExternalToolTab" style="padding:0;clear:both;margin:0;border:0">'.
Line 120  sub wrapper { Line 112  sub wrapper {
             } else {              } else {
                 $output .= <<"ENDLINK";                  $output .= <<"ENDLINK";
 <script type="text/javascript">  <script type="text/javascript">
 // <![CDATA[  var windowObjectReference = null; 
 var windowObjectReference = null;  var PreviousUrl; 
 var PreviousUrl;                             
   
 function openSinglePopup(strUrl) {  function openSinglePopup(strUrl) {
     if (windowObjectReference == null || windowObjectReference.closed) {      if (windowObjectReference == null || windowObjectReference.closed) {
         windowObjectReference = window.open(strUrl, "LCExternalToolPopUp",          windowObjectReference = window.open(strUrl, "LCExternalToolPopUp",
Line 137  function openSinglePopup(strUrl) { Line 128  function openSinglePopup(strUrl) {
     };      };
     PreviousUrl = strUrl;      PreviousUrl = strUrl;
 }  }
 // ]]>  
 </script>  </script>
 <div>  <div>
 <a href="$url" target="LCExternalToolPopUp" onclick="openSinglePopup(this.href); return false;">  <a href="$url" target="LCExternalToolPopUp" onclick="openSinglePopup(this.href); return false;">
Line 149  ENDLINK Line 139  ENDLINK
                 $output .= '<div>'.$explanation.'</div>';                  $output .= '<div>'.$explanation.'</div>';
             }              }
         } else {          } else {
             if ($uselink) {              $output .= '<div style="overflow:scroll; -webkit-overflow-scrolling:touch;">'."\n".
                 $linktext = &mt('Link to resource');                         '<iframe src="'.$url.$anchor.'" height="100%" width="100%" frameborder="0">'."\n".
                 $output .= &create_link($url,$anchor,$title,$linktext);                         "$lt{'noif'} $noiframe\n".
             } else {                         "</iframe>\n".
                 my $dest = &HTML::Entities::encode($url.$anchor,'&<>"');                         "</div>\n";
                 $output .= '<div style="overflow:scroll; -webkit-overflow-scrolling:touch;">'."\n".  
                            '<iframe src="'.$dest.'" height="100%" width="100%" frameborder="0">'."\n".  
                            "$lt{'noif'} $noiframe\n".  
                            "</iframe>\n".  
                            "</div>\n";  
             }  
         }          }
         $output .= $endpage;          $output .= $endpage;
         return $output;          return $output;
     } elsif ($uselink) {  
         $linktext = &mt('Link to resource');  
         return $startpage.&create_link($url,$anchor,$title,$linktext).$endpage;  
     } else {      } else {
         my $offset = 5;          my $offset = 5;
         &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['inhibitmenu']);          &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['inhibitmenu']);
Line 198  ENDLINK Line 179  ENDLINK
         window.onload = function(){  \$(window).trigger('resize') };          window.onload = function(){  \$(window).trigger('resize') };
 SCRIPT  SCRIPT
         # javascript will position the iframe if window was resized (or zoomed)          # javascript will position the iframe if window was resized (or zoomed)
         my $dest = &HTML::Entities::encode($url.$anchor,'&<>"');  
         return <<ENDFRAME;          return <<ENDFRAME;
         $startpage          $startpage
         $script          $script
         <div class="LC_iframecontainer">          <div class="LC_iframecontainer">
             <iframe src="$dest">$lt{'noif'} $noiframe</iframe>              <iframe src="$url$anchor">$lt{'noif'} $noiframe</iframe>
         </div>          </div>
         $endpage          $endpage
 ENDFRAME  ENDFRAME
     }      }
 }  }
   
 sub create_link {  
     my ($url,$anchor,$title,$linktext) = @_;  
     my $shownlink;  
     if ($title eq '') {  
         $title = $env{'form.title'};  
         if ($title eq '') {  
             unless ($env{'request.enc'}) {  
                 ($title) = ($url =~ m{/([^/]+)$});  
                 $title =~ s/(\?[^\?]+)$//;  
             }  
         }  
     }  
     unless ($title eq '') {  
         $shownlink = '<span style="font-weight:bold;">'.$title.'</span><br />';  
     }  
     my $dest = &HTML::Entities::encode($url.$anchor,'&<>"');  
     $shownlink .= '<a href="'.$dest.'">'.$linktext.'</a>';  
     return $shownlink;  
 }  
   
 sub handler {  sub handler {
     my $r=shift;      my $r=shift;
     &Apache::loncommon::content_type($r,'text/html');      &Apache::loncommon::content_type($r,'text/html');
Line 245  sub handler { Line 205  sub handler {
         s|^/adm/wrapper||;          s|^/adm/wrapper||;
         $is_ext = $_ =~ s|^/ext/|http://|;                   $is_ext = $_ =~ s|^/ext/|http://|;         
         s|http://https://|https://|;          s|http://https://|https://|;
         s|&colon;|:|g;          s|&colon;|:|g;              
     }      }
   
   
     if ($url =~ /\.pdf$/i) {      if ($url =~ /\.pdf$/i) {
         $is_pdf = 1;          $is_pdf = 1;
     } elsif ($url =~ m{^/adm/($match_domain)/($match_courseid)/(\d+)/ext\.tool$}) {      } elsif ($url =~ m{^/adm/($match_domain)/($match_courseid)/(\d+)/ext\.tool$}) {
Line 259  sub handler { Line 220  sub handler {
         my %toolhash = &Apache::lonnet::get('exttool_'.$marker,['target','linktext','explanation','id','width','height'],          my %toolhash = &Apache::lonnet::get('exttool_'.$marker,['target','linktext','explanation','id','width','height'],
                                             $cdom,$cnum);                                              $cdom,$cnum);
         if ($toolhash{'id'}) {          if ($toolhash{'id'}) {
             my %ltitools = &Apache::lonnet::get_domain_lti($cdom,'consumer');              my %ltitools = &Apache::lonnet::get_domain_ltitools($cdom);
             if (ref($ltitools{$toolhash{'id'}}) eq 'HASH') {              if (ref($ltitools{$toolhash{'id'}}) eq 'HASH') {
                 $exttoolremote = $ltitools{$toolhash{'id'}}{'url'};                  $exttoolremote = $ltitools{$toolhash{'id'}}{'url'};
             }              }
Line 269  sub handler { Line 230  sub handler {
             $width = $toolhash{'width'};              $width = $toolhash{'width'};
             $height = $toolhash{'height'};              $height = $toolhash{'height'};
         } elsif ($toolhash{'target'} eq 'tab') {          } elsif ($toolhash{'target'} eq 'tab') {
             $exttool = 'tab';              $exttool = 'tab'; 
         }          }
         if (($exttool eq 'window') || ($exttool eq 'tab')) {          if (($exttool eq 'window') || ($exttool eq 'tab')) {
             $linktext = $toolhash{'linktext'};              $linktext = $toolhash{'linktext'}; 
             $explanation = $toolhash{'explanation'};              $explanation = $toolhash{'explanation'};
         } elsif (($exttoolremote =~ /^http:/) && ($ENV{'SERVER_PORT'} == 443)) {          } elsif (($exttoolremote =~ /^http:/) && ($ENV{'SERVER_PORT'} == 443)) {
             $exttool = 'tab';              $exttool = 'tab';
Line 350  sub handler { Line 311  sub handler {
             &Apache::lonenc::check_encrypt(\$url);              &Apache::lonenc::check_encrypt(\$url);
         }          }
   
         $r->print( wrapper($r,$url,$brcrum,$absolute,$is_ext,$is_pdf,$exttool,          $r->print( wrapper($url,$brcrum,$absolute,$is_ext,$is_pdf,$exttool,
                            $linktext,$explanation,undef,$width,$height) );                             $linktext,$explanation,undef,$width,$height) );
   
     } # not just the menu      } # not just the menu
Line 378  described at http://www.lon-capa.org. Line 339  described at http://www.lon-capa.org.
   
 =over  =over
   
 =item wrapper($r,$url,$brcrum,$absolute,$is_ext,$is_pdf,$exttool,$linktext,$explanation,$title,$width,$height)  =item wrapper($url,$brcrum,$absolute,$is_ext,$is_pdf,$title))
   
 =over  =over
   
 =item $r  
   
 request object  
   
 =item $url  =item $url
   
 url to display by including in an iframe within a  url to display by including in an iframe within a

Removed from v.1.49.2.7.2.1  
changed lines
  Added in v.1.63


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