Diff for /rat/lonpageflip.pm between versions 1.70 and 1.80.8.2

version 1.70, 2006/08/18 20:24:53 version 1.80.8.2, 2013/05/10 23:24:19
Line 27 Line 27
 # http://www.lon-capa.org/  # http://www.lon-capa.org/
 #  #
   
   
   
 package Apache::lonpageflip;  package Apache::lonpageflip;
   
 use strict;  use strict;
Line 87  sub hash_src { Line 89  sub hash_src {
 }  }
   
 sub move {  sub move {
       my ($next,$endupmap,$direction) = @_;
       my $safecount=0;
       my $allowed=0;
       do {
    ($next,$endupmap)=&get_next_possible_move($next,$endupmap,$direction);
   
    my $url = $hash{'src_'.$next};
    my ($mapid,$resid)=split(/\./,$next);
    my $symb = &Apache::lonnet::encode_symb($hash{'map_id_'.$mapid},
    $resid,$url);
    if ($url eq '' || $symb eq '') {
       $allowed = 0;
    } else {
       my $priv = &Apache::lonnet::allowed('bre',$url,$symb);
       $allowed = (($priv eq 'F') || ($priv eq '2'));
    }
    $safecount++;
       } while (   ($next)
        && ($next!~/\,/)
        && (
       (!$hash{'src_'.$next})
    || (
           (!$env{'request.role.adv'})
        &&  $hash{'randomout_'.$next}
       )
    || (!$allowed)
    )
        && ($safecount<10000));
   
       return ($next,$endupmap);
   }
   
   sub get_next_possible_move {
     my ($rid,$mapurl,$direction)=@_;      my ($rid,$mapurl,$direction)=@_;
     my $startoutrid=$rid;      my $startoutrid=$rid;
   
Line 187  sub navlaunch { Line 222  sub navlaunch {
     &Apache::loncommon::content_type($r,'text/html');      &Apache::loncommon::content_type($r,'text/html');
     &Apache::loncommon::no_cache($r);      &Apache::loncommon::no_cache($r);
     $r->send_http_header;      $r->send_http_header;
     $r->print(&Apache::loncommon::start_page('Launched'));         $r->print(&Apache::loncommon::start_page('Launched'));
     $r->print(<<ENDNAV);      $r->print(<<ENDNAV);
     <p><a href="/adm/flip?postdata=firstres%3a">Goto first resource</a></p>      <p><a href="/adm/flip?postdata=firstres%3a">Goto first resource</a></p>
     <script type="text/javascript">      <script type="text/javascript">
  function collapse() {          function collapse() {
     menu=window.open("/adm/navmaps?collapseExternal","loncapanav",              menu=window.open("/adm/navmaps?collapseExternal","loncapanav",
      "height=600,width=400,scrollbars=1");                               "height=600,width=400,scrollbars=1");
     this.document.location='/adm/navmaps?turningOffExternal';              this.document.location='/adm/navmaps?turningOffExternal';
  }          }
     </script>      </script>
     <p><a href="javascript:collapse();">Collapse external navigation window</a></p>      <p><a href="javascript:collapse();">Collapse external navigation window</a></p>
 ENDNAV  ENDNAV
Line 207  sub first_accessible_resource { Line 242  sub first_accessible_resource {
     if (tie(%hash,'GDBM_File',$env{'request.course.fn'}.'.db',      if (tie(%hash,'GDBM_File',$env{'request.course.fn'}.'.db',
     &GDBM_READER(),0640)) {      &GDBM_READER(),0640)) {
  $furl=$hash{'first_url'};   $furl=$hash{'first_url'};
         if (!&Apache::lonnet::allowed('bre',$furl)) {   my %args;
    my ($url,$args) = split(/\?/,$furl);
    foreach my $pair (split(/\&/,$args)) {
       my ($name,$value) = split(/=/,$pair);
       $args{&unescape($name)} = &unescape($value);
    }
           if ((($env{'environment.remotenavmap'} eq 'on') && ($furl =~ m{^/adm/navmaps})) ||
               (!&Apache::lonnet::allowed('bre',$url,$args{'symb'}))) {
 # Wow, we cannot see this ... move forward to the next one that we can see  # Wow, we cannot see this ... move forward to the next one that we can see
     my ($newrid,$newmap)=&move($hash{'first_rid'},$hash{'first_mapurl'},'forward');      my ($newrid,$newmap)=&move($hash{'first_rid'},$hash{'first_mapurl'},'forward');
 # Build the new URL  # Build the new URL
     my ($newresid,$newmapid)=split(/\./,$newrid);      my ($newmapid,$newresid)=split(/\./,$newrid);
     my $symb=&Apache::lonnet::encode_symb($newmap,$newresid,$hash{'src_'.$newrid});      my $symb=&Apache::lonnet::encode_symb($newmap,$newresid,$hash{'src_'.$newrid});
     $furl=&add_get_param($hash{'src_'.$newrid},{ 'symb' => $symb });      $furl=&add_get_param($hash{'src_'.$newrid},{ 'symb' => $symb });
     if ($hash{'encrypted_'.$newrid}) {      if ($hash{'encrypted_'.$newrid}) {
Line 257  sub handler { Line 299  sub handler {
   my $furl=&first_accessible_resource();    my $furl=&first_accessible_resource();
   &Apache::loncommon::content_type($r,'text/html');    &Apache::loncommon::content_type($r,'text/html');
   $r->header_out(Location =>     $r->header_out(Location => 
  &Apache::loncommon::absolute_url().$furl);   &Apache::lonnet::absolute_url().$furl);
             
   return REDIRECT;    return REDIRECT;
       }        }
Line 284  sub handler { Line 326  sub handler {
             untie %hash;              untie %hash;
          } else {           } else {
     $newloc='/adm/navmaps';      $newloc='/adm/navmaps';
          }             }
  if ($newloc eq '/adm/navmaps' && $direction eq 'navlaunch') {           if (($newloc =~ m{^/adm/navmaps}) && ($direction eq 'navlaunch')) {
      &navlaunch($r);               &navlaunch($r);
      return OK;               return OK;
  } else {           } else {
      &Apache::loncommon::content_type($r,'text/html');       &Apache::loncommon::content_type($r,'text/html');
      $r->header_out(Location =>        $r->header_out(Location => 
     &Apache::loncommon::absolute_url().$newloc);      &Apache::lonnet::absolute_url().$newloc);
             
      return REDIRECT;       return REDIRECT;
  }           }
       }        }
       $currenturl=~s/^http\:\/\///;        $currenturl=~s/^https?\:\/\///;
       $currenturl=~s/^[^\/]+//;        $currenturl=~s/^[^\/]+//;
 #  #
 # Is the current URL on the map? If not, start with last known URL  # Is the current URL on the map? If not, start with last known URL
Line 311  sub handler { Line 353  sub handler {
          if ($last) {           if ($last) {
      $currenturl=&Apache::lonnet::clutter((&Apache::lonnet::decode_symb($last))[2]);       $currenturl=&Apache::lonnet::clutter((&Apache::lonnet::decode_symb($last))[2]);
  } else {   } else {
      if ($direction eq 'return') {               if ($direction eq 'return') {
  &Apache::loncommon::content_type($r,'text/html');   &Apache::loncommon::content_type($r,'text/html');
  $r->header_out(Location =>    $r->header_out(Location => 
  &Apache::loncommon::absolute_url().   &Apache::lonnet::absolute_url().
  '/adm/noidea.html');   '/adm/noidea.html');
  return REDIRECT;   return REDIRECT;
      } else {               } else {
  &navlaunch($r);                   &navlaunch($r);
  return OK;                   return OK;
      }               }
          }           }
       }        }
 # ------------------------------------------- Do we have any idea where we are?  # ------------------------------------------- Do we have any idea where we are?
Line 342  sub handler { Line 384  sub handler {
               my $endupmap;                my $endupmap;
               ($next,$endupmap)=&move($rid,$startoutmap,$direction);                ($next,$endupmap)=&move($rid,$startoutmap,$direction);
 # -------------------------------------- Do we have one and only one empty URL?  # -------------------------------------- Do we have one and only one empty URL?
               my $safecount=0;  
               while (($next) && ($next!~/\,/) &&   
                      ((!$hash{'src_'.$next}) ||   
       ((!$env{'request.role.adv'}) && $hash{'randomout_'.$next}))  
                      && ($safecount<10000)) {  
                   ($next,$endupmap)=&move($next,$endupmap,$direction);  
                   $safecount++;  
               }  
 # We are now at at least one non-empty URL  # We are now at at least one non-empty URL
 # ----------------------------------------------------- Check out possibilities  # ----------------------------------------------------- Check out possibilities
               if ($next) {                if ($next) {
Line 413  sub handler { Line 447  sub handler {
    $redirectsymb='';     $redirectsymb='';
                         }                          }
                      }                       }
                      &Apache::lonnet::appenv('user.criticalcheck.time'=>time);                       &Apache::lonnet::appenv({'user.criticalcheck.time'=>time});
   }    }
   
                     if (($redirecturl =~ m{^/adm/navmaps}) &&
                         ($env{'environment.remotenavmap'} eq 'on')) {
                         &navlaunch($r);
                         return OK;
                     }
   &Apache::loncommon::content_type($r,'text/html');    &Apache::loncommon::content_type($r,'text/html');
   my $url=&Apache::loncommon::absolute_url().$redirecturl;    my $url=&Apache::lonnet::absolute_url().$redirecturl;
   $url = &add_get_param($url, { 'symb' => $redirectsymb});    $url = &add_get_param($url, { 'symb' => $redirectsymb});
                   $r->header_out(Location => $url);                    $r->header_out(Location => $url);
                   return REDIRECT;                    return REDIRECT;
Line 445  $start_page Line 484  $start_page
 <p>  <p>
 $lt{'pick'}:  $lt{'pick'}:
 <p>  <p>
 <table border=2>  <table border="2">
 <tr><th>$lt{'titleheader'}</th><th>$lt{'type'}</th></tr>  <tr><th>$lt{'titleheader'}</th><th>$lt{'type'}</th></tr>
 ENDSTART  ENDSTART
                      foreach my $id (@possibilities) {                       foreach my $id (@possibilities) {
Line 486  ENDMENU Line 525  ENDMENU
       } else {        } else {
 # ---------------------------------------- No, could not determine where we are  # ---------------------------------------- No, could not determine where we are
   $r->internal_redirect('/adm/ambiguous');    $r->internal_redirect('/adm/ambiguous');
             return OK;
       }        }
   } else {    } else {
 # -------------------------- Class was not initialized or page fliped strangely  # -------------------------- Class was not initialized or page fliped strangely
Line 497  ENDMENU Line 537  ENDMENU
 1;  1;
 __END__  __END__
   
   =pod
   
   =head1 NAME
   
   Apache::lonpageflip
   
   =head1 SYNOPSIS
   
   Deals with forward, backward, and other page flips.
   
   This is part of the LearningOnline Network with CAPA project
   described at http://www.lon-capa.org.
   
   =head1 OVERVIEW
   
   (empty)
   
   =head1 SUBROUTINES
   
   =over cleanup()
   
   =item addrid()
   
   =item fullmove()
   
   =item hash_src()
   
   =item move()
   
   =item get_next_possible_move()
   
   =item navlaunch()
   
   =item first_accessible_resource()
   
   =item handler()
   
   =back
   
   =cut
   
   
   

Removed from v.1.70  
changed lines
  Added in v.1.80.8.2


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