--- loncom/interface/loncoursedata.pm 2004/03/07 21:42:19 1.122 +++ loncom/interface/loncoursedata.pm 2004/03/08 16:12:35 1.123 @@ -1,6 +1,6 @@ # The LearningOnline Network with CAPA # -# $Id: loncoursedata.pm,v 1.122 2004/03/07 21:42:19 matthew Exp $ +# $Id: loncoursedata.pm,v 1.123 2004/03/08 16:12:35 matthew Exp $ # # Copyright Michigan State University Board of Trustees # @@ -1930,16 +1930,21 @@ sub get_problem_statistics { my $dbh = &Apache::lonmysql::get_dbh(); return undef if (! defined($dbh)); # + # Clean out the table $dbh->do('DROP TABLE '.$stats_table); # May return an error my $request = 'CREATE TEMPORARY TABLE '.$stats_table.' '. 'SELECT a.student_id,a.solved,a.award,a.awarded,a.tries '. 'FROM '.$performance_table.' AS a '; + # + # See if we need to include some requirements on the students if ((defined($Sections) && lc($Sections->[0]) ne 'all') || (defined($status) && lc($status) ne 'any')) { $request .= 'NATURAL LEFT JOIN '.$student_table.' AS b '; } $request .= ' WHERE a.symb_id='.$symb_id.' AND a.part_id='.$part_id; + # + # Limit the students included to those specified if (defined($Sections) && lc($Sections->[0]) ne 'all') { $request .= ' AND ('. join(' OR ', map { "b.section='".$_."'" } @$Sections @@ -1949,7 +1954,7 @@ sub get_problem_statistics { $request .= " AND b.status='".$status."'"; } # - &Apache::lonnet::logthis('starttime = '.$starttime); + # Limit by starttime and endtime my $time_requirements = undef; if (defined($starttime)) { $time_requirements .= 'a.timestamp>='.$starttime; @@ -1962,22 +1967,20 @@ sub get_problem_statistics { if (defined($time_requirements)) { $request .= ' AND '.$time_requirements; } + # + # Finally, execute the request to create the temporary table $dbh->do($request); -# &Apache::lonnet::logthis('request = '.$/.$request); + # + # Collect the first suite of statistics $request = 'SELECT COUNT(*),SUM(tries),MAX(tries),AVG(tries),STD(tries) '. 'FROM '.$stats_table; my ($num,$tries,$mod,$mean,$STD) = &execute_SQL_request ($dbh,$request); -# &Apache::lonnet::logthis('request = '.$/.$request); $request = 'SELECT SUM(awarded) FROM '.$stats_table; my ($Solved) = &execute_SQL_request($dbh,$request); -# &Apache::lonnet::logthis('request = '.$/.$request); $request = 'SELECT SUM(awarded) FROM '.$stats_table. " WHERE solved='correct_by_override'"; -# &Apache::lonnet::logthis('request = '.$/.$request); my ($solved) = &execute_SQL_request($dbh,$request); -# $Solved = int($Solved); -# $solved = int($solved); # $num = 0 if (! defined($num)); $tries = 0 if (! defined($tries)); @@ -1986,9 +1989,10 @@ sub get_problem_statistics { $Solved = 0 if (! defined($Solved)); $solved = 0 if (! defined($solved)); # + # Compute the more complicated statistics my $DegOfDiff = 'nan'; $DegOfDiff = 1-($Solved)/$tries if ($tries>0); - + # my $SKEW = 'nan'; my $wrongpercent = 0; if ($num > 0) { @@ -1998,26 +2002,25 @@ sub get_problem_statistics { $wrongpercent=int(10*100*($num-$Solved+$solved)/$num)/10; } # -# $dbh->do('DROP TABLE '.$stats_table); # May return an error + # Drop the temporary table + $dbh->do('DROP TABLE '.$stats_table); # May return an error # # Store in metadata - # if ($num) { my %storestats=(); - + # my $urlres=(&Apache::lonnet::decode_symb($symb))[2]; - + # $storestats{$courseid.'___'.$urlres.'___timestamp'}=time; $storestats{$courseid.'___'.$urlres.'___stdno'}=$num; $storestats{$courseid.'___'.$urlres.'___avetries'}=$mean; $storestats{$courseid.'___'.$urlres.'___difficulty'}=$DegOfDiff; - + # $urlres=~/^(\w+)\/(\w+)/; &Apache::lonnet::put('nohist_resevaldata',\%storestats,$1,$2); } # # Return result - # return { num_students => $num, tries => $tries, max_tries => $mod, @@ -2042,6 +2045,7 @@ sub execute_SQL_request { return (); } + sub get_student_data { my ($students,$courseid) = @_; $courseid = $ENV{'request.course.id'} if (! defined($courseid));