[LON-CAPA-cvs] cvs: loncom /interface loncoursedata.pm /interface/statistics lonproblemstatistics.pm
bowersj2
lon-capa-cvs@mail.lon-capa.org
Sun, 05 Feb 2006 19:10:31 -0000
bowersj2 Sun Feb 5 14:10:31 2006 EDT
Modified files:
/loncom/interface loncoursedata.pm
/loncom/interface/statistics lonproblemstatistics.pm
Log:
Fix bug 4537; degree of discrimation should be much more useful and
accurate now.
Index: loncom/interface/loncoursedata.pm
diff -u loncom/interface/loncoursedata.pm:1.153 loncom/interface/loncoursedata.pm:1.154
--- loncom/interface/loncoursedata.pm:1.153 Sun Feb 5 13:49:47 2006
+++ loncom/interface/loncoursedata.pm Sun Feb 5 14:10:19 2006
@@ -1,6 +1,6 @@
# The LearningOnline Network with CAPA
#
-# $Id: loncoursedata.pm,v 1.153 2006/02/05 18:49:47 albertel Exp $
+# $Id: loncoursedata.pm,v 1.154 2006/02/05 19:10:19 bowersj2 Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -2033,9 +2033,17 @@
$Sections: array ref of sections to include,
$enrollment: string,
$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
-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
@@ -2045,7 +2053,7 @@
sub RNK_score { return 1; };
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');
if (! defined($courseid)) {
$courseid = $env{'request.course.id'};
@@ -2058,12 +2066,21 @@
my $symb_limits = '('.join(' OR ',map {'a.symb_id='.&get_symb_id($_);
} @$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 $request = 'SELECT b.student,SUM(a.awarded*w.weight) AS score FROM '.
- $performance_table.' AS a '.
- 'NATURAL LEFT JOIN '.$weight_table.' AS w '.
- 'LEFT JOIN '.$student_table.' AS b ON a.student_id=b.student_id '.
- 'WHERE ';
+ my $request = "SELECT b.student,SUM(a.awarded*w.weight) AS score "
+ ."$award_col FROM $performance_table AS a ".
+ "NATURAL LEFT JOIN $weight_table AS w ".
+ "LEFT JOIN $student_table AS b ON a.student_id=b.student_id ".
+ "$award_join WHERE ";
if (defined($section_limits)) {
$request .= $section_limits.' AND ';
}
@@ -2078,9 +2095,9 @@
}
$request =~ s/( AND )$//; # Remove extra conjunction
$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);
- my $sth = $dbh->prepare($request);
+ my $sth = $dbh->prepare($request) or die "Can't prepare $request";
$sth->execute();
my $rows = $sth->fetchall_arrayref();
return ($rows);
Index: loncom/interface/statistics/lonproblemstatistics.pm
diff -u loncom/interface/statistics/lonproblemstatistics.pm:1.105 loncom/interface/statistics/lonproblemstatistics.pm:1.106
--- loncom/interface/statistics/lonproblemstatistics.pm:1.105 Fri Aug 26 17:53:23 2005
+++ loncom/interface/statistics/lonproblemstatistics.pm Sun Feb 5 14:10:28 2006
@@ -1,6 +1,6 @@
# The LearningOnline Network with CAPA
#
-# $Id: lonproblemstatistics.pm,v 1.105 2005/08/26 21:53:23 albertel Exp $
+# $Id: lonproblemstatistics.pm,v 1.106 2006/02/05 19:10:28 bowersj2 Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -1630,7 +1630,7 @@
(\@Resources,
[&Apache::lonstatistics::get_selected_sections()],
$Apache::lonstatistics::enrollment_status,undef,
- $starttime,$endtime);
+ $starttime,$endtime, $symb);
#
# compute their percent scores on the problems in the sequence,
my $number_to_grab = int(scalar(@{$ranking})/4);
@@ -1640,7 +1640,7 @@
my @TopSet =
map {
$_->[&Apache::loncoursedata::RNK_student()];
- } @{$ranking}[($num_students-$number_to_grab)..($num_students-1)];
+ } @{$ranking}[-$number_to_grab..0];
if (! @BottomSet || (@BottomSet == 1 && $BottomSet[0] eq '') ||
! @TopSet || (@TopSet == 1 && $TopSet[0] eq '')) {
return 'nan';