--- loncom/interface/lonstatistics.pm 2002/07/24 14:52:32 1.30 +++ loncom/interface/lonstatistics.pm 2002/07/25 21:23:51 1.32 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # (Publication Handler # -# $Id: lonstatistics.pm,v 1.30 2002/07/24 14:52:32 stredwic Exp $ +# $Id: lonstatistics.pm,v 1.32 2002/07/25 21:23:51 stredwic Exp $ # # Copyright Michigan State University Board of Trustees # @@ -31,7 +31,7 @@ # 11/1,11/4,11/16,12/14,12/16,12/18,12/20,12/31 Behrouz Minaei # YEAR=2002 # 1/22,2/1,2/6,2/25,3/2,3/6,3/17,3/21,3/22,3/26,4/7,5/6 Behrouz Minaei -# 5/12,5/14,5/15,5/19,5/26,7/16 Behrouz Minaei +# 5/12,5/14,5/15,5/19,5/26,7/16,25/7 Behrouz Minaei # ### @@ -51,8 +51,6 @@ use Apache::lonchart; use HTML::TokeParser; use GDBM_File; -my $r; -my %color; sub CheckFormElement { my ($cache, $ENVName, $cacheName, $default)=@_; @@ -96,8 +94,6 @@ sub ProcessFormData{ } else { $cache->{'StudentAssessmentMove'} = 'selected'; } - &CheckFormElement($cache, 'StudentAssessmentMap', 'StudentAssessmentMap', - 'All Maps'); &CheckFormElement($cache, 'StudentAssessmentStudent', 'StudentAssessmentStudent', 'All Students'); $cache->{'StudentAssessmentStudent'} = @@ -197,8 +193,57 @@ sub SortStudents { return \@order; } +=pod + +=item &SpaceColumns() + +Determines the width of all the columns in the chart. It is based on +the max of the data for that column and its header. + +=over 4 + +Input: $students, $studentInformation, $headings, $ChartDB + +$students: An array pointer to a list of students (username:domain) + +$studentInformatin: The type of data for the student information. It is +used as part of the key in $CacheData. + +$headings: The name of the student information columns. + +$ChartDB: The name of the cache database which is opened for read/write. + +Output: None - All data stored in cache. + +=back + +=cut + +sub SpaceColumns { + my ($students,$studentInformation,$headings,$cache)=@_; + + # Initialize Lengths + for(my $index=0; $index<(scalar @$headings); $index++) { + my @titleLength=split(//,$headings->[$index]); + $cache->{$studentInformation->[$index].':columnWidth'}= + scalar @titleLength; + } + + foreach my $name (@$students) { + foreach (@$studentInformation) { + my @dataLength=split(//,$cache->{$name.':'.$_}); + my $length=(scalar @dataLength); + if($length > $cache->{$_.':columnWidth'}) { + $cache->{$_.':columnWidth'}=$length; + } + } + } + + return; +} + sub PrepareData { - my ($c, $cacheDB)=@_; + my ($c, $cacheDB, $studentInformation, $headings)=@_; # Test for access to the cache data my $courseID=$ENV{'request.course.id'}; @@ -257,6 +302,8 @@ sub PrepareData { &ProcessFormData(\%cache); my $students = &SortStudents(\%cache); + &SpaceColumns($students, $studentInformation, $headings, \%cache); + $cache{'updateTime:columnWidth'}=24; if($cache{'download'} ne 'false') { my $who = $cache{'download'}; @@ -293,18 +340,15 @@ sub PrepareData { return 'aborted'; } - if($c->aborted()) { - untie(%cache); - return 'aborted'; - } - untie(%cache); return ('OK', $students); } + # Create progress sub Create_PrgWin { + my ($r)=@_; $r->print(< popwin=open('','popwin','width=400,height=100'); @@ -323,7 +367,7 @@ ENDPOP # update progress sub Update_PrgWin { - my ($totalStudents,$index,$name)=@_; + my ($totalStudents,$index,$name,$r)=@_; $r->print(''); @@ -332,6 +376,7 @@ sub Update_PrgWin { # close Progress Line sub Close_PrgWin { + my ($r)=@_; $r->print(''); $r->rflush(); } @@ -339,7 +384,7 @@ sub Close_PrgWin { # For loading the colored table for display or un-colored for print sub setbgcolor { my $PrintTable=shift; - undef %color; + my %color; if ($PrintTable){ $color{"gb"}="#FFFFFF"; $color{"red"}="#FFFFFF"; @@ -354,11 +399,11 @@ sub setbgcolor { $color{"purple"}="#FFDDFF"; } - return; + return \%color; } sub BuildClasslist { - my ($cacheDB,$students,$studentInformation,$headings,$spacePadding)=@_; + my ($cacheDB,$students,$studentInformation,$headings)=@_; my %cache; unless(tie(%cache,'GDBM_File',$cacheDB,&GDBM_READER,0640)) { @@ -371,51 +416,42 @@ sub BuildClasslist { my $displayString = 'DISPLAYDATA '."\n"; - $Str .= &Apache::lonhtmlcommon::CreateStudentInformationHeadings(\%cache, - $studentInformation, - $headings, - $displayString); - $Str .= ''; - $Str .= ''; - $Str .= 'Last Updated '."\n"; + $Str .= &Apache::lonhtmlcommon::CreateHeadings(\%cache, $studentInformation, + $headings, $displayString); $Str .= ''."\n"; my $alternate=0; foreach (@$students) { my ($username, $domain) = split(':', $_); if($alternate) { - $Str .= ''; + $Str .= ''; } else { - $Str .= ''; + $Str .= ''; } $alternate = ($alternate + 1) % 2; foreach my $data (@$studentInformation) { + $Str .= ''; if($data eq 'fullname') { $Str .= ''; - #$Str .= 'Student Assessment'.'">'; - } - - $Str .= $cache{$_.':'.$data}.' '; - - if($data eq 'fullname') { + $Str .= $cache{$_.':'.$data}.' '; $Str .= ''; + } elsif($data eq 'updateTime') { + $Str .= ''; + $Str .= $cache{$_.':'.$data}.' '; + $Str .= ' '; + } else { + $Str .= $cache{$_.':'.$data}.' '; } - $Str .= ''; + $Str .= ''."\n"; } - - $Str .= ''; - my $downloadTime = $cache{$_.':lastDownloadTime'}; - if($downloadTime ne 'Not downloaded') { - $downloadTime = localtime($downloadTime); - } - $Str .= $downloadTime; - - $Str .= ' '."\n"; } + $Str .= ''."\n"; $Str .= ''."\n"; untie(%cache); @@ -427,9 +463,11 @@ sub BuildStatistics { my ($r)=@_; my $c = $r->connection; - my @studentInformation=('fullname','section','id','domain','username'); - my @headings=('Full Name', 'Section', 'PID', 'Domain', 'User Name'); - my $spacePadding = ' '; + my @studentInformation=('fullname','section','id','domain','username', + 'updateTime'); + 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', @@ -440,8 +478,10 @@ sub BuildStatistics { my $cacheDB = "/home/httpd/perl/tmp/$ENV{'user.name'}". "_$ENV{'user.domain'}_$courseID\_statistics.db"; - &setbgcolor(0); - my ($returnValue, $students) = &PrepareData($c, $cacheDB); + my %color=&setbgcolor(0); + my ($returnValue, $students) = &PrepareData($c, $cacheDB, + \@studentInformation, + \@headings); if($returnValue ne 'OK') { $r->print(''.$returnValue."\n".''); return OK; @@ -478,27 +518,32 @@ sub BuildStatistics { &Apache::lonproblemstatistics::BuildProblemStatisticsPage($cacheDB, $students, $courseID, - $c,$r)); + $c,$r, + \%color)); } elsif($GoToPage eq 'Problem Analysis') { $r->print( &Apache::lonproblemanalysis::BuildProblemAnalysisPage($cacheDB)); } elsif($GoToPage eq 'Student Assessment') { $r->print( &Apache::lonstudentassessment::BuildStudentAssessmentPage($cacheDB, - $students, - $courseID, - $c)); + $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($courseID); + &Apache::lonproblemstatistics::BuildDiffGraph($r); } elsif($GoToPage eq 'PercentWrongGraph') { - &Apache::lonproblemstatistics::BuildWrongGraph($courseID); + &Apache::lonproblemstatistics::BuildWrongGraph($r); } elsif($GoToPage eq 'Class list') { $r->print(&BuildClasslist($cacheDB, $students, \@studentInformation, - \@headings, $spacePadding)); + \@headings)); } $r->print(''."\n"); @@ -511,7 +556,7 @@ sub BuildStatistics { # ================================================================ Main Handler sub handler { - $r=shift; + my $r=shift; unless(&Apache::lonnet::allowed('vgr',$ENV{'request.course.id'})) { $ENV{'user.error.msg'}= @@ -546,3 +591,4 @@ sub handler { } 1; __END__ +