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