Diff for /rat/lonuserstate.pm between versions 1.118 and 1.118.2.1

version 1.118, 2006/07/07 22:01:25 version 1.118.2.1, 2007/06/08 19:33:06
Line 129  sub loadmap { Line 129  sub loadmap {
   
     my $instr=&Apache::lonnet::getfile($fn);      my $instr=&Apache::lonnet::getfile($fn);
   
     unless ($instr eq -1) {      if ($instr eq -1) {
           $errtext.=&mt('<br />Map not loaded: The file <tt>[_1]</tt> does not exist.',$fn);
    return;
       }
   
 # Successfully got file, parse it  # Successfully got file, parse it
   
         my $parser = HTML::TokeParser->new(\$instr);      my $parser = HTML::TokeParser->new(\$instr);
  $parser->attr_encoded(1);      $parser->attr_encoded(1);
         my $token;  
   
         my $linkpc=0;      my $linkpc=0;
   
         $fn=~/\.(\w+)$/;      $fn=~/\.(\w+)$/;
   
         $hash{'map_type_'.$lpc}=$1;      $hash{'map_type_'.$lpc}=$1;
   
         while ($token = $parser->get_token) {      my $randomize=1;
     if ($token->[0] eq 'S') {      my @map_ids;
                 if ($token->[1] eq 'resource') {      while (my $token = $parser->get_token) {
 # -------------------------------------------------------------------- Resource   next if ($token->[0] ne 'S');
                     if ($token->[2]->{'type'} eq 'zombie') { next; }   if ($token->[1] eq 'resource') {
                     my $rid=$lpc.'.'.$token->[2]->{'id'};      push(@map_ids,&parse_resource($token,$lpc,$ispage,$uri));
    } elsif ($token->[1] eq 'link' && !$randomize) {
   # ----------------------------------------------------------------------- Links
       &make_link(++$linkpc,$lpc,$token->[2]->{'to'},
          $token->[2]->{'from'},
          $token->[2]->{'condition'});
    } elsif ($token->[1] eq 'condition' && !$randomize) {
       &parse_condition($token,$lpc);
    } elsif ($token->[1] eq 'param') {
       &parse_param($token,$lpc);
    } 
       }
   
       if ($randomize) {
    my @map_ids=&Math::Random::random_permutation(@map_ids);
    my $from = shift(@map_ids);
    my $from_rid = $lpc.'.'.$from;
    $hash{'map_start_'.$uri} = $from_rid;
    $hash{'type_'.$from_rid}='start';
   
    while (my $to = shift(@map_ids)) {
       &make_link(++$linkpc,$lpc,$to,$from);
       my $to_rid =  $lpc.'.'.$to;
       $hash{'type_'.$to_rid}='normal';
       $from = $to;
       $from_rid = $to_rid;
    }
   
                     $hash{'kind_'.$rid}='res';   $hash{'map_finish_'.$uri}= $from_rid;
                     $hash{'title_'.$rid}=$token->[2]->{'title'};   $hash{'type_'.$from_rid}='finish';
                     my $turi=&versiontrack($token->[2]->{'src'});      }
                     if ($token->[2]->{'version'}) {  }
  unless ($hash{'version_'.$turi}) {  
     $hash{'version_'.$turi}=$1;  
  }  # -------------------------------------------------------------------- Resource
     }  sub parse_resource {
     my $title=$token->[2]->{'title'};      my ($token,$lpc,$ispage,$uri) = @_;
     $title=~s/\&colon\;/\:/gs;      if ($token->[2]->{'type'} eq 'zombie') { next; }
 #    my $symb=&Apache::lonnet::encode_symb($uri,      my $rid=$lpc.'.'.$token->[2]->{'id'};
 #  $token->[2]->{'id'},      
 #  $turi);      $hash{'kind_'.$rid}='res';
 #    &Apache::lonnet::do_cache_new('title',$symb,$title);      $hash{'title_'.$rid}=$token->[2]->{'title'};
                     unless ($ispage) {      my $turi=&versiontrack($token->[2]->{'src'});
                         $turi=~/\.(\w+)$/;      if ($token->[2]->{'version'}) {
                         my $embstyle=&Apache::loncommon::fileembstyle($1);   unless ($hash{'version_'.$turi}) {
                         if ($token->[2]->{'external'} eq 'true') { # external      $hash{'version_'.$turi}=$1;
                             $turi=~s/^http\:\/\//\/adm\/wrapper\/ext\//;   }
                         } elsif ($turi=~/^\/*uploaded\//) { # uploaded      }
     if (($embstyle eq 'img')       my $title=$token->[2]->{'title'};
  || ($embstyle eq 'emb')      $title=~s/\&colon\;/\:/gs;
  || ($embstyle eq 'wrp')) {  #   my $symb=&Apache::lonnet::encode_symb($uri,
                                 $turi='/adm/wrapper'.$turi;  #  $token->[2]->{'id'},
     } elsif ($embstyle eq 'ssi') {  #  $turi);
  #do nothing with these  #   &Apache::lonnet::do_cache_new('title',$symb,$title);
     } elsif ($turi!~/\.(sequence|page)$/) {      unless ($ispage) {
  $turi='/adm/coursedocs/showdoc'.$turi;   $turi=~/\.(\w+)$/;
                             }   my $embstyle=&Apache::loncommon::fileembstyle($1);
                         } elsif ($turi=~/\S/) { # normal non-empty internal resource   if ($token->[2]->{'external'} eq 'true') { # external
     my $mapdir=$uri;      $turi=~s/^http\:\/\//\/adm\/wrapper\/ext\//;
     $mapdir=~s/[^\/]+$//;   } elsif ($turi=~/^\/*uploaded\//) { # uploaded
     $turi=&Apache::lonnet::hreflocation($mapdir,$turi);      if (($embstyle eq 'img') 
     if (($embstyle eq 'img')    || ($embstyle eq 'emb')
  || ($embstyle eq 'emb')   || ($embstyle eq 'wrp')) {
  || ($embstyle eq 'wrp')) {   $turi='/adm/wrapper'.$turi;
  $turi='/adm/wrapper'.$turi;      } elsif ($embstyle eq 'ssi') {
     }   #do nothing with these
                         }      } elsif ($turi!~/\.(sequence|page)$/) {
     }   $turi='/adm/coursedocs/showdoc'.$turi;
       }
    } elsif ($turi=~/\S/) { # normal non-empty internal resource
       my $mapdir=$uri;
       $mapdir=~s/[^\/]+$//;
       $turi=&Apache::lonnet::hreflocation($mapdir,$turi);
       if (($embstyle eq 'img') 
    || ($embstyle eq 'emb')
    || ($embstyle eq 'wrp')) {
    $turi='/adm/wrapper'.$turi;
       }
    }
       }
 # Store reverse lookup, remove query string  # Store reverse lookup, remove query string
     my $idsuri=$turi;      my $idsuri=$turi;
     $idsuri=~s/\?.+$//;      $idsuri=~s/\?.+$//;
                     if (defined($hash{'ids_'.$idsuri})) {      if (defined($hash{'ids_'.$idsuri})) {
                         $hash{'ids_'.$idsuri}.=','.$rid;   $hash{'ids_'.$idsuri}.=','.$rid;
                     } else {      } else {
                         $hash{'ids_'.$idsuri}=''.$rid;   $hash{'ids_'.$idsuri}=''.$rid;
                     }      }
                      
                     if ($turi=~/\/(syllabus|aboutme|navmaps|smppg|bulletinboard)$/) {      if ($turi=~/\/(syllabus|aboutme|navmaps|smppg|bulletinboard)$/) {
  $turi.='?register=1';   $turi.='?register=1';
     }      }
       
                     $hash{'src_'.$rid}=$turi;      $hash{'src_'.$rid}=$turi;
       
                     if ($token->[2]->{'external'} eq 'true') {      if ($token->[2]->{'external'} eq 'true') {
                         $hash{'ext_'.$rid}='true:';   $hash{'ext_'.$rid}='true:';
                     } else {      } else {
                         $hash{'ext_'.$rid}='false:';   $hash{'ext_'.$rid}='false:';
                     }      }
                     if ($token->[2]->{'type'}) {      if ($token->[2]->{'type'}) {
  $hash{'type_'.$rid}=$token->[2]->{'type'};   $hash{'type_'.$rid}=$token->[2]->{'type'};
                         if ($token->[2]->{'type'} eq 'start') {   if ($token->[2]->{'type'} eq 'start') {
     $hash{'map_start_'.$uri}="$rid";      $hash{'map_start_'.$uri}="$rid";
                         }   }
                         if ($token->[2]->{'type'} eq 'finish') {   if ($token->[2]->{'type'} eq 'finish') {
     $hash{'map_finish_'.$uri}="$rid";      $hash{'map_finish_'.$uri}="$rid";
                         }   }
                     }  else {      }  else {
                         $hash{'type_'.$rid}='normal';   $hash{'type_'.$rid}='normal';
                     }      }
       
                     if (($turi=~/\.sequence$/) ||      if (($turi=~/\.sequence$/) ||
                         ($turi=~/\.page$/)) {   ($turi=~/\.page$/)) {
                         $hash{'is_map_'.$rid}=1;   $hash{'is_map_'.$rid}=1;
                         &loadmap($turi);   &loadmap($turi);
                     }       } 
                           return $token->[2]->{'id'};
                 } elsif ($token->[1] eq 'condition') {  }
 # ------------------------------------------------------------------- Condition  
   
                     my $rid=$lpc.'.'.$token->[2]->{'id'};  sub make_link {
       my ($linkpc,$lpc,$to,$from,$condition) = @_;
       
       my $linkid=$lpc.'.'.$linkpc;
       my $goesto=$lpc.'.'.$to;
       my $comesfrom=$lpc.'.'.$from;
       my $undercond=0;
   
                     $hash{'kind_'.$rid}='cond';      if ($condition) {
                     $cond[$#cond+1]=$token->[2]->{'value'};   $undercond=$lpc.'.'.$condition;
                     $hash{'condid_'.$rid}=$#cond;      }
                     if ($token->[2]->{'type'}) {  
                         $cond[$#cond].=':'.$token->[2]->{'type'};  
                     }  else {  
                         $cond[$#cond].=':normal';  
                     }  
   
                 } elsif ($token->[1] eq 'link') {      $hash{'goesto_'.$linkid}=$goesto;
 # ----------------------------------------------------------------------- Links      $hash{'comesfrom_'.$linkid}=$comesfrom;
       $hash{'undercond_'.$linkid}=$undercond;
   
                     $linkpc++;      if (defined($hash{'to_'.$comesfrom})) {
                     my $linkid=$lpc.'.'.$linkpc;   $hash{'to_'.$comesfrom}.=','.$linkid;
       } else {
    $hash{'to_'.$comesfrom}=''.$linkid;
       }
       if (defined($hash{'from_'.$goesto})) {
    $hash{'from_'.$goesto}.=','.$linkid;
       } else {
    $hash{'from_'.$goesto}=''.$linkid;
       }
   }
   
                     my $goesto=$lpc.'.'.$token->[2]->{'to'};  # ------------------------------------------------------------------- Condition
                     my $comesfrom=$lpc.'.'.$token->[2]->{'from'};  sub parse_condition {
                     my $undercond=0;      my ($token,$lpc) = @_;
       my $rid=$lpc.'.'.$token->[2]->{'id'};
                     if ($token->[2]->{'condition'}) {      
  $undercond=$lpc.'.'.$token->[2]->{'condition'};      $hash{'kind_'.$rid}='cond';
                     }      $cond[$#cond+1]=$token->[2]->{'value'};
       $hash{'condid_'.$rid}=$#cond;
                     $hash{'goesto_'.$linkid}=$goesto;      if ($token->[2]->{'type'}) {
                     $hash{'comesfrom_'.$linkid}=$comesfrom;   $cond[$#cond].=':'.$token->[2]->{'type'};
                     $hash{'undercond_'.$linkid}=$undercond;      }  else {
    $cond[$#cond].=':normal';
                     if (defined($hash{'to_'.$comesfrom})) {      }
                         $hash{'to_'.$comesfrom}.=','.$linkid;  }
                     } else {  
                         $hash{'to_'.$comesfrom}=''.$linkid;  
                     }  
                     if (defined($hash{'from_'.$goesto})) {  
                         $hash{'from_'.$goesto}.=','.$linkid;  
                     } else {  
                         $hash{'from_'.$goesto}=''.$linkid;  
                     }  
                 } elsif ($token->[1] eq 'param') {  
 # ------------------------------------------------------------------- Parameter  
   
                     my $referid=$lpc.'.'.$token->[2]->{'to'};  # ------------------------------------------------------------------- Parameter
     my $name=$token->[2]->{'name'};  
     my $part;  
     if ($name=~/^parameter_(.*)_/) {  
  $part=$1;  
     } else {  
  $part=0;  
     }  
     $name=~s/^.*_([^_]*)$/$1/;  
                     my $newparam=  
  &escape($token->[2]->{'type'}).':'.  
  &escape($part.'.'.$name).'='.  
  &escape($token->[2]->{'value'});  
                     if (defined($hash{'param_'.$referid})) {  
                         $hash{'param_'.$referid}.='&'.$newparam;  
                     } else {  
                         $hash{'param_'.$referid}=''.$newparam;  
                     }  
                     if ($token->[2]->{'name'}=~/^parameter_(0_)*mapalias$/) {  
  $hash{'mapalias_'.$token->[2]->{'value'}}=$referid;  
                     }  
                     if ($token->[2]->{'name'}=~/^parameter_(0_)*randompick$/) {  
  $randompick{$referid}=$token->[2]->{'value'};  
                     }  
                     if ($token->[2]->{'name'}=~/^parameter_(0_)*randompickseed$/) {  
  $randompick{$referid}=$token->[2]->{'value'};  
                     }  
                     if ($token->[2]->{'name'}=~/^parameter_(0_)*encrypturl$/) {  
  if ($token->[2]->{'value'}=~/^yes$/i) {  
     $encurl{$referid}=1;  
  }  
                     }  
                     if ($token->[2]->{'name'}=~/^parameter_(0_)*hiddenresource$/) {  
  if ($token->[2]->{'value'}=~/^yes$/i) {  
     $hiddenurl{$referid}=1;  
  }  
                     }  
                 }   
   
             }  
         }  
   
   sub parse_param {
       my ($token,$lpc) = @_;
       my $referid=$lpc.'.'.$token->[2]->{'to'};
       my $name=$token->[2]->{'name'};
       my $part;
       if ($name=~/^parameter_(.*)_/) {
    $part=$1;
     } else {      } else {
         $errtext.=&mt('<br />Map not loaded: The file <tt>[_1]</tt> does not exist.',$fn);   $part=0;
       }
       $name=~s/^.*_([^_]*)$/$1/;
       my $newparam=
    &escape($token->[2]->{'type'}).':'.
    &escape($part.'.'.$name).'='.
    &escape($token->[2]->{'value'});
       if (defined($hash{'param_'.$referid})) {
    $hash{'param_'.$referid}.='&'.$newparam;
       } else {
    $hash{'param_'.$referid}=''.$newparam;
       }
       if ($token->[2]->{'name'}=~/^parameter_(0_)*mapalias$/) {
    $hash{'mapalias_'.$token->[2]->{'value'}}=$referid;
       }
       if ($token->[2]->{'name'}=~/^parameter_(0_)*randompick$/) {
    $randompick{$referid}=$token->[2]->{'value'};
       }
       if ($token->[2]->{'name'}=~/^parameter_(0_)*randompickseed$/) {
    $randompick{$referid}=$token->[2]->{'value'};
       }
       if ($token->[2]->{'name'}=~/^parameter_(0_)*encrypturl$/) {
    if ($token->[2]->{'value'}=~/^yes$/i) {
       $encurl{$referid}=1;
    }
       }
       if ($token->[2]->{'name'}=~/^parameter_(0_)*hiddenresource$/) {
    if ($token->[2]->{'value'}=~/^yes$/i) {
       $hiddenurl{$referid}=1;
    }
     }      }
 }  }
   

Removed from v.1.118  
changed lines
  Added in v.1.118.2.1


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