version 1.13, 2002/08/13 00:37:18
|
version 1.19, 2002/08/15 16:11:34
|
Line 201 sub DownloadCourseInformation {
|
Line 201 sub DownloadCourseInformation {
|
if(!defined($WhatIWant)) { |
if(!defined($WhatIWant)) { |
$WhatIWant = '.'; |
$WhatIWant = '.'; |
} |
} |
|
$WhatIWant = '.'; |
%courseData=&Apache::lonnet::dump($courseID, $domain, $name, $WhatIWant); |
%courseData=&Apache::lonnet::dump($courseID, $domain, $name, $WhatIWant); |
$courseData{'UpToDate'} = 'false'; |
$courseData{'UpToDate'} = 'false'; |
$courseData{'lastDownloadTime'}=time; |
$courseData{'lastDownloadTime'}=time; |
Line 396 sub ProcessTopResourceMap {
|
Line 397 sub ProcessTopResourceMap {
|
$beenHere{'o:'.$partId.$currentResourceID}++; |
$beenHere{'o:'.$partId.$currentResourceID}++; |
if(defined($cache->{'OptionResponses'})) { |
if(defined($cache->{'OptionResponses'})) { |
$cache->{'OptionResponses'}.= ':::'. |
$cache->{'OptionResponses'}.= ':::'. |
$currentResourceID.':'. |
$currentSequence.':'.$currentResourceID.':'. |
$partId.':'.$responseId; |
$partId.':'.$responseId; |
} else { |
} else { |
$cache->{'OptionResponses'}= $currentResourceID. |
$cache->{'OptionResponses'}= $currentSequence.':'. |
':'.$partId.':'.$responseId; |
$currentResourceID.':'. |
|
$partId.':'.$responseId; |
} |
} |
} |
} |
} |
} |
Line 680 sub ExtractStudentData {
|
Line 682 sub ExtractStudentData {
|
my $totalProblems = 0; |
my $totalProblems = 0; |
my $problemsSolved = 0; |
my $problemsSolved = 0; |
my $numberOfParts = 0; |
my $numberOfParts = 0; |
|
my $totalAwarded = 0; |
foreach my $sequence (split(':', $data->{'orderedSequences'})) { |
foreach my $sequence (split(':', $data->{'orderedSequences'})) { |
foreach my $problemID (split(':', $data->{$sequence.':problems'})) { |
foreach my $problemID (split(':', $data->{$sequence.':problems'})) { |
my $problem = $data->{$problemID.':problem'}; |
my $problem = $data->{$problemID.':problem'}; |
Line 691 sub ExtractStudentData {
|
Line 694 sub ExtractStudentData {
|
foreach my $part (split(/\:/,$data->{$sequence.':'. |
foreach my $part (split(/\:/,$data->{$sequence.':'. |
$problemID. |
$problemID. |
':parts'})) { |
':parts'})) { |
|
$output->{$name.':'.$problemID.':'.$part.':tries'} = 0; |
|
$output->{$name.':'.$problemID.':'.$part.':awarded'} = 0; |
|
$output->{$name.':'.$problemID.':'.$part.':code'} = ' '; |
$totalProblems++; |
$totalProblems++; |
} |
} |
$output->{$name.':'.$problemID.':NoVersion'} = 'true'; |
$output->{$name.':'.$problemID.':NoVersion'} = 'true'; |
Line 791 sub ExtractStudentData {
|
Line 797 sub ExtractStudentData {
|
$partData{$part.':code'}; |
$partData{$part.':code'}; |
$output->{$name.':'.$problemID.':'.$part.':awarded'} = |
$output->{$name.':'.$problemID.':'.$part.':awarded'} = |
$partData{$part.':awarded'}; |
$partData{$part.':awarded'}; |
|
$totalAwarded += $partData{$part.':awarded'}; |
$output->{$name.':'.$problemID.':'.$part.':timestamp'} = |
$output->{$name.':'.$problemID.':'.$part.':timestamp'} = |
$partData{$part.':timestamp'}; |
$partData{$part.':timestamp'}; |
foreach my $response (split(':', $data->{$sequence.':'. |
foreach my $response (split(':', $data->{$sequence.':'. |
Line 813 sub ExtractStudentData {
|
Line 820 sub ExtractStudentData {
|
|
|
$output->{$name.':problemsSolved'} = $problemsSolved; |
$output->{$name.':problemsSolved'} = $problemsSolved; |
$output->{$name.':totalProblems'} = $totalProblems; |
$output->{$name.':totalProblems'} = $totalProblems; |
|
$output->{$name.':totalAwarded'} = $totalAwarded; |
|
|
return; |
return; |
} |
} |
Line 1006 sub DownloadStudentCourseData {
|
Line 1014 sub DownloadStudentCourseData {
|
my $studentCount = scalar(@$students); |
my $studentCount = scalar(@$students); |
my %cache; |
my %cache; |
|
|
|
|
my $WhatIWant; |
my $WhatIWant; |
$WhatIWant = '(^version:(\w|\/|\.|-)+?$|'; |
$WhatIWant = '(^version:.+?$|'; |
$WhatIWant .= '^\d+:(\w|\/|\.|-)+?:(resource\.\d+\.'; |
$WhatIWant .= '^\d+:.+?:(resource\.\d+\.'; |
$WhatIWant .= '(solved|tries|previous|awarded|(\d+\.submission))\s*$'; |
$WhatIWant .= '(solved|tries|previous|awarded|(\d+\.submission))\s*$'; |
$WhatIWant .= '|timestamp)'; |
$WhatIWant .= '|timestamp)'; |
$WhatIWant .= ')'; |
$WhatIWant .= ')'; |
Line 1016 sub DownloadStudentCourseData {
|
Line 1025 sub DownloadStudentCourseData {
|
if($status eq 'true') { |
if($status eq 'true') { |
&Apache::lonhtmlcommon::Create_PrgWin($r, $title, $heading); |
&Apache::lonhtmlcommon::Create_PrgWin($r, $title, $heading); |
} |
} |
my $count=1; |
|
|
my $displayString; |
|
my $count=0; |
foreach (@$students) { |
foreach (@$students) { |
if($c->aborted()) { return 'Aborted'; } |
if($c->aborted()) { return 'Aborted'; } |
|
|
if($status eq 'true') { |
if($status eq 'true') { |
|
$count++; |
my $displayString = $count.'/'.$studentCount.': '.$_; |
my $displayString = $count.'/'.$studentCount.': '.$_; |
&Apache::lonhtmlcommon::Update_PrgWin($displayString, $r); |
&Apache::lonhtmlcommon::Update_PrgWin($displayString, $r); |
} |
} |
Line 1055 sub DownloadStudentCourseData {
|
Line 1067 sub DownloadStudentCourseData {
|
next; |
next; |
} |
} |
} |
} |
$count++; |
|
} |
} |
if($status eq 'true') { &Apache::lonhtmlcommon::Close_PrgWin($r); } |
if($status eq 'true') { &Apache::lonhtmlcommon::Close_PrgWin($r); } |
|
|
Line 1068 sub DownloadStudentCourseDataSeparate {
|
Line 1079 sub DownloadStudentCourseDataSeparate {
|
my $title = 'LON-CAPA Statistics'; |
my $title = 'LON-CAPA Statistics'; |
my $heading = 'Download Course Data'; |
my $heading = 'Download Course Data'; |
|
|
|
# my $WhatIWant = '.'; |
my $WhatIWant; |
my $WhatIWant; |
$WhatIWant = '(^version:(\w|\/|\.|-)+?$|'; |
$WhatIWant = '(^version:.+?$|'; |
$WhatIWant .= '^\d+:(\w|\/|\.|-)+?:(resource\.\d+\.'; |
$WhatIWant .= '^\d+:.+?:(resource\.\d+\.'; |
$WhatIWant .= '(solved|tries|previous|awarded|(\d+\.submission))\s*$'; |
$WhatIWant .= '(solved|tries|previous|awarded|(\d+\.submission))\s*$'; |
$WhatIWant .= '|timestamp)'; |
$WhatIWant .= '|timestamp)'; |
$WhatIWant .= ')'; |
$WhatIWant .= ')'; |
Line 1078 sub DownloadStudentCourseDataSeparate {
|
Line 1090 sub DownloadStudentCourseDataSeparate {
|
&CheckForResidualDownload($courseID, $cacheDB, $students, $c); |
&CheckForResidualDownload($courseID, $cacheDB, $students, $c); |
|
|
my %cache; |
my %cache; |
my %downloadData; |
|
unless(tie(%downloadData,'GDBM_File',$residualFile,&GDBM_NEWDB(),0640)) { |
|
return 'Failed to tie temporary download hash.'; |
|
} |
|
|
|
my $studentCount = scalar(@$students); |
my $studentCount = scalar(@$students); |
if($status eq 'true') { |
if($status eq 'true') { |
&Apache::lonhtmlcommon::Create_PrgWin($r, $title, $heading); |
&Apache::lonhtmlcommon::Create_PrgWin($r, $title, $heading); |
} |
} |
my $count=1; |
my $count=0; |
|
my $displayString=''; |
foreach (@$students) { |
foreach (@$students) { |
if($c->aborted()) { |
if($c->aborted()) { |
untie(%downloadData); |
|
return 'Aborted'; |
return 'Aborted'; |
} |
} |
|
|
if($status eq 'true') { |
if($status eq 'true') { |
my $displayString = $count.'/'.$studentCount.': '.$_; |
$count++; |
|
$displayString = $count.'/'.$studentCount.': '.$_; |
&Apache::lonhtmlcommon::Update_PrgWin($displayString, $r); |
&Apache::lonhtmlcommon::Update_PrgWin($displayString, $r); |
} |
} |
|
|
Line 1107 sub DownloadStudentCourseDataSeparate {
|
Line 1116 sub DownloadStudentCourseDataSeparate {
|
} |
} |
|
|
if($c->aborted()) { |
if($c->aborted()) { |
untie(%downloadData); |
|
return 'Aborted'; |
return 'Aborted'; |
} |
} |
|
|
Line 1116 sub DownloadStudentCourseDataSeparate {
|
Line 1124 sub DownloadStudentCourseDataSeparate {
|
my $courseData = |
my $courseData = |
&DownloadCourseInformation($_, $courseID, $downloadTime, |
&DownloadCourseInformation($_, $courseID, $downloadTime, |
$WhatIWant); |
$WhatIWant); |
|
my %downloadData; |
|
unless(tie(%downloadData,'GDBM_File',$residualFile, |
|
&GDBM_WRCREAT(),0640)) { |
|
return 'Failed to tie temporary download hash.'; |
|
} |
foreach my $key (keys(%$courseData)) { |
foreach my $key (keys(%$courseData)) { |
$downloadData{$key} = $courseData->{$key}; |
$downloadData{$key} = $courseData->{$key}; |
if($key =~ /^(con_lost|error|no_such_host)/i) { |
if($key =~ /^(con_lost|error|no_such_host)/i) { |
Line 1129 sub DownloadStudentCourseDataSeparate {
|
Line 1142 sub DownloadStudentCourseDataSeparate {
|
} |
} |
$downloadData{$_.':error'} = 'No course data for '.$_; |
$downloadData{$_.':error'} = 'No course data for '.$_; |
} |
} |
|
untie(%downloadData); |
} |
} |
$count++; |
|
} |
} |
if($status eq 'true') { &Apache::lonhtmlcommon::Close_PrgWin($r); } |
if($status eq 'true') { &Apache::lonhtmlcommon::Close_PrgWin($r); } |
|
|
Line 1143 sub CheckForResidualDownload {
|
Line 1156 sub CheckForResidualDownload {
|
|
|
my $residualFile = '/home/httpd/perl/tmp/'.$courseID.'DownloadFile.db'; |
my $residualFile = '/home/httpd/perl/tmp/'.$courseID.'DownloadFile.db'; |
if(!-e $residualFile) { |
if(!-e $residualFile) { |
return; |
return 'OK'; |
} |
} |
|
|
my %downloadData; |
my %downloadData; |
my %cache; |
my %cache; |
unless(tie(%downloadData,'GDBM_File',$residualFile,&GDBM_READER(),0640) && |
unless(tie(%downloadData,'GDBM_File',$residualFile,&GDBM_READER(),0640)) { |
tie(%cache,'GDBM_File',$cacheDB,&GDBM_WRCREAT(),0640)) { |
return 'Can not tie database for check for residual download: tempDB'; |
return; |
} |
|
unless(tie(%cache,'GDBM_File',$cacheDB,&GDBM_WRCREAT(),0640)) { |
|
untie(%downloadData); |
|
return 'Can not tie database for check for residual download: cacheDB'; |
} |
} |
|
|
my @dataKeys=keys(%downloadData); |
|
my @students=(); |
my @students=(); |
my %checkStudent; |
my %checkStudent; |
foreach(@dataKeys) { |
my $key; |
my @temp = split(':', $_); |
while(($key, undef) = each %downloadData) { |
|
my @temp = split(':', $key); |
my $student = $temp[0].':'.$temp[1]; |
my $student = $temp[0].':'.$temp[1]; |
if(!defined($checkStudent{$student})) { |
if(!defined($checkStudent{$student})) { |
$checkStudent{$student}++; |
$checkStudent{$student}++; |
Line 1172 sub CheckForResidualDownload {
|
Line 1188 sub CheckForResidualDownload {
|
&Apache::lonhtmlcommon::Create_PrgWin($r, $title, $heading); |
&Apache::lonhtmlcommon::Create_PrgWin($r, $title, $heading); |
} |
} |
|
|
my $count=1; |
my c$ount=1; |
foreach my $name (@students) { |
foreach my $name (@students) { |
last if($c->aborted()); |
last if($c->aborted()); |
|
|
if($status eq 'true') { |
if($status eq 'true') { |
my $displayString = $count.'/'.$studentCount.': '.$_; |
my $displayString = $count.'/'.$studentCount.': '.$name; |
&Apache::lonhtmlcommon::Update_PrgWin($displayString, $r); |
&Apache::lonhtmlcommon::Update_PrgWin($displayString, $r); |
} |
} |
|
|
Line 1186 sub CheckForResidualDownload {
|
Line 1202 sub CheckForResidualDownload {
|
} else { |
} else { |
&ProcessStudentData(\%cache, \%downloadData, $name); |
&ProcessStudentData(\%cache, \%downloadData, $name); |
} |
} |
foreach (@dataKeys) { |
|
if(/^$name/) { |
|
delete $downloadData{$_}; |
|
} |
|
} |
|
$count++; |
$count++; |
} |
} |
|
|