Diff for /rat/lonpageflip.pm between versions 1.62 and 1.80.8.10

version 1.62, 2006/01/09 18:51:26 version 1.80.8.10, 2018/09/10 19:17:39
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 Apache::lonuserstate;
   use Apache::lonlocal;
 use HTML::TokeParser;  use HTML::TokeParser;
 use GDBM_File;  use GDBM_File;
   
Line 46  sub cleanup { Line 52  sub cleanup {
     &Apache::lonnet::logthis('Failed cleanup pageflip: hash');      &Apache::lonnet::logthis('Failed cleanup pageflip: hash');
         }          }
     }      }
       return OK;
 }  }
   
 sub addrid {  sub addrid {
Line 76  sub hash_src { Line 83  sub hash_src {
     my ($mapid,$resid)=split(/\./,$id);      my ($mapid,$resid)=split(/\./,$id);
     my $symb=&Apache::lonnet::encode_symb($hash{'map_id_'.$mapid},      my $symb=&Apache::lonnet::encode_symb($hash{'map_id_'.$mapid},
   $resid,$hash{'src_'.$id});    $resid,$hash{'src_'.$id});
       my $anchor;
       if ($hash{'ext_'.$id} eq 'true:') {
           if ($hash{'src_'.$id} =~ /(\#.+)$/) {
               $anchor = $1;
           }
       }
     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));   &Apache::lonenc::encrypted($symb),
                   $hash{'encrypted_'.$id},$anchor);
     }      }
     return ($hash{'src_'.$id},$symb);      return ($hash{'src_'.$id},$symb,$hash{'encrypted_'.$id},$anchor);
 }  }
   
 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 97  sub move { Line 144  sub move {
              $rid=$hash{'ids_'.$hash{'map_id_'.(split(/\./,$rid))[0]}};               $rid=$hash{'ids_'.$hash{'map_id_'.(split(/\./,$rid))[0]}};
                   }                    }
   foreach my $id (split(/\,/,$hash{'to_'.$rid})) {    foreach my $id (split(/\,/,$hash{'to_'.$rid})) {
       my $thiscond=       my $condition= $hash{'conditions_'.$hash{'goesto_'.$id}};
       &Apache::lonnet::directcondval($hash{'condid_'.$hash{'undercond_'.$id}});       my $rescond  = &Apache::lonnet::docondval($condition);
                       if ($thiscond>=$mincond) {       my $linkcond = &Apache::lonnet::directcondval($hash{'condid_'.$hash{'undercond_'.$id}});
        my $thiscond = ($rescond<$linkcond)?$rescond:$linkcond;
        if ($thiscond>=$mincond) {
           if ($posnext) {            if ($posnext) {
              $posnext.=','.$id.':'.$thiscond;               $posnext.=','.$id.':'.$thiscond;
                           } else {                            } else {
Line 137  sub move { Line 186  sub move {
              $rid=$hash{'ids_'.$hash{'map_id_'.(split(/\./,$rid))[0]}};               $rid=$hash{'ids_'.$hash{'map_id_'.(split(/\./,$rid))[0]}};
  }   }
  foreach my $id (split(/\,/,$hash{'from_'.$rid})) {   foreach my $id (split(/\,/,$hash{'from_'.$rid})) {
      my $thiscond=       my $condition= $hash{'conditions_'.$hash{'comesfrom_'.$id}};
       &Apache::lonnet::directcondval($hash{'condid_'.$hash{'undercond_'.$id}});       my $rescond  = &Apache::lonnet::docondval($condition);
        my $linkcond = &Apache::lonnet::directcondval($hash{'condid_'.$hash{'undercond_'.$id}});
        my $thiscond = ($rescond<$linkcond)?$rescond:$linkcond;
      if ($thiscond>=$mincond) {       if ($thiscond>=$mincond) {
  if ($posnext) {   if ($posnext) {
              $posnext.=','.$id.':'.$thiscond;               $posnext.=','.$id.':'.$thiscond;
Line 175  sub move { Line 226  sub move {
               return ($next,$mapurl);                return ($next,$mapurl);
 }  }
   
 sub navlaunch {  sub first_accessible_resource {
     my ($r)=@_;      my $furl;
     &Apache::loncommon::content_type($r,'text/html');      if (tie(%hash,'GDBM_File',$env{'request.course.fn'}.'.db',
     &Apache::loncommon::no_cache($r);      &GDBM_READER(),0640)) {
     $r->send_http_header;   $furl=$hash{'first_url'};
     my $html=&Apache::lonxml::xmlbegin();   my %args;
     $r->print("$html<head>\n");   my ($url,$args) = split(/\?/,$furl);
     $r->print('</head>'.   foreach my $pair (split(/\&/,$args)) {
       &Apache::loncommon::bodytag('Launched'));         my ($name,$value) = split(/=/,$pair);
     $r->print(<<ENDNAV);      $args{&unescape($name)} = &unescape($value);
     <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>          if (!&Apache::lonnet::allowed('bre',$url,$args{'symb'})) {
     <p><a href="javascript:collapse();">Collapse external navigation window</a></p>  # Wow, we cannot see this ... move forward to the next one that we can see
 ENDNAV      my ($newrid,$newmap)=&move($hash{'first_rid'},$hash{'first_mapurl'},'forward');
     $r->print(&Apache::loncommon::endbodytag().'</html>');  # 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';
       }
 }  }
   
   sub reinited_js {
       my ($url,$cid,$timeout) = @_;
       if (!$timeout) {
           $timeout = 0;
       }
       return <<"END";
   <script type="text/javascript">
   // <![CDATA[
   setTimeout(function() {
       var newurl = '$url';
       if (document.getElementById('LC_update_$cid')) {
           document.getElementById('LC_update_$cid').style.display = 'none';
       }
       if ((newurl !== null) && (newurl !== '') && (newurl !== 'undefined')) {
           window.location.href = "$url";
       }
   }, $timeout);
   // ]]>
   </script>
   END
   }
   
 # ================================================================ Main Handler  # ================================================================ Main Handler
   
 sub handler {  sub handler {
Line 213  sub handler { Line 293  sub handler {
   my %cachehash=();     my %cachehash=(); 
   my $multichoice=0;    my $multichoice=0;
   my %multichoicehash=();    my %multichoicehash=();
   my ($redirecturl,$redirectsymb);    my %prog_state=(); 
     my ($redirecturl,$redirectsymb,$enc,$anchor);
   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+)\:(.*)/;        my ($direction,$currenturl) = ($env{'form.postdata'}=~/(\w+)\:(.*)/);
       my $direction=$1;  
       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/;
         $currenturl=~s/^https?\:\/\///;
         $currenturl=~s/^[^\/]+//;
         my ($preupdatepos,$last,$reinitcheck);
         if ($direction eq 'return') {
             if (tie(%hash,'GDBM_File',$env{'request.course.fn'}.'_symb.db',
                       &GDBM_READER(),0640)) {
                 $last=$hash{'last_known'};
                 untie(%hash);
             }
         }
         if ($env{'request.course.id'}) {
             # Check if course needs to be re-initialized
             my $loncaparev = $r->dir_config('lonVersion');
             ($reinitcheck,my @reinit) = &Apache::loncommon::needs_coursereinit($loncaparev);
             if ($reinitcheck eq 'switch') {
                 &Apache::loncommon::content_type($r,'text/html');
                 $r->send_http_header;
                 $r->print(&Apache::loncommon::check_release_result(@reinit));
                 return OK;
             } elsif ($reinitcheck eq 'update') {
                 my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
                 my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
                 $preupdatepos = &Apache::lonnet::symbread($currenturl);
                 unless ($direction eq 'return') {
                     if (tie(%hash,'GDBM_File',$env{'request.course.fn'}.'_symb.db',
                                   &GDBM_READER(),0640)) {
                         $last=$hash{'last_known'};
                         untie(%hash);
                     }
                 }
                 &Apache::loncommon::content_type($r,'text/html');
                 $r->send_http_header;
                 $r->print(&Apache::loncommon::start_page('Content Changed'));
                 my $preamble = '<div id="LC_update_'.$env{'request.course.id'}.'" class="LC_info">'.
                                '<br />'.
                                &mt('Your course session is being updated because of recent changes by course personnel.').
                                ' '.&mt('Please be patient.').'<br /></div>'.
                                '<div style="padding:0;clear:both;margin:0;border:0"></div>';
                 %prog_state = &Apache::lonhtmlcommon::Create_PrgWin($r,undef,$preamble);
                 &Apache::lonhtmlcommon::Update_PrgWin($r,\%prog_state,&mt('Updating course'));
                 my ($furl,$ferr) = &Apache::lonuserstate::readmap("$cdom/$cnum");
                 &Apache::lonhtmlcommon::Update_PrgWin($r,\%prog_state,&mt('Finished'));
                 if ($ferr) {
                     &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);
                     my $requrl = $r->uri;
                     $env{'user.error.msg'}="$requrl:bre:0:0:Course not initialized";
                     $env{'user.reinit'} = 1;
                     return HTTP_NOT_ACCEPTABLE;
                 } else {
                     if ($last) {
                         my ($murl,$id,$fn)=&Apache::lonnet::decode_symb($last);
                         unless (&Apache::lonnet::symbverify($last,$fn)) {
                             undef($last);
                         }
                     }
                 }
             }
         }
       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',            $furl=&Apache::lonnet::absolute_url().$furl;
   &GDBM_READER(),0640)) {            if ($reinitcheck eq 'update') {
       $furl=$bighash{'first_url'};                &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);
       untie(%bighash);                $r->print(&reinited_js($furl,$env{'request.course.id'},100));
   }                $r->print(&Apache::loncommon::end_page());
   &Apache::loncommon::content_type($r,'text/html');                return OK;
   $r->header_out(Location =>             } else {
  'http://'.$ENV{'HTTP_HOST'}.$furl);        &Apache::loncommon::content_type($r,'text/html');
              $r->header_out(Location => $furl);
   return REDIRECT;        return REDIRECT;
             }
       }        }
       if ($direction eq 'return' || $direction eq 'navlaunch') {        if ($direction eq 'return') { 
 # -------------------------------------------------------- Return to last known  # -------------------------------------------------------- Return to last known
          my $last;  
          if (tie(%hash,'GDBM_File',$env{'request.course.fn'}.'_symb.db',  
                     &GDBM_READER(),0640)) {  
      $last=$hash{'last_known'};  
              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))) {
Line 254  sub handler { Line 386  sub handler {
     $newloc=$hash{'src_'.$id};      $newloc=$hash{'src_'.$id};
     if ($newloc) {      if ($newloc) {
  if ($hash{'encrypted_'.$id}) { $newloc=&Apache::lonenc::encrypted($newloc); }   if ($hash{'encrypted_'.$id}) { $newloc=&Apache::lonenc::encrypted($newloc); }
         
     } else {      } else {
  $newloc='/adm/navmaps';   $newloc='/adm/navmaps';
     }      }
             untie %hash;              untie %hash;
          } else {           } else {
     $newloc='/adm/navmaps';      $newloc='/adm/navmaps';
          }             }
  if ($newloc eq '/adm/navmaps' && $direction eq 'navlaunch') {           $newloc=&Apache::lonnet::absolute_url().$newloc;
      &navlaunch($r);           if ($reinitcheck eq 'update') {
      return OK;               $r->print(&reinited_js($newloc,$env{'request.course.id'},100));
  } else {               $r->print(&Apache::loncommon::end_page());
      &Apache::loncommon::content_type($r,'text/html');               return OK;
      $r->header_out(Location =>            } else {
     'http://'.$ENV{'HTTP_HOST'}.$newloc);               &Apache::loncommon::content_type($r,'text/html');
                     $r->header_out(Location => $newloc);
      return REDIRECT;               return REDIRECT;
  }           }
       }        }
       $currenturl=~s/^http\:\/\///;  
       $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
 #  #
   
       unless (&Apache::lonnet::is_on_map($currenturl)) {        unless (&Apache::lonnet::is_on_map($currenturl)) {
  my $last;           if ($preupdatepos) {
          if (tie(%hash,'GDBM_File',$env{'request.course.fn'}.'_symb.db',               undef($preupdatepos);
                     &GDBM_READER(),0640)) {           } elsif (tie(%hash,'GDBM_File',$env{'request.course.fn'}.'_symb.db',
      $last=$hash{'last_known'};                              &GDBM_READER(),0640)) {
                $last=$hash{'last_known'};
              untie(%hash);               untie(%hash);
          }           }
          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') {               my $newloc = &Apache::lonnet::absolute_url().
  &Apache::loncommon::content_type($r,'text/html');                            '/adm/navmaps';
  $r->header_out(Location =>                if ($reinitcheck eq 'update') {
  'http://'.$ENV{'HTTP_HOST'}.'/adm/noidea.html');                   &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);
  return REDIRECT;                   $r->print(&reinited_js($newloc,$env{'request.course.id'},100));
      } else {                   $r->print(&Apache::loncommon::end_page());
  &navlaunch($r);                   return OK;
  return OK;               } else {
      }                   &Apache::loncommon::content_type($r,'text/html');
            $r->header_out(Location => $newloc);
            return REDIRECT;
                }
          }           }
       }        }
 # ------------------------------------------- Do we have any idea where we are?  # ------------------------------------------- Do we have any idea where we are?
       my $position;        my $position;
       if ($position=Apache::lonnet::symbread($currenturl)) {        if ($preupdatepos) {
             $position = $preupdatepos;
         } else {
             $position=Apache::lonnet::symbread($currenturl);
         }
         if ($position) {
 # ------------------------------------------------------------------------- Yes  # ------------------------------------------------------------------------- Yes
   my ($startoutmap,$mapnum,$thisurl)=&Apache::lonnet::decode_symb($position);    my ($startoutmap,$mapnum,$thisurl)=&Apache::lonnet::decode_symb($position);
           $cachehash{$startoutmap}{$thisurl}=[$thisurl,$mapnum];            $cachehash{$startoutmap}{$thisurl}=[$thisurl,$mapnum];
Line 318  sub handler { Line 457  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) {
                   @possibilities=split(/\,/,$next);                    @possibilities=split(/\,/,$next);
                   if ($#possibilities==0) {                    if ($#possibilities==0) {
 # ---------------------------------------------- Only one possibility, redirect  # ---------------------------------------------- Only one possibility, redirect
               ($redirecturl,$redirectsymb)=&hash_src($next);                ($redirecturl,$redirectsymb,$enc,$anchor)=&hash_src($next);
                       $cachehash{$endupmap}{$redirecturl}=                        $cachehash{$endupmap}{$redirecturl}=
   [$redirecturl,(split(/\./,$next))[1]];    [$redirecturl,(split(/\./,$next))[1]];
                   } else {                    } else {
Line 362  sub handler { Line 493  sub handler {
       untie(%hash);        untie(%hash);
 # --------------------------------------------------------- Store position info  # --------------------------------------------------------- Store position info
               $cachehash{$startoutmap}{'last_direction'}=[$direction,'notasymb'];                $cachehash{$startoutmap}{'last_direction'}=[$direction,'notasymb'];
               foreach my $thismap (keys %cachehash) {                foreach my $thismap (keys(%cachehash)) {
   my $mapnum=$cachehash{$thismap}->{'mapnum'};    my $mapnum=$cachehash{$thismap}->{'mapnum'};
   delete($cachehash{$thismap}->{'mapnum'});    delete($cachehash{$thismap}->{'mapnum'});
   &Apache::lonnet::symblist($thismap,    &Apache::lonnet::symblist($thismap,
Line 377  sub handler { Line 508  sub handler {
   if ($direction eq 'back') {    if ($direction eq 'back') {
                      &Apache::lonnet::linklog($redirecturl,$currenturl);                       &Apache::lonnet::linklog($redirecturl,$currenturl);
   }    }
 # ------------------------------------------------- Check for critical messages  # ------------------------------------- Check for and display critical messages
   if ((time-$env{'user.criticalcheck.time'})>300) {                    my ($redirect, $url) = &Apache::loncommon::critical_redirect(300);
                      my @what=&Apache::lonnet::dump                    unless ($redirect) {
                                   ('critical',$env{'user.domain'},                        $url=&Apache::lonnet::absolute_url().$redirecturl;
                                               $env{'user.name'});                        my $addanchor;
                      if ($what[0]) {                        if (($anchor ne '') && (!$enc || $env{'request.role.adv'})) {
                 if (($what[0] ne 'con_lost') &&                             $addanchor = 1;
                             ($what[0]!~/^error\:/)) {                            $url =~ s/\#.+$//;
                    $redirecturl='/adm/email?critical=display';                        }
    $redirectsymb='';                        $url = &add_get_param($url, { 'symb' => $redirectsymb});
                         }                        if ($addanchor) {
                      }                            $url .= $anchor;
                      &Apache::lonnet::appenv('user.criticalcheck.time'=>time);                        }
   }                    }
                     if ($reinitcheck eq 'update') {
   &Apache::loncommon::content_type($r,'text/html');                        &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);
   my $url='http://'.$ENV{'HTTP_HOST'}.$redirecturl;                        $r->print(&reinited_js($url,$env{'request.course.id'},100));
   if ($redirectsymb ne '') { $url.='?symb='.&Apache::lonnet::escape($redirectsymb); }                        $r->print(&Apache::loncommon::end_page());
                   $r->header_out(Location => $url);                        return OK;
                   return REDIRECT;                    } else {
                         &Apache::loncommon::content_type($r,'text/html');
                         $r->header_out(Location => $url);
                         return REDIRECT;
                     }
       } else {        } else {
 # --------------------------------------------------------- There was a problem  # --------------------------------------------------------- There was a problem
                   &Apache::loncommon::content_type($r,'text/html');                    &Apache::loncommon::content_type($r,'text/html');
Line 405  sub handler { Line 540  sub handler {
      'explain' =>       'explain' =>
      'You have reached the end of the sequence of materials.',       'You have reached the end of the sequence of materials.',
      'back' => 'Go Back',       'back' => 'Go Back',
      'nav' => 'Navigate Course Content',       'nav' => 'Course Contents',
      'wherenext' =>       'wherenext' =>
      'There are several possibilities of where to go next',       'There are several possibilities of where to go next',
      'pick' =>       'pick' =>
      'Please click on the the resource you intend to access',       'Please click on the the resource you intend to access',
      'titleheader' => 'Title',       'titleheader' => 'Title',
      'type' => 'Type');       'type' => 'Type',
                                                        'update' => 'Content updated',
                                                        'expupdate' => 'As a result of a recent update to the sequence of materials, it is not possible to complete the page flip.',
                                                        'gonav' => 'Go to the Contents page to select a resource to display.');
                     if (&Apache::loncommon::course_type() eq 'Community') {
                         $lt{'nav'} = &mt('Community Contents');
                     }
                   if ($#possibilities>0) {                    if ($#possibilities>0) {
       my $bodytag=        my $start_page=
                              &Apache::loncommon::bodytag('Multiple Resources');    &Apache::loncommon::start_page('Multiple Resources');
                      $r->print(<<ENDSTART);                       $r->print(<<ENDSTART);
 <head><title>Choose Next Location</title></head>  $start_page
 $bodytag  
 <h3>$lt{'wherenext'}</h3>  <h3>$lt{'wherenext'}</h3>
 <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) {
                         $r->print(                          $r->print(
                               '<tr><td><a href="'.                                '<tr><td><a href="'.
                               $multichoicehash{'src_'.$id}.'?symb=' .    &add_get_param($multichoicehash{'src_'.$id},
                                   Apache::lonnet::escape($multichoicehash{'symb_'.$id}).'">'.   {'symb' =>
         $multichoicehash{'symb_'.$id},
     }).'">'.
                               $multichoicehash{'title_'.$id}.                                $multichoicehash{'title_'.$id}.
                               '</a></td><td>'.$multichoicehash{'type_'.$id}.                                '</a></td><td>'.$multichoicehash{'type_'.$id}.
       '</td></tr>');        '</td></tr>');
                      }                       }
                      $r->print('</table>');                       $r->print('</table>');
                   } else {                    } else {
       my $bodytag=&Apache::loncommon::bodytag('No Resource');                        if ($reinitcheck) {
       $r->print(<<ENDNONE);                            if (&Apache::loncommon::course_type() eq 'Community') {
 <head><title>No Resource</title></head>                                $r->print(
 $bodytag                                    &Apache::loncommon::start_page('Community Contents Updated'));
 <h3>$lt{'title'}</h3>                            } else { 
 <p>$lt{'explain'}</p>                                $r->print(
 ENDNONE                                    &Apache::loncommon::start_page('Course Contents Updated'));
                             }
                             $r->print('<h2>'.$lt{'update'}.'</h2>'
                                     .'<p>'.$lt{'expupdate'}.'<br />'
                                     .$lt{'gonav'}.'</p>');
                         } else {
                             $r->print(
                                 &Apache::loncommon::start_page('No Resource')
                                .'<h2>'.$lt{'title'}.'</h2>'
                                .'<p>'.$lt{'explain'}.'</p>');
                         }
   }    }
   $r->print(<<ENDMENU);                    if ((!@possibilities) && ($reinitcheck))  {
 <ul>                        $r->print(
 <li><a href="/adm/flip?postdata=return:">$lt{'back'}</a></li>                            &Apache::lonhtmlcommon::actionbox(
 <li><a href="/adm/navmaps">$lt{'nav'}</a></li>                                ['<a href="/adm/navmaps">'.$lt{'nav'}.'</a></li>'
 </ul></body></html>                                ]));
 ENDMENU                    } else {
                         $r->print(
                             &Apache::lonhtmlcommon::actionbox(
                                 ['<a href="/adm/flip?postdata=return:">'.$lt{'back'}.'</a></li>',
                                  '<a href="/adm/navmaps">'.$lt{'nav'}.'</a></li>'
                                 ]));
                     }
                     $r->print(&Apache::loncommon::end_page());
         
                   return OK;                    return OK;
       }        }
   } else {    } else {
 # ------------------------------------------------- Problem, could not tie hash  # ------------------------------------------------- Problem, could not tie hash
                 if ($reinitcheck eq 'update') {
                     &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);
                     $r->print(&Apache::loncommon::end_page());
                 }
               $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 {
 # ---------------------------------------- No, could not determine where we are  # ---------------------------------------- No, could not determine where we are
   $r->internal_redirect('/adm/ambiguous');            my $newloc = '/adm/ambiguous';
             if ($reinitcheck eq 'update') {
                 &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);
                 $r->print(&reinited_js($newloc,$env{'request.course.id'},100));
                 $r->print(&Apache::loncommon::end_page());
             } else {
         $r->internal_redirect($newloc);
             }
             return OK;
       }        }
   } else {    } else {
 # -------------------------- Class was not initialized or page fliped strangely  # -------------------------- Class was not initialized or page fliped strangely
Line 471  ENDMENU Line 643  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 first_accessible_resource()
   
   =item handler()
   
   =back
   
   =cut
   
   
   

Removed from v.1.62  
changed lines
  Added in v.1.80.8.10


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.