Diff for /rat/lonpageflip.pm between versions 1.52 and 1.57

version 1.52, 2005/03/01 00:22:57 version 1.57, 2005/11/08 17:57:53
Line 31  package Apache::lonpageflip; Line 31  package Apache::lonpageflip;
   
 use strict;  use strict;
 use Apache::Constants qw(:common :http REDIRECT);  use Apache::Constants qw(:common :http REDIRECT);
 use Apache::lonnet();  use Apache::lonnet;
 use HTML::TokeParser;  use HTML::TokeParser;
 use GDBM_File;  use GDBM_File;
   
Line 63  sub addrid { Line 63  sub addrid {
   
 sub fullmove {  sub fullmove {
     my ($rid,$mapurl,$direction)=@_;      my ($rid,$mapurl,$direction)=@_;
     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)) {
  ($rid,$mapurl)=&move($rid,$mapurl,$direction);   ($rid,$mapurl)=&move($rid,$mapurl,$direction);
         untie(%hash);          untie(%hash);
Line 73  sub fullmove { Line 73  sub fullmove {
   
 sub hash_src {  sub hash_src {
     my ($id)=@_;      my ($id)=@_;
       my ($mapid,$resid)=split(/\./,$id);
       my $symb=&Apache::lonnet::encode_symb($hash{'map_id_'.$mapid},
     $resid,$hash{'src_'.$id});
     if ($hash{'encrypted_'.$id}) {      if ($hash{'encrypted_'.$id}) {
  return &Apache::lonenc::encrypted($hash{'src_'.$id});   return (&Apache::lonenc::encrypted($hash{'src_'.$id}),
    &Apache::lonenc::encrypted($symb));
     }      }
     return $hash{'src_'.$id};      return ($hash{'src_'.$id},$symb);
 }  }
   
 sub move {  sub move {
Line 171  sub move { Line 175  sub move {
               return ($next,$mapurl);                return ($next,$mapurl);
 }  }
   
   sub navlaunch {
       my ($r)=@_;
       &Apache::loncommon::content_type($r,'text/html');
       &Apache::loncommon::no_cache($r);
       $r->send_http_header;
       my $html=&Apache::lonxml::xmlbegin();
       $r->print("$html<head>\n");
       $r->print('</head>'.
         &Apache::loncommon::bodytag('Launched'));   
       $r->print(<<ENDNAV);
       <p><a href="/adm/flip?postdata=firstres%3a">Goto first resource</a></p>
       <script type="text/javascript">
    function collapse() {
       menu=window.open("/adm/navmaps?collapseExternal","loncapanav",
        "height=600,width=400,scrollbars=1");
       this.document.location='/adm/navmaps?turningOffExternal';
    }
       </script>
       <p><a href="javascript:collapse();">Collapse external navigation window</a></p>
   ENDNAV
       $r->print(&Apache::loncommon::endbodytag().'</html>');
   }
 # ================================================================ Main Handler  # ================================================================ Main Handler
   
 sub handler {  sub handler {
Line 187  sub handler { Line 213  sub handler {
   my %cachehash=();     my %cachehash=(); 
   my $multichoice=0;    my $multichoice=0;
   my %multichoicehash=();    my %multichoicehash=();
   my $redirecturl='';    my ($redirecturl,$redirectsymb);
   my $next='';    my $next='';
   my @possibilities=();    my @possibilities=();
    &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['postdata']);     &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/|) {        if ($currenturl=~m|^/enc/|) {
   $currenturl=&Apache::lonenc::unencrypted($currenturl);    $currenturl=&Apache::lonenc::unencrypted($currenturl);
       }        }
       $currenturl=~s/\.\d+\.(\w+)$/\.$1/;        $currenturl=~s/\.\d+\.(\w+)$/\.$1/;
       if ($direction eq 'return') {        if ($direction eq 'firstres') {
     my $furl;
     if (tie(my %bighash,'GDBM_File',$env{'request.course.fn'}.'.db',
     &GDBM_READER(),0640)) {
         $furl=$bighash{'first_url'};
         untie(%bighash);
     }
     &Apache::loncommon::content_type($r,'text/html');
     $r->header_out(Location => 
    'http://'.$ENV{'HTTP_HOST'}.$furl);
        
     return REDIRECT;
         }
         if ($direction eq 'return' || $direction eq 'navlaunch') {
 # -------------------------------------------------------- Return to last known  # -------------------------------------------------------- Return to last known
          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)) {
      $last=$hash{'last_known'};       $last=$hash{'last_known'};
              untie(%hash);               untie(%hash);
          }           }
          my $newloc;           my $newloc;
          if (($last) && (tie(%hash,'GDBM_File',$ENV{'request.course.fn'}.'.db',           if (($last) && (tie(%hash,'GDBM_File',$env{'request.course.fn'}.'.db',
                         &GDBM_READER(),0640))) {                          &GDBM_READER(),0640))) {
             my ($murl,$id,$fn)=&Apache::lonnet::decode_symb($last);              my ($murl,$id,$fn)=&Apache::lonnet::decode_symb($last);
     $id=$hash{'map_pc_'.&Apache::lonnet::clutter($murl)}.'.'.$id;      $id=$hash{'map_pc_'.&Apache::lonnet::clutter($murl)}.'.'.$id;
Line 217  sub handler { Line 256  sub handler {
  if ($hash{'encrypted_'.$id}) { $newloc=&Apache::lonenc::encrypted($newloc); }   if ($hash{'encrypted_'.$id}) { $newloc=&Apache::lonenc::encrypted($newloc); }
               
     } else {      } else {
  $newloc='/adm/noidea.html';   $newloc='/adm/navmaps';
     }      }
             untie %hash;              untie %hash;
          } else {           } else {
     $newloc='/adm/noidea.html';      $newloc='/adm/navmaps';
          }             }  
  &Apache::loncommon::content_type($r,'text/html');   if ($newloc eq '/adm/navmaps' && $direction eq 'navlaunch') {
          $r->header_out(Location =>        &navlaunch($r);
  'http://'.$ENV{'HTTP_HOST'}.$newloc);       return OK;
                                   } else {
          return REDIRECT;       &Apache::loncommon::content_type($r,'text/html');
        $r->header_out(Location => 
       'http://'.$ENV{'HTTP_HOST'}.$newloc);
        
        return REDIRECT;
    }
       }        }
       $currenturl=~s/^http\:\/\///;        $currenturl=~s/^http\:\/\///;
       $currenturl=~s/^[^\/]+//;        $currenturl=~s/^[^\/]+//;
Line 236  sub handler { Line 280  sub handler {
 #  #
       unless (&Apache::lonnet::is_on_map($currenturl)) {        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)) {
      $last=$hash{'last_known'};       $last=$hash{'last_known'};
              untie(%hash);               untie(%hash);
Line 244  sub handler { Line 288  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 {
      &Apache::loncommon::content_type($r,'text/html');       if ($direction eq 'return') {
              $r->header_out(Location =>    &Apache::loncommon::content_type($r,'text/html');
                                'http://'.$ENV{'HTTP_HOST'}.'/adm/noidea.html');   $r->header_out(Location => 
              return REDIRECT;   'http://'.$ENV{'HTTP_HOST'}.'/adm/noidea.html');
    return REDIRECT;
        } else {
    &navlaunch($r);
    return OK;
        }
          }           }
       }        }
 # ------------------------------------------- Do we have any idea where we are?  # ------------------------------------------- Do we have any idea where we are?
Line 260  sub handler { Line 309  sub handler {
                              [&Apache::lonnet::declutter($currenturl),$mapnum];                               [&Apache::lonnet::declutter($currenturl),$mapnum];
   
 # ============================================================ Tie the big hash  # ============================================================ Tie the big hash
           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)) {
               my $rid=$hash{'map_pc_'.&Apache::lonnet::clutter($startoutmap)}.                my $rid=$hash{'map_pc_'.&Apache::lonnet::clutter($startoutmap)}.
                       '.'.$mapnum;                        '.'.$mapnum;
Line 272  sub handler { Line 321  sub handler {
               my $safecount=0;                my $safecount=0;
               while (($next) && ($next!~/\,/) &&                 while (($next) && ($next!~/\,/) && 
                      ((!$hash{'src_'.$next}) ||                        ((!$hash{'src_'.$next}) || 
       ((!$ENV{'request.role.adv'}) && $hash{'randomout_'.$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 283  sub handler { Line 332  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,$redirectsymb)=&hash_src($next);
                       $cachehash{$endupmap}{$redirecturl}=                        $cachehash{$endupmap}{$redirecturl}=
   [$redirecturl,(split(/\./,$next))[1]];    [$redirecturl,(split(/\./,$next))[1]];
                   } else {                    } else {
Line 329  sub handler { Line 378  sub handler {
                      &Apache::lonnet::linklog($redirecturl,$currenturl);                       &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
                                   ('critical',$ENV{'user.domain'},                                    ('critical',$env{'user.domain'},
                                               $ENV{'user.name'});                                                $env{'user.name'});
                      if ($what[0]) {                       if ($what[0]) {
                 if (($what[0] ne 'con_lost') &&                   if (($what[0] ne 'con_lost') && 
                             ($what[0]!~/^error\:/)) {                              ($what[0]!~/^error\:/)) {
                    $redirecturl='/adm/email?critical=display';                     $redirecturl='/adm/email?critical=display';
      $redirectsymb='';
                         }                          }
                      }                       }
                      &Apache::lonnet::appenv('user.criticalcheck.time'=>time);                       &Apache::lonnet::appenv('user.criticalcheck.time'=>time);
   }    }
   
   &Apache::loncommon::content_type($r,'text/html');    &Apache::loncommon::content_type($r,'text/html');
                   $r->header_out(Location =>     my $url='http://'.$ENV{'HTTP_HOST'}.$redirecturl;
                                 'http://'.$ENV{'HTTP_HOST'}.$redirecturl);    if ($redirectsymb ne '') { $url.='?symb='.$redirectsymb; }
                     $r->header_out(Location => $url);
                   return REDIRECT;                    return REDIRECT;
       } else {        } else {
 # --------------------------------------------------------- There was a problem  # --------------------------------------------------------- There was a problem
Line 394  ENDNONE Line 445  ENDNONE
      }       }
   } else {    } else {
 # ------------------------------------------------- Problem, could not tie hash  # ------------------------------------------------- Problem, could not tie hash
               $ENV{'user.error.msg'}="/adm/flip:bre:0:1:Course Data Missing";                $env{'user.error.msg'}="/adm/flip:bre:0:1:Course Data Missing";
               return HTTP_NOT_ACCEPTABLE;                 return HTTP_NOT_ACCEPTABLE; 
           }            }
       } else {        } else {
Line 406  ENDNONE Line 457  ENDNONE
       }        }
   } else {    } else {
 # -------------------------- Class was not initialized or page fliped strangely  # -------------------------- Class was not initialized or page fliped strangely
       $ENV{'user.error.msg'}="/adm/flip:bre:0:0:Choose Course";        $env{'user.error.msg'}="/adm/flip:bre:0:0:Choose Course";
       return HTTP_NOT_ACCEPTABLE;         return HTTP_NOT_ACCEPTABLE; 
   }     } 
 }  }

Removed from v.1.52  
changed lines
  Added in v.1.57


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