Diff for /rat/lonambiguous.pm between versions 1.9 and 1.17

version 1.9, 2003/04/12 15:43:58 version 1.17, 2006/02/07 19:46:08
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 38  use Apache::lonnet; Line 33  use Apache::lonnet;
 use Apache::Constants qw(:common REDIRECT);  use Apache::Constants qw(:common REDIRECT);
 use GDBM_File;  use GDBM_File;
 use Apache::loncommon;  use Apache::loncommon;
   use Apache::lonlocal;
   
 my %bighash;  my %bighash;
   
Line 48  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
   
 sub getlost {  sub getlost {
     my ($r,$errmsg)=@_;      my ($r,$errmsg)=@_;
     $r->content_type('text/html');      $errmsg=&mt($errmsg);
       &Apache::loncommon::content_type($r,'text/html');
     $r->send_http_header;      $r->send_http_header;
     $r->print(      $r->print(
  '<head><title>Unknown Error</title></head>'.   '<head><title>Unknown Error</title></head>'.
Line 65  sub getlost { Line 63  sub getlost {
   
 # ================================================================ 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;
   
    if ($r->header_only) {     if ($r->header_only) {
       $r->content_type('text/html');        &Apache::loncommon::content_type($r,'text/html');
       $r->send_http_header;        $r->send_http_header;
       return OK;        return OK;
    }     }
   
 # ---------------------------------------------------------- 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 104  sub handler { Line 111  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 115  sub handler { Line 122  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 124  sub handler { Line 131  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 138  sub handler { Line 145  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 149  sub handler { Line 161  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 $bodytag=
                       &Apache::loncommon::bodytag('Pick Instance of Resource');                        &Apache::loncommon::bodytag('Pick Instance of Resource');
Line 174  and LON-CAPA has insufficient session in Line 199  and LON-CAPA has insufficient session in
 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></body></html>');
        untie(%bighash);         untie(%bighash);
                return OK;                 return OK;
             }              }

Removed from v.1.9  
changed lines
  Added in v.1.17


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