Diff for /rat/lonpageflip.pm between versions 1.29 and 1.48

version 1.29, 2002/08/18 21:45:41 version 1.48, 2004/10/18 22:24:00
Line 50  use GDBM_File; Line 50  use GDBM_File;
       
 my %hash;  my %hash;
   
   sub cleanup {
       if (tied(%hash)){
    &Apache::lonnet::logthis('Cleanup pageflip: hash');
           unless (untie(%hash)) {
       &Apache::lonnet::logthis('Failed cleanup pageflip: hash');
           }
       }
   }
   
 sub addrid {  sub addrid {
     my ($current,$new,$condid)=@_;      my ($current,$new,$condid)=@_;
     unless ($condid) { $condid=0; }      unless ($condid) { $condid=0; }
Line 83  sub move { Line 92  sub move {
               my $posnext='';                my $posnext='';
               if ($direction eq 'forward') {                if ($direction eq 'forward') {
 # --------------------------------------------------------------------- Forward  # --------------------------------------------------------------------- Forward
                   if ($hash{'type_'.$rid} eq 'finish') {                    while ($hash{'type_'.$rid} eq 'finish') {
              $rid=$hash{'ids_'.&Apache::lonnet::clutter($mapurl)};                $rid=$hash{'ids_'.$hash{'map_id_'.(split(/\./,$rid))[0]}};
                   }                    }
                   map {                    map {
                       my $thiscond=                        my $thiscond=
Line 111  sub move { Line 120  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 119  sub move { Line 132  sub move {
                   }                    }
               } elsif ($direction eq 'back') {                } elsif ($direction eq 'back') {
 # ------------------------------------------------------------------- Backwards  # ------------------------------------------------------------------- Backwards
                   if ($hash{'type_'.$rid} eq 'start') {                   while ($hash{'type_'.$rid} eq 'start') {
              $rid=$hash{'ids_'.&Apache::lonnet::clutter($mapurl)};               $rid=$hash{'ids_'.$hash{'map_id_'.(split(/\./,$rid))[0]}};
                   }   }
                   map {                    map {
                       my $thiscond=                        my $thiscond=
       &Apache::lonnet::directcondval($hash{'condid_'.$hash{'undercond_'.$_}});        &Apache::lonnet::directcondval($hash{'condid_'.$hash{'undercond_'.$_}});
Line 147  sub move { Line 160  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 176  sub handler { Line 193  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;
         $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 189  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));
       $newloc=$hash{'src_'.
                   $hash{'map_pc_'.&Apache::lonnet::clutter($murl)}.'.'.$id};
               unless ($newloc) { $newloc='/adm/noidea.html'; }
               untie %hash;
          } else {           } else {
     $newloc='/adm/noidea.html';      $newloc='/adm/noidea.html';
          }             }  
Line 202  sub handler { Line 228  sub handler {
       }        }
       $currenturl=~s/^http\:\/\///;        $currenturl=~s/^http\:\/\///;
       $currenturl=~s/^[^\/]+//;        $currenturl=~s/^[^\/]+//;
       unless (($currenturl=~/^\/res\//) ||   #
               ($currenturl=~/^\/adm\/wrapper\//))  {  # 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 211  sub handler { Line 239  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');       $r->content_type('text/html');
              $r->header_out(Location =>                $r->header_out(Location => 
Line 223  sub handler { Line 251  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 240  sub handler { Line 268  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 262  sub handler { Line 291  sub handler {
   $multichoicehash{'src_'.$_}=$hash{'src_'.$_};    $multichoicehash{'src_'.$_}=$hash{'src_'.$_};
                           $multichoicehash{'title_'.$_}=$hash{'title_'.$_};                            $multichoicehash{'title_'.$_}=$hash{'title_'.$_};
                           $multichoicehash{'type_'.$_}=$hash{'type_'.$_};                            $multichoicehash{'type_'.$_}=$hash{'type_'.$_};
                             (my $first, my $second) = $_ =~ /(\d+).(\d+)/;
                             my $symbSrc = Apache::lonnet::declutter($hash{'src_'.$_});
                             $multichoicehash{'symb_'.$_} = 
                                 Apache::lonnet::declutter($hash{'map_id_'.$first}.'___'.
                                                           $second.'___'.$symbSrc);
                                                            
                           my ($choicemap,$choiceres)=split(/\./,$_);                            my ($choicemap,$choiceres)=split(/\./,$_);
                           $cachehash                            $cachehash
  {&Apache::lonnet::declutter($hash{'src_'.$choicemap})}   {&Apache::lonnet::declutter($hash{'src_'.$choicemap})}
Line 286  sub handler { Line 321  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
     if ((time-$ENV{'user.criticalcheck.time'})>300) {
                        my @what=&Apache::lonnet::dump
                                     ('critical',$ENV{'user.domain'},
                                                 $ENV{'user.name'});
                        if ($what[0]) {
                   if (($what[0] ne 'con_lost') && 
                               ($what[0]!~/^error\:/)) {
                      $redirecturl='/adm/email?critical=display';
                           }
                        }
                        &Apache::lonnet::appenv('user.criticalcheck.time'=>time);
     }
   
   $r->content_type('text/html');    $r->content_type('text/html');
                   $r->header_out(Location =>                     $r->header_out(Location => 
                                 'http://'.$ENV{'HTTP_HOST'}.$redirecturl);                                  'http://'.$ENV{'HTTP_HOST'}.$redirecturl);
Line 295  sub handler { Line 350  sub handler {
                   $r->content_type('text/html');                    $r->content_type('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 309  ENDSTART Line 365  ENDSTART
                      foreach (@possibilities) {                       foreach (@possibilities) {
                         $r->print(                          $r->print(
                               '<tr><td><a href="'.                                '<tr><td><a href="'.
                               $multichoicehash{'src_'.$_}.'">'.                                $multichoicehash{'src_'.$_}.'?symb=' .
                                     Apache::lonnet::escape($multichoicehash{'symb_'.$_}).'">'.
                               $multichoicehash{'title_'.$_}.                                $multichoicehash{'title_'.$_}.
                               '</a></td><td>'.$multichoicehash{'type_'.$_}.                                '</a></td><td>'.$multichoicehash{'type_'.$_}.
       '</td></tr>');        '</td></tr>');
Line 317  ENDSTART Line 374  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 337  ENDNONE Line 398  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.29  
changed lines
  Added in v.1.48


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.