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

version 1.49.2.7.2.1, 2020/01/14 17:14:11 version 1.54, 2016/11/29 19:53:58
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,$title) = @_;
         $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 63  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 83  sub wrapper { Line 74  sub wrapper {
         $args->{'bread_crumbs'} = $brcrum;          $args->{'bread_crumbs'} = $brcrum;
     }      }
     if ($absolute) {      if ($absolute) {
         $args->{'use_absolute'} = $absolute;          $args->{'use_absolute'} = $absolute; 
     }  
     if ($env{'form.only_body'}) {  
         $args->{'only_body'} = $env{'form.only_body'};  
     }      }
   
     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{'browser.mobile'}) || ($exttool eq 'window')) {
         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')) {  
         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'};
         } elsif (($exttool eq 'window') || ($exttool eq 'tab')) {                  if ($title eq '') {
             if ($linktext eq '') {                      unless ($env{'request.enc'}) {
                 $linktext = &mt('Launch External Tool');                          ($title) = ($url =~ m{/([^/]+)$});
             }                          $title =~ s/(\?[^\?]+)$//;
             $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 '') {              unless ($title eq '') {
                 $output .= '<div>'.$explanation.'</div>';                  $output .= $title.'<br />';
             }              }
               $output .= '<a href="'.$url.'">'.&mt('Link to PDF (for mobile devices)').'</a>';
           } elsif ($exttool eq 'window') {
               $output .= '<div>'.
                          '<a href="'.$url.'" target="LC_LTI" style="padding:0;clear:both;margin:0;border:0">'.
                          &mt('Launch External Tool').'</a>'.
                          '</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;  
         &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['inhibitmenu']);  
         if ($env{'form.inhibitmenu'} eq 'yes') {  
             $offset = 0;  
         }  
         my $script = &Apache::lonhtmlcommon::scripttag(<<SCRIPT);          my $script = &Apache::lonhtmlcommon::scripttag(<<SCRIPT);
         \$(document).ready( function() {          \$(document).ready( function() {
             \$(window).unbind('resize').resize(function(){              \$(window).unbind('resize').resize(function(){
                 var header = null;                  var header = null;
                 var offset = $offset;                  var offset = 5;
                 var height = 0;                  var height = 0;
                 var hdrtop = 0;                  var hdrtop = 0;
                 if (\$('div.LC_head_subbox:first').length) {                  if (\$('div.LC_head_subbox:first').length) {
Line 198  ENDLINK Line 137  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 238  sub handler { Line 156  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,$exttool,$cdom,$cnum);
         $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://|;          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+)/exttools?$}) {
         $cdom = $1;          $cdom = $1;
         $cnum = $2;          $cnum = $2;
         my $marker = $3;          my $marker = $3;
         $exttool = 'iframe';          $exttool = 'iframe';
         my $exttoolremote;          my %toolhash = &Apache::lonnet::get('exttool_'.$marker,['target'],$cdom,$cnum);
         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') {          if ($toolhash{'target'} eq 'window') {
             $exttool = '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) || ($exttool)) {
Line 296  sub handler { Line 196  sub handler {
                 }                  }
             }              }
             my $type = 'ext';              my $type = 'ext';
               my %ltitools;
             if ($exttool) {              if ($exttool) {
                 $type = 'tool';                  $type = 'tool';
             } elsif (($url =~ /^http:/) && ($ENV{'SERVER_PORT'} == 443)) {                  %ltitools = &Apache::lonnet::get_domain_ltitools($cdom);
                 $hostname = $r->hostname();  
             }              }
             $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'},
                                                        $env{'form.idx'},$type,$cdom,                                                         $env{'form.idx'},$type,$cdom,
                                                        $cnum,$hostname));                                                         $cnum,\%ltitools));
             return OK;              return OK;
         } elsif ($env{'form.folderpath'} =~ /^supplemental/) {          } elsif ($env{'form.folderpath'} =~ /^supplemental/) {
             my $crstype = &Apache::loncommon::course_type();              my $crstype = &Apache::loncommon::course_type();
Line 325  sub handler { Line 225  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 346  sub handler { Line 246  sub handler {
         }          }
   
         # encrypt url if not external          # encrypt url if not external
         unless ($is_ext) {          unless ($is_ext || $exttool) {
             &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) );  
   
     } # not just the menu      } # not just the menu
           
Line 378  described at http://www.lon-capa.org. Line 277  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.54


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>
500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.