--- loncom/interface/statistics/lonproblemstatistics.pm 2002/08/05 18:10:08 1.12 +++ loncom/interface/statistics/lonproblemstatistics.pm 2002/08/06 02:07:19 1.15 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # (Publication Handler # -# $Id: lonproblemstatistics.pm,v 1.12 2002/08/05 18:10:08 minaeibi Exp $ +# $Id: lonproblemstatistics.pm,v 1.15 2002/08/06 02:07:19 minaeibi Exp $ # # Copyright Michigan State University Board of Trustees # @@ -70,9 +70,13 @@ sub BuildProblemStatisticsPage { $Ptr .= ''; $Ptr .= &ProblemStatisticsLegend(); $r->print($Ptr); + $r->rflush(); untie(%cache); + &Create_PrgWin($r); + my $count=0; foreach (@$students) { + &Update_PrgWin(scalar(@$students),$count,$_,$r); my $courseData = &Apache::loncoursedata::DownloadCourseInformation($_, $courseID); last if ($c->aborted()); @@ -81,7 +85,9 @@ sub BuildProblemStatisticsPage { $courseData, $_); untie(%cache); } + $count++; } + &Close_PrgWin($r); if($c->aborted()) { return; } unless(tie(%cache,'GDBM_File',$cacheDB,&GDBM_READER,0640)) { @@ -99,7 +105,7 @@ sub BuildProblemStatisticsPage { # 'ProblemStatisticsHeading', # 'ProblemStatisticsHeading', # 'Homework Sets Order'); - $r->print("
state=".$state); +# $r->print("
state=".$state); my $TempCache; @@ -140,12 +146,6 @@ sub BuildProblemStatisticsPage { #---- Problem Statistics Web Page --------------------------------------- - -sub NumericSort { - $a <=> $b; -} - - sub CreateProblemStatisticsTableHeading { my ($displayFormat,$sequenceSource,$sequenceTitle,$headings,$r)=@_; if($displayFormat eq 'Display CSV Format') { @@ -153,10 +153,12 @@ sub CreateProblemStatisticsTableHeading $r->print($sequenceSource.'"'); return; } - - $r->print('
'.$sequenceTitle.''); - + if ($sequenceSource eq 'Sorted by: ') { + $r->print('
'.$sequenceSource.$sequenceTitle.''); + } else { + $r->print('
'.$sequenceTitle.''); + } my $Result = "\n".''."\n"; for(my $nIndex=0; $nIndex < (scalar (keys %$headings)); $nIndex++) { $Result .= ''. "\n".''. - # "\n".''. "\n".''. "\n".''. "\n".''. @@ -700,7 +721,7 @@ sub TableRow { "\n".''; $r->print("\n".$Ptr.'' ); } - $GraphDat->{'graph_gif:'.$RealIdx}=$DoD.':'.$Wrng; + $GraphDat->{'GraphGif:'.$RealIdx}=$DoD.':'.$Wrng; } @@ -900,47 +921,48 @@ sub BuildWrongGraph { sub GetGraphData { - my ($ylab,$r,%GraphDat)=@_; + my ($ylab,$r,$cache)=@_; my $Col; my $data=''; my $count = 0; my $Max = 0; my $cid=$ENV{'request.course.id'}; - my $GraphDB = "/home/httpd/perl/tmp/$ENV{'user.name'}". - "_$ENV{'user.domain'}_$cid\_graph.db"; - foreach (keys %GraphDat) {delete $GraphDat{$_};} - if (-e "$GraphDB") { - if (tie(%GraphDat,'GDBM_File',"$GraphDB",&GDBM_READER,0640)) { - if ( $ylab eq 'DoDiff Graph' ) { - $ylab = 'Degree-of-Difficulty'; - $Col = 0; - } - else { - $ylab = 'Wrong-Percentage'; - $Col = 1; - } - foreach (sort NumericSort keys %GraphDat) { - my @Temp=split(/\:/,$GraphDat{$_}); - my $inf = $Temp[$Col]; - if ( $Max < $inf ) {$Max = $inf;} - $data .= $inf.','; - $count++; - } - if ( $Max > 1 ) { - $Max += (10 - $Max % 10); - $Max = int($Max); - } - else { $Max = 1; } - untie(%GraphDat); - my $Course = $ENV{'course.'.$cid.'.description'}; - $Course =~ s/\ /"_"/eg; - my $GData=$Course.'&'.'Problems'.'&'.$ylab.'&'. - $Max.'&'.$count.'&'.$data; - } - else { - $r->print("Unable to tie hash to db file"); - } + + if ( $ylab eq 'DoDiff Graph' ) { + $ylab = 'Degree-of-Difficulty'; + $Col = 0; + } + else { + $ylab = 'Wrong-Percentage'; + $Col = 1; } + + my $p_count = $cache->{'ProblemCount'}; + + for ( my $k=0; $k<$p_count;$k++) { + my $key=$cache->{'CacheTable:'.$k}; + my @Temp=split(/\&/,$key); + # $list[$k]=$key; + } + + # foreach (sort NumericSort keys %GraphDat) { + # my @Temp=split(/\:/,$GraphDat{$_}); + # my $inf = $Temp[$Col]; + # if ( $Max < $inf ) {$Max = $inf;} + # $data .= $inf.','; + # $count++; + # } + if ( $Max > 1 ) { + $Max += (10 - $Max % 10); + $Max = int($Max); + } else { $Max = 1; } + + #untie(%GraphDat); + + my $Course = $ENV{'course.'.$cid.'.description'}; + $Course =~ s/\ /"_"/eg; + my $GData=$Course.'&'.'Problems'.'&'.$ylab.'&'. + $Max.'&'.$count.'&'.$data; }
P#'.''+ + '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(); +} + # ------ Dump the Student's DB file and handling the data for statistics table sub ExtractStudentData { @@ -377,18 +414,15 @@ sub ExtractStudentData { } } +sub NumericSort { + $a <=> $b; +} - -sub MySort { - my $pos=shift; - if ( $pos > 0 ) { - if ($ENV{'form.order'} eq 'Descending') {$b <=> $a;} - else { $a <=> $b; } - } - else { -# if ($ENV{'form.order'} eq 'Descending') {$b cmp $a;} -# else { $a cmp $b; } - $a cmp $b; +sub OrderedSort { + if ($ENV{'form.order'} eq 'Descending') { + $b <=> $a; + } else { + $a <=> $b; } } @@ -558,7 +592,7 @@ sub BuildStatisticsTable { $urlres=~/^(\w+)\/(\w+)/; if ($StdNo) { &Apache::lonnet::put('resevaldata',\%storestats,$1,$2); - } + } #-------------------------------- Row of statistical table &TableRow($cache,$join,$cIdx,($p_count-1),$r,$color, \%TempCache); @@ -567,7 +601,7 @@ sub BuildStatisticsTable { &CloseTable($cache,$r); } ### &Close_PrgWin(); -#666666 +#6666666 # close( OUT ); #666666 return \%TempCache; @@ -575,12 +609,10 @@ sub BuildStatisticsTable { sub CacheStatisticsTable { - my ($state,$cache,$Header,$r,$color)=@_; - my @list = (); - my $Useful; - my $UnUseful; + my ($state,$cache,$headings,$r,$color)=@_; + my @list = (); my %TempCache; - my %myHeader = reverse( %$Header ); + my %myHeader = reverse( %$headings ); my $pos = $myHeader{$state}; if ($pos > 0) {$pos++;} my $p_count = $cache->{'ProblemCount'}; @@ -588,71 +620,61 @@ sub CacheStatisticsTable { for ( my $k=0; $k<$p_count;$k++) { my $key=$cache->{'CacheTable:'.$k}; my @Temp=split(/\&/,$key); - if ( $pos == 0 ) { - ($UnUseful,$Useful)=split(/\>/,$Temp[$pos]); - } - else { - $Useful = $Temp[$pos]; - } - $list[$k]=$Useful.'@'.$key; - $r->print('
'.$list[$k]); + $list[$k]=$Temp[$pos].'+'.$key; } + + if ($pos>0) { +# $r->print('
pos1='.$pos); + @list = sort OrderedSort (@list); + } else { + @list = sort (@list); + } + my $cIdx=0; - - @list = sort MySort (@list); - - my $nIndex=0; - - return \%TempCache; -} - - -=pod - - if ( $Pos == 0 ) { + if ( $pos == 0 ) { foreach my $sequence (split(':', $cache->{'orderedSequences'})) { if($cache->{'ProblemStatisticsMaps'} ne 'All Maps' && $cache->{'ProblemStatisticsMaps'} ne $cache->{$sequence.':title'}) { next; } + if ($cIdx==$p_count) { + return \%TempCache; + } &CreateProblemStatisticsTableHeading($cache->{'DisplayFormat'}, $cache->{$sequence.':source'}, $cache->{$sequence.':title'}, $headings,$r); - my ($tar,$Tries,$Wrongs,$Code,$Disc)=split(/\&/, - $list[$cIdx]); - my ($SqOrd,$PrOrd,$Prob)=split(/\:/,$tar); + my ($tar)=split(/\&/,$list[$cIdx]); + $tar=~s/\+//eg; + my ($SqOrd)=split(/\@/,$tar); $sequence+=100; - while ($SqOrd==$sequence && $cIdx<$NoElements) { - my %storestats=(); - my @lpr=split(/\&/,$pr); - for (my $i=1; $i<=$#lpr; $i++) { - my($Pre, $Post) = split(/\@/,$list[$nIndex]); - #$r->print('
'.$Pre.'---'.$Post); - &TableRow($cache,$Post,$i,$nIndex,$color,\%GraphDat); - $nIndex++; + while ($SqOrd==$sequence && $cIdx<$p_count) { + my($Pre, $Post) = split(/\+/,$list[$cIdx]); + &TableRow($cache,$Post,$cIdx,$cIdx,$r,$color,\%TempCache); + $cIdx++; + my ($tar)=split(/\&/,$list[$cIdx]); + $tar=~s/\+//eg; + ($SqOrd)=split(/\@/,$tar); } - &CloseTable($cache); + &CloseTable($cache,$r); } } else { &CreateProblemStatisticsTableHeading($cache->{'DisplayFormat'}, - $cache->{$sequence.':source'}, - $cache->{$sequence.':title'}, + 'Sorted by: ', + $headings->{$pos-1}, $headings,$r); for ( my $nIndex = 0; $nIndex < $p_count; $nIndex++ ) { - my($Pre, $Post) = split(/\@/,$list[$nIndex]); - &TableRow($cache,$Post,$nIndex,$nIndex,$color,\%GraphDat); + my($Pre, $Post) = split(/\+/,$list[$nIndex]); + &TableRow($cache,$Post,$nIndex,$nIndex,$r,$color,\%TempCache); } - &CloseTable($cache); + &CloseTable($cache,$r); } return \%TempCache; } -=cut - sub TableRow { my ($cache,$Str,$Idx,$RealIdx,$r,$color,$GraphDat)=@_; @@ -683,7 +705,6 @@ sub TableRow { } else { $Ptr="\n".'
'.($RealIdx+1).''.$PrOrd.$Temp.''.$Temp.' '.$StdNo.''.$TotalTries.' '.$DiscNo.'