Diff for /rat/lonsequence.pm between versions 1.8 and 1.17

version 1.8, 2002/05/23 10:19:30 version 1.17, 2004/05/21 20:16:40
Line 44  use Apache::Constants qw(:common :http R Line 44  use Apache::Constants qw(:common :http R
 use GDBM_File;  use GDBM_File;
 use Apache::lonratedt;  use Apache::lonratedt;
 use Apache::lonratsrv;  use Apache::lonratsrv;
   use Apache::lonpageflip;
   use Apache::loncommon;
   use Apache::lonlocal;
   
 # ----------------------------------------------------------- Could not resolve  my %selhash;
   my $successtied;
 sub getlost {  
     my ($r,$errmsg)=@_;  
     $r->content_type('text/html');  
     $r->send_http_header;  
     $r->print(  
  '<head><title>Unknown Error</title></head><body bgcolor="#FFFFFF"><h1>'.  
  'LON-CAPA</h1>Could not handle sequence resource reference.<p>'.$errmsg.  
  '</body></html>');  
 }  
   
   
 # ----------------------------------------- Attempt to read from resource space  # ----------------------------------------- Attempt to read from resource space
   
Line 70  sub attemptread { Line 63  sub attemptread {
     }      }
 }  }
   
   sub mapread {
       my $fn=shift;
       &Apache::lonnet::repcopy($fn);
       if (-e $fn) {
    return &Apache::lonratedt::mapread($fn,'');
       } else {
           return ();
       }
   }
   
 # ---------------------------------------------------------------- View Handler  # ---------------------------------------------------------------- View Handler
   
 sub viewmap {  sub viewmap {
     my ($r,$url,$adv,$errtext)=@_;      my ($r,$url)=@_;
     $r->print('<html>');      $r->print('<html>');
     if ($ENV{'form.forceselect'}) { $r->print(<<ENDSCRIPT);      if ($ENV{'form.forceselect'}) { $r->print(<<ENDSCRIPT);
 <script>  <script>
   
 function select_group() {  function select_group() {
     window.location="/adm/groupsort?catalogmode=groupimport&mode=rat&acts="+document.forms.fileattr.acts.value;      window.location="/adm/groupsort?catalogmode=groupsec&mode=rat&acts="+document.forms.fileattr.acts.value;
 }  }
   
 function queue(val) {  function queue(val) {
Line 95  function queue(val) { Line 98  function queue(val) {
     }      }
 }  }
   
   
   
 </script>  </script>
 ENDSCRIPT  ENDSCRIPT
     }      }
     $r->print('<body bgcolor="#FFFFFF">'.&buttons($adv));      $r->print(&Apache::loncommon::bodytag('Map Contents').'<h1>'.$url.'</h1>');
   # ------------------ This is trying to select. Provide buttons and tie %selhash
     if ($ENV{'form.forceselect'}) { $r->print(<<ENDSELECT);      if ($ENV{'form.forceselect'}) { $r->print(<<ENDSELECT);
 <form name=fileattr><input type=hidden name=acts value=''>  <form name=fileattr><input type=hidden name=acts value=''>
 <input type="button" name="close" value='CLOSE' onClick="self.close()">  <input type="button" name="close" value='CLOSE' onClick="self.close()">
Line 108  ENDSCRIPT Line 110  ENDSCRIPT
 onClick="javascript:select_group()">  onClick="javascript:select_group()">
 </form>     </form>   
 ENDSELECT  ENDSELECT
       my $diropendb = 
       "/home/httpd/perl/tmp/$ENV{'user.domain'}\_$ENV{'user.name'}_groupsec.db";
           if (tie(%selhash,'GDBM_File',$diropendb,&GDBM_WRCREAT(),0640)) {
       if ($ENV{'form.launch'} eq '1') {
          &start_fresh_session();
       }
               $successtied=1;
   
   # - Evaluate actions from previous page (both cumulatively and chronologically)
           if ($ENV{'form.catalogmode'} eq 'groupimport') {
       my $acts=$ENV{'form.acts'};
       my @Acts=split(/b/,$acts);
       my %ahash;
       my %achash;
       my $ac=0;
       # some initial hashes for working with data
       foreach (@Acts) {
    my ($state,$ref)=split(/a/);
    $ahash{$ref}=$state;
    $achash{$ref}=$ac;
    $ac++;
       }
       # sorting through the actions and changing the tied database hash
       foreach (sort {$achash{$a}<=>$achash{$b}} (keys %ahash)) {
    my $key=$_;
    if ($ahash{$key} eq '1') {
       $selhash{'store_'.$selhash{'pre_'.$key.'_link'}}=
    $selhash{'pre_'.$key.'_title'};
       $selhash{'storectr_'.$selhash{'pre_'.$key.'_link'}}=
    $selhash{'storectr'}+0;
       $selhash{'storectr'}++;
    }
    if ($ahash{$key} eq '0') {
       if ($selhash{'store_'.$selhash{'pre_'.$key.'_link'}}) {
          delete $selhash{'store_'.$selhash{'pre_'.$key.'_link'}};
       }
    }
       }
       # deleting the previously cached listing
       foreach (keys %selhash) {
    if ($_ =~ /^pre_/ && $_ =~/link$/) {
       my $key = $_;
       $key =~ s/^pre_//;
       $key =~ s/_[^_]*$//;
       delete $selhash{'pre_'.$key.'_title'};
       delete $selhash{'pre_'.$key.'_link'};
    }
       }
    }
   # -
           }
     }      }
     if ($errtext) {  # ----------------------------- successtied is now '1' if in working selectmode
  $r->print($errtext.'<hr>');      my ($errtext,$fatal)=&mapread(&Apache::lonnet::filelocation('',$url),'');
       if ($fatal==1) {
          $r->print('<p><b><font color="red">'.&mt('Map contents are not shown in order.').'</font></b></p><br />');
     }      }
     my $idx=0;      my $idx=0;
     foreach (&attemptread(&Apache::lonnet::filelocation('',$url))) {      foreach (&attemptread(&Apache::lonnet::filelocation('',$url))) {
  if (defined($_)) {   if (defined($_)) {
             $idx++;              $idx++;
             if ($ENV{'form.forceselect'}) {               if ($successtied) { 
  $r->print('<form name="form'.$idx.'">');   $r->print('<form name="form'.$idx.'">');
             }              }
     my ($title,$url)=split(/\:/,$_);      my ($title,$url)=split(/\:/,$_);
             $title=~s/\&colon\;/\:/g;              $title=~s/\&colon\;/\:/g;
             $url=~s/\&colon\;/\:/g;              $url=~s/\&colon\;/\:/g;
             unless ($title) { $title=(split(/\//,$url))[-1] };              unless ($title) { $title=(split(/\//,$url))[-1] };
             unless ($title) { $title='<i>Empty</i>'; }              unless ($title) { $title='<i>'.&mt('Empty').'</i>'; }
             if ($url) {              if ($url) {
  if ($ENV{'form.forceselect'}) {   if ($successtied) {
       my $checked='';
              if ($selhash{'store_'.$url}) {
               $checked=" checked";
              }
              $selhash{"pre_${idx}_link"}=$url;
              $selhash{"pre_${idx}_title"}=$title;
   
     $r->print(<<ENDCHECKBOX);      $r->print(<<ENDCHECKBOX);
 <input type='checkbox' name='filelink'   <input type='checkbox' name='filelink' 
 value='$url' onClick='javascript:queue("form$idx")' >  value='$url' onClick='javascript:queue("form$idx")'$checked>
 <input type='hidden' name='title' value='$title'>  <input type='hidden' name='title' value='$title'>
 ENDCHECKBOX  ENDCHECKBOX
                 }                  }
Line 136  ENDCHECKBOX Line 198  ENDCHECKBOX
             }              }
             $r->print(&Apache::lonratsrv::qtescape($title));              $r->print(&Apache::lonratsrv::qtescape($title));
             if ($url) { $r->print('</a>'); }              if ($url) { $r->print('</a>'); }
             if ($ENV{'form.forceselect'}) {              if ($successtied) {
  $r->print('</form>');   $r->print('</form>');
             } else {              } else {
  $r->print('<br>');   $r->print('<br>');
Line 144  ENDCHECKBOX Line 206  ENDCHECKBOX
         }          }
     }      }
     $r->print('</body></html>');      $r->print('</body></html>');
       if ($successtied) {
    untie %selhash;
       }
 }  }
   
   # ----------------------------------------------------------- Clean out selhash
   sub start_fresh_session {
       foreach (keys %selhash) {
    if ($_ =~ /^pre_/) {
       delete $selhash{$_};
    }
    if ($_ =~ /^store/) {
       delete $selhash{$_};
    }
       }
   }
   
   
 # ================================================================ Main Handler  # ================================================================ Main Handler
   
 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;
    }     }
     
    &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
                                           ['forceselect']);                                            ['forceselect','launch']);
   
    my %hash;     my %hash;
    my %bighash;     my %bighash;
    my $requrl=$r->uri;     my $requrl=$r->uri;
   
      $successtied=0;
 # ------------------------------------------------------------ Tie symb db file  # ------------------------------------------------------------ Tie symb db file
   if ($ENV{'request.course.fn'}) {    my $disurl='';
     my $dismapid='';
   
     if (($ENV{'request.course.fn'}) && (!$ENV{'form.forceselect'})) {
        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',
                     &GDBM_READER,0640)) {                      &GDBM_READER(),0640)) {
    $last=$hash{'last_direction'};     $last=$hash{'last_direction'};
            untie(%hash);             untie(%hash);
        }         }
Line 179  sub handler { Line 261  sub handler {
        }         }
 # ------------------------------------------------------------- Tie big db file  # ------------------------------------------------------------- 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 $disid='';     my $disid='';
            my $whatend='';             my $randomout ='';
   
            if ($direction eq 'back') {             if ($direction eq 'back') {
        $disid=$bighash{'map_finish_'.$requrl};         $disid=$bighash{'map_finish_'.$requrl};
                $whatend='End';  
            } else {             } else {
                $disid=$bighash{'map_start_'.$requrl};                 $disid=$bighash{'map_start_'.$requrl};
                $whatend='Beginning';  
            }              } 
            my $disurl='';  
            my $dismapid='';  
            if ($disid) {             if ($disid) {
        $disurl=$bighash{'src_'.$disid};         $disurl=$bighash{'src_'.$disid};
                $dismapid=(split(/\./,$disid))[1];                 $dismapid=(split(/\./,$disid))[1];
                  $randomout = $bighash{'randomout_'.$disid};
            }             }
            my $symb='';  # ----------- If this is an empty one, or hidden, skip to next non-empty or non-hidden one
            my $sequencetitle='';             if ( ((!$disurl) && ($disid)) || ($randomout && $disid) ) {
            unless($disurl) {         $direction=($direction?$direction:'forward');
                if ($symb=&Apache::lonnet::symbread()) {                 ($disid,$requrl)=
    my ($mapurl,$mapid)=split(/\_\_\_/,$symb);                           &Apache::lonpageflip::fullmove($disid,
                    $sequencetitle=$bighash{'title_'.                             &Apache::lonnet::declutter($requrl),$direction);
           $bighash{'map_pc_/res/'.$mapurl}.'.'.                 if ($disid) {
   $mapid};             $disurl=$bighash{'src_'.$disid};
                      $dismapid=(split(/\./,$disid))[1];
                }                 }
            }      }
   
 # --------------------------------------- Untie hash, make sure to come by here  # --------------------------------------- Untie hash, make sure to come by here
            untie(%bighash);             untie(%bighash);
            if ($disurl) {         }
      }
   
   # now either disurl is set (going to first page), or we need another display
   
      if ($disurl) {
 # -------------------------------------------------- Has first or last resource  # -------------------------------------------------- Has first or last resource
                &Apache::lonnet::symblist($requrl,$disurl => $dismapid,        &Apache::lonnet::symblist($requrl,$disurl => $dismapid,
                    'last_known' => &Apache::lonnet::declutter($disurl));                      'last_known' => &Apache::lonnet::declutter($disurl)); 
        $r->content_type('text/html');        &Apache::loncommon::content_type($r,'text/html');
                $r->header_out(Location => 'http://'.$ENV{'HTTP_HOST'}.$disurl);        $r->header_out(Location => 'http://'.$ENV{'HTTP_HOST'}.$disurl);
                return REDIRECT;        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 bgcolor="#FFFFFF">  
 <h2>$whatend of</h2>  
 <h1>$sequencetitle</h1>  
 </body></html>  
 ENDSYMB  
                return OK  
            }  
        } else {  
           &getlost($r,'Could not access course structure.');  
           return OK;  
        }  
    } else {     } else {
       $ENV{'user.error.msg'}="$requrl:bre:0:0:Course not initialized";         &Apache::loncommon::content_type($r,'text/html');
       return HTTP_NOT_ACCEPTABLE;          $r->send_http_header;
          &viewmap($r,$requrl);
          return OK;
    }     }
   
    return OK;  
 }  }
   
 1;  1;

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


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