--- loncom/interface/lonstatistics.pm 2002/08/28 22:42:15 1.48 +++ loncom/interface/lonstatistics.pm 2002/11/26 18:02:38 1.55 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # (Publication Handler # -# $Id: lonstatistics.pm,v 1.48 2002/08/28 22:42:15 stredwic Exp $ +# $Id: lonstatistics.pm,v 1.55 2002/11/26 18:02:38 minaeibi Exp $ # # Copyright Michigan State University Board of Trustees # @@ -35,7 +35,7 @@ # ### -package Apache::lonstatistics; +package Apache::lonstatistics; use strict; use Apache::Constants qw(:common :http); @@ -47,6 +47,7 @@ use Apache::lonhtmlcommon; use Apache::lonproblemanalysis; use Apache::lonproblemstatistics; use Apache::lonstudentassessment; +use Apache::lonpercentage; use HTML::TokeParser; use GDBM_File; @@ -84,6 +85,10 @@ sub ProcessFormData{ &CheckFormElement($cache, 'download', 'download', 'false'); &CheckFormElement($cache, 'StatisticsMaps', 'StatisticsMaps', 'All Maps'); + &CheckFormElement($cache, 'StatisticsProblemSelect', + 'StatisticsProblemSelect', 'All Problems'); + &CheckFormElement($cache, 'StatisticsPartSelect', + 'StatisticsPartSelect', 'All Parts'); if(defined($ENV{'form.Section'})) { my @sectionsSelected = (ref($ENV{'form.Section'}) ? @{$ENV{'form.Section'}} : @@ -122,7 +127,8 @@ sub ProcessFormData{ 'ProblemStatisticsAscend', 'Ascending'); &CheckFormElement($cache, 'ProblemStatisticsSort', 'ProblemStatisticsSort', 'Homework Sets Order'); - &CheckFormElement($cache, 'DisplayLegend', 'DisplayLegend', 'Hide Legend'); + &CheckFormElement($cache, 'DisplayLegend', 'DisplayLegend', + 'Hide Legend'); &CheckFormElement($cache, 'SortProblems', 'SortProblems', 'Sort Within Sequence'); @@ -239,9 +245,11 @@ sub SortStudents { my $sortBy = ''; if(defined($cache->{'sort'})) { $sortBy = ':'.$cache->{'sort'}; + } else { + $sortBy = ':fullname'; } - my @order = sort { $cache->{$a.$sortBy} cmp $cache->{$b.$sortBy} || - $cache->{$a.':fullname'} cmp $cache->{$b.':fullname'} } + my @order = sort { lc($cache->{$a.$sortBy}) cmp lc($cache->{$b.$sortBy}) || + lc($cache->{$a.':fullname'}) cmp lc($cache->{$b.':fullname'}) } @sorted1Students; return \@order; @@ -306,7 +314,7 @@ sub PrepareData { $isRecalculate=1; } - my $isCached = &Apache::loncoursedata::TestCacheData($cacheDB, + my $isCached = &Apache::loncoursedata::TestCacheData($cacheDB, $isRecalculate); if($isCached < 0) { return "Unable to tie hash to db file."; @@ -318,14 +326,14 @@ sub PrepareData { return "Unable to tie hash to db file."; } - if(!$isCached) { +# if(!$isCached) { my $processTopResourceMapReturn= - &Apache::loncoursedata::ProcessTopResourceMap(\%cache, $c, $r); + &Apache::loncoursedata::ProcessTopResourceMap(\%cache, $c); if($processTopResourceMapReturn ne 'OK') { untie(%cache); return $processTopResourceMapReturn; } - } + # } if($c->aborted()) { untie(%cache); @@ -377,16 +385,16 @@ sub PrepareData { if($download ne 'false') { my @who = ($download); - if(&Apache::loncoursedata::DownloadStudentCourseData(\@who, 'false', - $cacheDB, 'true', + if(&Apache::loncoursedata::DownloadStudentCourseData(\@who, 'false', + $cacheDB, 'true', 'false', $courseID, $r, $c) ne 'OK') { return 'Stop at download individual'; } } elsif($downloadAll ne 'false') { - if(&Apache::loncoursedata::DownloadStudentCourseData(\@allStudents, - 'false', - $cacheDB, 'true', + if(&Apache::loncoursedata::DownloadStudentCourseData(\@allStudents, + 'false', + $cacheDB, 'true', 'true', $courseID, $r, $c) ne 'OK') { return 'Stop at download all'; @@ -404,19 +412,37 @@ sub BuildClasslist { return 'Unable to tie database.'; } +# my $Ptr = ''; +# $Ptr .= ''; +# $Ptr .= ''."\n"; +# $Ptr .= '
Select Sections'; +# $Ptr .= ''."\n"; +# my @sectionsSelected = split(':',$cache{'sectionsSelected'}); +# my @sections = split(':',$cache{'sectionList'}); +# $Ptr .= &Apache::lonhtmlcommon::MultipleSectionSelect(\@sections, +# \@sectionsSelected, +# 'Statistics'); +# $Ptr .= '

'; +# $r->print($Ptr); +# $r->rflush(); +# my %mySections = (); +# foreach (@sections) { $mySections{$_} = 'True'; } +# $r->print("
$cache{'sectionsSelected'}
"); + my $Str=''; $Str .= '
'."\n"; $Str .= ''."\n"; my $displayString = ''."\n"; - $Str .= &Apache::lonhtmlcommon::CreateHeadings(\%cache, + $Str .= &Apache::lonhtmlcommon::CreateHeadings(\%cache, $studentInformation, $headings, $displayString); $Str .= ''."\n"; my $alternate=0; foreach (@$students) { +# if ($mySections{$cache{$_.':'.'section'}} ne 'True') {next;} my ($username, $domain) = split(':', $_); if($alternate) { $Str .= ''; @@ -504,9 +530,11 @@ sub BuildStatistics { my @headings=('Full Name', 'Section', 'PID', 'Domain', 'User Name', 'Last Updated'); my $spacing = ' '; + my %reports = ('classlist' => 'Class list', 'problem_statistics' => 'Problem Statistics', 'student_assessment' => 'Student Assessment', + 'percentage' => 'Percentage Graphs', # 'activitylog' => 'Activity Log', 'reportSelected' => 'Class list'); @@ -517,15 +545,15 @@ sub BuildStatistics { $r->print(&Apache::lonhtmlcommon::Title('Course Statistics and Charts')); - my ($returnValue, $students) = &PrepareData($c, $cacheDB, - \@studentInformation, + my ($returnValue, $students) = &PrepareData($c, $cacheDB, + \@studentInformation, \@headings,$r); if($returnValue ne 'OK') { $r->print($returnValue."\n".''); return OK; } if(!$c->aborted()) { - &Apache::loncoursedata::CheckForResidualDownload($cacheDB, + &Apache::loncoursedata::CheckForResidualDownload($cacheDB, 'true', 'true', $courseID, $r, $c); @@ -535,8 +563,8 @@ sub BuildStatistics { if(tie(%cache,'GDBM_File',$cacheDB,&GDBM_READER(),0640)) { $GoToPage = $cache{'reportSelected'}; $reports{'reportSelected'} = $cache{'reportSelected'}; - if(defined($cache{'reportKey'}) && - !exists($reports{$cache{'reportKey'}}) && + if(defined($cache{'reportKey'}) && + !exists($reports{$cache{'reportKey'}}) && $cache{'reportKey'} ne 'false') { $reports{$cache{'reportKey'}} = $cache{'reportSelected'}; } @@ -558,9 +586,9 @@ sub BuildStatistics { if($GoToPage eq 'Activity Log') { &Apache::lonproblemstatistics::Activity(); } elsif($GoToPage eq 'Problem Statistics') { - &Apache::lonproblemstatistics::BuildProblemStatisticsPage($cacheDB, - $students, - $courseID, + &Apache::lonproblemstatistics::BuildProblemStatisticsPage($cacheDB, + $students, + $courseID, $c,$r); } elsif($GoToPage eq 'Option Response Analysis') { &Apache::lonproblemanalysis::BuildProblemAnalysisPage($cacheDB, $r); @@ -574,7 +602,7 @@ sub BuildStatistics { \@studentInformation, $r, $c); } elsif($GoToPage eq 'Analyze') { - &Apache::lonproblemanalysis::BuildAnalyzePage($cacheDB, $students, + &Apache::lonproblemanalysis::BuildAnalyzePage($cacheDB, $students, $courseID, $r); } elsif($GoToPage eq 'DoDiffGraph' || $GoToPage eq 'PercentWrongGraph') { my $courseDescription = $ENV{'course.'.$courseID.'.description'}; @@ -586,6 +614,9 @@ sub BuildStatistics { } elsif($GoToPage eq 'Class list') { &BuildClasslist($cacheDB, $students, \@studentInformation, \@headings, $r); + } elsif($GoToPage eq 'Percentage Graphs') { + &Apache::lonpercentage::BuildPercentageGraph($cacheDB, $students, + $courseID, $c, $r); } $r->print(''."\n"); @@ -602,10 +633,17 @@ sub handler { # $jr = $r; + my $loaderror=&Apache::lonnet::overloaderror($r); + if ($loaderror) { return $loaderror; } + $loaderror= + &Apache::lonnet::overloaderror($r, + $ENV{'course.'.$ENV{'request.course.id'}.'.home'}); + if ($loaderror) { return $loaderror; } + unless(&Apache::lonnet::allowed('vgr',$ENV{'request.course.id'})) { $ENV{'user.error.msg'}= $r->uri.":vgr:0:0:Cannot view grades for complete course"; - return HTTP_NOT_ACCEPTABLE; + return HTTP_NOT_ACCEPTABLE; } # Set document type for header only @@ -623,7 +661,7 @@ sub handler { unless($ENV{'request.course.fn'}) { my $requrl=$r->uri; $ENV{'user.error.msg'}="$requrl:bre:0:0:Course not initialized"; - return HTTP_NOT_ACCEPTABLE; + return HTTP_NOT_ACCEPTABLE; } $r->content_type('text/html');
DISPLAYDATA