Diff for /rat/lonuserstate.pm between versions 1.28 and 1.29

version 1.28, 2002/06/17 16:40:24 version 1.29, 2002/06/24 14:09:49
Line 67  my %parmhash;# The hash with the paramet Line 67  my %parmhash;# The hash with the paramet
 my @cond;    # Array with all of the conditions  my @cond;    # Array with all of the conditions
 my $errtext; # variable with all errors  my $errtext; # variable with all errors
 my $retfurl; # variable with the very first URL in the course  my $retfurl; # variable with the very first URL in the course
   my %randompick; # randomly picked resources
 # --------------------------------------------------------- Loads map from disk  # --------------------------------------------------------- Loads map from disk
   
 sub loadmap {   sub loadmap { 
Line 233  sub loadmap { Line 233  sub loadmap {
                     } else {                      } else {
                         $hash{'param_'.$referid}=''.$newparam;                          $hash{'param_'.$referid}=''.$newparam;
                     }                      }
                     if ($token->[2]->{'name'} eq 'mapalias') {                      if ($token->[2]->{'name'} eq 'parameter_mapalias') {
  $hash{'mapalias_'.$token->[2]->{'value'}}=$referid;   $hash{'mapalias_'.$token->[2]->{'value'}}=$referid;
                     }                      }
                       if ($token->[2]->{'name'} eq 'parameter_randompick') {
    $randompick{$referid}=$token->[2]->{'value'};
                       }
                 }                   } 
   
             }              }
Line 275  sub traceroute { Line 278  sub traceroute {
     unless ($beenhere=~/\&$rid\&/) {      unless ($beenhere=~/\&$rid\&/) {
        $beenhere.=$rid.'&';           $beenhere.=$rid.'&';  
        if ($retfurl eq '') {         if ($retfurl eq '') {
            $retfurl=$hash{'src_'.$rid};             my ($mapid,$resid)=split(/\./,$rid);
              $retfurl=$hash{'src_'.$rid}.'?symb='.
              &Apache::lonnet::symbclean(
                              &Apache::lonnet::declutter($hash{'map_id_'.$mapid}).
                              '___'.$resid.'___'.
                              &Apache::lonnet::declutter($hash{'src_'.$rid}));
        }         }
        if (defined($hash{'conditions_'.$rid})) {         if (defined($hash{'conditions_'.$rid})) {
    $hash{'conditions_'.$rid}=simplify(     $hash{'conditions_'.$rid}=simplify(
Line 398  sub accinit { Line 406  sub accinit {
                             "request.course.uri" => $courseuri);                               "request.course.uri" => $courseuri); 
 }  }
   
   # ------------------------------------- Selectively delete from randompick maps
   
   sub pickrandom {
       foreach my $rid (keys %randompick) {
           my $rndpick=$randompick{$rid};
           my $mpc=$hash{'map_pc_'.$hash{'src_'.$rid}};
   # ------------------------------------------- put existing resources into array
           my @currentrids=();
           foreach (keys %hash) {
       if ($_=~/^src_($mpc\.\d+)/) {
    if ($hash{'src_'.$1}) { push @currentrids, $1; }
               }
           }
           next if ($#currentrids<$rndpick);
   # -------------------------------- randomly eliminate the ones that should stay
    srand(&Apache::lonnet::rndseed($rid)); # use rid instead of symb
           for (my $i=1;$i<=$#currentrids+1-$rndpick;$i++) {
               while (1) {
    my $randomidx=int(rand($#currentrids+1));
                   if ($currentrids[$randomidx]) {
       $currentrids[$randomidx]='';
                       last;
                   }
               }
           }
   # -------------------------------------------------------- delete the leftovers
           for (my $k=0; $k<=$#currentrids; $k++) {
               if ($currentrids[$k]) {
    $hash{'randomout_'.$currentrids[$k]}=1;
               }
           }
       }
   }
   
 # ---------------------------------------------------- Read map and all submaps  # ---------------------------------------------------- Read map and all submaps
   
 sub readmap {  sub readmap {
Line 417  sub readmap { Line 459  sub readmap {
    unlink($fn.'_symb.db');     unlink($fn.'_symb.db');
    unlink($fn.'.state');     unlink($fn.'.state');
    unlink($fn.'parms.db');     unlink($fn.'parms.db');
      undef %randompick;
    $retfurl='';     $retfurl='';
    if ((tie(%hash,'GDBM_File',"$fn.db",&GDBM_WRCREAT,0640)) &&     if ((tie(%hash,'GDBM_File',"$fn.db",&GDBM_WRCREAT,0640)) &&
        (tie(%parmhash,'GDBM_File',$fn.'_parms.db',&GDBM_WRCREAT,0640))) {         (tie(%parmhash,'GDBM_File',$fn.'_parms.db',&GDBM_WRCREAT,0640))) {
Line 428  sub readmap { Line 471  sub readmap {
     if (defined($hash{'map_start_'.$uri})) {      if (defined($hash{'map_start_'.$uri})) {
         &traceroute('0',$hash{'map_start_'.$uri},'&');          &traceroute('0',$hash{'map_start_'.$uri},'&');
         &accinit($uri,$short,$fn);          &accinit($uri,$short,$fn);
           &pickrandom();
     }      }
     unless ((untie(%hash)) && (untie(%parmhash))) {      unless ((untie(%hash)) && (untie(%parmhash))) {
       &Apache::lonnet::logthis("<font color=blue>WARNING: ".        &Apache::lonnet::logthis("<font color=blue>WARNING: ".

Removed from v.1.28  
changed lines
  Added in v.1.29


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