--- loncom/misc/refresh_courseids_db.pl 2010/07/24 00:01:12 1.4 +++ loncom/misc/refresh_courseids_db.pl 2010/07/29 17:44:45 1.5 @@ -1,7 +1,7 @@ #!/usr/bin/perl # The LearningOnline Network # -# $Id: refresh_courseids_db.pl,v 1.4 2010/07/24 00:01:12 raeburn Exp $ +# $Id: refresh_courseids_db.pl,v 1.5 2010/07/29 17:44:45 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( %needsrelease %checkparms %checkresponsetypes %checkcrstypes); +use vars qw( %checkparms %checkresponsetypes %checkcrstypes %anonsurvey ); # Make sure this process is running from user=www my $wwwid=getpwnam('www'); @@ -79,7 +79,7 @@ print $fh "==== refresh_courseids_db.pl my @domains = sort(&Apache::lonnet::current_machine_domains()); -&parse_releases_xml(); +&build_release_hashes(); $env{'allowed.bre'} = 'F'; foreach my $dom (@domains) { @@ -339,7 +339,7 @@ sub parameter_constraints { if (ref($checkparms{$item}) eq 'ARRAY') { my $value = $resourcedata->{$key}; if (grep(/^\Q$value\E$/,@{$checkparms{$item}})) { - my ($major,$minor) = split(/\./,$needsrelease{'parameter'}{$item}{$value}); + my ($major,$minor) = split(/\./,$Apache::lonnet::needsrelease{'parameter:'.$item.':'.$value}); ($reqdmajor,$reqdminor) = &update_reqd_loncaparev($major,$minor,$reqdmajor,$reqdminor); } @@ -365,18 +365,32 @@ sub coursecontent_constraints { my ($cnum,$cdom,$reqdmajor,$reqdminor) = @_; my $navmap = Apache::lonnavmaps::navmap->new(); if (defined($navmap)) { + my %resourcetracker = &Apache::lonnet::dump('nohist_resourcetracker', + $cdom,$cnum); my %allresponses; + my $anonsurv_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($resourcetracker{$symb."\0".$part."\0anonymous"})) { + $anonsurv_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); + } } return ($reqdmajor,$reqdminor); } @@ -416,40 +430,28 @@ sub read_paramdata { return $resourcedata; } -sub parse_releases_xml { - my $file = $Apache::lonnet::perlvar{'lonTabDir'}.'/releaseslist.xml'; - if (-e $file) { - my $parser = HTML::LCParser->new($file); - while (my $token = $parser->get_token()) { - if ($token->[0] eq 'S') { - my $item = $token->[1]; - my $name = $token->[2]{'name'}; - my $value = $token->[2]{'value'}; - if ($item ne '' && $name ne '' && $value ne '') { - my $release = $parser->get_text(); - $release =~ s/(^\s*|\s*$ )//gx; - $needsrelease{$item}{$name}{$value} = $release; - 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} = $release; - } - } elsif ($item eq 'course') { - if ($name eq 'crstype') { - $checkcrstypes{$value} = $release; - } - } +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; }