--- loncom/interface/Attic/lonchart.pm 2001/02/06 20:50:04 1.4 +++ loncom/interface/Attic/lonchart.pm 2001/07/10 18:15:25 1.5 @@ -14,6 +14,8 @@ # 3/1/1,6/1,17/1,29/1,30/1 Gerd Kortemeyer) # # 1/31 Gerd Kortemeyer +# +# 7/10/01 Behrouz Minaei package Apache::lonchart; @@ -31,54 +33,108 @@ my @students; # ------------------------------------------------------------- Find out status -sub astatus { - my ($rid,$student)=@_; - my ($uname,$udom)=split(/\:/,$student); - my $code=' '; - $rid=~/(\d+)\.(\d+)/; - my $symb=&Apache::lonnet::declutter($hash{'map_id_'.$1}).'___'.$2.'___'. - &Apache::lonnet::declutter($hash{'src_'.$rid}); - my $answer=&Apache::lonnet::reply( - "restore:$udom:$uname:". - $ENV{'request.course.id'}.':'. - &Apache::lonnet::escape($symb), - &Apache::lonnet::homeserver($uname,$udom)); - my %returnhash=(); - map { - my ($name,$value)=split(/\=/,$_); - $returnhash{&Apache::lonnet::unescape($name)}= - &Apache::lonnet::unescape($value); - } split(/\&/,$answer); - if ($returnhash{'version'}) { - my $version; - for ($version=1;$version<=$returnhash{'version'};$version++) { - map { - $returnhash{$_}=$returnhash{$version.':'.$_}; - } split(/\:/,$returnhash{$version.':keys'}); - } - my $totaltries=0; - map { - if (($_=~/\.(\w+)\.solved$/) && ($_!~/^\d+\:/)) { - my $part=$1; - if ($returnhash{$_} eq 'correct_by_student') { - unless (($code eq '.') || ($code eq '-')) { $code='*'; } - $totaltries+=$returnhash{'resource.'.$part.'.tries'}; - } elsif ($returnhash{$_} eq 'correct_by_override') { - unless (($code eq '.') || ($code eq '-')) { $code='+'; } - } elsif ($returnhash{$_} eq 'incorrect_attempted') { - $code='.'; - } elsif ($returnhash{$_} eq 'incorrect_by_override') { - $code='-'; - } elsif ($returnhash{$_} eq 'excused') { - unless (($code eq '.') || ($code eq '-')) { $code='x'; } - } - } - } keys %returnhash; - if (($code eq '*') && ($totaltries<10)) { $code="$totaltries"; } +sub ExtractStudentData { + my ($index,$coid)=@_; + my ($sname,$sdom) = split( /\:/, $students[$index] ); + my $shome=&Apache::lonnet::homeserver( $sname,$sdom ); + my $reply=&Apache::lonnet::reply('dump:'.$sdom.':'.$sname.':'.$coid,$shome ); + my %result=(); + my $ResId; + my $Code; + my $Tries; + my $Wrongs; + my $Version; + + my $Str=substr($students[$index]. + ' ',0,14).' ! '. + substr($rowlabels[$index]. + ' ',0,45).' ! '; + + unless ($reply=~/^error\:/) { + map { + my ($name,$value)=split(/\=/,&Apache::lonnet::unescape($_)); + $result{$name}=$value; + } split(/\&/,$reply); + foreach $ResId (@cols) { + if ( !$ResId ) { $Str .= ' ! '; next; } + $ResId=~/(\d+)\.(\d+)/; + my $Prob = &Apache::lonnet::declutter( $hash{'map_id_'.$1} ). + '___'.$2.'___'. + &Apache::lonnet::declutter( $hash{'src_'.$ResId} ); + $Code=' '; + $Tries = 0; + $Version = $result{"version:$Prob"}; + if ( $Version ) { + my $vkeys = $result{"$Version:keys:$Prob"}; + my @keys = split(/:/,$vkeys); + foreach my $Key (@keys) { + if (($Key=~/\.(\w+)\.solved$/) && ($Key!~/^\d+\:/)) { + my $Part = $1; + $Tries = $result{"$Version:$Prob:resource.$Part.tries"}; + my $Val = $result{"$Version:$Prob:$Key"}; + if ($Val eq 'correct_by_student'){$Code='*';} + elsif ($Val eq 'correct_by_override'){$Code = '+';} + elsif ($Val eq 'incorrect_attempted'){$Code = '.';} + elsif ($Val eq 'incorrect_by_override'){$Code = '-';} + elsif ($Val eq 'excused'){$Code = 'x';} + } + if (($Code eq '*')&&($Tries<10)){$Code=$Tries;} + } + } + $Str .= $Code; + } } - return $code; + return $Str; } +#sub astatus { +# my ($rid,$student)=@_; +# my ($uname,$udom)=split(/\:/,$student); +# my $code=' '; +# $rid=~/(\d+)\.(\d+)/; +# my $symb=&Apache::lonnet::declutter($hash{'map_id_'.$1}).'___'.$2.'___'. +# &Apache::lonnet::declutter($hash{'src_'.$rid}); +# my $answer=&Apache::lonnet::reply( +# "restore:$udom:$uname:". +# $ENV{'request.course.id'}.':'. +# &Apache::lonnet::escape($symb), +# &Apache::lonnet::homeserver($uname,$udom)); +# my %returnhash=(); +# map { +# my ($name,$value)=split(/\=/,$_); +# $returnhash{&Apache::lonnet::unescape($name)}= +# &Apache::lonnet::unescape($value); +# } split(/\&/,$answer); +# if ($returnhash{'version'}) { +# my $version; +# for ($version=1;$version<=$returnhash{'version'};$version++) { +# map { +# $returnhash{$_}=$returnhash{$version.':'.$_}; +# } split(/\:/,$returnhash{$version.':keys'}); +# } +# my $totaltries=0; +# map { +# if (($_=~/\.(\w+)\.solved$/) && ($_!~/^\d+\:/)) { +# my $part=$1; +# if ($returnhash{$_} eq 'correct_by_student') { +# unless (($code eq '.') || ($code eq '-')) { $code='*'; } +# $totaltries+=$returnhash{'resource.'.$part.'.tries'}; +# } elsif ($returnhash{$_} eq 'correct_by_override') { +# unless (($code eq '.') || ($code eq '-')) { $code='+'; } +# } elsif ($returnhash{$_} eq 'incorrect_attempted') { +# $code='.'; +# } elsif ($returnhash{$_} eq 'incorrect_by_override') { +# $code='-'; +# } elsif ($returnhash{$_} eq 'excused') { +# unless (($code eq '.') || ($code eq '-')) { $code='x'; } +# } +# } +# } keys %returnhash; +# if (($code eq '*') && ($totaltries<10)) { $code="$totaltries"; } +# } +# return $code; +#} + # ------------------------------------------------------------ Build page table sub tracetable { @@ -247,19 +303,20 @@ sub handler { $r->print('

');
  			  my $index;
                            for ($index=0;$index<=$#students;$index++) {
-                              $r->print(
-                                       substr($students[$index].
-       '                                                        ',0,14).' ! '.
-        			       substr($rowlabels[$index].
-       '                                                        ',0,45).' ! ');
-                              map {
-                                  if ($_) {
-                                     $r->print(&astatus($_,$students[$index]));
-                                  } else {
-                                     $r->print(' ! ');
-                                  }
-                              } @cols;
-                              $r->print("\n");
+#                              $r->print(
+#                                       substr($students[$index].
+#       '                                                        ',0,14).' ! '.
+#        			       substr($rowlabels[$index].
+#       '                                                        ',0,45).' ! ');
+                             # map {
+                             #     if ($_) {
+                             #        $r->print(&astatus($_,$students[$index]));
+                             #     } else {
+                             #        $r->print(' ! ');
+                             #     }
+                             # } @cols;
+                             # $r->print("\n");
+                              $r->print(&ExtractStudentData($index,$cid).'
'); $r->rflush(); } $r->print('
');