version 1.9, 2010/12/16 17:03:48
|
version 1.18, 2014/06/07 03:07:06
|
Line 80 print $fh "==== refresh_courseids_db.pl
|
Line 80 print $fh "==== refresh_courseids_db.pl
|
my @domains = sort(&Apache::lonnet::current_machine_domains()); |
my @domains = sort(&Apache::lonnet::current_machine_domains()); |
my @ids=&Apache::lonnet::current_machine_ids(); |
my @ids=&Apache::lonnet::current_machine_ids(); |
|
|
&build_release_hashes(); |
&Apache::loncommon::build_release_hashes(\%checkparms,\%checkresponsetypes, |
|
\%checkcrstypes,\%anonsurvey,\%randomizetry); |
$env{'allowed.bre'} = 'F'; |
$env{'allowed.bre'} = 'F'; |
|
|
foreach my $dom (@domains) { |
foreach my $dom (@domains) { |
|
$env{'user.domain'} = $dom; |
|
$env{'user.name'} = &Apache::lonnet::get_domainconfiguser($dom); |
my %courseshash; |
my %courseshash; |
my %currhash = &Apache::lonnet::courseiddump($dom,'.',1,'.','.','.',1,\@ids,'.'); |
my %currhash = &Apache::lonnet::courseiddump($dom,'.',1,'.','.','.',1,\@ids,'.'); |
my %lastaccess = &Apache::lonnet::courselastaccess($dom,undef,\@ids); |
my %lastaccess = &Apache::lonnet::courselastaccess($dom,undef,\@ids); |
Line 100 foreach my $dom (@domains) {
|
Line 103 foreach my $dom (@domains) {
|
} |
} |
} |
} |
} |
} |
|
delete($env{'user.name'}); |
|
delete($env{'user.domain'}); |
} |
} |
|
|
delete($env{'allowed.bre'}); |
delete($env{'allowed.bre'}); |
Line 179 sub recurse_courses {
|
Line 184 sub recurse_courses {
|
my $creationcontext = $courseinfo{'internal.creationcontext'}; |
my $creationcontext = $courseinfo{'internal.creationcontext'}; |
my $inst_code = $courseinfo{'internal.coursecode'}; |
my $inst_code = $courseinfo{'internal.coursecode'}; |
my $releaserequired = $courseinfo{'internal.releaserequired'}; |
my $releaserequired = $courseinfo{'internal.releaserequired'}; |
|
my $uniquecode = $courseinfo{'internal.uniquecode'}; |
$inst_code = '' if (!defined($inst_code)); |
$inst_code = '' if (!defined($inst_code)); |
$owner = '' if (!defined($owner)); |
$owner = '' if (!defined($owner)); |
|
$uniquecode = '' if (!defined($uniquecode)); |
if ($created eq '') { |
if ($created eq '') { |
if (ref($currhash->{$cid}) eq 'HASH') { |
if (ref($currhash->{$cid}) eq 'HASH') { |
$created = $currhash->{$cid}{'created'}; |
$created = $currhash->{$cid}{'created'}; |
Line 226 sub recurse_courses {
|
Line 233 sub recurse_courses {
|
($reqdmajor,$reqdminor) = &coursetype_constraints($cnum,$cdom,$crstype, |
($reqdmajor,$reqdminor) = &coursetype_constraints($cnum,$cdom,$crstype, |
$reqdmajor, |
$reqdmajor, |
$reqdminor); |
$reqdminor); |
|
# check communication blocks |
|
($reqdmajor,$reqdminor) = &commblock_constraints($cnum,$cdom, |
|
$reqdmajor, |
|
$reqdminor); |
# check course contents |
# check course contents |
($reqdmajor,$reqdminor) = &coursecontent_constraints($cnum,$cdom, |
($reqdmajor,$reqdminor) = &coursecontent_constraints($cnum,$cdom, |
$reqdmajor, |
$reqdmajor, |
Line 237 sub recurse_courses {
|
Line 248 sub recurse_courses {
|
} |
} |
|
|
unless ($chome eq 'no_host') { |
unless ($chome eq 'no_host') { |
|
if (($lastaccess->{$cid} eq '') || |
|
($lastaccess->{$cid} > $twodaysago)) { |
|
my $contentchange; |
|
if ($courseinfo{'internal.created'} eq '') { |
|
$contentchange = &last_map_update($cnum,$cdom); |
|
} else { |
|
unless ($courseinfo{'internal.created'} > $lastaccess->{$cid}) { |
|
$contentchange = &last_map_update($cnum,$cdom); |
|
} |
|
} |
|
if (($contentchange) && ($contentchange > $courseinfo{'internal.contentchange'})) { |
|
$changes{'internal.contentchange'} = $contentchange; |
|
} |
|
} |
$courseshash->{$chome}{$cid} = { |
$courseshash->{$chome}{$cid} = { |
description => $courseinfo{'description'}, |
description => $courseinfo{'description'}, |
inst_code => $inst_code, |
inst_code => $inst_code, |
Line 303 sub recurse_courses {
|
Line 328 sub recurse_courses {
|
$courseshash->{$chome}{$cid}{$item} = $courseinfo{$item}; |
$courseshash->{$chome}{$cid}{$item} = $courseinfo{$item}; |
} |
} |
} |
} |
foreach my $item ('selfenroll_types','selfenroll_start_date','selfenroll_end_date') { |
foreach my $item ('selfenroll_types','selfenroll_start_date','selfenroll_end_date','uniquecode') { |
if ($courseinfo{'internal.'.$item} ne '') { |
if ($courseinfo{'internal.'.$item} ne '') { |
$courseshash->{$chome}{$cid}{$item} = |
$courseshash->{$chome}{$cid}{$item} = |
$courseinfo{'internal.'.$item}; |
$courseinfo{'internal.'.$item}; |
Line 353 sub parameter_constraints {
|
Line 378 sub parameter_constraints {
|
if ($key =~ /(\Q$item\E)$/) { |
if ($key =~ /(\Q$item\E)$/) { |
if (ref($checkparms{$item}) eq 'ARRAY') { |
if (ref($checkparms{$item}) eq 'ARRAY') { |
my $value = $resourcedata->{$key}; |
my $value = $resourcedata->{$key}; |
|
if ($item eq 'examcode') { |
|
if (&Apache::lonnet::validCODE($value)) { |
|
$value = 'valid'; |
|
} else { |
|
$value = ''; |
|
} |
|
} |
if (grep(/^\Q$value\E$/,@{$checkparms{$item}})) { |
if (grep(/^\Q$value\E$/,@{$checkparms{$item}})) { |
my ($major,$minor) = split(/\./,$Apache::lonnet::needsrelease{'parameter:'.$item.':'.$value}); |
my ($major,$minor) = split(/\./,$Apache::lonnet::needsrelease{'parameter:'.$item.':'.$value}); |
($reqdmajor,$reqdminor) = |
($reqdmajor,$reqdminor) = |
Line 376 sub coursetype_constraints {
|
Line 408 sub coursetype_constraints {
|
return ($reqdmajor,$reqdminor); |
return ($reqdmajor,$reqdminor); |
} |
} |
|
|
|
sub commblock_constraints { |
|
my ($cnum,$cdom,$reqdmajor,$reqdminor) = @_; |
|
my %comm_blocks = &Apache::lonnet::dump('comm_block',$cdom,$cnum); |
|
my $now = time; |
|
if (keys(%comm_blocks) > 0) { |
|
foreach my $block (keys(%comm_blocks)) { |
|
if ($block =~ /^firstaccess____(.+)$/) { |
|
my ($major,$minor) = split(/\./,$Apache::lonnet::needsrelease{'course:commblock:timer'}); |
|
($reqdmajor,$reqdminor) = &update_reqd_loncaparev($major,$minor,$reqdmajor,$reqdminor); |
|
last; |
|
} elsif ($block =~ /^(\d+)____(\d+)$/) { |
|
my ($start,$end) = ($1,$2); |
|
next if ($end < $now); |
|
} |
|
if (ref($comm_blocks{$block}) eq 'HASH') { |
|
if (ref($comm_blocks{$block}{'blocks'}) eq 'HASH') { |
|
if (ref($comm_blocks{$block}{'blocks'}{'docs'}) eq 'HASH') { |
|
if (keys(%{$comm_blocks{$block}{'blocks'}{'docs'}}) > 0) { |
|
my ($major,$minor) = split(/\./,$Apache::lonnet::needsrelease{'course:commblock:docs'}); |
|
($reqdmajor,$reqdminor) = &update_reqd_loncaparev($major,$minor,$reqdmajor,$reqdminor); |
|
last; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
return; |
|
} |
|
|
sub coursecontent_constraints { |
sub coursecontent_constraints { |
my ($cnum,$cdom,$reqdmajor,$reqdminor) = @_; |
my ($cnum,$cdom,$reqdmajor,$reqdminor) = @_; |
my $navmap = Apache::lonnavmaps::navmap->new(); |
my $navmap = Apache::lonnavmaps::navmap->new(); |
Line 454 sub read_paramdata {
|
Line 516 sub read_paramdata {
|
return $resourcedata; |
return $resourcedata; |
} |
} |
|
|
sub build_release_hashes { |
sub last_map_update { |
foreach my $key (keys(%Apache::lonnet::needsrelease)) { |
my ($cnum,$cdom) = @_; |
my ($item,$name,$value) = split(/:/,$key); |
my $lastupdate = 0; |
if ($item eq 'parameter') { |
my $path = &LONCAPA::propath($cdom,$cnum); |
if (ref($checkparms{$name}) eq 'ARRAY') { |
if (-d "$path/userfiles") { |
unless(grep(/^\Q$name\E$/,@{$checkparms{$name}})) { |
if (opendir(my $dirh, "$path/userfiles")) { |
push(@{$checkparms{$name}},$value); |
my @maps = grep(/^default_?\d*\.(?:sequence|page)$/,readdir($dirh)); |
|
foreach my $map (@maps) { |
|
my $mtime = (stat("$path/userfiles/$map"))[9]; |
|
if ($mtime > $lastupdate) { |
|
$lastupdate = $mtime; |
} |
} |
} else { |
|
push(@{$checkparms{$name}},$value); |
|
} |
|
} elsif ($item eq 'resourcetag') { |
|
if ($name eq 'responsetype') { |
|
$checkresponsetypes{$value} = $Apache::lonnet::needsrelease{$key} |
|
} |
|
} elsif ($item eq 'course') { |
|
if ($name eq 'crstype') { |
|
$checkcrstypes{$value} = $Apache::lonnet::needsrelease{$key}; |
|
} |
} |
} |
} |
} |
} |
($anonsurvey{major},$anonsurvey{minor}) = split(/\./,$Apache::lonnet::needsrelease{'parameter:type:anonsurvey'}); |
return $lastupdate; |
($randomizetry{major},$randomizetry{minor}) = split(/\./,$Apache::lonnet::needsrelease{'parameter:type:randomizetry'}); |
|
return; |
|
} |
} |
|
|