version 1.153, 2006/02/05 18:49:47
|
version 1.155, 2006/02/05 19:14:58
|
Line 2033 Inputs:
|
Line 2033 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 2045 sub RNK_student { return 0; };
|
Line 2053 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 2058 sub rank_students_by_scores_on_resources
|
Line 2066 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 2078 sub rank_students_by_scores_on_resources
|
Line 2094 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); |