# | '. - "\n".'Concept | '. - "\n".'Correct | '. - "\n".'Wrong | '. - "\n".'
---|---|---|---|
".($n+1)." | ". - "\n".''.$Concepts[$n]." | ". - "\n".''.$data1[$n]." | ". - "\n".''.$data2[$n]." | ". - "\n"."From:['.localtime($ConceptData{'Int.'.$k}). - '] To: ['.localtime($ConceptData{'Int.'.($k+1)}-1). - "] | $Correct | $Wrong | "; - - $Str .= "\n".'
P# | '."\n"; - for(my $nIndex=0; $nIndex < (scalar (keys %$headings)); $nIndex++) { - $Result .= ''.''.' | '."\n"; - } - $Result .= "\n".'
---|
'; - $Ptr .= '#Stdnts: | '; - $Ptr .= 'Total Number of Students opened the problem.'; - $Ptr .= ' |
'; - $Ptr .= 'Tries: | '; - $Ptr .= 'Total Number of Tries for solving the problem.'; - $Ptr .= ' |
'; - $Ptr .= 'Mod: | '; - $Ptr .= 'Maximunm Number of Tries for solving the problem.'; - $Ptr .= ' |
'; - $Ptr .= 'Mean: | '; - $Ptr .= 'Average Number of the tries. [ Tries / #Stdnts ]'; - $Ptr .= ' |
'; - $Ptr .= '#YES: | '; - $Ptr .= 'Number of students solved the problem correctly.'; - $Ptr .= ' |
'; - $Ptr .= '#yes: | '; - $Ptr .= 'Number of students solved the problem by override.'; - $Ptr .= ' |
'; - $Ptr .= '%Wrng: | '; - $Ptr .= 'Percentage of students tried to solve the problem '; - $Ptr .= 'but still incorrect. [ 100*((#Stdnts-(#YES+#yes))/#Stdnts) ]'; - $Ptr .= ' |
';
-# Kashy formula
-# ' DoDiff : Degree of Difficulty of the problem. '. -# '[ Tries/(#YES+#yes+0.1) ] '. - #Gerd formula - $Ptr .= 'DoDiff: | ';
- $Ptr .= 'Degree of Difficulty of the problem. '; - $Ptr .= '[ 1 - ((#YES+#yes) / Tries) ]'; - $Ptr .= ' |
'; - $Ptr .= 'S.D.: | '; - $Ptr .= 'Standard Deviation of the tries. '; - $Ptr .= '[ sqrt(sum((Xi - Mean)^2)) / (#Stdnts-1) '; - $Ptr .= 'where Xi denotes every student\'s tries ]'; - $Ptr .= ' |
'; - $Ptr .= 'Skew.: | '; - $Ptr .= 'Skewness of the students tries.'; - $Ptr .= '[(sqrt( sum((Xi - Mean)^3) / #Stdnts)) / (S.D.^3)]'; - $Ptr .= ' |
'; - $Ptr .= 'Dis.F.: | '; - $Ptr .= 'Discrimination Factor: A Standard for evaluating the ';
- $Ptr .= 'problem according to a Criterion '; - $Ptr .= '[Applied Criterion in %27 Upper Students - '; - $Ptr .= 'Applied the same Criterion in %27 Lower Students] '; - $Ptr .= '1st Criterion for Sorting the Students: '; - $Ptr .= 'Sum of Partial Credit Awarded / Total Number of Tries '; - $Ptr .= '2nd Criterion for Sorting the Students: '; - $Ptr .= 'Total number of Correct Answers / Total Number of Tries'; - $Ptr .= ' |
Disc. | '; - $Ptr .= 'Number of Students had at least one discussion.'; - $Ptr .= ' |
\# | Problem Title | "; - $Str .= 'Resource | Analysis |
---|---|---|---|
'.$number.' | '; - $Str .= ''.$Temp.' | '; - $Str .= ''.$uri.' | '; - $Str .= '
\# | Set Title | "; - $Str .= 'Results | Tries |
---|---|---|---|
'.$sequence.' | '; - $Str .= ''.$cache->{$sequence.':title'}.' | '; - - $codes = ''; - $attempts = ''; - foreach my $problemID (split(':', $cache->{$sequence.':problems'})) { - my $problem = $cache->{$problemID.':problem'}; - my $LatestVersion = $cache->{$name.':version:'.$problem}; - - # Output dashes for all the parts of this problem if there - # is no version information about the current problem. - if(!$LatestVersion) { - foreach my $part (split(/\:/,$cache->{$sequence.':'. - $problemID. - ':parts'})) { - $codes .= "-,"; - $attempts .= "0,"; - } - next; - } - - my %partData=undef; - # Initialize part data, display skips correctly - # Skip refers to when a student made no submissions on that - # part/problem. - foreach my $part (split(/\:/,$cache->{$sequence.':'. - $problemID. - ':parts'})) { - $partData{$part.':tries'}=0; - $partData{$part.':code'}='-'; - } - - # Looping through all the versions of each part, starting with the - # oldest version. Basically, it gets the most recent - # set of grade data for each part. - for(my $Version=1; $Version<=$LatestVersion; $Version++) { - foreach my $part (split(/\:/,$cache->{$sequence.':'. - $problemID. - ':parts'})) { - - if(!defined($cache->{$name.":$Version:$problem". - ":resource.$part.solved"})) { - # No grade for this submission, so skip - next; - } - - my $tries=0; - my $code='U'; - - $tries = $cache->{$name.":$Version:$problem". - ":resource.$part.tries"}; - $partData{$part.':tries'}=($tries) ? $tries : 0; - - my $val = $cache->{$name.":$Version:$problem". - ":resource.$part.solved"}; - if ($val eq 'correct_by_student') {$code = 'Y';} - elsif ($val eq 'correct_by_override') {$code = 'y';} - elsif ($val eq 'incorrect_attempted') {$code = 'N';} - elsif ($val eq 'incorrect_by_override'){$code = 'N';} - elsif ($val eq 'excused') {$code = 'x';} - $partData{$part.':code'}=$code; - } - } - - # Loop through all the parts for the current problem in the - # correct order and prepare the output - foreach (split(/\:/,$cache->{$sequence.':'.$problemID. - ':parts'})) { - $codes .= $partData{$_.':code'}.','; - $attempts .= $partData{$_.':tries'}.','; - } + if ($i == $#Students) { + $next_student = 'none'; + } else { + $next_student = $Students[$i+1]; } - $codes =~ s/,$//; - $attempts =~ s/,$//; - $Str .= ''.$codes.' | '; - $Str .= ''.$attempts.' | '; - $Str .= '
Select Map | '."\n"; - $Ptr .= ''; - $Ptr .= &Apache::lonhtmlcommon::MapOptions(\%cache, 'ProblemStatistics'); - $Ptr .= ' |
Select Map | '."\n"; - $Ptr .= ''; - $Ptr .= &Apache::lonhtmlcommon::MapOptions(\%cache, 'StudentAssessment'); - $Ptr .= ' | |||||||||||||||
Select Student | '."\n"; - $Ptr .= ''."\n"; - $Ptr .= &Apache::lonhtmlcommon::StudentOptions(\%cache, $students, - $selectedName, - 'StudentAssessment'); - $Ptr .= ' | |||||||||||||||
';
- $Ptr .= 'print($Ptr);
-
- if($selectedName eq 'No Student Selected') {
- $r->print('WARNING: '); - $r->print('Please select a student'); - return; - } - - my $selected=0; - foreach (@$students) { - next if ($_ ne $selectedName && - $selectedName ne 'All Students'); - $selected = 1; - my $courseData = - &Apache::loncoursedata::DownloadStudentCourseInformation($_, - $courseID); - last if ($c->aborted()); - if(tie(%cache,'GDBM_File',$cacheDB,&GDBM_WRCREAT,0640)) { - &Apache::loncoursedata::ProcessStudentData(\%cache, - $courseData, $_); - if(!$c->aborted()) { $r->print(&StudentReport(\%cache, $_)); } - untie(%cache); - } - } - if($selected == 0) { - $r->print('WARNING: '); - $r->print('Please select a student'); - return; - } - - return; + return ('OK', $students); } sub BuildClasslist { - my ($cacheDB,$students,$studentInformation,$headings,$spacePadding)=@_; + my ($cacheDB,$students,$studentInformation,$headings,$r)=@_; my %cache; - unless(tie(%cache,'GDBM_File',$cacheDB,&GDBM_READER,0640)) { + unless(tie(%cache,'GDBM_File',$cacheDB,&GDBM_READER(),0640)) { return 'Unable to tie database.'; } +# my $Ptr = ''; +# $Ptr .= '
'; +# $r->print($Ptr); +# $r->rflush(); +# my %mySections = (); +# foreach (@sections) { $mySections{$_} = 'True'; } +# $r->print(" $cache{'sectionsSelected'} "); + my $Str=''; $Str .= '
'."\n"; + return $Str; } @@ -2046,12 +719,17 @@ sub BuildStatistics { my ($r)=@_; my $c = $r->connection; - my @studentInformation=('fullname','section','id','domain','username'); - my @headings=('Full Name', 'Section', 'PID', 'Domain', 'User Name'); - my $spacePadding = ' '; + my @studentInformation=('fullname','section','id','domain','username', + 'updateTime'); + my @headings=('Full Name', 'Section', 'PID', 'Domain', 'User Name', + 'Last Updated'); + my $spacing = ' '; + my %reports = ('classlist' => 'Class list', 'problem_statistics' => 'Problem Statistics', 'student_assessment' => 'Student Assessment', + 'percentage' => 'Correct-problems Plot', +# 'activitylog' => 'Activity Log', 'reportSelected' => 'Class list'); my %cache; @@ -2059,31 +737,40 @@ sub BuildStatistics { my $cacheDB = "/home/httpd/perl/tmp/$ENV{'user.name'}". "_$ENV{'user.domain'}_$courseID\_statistics.db"; - &setbgcolor(0); - my ($returnValue, $students) = &PrepareData($c, $cacheDB); + $r->print(&Apache::lonhtmlcommon::Title('Course Statistics and Charts')); + + my ($returnValue, $students) = &PrepareData($c, $cacheDB, + \@studentInformation, + \@headings,$r); if($returnValue ne 'OK') { - $r->print(''.$returnValue."\n".''); + $r->print($returnValue."\n".' |