Diff for /rat/lonwrapper.pm between versions 1.42 and 1.49.2.10

version 1.42, 2012/11/27 23:45:15 version 1.49.2.10, 2020/03/05 22:05:50
Line 40  use Apache::lonextresedit(); Line 40  use Apache::lonextresedit();
   
 # ================================================================ Main Handler  # ================================================================ Main Handler
 sub wrapper {  sub wrapper {
     my ($url,$brcrum) = @_;      my ($r,$url,$brcrum,$absolute,$is_ext,$is_pdf,$title) = @_;
   
     my $forcereg;      my $forcereg;
     unless ($env{'form.folderpath'}) {      unless ($env{'form.folderpath'}) {
         $forcereg = 1;          $forcereg = 1;
     }      }
   
       my %lt = &Apache::lonlocal::texthash(
                                             'noif' => 'No iframe support.',
                                             'show' => 'Show content in pop-up window',
                                           );
   
       my ($anchor,$uselink,$linktext);
       if ($is_ext) {
           if ($env{'form.symb'}) {
               (undef,undef,my $res) = &Apache::lonnet::decode_symb($env{'form.symb'});
               if ($res =~ /(#[^#]+)$/) {
                   $anchor = $1;
               }
           } elsif ($env{'form.anchor'} ne '') {
               $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 $args = {'bgcolor' => '#FFFFFF'};      my $args = {'bgcolor' => '#FFFFFF'};
     if ($forcereg) {      if ($forcereg) {
         $args->{'force_register'} = $forcereg;          $args->{'force_register'} = $forcereg;
     }      }
     if (ref($brcrum) eq 'ARRAY') {      if (ref($brcrum) eq 'ARRAY') {
          $args->{'bread_crumbs'} = $brcrum;          $args->{'bread_crumbs'} = $brcrum;
       }
       if ($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 $headjs;
     my $endpage =  Apache::loncommon::end_page();  
   
     my $script = Apache::lonhtmlcommon::scripttag(<<SCRIPT );  #
     \$(document).ready( function() {  # Where iframe is in use, if window.onload() executes before the custom resize function
         \$(window).unbind('resize').resize(function(){  # has been defined (jQuery), two global javascript vars (LCnotready and LCresizedef)
             var header;  # are used to ensure document.ready() triggers a call to resize, so the iframe contents
             var offset = 5;  # do not obscure the Functions menu.
             var height = 0;  #
             var hdrtop = 0;  
             if (\$('div.LC_head_subbox:first').length) {      unless (($env{'browser.mobile'}) || $uselink) {
                 header = \$('div.LC_head_subbox:first');          $headjs = '
                 offset = 9;  <script type="text/javascript">
   // <![CDATA[
   var LCnotready = 0;
   var LCresizedef = 0;
   // ]]>
   </script>'."\n";
       }
   
       my $startpage = &Apache::loncommon::start_page('Menu',$headjs,$args);
       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'}) {
           my $output = $startpage;
           if ($is_pdf) {
               $linktext = &mt('Link to PDF (for mobile devices)');
               $output .= &create_link($url,$anchor,$title,$linktext);
           } else {
               if ($uselink) {
                   $linktext = &mt('Link to resource');
                   $output .= &create_link($url,$anchor,$title,$linktext);
             } else {              } else {
                 if (\$('#LC_breadcrumbs').length) {                  my $dest = &HTML::Entities::encode($url.$anchor,'&<>"');
                     header = \$('#LC_breadcrumbs');                  $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";
             }              }
             if (header.length) {          }
                 height = header.height();          $output .= $endpage;
                 hdrtop = header.position().top;          return $output;
       } elsif ($uselink) {
           $linktext = &mt('Link to resource');
           return $startpage.&create_link($url,$anchor,$title,$linktext).$endpage;
       } 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);
           \$(document).ready( function() {
               \$(window).unbind('resize').resize(function(){
                   var header = null;
                   var offset = $offset;
                   var height = 0;
                   var hdrtop = 0;
                   if (\$('div.LC_head_subbox:first').length) {
                       header = \$('div.LC_head_subbox:first');
                       offset = 9;
                   } else {
                       if (\$('#LC_breadcrumbs').length) {
                           header = \$('#LC_breadcrumbs');
                       }
                   }
                   if (header != null && header.length) {
                       height = header.height();
                       hdrtop = header.position().top;
                   }
                   var pos = height + hdrtop + offset;
                   \$('.LC_iframecontainer').css('top', pos);
               });
               LCresizedef = 1;
               if (LCnotready == 1) {
                   LCnotready = 0;
                   \$(window).trigger('resize');
             }              }
             var pos = height + hdrtop + offset;  
             \$('.LC_iframecontainer').css('top', pos);  
         });          });
     });          window.onload = function(){
     window.onload = function(){  \$(window).trigger('resize') };               if (LCresizedef) {
                   LCnotready = 0;
                   \$(window).trigger('resize');
               } else {
                   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)          return <<ENDFRAME;
     return <<ENDFRAME;          $startpage
     $startpage          $script
     $script          <div class="LC_iframecontainer">
     <div class="LC_iframecontainer">              <iframe src="$url$anchor">$lt{'noif'} $noiframe</iframe>
         <iframe src="$url">No iframe support!</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 {
Line 103  sub handler { Line 223  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);      my ($is_ext,$brcrum,$absolute,$is_pdf,$cdom,$cnum,$hostname);
   
     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://| if ($is_ext);
         s|&colon;|:|g;                        s|&colon;|:|g;
     }      }
   
       if ($url =~ /\.pdf$/i) {
           $is_pdf = 1;
       }
    
     if ($is_ext) {      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']);              ['forceedit','register','folderpath','symb','idx','title','anchor']);
         if (($env{'form.forceedit'}) &&          if (($env{'form.forceedit'}) &&
             (&Apache::lonnet::allowed('mdc',$env{'request.course.id'})) &&              (&Apache::lonnet::allowed('mdc',$env{'request.course.id'})) &&
             (($env{'form.folderpath'} =~ /^supplemental/) ||              (($env{'form.folderpath'} =~ /^supplemental/) ||
              ($env{'form.symb'} =~ /^uploaded/))) {               ($env{'form.symb'} =~ /^uploaded/))) {
               if ($env{'form.symb'}) {
                   (undef,undef,my $res) = &Apache::lonnet::decode_symb($env{'form.symb'});
                   if ($res =~ /(#[^#]+)$/) {
                       $url .= $1;
                   }
               } elsif ($env{'form.folderpath'} =~ /^supplemental/) {
                   if ($env{'form.anchor'} ne '') {
                       $url .= '#'.$env{'form.anchor'};
                   }
               }
               if (($url =~ /^http:/) && ($ENV{'SERVER_PORT'} == 443)) {
                   $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'},
                                                        $env{'form.idx'}));                                                         $env{'form.idx'},$type,$cdom,
                                                          $cnum,$hostname));
             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();
             $brcrum =              my $title = $env{'form.title'};
                 &Apache::lonhtmlcommon::docs_breadcrumbs(undef,$crstype,undef,$env{'form.title'},1);              if ($title eq '') {
             if (ref($brcrum) eq 'ARRAY') {                  $title = &mt('External Resource');
                 my $last = $env{'form.title'};  
                 if ($last eq '') {  
                     $last = &mt('External Resource');  
                 }  
                 push(@{$brcrum},  
                          {'title' => $last,  
                           'text' => $last,  
                           'no_mt' => 1,  
                          });  
   
             }              }
               $brcrum =
                   &Apache::lonhtmlcommon::docs_breadcrumbs(undef,$crstype,undef,$title,1);
         }          }
     }      }
   
Line 157  sub handler { Line 288  sub handler {
 # This is not homework  # This is not homework
 #  #
         if ($is_ext) {          if ($is_ext) {
               $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 168  sub handler { Line 300  sub handler {
         # encrypt url if not external          # encrypt url if not external
         &Apache::lonenc::check_encrypt(\$url) if $url !~ /^https?\:/ ;          &Apache::lonenc::check_encrypt(\$url) if $url !~ /^https?\:/ ;
   
         $r->print( wrapper($url,$brcrum) );          $r->print( wrapper($r,$url,$brcrum,$absolute,$is_ext,$is_pdf) );
   
     } # not just the menu      } # not just the menu
           
Line 195  described at http://www.lon-capa.org. Line 327  described at http://www.lon-capa.org.
   
 =over  =over
   
 =item wrapper($url,$brcrum)  =item wrapper($r,$url,$brcrum,$absolute,$is_ext,$is_pdf,$title))
   
   =over
   
   =item $r
   
   request object
   
   =item $url
   
   url to display by including in an iframe within a
   LON-CAPA page which has a standard LON-CAPA inline menu.
   
 Wraps $url in an iframe and generates a page for it.  =item $brcrum
 $brcrum contains breadcrumbs for unregistered urls  
   breadcrumbs for unregistered urls
 (i.e., external resources in Supplemental Content).  (i.e., external resources in Supplemental Content).
 Returns markup for the entire page.  
   
 =item handler()  =item $absolute
   
 =back  contains protocol (http or https) followed by
   the hostname, if menu items in the standard LON-CAPA
   interface created by the call to loncommon::start_page()
   within &wrapper() need to use absolute URLs rather than
   relative URLs.
   
 =cut  That will be the case where an external resource has been 
   served from port 80, when the server customarily serves
   requests using Apache/SSL (i.e., port 443). mod_rewrite 
   is used to switch requests for external resources and
   the syllabus: /public/<domain>/<courseid>/syllabus
   (which might also point at an external resource)
   from https:// to http:// where the the URL of the remote site 
   specified in the resource itself is http://.
   
   This is done to avoid default mixed content blocking
   in Firefox 23 and later, when serving from Apache/SSL.
   
   =item $is_ext
   
   true if URL is for an external resource.
   
   =item $is_pdf
   
   true if URL is for a PDF (based on file extension).
   
   =item $title
   
   optional. If wrapped item is a PDF, and $env{'browser.mobile'} 
   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'}
   will be used, otherwise, the filename will be displayed (unless
   hidden URL set for the resource).
   
   =back
   
   Returns markup for the entire page.
   
   =item handler()
   
   =back
   
   =cut
   

Removed from v.1.42  
changed lines
  Added in v.1.49.2.10


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