Diff for /rat/lonwrapper.pm between versions 1.49.2.7.2.6 and 1.49.2.8

version 1.49.2.7.2.6, 2021/10/19 11:27:51 version 1.49.2.8, 2020/02/16 23:52:03
Line 37  use Apache::lonlocal; Line 37  use Apache::lonlocal;
 use Apache::loncommon();  use Apache::loncommon();
 use Apache::lonhtmlcommon();  use Apache::lonhtmlcommon();
 use Apache::lonextresedit();  use Apache::lonextresedit();
 use Apache::lonexttool();  
 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 ($r,$url,$brcrum,$absolute,$is_ext,$is_pdf,$title) = @_;
         $title,$width,$height) = @_;  
   
     my $forcereg;      my $forcereg;
     unless ($env{'form.folderpath'}) {      unless ($env{'form.folderpath'}) {
Line 56  sub wrapper { Line 52  sub wrapper {
                                           'show' => 'Show content in pop-up window',                                            'show' => 'Show content in pop-up window',
                                         );                                          );
   
     (undef,undef,undef,undef,undef,undef,my $clientmobile) =      my ($anchor,$uselink,$linktext);
         &Apache::loncommon::decode_user_agent($r);  
   
     my ($anchor,$uselink);  
     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 69  sub wrapper { Line 62  sub wrapper {
         } elsif ($env{'form.anchor'} ne '') {          } elsif ($env{'form.anchor'} ne '') {
             $anchor = '#'.$env{'form.anchor'};              $anchor = '#'.$env{'form.anchor'};
         }          }
         unless (($is_pdf) && ($clientmobile)) {          unless (($is_pdf) && ($env{'browser.mobile'})) {
             my $hostname = $r->hostname();              my $hostname = $r->hostname();
             my $lonhost = $r->dir_config('lonHostID');              my $lonhost = $r->dir_config('lonHostID');
             my $ip = &Apache::lonnet::get_host_ip($lonhost);              my $ip = &Apache::lonnet::get_host_ip($lonhost);
Line 101  sub wrapper { Line 94  sub wrapper {
 # do not obscure the Functions menu.  # do not obscure the Functions menu.
 #  #
   
     unless ($clientmobile || ($exttool eq 'window') || ($exttool eq 'tab') || $uselink) {      unless (($env{'browser.mobile'}) || $uselink) {
         $headjs = '          $headjs = '
 <script type="text/javascript">  <script type="text/javascript">
 // <![CDATA[  // <![CDATA[
Line 109  var LCnotready = 0; Line 102  var LCnotready = 0;
 var LCresizedef = 0;  var LCresizedef = 0;
 // ]]>  // ]]>
 </script>'."\n";  </script>'."\n";
     }  
   
     my $startpage = &Apache::loncommon::start_page('Menu',$headjs,$args);      my $startpage = &Apache::loncommon::start_page('Menu',$headjs,$args);
     my $endpage = &Apache::loncommon::end_page();      my $endpage = &Apache::loncommon::end_page();
Line 124  var LCresizedef = 0; Line 116  var LCresizedef = 0;
             }              }
         }          }
     }      }
     if ($clientmobile || ($exttool eq 'window') || ($exttool eq 'tab')) {      if ($env{'browser.mobile'}) {
         my $output = $startpage;          my $output = $startpage;
         if ($is_pdf) {          if ($is_pdf) {
             $linktext = &mt('Link to PDF (for mobile devices)');              $linktext = &mt('Link to PDF (for mobile devices)');
             $output .= &create_link($url,$anchor,$title,$linktext);              $output .= &create_link($url,$anchor,$title,$linktext);
         } elsif (($exttool eq 'window') || ($exttool eq 'tab')) {  
             if ($linktext eq '') {  
                 $linktext = &mt('Launch External Tool');  
             }  
             $url = &HTML::Entities::encode($url,'"<>&');  
             if ($exttool eq 'tab') {  
                 $output .= '<div>'.  
                            '<a href="'.$url.'" target="LCExternalToolTab" style="padding:0;clear:both;margin:0;border:0">'.  
                            $linktext.'</a>'.  
                            '</div>';  
             } else {  
                 $output .= <<"ENDLINK";  
 <script type="text/javascript">  
 // <![CDATA[  
 var windowObjectReference = null;  
 var PreviousUrl;  
   
 function openSinglePopup(strUrl) {  
     if (windowObjectReference == null || windowObjectReference.closed) {  
         windowObjectReference = window.open(strUrl, "LCExternalToolPopUp",  
                                             "height=$height,width=$width,scrollbars=yes,resizable=yes,status=yes,menubar=no,location=no'");  
     } else if(PreviousUrl != strUrl) {  
         windowObjectReference = window.open(strUrl, "LCExternalToolPopUp",  
                                             "height=$height,width=$width,scrollbars=yes,resizable=yes,status=yes,menubar=no,location=no'");  
         windowObjectReference.focus();  
     } else {  
         windowObjectReference.focus();  
     };  
     PreviousUrl = strUrl;  
 }  
 // ]]>  
 </script>  
 <div>  
 <a href="$url" target="LCExternalToolPopUp" onclick="openSinglePopup(this.href); return false;">  
 $linktext</a>  
 </div>  
 ENDLINK  
             }  
             if ($explanation ne '') {  
                 $output .= '<div>'.$explanation.'</div>';  
             }  
         } else {          } else {
             if ($uselink) {              if ($uselink) {
                 $linktext = &mt('Link to resource');                  $linktext = &mt('Link to resource');
Line 225  ENDLINK Line 176  ENDLINK
         window.onload = function(){          window.onload = function(){
             if (LCresizedef) {              if (LCresizedef) {
                 LCnotready = 0;                  LCnotready = 0;
                 \$(window).trigger('resize');                  \$(window).trigger('resize') };
             } else {              } else {
                 LCnotready = 1;                  LCnotready = 1;
             }              }
         };          };
 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
Line 272  sub handler { Line 222  sub handler {
     return OK if $r->header_only;      return OK if $r->header_only;
   
     my $url = $r->uri;      my $url = $r->uri;
     my ($is_ext,$brcrum,$absolute,$is_pdf,$exttool,$cdom,$cnum,$hostname,      my ($is_ext,$brcrum,$absolute,$is_pdf,$cdom,$cnum,$hostname);
         $linktext,$explanation,$width,$height);  
   
     for ($url){      for ($url){
         s|^/adm/wrapper||;          s|^/adm/wrapper||;
         $is_ext = $_ =~ s|^/ext/|http://|;          $is_ext = $_ =~ s|^/ext/|http://|;
         s|http://https://|https://| if ($is_ext);          s|http://https://?|https://| if ($is_ext);
         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$}) {  
         $cdom = $1;  
         $cnum = $2;  
         my $marker = $3;  
         $exttool = 'iframe';  
         my $exttoolremote;  
         my %toolhash = &Apache::lonnet::get('exttool_'.$marker,['target','linktext','explanation','id','width','height'],  
                                             $cdom,$cnum);  
         if ($toolhash{'id'}) {  
             my %ltitools = &Apache::lonnet::get_domain_lti($cdom,'consumer');  
             if (ref($ltitools{$toolhash{'id'}}) eq 'HASH') {  
                 $exttoolremote = $ltitools{$toolhash{'id'}}{'url'};  
             }  
         }  
         if ($toolhash{'target'} eq 'window') {  
             $exttool = 'window';  
             $width = $toolhash{'width'};  
             $height = $toolhash{'height'};  
         } elsif ($toolhash{'target'} eq 'tab') {  
             $exttool = 'tab';  
         }  
         if (($exttool eq 'window') || ($exttool eq 'tab')) {  
             $linktext = $toolhash{'linktext'};  
             $explanation = $toolhash{'explanation'};  
         } elsif (($exttoolremote =~ /^http:/) && ($ENV{'SERVER_PORT'} == 443)) {  
             $exttool = 'tab';  
         }  
     }      }
     if (($is_ext) || ($exttool)) {   
       if ($is_ext) {
         &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},          &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
             ['forceedit','register','folderpath','symb','idx','title','anchor']);              ['forceedit','register','folderpath','symb','idx','title','anchor']);
         if (($env{'form.forceedit'}) &&          if (($env{'form.forceedit'}) &&
Line 329  sub handler { Line 252  sub handler {
                     $url .= '#'.$env{'form.anchor'};                      $url .= '#'.$env{'form.anchor'};
                 }                  }
             }              }
             my $type = 'ext';              if (($url =~ /^http:/) && ($ENV{'SERVER_PORT'} == 443)) {
             if ($exttool) {  
                 $type = 'tool';  
             } elsif (($url =~ /^http:/) && ($ENV{'SERVER_PORT'} == 443)) {  
                 $hostname = $r->hostname();                  $hostname = $r->hostname();
             }              }
               my $type = 'ext';
             $r->print(              $r->print(
                 &Apache::lonextresedit::display_editor($url,$env{'form.folderpath'},                  &Apache::lonextresedit::display_editor($url,$env{'form.folderpath'},
                                                        $env{'form.symb'},                                                         $env{'form.symb'},
Line 345  sub handler { Line 266  sub handler {
             my $crstype = &Apache::loncommon::course_type();              my $crstype = &Apache::loncommon::course_type();
             my $title = $env{'form.title'};              my $title = $env{'form.title'};
             if ($title eq '') {              if ($title eq '') {
                 if ($is_ext) {                  $title = &mt('External Resource');
                     $title = &mt('External Resource');  
                 } else {  
                     $title = &mt('External Tool');  
                 }  
             }              }
             $brcrum =              $brcrum =
                 &Apache::lonhtmlcommon::docs_breadcrumbs(undef,$crstype,undef,$title,1);                  &Apache::lonhtmlcommon::docs_breadcrumbs(undef,$crstype,undef,$title,1);
Line 359  sub handler { Line 276  sub handler {
 #  #
 # Actual URL  # Actual URL
 #  #
     if (($url=~/$LONCAPA::assess_re/) && (!$exttool)) {      if ($url=~/$LONCAPA::assess_re/) {
 #  #
 # This is uploaded homework  # This is uploaded homework
 #  #
Line 369  sub handler { Line 286  sub handler {
 #  #
 # This is not homework  # This is not homework
 #  #
         if (($is_ext) || ($exttool)) {          if ($is_ext) {
             $absolute = $env{'request.use_absolute'};              $absolute = $env{'request.use_absolute'};
             $ENV{'QUERY_STRING'} =~ s/(^|\&)symb=[^\&]*/$1/;              $ENV{'QUERY_STRING'} =~ s/(^|\&)symb=[^\&]*/$1/;
             $ENV{'QUERY_STRING'} =~ s/\&$//;              $ENV{'QUERY_STRING'} =~ s/\&$//;
Line 380  sub handler { Line 297  sub handler {
         }          }
   
         # encrypt url if not external          # encrypt url if not external
         unless ($is_ext) {          &Apache::lonenc::check_encrypt(\$url) if $url !~ /^https?\:/ ;
             &Apache::lonenc::check_encrypt(\$url);  
         }  
   
         $r->print( wrapper($r,$url,$brcrum,$absolute,$is_ext,$is_pdf,$exttool,          $r->print( wrapper($r,$url,$brcrum,$absolute,$is_ext,$is_pdf) );
                            $linktext,$explanation,undef,$width,$height) );  
   
     } # not just the menu      } # not just the menu
           
Line 412  described at http://www.lon-capa.org. Line 326  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($r,$url,$brcrum,$absolute,$is_ext,$is_pdf,$title))
   
 =over  =over
   
Line 460  true if URL is for a PDF (based on file Line 374  true if URL is for a PDF (based on file
   
 =item $title  =item $title
   
 optional. If wrapped item is a PDF, and $clientmobile is true,  optional. If wrapped item is a PDF, and $env{'browser.mobile'} 
 a link to a PDF is shown. The "title" will be displayed  is true, a link to a PDF is shown. The "title" will be displayed
 above the link, but if not provided as an arg, $env{'form.title'}  above the link, but if not provided as an arg, $env{'form.title'}
 will be used, otherwise, the filename will be displayed (unless  will be used, otherwise, the filename will be displayed (unless
 hidden URL set for the resource).  hidden URL set for the resource).

Removed from v.1.49.2.7.2.6  
changed lines
  Added in v.1.49.2.8


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