--- loncom/interface/statistics/lonproblemstatistics.pm 2002/08/06 02:07:19 1.15 +++ loncom/interface/statistics/lonproblemstatistics.pm 2002/08/06 17:38:26 1.16 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # (Publication Handler # -# $Id: lonproblemstatistics.pm,v 1.15 2002/08/06 02:07:19 minaeibi Exp $ +# $Id: lonproblemstatistics.pm,v 1.16 2002/08/06 17:38:26 minaeibi Exp $ # # Copyright Michigan State University Board of Trustees # @@ -47,7 +47,7 @@ use GDBM_File; sub BuildProblemStatisticsPage { my ($cacheDB, $students, $courseID, $c, $r)=@_; my %cache; - #my %DoDiff; + unless(tie(%cache,'GDBM_File',$cacheDB,&GDBM_READER,0640)) { return 'Unable to tie database.'; } @@ -101,12 +101,6 @@ sub BuildProblemStatisticsPage { my $state=$ENV{'form.ProblemStatisticsHeading'}; -# my $state=&Apache::lonstatistics::CheckFormElement(\%cache, -# 'ProblemStatisticsHeading', -# 'ProblemStatisticsHeading', -# 'Homework Sets Order'); -# $r->print("
state=".$state); - my $TempCache; if ($state) { @@ -119,11 +113,9 @@ sub BuildProblemStatisticsPage { my $index=0; foreach (@$students) { $index++; - #&Apache::lonstatistics::Update_PrgWin(++$index,$r); &ExtractStudentData(\%cache, $_, \@list,\%Discuss, $r, \%discriminant); } - #&Apache::lonstatistics::Close_PrgWin($r); my ($upper, $lower) = &Discriminant(\%discriminant,$r); $TempCache= &BuildStatisticsTable(\%cache, $upper, $lower, \@list, \%Header, $students, @@ -241,17 +233,12 @@ sub ExtractStudentData { my $tempProblemOrder=100; if($cache->{'ProblemStatisticsMaps'} ne 'All Maps' && $cache->{'ProblemStatisticsMaps'} ne $cache->{$sequence.':title'}) { -# $r->print("
sequences=$cache->{'orderedSequences'}"); -# $r->print("
".$cache->{$sequence.':title'}); next; } $tempSequenceOrder++; - #$discrim .= '&'; foreach my $problemID (split(':', $cache->{$sequence.':problems'})) { -# $r->print("
problems=$cache->{$sequence.':problems'}"); my $problem = $cache->{$problemID.':problem'}; -# $r->print("
$problemID === $problem"); my $LatestVersion = $cache->{$name.':version:'.$problem}; # Output dashes for all the parts of this problem if there # is no version information about the current problem. @@ -275,7 +262,6 @@ sub ExtractStudentData { ':parts'})) { $tempProblemOrder++; $partData{'count'}++; -# $r->print("
parts=$cache->{$sequence.':'.$problemID.':parts'}"); $partData{$part.':order'}=$tempProblemOrder; $partData{$part.':tries'}=0; $partData{$part.':code'}='-'; @@ -327,10 +313,6 @@ sub ExtractStudentData { } } -#$Apache::lonxml::debug=1; -#&Apache::lonhomework::showhash(%partData); -#$Apache::lonxml::debug=0; - # Loop through all the parts for the current problem in the # correct order and prepare the output my $partCounter=0; @@ -348,9 +330,7 @@ sub ExtractStudentData { if($partData{'count'} > 1) { $ptr .= "*(part $_)"; } - #if($partCounter > 1) { - $discrim .= '&'; - #} + $discrim .= '&'; my ($pr_no,$dod)=split('&',$ptr); # my $DoDiff=$DoDiff->{$dod}; @@ -498,25 +478,13 @@ sub BuildStatisticsTable { $p_count++; my $Dummy; ($ResId,$Dummy)=split(/\*/,$Temp); - -###################### $Temp = ''.$cache->{$ResId.':title'}.$Dummy.''; - #$r->print('
rid='.$ResId); - #$r->print('
src='.$cache->{$ResId.':source'}); - #$r->print('
tit='.$cache->{$ResId.':title'}); - - my $res = &Apache::lonnet::declutter($cache->{$ResId.':source'}); - my $urlres=$res; - - $ResId=~/(\d+)\.(\d+)/; - my $Map = &Apache::lonnet::declutter( $cache->{'map_id_'.$1} ); - $urlres=$Map; -####################### - -# $res = ''.$res.''; - #$Map = ''.$res.''; +# my $urlres = $cache->{$sequence.':source'}); +#check with Gerd + #symb of the problem (already decluttered and cleaned) + my $urlres = $cache->{$ResId.':problem'}; #------------------------ Compute the Average of Tries about one problem my $Average = ($StdNo) ? $TotalTries/$StdNo : 0; @@ -524,7 +492,7 @@ sub BuildStatisticsTable { $storestats{$ENV{'request.course.id'}.'___'.$urlres.'___timestamp'}=time; $storestats{$ENV{'request.course.id'}.'___'.$urlres.'___stdno'}=$StdNo; $storestats{$ENV{'request.course.id'}.'___'.$urlres.'___avetries'}=$Average; - + #-------------------------------- Compute percentage of Wrong tries my $Wrong = ( $StdNo ) ? 100 * ( $Incorrect / $StdNo ) : 0; @@ -581,7 +549,6 @@ sub BuildStatisticsTable { $SD.'&'.$Sk.'&'.$_D1.'&'.$_D2.'&'. $DiscNo.'&'.$Prob; -#####{$sequence.'@'.$pOrd} $TempCache{'CacheTable:'.($p_count-1)}=$join; #6666666 @@ -589,6 +556,7 @@ sub BuildStatisticsTable { # print (OUT $out.'@'.$DoD.'&'); #6666666 +#check with Gerd $urlres=~/^(\w+)\/(\w+)/; if ($StdNo) { &Apache::lonnet::put('resevaldata',\%storestats,$1,$2); @@ -624,7 +592,6 @@ sub CacheStatisticsTable { } if ($pos>0) { -# $r->print('
pos1='.$pos); @list = sort OrderedSort (@list); } else { @list = sort (@list); @@ -863,9 +830,6 @@ sub ProcessDiscriminant { #------- Creating Discimination factor sub Discriminant { my ($discriminant,$r)=@_; -#$Apache::lonxml::debug=1; -#&Apache::lonhomework::showhash(%$discriminant); -#$Apache::lonxml::debug=0; my @discriminantKeys=keys(%$discriminant); my $Count = scalar @discriminantKeys; @@ -901,70 +865,53 @@ sub Discriminant { # ------------------------------------------- Prepare data for Graphical chart -sub BuildDiffGraph { - my ($r)=@_; - - my $graphData = &GetGraphData('DiffGraph', $r); - $r->print(''); - - return; -} - -sub BuildWrongGraph { - my ($r)=@_; - - my $graphData = &GetGraphData('WrongGraph', $r); - $r->print(''); - - return; -} - - -sub GetGraphData { - my ($ylab,$r,$cache)=@_; +sub BuildGraphicChart { + my ($ylab,$r,$cacheDB)=@_; + my %cache; my $Col; my $data=''; my $count = 0; my $Max = 0; - my $cid=$ENV{'request.course.id'}; - if ( $ylab eq 'DoDiff Graph' ) { - $ylab = 'Degree-of-Difficulty'; - $Col = 0; - } - else { - $ylab = 'Wrong-Percentage'; - $Col = 1; + unless(tie(%cache,'GDBM_File',$cacheDB,&GDBM_READER,0640)) { + return 'Unable to tie database.'; } - - my $p_count = $cache->{'ProblemCount'}; + + 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; + my @Temp=split(/\:/,$cache{'GraphGif:'.$k}); + my $inf = $Temp[$Col]; + if ( $Max < $inf ) {$Max = $inf;} + $data .= $inf.','; + $count++; } + untie(%cache); +# $r->print("
count=$p_count >>data= $data"); - # 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 $cid=$ENV{'request.course.id'}; + if ( $ylab eq 'DoDiff Graph' ) { + $ylab = 'Degree-of-Difficulty'; + $Col = 0; + } else { + $ylab = 'Wrong-Percentage'; + $Col = 1; + } my $Course = $ENV{'course.'.$cid.'.description'}; $Course =~ s/\ /"_"/eg; - my $GData=$Course.'&'.'Problems'.'&'.$ylab.'&'. + my $GData=$Course.'&'.'Problems#'.'&'.$ylab.'&'. $Max.'&'.$count.'&'.$data; -} + $r->print(''); + + return; +} 1; __END__