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

minaeibi lon-capa-cvs@mail.lon-capa.org
Tue, 06 Aug 2002 02:01:05 -0000


This is a MIME encoded message

--minaeibi1028599265
Content-Type: text/plain

minaeibi		Mon Aug  5 22:01:05 2002 EDT

  Modified files:              
    /loncom/interface/statistics	lonproblemstatistics.pm 
  Log:
  Sorting the statistics table works properly
  
  
  
  
--minaeibi1028599265
Content-Type: text/plain
Content-Disposition: attachment; filename="minaeibi-20020805220105.txt"

Index: loncom/interface/statistics/lonproblemstatistics.pm
diff -u loncom/interface/statistics/lonproblemstatistics.pm:1.13 loncom/interface/statistics/lonproblemstatistics.pm:1.14
--- loncom/interface/statistics/lonproblemstatistics.pm:1.13	Mon Aug  5 16:53:38 2002
+++ loncom/interface/statistics/lonproblemstatistics.pm	Mon Aug  5 22:01:05 2002
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # (Publication Handler
 #
-# $Id: lonproblemstatistics.pm,v 1.13 2002/08/05 20:53:38 stredwic Exp $
+# $Id: lonproblemstatistics.pm,v 1.14 2002/08/06 02:01:05 minaeibi Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -105,7 +105,7 @@
 #                                                  'ProblemStatisticsHeading',
 #                                                  'ProblemStatisticsHeading',
 #                                                  'Homework Sets Order'); 
-    $r->print("<br>state=".$state);
+#    $r->print("<br>state=".$state);
 
     my $TempCache;
 
@@ -146,12 +146,6 @@
 
 #---- Problem Statistics Web Page ---------------------------------------
 
-
-sub NumericSort {          
-    $a <=> $b;
-}
-
-
 sub CreateProblemStatisticsTableHeading {
     my ($displayFormat,$sequenceSource,$sequenceTitle,$headings,$r)=@_;
     if($displayFormat eq 'Display CSV Format') {
@@ -159,10 +153,12 @@
         $r->print($sequenceSource.'"');
 	return;
     }
-
-    $r->print('<br><a href="'.$sequenceSource.
-              '" target="_blank">'.$sequenceTitle.'</a>');
-
+    if ($sequenceSource eq 'Sorted by: ') {
+	$r->print('<br><b>'.$sequenceSource.$sequenceTitle.'</b>');
+    } else {
+        $r->print('<br><a href="'.$sequenceSource.
+		  '" target="_blank">'.$sequenceTitle.'</a>');
+    }
     my $Result = "\n".'<table border=2><tr><th>P#</th>'."\n";
     for(my $nIndex=0; $nIndex < (scalar (keys %$headings)); $nIndex++) { 
 	$Result .= '<th>'.'<input type="submit" name="';
@@ -218,6 +214,7 @@
     $r->print('<script>popwin.close()</script>');
     $r->rflush(); 
 }
+
  
 # ------ Dump the Student's DB file and handling the data for statistics table 
 sub ExtractStudentData {
@@ -417,18 +414,15 @@
     }
 }
 
+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;
     }
 }
 
@@ -598,7 +592,7 @@
 	    $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);
@@ -607,7 +601,7 @@
 	&CloseTable($cache,$r);
     }
 ###    &Close_PrgWin();
-#666666
+#6666666
 #    close( OUT );
 #666666
     return \%TempCache;
@@ -615,12 +609,10 @@
 
 
 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'};
@@ -628,71 +620,62 @@
     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('<br>'.$list[$k]);
+	$list[$k]=$Temp[$pos].'+'.$key;
     }
+    
+    if ($pos>0) {
+#	$r->print('<br>pos1='.$pos);
+#        @list = sort OrderedSort (@list);
+	@list = sort NumericSort (@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('<br>'.$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)=@_;
@@ -723,7 +706,6 @@
     } else {
         $Ptr="\n".'<tr>'.
              "\n".'<td>'.($RealIdx+1).'</td>'.
-          #  "\n".'<td>'.$PrOrd.$Temp.'</td>'.
              "\n".'<td>'.$Temp.'</td>'.
              "\n".'<td bgcolor='.$color->{"yellow"}.'> '.$StdNo.'</td>'.
              "\n".'<td bgcolor='.$color->{"yellow"}.'>'.$TotalTries.'</td>'.
@@ -740,7 +722,7 @@
              "\n".'<td bgcolor='.$color->{"yellow"}.'> '.$DiscNo.'</td>';
         $r->print("\n".$Ptr.'</tr>' );
     }
-    $GraphDat->{'graph_gif:'.$RealIdx}=$DoD.':'.$Wrng;
+    $GraphDat->{'GraphGif:'.$RealIdx}=$DoD.':'.$Wrng;
 }
 
 
@@ -940,47 +922,48 @@
 
 
 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;
 }
 
 

--minaeibi1028599265--