--- loncom/misc/refresh_courseids_db.pl 2010/08/22 21:14:54 1.8 +++ loncom/misc/refresh_courseids_db.pl 2012/03/31 22:10:16 1.11 @@ -1,7 +1,7 @@ #!/usr/bin/perl # The LearningOnline Network # -# $Id: refresh_courseids_db.pl,v 1.8 2010/08/22 21:14:54 raeburn Exp $ +# $Id: refresh_courseids_db.pl,v 1.11 2012/03/31 22:10:16 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -61,7 +61,7 @@ use LONCAPA qw(:DEFAULT :match); exit if ($Apache::lonnet::perlvar{'lonRole'} ne 'library'); -use vars qw( %checkparms %checkresponsetypes %checkcrstypes %anonsurvey ); +use vars qw( %checkparms %checkresponsetypes %checkcrstypes %anonsurvey %randomizetry ); # Make sure this process is running from user=www my $wwwid=getpwnam('www'); @@ -80,7 +80,8 @@ print $fh "==== refresh_courseids_db.pl my @domains = sort(&Apache::lonnet::current_machine_domains()); my @ids=&Apache::lonnet::current_machine_ids(); -&build_release_hashes(); +&Apache::loncommon::build_release_hashes(\%checkparms,\%checkresponsetypes, + \%checkcrstypes,\%anonsurvey,\%randomizetry); $env{'allowed.bre'} = 'F'; foreach my $dom (@domains) { @@ -226,6 +227,10 @@ sub recurse_courses { ($reqdmajor,$reqdminor) = &coursetype_constraints($cnum,$cdom,$crstype, $reqdmajor, $reqdminor); + # check communication blocks + ($reqdmajor,$reqdminor) = &commblock_constraints($cnum,$cdom, + $reqdmajor, + $reqdminor); # check course contents ($reqdmajor,$reqdminor) = &coursecontent_constraints($cnum,$cdom, $reqdmajor, @@ -376,14 +381,46 @@ sub coursetype_constraints { return ($reqdmajor,$reqdminor); } +sub commblock_constraints { + my ($cnum,$cdom,$reqdmajor,$reqdminor) = @_; + my %comm_blocks = &Apache::lonnet::dump('commblock',$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 { my ($cnum,$cdom,$reqdmajor,$reqdminor) = @_; my $navmap = Apache::lonnavmaps::navmap->new(); if (defined($navmap)) { my %anonsubmissions = &Apache::lonnet::dump('nohist_anonsurveys', $cdom,$cnum); + my %randomizetrysubm = &Apache::lonnet::dump('nohist_randomizetry', + $cdom,$cnum); my %allresponses; - my $anonsurv_subm; + my ($anonsurv_subm,$randbytry_subm); foreach my $res ($navmap->retrieveResources(undef,sub { $_[0]->is_problem() },1,0)) { my %responses = $res->responseTypes(); foreach my $key (keys(%responses)) { @@ -396,6 +433,9 @@ sub coursecontent_constraints { if (exists($anonsubmissions{$symb."\0".$part})) { $anonsurv_subm = 1; } + if (exists($randomizetrysubm{$symb."\0".$part})) { + $randbytry_subm = 1; + } } } foreach my $key (keys(%allresponses)) { @@ -406,6 +446,10 @@ sub coursecontent_constraints { ($reqdmajor,$reqdminor) = &update_reqd_loncaparev($anonsurvey{major}, $anonsurvey{minor},$reqdmajor,$reqdminor); } + if ($randbytry_subm) { + ($reqdmajor,$reqdminor) = &update_reqd_loncaparev($randomizetry{major}, + $randomizetry{minor},$reqdmajor,$reqdminor); + } } return ($reqdmajor,$reqdminor); } @@ -445,28 +489,3 @@ sub read_paramdata { return $resourcedata; } -sub build_release_hashes { - foreach my $key (keys(%Apache::lonnet::needsrelease)) { - my ($item,$name,$value) = split(/:/,$key); - if ($item eq 'parameter') { - if (ref($checkparms{$name}) eq 'ARRAY') { - unless(grep(/^\Q$name\E$/,@{$checkparms{$name}})) { - push(@{$checkparms{$name}},$value); - } - } 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; -} -