[LON-CAPA-cvs] cvs: loncom /interface/statistics lonproblemstatistics.pm

minaeibi lon-capa-cvs@mail.lon-capa.org
Mon, 29 Jul 2002 21:23:22 -0000


This is a MIME encoded message

--minaeibi1027977802
Content-Type: text/plain

minaeibi		Mon Jul 29 17:23:22 2002 EDT

  Modified files:              
    /loncom/interface/statistics	lonproblemstatistics.pm 
  Log:
  Many changes made to load statistics table in new method that applied in chart and statistics perl modules.
  
  
  
--minaeibi1027977802
Content-Type: text/plain
Content-Disposition: attachment; filename="minaeibi-20020729172322.txt"

Index: loncom/interface/statistics/lonproblemstatistics.pm
diff -u loncom/interface/statistics/lonproblemstatistics.pm:1.4 loncom/interface/statistics/lonproblemstatistics.pm:1.5
--- loncom/interface/statistics/lonproblemstatistics.pm:1.4	Sat Jul 27 16:48:36 2002
+++ loncom/interface/statistics/lonproblemstatistics.pm	Mon Jul 29 17:23:22 2002
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # (Publication Handler
 #
-# $Id: lonproblemstatistics.pm,v 1.4 2002/07/27 20:48:36 minaeibi Exp $
+# $Id: lonproblemstatistics.pm,v 1.5 2002/07/29 21:23:22 minaeibi Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -45,7 +45,7 @@
 
 
 sub BuildProblemStatisticsPage {
-    my ($cacheDB, $students, $courseID, $c, $r,%color)=@_;
+    my ($cacheDB, $students, $courseID, $c, $r)=@_;
     my %cache;
     #my %DoDiff;
     unless(tie(%cache,'GDBM_File',$cacheDB,&GDBM_READER,0640)) {
@@ -61,8 +61,8 @@
     $Ptr .= &AscendOrderOptions($cache{'Ascend'});
     $Ptr .= &ProblemStatisticsButtons($cache{'DisplayFormat'});
     $Ptr .= '</table>';
-
     $Ptr .= &ProblemStatisticsLegend();
+    $r->print($Ptr);
 
     untie(%cache);
     foreach (@$students) {
@@ -75,7 +75,7 @@
             untie(%cache);
         }
     }
-    if($c->aborted()) { return $Ptr; }
+    if($c->aborted()) { return; }
 
     unless(tie(%cache,'GDBM_File',$cacheDB,&GDBM_READER,0640)) {
         return '<html><body>Unable to tie database.</body></html>';
@@ -91,18 +91,15 @@
 						  \%Discuss, $r);
     }
     #&Apache::lonstatistics::Close_PrgWin($r);
-
+ 
     my ($upper, $lower) = &Discriminant($discriminantFactor);
     my %Header = (0,"Homework Sets Order",1,"#Stdnts",2,"Tries",3,"Mod",
                   4,"Mean",5,"#YES",6,"#yes",7,"%Wrng",8,"DoDiff",
                   9,"S.D.",10,"Skew.",11,"D.F.1st",12,"D.F.2nd", 13, "Disc.");
-
+    my $color=&setbgcolor(0);
     my %GraphDat= &BuildStatisticsTable(\%cache, $discriminantFactor, \@list, 
-                                        \%Header, $students, $r, \%color);
-
+                                        \%Header, $students, $r, $color);
     untie(%cache);
-
-    return $Ptr;
 }
 
 
@@ -154,7 +151,6 @@
 
     my $totalTries = 0;
     my $totalAwarded = 0;
-    my $tempProblemOrder=0;
     my $spent=0;
     my $spent_yes=0;
     my $TotDiscuss=0;
@@ -164,23 +160,27 @@
     my $TotFirst = 0;
     my $TimeTot = 0;
     my $Discussed=0;
+    my $tempSequenceOrder=100;
 
-$Apache::lonxml::debug=1;
+#$Apache::lonxml::debug=1;
 #&Apache::lonhomework::showhash(%$cache);
-$Apache::lonxml::debug=0;
+#$Apache::lonxml::debug=0;
 
     foreach my $sequence (split(':', $cache->{'orderedSequences'})) {
+	my $tempProblemOrder=100;
+	$tempSequenceOrder++;
 #        if($cache->{'ProblemStatisticsMap'} ne 'All Maps'  &&
 #           $cache->{'ProblemStatisticsMap'} ne $cache->{$sequence.':title'}) {
-#	    $r->print("<br>$name ---   $sequence");
+#	    $r->print("<br>sequences=$cache->{'orderedSequences'}");
 #	    $r->print("<br>".$cache->{$sequence.':title'});
 #            next;
 #        }
 
         my $Dis = '';
         foreach my $problemID (split(':', $cache->{$sequence.':problems'})) {
+#	    $r->print("<br>problems=$cache->{$sequence.':problems'}");
             my $problem = $cache->{$problemID.':problem'};
-	    $r->print("<br>$problemID === $problem");
+#	    $r->print("<br>$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.
@@ -201,6 +201,9 @@
             foreach my $part (split(/\:/,$cache->{$sequence.':'.
                                                   $problemID.
                                                   ':parts'})) {
+		$tempProblemOrder++;
+#		$r->print("<br>parts=$cache->{$sequence.':'.$problemID.':parts'}");
+                $partData{$part.':order'}=$tempProblemOrder;
                 $partData{$part.':tries'}=0;
                 $partData{$part.':code'}='-';
             }
@@ -223,7 +226,7 @@
                     my $time=0;
                     my $awarded=0;
 		    $Discussed=0;
-                    my $code='U';
+                    my $code='-';
 
                     $awarded = $cache->{$name.
                                         "$Version:$problem:resource.".
@@ -252,6 +255,10 @@
                 }
             }
 
+#$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
             foreach (split(/\:/,$cache->{$sequence.':'.$problemID.
@@ -263,7 +270,8 @@
                    $partData{$_.':code'} eq 'O') {
                     $Yes=1;
                 }
-                my $ptr = $tempProblemOrder.'&'.$problemID;
+                my $pOrder=$partData{$_.':order'};
+                my $ptr = $tempSequenceOrder.':'.$pOrder.':'.$problemID;
 
                 if($_ > 1) {
                     $ptr .= "*(part $_)";
@@ -274,7 +282,7 @@
 #		my $DoDiff=$DoDiff->{$dod};
 #               $r->print('<br>'.$name.'---'.$ptr.'==='.$DoDiff);
 
-                my $Fac = ($partData{$_.':Tries'}) ? 
+                my $Fac = ($partData{$_.':tries'}) ? 
                     ($partData{$_.':awarded'}/$partData{$_.':tries'}) : 0;
                 my $DisF;
                 if($Fac > 0 &&  $Fac < 1) { 
@@ -289,17 +297,17 @@
                 }
                 my $time = $cache->{"$name:$LatestVersion:$problem:timestamp"};
                 $Dis .= $tempProblemOrder.'='.$DisF.'+'.$Yes;
-                $ptr .= '&'.$partData{$_.'.tries'}.
-                        '&'.$partData{$_.'.wrongs'}.
-                        '&'.$partData{$_.'.code'};
+                $ptr .= '&'.$partData{$_.':tries'}.
+                        '&'.$partData{$_.':wrong'}.
+                        '&'.$partData{$_.':code'};
                 push (@$list, $ptr."&$Discussed");
-                $r->print('<br>'.$name.'---'.$ptr);
+#                $r->print('<br>'.$_.$name.'---'.$ptr);
 		
 ####		if ($DoDiff>0.85) {
 
                 $TimeTot += $time;
 
-                if ($Yes==1 && $partData{$_.'.Tries'}==1) {
+                if ($Yes==1 && $partData{$_.':tries'}==1) {
 		    $TotFirst++;
                 }
 #		my $Acts= $Activity->{$name.':'.$problem};
@@ -351,7 +359,15 @@
 
 
 sub BuildStatisticsTable {
-    my ($cache,$discriminantFactor,$list,$headings,$students,$r,%color)=@_;
+    my ($cache,$discriminantFactor,$list,$headings,$students,$r,$color)=@_;
+
+    my $NoElements = scalar @$list;
+    my @List=sort(@$list);
+
+#    for (my $c=0;$c<$NoElements;$c++) {
+##	$r->print('<br>'.$c.')'.$List[$c]);
+#	$r->print("<br>$List[$c]");
+#    }
 
 #6666666
 #    my $file="/home/httpd/perl/tmp/183d.txt";
@@ -364,39 +380,30 @@
 ##              'Loading Discussion...";</script>');
 ##    my ($doDiffFile) = &LoadDoDiffFile();
 
+##777777
+##    $Str .= &Classify($discriminantFactor, $students);
+
     my $p_count = 0;
-    my $nIndex = 0;
     my $dummy;
     my $p_val;
     my $ResId;
     my %GraphDat;
-    my $NoElements = scalar @$list;
-
+    my $cIdx=0;
 
     foreach my $sequence (split(':', $cache->{'orderedSequences'})) {
 
-	&CreateProblemStatisticsTableHeading($cache->{'DisplayFormat'},
-                                             $cache->{$sequence.':source'}, 
-                                             $cache->{$sequence.':title'},
+        &CreateProblemStatisticsTableHeading(1,$cache->{$sequence.':source'},
+                                             $cache->{$sequence.':title'}, 
                                              $headings,$r);
 
-        foreach my $problemID (split(':', $cache->{$sequence.':problems'})) {
-            my $problem = $cache->{$problemID.':problem'};
-	    $r->print("<br>$problem");
-	
-	}
-    }  
-}
-=pod
-##777777
-##    $Str .= &Classify($discriminantFactor, $students);
+	my ($tar,$Tries,$Wrongs,$Code,$Disc)=split(/\&/,
+                                                   $List[$cIdx]);
 
-
-	my ($Hid,$pr)=split(/\:/,$mapsort{$_});
-	my @lpr=split(/\&/,$pr);
-	for (my $i=1; $i<=$#lpr; $i++) {
+        my ($SqOrd,$PrOrd,$Prob)=split(/\:/,$tar);
+	$sequence+=100;
+	while ($SqOrd==$sequence && $cIdx<$NoElements) {
 	    my %storestats=();
-	    my ($PrOrd,$Prob,$Tries,$Wrongs,$Code,$Disc)=split(/\&/,$list->[$nIndex]);
+	    my $pOrd=$PrOrd;
 	    my $Temp = $Prob;
 	    my $MxTries = 0;
 	    my $TotalTries = 0;
@@ -406,9 +413,9 @@
 	    my $StdNo = 0;
 	    my $DiscNo=0;
 	    my @StdLst;
-	    while ( $PrOrd == $lpr[$i] ) 
+	    while ($pOrd==$PrOrd && $cIdx<$NoElements)
 	    {
-		$nIndex++;
+		$cIdx++;
 		$StdNo++;
 		$StdLst[ $StdNo ] = $Tries;
 		$TotalTries += $Tries;
@@ -416,16 +423,26 @@
 		if ( $Code eq 'C' ){ $YES++; }
 		elsif( $Code eq 'I' ) { $Incorrect++; }
 		elsif( $Code eq 'O' ) { $Override++; }
-		elsif( $Code eq 'U' ) { $StdNo--; }
-		($PrOrd,$Prob,$Tries,$Wrongs,$Code,$Disc)=split(/\&/,$list->[$nIndex]);
-	    }	
+		elsif( $Code eq '-' ) { $StdNo--; }
+		($tar,$Tries,$Wrongs,$Code,$Disc)=split(/\&/,
+                                                     $List[$cIdx]);
+	        ($SqOrd,$PrOrd,$Prob)=split(/\:/,$tar);
+
+#$r->print("<br>$cIdx ... $SqOrd, $PrOrd, $Tries, $Wrongs, $Code, $Disc");
+#$r->rflush();
+
+	    }
+
+#$r->print("<br>$cIdx ... $SqOrd  , $Temp , $TotalTries");
+#$r->rflush();
 
 	    $p_count++;
 	    my $Dummy;
 	    ($ResId,$Dummy)=split(/\*/,$Temp);
 
-	    $Temp = '<a href="'.$cache->{'src_'.$ResId}.
-                '" target="_blank">'.$cache->{'title_'.$ResId}.$Dummy.'</a>';
+######################
+	    $Temp = '<a href="'.$cache->{$ResId.':source'}.
+                '" target="_blank">'.$cache->{$ResId.':title'}.$Dummy.'</a>';
 
 	    my $res = &Apache::lonnet::declutter($cache->{'src_'.$ResId});
 	    my $urlres=$res;
@@ -433,14 +450,15 @@
 	    $ResId=~/(\d+)\.(\d+)/;
 	    my $Map = &Apache::lonnet::declutter( $cache->{'map_id_'.$1} );
 	    $urlres=$Map;
- 
-	    $res = '<a href="'.$cache->{'src_'.$ResId}.'">'.$res.'</a>';
+#######################
+
+#	    $res = '<a href="'.$cache->{'src_'.$ResId}.'">'.$res.'</a>';
 	    #$Map = '<a href="'.$Map.'">'.$res.'</a>';
 
 #------------------------ Compute the Average of Tries about one problem
 	    my $Average = ($StdNo) ? $TotalTries/$StdNo : 0;
 
-	    $storestats{$ENV{'request.course.id'}.'___'.$urlres.'___timestamp'}=time;       
+	    $storestats{$ENV{'request.course.id'}.'___'.$urlres.'___timestamp'}=time;
 	    $storestats{$ENV{'request.course.id'}.'___'.$urlres.'___stdno'}=$StdNo;
 	    $storestats{$ENV{'request.course.id'}.'___'.$urlres.'___avetries'}=$Average;
    
@@ -493,7 +511,7 @@
 	    my $SD = sprintf( "%.1f", $StdDev );
 	    my $DoD = sprintf( "%.2f", $DoDiff );
 	    my $Sk = sprintf( "%.1f", $Skewness );
-	    my $join = $lpr[$i].'&'.$Temp.'&'.$StdNo.'&'.
+	    my $join = $Prob.'&'.$Temp.'&'.$StdNo.'&'.
                        $TotalTries.'&'.$MxTries.'&'.$Avg.'&'.
                        $YES.'&'.$Override.'&'.$Wrng.'&'.$DoD.'&'.
 		       $SD.'&'.$Sk.'&'.$_D1.'&'.$_D2.'&'.
@@ -510,16 +528,15 @@
 		&Apache::lonnet::put('resevaldata',\%storestats,$1,$2); 
 	    }
 #-------------------------------- Row of statistical table
-            &TableRow($cache,$join,$i,($p_count-1),$r,\%color,\%GraphDat);
+            &TableRow($cache,$join,$cIdx,($p_count-1),$r,$color,\%GraphDat);
 	}
 	&CloseTable($cache,$r);
     }
-    &Close_PrgWin();
+###    &Close_PrgWin();
 #666666
 #    close( OUT );
 #666666
 }
-=cut
 
 =pod
 sub Cache_Statistics {
@@ -556,7 +573,7 @@
 	    for (my $i=1; $i<=$#lpr; $i++) {
 		my($Pre, $Post) = split(/\@/,$list[$nIndex]); 
 		#$r->print('<br>'.$Pre.'---'.$Post);
-		&TableRow($cache,$Post,$i,$nIndex,\%color,\%GraphDat);
+		&TableRow($cache,$Post,$i,$nIndex,$color,\%GraphDat);
 		$nIndex++;
 	    }
 	    &CloseTable($cache);
@@ -566,7 +583,7 @@
 	&CreateProblemStatisticsTableHeading($cache,0);
 	for ( my $nIndex = 0; $nIndex < $p_count; $nIndex++ ) {
 	    my($Pre, $Post) = split(/\@/,$list[$nIndex]); 
-	    &TableRow($cache,$Post,$nIndex,$nIndex,\%color,\%GraphDat);
+	    &TableRow($cache,$Post,$nIndex,$nIndex,$color,\%GraphDat);
 	} 
 	&CloseTable($cache);
     }
@@ -577,6 +594,7 @@
     my ($cache,$Str,$Idx,$RealIdx,$r,$color,$GraphDat)=@_;
     my($PrOrd,$Temp,$StdNo,$TotalTries,$MxTries,$Avg,$YES,$Override,
        $Wrng,$DoD,$SD,$Sk,$_D1,$_D2,$DiscNo,$Prob)=split(/\&/,$Str);	
+#    $r->print('<br>'.$Str);
     if ($ENV{'form.showcsv'}) {
         my ($ResId,$Dummy)=split(/\*/,$Prob);
         my $Ptr =  "\n".'<br>'.
@@ -619,8 +637,31 @@
                "\n".'<td bgcolor='.$color->{"yellow"}.'> '.$DiscNo.'</td>';
         $r->print("\n".$Ptr.'</tr>' );
     }
-    $GraphDat->{$RealIdx}=$DoD.':'.$Wrng;
+#    $GraphDat->{$RealIdx}=$DoD.':'.$Wrng;
 }
+
+
+# For loading the colored table for display or un-colored for print
+sub setbgcolor {
+    my $PrintTable=shift;
+    my %color;
+    if ($PrintTable){
+	$color{"gb"}="#FFFFFF";
+	$color{"red"}="#FFFFFF";
+	$color{"yellow"}="#FFFFFF";
+	$color{"green"}="#FFFFFF";
+	$color{"purple"}="#FFFFFF";
+    } else {
+	$color{"gb"}="#DDFFFF";
+	$color{"red"}="#FFDDDD";
+	$color{"yellow"}="#EEFFCC";
+	$color{"green"}="#DDFFDD";
+	$color{"purple"}="#FFDDFF";
+    }
+
+    return \%color;
+}
+
 
 sub StatusOptions {
     my ($cache)=@_;

--minaeibi1027977802--