--- loncom/misc/refresh_courseids_db.pl 2014/06/07 03:07:06 1.18 +++ loncom/misc/refresh_courseids_db.pl 2014/06/07 19:13:51 1.19 @@ -1,7 +1,7 @@ #!/usr/bin/perl # The LearningOnline Network # -# $Id: refresh_courseids_db.pl,v 1.18 2014/06/07 03:07:06 raeburn Exp $ +# $Id: refresh_courseids_db.pl,v 1.19 2014/06/07 19:13:51 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -57,12 +57,11 @@ use Apache::loncommon; use Apache::lonuserstate; use Apache::loncoursedata; use Apache::lonnavmaps; +use Apache::lonrelrequtils; use LONCAPA qw(:DEFAULT :match); exit if ($Apache::lonnet::perlvar{'lonRole'} ne 'library'); -use vars qw( %checkparms %checkresponsetypes %checkcrstypes %anonsurvey %randomizetry ); - # Make sure this process is running from user=www my $wwwid=getpwnam('www'); if ($wwwid!=$<) { @@ -80,8 +79,9 @@ print $fh "==== refresh_courseids_db.pl my @domains = sort(&Apache::lonnet::current_machine_domains()); my @ids=&Apache::lonnet::current_machine_ids(); -&Apache::loncommon::build_release_hashes(\%checkparms,\%checkresponsetypes, - \%checkcrstypes,\%anonsurvey,\%randomizetry); +&Apache::lonrelrequtils::init_global_hashes(); +my $globals_set = 1; + $env{'allowed.bre'} = 'F'; foreach my $dom (@domains) { @@ -224,23 +224,11 @@ sub recurse_courses { if (($chome ne '') && ($lastaccess->{$cid} > $twodaysago)) { $env{'request.course.id'} = $cdom.'_'.$cnum; $env{'request.role'} = 'cc./'.$cdom.'/'.$cnum; - &Apache::lonuserstate::readmap($cdom.'/'.$cnum); - - # check all parameters - ($reqdmajor,$reqdminor) = ¶meter_constraints($cnum,$cdom); - # check course type - ($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, - $reqdminor); + my $readmap = 1; + ($reqdmajor,$reqdminor) = &Apache::lonrelrequtils::get_release_req($cnum,$cdom, + $crstype,$readmap, + $globals_set); delete($env{'request.course.id'}); delete($env{'request.role'}); } elsif ($releaserequired) { @@ -368,154 +356,6 @@ sub recurse_courses { return; } -sub parameter_constraints { - my ($cnum,$cdom) = @_; - my ($reqdmajor,$reqdminor); - my $resourcedata=&read_paramdata($cnum,$cdom); - if (ref($resourcedata) eq 'HASH') { - foreach my $key (keys(%{$resourcedata})) { - foreach my $item (keys(%checkparms)) { - if ($key =~ /(\Q$item\E)$/) { - if (ref($checkparms{$item}) eq 'ARRAY') { - my $value = $resourcedata->{$key}; - if ($item eq 'examcode') { - if (&Apache::lonnet::validCODE($value)) { - $value = 'valid'; - } else { - $value = ''; - } - } - if (grep(/^\Q$value\E$/,@{$checkparms{$item}})) { - my ($major,$minor) = split(/\./,$Apache::lonnet::needsrelease{'parameter:'.$item.':'.$value}); - ($reqdmajor,$reqdminor) = - &update_reqd_loncaparev($major,$minor,$reqdmajor,$reqdminor); - } - } - } - } - } - } - return ($reqdmajor,$reqdminor); -} - -sub coursetype_constraints { - my ($cnum,$cdom,$crstype,$reqdmajor,$reqdminor) = @_; - if (defined($checkcrstypes{$crstype})) { - my ($major,$minor) = split(/\./,$checkcrstypes{$crstype}); - ($reqdmajor,$reqdminor) = - &update_reqd_loncaparev($major,$minor,$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 { - 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,$randbytry_subm); - foreach my $res ($navmap->retrieveResources(undef,sub { $_[0]->is_problem() },1,0)) { - my %responses = $res->responseTypes(); - foreach my $key (keys(%responses)) { - next unless(exists($checkresponsetypes{$key})); - $allresponses{$key} += $responses{$key}; - } - my @parts = @{$res->parts()}; - my $symb = $res->symb(); - foreach my $part (@parts) { - if (exists($anonsubmissions{$symb."\0".$part})) { - $anonsurv_subm = 1; - } - if (exists($randomizetrysubm{$symb."\0".$part})) { - $randbytry_subm = 1; - } - } - } - foreach my $key (keys(%allresponses)) { - my ($major,$minor) = split(/\./,$checkresponsetypes{$key}); - ($reqdmajor,$reqdminor) = &update_reqd_loncaparev($major,$minor,$reqdmajor,$reqdminor); - } - if ($anonsurv_subm) { - ($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); -} - -sub update_reqd_loncaparev { - my ($major,$minor,$reqdmajor,$reqdminor) = @_; - if (($major ne '' && $major !~ /\D/) & ($minor ne '' && $minor !~ /\D/)) { - if ($reqdmajor eq '' || $reqdminor eq '') { - $reqdmajor = $major; - $reqdminor = $minor; - } elsif (($major > $reqdmajor) || - ($major == $reqdmajor && $minor > $reqdminor)) { - $reqdmajor = $major; - $reqdminor = $minor; - } - } - return ($reqdmajor,$reqdminor); -} - -sub read_paramdata { - my ($cnum,$dom)=@_; - my $resourcedata=&Apache::lonnet::get_courseresdata($cnum,$dom); - my $classlist=&Apache::loncoursedata::get_classlist(); - foreach my $student (keys(%{$classlist})) { - if ($student =~/^($LONCAPA::match_username)\:($LONCAPA::match_domain)$/) { - my ($tuname,$tudom)=($1,$2); - my $useropt=&Apache::lonnet::get_userresdata($tuname,$tudom); - foreach my $userkey (keys(%{$useropt})) { - if ($userkey=~/^$env{'request.course.id'}/) { - my $newkey=$userkey; - $newkey=~s/^($env{'request.course.id'}\.)/$1\[useropt\:$tuname\:$tudom\]\./; - $$resourcedata{$newkey}=$$useropt{$userkey}; - } - } - } - } - return $resourcedata; -} - sub last_map_update { my ($cnum,$cdom) = @_; my $lastupdate = 0;