# The LearningOnline Network with CAPA
# (Publication Handler
#
# $Id: lonproblemanalysis.pm,v 1.10 2002/09/07 23:07:38 minaeibi Exp $
#
# Copyright Michigan State University Board of Trustees
#
# This file is part of the LearningOnline Network with CAPA (LON-CAPA).
#
# LON-CAPA is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# LON-CAPA is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with LON-CAPA; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# /home/httpd/html/adm/gpl.txt
#
# http://www.lon-capa.org/
#
# (Navigate problems for statistical reports
# YEAR=2002
# 5/12,7/26 Behrouz Minaei
#
###
package Apache::lonproblemanalysis;
use strict;
use Apache::lonnet();
use Apache::lonhtmlcommon();
use GDBM_File;
my $jr;
sub BuildProblemAnalysisPage {
my ($cacheDB, $r)=@_;
my %cache;
unless(tie(%cache,'GDBM_File',$cacheDB,&GDBM_READER(),0640)) {
$r->print('Unable to tie database.');
return;
}
my $Ptr = '';
$Ptr .= '
';
$Ptr .= 'Select Sections';
$Ptr .= ' | '."\n";
$Ptr .= ''."\n";
my @sectionsSelected = split(':',$cache{'sectionsSelected'});
my @sections = split(':',$cache{'sectionList'});
$Ptr .= &Apache::lonhtmlcommon::MultipleSectionSelect(\@sections,
\@sectionsSelected,
'Statistics');
$Ptr .= ' |
'."\n";
$Ptr .= 'Intervals | '."\n";
$Ptr .= '';
$Ptr .= &IntervalOptions($cache{'Interval'});
$Ptr .= ' |
';
$r->print($Ptr);
$r->rflush();
$r->print(&OptionResponseTable($cache{'OptionResponses'}, \%cache, $r));
untie(%cache);
return;
}
sub BuildAnalyzePage {
my ($cacheDB, $students, $courseID,$r)=@_;
$jr = $r;
my $c = $r->connection;
my $Str = '';
my %cache;
unless(tie(%cache,'GDBM_File',$cacheDB,&GDBM_READER(),0640)) {
$Str .= 'Unable to tie database.';
$r->print($Str);
return;
}
# Remove students who don't have the proper section.
my @sectionsSelected = split(':',$cache{'sectionsSelected'});
for(my $studentIndex=((scalar @$students)-1); $studentIndex>=0;
$studentIndex--) {
my $value = $cache{$students->[$studentIndex].':section'};
my $found = 0;
foreach (@sectionsSelected) {
if($_ eq 'none') {
if($value eq '' || !defined($value) || $value eq ' ') {
$found = 1;
last;
}
} else {
if($value eq $_) {
$found = 1;
last;
}
}
}
if($found == 0) {
splice(@$students, $studentIndex, 1);
}
}
unless(untie(%cache)) {
$r->print('Can not untie hash.');
$r->rflush();
}
my $error =
&Apache::loncoursedata::DownloadStudentCourseDataSeparate($students,
'true',
$cacheDB,
'true',
'true',
$courseID,
$r, $c);
if($error ne 'OK') {
$r->print($error.'
Error downloading course data
');
return;
}
unless(tie(%cache,'GDBM_File',$cacheDB,&GDBM_READER(),0640)) {
$Str .= 'Unable to tie database.';
$r->print($Str);
return;
}
my ($problemId, $part, $responseId)=split(':',$cache{'AnalyzeInfo'});
my $uri = $cache{$problemId.':source'};
my $problem = $cache{$problemId.':problem'};
my $title = $cache{$problemId.':title'};
my $interval = $cache{'Interval'};
my %ConceptData;
$ConceptData{"Interval"} = $interval;
#Initialize the option response true answers
my ($analyzeData) = &InitAnalysis($uri, $part, $responseId, $problem,
$students->[0], $courseID);
if(defined($analyzeData->{'error'})) {
$Str .= $analyzeData->{'error'}.'
Incorrect part requested.
';
$r->print($Str);
return;
}
$r->print($Str);
$Str = '';
if($c->aborted()) { untie(%cache); return; }
#compute the intervals
&Interval($part, $problem, $interval, $analyzeData->{'concepts'},
\%ConceptData);
$title =~ s/\ /"_"/eg;
$Str .= '
'.$uri.'';
$r->print($Str);
$Str = '';
if($c->aborted()) { untie(%cache); return; }
#Java script Progress window
for(my $index=0; $index<(scalar @$students); $index++) {
if($c->aborted()) { untie(%cache); return; }
&OpStatus($problemId, $students->[$index], \%ConceptData,
$analyzeData->{'foil_to_concept'}, $analyzeData, \%cache);
}
$Str .= '
';
for (my $k=0; $k<$interval; $k++ ) {
if($c->aborted()) { untie(%cache); return $Str; }
$Str .= &DrawGraph($k, $title, $analyzeData->{'concepts'},
\%ConceptData);
$r->print($Str);
$Str = '';
}
for (my $k=0; $k<$interval; $k++ ) {
if($c->aborted()) { untie(%cache); return $Str; }
$Str .= &DrawTable($k, $analyzeData->{'concepts'}, \%ConceptData);
$r->print($Str);
$Str = '';
}
my $Answ=&Apache::lonnet::ssi($uri);
$Str .= '
Here you can see the Problem:
'.$Answ;
$Str .= '