Diff for /rat/lonambiguous.pm between versions 1.10 and 1.18

version 1.10, 2003/09/22 03:02:06 version 1.18, 2006/03/19 23:06:00
Line 25 Line 25
 #  #
 # http://www.lon-capa.org/  # http://www.lon-capa.org/
 #  #
 # (TeX Content Handler  
 #  
 # 05/29/00,05/30,10/11 Gerd Kortemeyer)  
 #  
 # 10/11,10/12,10/16 Gerd Kortemeyer  
   
 package Apache::lonambiguous;  package Apache::lonambiguous;
   
Line 49  sub cleanup { Line 44  sub cleanup {
     &Apache::lonnet::logthis('Failed cleanup ambiguous: bighash');      &Apache::lonnet::logthis('Failed cleanup ambiguous: bighash');
         }          }
     }      }
       return OK;
 }  }
   
 # ----------------------------------------------------------- Could not resolve  # ----------------------------------------------------------- Could not resolve
Line 56  sub cleanup { Line 52  sub cleanup {
 sub getlost {  sub getlost {
     my ($r,$errmsg)=@_;      my ($r,$errmsg)=@_;
     $errmsg=&mt($errmsg);      $errmsg=&mt($errmsg);
     $r->content_type('text/html');      &Apache::loncommon::content_type($r,'text/html');
     $r->send_http_header;      $r->send_http_header;
     $r->print(      $r->print(&Apache::loncommon::start_page('Could not handle ambiguous resource reference').
  '<head><title>Unknown Error</title></head>'.        $errmsg.
   &Apache::loncommon::bodytag('Could not handle ambiguous resource reference').        (&Apache::loncommon::end_page());
   $errmsg.  
  '</body></html>');  
 }  }
   
 # ================================================================ Main Handler  # ================================================================ Main Handler
   
   sub make_symb {
       my ($id)=@_;
       my ($mapid,$resid)=split(/\./,$id);
       my $map=$bighash{'map_id_'.$mapid};
       my $res=$bighash{'src_'.$id};
       my $symb=&Apache::lonnet::encode_symb($map,$resid,$res);
       return $symb;
   }
   
 sub handler {  sub handler {
    my $r=shift;     my $r=shift;
   
Line 78  sub handler { Line 81  sub handler {
   
 # ---------------------------------------------------------- Is this selecting?  # ---------------------------------------------------------- Is this selecting?
     
    if ($ENV{'form.selecturl'}) {     if ($env{'form.selecturl'}) {
        my $envkey;         my $envkey;
        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)) {
           foreach $envkey (keys %ENV) {            foreach $envkey (keys %env) {
              if ($envkey=~/^form\.(\d+)\.(\d+)$/) {               if ($envkey=~/^form\.(\d+)\.(\d+)$/) {
 # ---------------------------------------------------- Update symb and redirect  # ---------------------------------------------------- Update symb and redirect
          my $mapid=$1;           my $mapid=$1;
                  my $resid=$2;                   my $resid=$2;
                  my $resurl=$bighash{'src_'.$mapid.'.'.$resid};                   my $resurl=$bighash{'src_'.$mapid.'.'.$resid};
                  &Apache::lonnet::symblist($bighash{'map_id_'.$mapid},                   &Apache::lonnet::symblist($bighash{'map_id_'.$mapid},
            $resurl => $resid);             $resurl => [$resurl,$resid]);
                  untie(%bighash);                   untie(%bighash);
                  $r->header_out(Location =>                    $r->header_out(Location => 
                                 'http://'.$ENV{'HTTP_HOST'}.$resurl);                                  'http://'.$ENV{'HTTP_HOST'}.$resurl);
Line 106  sub handler { Line 109  sub handler {
 # ---------------------------------------------------------- Do we have a case?  # ---------------------------------------------------------- Do we have a case?
   
    my $thisfn;     my $thisfn;
    unless (($thisfn=$ENV{'request.ambiguous'})&&($ENV{'request.course.fn'})) {     unless (($thisfn=$env{'request.ambiguous'})&&($env{'request.course.fn'})) {
        &getlost($r,'Could not find information on resource.');         &getlost($r,'Could not find information on resource.');
        return OK;         return OK;
    }     }
Line 117  sub handler { Line 120  sub handler {
     my %hash;      my %hash;
     my $syval='';      my $syval='';
           
     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)) {
        $syval=$hash{$thisfn};         $syval=$hash{$thisfn};
        untie(%hash);         untie(%hash);
Line 126  sub handler { Line 129  sub handler {
 # ---------------------------------------------------------- There was an entry  # ---------------------------------------------------------- There was an entry
   
     if ($syval) {      if ($syval) {
    my ($page,undef,$res)=&Apache::lonnet::decode_symb($syval);
        if ($syval=~/\_$/) {   if ($res eq 'page') {
 # ----------------------------------- Okay, this should have appeared on a page  # ----------------------------------- Okay, this should have appeared on a page
    $syval=~s/\_\_\_$//;     &Apache::loncommon::content_type($r,'text/html');
     $r->content_type('text/html');  
            $r->header_out(Location =>              $r->header_out(Location => 
                 'http://'.$ENV{'HTTP_HOST'}.'/res/'.$syval);    'http://'.$ENV{'HTTP_HOST'}.
     &Apache::lonnet::clutter($page));
            return REDIRECT;             return REDIRECT;
        } else {         } else {
 #  There is not really a problem (???), but cannot go back without endless loop  #  There is not really a problem (???), but cannot go back without endless loop
Line 140  sub handler { Line 143  sub handler {
            return OK;             return OK;
        }         }
     }      }
   # ------------------------------------Encrypted requests go straight to navmaps
      if ($env{'request.enc'}) {
          &Apache::loncommon::content_type($r,'text/html');
          $r->header_out(Location => 'http://'.$ENV{'HTTP_HOST'}.'/adm/navmaps');
          return REDIRECT;
      }
 # ------------------------------------------------ Would be standalone resource  # ------------------------------------------------ Would be standalone resource
   
    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)) {
 # ---------------------------------------------- Get ID(s) for current resource  # ---------------------------------------------- Get ID(s) for current resource
       my $ids=$bighash{'ids_'.&Apache::lonnet::clutter($thisfn)};        my $ids=$bighash{'ids_'.&Apache::lonnet::clutter($thisfn)};
Line 151  sub handler { Line 159  sub handler {
 # ------------------------------------------------------------------- Has ID(s)  # ------------------------------------------------------------------- Has ID(s)
          my @possibilities=split(/\,/,$ids);           my @possibilities=split(/\,/,$ids);
          my $couldbe='';           my $couldbe='';
          map {           foreach (@possibilities) {
              if (&Apache::lonnet::allowed('bre',$bighash{'src_'.$_})) {               if ($bighash{'encrypted_'.$_}) { next; }
        my $symb=&make_symb($_);
                if (&Apache::lonnet::allowed('bre',$bighash{'src_'.$_},$symb)) {
          if ($couldbe) {           if ($couldbe) {
      $couldbe.=','.$_;       $couldbe.=','.$_;
                  } else {                   } else {
                      $couldbe=$_;                       $couldbe=$_;
                  }                   }
              }               }
  } @possibilities;   }
          if ($couldbe) {           if ($couldbe) {
             @possibilities=split(/\,/,$couldbe);              @possibilities=split(/\,/,$couldbe);
       if ($#possibilities==0) {
    my $id=$possibilities[0];
    my $resurl=$bighash{'src_'.$id};
    my $mapurl=$bighash{'map_id_'.(split(/\./,$id))[0]};
    my $symb=&make_symb($id);
    &Apache::loncommon::content_type($r,'text/html');
    &Apache::lonnet::logthis('http://'.$ENV{'HTTP_HOST'}.$resurl.'?symb='.$symb);
    $r->header_out(Location => 
      'http://'.$ENV{'HTTP_HOST'}.$resurl.'?symb='.$symb);
    return REDIRECT;
       }
             if ($#possibilities>0) {              if ($#possibilities>0) {
 # ----------------------------------------------- Okay, really multiple choices  # ----------------------------------------------- Okay, really multiple choices
                $r->content_type('text/html');         &Apache::loncommon::content_type($r,'text/html');
                $r->send_http_header;                 $r->send_http_header;
                my $bodytag=                 my $start_page=
                       &Apache::loncommon::bodytag('Pick Instance of Resource');     &Apache::loncommon::start_page('Pick Instance of Resource');
                $r->print(<<ENDSTART);                 $r->print(<<ENDSTART);
 <head><title>Choose Location</title></head>  $start_page
 $bodytag  
 The resource you had been accessing appears more than once in this course,  The resource you had been accessing appears more than once in this course,
 and LON-CAPA has insufficient session information to determine which instance  and LON-CAPA has insufficient session information to determine which instance
 of the resource you meant.  of the resource you meant.
 <p>  <p>
 Please click on the instance of the resource you intended to access:  Please click on the instance of the resource you intended to access:
 <p>  </p>
 <form action="/adm/ambiguous" method=post>  <table border="2">
 <input type=hidden name=orgurl value="$thisfn">  <tr><th>Title</th><th>Part of ...</th></tr>
 <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  ENDSTART
                map {                 map {
      my $resurl=$bighash{'src_'.$_};
                    my $mapurl=$bighash{'map_id_'.(split(/\./,$_))[0]};                     my $mapurl=$bighash{'map_id_'.(split(/\./,$_))[0]};
                    $r->print('<tr><td><input type=submit value=Select name="'.     my $symb=&make_symb($_);
                               $_.'"></td><td>'.$bighash{'title_'.$_}.     $r->print('<tr><td><a href="'.$resurl.'?symb='.$symb.'">'.
                               '</td><td>'.$bighash{'type_'.$_}.       &Apache::lonnet::gettitle($symb).
                               '</td><td>'.       '</a></td><td>'.
                               ($mapurl=~/^\/uploaded\//?'':'<a href="'.$mapurl.'">').       &Apache::lonnet::gettitle($mapurl).'&nbsp;'.
                               &Apache::lonnet::gettitle($mapurl).'&nbsp;'.       '</td></tr>');
       ($mapurl=~/^\/uploaded\//?'':'</a>').'</td></tr>');  
                } @possibilities;                 } @possibilities;
                $r->print('</table></form></body></html>');                 $r->print('</table>'.&Apache::loncommon::end_page());
        untie(%bighash);         untie(%bighash);
                return OK;                 return OK;
             }              }

Removed from v.1.10  
changed lines
  Added in v.1.18


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.