--- loncom/interface/statistics/lonproblemstatistics.pm	2002/09/22 17:08:32	1.33
+++ loncom/interface/statistics/lonproblemstatistics.pm	2002/12/13 21:39:19	1.39
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # (Publication Handler
 #
-# $Id: lonproblemstatistics.pm,v 1.33 2002/09/22 17:08:32 minaeibi Exp $
+# $Id: lonproblemstatistics.pm,v 1.39 2002/12/13 21:39:19 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -30,12 +30,12 @@
 # 5/5,7/9,7/25/1,8/11,9/13,9/26,10/5,10/9,10/22,10/26 Behrouz Minaei
 # 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,7/25,7/29,8/5  Behrouz Minaei
+# 1/22,2/1,2/6,2/25,3/2,3/26,4/7,5/6 Behrouz Minaei
+# 5/12,5/26,7/16,7/29,8/5,10/31  Behrouz Minaei
 #
 ###
 
-package Apache::lonproblemstatistics; 
+package Apache::lonproblemstatistics;
 
 use strict;
 use Apache::lonnet();
@@ -43,14 +43,11 @@ use Apache::lonhtmlcommon;
 use Apache::loncoursedata;
 use GDBM_File;
 
-my $jr;
 
 sub InitializeProblemStatistics {
     my ($cacheDB, $students, $courseID, $c, $r)=@_;
     my %cache;
 
-    $jr = $r;
-
     unless(tie(%cache,'GDBM_File',$cacheDB,&GDBM_READER(),0640)) {
         $r->print('Unable to tie database1.');
         return ('ERROR', undef);
@@ -84,7 +81,7 @@ sub InitializeProblemStatistics {
     my $lastStatus = (defined($cache{'StatisticsLastStatus'})) ?
                      $cache{'StatisticsLastStatus'} : 'Nothing';
     my $whichStudents = join(':::',sort(@$students));
-    if(!defined($cache{'StatisticsCached'}) || 
+    if(!defined($cache{'StatisticsCached'}) ||
        $lastStatus ne $cache{'Status'} ||
        $whichStudents ne $cache{'StatisticsWhichStudents'}) {
         $isNotCached = 1;
@@ -109,7 +106,7 @@ sub InitializeProblemStatistics {
         &Apache::loncoursedata::DownloadStudentCourseDataSeparate($students,
                                                                   'true',
                                                                   $cacheDB,
-                                                                  'true', 
+                                                                  'true',
                                                                   'true',
                                                                   $courseID,
                                                                   $r, $c);
@@ -147,7 +144,7 @@ sub InitializeProblemStatistics {
         return ('ERROR', undef);
     }
 
-    my $orderedProblems = &SortProblems(\%cache, 
+    my $orderedProblems = &SortProblems(\%cache,
                                         $cache{'ProblemStatisticsSort'},
                                         $cache{'SortProblems'},
                                         $cache{'ProblemStatisticsAscend'});
@@ -179,7 +176,7 @@ sub BuildProblemStatisticsPage {
     $Ptr .= '<tr><td align="right"><b>Sorting Type:</b></td>'."\n";
     $Ptr .= '<td align="left">'."\n";
     $Ptr .= &Apache::lonhtmlcommon::AscendOrderOptions(
-                                           $cache{'ProblemStatisticsAscend'}, 
+                                           $cache{'ProblemStatisticsAscend'},
                                            'ProblemStatistics',
                                            'Statistics');
     $Ptr .= '</td></tr>'."\n";
@@ -192,7 +189,7 @@ sub BuildProblemStatisticsPage {
                                                           \@sectionsSelected,
                                                           'Statistics');
     $Ptr .= '</td></tr>'."\n";
-    $Ptr .= &ProblemStatisticsButtons($cache{'DisplayFormat'}, 
+    $Ptr .= &ProblemStatisticsButtons($cache{'DisplayFormat'},
                                       $cache{'DisplayLegend'},
                                       $cache{'SortProblems'});
     $Ptr .= '</table>';
@@ -213,8 +210,8 @@ sub BuildProblemStatisticsPage {
         $r->print('Unable to tie database.6');
         return;
     }
-    &BuildStatisticsTable(\%cache, $cache{'DisplayFormat'}, 
-                          $cache{'SortProblems'}, $orderedProblems, 
+    &BuildStatisticsTable(\%cache, $cache{'DisplayFormat'},
+                          $cache{'SortProblems'}, $orderedProblems,
                           \@Header, $r, $color);
     untie(%cache);
 
@@ -224,21 +221,51 @@ sub BuildProblemStatisticsPage {
 sub BuildGraphicChart {
     my ($graph,$cacheDB,$courseDescription,$students,$courseID,$r,$c)=@_;
     my %cache;
-    my $max = 0;
+    my $max;
+
+    my $title = '';
+    if($graph eq 'DoDiffGraph') {
+	$title = 'Degree-of-Difficulty';
+    } else {
+	$title = 'Wrong-Percentage';
+    }
 
-    my ($result, undef) = 
+    my $currentSequence = -1;
+    my $sortProblems = 'Sort Within Sequence';
+
+    my ($result, $orderedProblems) =
         &InitializeProblemStatistics($cacheDB, $students, $courseID, $c, $r);
     if($result ne 'OK') {
         return;
     }
 
+    my @values = ();
+
     unless(tie(%cache,'GDBM_File',$cacheDB,&GDBM_READER(),0640)) {
         return 'Unable to tie database.7';
     }
-   
-    my @problems = split(':::', $cache{'problemList'});
-    my @values = ();
-    foreach (@problems) {
+
+    foreach(@$orderedProblems) {
+        my ($sequence,$problem,$part)=split(':', $_);
+        if($cache{'StatisticsMaps'} ne 'All Maps'  &&
+           $cache{'StatisticsMaps'} ne $cache{$sequence.':title'}) {
+             next;
+        }
+
+        if( $currentSequence == -1 ||
+            ($sortProblems eq 'Sort Within Sequence' &&
+            $currentSequence != $sequence)) {
+	    if($currentSequence != -1) {
+		&DrawGraph(\@values,$courseDescription,$title,$max,$r);
+	    }
+            if($sortProblems eq 'Sort Within Sequence') {
+                $r->print('<br><b>'.$cache{$sequence.':title'}.'</b>'."\n");
+            }
+
+            $currentSequence = $sequence;
+            @values = ();
+	    $max=0;
+        }
         my $data = 0;
         if($graph eq 'DoDiffGraph') {
             $data = sprintf("%.2f", $cache{$_.':degreeOfDifficulty'}),
@@ -252,24 +279,35 @@ sub BuildGraphicChart {
     }
     untie(%cache);
 
-    my $sendValues = join(',', @values);
-    my $sendCount = scalar(@values);
+    &DrawGraph(\@values,$courseDescription,$title,$max,$r);
 
-    my $title = '';
-    if($graph eq 'DoDiffGraph') {
-	$title = 'Degree-of-Difficulty';
-    } else {
-	$title = 'Wrong-Percentage';
-    }
-    my @GData = ($courseDescription, 'Problems', $title, $max, $sendCount, 
-                 $sendValues);
+    return;
+}
 
-    $r->print('</form>'."\n");
-    $r->print('<IMG src="/cgi-bin/graph.gif?'.(join('&', @GData)).
-              '" border="1" />');
-    $r->print('<form>'."\n");
 
-    return;
+sub DrawGraph {
+    my ($values,$courseDescription,$title,$Max,$r)=@_;
+    my $sendValues = join(',', @$values);
+    my $sendCount = scalar(@$values);
+    $r->print("<br>The Maximum Value is: $Max");
+    if ( $Max > 1 ) {
+	if ($Max % 10) {
+            if ( int($Max) < $Max ) {
+	    	$Max++;
+		$Max = int($Max);
+	    }
+	}
+    #(10 - $Max % 10);
+    } else { $Max = 1; }
+
+    my @GData = ('','Problem_number',$title,$Max,$sendCount,$sendValues);
+
+#    $r->print('</form>'."\n");
+    $r->print('<br>'."\n");
+    $r->print('<IMG src="/cgi-bin/graph.png?'.
+              (join('&', @GData)).'" border="1" />');
+#    $r->print('<form>'."\n");
+    $r->print('<br>'."\n");
 }
 
 #---- Problem Statistics Web Page ---------------------------------------
@@ -287,7 +325,7 @@ sub CreateProblemStatisticsTableHeading
         $Str .= '&ProblemStatisticsSort=';
         $Str .= &Apache::lonnet::escape($_).'">'.$_.'</a>&nbsp</th>'."\n";
     }
-    $Str .= "\n".'</tr>'."\n";    
+    $Str .= "\n".'</tr>'."\n";
 
     return $Str;
 }
@@ -305,8 +343,8 @@ sub BuildStatisticsTable {
             next;
         }
 
-        if($currentSequence == -1 || 
-           ($sortProblems eq 'Sort Within Sequence' && 
+        if($currentSequence == -1 ||
+           ($sortProblems eq 'Sort Within Sequence' &&
             $currentSequence != $sequence)) {
             if($displayFormat ne 'Display CSV Format') {
                 if($currentSequence ne -1) {
@@ -571,7 +609,7 @@ sub ExtractStudentData {
                 }
 
                 my $studentTriesJoined = join(':::', @studentTries);
-                $problemData{$id.':sequenceTitle'} = 
+                $problemData{$id.':sequenceTitle'} =
                     $cache->{$sequence.':title'};
                 $problemData{$id.':studentCount'} = $studentCount;
                 $problemData{$id.':totalTries'} = $totalTries;
@@ -620,10 +658,10 @@ sub ExtractStudentData {
 
 sub SortDivideByTries {
     my ($toSort, $data, $sortOn)=@_;
-    my @orderedData = sort { ($data->{$a.':totalTries'}) ? 
+    my @orderedData = sort { ($data->{$a.':totalTries'}) ?
                              ($data->{$a.$sortOn}/$data->{$a.':totalTries'}):0
                              <=>
-                             ($data->{$b.':totalTries'}) ? 
+                             ($data->{$b.':totalTries'}) ?
                              ($data->{$b.$sortOn}/$data->{$b.':totalTries'}):0
                            } @$toSort;