Diff for /loncom/interface/loncoursedata.pm between versions 1.150 and 1.156

version 1.150, 2005/10/04 18:27:32 version 1.156, 2006/03/04 06:11:08
Line 66  and/or itself. Line 66  and/or itself.
   
 =cut  =cut
   
 sub LoadDiscussion {  
     my ($courseID)=@_;  
     my %Discuss=();  
     my %contrib=&Apache::lonnet::dump(  
                 $courseID,  
                 $env{'course.'.$courseID.'.domain'},  
                 $env{'course.'.$courseID.'.num'});  
     
     #my %contrib=&DownloadCourseInformation($name, $courseID, 0);  
   
     foreach my $temp(keys %contrib) {  
  if ($temp=~/^version/) {  
     my $ver=$contrib{$temp};  
     my ($dummy,$prb)=split(':',$temp);  
     for (my $idx=1; $idx<=$ver; $idx++ ) {  
  my $name=$contrib{"$idx:$prb:sendername"};  
  $Discuss{"$name:$prb"}=$idx;  
     }  
  }  
     }         
   
     return \%Discuss;  
 }  
   
 ################################################  ################################################
 ################################################  ################################################
   
Line 1291  sub store_student_data { Line 1267  sub store_student_data {
         while (my ($parameter,$value) = each(%$param_hash)) {          while (my ($parameter,$value) = each(%$param_hash)) {
             next if ($parameter !~ /^resource\.(.*)\.(solved|awarded)$/);              next if ($parameter !~ /^resource\.(.*)\.(solved|awarded)$/);
             my $part = $1;              my $part = $1;
       next if ($part =~ /\./);
             next if (exists($stored{$part}));              next if (exists($stored{$part}));
             $stored{$part}++;              $stored{$part}++;
             #              #
Line 1872  sub execute_SQL_request { Line 1849  sub execute_SQL_request {
     my ($dbh,$request)=@_;      my ($dbh,$request)=@_;
 #    &Apache::lonnet::logthis($request);  #    &Apache::lonnet::logthis($request);
     my $sth = $dbh->prepare($request);      my $sth = $dbh->prepare($request);
       if (!$sth) {
    die($dbh->errstr . " SQL: $request");
       }
     $sth->execute();      $sth->execute();
     my $row = $sth->fetchrow_arrayref();      my $row = $sth->fetchrow_arrayref();
     if (ref($row) eq 'ARRAY' && scalar(@$row)>0) {      if (ref($row) eq 'ARRAY' && scalar(@$row)>0) {
Line 2029  Inputs: Line 2009  Inputs:
     $Sections: array ref of sections to include,      $Sections: array ref of sections to include,
     $enrollment: string,      $enrollment: string,
     $courseid (may be omitted)      $courseid (may be omitted)
       $starttime (may be omitted)
       $endtime (may be omitted)
       $has_award_for (may be omitted)
   
 Returns; An array of arrays.  The sub arrays contain a student name and  Returns; An array of arrays.  The sub arrays contain a student name and
 their score on the resources.  their score on the resources. $starttime and $endtime constrain the
   list to awards obtained during the given time limits. $has_score_on
   constrains the list to those students who at least attempted the
   resource identified by the given symb, which is used to filter out
   such students for statistics that would be adversely affected by such
   students. 
   
 =cut  =cut
   
Line 2041  sub RNK_student { return 0; }; Line 2029  sub RNK_student { return 0; };
 sub RNK_score   { return 1; };  sub RNK_score   { return 1; };
   
 sub rank_students_by_scores_on_resources {  sub rank_students_by_scores_on_resources {
     my ($resources,$Sections,$enrollment,$courseid,$starttime,$endtime) = @_;      my ($resources,$Sections,$enrollment,$courseid,$starttime,$endtime,$has_award_for) = @_;
     return if (! defined($resources) || ! ref($resources) eq 'ARRAY');      return if (! defined($resources) || ! ref($resources) eq 'ARRAY');
     if (! defined($courseid)) {      if (! defined($courseid)) {
         $courseid = $env{'request.course.id'};          $courseid = $env{'request.course.id'};
Line 2054  sub rank_students_by_scores_on_resources Line 2042  sub rank_students_by_scores_on_resources
     my $symb_limits = '('.join(' OR ',map {'a.symb_id='.&get_symb_id($_);      my $symb_limits = '('.join(' OR ',map {'a.symb_id='.&get_symb_id($_);
                                        } @$resources                                         } @$resources
                                ).')';                                 ).')';
       my ($award_col, $award_join, $award_clause) = ('', '', '');
       if ($has_award_for) {
           my $resource_id = &get_symb_id($has_award_for);
           $award_col = ", perf.awarded";
           $award_join = "LEFT JOIN $performance_table AS perf ON perf.symb_id"
               ." = $resource_id AND perf.student_id = b.student_id ";
           $award_clause = "AND perf.awarded IS NOT NULL";
       }
     my $time_limits = &limit_by_start_end_time($starttime,$endtime,'a');      my $time_limits = &limit_by_start_end_time($starttime,$endtime,'a');
     my $request = 'SELECT b.student,SUM(a.awarded*w.weight) AS score FROM '.      my $request = "SELECT b.student,SUM(a.awarded*w.weight) AS score "
         $performance_table.' AS a '.          ."$award_col FROM $performance_table AS a ".
         'NATURAL LEFT JOIN '.$weight_table.' AS w '.          "NATURAL LEFT JOIN $weight_table AS w ".
         'LEFT JOIN '.$student_table.' AS b ON a.student_id=b.student_id '.          "LEFT JOIN $student_table AS b ON a.student_id=b.student_id ".
         'WHERE ';          "$award_join WHERE ";
     if (defined($section_limits)) {      if (defined($section_limits)) {
         $request .= $section_limits.' AND ';          $request .= $section_limits.' AND ';
     }      }
Line 2074  sub rank_students_by_scores_on_resources Line 2070  sub rank_students_by_scores_on_resources
     }      }
     $request =~ s/( AND )$//;   # Remove extra conjunction      $request =~ s/( AND )$//;   # Remove extra conjunction
     $request =~ s/( WHERE )$//; # In case there were no limits placed on it      $request =~ s/( WHERE )$//; # In case there were no limits placed on it
     $request .= ' GROUP BY a.student_id ORDER BY score';      $request .= " $award_clause GROUP BY a.student_id ORDER BY score";
     #&Apache::lonnet::logthis('request = '.$/.$request);      #&Apache::lonnet::logthis('request = '.$/.$request);
     my $sth = $dbh->prepare($request);      my $sth = $dbh->prepare($request) or die "Can't prepare $request";
     $sth->execute();      $sth->execute();
     my $rows = $sth->fetchall_arrayref();      my $rows = $sth->fetchall_arrayref();
     return ($rows);      return ($rows);
Line 2211  sub score_stats { Line 2207  sub score_stats {
 #    &Apache::lonnet::logthis('request = '.$/.$request);  #    &Apache::lonnet::logthis('request = '.$/.$request);
           
     $request = 'SELECT SUM(weight) FROM '.$weight_table.      $request = 'SELECT SUM(weight) FROM '.$weight_table.
         ' WHERE ('.$symb_restriction.')';          ' AS a WHERE ('.$symb_restriction.')';
     my ($max_possible) = &execute_SQL_request($dbh,$request);      my ($max_possible) = &execute_SQL_request($dbh,$request);
     # &Apache::lonnet::logthis('request = '.$/.$request);      # &Apache::lonnet::logthis('request = '.$/.$request);
     return($min,$max,$ave,$std,$count,$max_possible);      return($min,$max,$ave,$std,$count,$max_possible);
Line 2260  sub count_stats { Line 2256  sub count_stats {
     $request =       $request = 
         'CREATE TEMPORARY TABLE '.$stats_table.' '.          'CREATE TEMPORARY TABLE '.$stats_table.' '.
         'SELECT a.student_id,'.          'SELECT a.student_id,'.
         'COUNT(a.award) AS count FROM '.          'SUM(a.awarded) AS count FROM '.
         $performance_table.' AS a '.          $performance_table.' AS a '.
         'LEFT JOIN '.$student_table.' AS b ON a.student_id=b.student_id '.          'LEFT JOIN '.$student_table.' AS b ON a.student_id=b.student_id '.
         'WHERE ('.$symb_restriction.')'.          'WHERE ('.$symb_restriction.')';
         " AND a.award!='INCORRECT_ATTEMPTED'";  
     if ($time_limits) {      if ($time_limits) {
         $request .= ' AND '.$time_limits;          $request .= ' AND '.$time_limits;
     }      }

Removed from v.1.150  
changed lines
  Added in v.1.156


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