version 1.26, 2002/08/30 17:11:43
|
version 1.31, 2002/09/14 18:57:59
|
Line 309 sub ProcessTopResourceMap {
|
Line 309 sub ProcessTopResourceMap {
|
return 'Can not open Coursemap.'; |
return 'Can not open Coursemap.'; |
} |
} |
|
|
|
my $oldkeys; |
|
if(defined($cache->{'ResourceKeys'})) { |
|
$oldkeys = $cache->{'ResourceKeys'}; |
|
foreach (split(':::', $cache->{'ResourceKeys'})) { |
|
delete $cache->{$_}; |
|
} |
|
delete $cache->{'ResourceKeys'}; |
|
} |
|
|
# Initialize state machine. Set information pointing to top level map. |
# Initialize state machine. Set information pointing to top level map. |
my (@sequences, @currentResource, @finishResource); |
my (@sequences, @currentResource, @finishResource); |
my ($currentSequence, $currentResourceID, $lastResourceID); |
my ($currentSequence, $currentResourceID, $lastResourceID); |
|
|
$currentResourceID=$hash{'ids_/res/'.$ENV{'request.course.uri'}}; |
$currentResourceID=$hash{'ids_'. |
|
&Apache::lonnet::clutter($ENV{'request.course.uri'})}; |
push(@currentResource, $currentResourceID); |
push(@currentResource, $currentResourceID); |
$lastResourceID=-1; |
$lastResourceID=-1; |
$currentSequence=-1; |
$currentSequence=-1; |
my $topLevelSequenceNumber = $currentSequence; |
my $topLevelSequenceNumber = $currentSequence; |
|
|
my %sequenceRecord; |
my %sequenceRecord; |
|
my %allkeys; |
while(1) { |
while(1) { |
if($c->aborted()) { |
if($c->aborted()) { |
last; |
last; |
Line 344 sub ProcessTopResourceMap {
|
Line 355 sub ProcessTopResourceMap {
|
} else { |
} else { |
$cache->{'orderedSequences'}.=':'.$currentSequence; |
$cache->{'orderedSequences'}.=':'.$currentSequence; |
} |
} |
|
$allkeys{'orderedSequences'}++; |
|
|
$lastResourceID=$hash{'map_finish_'. |
$lastResourceID=$hash{'map_finish_'. |
$hash{'src_'.$currentResourceID}}; |
$hash{'src_'.$currentResourceID}}; |
Line 378 sub ProcessTopResourceMap {
|
Line 390 sub ProcessTopResourceMap {
|
$currentResourceID})); |
$currentResourceID})); |
|
|
$cache->{$currentResourceID.':problem'}=$Problem; |
$cache->{$currentResourceID.':problem'}=$Problem; |
|
$allkeys{$currentResourceID.':problem'}++; |
if(!defined($cache->{$currentSequence.':problems'})) { |
if(!defined($cache->{$currentSequence.':problems'})) { |
$cache->{$currentSequence.':problems'}=$currentResourceID; |
$cache->{$currentSequence.':problems'}=$currentResourceID; |
} else { |
} else { |
$cache->{$currentSequence.':problems'}.= |
$cache->{$currentSequence.':problems'}.= |
':'.$currentResourceID; |
':'.$currentResourceID; |
} |
} |
|
$allkeys{$currentSequence.':problems'}++; |
|
|
my $meta=$hash{'src_'.$currentResourceID}; |
my $meta=$hash{'src_'.$currentResourceID}; |
# $cache->{$currentResourceID.':title'}= |
# $cache->{$currentResourceID.':title'}= |
# &Apache::lonnet::metdata($meta,'title'); |
# &Apache::lonnet::metdata($meta,'title'); |
$cache->{$currentResourceID.':title'}= |
$cache->{$currentResourceID.':title'}= |
$hash{'title_'.$currentResourceID}; |
$hash{'title_'.$currentResourceID}; |
|
$allkeys{$currentResourceID.':title'}++; |
$cache->{$currentResourceID.':source'}= |
$cache->{$currentResourceID.':source'}= |
$hash{'src_'.$currentResourceID}; |
$hash{'src_'.$currentResourceID}; |
|
$allkeys{$currentResourceID.':source'}++; |
|
|
# Get Parts for problem |
# Get Parts for problem |
my %beenHere; |
my %beenHere; |
Line 408 sub ProcessTopResourceMap {
|
Line 424 sub ProcessTopResourceMap {
|
$cache->{$currentSequence.':'.$currentResourceID. |
$cache->{$currentSequence.':'.$currentResourceID. |
':parts'}.=':'.$partId; |
':parts'}.=':'.$partId; |
} |
} |
|
$allkeys{$currentSequence.':'.$currentResourceID. |
|
':parts'}++; |
} |
} |
if($beenHere{'r:'.$partId.':'.$responseId} == 0) { |
if($beenHere{'r:'.$partId.':'.$responseId} == 0) { |
$beenHere{'r:'.$partId.':'.$responseId}++; |
$beenHere{'r:'.$partId.':'.$responseId}++; |
Line 421 sub ProcessTopResourceMap {
|
Line 439 sub ProcessTopResourceMap {
|
':'.$partId.':responseIDs'}.=':'. |
':'.$partId.':responseIDs'}.=':'. |
$responseId; |
$responseId; |
} |
} |
|
$allkeys{$currentSequence.':'.$currentResourceID.':'. |
|
$partId.':responseIDs'}++; |
} |
} |
if(/^optionresponse/ && |
if(/^optionresponse/ && |
$beenHere{'o:'.$partId.':'.$currentResourceID} == 0) { |
$beenHere{'o:'.$partId.':'.$currentResourceID} == 0) { |
Line 434 sub ProcessTopResourceMap {
|
Line 454 sub ProcessTopResourceMap {
|
$currentResourceID.':'. |
$currentResourceID.':'. |
$partId.':'.$responseId; |
$partId.':'.$responseId; |
} |
} |
|
$allkeys{'OptionResponses'}++; |
} |
} |
} |
} |
} |
} |
Line 449 sub ProcessTopResourceMap {
|
Line 470 sub ProcessTopResourceMap {
|
# Capture sequence information here |
# Capture sequence information here |
$cache->{$currentSequence.':title'}= |
$cache->{$currentSequence.':title'}= |
$hash{'title_'.$currentResourceID}; |
$hash{'title_'.$currentResourceID}; |
|
$allkeys{$currentSequence.':title'}++; |
$cache->{$currentSequence.':source'}= |
$cache->{$currentSequence.':source'}= |
$hash{'src_'.$currentResourceID}; |
$hash{'src_'.$currentResourceID}; |
|
$allkeys{$currentSequence.':source'}++; |
|
|
my $totalProblems=0; |
my $totalProblems=0; |
foreach my $currentProblem (split(/\:/, |
foreach my $currentProblem (split(/\:/, |
Line 474 sub ProcessTopResourceMap {
|
Line 497 sub ProcessTopResourceMap {
|
$cache->{$currentSequence.':columnWidth'}= |
$cache->{$currentSequence.':columnWidth'}= |
(scalar @titleLength); |
(scalar @titleLength); |
} |
} |
|
$allkeys{$currentSequence.':columnWidth'}++; |
} else { |
} else { |
# Remove sequence from list, if it contains no problems to |
# Remove sequence from list, if it contains no problems to |
# display. |
# display. |
Line 510 sub ProcessTopResourceMap {
|
Line 534 sub ProcessTopResourceMap {
|
$currentResourceID=pop(@currentResource); |
$currentResourceID=pop(@currentResource); |
} |
} |
|
|
|
my @theKeys = keys(%allkeys); |
|
my $newkeys = join(':::', @theKeys); |
|
$cache->{'ResourceKeys'} = join(':::', $newkeys); |
|
if($newkeys ne $oldkeys) { |
|
$cache->{'ResourceUpdated'} = 'true'; |
|
} else { |
|
$cache->{'ResourceUpdated'} = 'false'; |
|
} |
|
|
unless (untie(%hash)) { |
unless (untie(%hash)) { |
&Apache::lonnet::logthis("<font color=blue>WARNING: ". |
&Apache::lonnet::logthis("<font color=blue>WARNING: ". |
"Could not untie coursemap $fn (browse)". |
"Could not untie coursemap $fn (browse)". |
Line 693 sub ProcessStudentData {
|
Line 726 sub ProcessStudentData {
|
return; |
return; |
} |
} |
|
|
|
# This little delete thing, should not be here. Move some other |
|
# time though. |
if(defined($cache->{$name.':keys'})) { |
if(defined($cache->{$name.':keys'})) { |
foreach (split(':::', $cache->{$name.':keys'})) { |
foreach (split(':::', $cache->{$name.':keys'})) { |
delete $cache->{$name.':'.$_}; |
delete $cache->{$name.':'.$_}; |
} |
} |
|
delete $cache->{$name.':keys'}; |
} |
} |
|
|
my %courseKeys; |
my %courseKeys; |
# user name:domain was prepended earlier in DownloadCourseInformation |
# user name:domain was prepended earlier in DownloadCourseInformation |
foreach (keys %$courseData) { |
foreach (keys %$courseData) { |
my $currentKey =~ s/^$name//; |
my $currentKey = $_; |
|
$currentKey =~ s/^$name//; |
$courseKeys{$currentKey}++; |
$courseKeys{$currentKey}++; |
$cache->{$_}=$courseData->{$_}; |
$cache->{$_}=$courseData->{$_}; |
} |
} |
Line 764 sub ExtractStudentData {
|
Line 801 sub ExtractStudentData {
|
return; |
return; |
} |
} |
|
|
|
# This little delete thing, should not be here. Move some other |
|
# time though. |
my %allkeys; |
my %allkeys; |
if(defined($output->{$name.':keys'})) { |
if(defined($output->{$name.':keys'})) { |
foreach (split(':::', $output->{$name.':keys'})) { |
foreach (split(':::', $output->{$name.':keys'})) { |
delete $output->{$name.':'.$_}; |
delete $output->{$name.':'.$_}; |
} |
} |
|
delete $output->{$name.':keys'}; |
} |
} |
|
|
my ($username,$domain)=split(':',$name); |
my ($username,$domain)=split(':',$name); |
Line 786 sub ExtractStudentData {
|
Line 826 sub ExtractStudentData {
|
|
|
# Output dashes for all the parts of this problem if there |
# Output dashes for all the parts of this problem if there |
# is no version information about the current problem. |
# is no version information about the current problem. |
|
$output->{$name.':'.$problemID.':NoVersion'} = 'false'; |
|
$allkeys{$name.':'.$problemID.':NoVersion'}++; |
if(!$LatestVersion) { |
if(!$LatestVersion) { |
foreach my $part (split(/\:/,$data->{$sequence.':'. |
foreach my $part (split(/\:/,$data->{$sequence.':'. |
$problemID. |
$problemID. |
Line 799 sub ExtractStudentData {
|
Line 841 sub ExtractStudentData {
|
$totalProblems++; |
$totalProblems++; |
} |
} |
$output->{$name.':'.$problemID.':NoVersion'} = 'true'; |
$output->{$name.':'.$problemID.':NoVersion'} = 'true'; |
$allkeys{$name.':'.$problemID.':NoVersion'}++; |
|
next; |
next; |
} |
} |
|
|
Line 1159 sub DownloadStudentCourseData {
|
Line 1200 sub DownloadStudentCourseData {
|
} |
} |
|
|
my $downloadTime='Not downloaded'; |
my $downloadTime='Not downloaded'; |
|
my $needUpdate = 'false'; |
if($checkDate eq 'true' && |
if($checkDate eq 'true' && |
tie(%cache,'GDBM_File',$cacheDB,&GDBM_READER(),0640)) { |
tie(%cache,'GDBM_File',$cacheDB,&GDBM_READER(),0640)) { |
$downloadTime = $cache{$_.':lastDownloadTime'}; |
$downloadTime = $cache{$_.':lastDownloadTime'}; |
|
$needUpdate = $cache{'ResourceUpdated'}; |
untie(%cache); |
untie(%cache); |
} |
} |
|
|
if($c->aborted()) { return 'Aborted'; } |
if($c->aborted()) { return 'Aborted'; } |
|
|
#if($downloadTime ne 'Not downloaded') { |
if($needUpdate eq 'true') { |
# next; |
$downloadTime = 'Not downloaded'; |
#} |
} |
my $courseData = |
my $courseData = |
&DownloadCourseInformation($_, $courseID, $downloadTime, |
&DownloadCourseInformation($_, $courseID, $downloadTime, |
$WhatIWant); |
$WhatIWant); |
Line 1208 sub DownloadStudentCourseDataSeparate {
|
Line 1251 sub DownloadStudentCourseDataSeparate {
|
$WhatIWant .= '|timestamp)'; |
$WhatIWant .= '|timestamp)'; |
$WhatIWant .= ')'; |
$WhatIWant .= ')'; |
|
|
&CheckForResidualDownload($courseID, $cacheDB, $students, $c); |
&CheckForResidualDownload($cacheDB, 'true', 'true', $courseID, $r, $c); |
|
|
my $studentCount = scalar(@$students); |
my $studentCount = scalar(@$students); |
if($status eq 'true') { |
if($status eq 'true') { |
Line 1229 sub DownloadStudentCourseDataSeparate {
|
Line 1272 sub DownloadStudentCourseDataSeparate {
|
|
|
my %cache; |
my %cache; |
my $downloadTime='Not downloaded'; |
my $downloadTime='Not downloaded'; |
|
my $needUpdate = 'false'; |
if($checkDate eq 'true' && |
if($checkDate eq 'true' && |
tie(%cache,'GDBM_File',$cacheDB,&GDBM_READER(),0640)) { |
tie(%cache,'GDBM_File',$cacheDB,&GDBM_READER(),0640)) { |
$downloadTime = $cache{$_.':lastDownloadTime'}; |
$downloadTime = $cache{$_.':lastDownloadTime'}; |
|
$needUpdate = $cache{'ResourceUpdated'}; |
untie(%cache); |
untie(%cache); |
} |
} |
|
|
Line 1239 sub DownloadStudentCourseDataSeparate {
|
Line 1284 sub DownloadStudentCourseDataSeparate {
|
return 'Aborted'; |
return 'Aborted'; |
} |
} |
|
|
#if($downloadTime eq 'Not downloaded') { |
if($needUpdate eq 'true') { |
my $error = 0; |
$downloadTime = 'Not downloaded'; |
my $courseData = |
} |
&DownloadCourseInformation($_, $courseID, $downloadTime, |
|
$WhatIWant); |
my $error = 0; |
my %downloadData; |
my $courseData = |
unless(tie(%downloadData,'GDBM_File',$residualFile, |
&DownloadCourseInformation($_, $courseID, $downloadTime, |
&GDBM_WRCREAT(),0640)) { |
$WhatIWant); |
return 'Failed to tie temporary download hash.'; |
my %downloadData; |
} |
unless(tie(%downloadData,'GDBM_File',$residualFile, |
foreach my $key (keys(%$courseData)) { |
&GDBM_WRCREAT(),0640)) { |
$downloadData{$key} = $courseData->{$key}; |
return 'Failed to tie temporary download hash.'; |
if($key =~ /^(con_lost|error|no_such_host)/i) { |
} |
$error = 1; |
foreach my $key (keys(%$courseData)) { |
last; |
$downloadData{$key} = $courseData->{$key}; |
} |
if($key =~ /^(con_lost|error|no_such_host)/i) { |
|
$error = 1; |
|
last; |
} |
} |
if($error) { |
} |
foreach my $deleteKey (keys(%$courseData)) { |
if($error) { |
delete $downloadData{$deleteKey}; |
foreach my $deleteKey (keys(%$courseData)) { |
} |
delete $downloadData{$deleteKey}; |
$downloadData{$_.':error'} = 'No course data for '.$_; |
|
} |
} |
untie(%downloadData); |
$downloadData{$_.':error'} = 'No course data for '.$_; |
#} |
} |
|
untie(%downloadData); |
} |
} |
if($status eq 'true') { &Apache::lonhtmlcommon::Close_PrgWin($r); } |
if($status eq 'true') { &Apache::lonhtmlcommon::Close_PrgWin($r); } |
|
|