Diff for /rat/lonpageflip.pm between versions 1.67 and 1.77

version 1.67, 2006/03/19 23:06:00 version 1.77, 2008/11/20 15:19:05
Line 27 Line 27
 # http://www.lon-capa.org/  # http://www.lon-capa.org/
 #  #
   
   
   
 package Apache::lonpageflip;  package Apache::lonpageflip;
   
 use strict;  use strict;
   use LONCAPA;
 use Apache::Constants qw(:common :http REDIRECT);  use Apache::Constants qw(:common :http REDIRECT);
 use Apache::lonnet;  use Apache::lonnet;
   use Apache::loncommon();
 use HTML::TokeParser;  use HTML::TokeParser;
 use GDBM_File;  use GDBM_File;
   
Line 84  sub hash_src { Line 88  sub hash_src {
     return ($hash{'src_'.$id},$symb);      return ($hash{'src_'.$id},$symb);
 }  }
   
 # Inputs are a url, adn a hash ref of  sub move {
 # form name => value pairs      my ($next,$endupmap,$direction) = @_;
 # takes care of properly adding the form name elements and values to the       my $safecount=0;
 # the url doing proper escaping of the values and joining with ? or & as       my $allowed=0;
 # needed      do {
    ($next,$endupmap)=&get_next_possible_move($next,$endupmap,$direction);
 sub add_get_param {  
     my ($url,$form_data) = @_;   my $url = $hash{'src_'.$next};
     my $needs_question_mark = ($url !~ /\?/);   my ($mapid,$resid)=split(/\./,$next);
    my $symb = &Apache::lonnet::encode_symb($hash{'map_id_'.$mapid},
     while (my ($name,$value) = each(%$form_data)) {   $resid,$url);
  if ($needs_question_mark) {   if ($url eq '' || $symb eq '') {
     $url.='?';      $allowed = 0;
     $needs_question_mark = 0;   } else {
  } else {       my $priv = &Apache::lonnet::allowed('bre',$url,$symb);
     $url.='&';      $allowed = (($priv eq 'F') || ($priv eq '2'));
  }   }
  $url.=$name.'='.&Apache::lonnet::escape($form_data->{$name});   $safecount++;
     }      } while (   ($next)
     return $url;       && ($next!~/\,/)
        && (
       (!$hash{'src_'.$next})
    || (
           (!$env{'request.role.adv'})
        &&  $hash{'randomout_'.$next}
       )
    || (!$allowed)
    )
        && ($safecount<10000));
   
       return ($next,$endupmap);
 }  }
   
 sub move {  sub get_next_possible_move {
     my ($rid,$mapurl,$direction)=@_;      my ($rid,$mapurl,$direction)=@_;
     my $startoutrid=$rid;      my $startoutrid=$rid;
   
Line 221  sub navlaunch { Line 236  sub navlaunch {
 ENDNAV  ENDNAV
     $r->print(&Apache::loncommon::end_page());      $r->print(&Apache::loncommon::end_page());
 }  }
   
   sub first_accessible_resource {
       my $furl;
       if (tie(%hash,'GDBM_File',$env{'request.course.fn'}.'.db',
       &GDBM_READER(),0640)) {
    $furl=$hash{'first_url'};
    my %args;
    my ($url,$args) = split(/\?/,$furl);
    foreach my $pair (split(/\&/,$args)) {
       my ($name,$value) = split(/=/,$pair);
       $args{&unescape($name)} = &unescape($value);
    }
           if (!&Apache::lonnet::allowed('bre',$url,$args{'symb'})) {
   # 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');
   # Build the new URL
       my ($newmapid,$newresid)=split(/\./,$newrid);
       my $symb=&Apache::lonnet::encode_symb($newmap,$newresid,$hash{'src_'.$newrid});
       $furl=&add_get_param($hash{'src_'.$newrid},{ 'symb' => $symb });
       if ($hash{'encrypted_'.$newrid}) {
    $furl=&Apache::lonenc::encrypted($furl);
       }
    }
    untie(%hash);
    return $furl;
       } else {
    return '/adm/navmaps';
       }
   }
   
 # ================================================================ Main Handler  # ================================================================ Main Handler
   
 sub handler {  sub handler {
Line 250  sub handler { Line 295  sub handler {
       }        }
       $currenturl=~s/\.\d+\.(\w+)$/\.$1/;        $currenturl=~s/\.\d+\.(\w+)$/\.$1/;
       if ($direction eq 'firstres') {        if ($direction eq 'firstres') {
   my $furl;    my $furl=&first_accessible_resource();
   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');    &Apache::loncommon::content_type($r,'text/html');
   $r->header_out(Location =>     $r->header_out(Location => 
  'http://'.$ENV{'HTTP_HOST'}.$furl);   &Apache::lonnet::absolute_url().$furl);
             
   return REDIRECT;    return REDIRECT;
       }        }
Line 292  sub handler { Line 332  sub handler {
  } else {   } else {
      &Apache::loncommon::content_type($r,'text/html');       &Apache::loncommon::content_type($r,'text/html');
      $r->header_out(Location =>        $r->header_out(Location => 
     'http://'.$ENV{'HTTP_HOST'}.$newloc);      &Apache::lonnet::absolute_url().$newloc);
             
      return REDIRECT;       return REDIRECT;
  }   }
Line 315  sub handler { Line 355  sub handler {
      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 => 
  'http://'.$ENV{'HTTP_HOST'}.'/adm/noidea.html');   &Apache::lonnet::absolute_url().
    '/adm/noidea.html');
  return REDIRECT;   return REDIRECT;
      } else {       } else {
  &navlaunch($r);   &navlaunch($r);
Line 342  sub handler { Line 383  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 446  sub handler {
    $redirectsymb='';     $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');
   my $url='http://'.$ENV{'HTTP_HOST'}.$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 497  ENDMENU Line 530  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.67  
changed lines
  Added in v.1.77


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