Diff for /rat/lonpageflip.pm between versions 1.34 and 1.51

version 1.34, 2003/01/14 18:47:50 version 1.51, 2005/02/17 09:09:57
Line 26 Line 26
 #  #
 # http://www.lon-capa.org/  # http://www.lon-capa.org/
 #  #
 # (Page Handler  
 #  
 # (TeX Content Handler  
 #  
 # 05/29/00,05/30 Gerd Kortemeyer)  
 # 08/30,08/31,09/06,09/14,09/15,09/16,09/19,09/20,09/21,09/23,  
 # 10/02 Gerd Kortemeyer)  
 #  
 # 10/03,10/05,10/06,10/07,10/09,10/10,10/11,10/16,10/17,  
 # 11/14,11/16,  
 # 10/01/01,05/01,05/28,07/05 Gerd Kortemeyer  
   
 package Apache::lonpageflip;  package Apache::lonpageflip;
   
Line 82  sub fullmove { Line 71  sub fullmove {
     return($rid,$mapurl);      return($rid,$mapurl);
 }  }
   
   sub hash_src {
       my ($id)=@_;
       if ($hash{'encrypted_'.$id}) {
    return &Apache::lonenc::encrypted($hash{'src_'.$id});
       }
       return $hash{'src_'.$id};
   }
   
 sub move {  sub move {
     my ($rid,$mapurl,$direction)=@_;      my ($rid,$mapurl,$direction)=@_;
     my $startoutrid=$rid;      my $startoutrid=$rid;
Line 120  sub move { Line 117  sub move {
       $hash{'map_type_'.$hash{'map_pc_'.$hash{'src_'.$next}}} eq 'sequence') {        $hash{'map_type_'.$hash{'map_pc_'.$hash{'src_'.$next}}} eq 'sequence') {
   $mapurl=$hash{'src_'.$next};    $mapurl=$hash{'src_'.$next};
   $next=$hash{'map_start_'.$hash{'src_'.$next}};    $next=$hash{'map_start_'.$hash{'src_'.$next}};
                        } elsif (
   # This jumps back up from an empty sequence, to a page up one level
                            $hash{'map_type_'.$hash{'map_pc_'.$hash{'src_'.$next}}} eq 'page') {
                            $mapurl=$hash{'map_id_'.(split(/\./,$next))[0]};
                      }                       }
                   } elsif                     } elsif 
                     ((split(/\./,$startoutrid))[0]!=(split(/\./,$next))[0]) {                      ((split(/\./,$startoutrid))[0]!=(split(/\./,$next))[0]) {
Line 156  sub move { Line 157  sub move {
       $hash{'map_type_'.$hash{'map_pc_'.$hash{'src_'.$next}}} eq 'sequence') {        $hash{'map_type_'.$hash{'map_pc_'.$hash{'src_'.$next}}} eq 'sequence') {
   $mapurl=$hash{'src_'.$next};    $mapurl=$hash{'src_'.$next};
   $next=$hash{'map_finish_'.$hash{'src_'.$next}};    $next=$hash{'map_finish_'.$hash{'src_'.$next}};
                      }                        } elsif (
         $hash{'map_type_'.$hash{'map_pc_'.$hash{'src_'.$next}}} eq 'page') {
   # This jumps back up from an empty sequence, to a page up one level
                             $mapurl=$hash{'map_id_'.(split(/\./,$next))[0]};
                         }
                   } elsif                     } elsif 
                     ((split(/\./,$startoutrid))[0]!=(split(/\./,$next))[0]) {                      ((split(/\./,$startoutrid))[0]!=(split(/\./,$next))[0]) {
 # This comes back up from a map (going up one level);  # This comes back up from a map (going up one level);
Line 174  sub handler { Line 179  sub handler {
 # ------------------------------------------- Set document type for header only  # ------------------------------------------- Set document type for header only
   
   if ($r->header_only) {    if ($r->header_only) {
      $r->content_type('text/html');        &Apache::loncommon::content_type($r,'text/html');
      $r->send_http_header;        $r->send_http_header;
      return OK;        return OK;
   }    }
   
   my %cachehash=();     my %cachehash=(); 
Line 185  sub handler { Line 190  sub handler {
   my $redirecturl='';    my $redirecturl='';
   my $next='';    my $next='';
   my @possibilities=();    my @possibilities=();
      &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['postdata']);
   if (($ENV{'form.postdata'})&&($ENV{'request.course.fn'})) {    if (($ENV{'form.postdata'})&&($ENV{'request.course.fn'})) {
       $ENV{'form.postdata'}=~/(\w+)\:(.*)/;        $ENV{'form.postdata'}=~/(\w+)\:(.*)/;
       my $direction=$1;        my $direction=$1;
       my $currenturl=$2;        my $currenturl=$2;
         if ($currenturl=~m|^/enc/|) {
     $currenturl=&Apache::lonenc::unencrypted($currenturl);
         }
         $currenturl=~s/\.\d+\.(\w+)$/\.$1/;
       if ($direction eq 'return') {        if ($direction eq 'return') {
 # -------------------------------------------------------- Return to last known  # -------------------------------------------------------- Return to last known
          my $last;           my $last;
Line 198  sub handler { Line 208  sub handler {
              untie(%hash);               untie(%hash);
          }           }
          my $newloc;           my $newloc;
          if ($last) {           if (($last) && (tie(%hash,'GDBM_File',$ENV{'request.course.fn'}.'.db',
             $newloc=&Apache::lonnet::clutter((split(/\_\_\_/,$last))[1]);                          &GDBM_READER(),0640))) {
               my ($murl,$fn)=&Apache::lonnet::decode_symb($last);
               my $id;
               ($murl,$id,$fn)=&Apache::lonnet::decode_symb(&Apache::lonnet::symbread($fn));
       $id=$hash{'map_pc_'.&Apache::lonnet::clutter($murl)}.'.'.$id;
       $newloc=$hash{'src_'.$id};
       if ($newloc) {
    if ($hash{'encrypted_'.$id}) { $newloc=&Apache::lonenc::encrypted($newloc); }
         
       } else {
    $newloc='/adm/noidea.html';
       }
               untie %hash;
          } else {           } else {
     $newloc='/adm/noidea.html';      $newloc='/adm/noidea.html';
          }             }  
  $r->content_type('text/html');   &Apache::loncommon::content_type($r,'text/html');
          $r->header_out(Location =>            $r->header_out(Location => 
  'http://'.$ENV{'HTTP_HOST'}.$newloc);   'http://'.$ENV{'HTTP_HOST'}.$newloc);
                                                                 
Line 211  sub handler { Line 233  sub handler {
       }        }
       $currenturl=~s/^http\:\/\///;        $currenturl=~s/^http\:\/\///;
       $currenturl=~s/^[^\/]+//;        $currenturl=~s/^[^\/]+//;
       unless ($currenturl=~/^\/(res|adm\/wrapper|public|adm\/coursedocs)\//) {  #
   # Is the current URL on the map? If not, start with last known URL
   #
         unless (&Apache::lonnet::is_on_map($currenturl)) {
  my $last;   my $last;
          if (tie(%hash,'GDBM_File',$ENV{'request.course.fn'}.'_symb.db',           if (tie(%hash,'GDBM_File',$ENV{'request.course.fn'}.'_symb.db',
                     &GDBM_READER(),0640)) {                      &GDBM_READER(),0640)) {
Line 219  sub handler { Line 244  sub handler {
              untie(%hash);               untie(%hash);
          }           }
          if ($last) {           if ($last) {
      $currenturl=&Apache::lonnet::clutter((split(/\_\_\_/,$last))[1]);       $currenturl=&Apache::lonnet::clutter((&Apache::lonnet::decode_symb($last))[1]);
  } else {   } else {
      $r->content_type('text/html');       &Apache::loncommon::content_type($r,'text/html');
              $r->header_out(Location =>                $r->header_out(Location => 
                                'http://'.$ENV{'HTTP_HOST'}.'/adm/noidea.html');                                 'http://'.$ENV{'HTTP_HOST'}.'/adm/noidea.html');
              return REDIRECT;               return REDIRECT;
Line 231  sub handler { Line 256  sub handler {
       my $position;        my $position;
       if ($position=Apache::lonnet::symbread($currenturl)) {        if ($position=Apache::lonnet::symbread($currenturl)) {
 # ------------------------------------------------------------------------- Yes  # ------------------------------------------------------------------------- Yes
   my ($startoutmap,$mapnum,$thisurl)=split(/\_\_\_/,$position);    my ($startoutmap,$mapnum,$thisurl)=&Apache::lonnet::decode_symb($position);
           $cachehash{$startoutmap}{$thisurl}=$mapnum;            $cachehash{$startoutmap}{$thisurl}=$mapnum;
           $cachehash{$startoutmap}{'last_known'}=            $cachehash{$startoutmap}{'last_known'}=
                                        &Apache::lonnet::declutter($currenturl);                                         &Apache::lonnet::declutter($currenturl);
Line 248  sub handler { Line 273  sub handler {
 # -------------------------------------- Do we have one and only one empty URL?  # -------------------------------------- Do we have one and only one empty URL?
               my $safecount=0;                my $safecount=0;
               while (($next) && ($next!~/\,/) &&                 while (($next) && ($next!~/\,/) && 
                      ((!$hash{'src_'.$next}) || ($hash{'randomout_'.$next}))                       ((!$hash{'src_'.$next}) || 
         ((!$ENV{'request.role.adv'}) && $hash{'randomout_'.$next}))
                      && ($safecount<10000)) {                       && ($safecount<10000)) {
                   ($next,$endupmap)=&move($next,$endupmap,$direction);                    ($next,$endupmap)=&move($next,$endupmap,$direction);
                   $safecount++;                    $safecount++;
Line 259  sub handler { Line 285  sub handler {
                   @possibilities=split(/\,/,$next);                    @possibilities=split(/\,/,$next);
                   if ($#possibilities==0) {                    if ($#possibilities==0) {
 # ---------------------------------------------- Only one possibility, redirect  # ---------------------------------------------- Only one possibility, redirect
               $redirecturl=$hash{'src_'.$next};                $redirecturl=&hash_src($next);
                       $cachehash{$endupmap}                        $cachehash{$endupmap}
                                 {&Apache::lonnet::declutter($redirecturl)}                                  {&Apache::lonnet::declutter($redirecturl)}
                                  =(split(/\./,$next))[1];                                   =(split(/\./,$next))[1];
Line 300  sub handler { Line 326  sub handler {
 # ============================================== Do not return before this line  # ============================================== Do not return before this line
               if ($redirecturl) {                if ($redirecturl) {
 # ----------------------------------------------------- There is a URL to go to  # ----------------------------------------------------- There is a URL to go to
     if ($direction eq 'forward') {
                        &Apache::lonnet::linklog($currenturl,$redirecturl);
     }
     if ($direction eq 'back') {
                        &Apache::lonnet::linklog($redirecturl,$currenturl);
     }
 # ------------------------------------------------- Check for critical messages  # ------------------------------------------------- Check for critical messages
   if ((time-$ENV{'user.criticalcheck.time'})>300) {    if ((time-$ENV{'user.criticalcheck.time'})>300) {
                      my @what=&Apache::lonnet::dump                       my @what=&Apache::lonnet::dump
Line 314  sub handler { Line 346  sub handler {
                      &Apache::lonnet::appenv('user.criticalcheck.time'=>time);                       &Apache::lonnet::appenv('user.criticalcheck.time'=>time);
   }    }
   
   $r->content_type('text/html');    &Apache::loncommon::content_type($r,'text/html');
                   $r->header_out(Location =>                     $r->header_out(Location => 
                                 'http://'.$ENV{'HTTP_HOST'}.$redirecturl);                                  'http://'.$ENV{'HTTP_HOST'}.$redirecturl);
                   return REDIRECT;                    return REDIRECT;
       } else {        } else {
 # --------------------------------------------------------- There was a problem  # --------------------------------------------------------- There was a problem
                   $r->content_type('text/html');                    &Apache::loncommon::content_type($r,'text/html');
                   $r->send_http_header;                    $r->send_http_header;
                   if ($#possibilities>0) {                    if ($#possibilities>0) {
         my $bodytag=
                                &Apache::loncommon::bodytag('Multiple Resources');
                      $r->print(<<ENDSTART);                       $r->print(<<ENDSTART);
 <head><title>Choose Next Location</title></head>  <head><title>Choose Next Location</title></head>
 <body bgcolor="#FFFFFF">  $bodytag
 <h1>LON-CAPA</h1>  <h3>There are several possibilities of where to go next</h3>
 There are several possibilities of where to go next.  
 <p>  <p>
 Please click on the the resource you intend to access:  Please click on the the resource you intend to access:
 <p>  <p>
Line 346  ENDSTART Line 379  ENDSTART
                      $r->print('</table></body></html>');                       $r->print('</table></body></html>');
      return OK;       return OK;
                   } else {                    } else {
         my $bodytag=&Apache::loncommon::bodytag('No Resource');
                      $r->print(<<ENDNONE);                       $r->print(<<ENDNONE);
 <head><title>Choose Next Location</title></head>  <head><title>No Resource</title></head>
 <body bgcolor="#FFFFFF">  $bodytag
 <img src="/adm/lonIcons/lonlogos.gif" align=right>  <h3>Next resource could not be identified.</h3>
 <h1>Sorry!</h1>  <p>You probably are at the <b>beginning</b> or the <b>end</b> of the 
 <h2>Next resource could not be identified.</h2>  course.</p>
 <h3>You probably are at the beginning or the end of the course.</h3>  <ul>
   <li><a href="/adm/flip?postdata=return:">Go Back</a></li>
   <li><a href="/adm/navmaps">Navigate Course Content</a></li>
   </ul>
 </body>  </body>
 </html>  </html>
 ENDNONE  ENDNONE
Line 366  ENDNONE Line 403  ENDNONE
           }            }
       } else {        } else {
 # ---------------------------------------- No, could not determine where we are  # ---------------------------------------- No, could not determine where we are
          $r->internal_redirect('/adm/ambiguous');    if ( &Apache::lonnet::mod_perl_version() == 2 ) {
         &Apache::lonnet::cleanenv();
     }
     $r->internal_redirect('/adm/ambiguous');
       }        }
   } else {    } else {
 # -------------------------- Class was not initialized or page fliped strangely  # -------------------------- Class was not initialized or page fliped strangely

Removed from v.1.34  
changed lines
  Added in v.1.51


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