Diff for /rat/lonuserstate.pm between versions 1.118.2.2 and 1.124

version 1.118.2.2, 2007/06/28 23:26:38 version 1.124, 2007/08/29 00:50:50
Line 109  sub processversionfile { Line 109  sub processversionfile {
 sub loadmap {   sub loadmap { 
     my ($uri,$parent_rid)=@_;      my ($uri,$parent_rid)=@_;
     if ($hash{'map_pc_'.$uri}) {       if ($hash{'map_pc_'.$uri}) { 
  $errtext.=&mt('<br />Multiple use of sequence/page <tt>[_1]</tt>! The course will not function properly.',$uri);   $errtext.='<p class="LC_error">'.
       &mt('Multiple use of sequence/page [_1]! The course will not function properly.','<tt>'.$uri.'</tt>').
       '</p>';
  return;    return; 
     }      }
     $pc++;      $pc++;
Line 174  sub loadmap { Line 176  sub loadmap {
     }      }
   
     if ($randomize) {      if ($randomize) {
  my $seed = (split(/\./,$parent_rid))[1];   if (!$env{'request.role.adv'}) {
  if ($randompickseed{$parent_rid}) {      my $seed;
     $seed = $randompickseed{$parent_rid};      if (defined($randompickseed{$parent_rid})) {
    $seed = $randompickseed{$parent_rid};
       } else {
    my ($mapid,$resid)=split(/\./,$parent_rid);
    my $symb=
       &Apache::lonnet::encode_symb($hash{'map_id_'.$mapid},
    $resid,$hash{'src_'.$parent_rid});
   
    $seed = $symb;
       }
   
       my $rndseed=&Apache::lonnet::rndseed($seed);
       &Apache::lonnet::setup_random_from_rndseed($rndseed);
       @map_ids=&Math::Random::random_permutation(@map_ids);
  }   }
  my $rndseed=&Apache::lonnet::rndseed($seed);  
  &Apache::lonnet::setup_random_from_rndseed($rndseed);  
  my @map_ids=&Math::Random::random_permutation(@map_ids);  
  my $from = shift(@map_ids);   my $from = shift(@map_ids);
  my $from_rid = $lpc.'.'.$from;   my $from_rid = $lpc.'.'.$from;
  $hash{'map_start_'.$uri} = $from_rid;   $hash{'map_start_'.$uri} = $from_rid;
Line 197  sub loadmap { Line 209  sub loadmap {
  $hash{'map_finish_'.$uri}= $from_rid;   $hash{'map_finish_'.$uri}= $from_rid;
  $hash{'type_'.$from_rid}='finish';   $hash{'type_'.$from_rid}='finish';
     }      }
   
       my $parser = HTML::TokeParser->new(\$instr);
       $parser->attr_encoded(1);
       # last parse out the mapalias params so as to ignore anything
       # refering to non-existant resources
       while (my $token = $parser->get_token) {
    next if ($token->[0] ne 'S');
    if ($token->[1] eq 'param') {
       &parse_mapalias_param($token,$lpc);
    } 
       }
 }  }
   
   
Line 320  sub parse_condition { Line 343  sub parse_condition {
     my $rid=$lpc.'.'.$token->[2]->{'id'};      my $rid=$lpc.'.'.$token->[2]->{'id'};
           
     $hash{'kind_'.$rid}='cond';      $hash{'kind_'.$rid}='cond';
     $cond[$#cond+1]=$token->[2]->{'value'};  
       my $condition = $token->[2]->{'value'};
       $condition =~ s/[\n\r]+/ /gs;
       push(@cond, $condition);
     $hash{'condid_'.$rid}=$#cond;      $hash{'condid_'.$rid}=$#cond;
     if ($token->[2]->{'type'}) {      if ($token->[2]->{'type'}) {
  $cond[$#cond].=':'.$token->[2]->{'type'};   $cond[$#cond].=':'.$token->[2]->{'type'};
Line 351  sub parse_param { Line 377  sub parse_param {
     } else {      } else {
  $hash{'param_'.$referid}=''.$newparam;   $hash{'param_'.$referid}=''.$newparam;
     }      }
     if ($token->[2]->{'name'}=~/^parameter_(0_)*mapalias$/) {  
  $hash{'mapalias_'.$token->[2]->{'value'}}=$referid;  
     }  
     if ($token->[2]->{'name'}=~/^parameter_(0_)*randompick$/) {      if ($token->[2]->{'name'}=~/^parameter_(0_)*randompick$/) {
  $randompick{$referid}=$token->[2]->{'value'};   $randompick{$referid}=$token->[2]->{'value'};
     }      }
Line 362  sub parse_param { Line 385  sub parse_param {
     }      }
     if ($token->[2]->{'name'}=~/^parameter_(0_)*randomorder$/) {      if ($token->[2]->{'name'}=~/^parameter_(0_)*randomorder$/) {
  $randomorder{$referid}=$token->[2]->{'value'};   $randomorder{$referid}=$token->[2]->{'value'};
  &Apache::lonnet::logthis("roing $referid ".$randomorder{$referid});  
     }      }
     if ($token->[2]->{'name'}=~/^parameter_(0_)*encrypturl$/) {      if ($token->[2]->{'name'}=~/^parameter_(0_)*encrypturl$/) {
  if ($token->[2]->{'value'}=~/^yes$/i) {   if ($token->[2]->{'value'}=~/^yes$/i) {
Line 376  sub parse_param { Line 398  sub parse_param {
     }      }
 }  }
   
   sub parse_mapalias_param {
       my ($token,$lpc) = @_;
       my $referid=$lpc.'.'.$token->[2]->{'to'};
       return if (!exists($hash{'src_'.$referid}));
   
       if ($token->[2]->{'name'}=~/^parameter_(0_)*mapalias$/) {
    &count_mapalias($token->[2]->{'value'},$referid);
    $hash{'mapalias_'.$token->[2]->{'value'}}=$referid;
       }
   }
   
 # --------------------------------------------------------- Simplify expression  # --------------------------------------------------------- Simplify expression
   
 sub simplify {  sub simplify {
Line 404  sub simplify { Line 437  sub simplify {
 sub traceroute {  sub traceroute {
     my ($sofar,$rid,$beenhere,$encflag,$hdnflag)=@_;      my ($sofar,$rid,$beenhere,$encflag,$hdnflag)=@_;
     my $newsofar=$sofar=simplify($sofar);      my $newsofar=$sofar=simplify($sofar);
     unless ($beenhere=~/\&$rid\&/) {      unless ($beenhere=~/\&\Q$rid\E\&/) {
  $beenhere.=$rid.'&';     $beenhere.=$rid.'&';  
  my ($mapid,$resid)=split(/\./,$rid);   my ($mapid,$resid)=split(/\./,$rid);
  my $symb=&Apache::lonnet::encode_symb($hash{'map_id_'.$mapid},$resid,$hash{'src_'.$rid});   my $symb=&Apache::lonnet::encode_symb($hash{'map_id_'.$mapid},$resid,$hash{'src_'.$rid});
Line 635  sub readmap { Line 668  sub readmap {
  %parmhash=();   %parmhash=();
  $errtext='';   $errtext='';
  $pc=0;   $pc=0;
    &clear_mapalias_count();
  &processversionfile(%cenv);   &processversionfile(%cenv);
  my $furi=&Apache::lonnet::clutter($uri);   my $furi=&Apache::lonnet::clutter($uri);
  $hash{'src_0.0'}=&versiontrack($furi);   $hash{'src_0.0'}=&versiontrack($furi);
Line 651  sub readmap { Line 685  sub readmap {
     &accinit($uri,$short,$fn);      &accinit($uri,$short,$fn);
     &hiddenurls();      &hiddenurls();
  }   }
    $errtext .= &get_mapalias_errors();
 # ------------------------------------------------------- Put versions into src  # ------------------------------------------------------- Put versions into src
  foreach my $key (keys(%hash)) {   foreach my $key (keys(%hash)) {
     if ($key=~/^src_/) {      if ($key=~/^src_/) {
Line 782  sub evalstate { Line 817  sub evalstate {
     return $state;      return $state;
 }  }
   
   {
       my %mapalias_cache;
       sub count_mapalias {
    my ($value,$resid) = @_;
     push(@{ $mapalias_cache{$value} }, $resid);
       }
   
       sub get_mapalias_errors {
    my $error_text;
    foreach my $mapalias (sort(keys(%mapalias_cache))) {
       next if (scalar(@{ $mapalias_cache{$mapalias} } ) == 1);
       my $count;
       my $which =
    join('</li><li>', 
        map {
    my $id = $_;
    if (exists($hash{'src_'.$id})) {
        $count++;
    }
    my ($mapid) = split(/\./,$id);
                            &mt('[_1] in [_2]', $hash{'title_'.$id},
   
        $hash{'title_'.$hash{'ids_'.$hash{'map_id_'.$mapid}}});
        } (@{ $mapalias_cache{$mapalias} }));
       next if ($count < 2);
       $error_text .= '<div class="LC_error">'.
    &mt('Error: Found the mapalias "[_1]" defined multiple times.',
       $mapalias).
    '</div><ul><li>'.$which.'</li></ul>';
    }
    &clear_mapalias_count();
    return $error_text;
       }
       sub clear_mapalias_count {
    undef(%mapalias_cache);
       }
   }
 1;  1;
 __END__  __END__
   

Removed from v.1.118.2.2  
changed lines
  Added in v.1.124


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