--- loncom/interface/lonstatistics.pm 2002/07/29 21:19:44 1.36 +++ loncom/interface/lonstatistics.pm 2002/08/13 00:37:18 1.41 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # (Publication Handler # -# $Id: lonstatistics.pm,v 1.36 2002/07/29 21:19:44 minaeibi Exp $ +# $Id: lonstatistics.pm,v 1.41 2002/08/13 00:37:18 stredwic Exp $ # # Copyright Michigan State University Board of Trustees # @@ -47,7 +47,6 @@ use Apache::lonhtmlcommon; use Apache::lonproblemanalysis; use Apache::lonproblemstatistics; use Apache::lonstudentassessment; -use Apache::lonchart; use HTML::TokeParser; use GDBM_File; @@ -72,7 +71,8 @@ sub ProcessFormData{ &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, ['sort','download', 'reportSelected', - 'StudentAssessmentStudent']); + 'StudentAssessmentStudent', + 'ProblemStatisticsSort']); &CheckFormElement($cache, 'Status', 'Status', 'Active'); &CheckFormElement($cache, 'postdata', 'reportSelected', 'Class list'); &CheckFormElement($cache, 'reportSelected', 'reportSelected', @@ -83,6 +83,7 @@ sub ProcessFormData{ &CheckFormElement($cache, 'sort', 'sort', 'fullname'); &CheckFormElement($cache, 'download', 'download', 'false'); + # student assessment if(defined($ENV{'form.CreateStudentAssessment'}) || defined($ENV{'form.NextStudent'}) || defined($ENV{'form.PreviousStudent'})) { @@ -110,6 +111,20 @@ sub ProcessFormData{ $cache->{'sectionsSelected'} = $cache->{'sectionList'}; } + # Problem analysis + &CheckFormElement($cache, 'Interval', 'Interval', '1'); + + # ProblemStatistcs + &CheckFormElement($cache, 'DisplayCSVFormat', + 'DisplayFormat', 'Display Table Format'); + &CheckFormElement($cache, 'ProblemStatisticsAscend', + 'ProblemStatisticsAscend', 'Ascending'); + &CheckFormElement($cache, 'ProblemStatisticsMaps', + 'ProblemStatisticsMaps', 'All Maps'); + &CheckFormElement($cache, 'ProblemStatisticsSort', + 'ProblemStatisticsSort', 'Homework Sets Order'); + + # Search only form elements my @headingColumns=(); my @sequenceColumns=(); my $foundColumn = 0; @@ -128,18 +143,30 @@ sub ProcessFormData{ } } + $cache->{'reportKey'} = 'false'; + if($cache->{'reportSelected'} eq 'Analyze') { + $cache->{'reportKey'} = 'Analyze'; + } elsif($cache->{'reportSelected'} eq 'DoDiffGraph') { + $cache->{'reportKey'} = 'DoDiffGraph'; + } elsif($cache->{'reportSelected'} eq 'PercentWrongGraph') { + $cache->{'reportKey'} = 'PercentWrongGraph'; + } + + if(defined($ENV{'form.DoDiffGraph'})) { + $cache->{'reportSelected'} = 'DoDiffGraph'; + $cache->{'reportKey'} = 'DoDiffGraph'; + } elsif(defined($ENV{'form.PercentWrongGraph'})) { + $cache->{'reportSelected'} = 'PercentWrongGraph'; + $cache->{'reportKey'} = 'PercentWrongGraph'; + } + foreach (keys(%ENV)) { - if(/form\.Analyze:::/) { -# $cache->{'reportSelected'} = 'Analyze'; -# $cache->{'reportKey'} = 'Problem Analysis'; - my ($uri, $title, $part, $problem); - (undef, $uri, $title, $part, $problem)=split(':::', $_); - $cache->{'AnalyzeURI'} = $uri; - $cache->{'AnalyzeTitle'} = $title; - $cache->{'AnalyzePart'} = $part; - $cache->{'AnalyzeProblem'} = $problem; - - &CheckFormElement($cache, 'Interval', 'Interval', '1'); + if(/form\.Analyze/) { + $cache->{'reportSelected'} = 'Analyze'; + $cache->{'reportKey'} = 'Analyze'; + my $data; + (undef, $data)=split(':::', $_); + $cache->{'AnalyzeInfo'}=$data; } elsif(/form\.HeadingColumn/) { my $value = $_; $value =~ s/form\.//; @@ -168,34 +195,6 @@ sub ProcessFormData{ $cache->{'DefaultColumns'} = 'false'; return; - - # Select page to display - if(defined($ENV{'form.ProblemStatistics'}) || - defined($ENV{'form.ProblemStatisticsRecalculate'}) || - defined($ENV{'form.DisplayCSVFormat'})) { - $cache->{'GoToPage'} = 'ProblemStatistics'; - &CheckFormElement($cache, 'DisplayCSVFormat', - 'DisplayFormat', 'Display Table Format'); - &CheckFormElement($cache, 'Ascend','ProblemStatisticsAscend', - 'Ascending'); - &CheckFormElement($cache, 'Maps', 'ProblemStatisticsMap', - 'All Maps'); - } elsif(defined($ENV{'form.ProblemAnalysis'})) { - $cache->{'GoToPage'} = 'ProblemAnalysis'; - &CheckFormElement($cache, 'Interval', 'Interval', '1'); - } elsif(defined($ENV{'form.DoDiffGraph'})) { - $cache->{'GoToPage'} = 'DoDiffGraph'; - } elsif(defined($ENV{'form.PercentWrongGraph'})) { - $cache->{'GoToPage'} = 'PercentWrongGraph'; - } elsif(defined($ENV{'form.ActivityLog'})) { - $cache->{'GoToPage'} = 'ActivityLog'; - } else { - $cache->{'GoToPage'} = 'Menu'; - } - - &CheckFormElement($cache, 'Status', 'Status', 'Active'); - - return; } =pod @@ -296,7 +295,7 @@ sub SpaceColumns { } sub PrepareData { - my ($c, $cacheDB, $studentInformation, $headings)=@_; + my ($c, $cacheDB, $studentInformation, $headings,$r)=@_; # Test for access to the cache data my $courseID=$ENV{'request.course.id'}; @@ -313,13 +312,13 @@ sub PrepareData { # Download class list information if not using cached data my %cache; - unless(tie(%cache,'GDBM_File',$cacheDB,&GDBM_WRCREAT,0640)) { + unless(tie(%cache,'GDBM_File',$cacheDB,&GDBM_WRCREAT(),0640)) { return "Unable to tie hash to db file."; } if(!$isCached) { my $processTopResourceMapReturn= - &Apache::loncoursedata::ProcessTopResourceMap(\%cache, $c); + &Apache::loncoursedata::ProcessTopResourceMap(\%cache, $c, $r); if($processTopResourceMapReturn ne 'OK') { untie(%cache); return $processTopResourceMapReturn; @@ -359,33 +358,31 @@ sub PrepareData { $cache{'updateTime:columnWidth'}=24; if($cache{'download'} ne 'false') { - my $who = $cache{'download'}; - my $courseData = - &Apache::loncoursedata::DownloadCourseInformation( - $who, $courseID, - $cache{$who.':lastDownloadTime'}); - &Apache::loncoursedata::ProcessStudentData(\%cache, $courseData, $who); + my @who = ($cache{'download'}); $cache{'download'} = 'false'; + if(&Apache::loncoursedata::DownloadStudentCourseData(\@who, 'false', + $cacheDB, 'true', + 'false', $courseID, + $r, $c) ne 'OK') { + untie(%cache); + return 'Stop at download individual'; + } } elsif($cache{'DownloadAll'} ne 'false') { + $cache{'DownloadAll'} = 'false'; my @allStudents; if($cache{'DownloadAll'} eq 'sorted') { @allStudents = @$students; } else { @allStudents = split(':::', $cache{'NamesOfStudents'}); } - foreach (@allStudents) { - my $courseData = - &Apache::loncoursedata::DownloadCourseInformation( - $_, $courseID, - $cache{$_.':lastDownloadTime'}); - &Apache::loncoursedata::ProcessStudentData(\%cache, $courseData, - $_); - if($c->aborted()) { - untie(%cache); - return 'aborted'; - } + if(&Apache::loncoursedata::DownloadStudentCourseData(\@allStudents, + 'false', + $cacheDB, 'true', + 'true', $courseID, + $r, $c) ne 'OK') { + untie(%cache); + return 'Stop at download all'; } - $cache{'DownloadAll'} = 'false'; } if($c->aborted()) { @@ -398,48 +395,11 @@ sub PrepareData { return ('OK', $students); } - -# Create progress -sub Create_PrgWin { - my ($r)=@_; - $r->print(< - popwin=open('','popwin','width=400,height=100'); - popwin.document.writeln(''+ - 'LON-CAPA Statistics'+ - '

Computation Progress

'+ - '
'+ - '
'+ - ''); - popwin.document.close(); - -ENDPOP - - $r->rflush(); -} - -# update progress -sub Update_PrgWin { - my ($totalStudents,$index,$name,$r)=@_; - $r->print(''); - $r->rflush(); -} - -# close Progress Line -sub Close_PrgWin { - my ($r)=@_; - $r->print(''); - $r->rflush(); -} - - sub BuildClasslist { - my ($cacheDB,$students,$studentInformation,$headings)=@_; + my ($cacheDB,$students,$studentInformation,$headings,$r)=@_; my %cache; - unless(tie(%cache,'GDBM_File',$cacheDB,&GDBM_READER,0640)) { + unless(tie(%cache,'GDBM_File',$cacheDB,&GDBM_READER(),0640)) { return 'Unable to tie database.'; } @@ -449,9 +409,11 @@ sub BuildClasslist { my $displayString = 'DISPLAYDATA '."\n"; - $Str .= &Apache::lonhtmlcommon::CreateHeadings(\%cache, $studentInformation, + $Str .= &Apache::lonhtmlcommon::CreateHeadings(\%cache, + $studentInformation, $headings, $displayString); $Str .= ''."\n"; + my $alternate=0; foreach (@$students) { my ($username, $domain) = split(':', $_); @@ -486,10 +448,12 @@ sub BuildClasslist { $Str .= ''."\n"; $Str .= ''."\n"; + $r->print($Str); + $r->rflush(); untie(%cache); - return $Str; + return; } sub CreateMainMenu { @@ -542,6 +506,7 @@ sub BuildStatistics { my %reports = ('classlist' => 'Class list', 'problem_statistics' => 'Problem Statistics', 'student_assessment' => 'Student Assessment', +# 'activitylog' => 'Activity Log', 'reportSelected' => 'Class list'); my %cache; @@ -549,30 +514,40 @@ sub BuildStatistics { my $cacheDB = "/home/httpd/perl/tmp/$ENV{'user.name'}". "_$ENV{'user.domain'}_$courseID\_statistics.db"; + $r->print(&Apache::lonhtmlcommon::Title('LON-CAPA Statistics')); + my ($returnValue, $students) = &PrepareData($c, $cacheDB, \@studentInformation, - \@headings); + \@headings,$r); if($returnValue ne 'OK') { - $r->print(''.$returnValue."\n".''); + $r->print($returnValue."\n".''); return OK; } + if(!$c->aborted()) { + &Apache::loncoursedata::CheckForResidualDownload($cacheDB, + 'true', 'true', + $courseID, + $r, $c); + } my $GoToPage; - if(tie(%cache,'GDBM_File',$cacheDB,&GDBM_READER,0640)) { + if(tie(%cache,'GDBM_File',$cacheDB,&GDBM_READER(),0640)) { $GoToPage = $cache{'reportSelected'}; $reports{'reportSelected'} = $cache{'reportSelected'}; -# if(defined($cache{'reportKey'}) && $cache{'reportKey'} ne 'false') { -# $reports{$cache{'reportKey'}} = $cache{'reportSelected'}; -# } + if(defined($cache{'reportKey'}) && + !exists($reports{$cache{'reportKey'}}) && + $cache{'reportKey'} ne 'false') { + $reports{$cache{'reportKey'}} = $cache{'reportSelected'}; + } if(defined($cache{'OptionResponses'})) { $reports{'problem_analysis'} = 'Problem Analysis'; } - $r->print(&Apache::lonhtmlcommon::Title('LON-CAPA Statistics')); $r->print('
print('method="post" action="/adm/statistics">'); $r->print(&CreateMainMenu($cache{'Status'}, \%reports)); + $r->rflush(); untie(%cache); } else { $r->print('Unable to tie database.'); @@ -587,29 +562,24 @@ sub BuildStatistics { $courseID, $c,$r); } elsif($GoToPage eq 'Problem Analysis') { - $r->print( - &Apache::lonproblemanalysis::BuildProblemAnalysisPage($cacheDB)); + &Apache::lonproblemanalysis::BuildProblemAnalysisPage($cacheDB, $r); } elsif($GoToPage eq 'Student Assessment') { - $r->print( - &Apache::lonstudentassessment::BuildStudentAssessmentPage($cacheDB, - $students, - $courseID, - 'Statistics', - \@headings, - $spacing, - \@studentInformation, - $r, $c)); + &Apache::lonstudentassessment::BuildStudentAssessmentPage($cacheDB, + $students, + $courseID, + 'Statistics', + \@headings, + $spacing, + \@studentInformation, + $r, $c); } elsif($GoToPage eq 'Analyze') { - $r->print(&Apache::lonproblemanalysis::BuildAnalyzePage($cacheDB, - $students, - $courseID)); - } elsif($GoToPage eq 'DoDiffGraph') { - &Apache::lonproblemstatistics::BuildDiffGraph($r); - } elsif($GoToPage eq 'PercentWrongGraph') { - &Apache::lonproblemstatistics::BuildWrongGraph($r); + &Apache::lonproblemanalysis::BuildAnalyzePage($cacheDB, $students, + $courseID, $r); + } elsif($GoToPage eq 'DoDiffGraph' || $GoToPage eq 'PercentWrongGraph') { + &Apache::lonproblemstatistics::BuildGraphicChart($GoToPage,$r,$cacheDB); } elsif($GoToPage eq 'Class list') { - $r->print(&BuildClasslist($cacheDB, $students, \@studentInformation, - \@headings)); + &BuildClasslist($cacheDB, $students, \@studentInformation, + \@headings, $r); } $r->print('
'."\n");