Diff for /rat/lonsequence.pm between versions 1.2 and 1.3

version 1.2, 2000/10/16 21:09:33 version 1.3, 2000/10/17 10:36:17
Line 12 Line 12
 #  #
 # 10/16 Gerd Kortemeyer  # 10/16 Gerd Kortemeyer
   
 package Apache::lonambiguous;  package Apache::lonsequence;
   
 use strict;  use strict;
 use Apache::lonnet;  use Apache::lonnet;
 use Apache::Constants qw(:common REDIRECT);  use Apache::Constants qw(:common :http REDIRECT);
 use GDBM_File;  use GDBM_File;
   
   
Line 28  sub getlost { Line 28  sub getlost {
     $r->send_http_header;      $r->send_http_header;
     $r->print(      $r->print(
  '<head><title>Unknown Error</title></head><body bgcolor="#FFFFFF"><h1>'.   '<head><title>Unknown Error</title></head><body bgcolor="#FFFFFF"><h1>'.
  'LON-CAPA</h1>Could not handle ambiguous resource reference.<p>'.$errmsg.   'LON-CAPA</h1>Could not handle sequence resource reference.<p>'.$errmsg.
  '</body></html>');   '</body></html>');
 }  }
   
Line 47  sub handler { Line 47  sub handler {
    my %bighash;     my %bighash;
    my $requrl=$r->uri;     my $requrl=$r->uri;
   
 # ----------------------------------------------------------------- Tie db file  # ------------------------------------------------------------ Tie symb db file
   if ($ENV{'request.course.fn'}) {    if ($ENV{'request.course.fn'}) {
        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',
Line 55  sub handler { Line 55  sub handler {
    $last=$hash{'last_direction'};     $last=$hash{'last_direction'};
            untie(%hash);             untie(%hash);
        }         }
          my $direction='';
          my $prevmap='';
          if ($last) {
     ($prevmap,$direction)=(split(/\_\_\_/,$last));
          }
   # ------------------------------------------------------------- Tie big db file
        if (tie(%bighash,'GDBM_File',$ENV{'request.course.fn'}.'.db',         if (tie(%bighash,'GDBM_File',$ENV{'request.course.fn'}.'.db',
                     &GDBM_READER,0640)) {                      &GDBM_READER,0640)) {
            my $direction='';     my $disid='';
            my $prevmap='';             if ($direction eq 'back') {
    if ($last) {         $disid=$bighash{'map_finish_'.$requrl};
        ($prevmap,$direction)=(split(/\_\_\_/,$last));             } else {
                  $disid=$bighash{'map_start_'.$requrl};
              } 
              my $disurl='';
              if ($disid) {
          $disurl=$bighash{'src_'.$disid};
              }
              my $symb='';
              unless($disurl) {
                  if ($symb=&Apache::lonnet::symbread()) {
                  }
              }
   # --------------------------------------- Untie hash, make sure to come by here
              untie(%bighash);
              if ($disurl) {
   # -------------------------------------------------- Has first or last resource
          $r->content_type('text/html');
                  $r->header_out(Location => 'http://'.$ENV{'HTTP_HOST'}.$disurl);
                  return REDIRECT;
              } else {
   # ---------- Does not have first or last resource, try to find out where we are
                  unless ($symb) {
      $r->internal_redirect('/adm/ambiguous');
                  }
                  $r->content_type('text/html');
                  $r->send_http_header;
                  $r->print(<<ENDSYMB);
   <html><body>
   </body></html>
   ENDSYMB
                  return OK
            }             }
                 
 # ===== Stuff goes here  
           foreach $envkey (keys %ENV) {  
              if ($envkey=~/^form\.(\d+)\.(\d+)$/) {  
          my $mapid=$1;  
                  my $resid=$2;  
                  my $resurl=$bighash{'src_'.$mapid.'.'.$resid};  
                  &Apache::lonnet::symblist($bighash{'map_id_'.$mapid},  
            $resurl => $resid);  
                  $r->header_out(Location =>   
                                 'http://'.$ENV{'HTTP_HOST'}.$resurl);  
                  return REDIRECT;  
              }  
   }  
           untie(%bighash);  
        } else {         } else {
           &getlost($r,'Could not access course structure.');            &getlost($r,'Could not access course structure.');
           return OK;            return OK;
Line 87  sub handler { Line 108  sub handler {
    }     }
   
    return OK;     return OK;
   
 # ================================================================= TRASH BELOW  
   
 # ---------------------------------------------------------- Do we have a case?  
   
    my $thisfn;  
    unless (($thisfn=$ENV{'request.ambiguous'})&&($ENV{'request.course.fn'})) {  
        &getlost($r,'Could not find information on resource.');  
        return OK;  
    }  
         
 # ---------------------------------- Should this file have been part of a page?  
   
     $thisfn=&Apache::lonnet::declutter($thisfn);  
     my %hash;  
     my $syval='';  
       
     if (tie(%hash,'GDBM_File',$ENV{'request.course.fn'}.'_symb.db',  
                   &GDBM_READER,0640)) {  
        $syval=$hash{$thisfn};  
        untie(%hash);  
     }  
   
 # ---------------------------------------------------------- There was an entry  
   
     if ($syval) {  
   
        if ($syval=~/\_$/) {  
 # ----------------------------------- Okay, this should have appeared on a page  
    $syval=~s/\_\_\_$//;  
     $r->content_type('text/html');  
            $r->header_out(Location =>   
                 'http://'.$ENV{'HTTP_HOST'}.'/res/'.$syval);  
            return REDIRECT;  
        } else {  
 #  There is not really a problem (???), but cannot go back without endless loop  
            &getlost($r,'The nature of the problem is unclear');  
            return OK;  
        }  
     }  
   
 # ------------------------------------------------ Would be standalone resource  
   
    if (tie(%bighash,'GDBM_File',$ENV{'request.course.fn'}.'.db',  
                     &GDBM_READER,0640)) {  
 # ---------------------------------------------- Get ID(s) for current resource  
       my $ids=$bighash{'ids_/res/'.$thisfn};  
       if ($ids) {  
 # ------------------------------------------------------------------- Has ID(s)  
          my @possibilities=split(/\,/,$ids);  
          my $couldbe='';  
          map {  
              if (&Apache::lonnet::allowed('bre',$bighash{'src_'.$_})) {  
          if ($couldbe) {  
      $couldbe.=','.$_;  
                  } else {  
                      $couldbe=$_;  
                  }  
              }  
  } @possibilities;  
          if ($couldbe) {  
             @possibilities=split(/\,/,$couldbe);  
             if ($#possibilities>0) {  
 # ----------------------------------------------- Okay, really multiple choices  
                $r->content_type('text/html');  
                $r->send_http_header;  
                $r->print(<<ENDSTART);  
 <head><title>Choose Location</title></head>  
 <body bgcolor="#FFFFFF">  
 <h1>LON-CAPA</h1>  
 The resource you had been accessing appears more than once in this course,  
 and LON-CAPA has insufficient session information to determine which instance  
 of the resource you meant.  
 <p>  
 Please click on the instance of the resource you intended to access:  
 <p>  
 <form action="/adm/ambiguous" method=post>  
 <input type=hidden name=orgurl value="$thisfn">  
 <input type=hidden name=selecturl value=1>  
 <table border=2>  
 <tr><th>&nbsp;</th><th>Title</th><th>Type</th><th>Part of ...</th></tr>  
 ENDSTART  
                map {  
                    my $mapurl=$bighash{'map_id_'.(split(/\./,$_))[0]};  
                    $r->print('<tr><td><input type=submit value=Select name="'.  
                               $_.'"></td><td>'.$bighash{'title_'.$_}.  
                               '</td><td>'.$bighash{'type_'.$_}.  
                               '</td><td><a href="'.$mapurl.'">'.$mapurl.  
       '</a></td></tr>');  
                } @possibilities;  
                $r->print('</table></form></body></html>');  
        untie(%bighash);  
                return OK;  
             }  
          }  
       }  
       untie(%bighash);  
   }  
   
 # ------------------------------------ This handler should not have been called  
    &getlost($r,'Invalid call of handler');  
    return OK;  
 }  }
   
 1;  1;

Removed from v.1.2  
changed lines
  Added in v.1.3


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