Diff for /loncom/interface/statistics/lonproblemstatistics.pm between versions 1.13 and 1.14

version 1.13, 2002/08/05 20:53:38 version 1.14, 2002/08/06 02:01:05
Line 105  sub BuildProblemStatisticsPage { Line 105  sub BuildProblemStatisticsPage {
 #                                                  'ProblemStatisticsHeading',  #                                                  'ProblemStatisticsHeading',
 #                                                  'ProblemStatisticsHeading',  #                                                  'ProblemStatisticsHeading',
 #                                                  'Homework Sets Order');   #                                                  'Homework Sets Order'); 
     $r->print("<br>state=".$state);  #    $r->print("<br>state=".$state);
   
     my $TempCache;      my $TempCache;
   
Line 146  sub BuildProblemStatisticsPage { Line 146  sub BuildProblemStatisticsPage {
   
 #---- Problem Statistics Web Page ---------------------------------------  #---- Problem Statistics Web Page ---------------------------------------
   
   
 sub NumericSort {            
     $a <=> $b;  
 }  
   
   
 sub CreateProblemStatisticsTableHeading {  sub CreateProblemStatisticsTableHeading {
     my ($displayFormat,$sequenceSource,$sequenceTitle,$headings,$r)=@_;      my ($displayFormat,$sequenceSource,$sequenceTitle,$headings,$r)=@_;
     if($displayFormat eq 'Display CSV Format') {      if($displayFormat eq 'Display CSV Format') {
Line 159  sub CreateProblemStatisticsTableHeading Line 153  sub CreateProblemStatisticsTableHeading
         $r->print($sequenceSource.'"');          $r->print($sequenceSource.'"');
  return;   return;
     }      }
       if ($sequenceSource eq 'Sorted by: ') {
     $r->print('<br><a href="'.$sequenceSource.   $r->print('<br><b>'.$sequenceSource.$sequenceTitle.'</b>');
               '" target="_blank">'.$sequenceTitle.'</a>');      } else {
           $r->print('<br><a href="'.$sequenceSource.
     '" target="_blank">'.$sequenceTitle.'</a>');
       }
     my $Result = "\n".'<table border=2><tr><th>P#</th>'."\n";      my $Result = "\n".'<table border=2><tr><th>P#</th>'."\n";
     for(my $nIndex=0; $nIndex < (scalar (keys %$headings)); $nIndex++) {       for(my $nIndex=0; $nIndex < (scalar (keys %$headings)); $nIndex++) { 
  $Result .= '<th>'.'<input type="submit" name="';   $Result .= '<th>'.'<input type="submit" name="';
Line 218  sub Close_PrgWin { Line 214  sub Close_PrgWin {
     $r->print('<script>popwin.close()</script>');      $r->print('<script>popwin.close()</script>');
     $r->rflush();       $r->rflush(); 
 }  }
   
     
 # ------ Dump the Student's DB file and handling the data for statistics table   # ------ Dump the Student's DB file and handling the data for statistics table 
 sub ExtractStudentData {  sub ExtractStudentData {
Line 417  sub ExtractStudentData { Line 414  sub ExtractStudentData {
     }      }
 }  }
   
   sub NumericSort {
       $a <=> $b;
   }
   
   sub OrderedSort  {
 sub MySort {      if ($ENV{'form.order'} eq 'Descending') {
     my $pos=shift;   $b <=> $a;
     if ( $pos > 0 ) {      } else { 
  if ($ENV{'form.order'} eq 'Descending') {$b <=> $a;}   $a <=> $b;
  else { $a <=> $b; }  
     }  
     else {  
 # if ($ENV{'form.order'} eq 'Descending') {$b cmp $a;}  
 # else { $a cmp $b; }  
  $a cmp $b;  
     }      }
 }  }
   
Line 598  sub BuildStatisticsTable { Line 592  sub BuildStatisticsTable {
     $urlres=~/^(\w+)\/(\w+)/;      $urlres=~/^(\w+)\/(\w+)/;
     if ($StdNo) {       if ($StdNo) { 
  &Apache::lonnet::put('resevaldata',\%storestats,$1,$2);    &Apache::lonnet::put('resevaldata',\%storestats,$1,$2); 
     }      }
 #-------------------------------- Row of statistical table  #-------------------------------- Row of statistical table
             &TableRow($cache,$join,$cIdx,($p_count-1),$r,$color,              &TableRow($cache,$join,$cIdx,($p_count-1),$r,$color,
                       \%TempCache);                        \%TempCache);
Line 607  sub BuildStatisticsTable { Line 601  sub BuildStatisticsTable {
  &CloseTable($cache,$r);   &CloseTable($cache,$r);
     }      }
 ###    &Close_PrgWin();  ###    &Close_PrgWin();
 #666666  #6666666
 #    close( OUT );  #    close( OUT );
 #666666  #666666
     return \%TempCache;      return \%TempCache;
Line 615  sub BuildStatisticsTable { Line 609  sub BuildStatisticsTable {
   
   
 sub CacheStatisticsTable {  sub CacheStatisticsTable {
     my ($state,$cache,$Header,$r,$color)=@_;      my ($state,$cache,$headings,$r,$color)=@_;
     my @list = ();      my @list = (); 
     my $Useful;  
     my $UnUseful;   
     my %TempCache;      my %TempCache;
     my %myHeader = reverse( %$Header );      my %myHeader = reverse( %$headings );
     my $pos = $myHeader{$state};      my $pos = $myHeader{$state};
     if ($pos > 0) {$pos++;}      if ($pos > 0) {$pos++;}
     my $p_count = $cache->{'ProblemCount'};      my $p_count = $cache->{'ProblemCount'};
Line 628  sub CacheStatisticsTable { Line 620  sub CacheStatisticsTable {
     for ( my $k=0; $k<$p_count;$k++) {      for ( my $k=0; $k<$p_count;$k++) {
  my $key=$cache->{'CacheTable:'.$k};   my $key=$cache->{'CacheTable:'.$k};
  my @Temp=split(/\&/,$key);   my @Temp=split(/\&/,$key);
  if ( $pos == 0 ) {   $list[$k]=$Temp[$pos].'+'.$key;
     ($UnUseful,$Useful)=split(/\>/,$Temp[$pos]);  
  }  
  else {  
     $Useful = $Temp[$pos];  
  }     
  $list[$k]=$Useful.'@'.$key;  
  $r->print('<br>'.$list[$k]);  
     }      }
       
       if ($pos>0) {
   # $r->print('<br>pos1='.$pos);
   #        @list = sort OrderedSort (@list);
    @list = sort NumericSort (@list);
       } else {
           @list = sort (@list);
       }
       my $cIdx=0;
   
       if ( $pos == 0 ) {
     @list = sort MySort (@list);  
   
     my $nIndex=0;  
   
     return \%TempCache;  
 }  
   
   
 =pod  
   
     if ( $Pos == 0 ) {  
  foreach my $sequence (split(':', $cache->{'orderedSequences'})) {   foreach my $sequence (split(':', $cache->{'orderedSequences'})) {
     if($cache->{'ProblemStatisticsMaps'} ne 'All Maps'  &&      if($cache->{'ProblemStatisticsMaps'} ne 'All Maps'  &&
        $cache->{'ProblemStatisticsMaps'} ne $cache->{$sequence.':title'}) {         $cache->{'ProblemStatisticsMaps'} ne $cache->{$sequence.':title'}) {
  next;   next;
     }      }
       if ($cIdx==$p_count) {
    return \%TempCache;
       }
     &CreateProblemStatisticsTableHeading($cache->{'DisplayFormat'},       &CreateProblemStatisticsTableHeading($cache->{'DisplayFormat'}, 
                                              $cache->{$sequence.':source'},                                               $cache->{$sequence.':source'},
                                              $cache->{$sequence.':title'},                                                $cache->{$sequence.':title'}, 
                                              $headings,$r);                                               $headings,$r);
   
     my ($tar,$Tries,$Wrongs,$Code,$Disc)=split(/\&/,      my ($tar)=split(/\&/,$list[$cIdx]);
                                                        $list[$cIdx]);      $tar=~s/\+//eg;
     my ($SqOrd,$PrOrd,$Prob)=split(/\:/,$tar);      my ($SqOrd)=split(/\@/,$tar);
     $sequence+=100;      $sequence+=100;
  while ($SqOrd==$sequence && $cIdx<$NoElements) {      while ($SqOrd==$sequence && $cIdx<$p_count) {
     my %storestats=();   my($Pre, $Post) = split(/\+/,$list[$cIdx]); 
     my @lpr=split(/\&/,$pr);   &TableRow($cache,$Post,$cIdx,$cIdx,$r,$color,\%TempCache);
     for (my $i=1; $i<=$#lpr; $i++) {   $cIdx++;
  my($Pre, $Post) = split(/\@/,$list[$nIndex]);    my ($tar)=split(/\&/,$list[$cIdx]);
  #$r->print('<br>'.$Pre.'---'.$Post);   $tar=~s/\+//eg;
  &TableRow($cache,$Post,$i,$nIndex,$color,\%GraphDat);   ($SqOrd)=split(/\@/,$tar);
  $nIndex++;  
     }      }
     &CloseTable($cache);      &CloseTable($cache,$r);
  }   }
     }      }
     else {      else {
         &CreateProblemStatisticsTableHeading($cache->{'DisplayFormat'},           &CreateProblemStatisticsTableHeading($cache->{'DisplayFormat'}, 
                                              $cache->{$sequence.':source'},                                               'Sorted by: ',
                                              $cache->{$sequence.':title'},        $headings->{$pos-1},
                                              $headings,$r);                                               $headings,$r);
  for ( my $nIndex = 0; $nIndex < $p_count; $nIndex++ ) {   for ( my $nIndex = 0; $nIndex < $p_count; $nIndex++ ) {
     my($Pre, $Post) = split(/\@/,$list[$nIndex]);       my($Pre, $Post) = split(/\+/,$list[$nIndex]);
     &TableRow($cache,$Post,$nIndex,$nIndex,$color,\%GraphDat);      &TableRow($cache,$Post,$nIndex,$nIndex,$r,$color,\%TempCache);
  }    } 
  &CloseTable($cache);   &CloseTable($cache,$r);
     }      }
   
     return \%TempCache;      return \%TempCache;
 }  }
   
 =cut  
   
   
 sub TableRow {  sub TableRow {
     my ($cache,$Str,$Idx,$RealIdx,$r,$color,$GraphDat)=@_;      my ($cache,$Str,$Idx,$RealIdx,$r,$color,$GraphDat)=@_;
Line 723  sub TableRow { Line 706  sub TableRow {
     } else {      } else {
         $Ptr="\n".'<tr>'.          $Ptr="\n".'<tr>'.
              "\n".'<td>'.($RealIdx+1).'</td>'.               "\n".'<td>'.($RealIdx+1).'</td>'.
           #  "\n".'<td>'.$PrOrd.$Temp.'</td>'.  
              "\n".'<td>'.$Temp.'</td>'.               "\n".'<td>'.$Temp.'</td>'.
              "\n".'<td bgcolor='.$color->{"yellow"}.'> '.$StdNo.'</td>'.               "\n".'<td bgcolor='.$color->{"yellow"}.'> '.$StdNo.'</td>'.
              "\n".'<td bgcolor='.$color->{"yellow"}.'>'.$TotalTries.'</td>'.               "\n".'<td bgcolor='.$color->{"yellow"}.'>'.$TotalTries.'</td>'.
Line 740  sub TableRow { Line 722  sub TableRow {
              "\n".'<td bgcolor='.$color->{"yellow"}.'> '.$DiscNo.'</td>';               "\n".'<td bgcolor='.$color->{"yellow"}.'> '.$DiscNo.'</td>';
         $r->print("\n".$Ptr.'</tr>' );          $r->print("\n".$Ptr.'</tr>' );
     }      }
     $GraphDat->{'graph_gif:'.$RealIdx}=$DoD.':'.$Wrng;      $GraphDat->{'GraphGif:'.$RealIdx}=$DoD.':'.$Wrng;
 }  }
   
   
Line 940  sub BuildWrongGraph { Line 922  sub BuildWrongGraph {
   
   
 sub GetGraphData {  sub GetGraphData {
     my ($ylab,$r,%GraphDat)=@_;      my ($ylab,$r,$cache)=@_;
     my $Col;      my $Col;
     my $data='';      my $data='';
     my $count = 0;      my $count = 0;
     my $Max = 0;      my $Max = 0;
     my $cid=$ENV{'request.course.id'};      my $cid=$ENV{'request.course.id'};
     my $GraphDB = "/home/httpd/perl/tmp/$ENV{'user.name'}".  
                   "_$ENV{'user.domain'}_$cid\_graph.db";      if ( $ylab eq 'DoDiff Graph' ) {
     foreach (keys %GraphDat) {delete $GraphDat{$_};}   $ylab = 'Degree-of-Difficulty';
     if (-e "$GraphDB") {   $Col = 0;
  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");  
  }  
     }      }
       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;
 }  }
   
   

Removed from v.1.13  
changed lines
  Added in v.1.14


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>