'."\n";
+ $Str .= ''."\n";
+
+ my $displayString = 'DISPLAYDATA  | '."\n";
+ $Str .= &Apache::lonhtmlcommon::CreateHeadings(\%cache, $studentInformation,
+ $headings, $displayString);
+ $Str .= ' '."\n";
+ my $alternate=0;
+ foreach (@$students) {
+ my ($username, $domain) = split(':', $_);
+ if($alternate) {
+ $Str .= '';
+ } else {
+ $Str .= ' ';
+ }
+ $alternate = ($alternate + 1) % 2;
+ foreach my $data (@$studentInformation) {
+ $Str .= '';
+ if($data eq 'fullname') {
+ $Str .= '';
+ $Str .= $cache{$_.':'.$data}.' ';
+ $Str .= '';
+ } elsif($data eq 'updateTime') {
+ $Str .= '';
+ $Str .= $cache{$_.':'.$data}.' ';
+ $Str .= ' ';
+ } else {
+ $Str .= $cache{$_.':'.$data}.' ';
+ }
- &Discriminant();
-
- $OpSel2='';
- $OpSel1='selected';
-
- $p_count = 0;
- my $nIdx = 0;
- my $dummy;
- my $p_val;
- my $ResId;
- my $NoElements = $#list + 1;
-#-------------------------------- loop for data representation
- foreach (sort keys %mapsort) {
- my ($Hid,$pr)=split(/\:/,$mapsort{$_});
- my @lpr=split(/\&/,$pr);
- &CreateTable(1,$Hid);
- for (my $i=1; $i<=$#lpr; $i++) {
- my %storestats=();
- my ($PrOrd,$Prob,$Tries,$Wrongs,$Code)=split(/\&/,$list[$nIdx]);
- my $Temp = $Prob;
- my $MxTries = 0;
- my $TotalTries = 0;
- my $YES = 0;
- my $Incorrect = 0;
- my $Override = 0;
- my $StdNo = 0;
- my @StdLst;
- while ( $PrOrd == $lpr[$i] )
- {
- $nIdx++;
- $StdNo++;
- $StdLst[ $StdNo ] = $Tries;
- $TotalTries += $Tries;
- if ( $MxTries < $Tries ) { $MxTries = $Tries; }
- 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)=split(/\&/,$list[$nIdx]);
- }
-
- $p_count++;
- my $Dummy;
- ($ResId,$Dummy)=split(/\*/,$Temp);
-
- $Temp = ''.$hash{'title_'.$ResId}.$Dummy.'';
-
- my $res = &Apache::lonnet::declutter($hash{'src_'.$ResId});
- my $urlres=$res;
-
- $ResId=~/(\d+)\.(\d+)/;
- my $Map = &Apache::lonnet::declutter( $hash{'map_id_'.$1} );
- $urlres=$Map;
-
- $res = ''.$res.'';
- #$Map = ''.$res.'';
-
-#------------------------ 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.'___stdno'}=$StdNo;
- $storestats{$ENV{'request.course.id'}.'___'.$urlres.'___avetries'}=$Average;
-
-#-------------------------------- Compute percentage of Wrong tries
- my $Wrong = ( $StdNo ) ? 100 * ( $Incorrect / $StdNo ) : 0;
-
-#-------------------------------- Compute Standard Deviation
- my $StdDev = 0;
- if ( $StdNo > 1 ) {
- for ( my $n = 0; $n < $StdNo; $n++ ) {
- my $Dif = $StdLst[ $n ]-$Average;
- $StdDev += $Dif*$Dif;
- }
- $StdDev /= ( $StdNo - 1 );
- $StdDev = sqrt( $StdDev );
- }
-
-#-------------------------------- Compute Degree of Difficulty
- my $DoDiff = 0;
- if( $TotalTries > 0 ) {
- $DoDiff = 1 - ( ( $YES + $Override ) / $TotalTries );
-# $DoDiff = ($TotalTries)/($YES + $Override+ 0.1);
- }
-
- $storestats{$ENV{'request.course.id'}.'___'.$urlres.'___difficulty'}=$DoDiff;
-
-#-------------------------------- Compute the Skewness
- my $Skewness = 0;
- my $Sum = 0;
- if ( $StdNo > 0 && $StdDev > 0 ) {
- for ( my $n = 0; $n < $StdNo; $n++ ) {
- my $Dif = $StdLst[ $n ]-$Average;
- $Skewness += $Dif*$Dif*$Dif;
- }
- $Skewness /= $StdNo;
- $Skewness /= $StdDev*$StdDev*$StdDev;
- }
-
-#--------------------- Compute the Discrimination Factors
- my ($Up1,$Up2)=split(/\:/,$DisUp{$lpr[$i]});
- my ($Lw1,$Lw2)=split(/\:/,$DisLow{$lpr[$i]});
- my $Dis1 = $Up1 - $Lw1;
- my $Dis2 = $Up2 - $Lw2;
- my $_D1 = sprintf("%.2f", $Dis1);
- my $_D2 = sprintf("%.2f", $Dis2);
-
-#----------------- Some restition in presenting the float numbers
- my $Avg = sprintf( "%.2f", $Average );
- my $Wrng = sprintf( "%.1f", $Wrong );
- my $SD = sprintf( "%.1f", $StdDev );
- my $DoD = sprintf( "%.2f", $DoDiff );
- my $Sk = sprintf( "%.1f", $Skewness );
- my $join = $lpr[$i].'&'.$Temp.'&'.$StdNo.'&'.
- $TotalTries.'&'.$MxTries.'&'.$Avg.'&'.
- $YES.'&'.$Override.'&'.$Wrng.'&'.$DoD.'&'.
- $SD.'&'.$Sk.'&'.$_D1.'&'.$_D2.'&'.
- $Prob;
- $CachData{($p_count-1)}=$join;
-
- $urlres=~/^(\w+)\/(\w+)/;
- if ($StdNo) {
- &Apache::lonnet::put('resevaldata',\%storestats,$1,$2);
- }
-#-------------------------------- Row of statistical table
- if ( $DiscFlag == 0 ) {
- &TableRow($join,$i,($p_count-1));
- }
- }
- &CloseTable();
- }
- &Close_PrgWin();
-}
-
-sub Cache_Statistics {
- my @list = ();
- my $Useful;
- my $UnUseful;
- my %myHeader = reverse( %Header );
- $Pos = $myHeader{$ENV{'form.sort'}};
- if ($Pos > 0) {$Pos++;}
- $p_count = 0;
- foreach my $key( keys %CachData) {
- my @Temp=split(/\&/,$CachData{$key});
- if ( $Pos == 0 ) {
- ($UnUseful,$Useful)=split(/\>/,$Temp[$Pos]);
- }
- else {
- $Useful = $Temp[$Pos];
- }
- $list[$p_count]=$Useful.'@'.$CachData{$key};
- $p_count++;
- }
-
- @list = sort MySort (@list);
-
- my $nIdx=0;
-
- if ( $Pos == 0 ) {
- foreach (sort keys %mapsort) {
- my ($Hid,$pr)=split(/\:/,$mapsort{$_});
- &CreateTable(1,$Hid);
- my @lpr=split(/\&/,$pr);
- for (my $i=1; $i<=$#lpr; $i++) {
- my($Pre, $Post) = split(/\@/,$list[$nIdx]);
- #$r->print(' '.$Pre.'---'.$Post);
- &TableRow($Post,$i,$nIdx);
- $nIdx++;
- }
- &CloseTable();
- }
- }
- else {
- &CreateTable(0);
- for ( my $nIdx = 0; $nIdx < $p_count; $nIdx++ ) {
- my($Pre, $Post) = split(/\@/,$list[$nIdx]);
- &TableRow($Post,$nIdx,$nIdx);
- }
- &CloseTable();
+ $Str .= ' | '."\n";
+ }
}
-}
-sub TableRow {
- my ($Str,$Idx,$RealIdx)=@_;
- my($PrOrd,$Temp,$StdNo,$TotalTries,$MxTries,$Avg,$YES,$Override,
- $Wrng,$DoD,$SD,$Sk,$_D1,$_D2,$Prob)=split(/\&/,$Str);
- my $Ptr = "\n".' '.
- "\n".''.($RealIdx+1).' | '.
- # "\n".''.$PrOrd.$Temp.' | '.
- "\n".''.$Temp.' | '.
- "\n".' '.$StdNo.' | '.
- "\n".''.$TotalTries.' | '.
- "\n".''.$MxTries.' | '.
- "\n".''.$Avg.' | '.
- "\n".' '.$YES.' | '.
- "\n".' '.$Override.' | '.
- "\n".' '.$Wrng.' | '.
- "\n".''.$DoD.' | '.
- "\n".' '.$SD.' | '.
- "\n".' '.$Sk.' | '.
- "\n".' '.$_D1.' | '.
- "\n".' '.$_D2.' | ';
- $r->print("\n".$Ptr.' ' );
- $GraphDat{$RealIdx}=$DoD.':'.$Wrng;
-}
+ $Str .= ''."\n";
+ $Str .= '
|