Diff for /rat/lonuserstate.pm between versions 1.144 and 1.148

version 1.144, 2012/11/11 22:26:49 version 1.148, 2014/02/23 20:27:54
Line 59  my $retfurl; # first URL Line 59  my $retfurl; # first URL
 my %randompick; # randomly picked resources  my %randompick; # randomly picked resources
 my %randompickseed; # optional seed for randomly picking resources  my %randompickseed; # optional seed for randomly picking resources
 my %randomorder; # maps to order contents randomly  my %randomorder; # maps to order contents randomly
   my %randomizationcode; # code used to grade folder for bubblesheet exam 
 my %encurl; # URLs in this folder are supposed to be encrypted  my %encurl; # URLs in this folder are supposed to be encrypted
 my %hiddenurl; # this URL (or complete folder) is supposed to be hidden  my %hiddenurl; # this URL (or complete folder) is supposed to be hidden
   
Line 140  sub processversionfile { Line 141  sub processversionfile {
 # Parameters:  # Parameters:
 #    uri         - URI of the map file.  #    uri         - URI of the map file.
 #    parent_rid  - Resource id in the map of the parent resource (0.0 for the top level map)  #    parent_rid  - Resource id in the map of the parent resource (0.0 for the top level map)
 #  #    courseid    - Course id for the course for which the map is being loaded
 #  #
 sub loadmap {   sub loadmap { 
     my ($uri,$parent_rid)=@_;      my ($uri,$parent_rid,$courseid)=@_;
   
     # Is the map already included?      # Is the map already included?
   
Line 183  sub loadmap { Line 184  sub loadmap {
     # We can only nest sequences or pages.  Anything else is an illegal nest.      # We can only nest sequences or pages.  Anything else is an illegal nest.
   
     unless (($fn=~/\.sequence$/) || $ispage) {       unless (($fn=~/\.sequence$/) || $ispage) { 
  $errtext.=&mt("<br />Invalid map: <tt>[_1]</tt>",$fn);   $errtext.='<br />'.&mt('Invalid map: [_1]',"<tt>$fn</tt>");
  return;    return; 
     }      }
   
Line 192  sub loadmap { Line 193  sub loadmap {
     my $instr=&Apache::lonnet::getfile($fn);      my $instr=&Apache::lonnet::getfile($fn);
   
     if ($instr eq -1) {      if ($instr eq -1) {
         $errtext.=&mt('<br />Map not loaded: The file <tt>[_1]</tt> does not exist.',$fn);          $errtext.= '<br />'
                     .&mt('Map not loaded: The file [_1] does not exist.',
                          "<tt>$fn</tt>");
  return;   return;
     }      }
   
Line 236  sub loadmap { Line 239  sub loadmap {
     # This is handled in the next chunk of code.      # This is handled in the next chunk of code.
   
     my @map_ids;      my @map_ids;
       my $codechecked;
     while (my $token = $parser->get_token) {      while (my $token = $parser->get_token) {
  next if ($token->[0] ne 'S');   next if ($token->[0] ne 'S');
   
  # Resource   # Resource
   
  if ($token->[1] eq 'resource') {   if ($token->[1] eq 'resource') {
     my $resource_id = &parse_resource($token,$lpc,$ispage,$uri);      my $resource_id = &parse_resource($token,$lpc,$ispage,$uri,$courseid);
     if (defined $resource_id) {      if (defined $resource_id) {
  push(@map_ids, $resource_id);    push(@map_ids, $resource_id);
                   unless ($codechecked) {
                       my $startsymb =
                          &Apache::lonnet::encode_symb($hash{'map_id_'.$lpc},$resource_id,
                                                       $hash{'src_'."$lpc.$resource_id"});
                       my $code = 
                           &Apache::lonnet::EXT('resource.0.examcode',$startsymb,undef,undef,
                                                undef,undef,$courseid);
                       if ($code) {
                           $randomizationcode{$parent_rid} = $code;
                       }
                       $codechecked = 1; 
                   }
     }      }
   
        # Link         # Link
Line 260  sub loadmap { Line 276  sub loadmap {
     &parse_condition($token,$lpc);      &parse_condition($token,$lpc);
  }   }
     }      }
       undef($codechecked);
   
   
     # Handle randomization and random selection      # Handle randomization and random selection
   
     if ($randomize) {      if ($randomize) {
  if (!$env{'request.role.adv'}) {          my $advanced;
           if ($env{'request.course.id'}) {
               $advanced = (&Apache::lonnet::allowed('adv') eq 'F');
           } else {
               $env{'request.course.id'} = $courseid;
               $advanced = (&Apache::lonnet::allowed('adv') eq 'F');
               $env{'request.course.id'} = '';
           }
           unless ($advanced) {
               # Order of resources is not randomized if user has and advanced role in the course.
     my $seed;      my $seed;
   
     # In the advanced role, the map's random seed              # If the map's random seed parameter has been specified
     # parameter is used as the basis for computing the              # it is used as the basis for computing the seed ...
     # seed ... if it has been specified:  
   
     if (defined($randompickseed{$parent_rid})) {      if (defined($randompickseed{$parent_rid})) {
  $seed = $randompickseed{$parent_rid};   $seed = $randompickseed{$parent_rid};
Line 289  sub loadmap { Line 314  sub loadmap {
     # TODO: Here for sure we need to pass along the username/domain      # TODO: Here for sure we need to pass along the username/domain
     # so that we can impersonate users in lonprintout e.g.      # so that we can impersonate users in lonprintout e.g.
   
               my $setcode;
               if (defined($randomizationcode{$parent_rid})) {
                   if ($env{'form.CODE'} eq '') {
                       $env{'form.CODE'} = $randomizationcode{$parent_rid};
                       $setcode = 1;
                   }
               }
   
     my $rndseed=&Apache::lonnet::rndseed($seed);      my $rndseed=&Apache::lonnet::rndseed($seed);
     &Apache::lonnet::setup_random_from_rndseed($rndseed);      &Apache::lonnet::setup_random_from_rndseed($rndseed);
   
               if ($setcode) {
                   undef($env{'form.CODE'});
                   undef($setcode);
               }
   
     # Take the set of map ids we have decoded and permute them to a      # Take the set of map ids we have decoded and permute them to a
     # random order based on the seed set above. All of this is      # random order based on the seed set above. All of this is
     # processing the randomorder parameter if it is set, not      # processing the randomorder parameter if it is set, not
     # randompick.      # randompick.
   
     @map_ids=&Math::Random::random_permutation(@map_ids);       @map_ids=&Math::Random::random_permutation(@map_ids);
  }   }
   
   
Line 352  sub loadmap { Line 390  sub loadmap {
 #    $lpc     - Map nesting level (?)  #    $lpc     - Map nesting level (?)
 #    $ispage  - True if this resource is encapsulated in a .page (assembled resourcde).  #    $ispage  - True if this resource is encapsulated in a .page (assembled resourcde).
 #    $uri     - URI of the enclosing resource.  #    $uri     - URI of the enclosing resource.
   #    $courseid - Course id of the course containing the resource being parsed. 
 # Returns:  # Returns:
 #   Value of the id attribute of the tag.  #   Value of the id attribute of the tag.
 #  #
Line 372  sub loadmap { Line 411  sub loadmap {
   
   
 sub parse_resource {  sub parse_resource {
     my ($token,$lpc,$ispage,$uri) = @_;      my ($token,$lpc,$ispage,$uri,$courseid) = @_;
           
     # I refuse to countenance code like this that has       # I refuse to countenance code like this that has 
     # such a dirty side effect (and forcing this sub to be called within a loop).      # such a dirty side effect (and forcing this sub to be called within a loop).
Line 511  sub parse_resource { Line 550  sub parse_resource {
     if (($turi=~/\.sequence$/) ||      if (($turi=~/\.sequence$/) ||
  ($turi=~/\.page$/)) {   ($turi=~/\.page$/)) {
  $hash{'is_map_'.$rid}=1;   $hash{'is_map_'.$rid}=1;
  &loadmap($turi,$rid);   &loadmap($turi,$rid,$courseid);
     }       } 
     return $token->[2]->{'id'};      return $token->[2]->{'id'};
 }  }
Line 909  sub traceroute { Line 948  sub traceroute {
  $further=simplify('('.'_'.$rid.')&('.   $further=simplify('('.'_'.$rid.')&('.
   $hash{'condid_'.$hash{'undercond_'.$id}}.')');    $hash{'condid_'.$hash{'undercond_'.$id}}.')');
     } else {      } else {
  $errtext.=&mt('<br />Undefined condition ID: [_1]',$hash{'undercond_'.$id});   $errtext.= '<br />'.
                                      &mt('Undefined condition ID: [_1]',
                                          $hash{'undercond_'.$id});
     }      }
                 }                  }
  #  Recurse to resoruces that have to's to us.   #  Recurse to resoruces that have to's to us.
Line 1052  sub hiddenurls { Line 1093  sub hiddenurls {
 # -------------------------------- randomly eliminate the ones that should stay  # -------------------------------- randomly eliminate the ones that should stay
  my (undef,$id)=split(/\./,$rid);   my (undef,$id)=split(/\./,$rid);
         if ($randompickseed{$rid}) { $id=$randompickseed{$rid}; }          if ($randompickseed{$rid}) { $id=$randompickseed{$rid}; }
           my $setcode;
           if (defined($randomizationcode{$rid})) {
               if ($env{'form.CODE'} eq '') {
                   $env{'form.CODE'} = $randomizationcode{$rid};
                   $setcode = 1;
               }
           }
  my $rndseed=&Apache::lonnet::rndseed($id); # use id instead of symb   my $rndseed=&Apache::lonnet::rndseed($id); # use id instead of symb
           if ($setcode) {
               undef($env{'form.CODE'});
               undef($setcode);
           }
  &Apache::lonnet::setup_random_from_rndseed($rndseed);   &Apache::lonnet::setup_random_from_rndseed($rndseed);
  my @whichids=&Math::Random::random_permuted_index($#currentrids+1);   my @whichids=&Math::Random::random_permuted_index($#currentrids+1);
         for (my $i=1;$i<=$rndpick;$i++) { $currentrids[$whichids[$i]]=''; }          for (my $i=1;$i<=$rndpick;$i++) { $currentrids[$whichids[$i]]=''; }
Line 1370  sub build_tmp_hashes { Line 1422  sub build_tmp_hashes {
     # sub-maps.      # sub-maps.
   
   
     &loadmap($uri,'0.0');      &loadmap($uri,'0.0',$short);
   
     #  The code below only executes if there is a starting point for the map>      #  The code below only executes if there is a starting point for the map>
     #  Q/BUG??? If there is no start resource for the map should that be an error?      #  Q/BUG??? If there is no start resource for the map should that be an error?
Line 1431  sub unlink_tmpfiles { Line 1483  sub unlink_tmpfiles {
     my ($fn) = @_;      my ($fn) = @_;
     my $file_dir = dirname($fn);      my $file_dir = dirname($fn);
   
     if ($fn eq LONCAPA::tempdir()) {      if ("$file_dir/" eq LONCAPA::tempdir()) {
         my @files = qw (.db _symb.db .state _parms.db);          my @files = qw (.db _symb.db .state _parms.db);
         foreach my $file (@files) {          foreach my $file (@files) {
             if (-e $fn.$file) {              if (-e $fn.$file) {
Line 1508  sub evalstate { Line 1560  sub evalstate {
      $count++;       $count++;
  }   }
  my ($mapid) = split(/\./,$id);   my ($mapid) = split(/\./,$id);
                          &mt('Resource "[_1]" <br /> in Map "[_2]"',                           &mt('Resource [_1][_2]in Map [_3]',
      $hash{'title_'.$id},       $hash{'title_'.$id},'<br />',
      $hash{'title_'.$hash{'ids_'.$hash{'map_id_'.$mapid}}});       $hash{'title_'.$hash{'ids_'.$hash{'map_id_'.$mapid}}});
      } (@{ $mapalias_cache{$mapalias} }));       } (@{ $mapalias_cache{$mapalias} }));
     next if ($count < 2);      next if ($count < 2);

Removed from v.1.144  
changed lines
  Added in v.1.148


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>
500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.