--- loncom/interface/loncoursedata.pm 2004/02/02 19:50:33 1.113 +++ loncom/interface/loncoursedata.pm 2004/02/02 21:45:12 1.114 @@ -1,6 +1,6 @@ # The LearningOnline Network with CAPA # -# $Id: loncoursedata.pm,v 1.113 2004/02/02 19:50:33 matthew Exp $ +# $Id: loncoursedata.pm,v 1.114 2004/02/02 21:45:12 matthew Exp $ # # Copyright Michigan State University Board of Trustees # @@ -2164,50 +2164,65 @@ sub get_response_time_data { =pod -=item &get_student_scores($Students,$Symbs,$courseid) +=item &get_student_scores($Students,$Symbs,$enrollment,$courseid) =cut ################################################ ################################################ sub get_student_scores { - my ($Students,$Symbs,$courseid) = @_; + my ($Sections,$Symbs,$enrollment,$courseid) = @_; $courseid = $ENV{'request.course.id'} if (! defined($courseid)); &setup_table_names($courseid); my $dbh = &Apache::lonmysql::get_dbh(); return (undef) if (! defined($dbh)); my $tmptable = $courseid.'_temp_'.time; - my ($symb_requirements,$student_requirements); + # + my $symb_requirements; if (defined($Symbs) && @$Symbs) { $symb_requirements = '('. - join(' OR ', map{ "(symb_id='".&get_symb_id($_->{'symb'}). - "' AND part_id='".&get_part_id($_->{'part'}). + join(' OR ', map{ "(a.symb_id='".&get_symb_id($_->{'symb'}). + "' AND a.part_id='".&get_part_id($_->{'part'}). "')" } @$Symbs).')'; } - if (defined($Students)) { + # + my $student_requirements; + if ( (defined($Sections) && $Sections->[0] ne 'all')) { $student_requirements = '('. - join(' OR ', map {'student_id='. - &get_student_id($_->{'username'}, - $_->{'domain'}) - } @$Students + join(' OR ', map { "b.section='".$_."'" } @$Sections ).')'; } + # + my $enrollment_requirements=undef; + if (defined($enrollment) && $enrollment ne 'Any') { + $enrollment_requirements = "b.status='".$enrollment."'"; + } + ## + ## my $request = 'CREATE TEMPORARY TABLE IF NOT EXISTS '.$tmptable. - ' SELECT student_id,SUM(awarded) AS score FROM '.$performance_table; - if (defined($symb_requirements) || defined($student_requirements)) { + ' SELECT a.student_id,SUM(a.awarded) AS score FROM '. + $performance_table.' AS a '; + if (defined($student_requirements) || defined($enrollment_requirements)) { + $request .= ' NATURAL LEFT JOIN '.$student_table.' AS b '; + } + if (defined($symb_requirements) || + defined($student_requirements) || + defined($enrollment_requirements) ) { $request .= ' WHERE '; - if (defined($symb_requirements)) { - $request .= $symb_requirements; - if (defined($student_requirements)) { - $request .= ' AND '.$student_requirements; - } - } elsif (defined($student_requirements)) { - $request .= $student_requirements; - } } - $request .= ' GROUP BY student_id'; - &Apache::lonnet::logthis("request = \n".$request); + if (defined($symb_requirements)) { + $request .= $symb_requirements.' AND '; + } + if (defined($student_requirements)) { + $request .= $student_requirements.' AND '; + } + if (defined($enrollment_requirements)) { + $request .= $enrollment_requirements.' AND '; + } + $request =~ s/ AND $//; + $request .= ' GROUP BY a.student_id'; +# &Apache::lonnet::logthis("request = \n".$request); my $sth = $dbh->prepare($request); $sth->execute(); if ($dbh->err) {