--- loncom/interface/loncoursedata.pm 2002/08/28 22:02:47 1.23 +++ loncom/interface/loncoursedata.pm 2002/08/30 17:11:43 1.26 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # (Publication Handler # -# $Id: loncoursedata.pm,v 1.23 2002/08/28 22:02:47 stredwic Exp $ +# $Id: loncoursedata.pm,v 1.26 2002/08/30 17:11:43 stredwic Exp $ # # Copyright Michigan State University Board of Trustees # @@ -693,11 +693,22 @@ sub ProcessStudentData { return; } + if(defined($cache->{$name.':keys'})) { + foreach (split(':::', $cache->{$name.':keys'})) { + delete $cache->{$name.':'.$_}; + } + } + + my %courseKeys; # user name:domain was prepended earlier in DownloadCourseInformation foreach (keys %$courseData) { + my $currentKey =~ s/^$name//; + $courseKeys{$currentKey}++; $cache->{$_}=$courseData->{$_}; } + $cache->{$name.':keys'} = join(':::', keys(%courseKeys)); + return; } @@ -753,6 +764,13 @@ sub ExtractStudentData { return; } + my %allkeys; + if(defined($output->{$name.':keys'})) { + foreach (split(':::', $output->{$name.':keys'})) { + delete $output->{$name.':'.$_}; + } + } + my ($username,$domain)=split(':',$name); my $Version; @@ -775,9 +793,13 @@ sub ExtractStudentData { $output->{$name.':'.$problemID.':'.$part.':tries'} = 0; $output->{$name.':'.$problemID.':'.$part.':awarded'} = 0; $output->{$name.':'.$problemID.':'.$part.':code'} = ' '; + $allkeys{$name.':'.$problemID.':'.$part.':tries'}++; + $allkeys{$name.':'.$problemID.':'.$part.':awarded'}++; + $allkeys{$name.':'.$problemID.':'.$part.':code'}++; $totalProblems++; } $output->{$name.':'.$problemID.':NoVersion'} = 'true'; + $allkeys{$name.':'.$problemID.':NoVersion'}++; next; } @@ -860,6 +882,7 @@ sub ExtractStudentData { ':parts'})) { $output->{$name.':'.$problemID.':'.$part.':wrong'} = $partData{$part.':tries'}; + $allkeys{$name.':'.$problemID.':'.$part.':wrong'}++; if($partData{$part.':code'} eq '*') { $output->{$name.':'.$problemID.':'.$part.':wrong'}--; @@ -875,14 +898,22 @@ sub ExtractStudentData { $partData{$part.':code'}; $output->{$name.':'.$problemID.':'.$part.':awarded'} = $partData{$part.':awarded'}; + $allkeys{$name.':'.$problemID.':'.$part.':tries'}++; + $allkeys{$name.':'.$problemID.':'.$part.':code'}++; + $allkeys{$name.':'.$problemID.':'.$part.':awarded'}++; + $totalAwarded += $partData{$part.':awarded'}; $output->{$name.':'.$problemID.':'.$part.':timestamp'} = $partData{$part.':timestamp'}; + $allkeys{$name.':'.$problemID.':'.$part.':timestamp'}++; + foreach my $response (split(':', $data->{$sequence.':'. $problemID.':'. $part.':responseIDs'})) { $output->{$name.':'.$problemID.':'.$part.':'.$response. ':submission'}=join(':::',@submissions); + $allkeys{$name.':'.$problemID.':'.$part.':'.$response. + ':submission'}++; } if($partData{$part.':code'} ne 'x') { @@ -892,6 +923,7 @@ sub ExtractStudentData { } $output->{$name.':'.$sequence.':problemsCorrect'} = $problemsCorrect; + $allkeys{$name.':'.$sequence.':problemsCorrect'}++; $problemsSolved += $problemsCorrect; $problemsCorrect=0; } @@ -899,6 +931,11 @@ sub ExtractStudentData { $output->{$name.':problemsSolved'} = $problemsSolved; $output->{$name.':totalProblems'} = $totalProblems; $output->{$name.':totalAwarded'} = $totalAwarded; + $allkeys{$name.':problemsSolved'}++; + $allkeys{$name.':totalProblems'}++; + $allkeys{$name.':totalAwarded'}++; + + $output->{$name.':keys'} = join(':::', keys(%allkeys)); return; } @@ -1095,8 +1132,6 @@ sub DownloadStudentCourseData { my $title = 'LON-CAPA Statistics'; my $heading = 'Download and Process Course Data'; my $studentCount = scalar(@$students); - my %cache; - my $WhatIWant; $WhatIWant = '(^version:|'; @@ -1113,6 +1148,8 @@ sub DownloadStudentCourseData { my $displayString; my $count=0; foreach (@$students) { + my %cache; + if($c->aborted()) { return 'Aborted'; } if($status eq 'true') { @@ -1130,27 +1167,28 @@ sub DownloadStudentCourseData { if($c->aborted()) { return 'Aborted'; } - if($downloadTime eq 'Not downloaded') { - my $courseData = - &DownloadCourseInformation($_, $courseID, $downloadTime, - $WhatIWant); - if(tie(%cache,'GDBM_File',$cacheDB,&GDBM_WRCREAT(),0640)) { - foreach my $key (keys(%$courseData)) { - if($key =~ /^(con_lost|error|no_such_host)/i) { - $courseData->{$_.':error'} = 'No course data for '.$_; - last; - } - } - if($extract eq 'true') { - &ExtractStudentData($courseData, \%cache, \%cache, $_); - } else { - &ProcessStudentData(\%cache, $courseData, $_); - } - untie(%cache); - } else { - next; - } - } + #if($downloadTime ne 'Not downloaded') { + # next; + #} + my $courseData = + &DownloadCourseInformation($_, $courseID, $downloadTime, + $WhatIWant); + if(tie(%cache,'GDBM_File',$cacheDB,&GDBM_WRCREAT(),0640)) { + foreach my $key (keys(%$courseData)) { + if($key =~ /^(con_lost|error|no_such_host)/i) { + $courseData->{$_.':error'} = 'No course data for '.$_; + last; + } + } + if($extract eq 'true') { + &ExtractStudentData($courseData, \%cache, \%cache, $_); + } else { + &ProcessStudentData(\%cache, $courseData, $_); + } + untie(%cache); + } else { + next; + } } if($status eq 'true') { &Apache::lonhtmlcommon::Close_PrgWin($r); } @@ -1172,8 +1210,6 @@ sub DownloadStudentCourseDataSeparate { &CheckForResidualDownload($courseID, $cacheDB, $students, $c); - my %cache; - my $studentCount = scalar(@$students); if($status eq 'true') { &Apache::lonhtmlcommon::Create_PrgWin($r, $title, $heading); @@ -1191,6 +1227,7 @@ sub DownloadStudentCourseDataSeparate { &Apache::lonhtmlcommon::Update_PrgWin($displayString, $r); } + my %cache; my $downloadTime='Not downloaded'; if($checkDate eq 'true' && tie(%cache,'GDBM_File',$cacheDB,&GDBM_READER(),0640)) { @@ -1202,7 +1239,7 @@ sub DownloadStudentCourseDataSeparate { return 'Aborted'; } - if($downloadTime eq 'Not downloaded') { + #if($downloadTime eq 'Not downloaded') { my $error = 0; my $courseData = &DownloadCourseInformation($_, $courseID, $downloadTime, @@ -1226,7 +1263,7 @@ sub DownloadStudentCourseDataSeparate { $downloadData{$_.':error'} = 'No course data for '.$_; } untie(%downloadData); - } + #} } if($status eq 'true') { &Apache::lonhtmlcommon::Close_PrgWin($r); }