Diff for /loncom/interface/loncoursedata.pm between versions 1.50 and 1.56

version 1.50, 2003/02/25 15:55:15 version 1.56, 2003/03/05 14:39:08
Line 1 Line 1
 # The LearningOnline Network with CAPA  # The LearningOnline Network with CAPA
 # (Publication Handler  
 #  #
 # $Id$  # $Id$
 #  #
Line 281  The returned structure is a hash referen Line 280  The returned structure is a hash referen
   source => '/s/o/u/r/c/e',    source => '/s/o/u/r/c/e',
   type  => (container|assessment),    type  => (container|assessment),
   num_assess   => 2,               # only for container    num_assess   => 2,               # only for container
   contents     => [ {},{},{},{} ], # only for container  
   parts        => [11,13,15],      # only for assessment    parts        => [11,13,15],      # only for assessment
   response_ids => [12,14,16],      # only for assessment    response_ids => [12,14,16],      # only for assessment
   contents     => [........]       # only for container    contents     => [........]       # only for container
Line 313  sub get_sequence_assessment_data { Line 311  sub get_sequence_assessment_data {
     ## We are going to loop until we run out of sequences/pages to explore for      ## We are going to loop until we run out of sequences/pages to explore for
     ## resources.  This means we have to start out with something to look      ## resources.  This means we have to start out with something to look
     ## at.      ## at.
     my $curRes = $iterator->next(); # BEGIN_MAP      my $title = $ENV{'course.'.$ENV{'request.course.id'}.'.description'};
     $curRes = $iterator->next(); # The sequence itself      my $symb  = 'top';
     #      my $src   = 'not applicable';
     my $title = $curRes->title();  
     my $symb  = $curRes->symb();  
     my $src   = $curRes->src();  
     #      #
     my @Sequences;       my @Sequences; 
     my @Assessments;      my @Assessments;
     my @Nested_Sequences = ();   # Stack of sequences, keeps track of depth      my @Nested_Sequences = ();   # Stack of sequences, keeps track of depth
     my $top = { title    => $title,      my $top = { title    => $title,
                   src      => $src,
                 symb     => $symb,                  symb     => $symb,
                 type     => 'container',                  type     => 'container',
                 num_assess => 0,                  num_assess => 0,
                   num_assess_parts => 0,
                 contents   => [], };                  contents   => [], };
     push (@Sequences,$top);      push (@Sequences,$top);
     push (@Nested_Sequences, $top);      push (@Nested_Sequences, $top);
     #      #
     # We need to keep track of which sequences contain homework problems      # We need to keep track of which sequences contain homework problems
     #       # 
     my $previous = $top;      my $previous;
       my $curRes = $iterator->next(); # BEGIN_MAP
       $curRes = $iterator->next(); # The first item in the top level map.
     while (scalar(@Nested_Sequences)) {      while (scalar(@Nested_Sequences)) {
         $previous = $curRes;          $previous = $curRes;
         $curRes = $iterator->next();          $curRes = $iterator->next();
         my $currentmap = $Nested_Sequences[-1]; # Last one on the stack          my $currentmap = $Nested_Sequences[-1]; # Last one on the stack
         if ($curRes == $iterator->BEGIN_MAP()) {          if ($curRes == $iterator->BEGIN_MAP()) {
             # get the map itself, instead of BEGIN_MAP              # get the map itself, instead of BEGIN_MAP
             $title = $previous->title();#$curRes->title();              $title = $previous->title();
             $symb  = $previous->symb;#curRes->symb();              $symb  = $previous->symb();
             $src   = $previous->src();#$curRes->src();              $src   = $previous->src();
             my $newmap = { title    => $title,              my $newmap = { title    => $title,
                            src      => $src,                             src      => $src,
                            symb     => $symb,                             symb     => $symb,
Line 370  sub get_sequence_assessment_data { Line 369  sub get_sequence_assessment_data {
                            src   => $src,                             src   => $src,
                            symb  => $symb,                             symb  => $symb,
                            type  => 'assessment',                             type  => 'assessment',
                              parts => $parts,
                              num_parts => scalar(@$parts),
                        };                         };
         push(@Assessments,$assessment);          push(@Assessments,$assessment);
         push(@{$currentmap->{'contents'}},$assessment);          push(@{$currentmap->{'contents'}},$assessment);
         $currentmap->{'num_assess'}++;          $currentmap->{'num_assess'}++;
           $currentmap->{'num_assess_parts'}+= scalar(@$parts);
     }      }
     return ($top,\@Sequences,\@Assessments);      return ($top,\@Sequences,\@Assessments);
 }  }
Line 1306  sub DownloadStudentCourseData { Line 1308  sub DownloadStudentCourseData {
     $WhatIWant .= ')';      $WhatIWant .= ')';
 #    $WhatIWant = '.';  #    $WhatIWant = '.';
   
       my %prog_state;
     if($status eq 'true') {      if($status eq 'true') {
         &Apache::lonhtmlcommon::Create_PrgWin($r, $title, $heading);          %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r, $title,
          $heading,($#$students)+1);
     }      }
   
     my $displayString;  
     my $count=0;  
     foreach (@$students) {      foreach (@$students) {
         my %cache;          my %cache;
   
         if($c->aborted()) { return 'Aborted'; }          if($c->aborted()) { return 'Aborted'; }
   
         if($status eq 'true') {          if($status eq 'true') {
             $count++;              &Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state,
             my $displayString = $count.'/'.$studentCount.': '.$_;    'last student '.$_);
             &Apache::lonhtmlcommon::Update_PrgWin($displayString, $r);  
         }          }
   
         my $downloadTime='Not downloaded';          my $downloadTime='Not downloaded';
Line 1357  sub DownloadStudentCourseData { Line 1358  sub DownloadStudentCourseData {
     next;      next;
  }   }
     }      }
     if($status eq 'true') { &Apache::lonhtmlcommon::Close_PrgWin($r); }      if($status eq 'true') { &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state); }
   
     return 'OK';      return 'OK';
 }  }
Line 1378  sub DownloadStudentCourseDataSeparate { Line 1379  sub DownloadStudentCourseDataSeparate {
     &CheckForResidualDownload($cacheDB, 'true', 'true', $courseID, $r, $c);      &CheckForResidualDownload($cacheDB, 'true', 'true', $courseID, $r, $c);
   
     my $studentCount = scalar(@$students);      my $studentCount = scalar(@$students);
       my %prog_state;
     if($status eq 'true') {      if($status eq 'true') {
         &Apache::lonhtmlcommon::Create_PrgWin($r, $title, $heading);          %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r, $title,
        $heading,($#$students)+1);
     }      }
     my $count=0;  
     my $displayString='';      my $displayString='';
     foreach (@$students) {      foreach (@$students) {
         if($c->aborted()) {          if($c->aborted()) {
Line 1389  sub DownloadStudentCourseDataSeparate { Line 1391  sub DownloadStudentCourseDataSeparate {
         }          }
   
         if($status eq 'true') {          if($status eq 'true') {
             $count++;              &Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state,
             $displayString = $count.'/'.$studentCount.': '.$_;    'last student '.$_);
             &Apache::lonhtmlcommon::Update_PrgWin($displayString, $r);  
         }          }
   
         my %cache;          my %cache;
Line 1436  sub DownloadStudentCourseDataSeparate { Line 1437  sub DownloadStudentCourseDataSeparate {
         }          }
         untie(%downloadData);          untie(%downloadData);
     }      }
     if($status eq 'true') { &Apache::lonhtmlcommon::Close_PrgWin($r); }      if($status eq 'true') { &Apache::lonhtmlcommon::Close_PrgWin($r,
     \%prog_state); }
   
     return &CheckForResidualDownload($cacheDB, 'true', 'true',       return &CheckForResidualDownload($cacheDB, 'true', 'true', 
                                      $courseID, $r, $c);                                       $courseID, $r, $c);
Line 1475  sub CheckForResidualDownload { Line 1477  sub CheckForResidualDownload {
     my $heading = 'Process Course Data';      my $heading = 'Process Course Data';
     my $title = 'LON-CAPA Statistics';      my $title = 'LON-CAPA Statistics';
     my $studentCount = scalar(@students);      my $studentCount = scalar(@students);
       my %prog_state;
     if($status eq 'true') {      if($status eq 'true') {
         &Apache::lonhtmlcommon::Create_PrgWin($r, $title, $heading);          %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r, $title,
         $heading,$#students+1);
     }      }
   
     my $count=1;      my $count=1;
Line 1484  sub CheckForResidualDownload { Line 1488  sub CheckForResidualDownload {
         last if($c->aborted());          last if($c->aborted());
   
         if($status eq 'true') {          if($status eq 'true') {
             my $displayString = $count.'/'.$studentCount.': '.$name;      &Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state,
             &Apache::lonhtmlcommon::Update_PrgWin($displayString, $r);       'last student '.$name);
         }          }
   
         if($extract eq 'true') {          if($extract eq 'true') {
Line 1496  sub CheckForResidualDownload { Line 1500  sub CheckForResidualDownload {
         $count++;          $count++;
     }      }
   
     if($status eq 'true') { &Apache::lonhtmlcommon::Close_PrgWin($r); }      if($status eq 'true') { &Apache::lonhtmlcommon::Close_PrgWin($r,
      \%prog_state); }
   
     untie(%cache);      untie(%cache);
     untie(%downloadData);      untie(%downloadData);
Line 1575  sub get_current_state { Line 1580  sub get_current_state {
     #      #
     $courseid = $ENV{'request.course.id'} if (! defined($courseid));      $courseid = $ENV{'request.course.id'} if (! defined($courseid));
     #      #
   #    my $cachefilename = $Apache::lonnet::tmpdir.$ENV{'user.name'}.'_'.
   #                                                $ENV{'user.domain'}.'_'.
   #                                                $courseid.'_student_data.db';
     my $cachefilename = $Apache::lonnet::tmpdir.$ENV{'user.name'}.'_'.      my $cachefilename = $Apache::lonnet::tmpdir.$ENV{'user.name'}.'_'.
                                                 $ENV{'user.domain'}.'_'.                                                  $ENV{'user.domain'}.'_'.
                                                 $courseid.'_student_data.db';                                                  $courseid.'_'.
                                                   $sname.'_'.$sdom.
                                                       '_student_data.db';
     my %cache;      my %cache;
     #      #
     my %student_data; # return values go here      my %student_data; # return values go here
Line 1589  sub get_current_state { Line 1599  sub get_current_state {
     if (tie(%cache,'GDBM_File',$cachefilename,&GDBM_READER(),0640)) {      if (tie(%cache,'GDBM_File',$cachefilename,&GDBM_READER(),0640)) {
         if (exists($cache{$key.'time'})) {          if (exists($cache{$key.'time'})) {
             $updatetime = $cache{$key.'time'};              $updatetime = $cache{$key.'time'};
 #            &Apache::lonnet::logthis('got updatetime of '.$updatetime);  
         }          }
         untie(%cache);          untie(%cache);
     }      }
     # timestamp/devalidation       # timestamp/devalidation check should go here.
     my $modifiedtime = 1;      my $modifiedtime = 1;
     # Take whatever steps are neccessary at this point to give $modifiedtime a      # Take whatever steps are neccessary at this point to give $modifiedtime a
     # new value      # new value
     #      #
     if (($updatetime < $modifiedtime) ||       if (($updatetime < $modifiedtime) || 
         (defined($forcedownload) && $forcedownload)) {          (defined($forcedownload) && $forcedownload)) {
 #        &Apache::lonnet::logthis("loading data");  
         # Get all the students current data          # Get all the students current data
         my $time_of_retrieval = time;          my $time_of_retrieval = time;
         my @tmp = &Apache::lonnet::currentdump($courseid,$sdom,$sname);          my @tmp = &Apache::lonnet::currentdump($courseid,$sdom,$sname);
Line 1622  sub get_current_state { Line 1630  sub get_current_state {
         #         keys instead of unescaping every key.          #         keys instead of unescaping every key.
         #          #
         if (tie(%cache,'GDBM_File',$cachefilename,&GDBM_WRCREAT(),0640)) {          if (tie(%cache,'GDBM_File',$cachefilename,&GDBM_WRCREAT(),0640)) {
 #            &Apache::lonnet::logthis("writing data");  
             while (my ($current_symb,$param_hash) = each(%student_data)) {              while (my ($current_symb,$param_hash) = each(%student_data)) {
                 my @Parameters = %{$param_hash};                  my @Parameters = %{$param_hash};
                 my $value = join(':',map { &Apache::lonnet::escape($_); }                   my $value = join(':',map { &Apache::lonnet::escape($_); } 
Line 1634  sub get_current_state { Line 1641  sub get_current_state {
             untie(%cache);              untie(%cache);
         }          }
     } else {      } else {
         &Apache::lonnet::logthis('retrieving cached data ');  
         if (tie(%cache,'GDBM_File',$cachefilename,&GDBM_READER(),0640)) {          if (tie(%cache,'GDBM_File',$cachefilename,&GDBM_READER(),0640)) {
             if (defined($symb)) {              if (defined($symb)) {
                 my  $searchkey = $key.&Apache::lonnet::escape($symb);                  my  $searchkey = $key.&Apache::lonnet::escape($symb);
Line 1647  sub get_current_state { Line 1653  sub get_current_state {
                     if ($testkey =~ /$searchkey/) { # \Q \E?  May be necc.                      if ($testkey =~ /$searchkey/) { # \Q \E?  May be necc.
                         my $tmpsymb = $1;                          my $tmpsymb = $1;
                         next if ($tmpsymb =~ 'time');                          next if ($tmpsymb =~ 'time');
 #                        &Apache::lonnet::logthis('found '.$tmpsymb.':');  
                         $student_data{&Apache::lonnet::unescape($tmpsymb)} =                           $student_data{&Apache::lonnet::unescape($tmpsymb)} = 
                             &make_into_hash($params);                              &make_into_hash($params);
                     }                      }
Line 1657  sub get_current_state { Line 1662  sub get_current_state {
         }          }
     }      }
     if (! defined($symb)) {      if (! defined($symb)) {
 #        &Apache::lonnet::logthis("returning all data");  
         return %student_data;          return %student_data;
     } elsif (exists($student_data{$symb})) {      } elsif (exists($student_data{$symb})) {
 #        &Apache::lonnet::logthis("returning data for symb=".$symb);  
         return %{$student_data{$symb}};          return %{$student_data{$symb}};
     } else {      } else {
         return ();          return ();
Line 1685  $ENV{'course.'.$cid.'.domain'}, and $ENV Line 1688  $ENV{'course.'.$cid.'.domain'}, and $ENV
   
 Returns a reference to a hash which contains:  Returns a reference to a hash which contains:
  keys    '$sname:$sdom'   keys    '$sname:$sdom'
  values  [$end,$start,$id,$section,$fullname]   values  [$sdom,$sname,$end,$start,$id,$section,$fullname,$status]
   
   The constant values CL_SDOM, CL_SNAME, CL_END, etc. can be used
   as indices into the returned list to future-proof clients against
   changes in the list order.
   
 =cut  =cut
   
 ################################################  ################################################
 ################################################  ################################################
   
   sub CL_SDOM     { return 0; }
   sub CL_SNAME    { return 1; }
   sub CL_END      { return 2; }
   sub CL_START    { return 3; }
   sub CL_ID       { return 4; }
   sub CL_SECTION  { return 5; }
   sub CL_FULLNAME { return 6; }
   sub CL_STATUS   { return 7; }
   
 sub get_classlist {  sub get_classlist {
     my ($cid,$cdom,$cnum) = @_;      my ($cid,$cdom,$cnum) = @_;
     $cid = $cid || $ENV{'request.course.id'};      $cid = $cid || $ENV{'request.course.id'};

Removed from v.1.50  
changed lines
  Added in v.1.56


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.