# The LearningOnline Network with CAPA
#
# $Id: lonproblemanalysis.pm,v 1.22 2003/06/18 17:34:02 albertel 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,9/7,11/22 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::lonstatistics::SectionSelect('Section','multiple',5);
$Ptr .= ' |
'."\n";
$Ptr .= 'Intervals | '."\n";
$Ptr .= '';
$Ptr .= &IntervalOptions($cache{'Interval'});
$Ptr .= ' |
';
$r->print($Ptr);
$r->rflush();
# $r->print($cache{'OptionResponses'}.'
');
$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'});
my $studentCount = scalar @$students;
for(my $studentIndex=$studentCount-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();
}
&Apache::lonhtmlcommon::Close_PrgWin($r);
### jason code for checing is there data in cache
# 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 $heading = 'Restore this particular Option Response Problem '.
'Results, Please wait...';
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; }
my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r, $title,
$heading,$#$students+1);
#Java script Progress window
for(my $index=0; $index<(scalar @$students); $index++) {
if($c->aborted()) { untie(%cache); return; }
&Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state,
'last student '.$students->[$index]);
&OpStatus($problemId, $students->[$index], \%ConceptData,
$analyzeData->{'foil_to_concept'}, $analyzeData,
\%cache, $courseID);
}
&Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);
$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_body($uri);
$Str .= '
Here you can see the Problem:
'.$Answ;
$Str .= '