--- loncom/automation/Autocreate.pl 2010/08/13 16:37:30 1.14 +++ loncom/automation/Autocreate.pl 2019/07/26 02:28:28 1.21 @@ -2,7 +2,7 @@ # # Automated Course Creation script # -# $Id: Autocreate.pl,v 1.14 2010/08/13 16:37:30 raeburn Exp $ +# $Id: Autocreate.pl,v 1.21 2019/07/26 02:28:28 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -110,15 +110,14 @@ close($fh); exit; } - $env{'user.name'} = $dcname; - $env{'user.domain'} = $dcdom; - $env{'request.role.domain'} = $defdom; + &set_dc_env($dcname,$dcdom,$defdom); my @permissions = ('mau','ccc','cin','cta','cep','ccr','cst'); my %permissionflags = (); &set_permissions(\%permissionflags,\@permissions); my $output = &process_xml($fh,$defdom,$dcname,$dcdom); - print $output; &unset_permissions(\%permissionflags); + &unset_dc_env(); + print $output; } } else { my @permissions = ('mau','ccc','cin','cta','cep','ccr','cst'); @@ -132,12 +131,12 @@ my $settings; if (ref($domconfig{'autocreate'}) eq 'HASH') { $settings = $domconfig{'autocreate'}; + my ($dcname,$dcdom); + if ($settings->{'xmldc'}) { + ($dcname,$dcdom) = split(':',$settings->{'xmldc'}); + } if ($settings->{'xml'}) { if ($settings->{'xmldc'}) { - my ($dcname,$dcdom) = split(':',$settings->{'xmldc'}); - $env{'user.name'} = $dcname; - $env{'user.domain'} = $dcdom; - $env{'request.role.domain'} = $dom; if (!&check_activedc($dcdom,$dcname,$dom)) { print $fh "Autocreate.pl in domain $dom configured to run under the auspices of a user without an active domain coordinator role in the domain - course creation will be skipped.\n\n"; next; @@ -149,7 +148,9 @@ } } if ($settings->{'req'}) { - my $output = &Apache::process_official_reqs('auto',$dom); + &set_dc_env($dcname,$dcdom); + my $output = &Apache::loncoursequeueadmin::process_official_reqs('auto',$dom,$dcname,$dcdom); + &unset_dc_env(); if ($output) { print $fh $output; } @@ -164,10 +165,7 @@ sub process_xml { my ($fh,$dom,$dcname,$dcdom) = @_; - $env{'user.name'} = $dcname; - $env{'user.domain'} = $dcdom; - $env{'request.role.domain'} = $dom; - + &set_dc_env($dcname,$dcdom,$dom); # Initialize language handler &Apache::lonlocal::get_language_handle(); @@ -177,7 +175,8 @@ sub process_xml { closedir(DIR); my %courseids = (); print $fh "Sending to batch - auto,$dom,$dcname,$dcdom ".join(":",@requests)."\n"; - my ($result,$logmsg) = &LONCAPA::batchcreatecourse::create_courses(\@requests,\%courseids,'auto',$dom,$dcname,$dcdom); + my ($result,$logmsg,$keysmsg,$codesref,$instcodesref) = + &LONCAPA::batchcreatecourse::create_courses(\@requests,\%courseids,'auto',$dom,$dcname,$dcdom); my $outcome; if ($result ne '') { $outcome = $result."\n"; @@ -185,6 +184,9 @@ sub process_xml { if ($logmsg ne '') { $outcome .= $logmsg."\n"; } + if ($keysmsg ne '') { + $outcome .= $keysmsg."\n"; + } print $fh $outcome; my $output; @@ -211,29 +213,34 @@ sub process_xml { $output .= $newcourse.':'; } $output =~ s/:$//; - delete($env{'user.name'}); - delete($env{'user.domain'}); - delete($env{'request.role.domain'}); + &unset_dc_env(); + if (ref($instcodesref) eq 'HASH') { + if (keys(%{$instcodesref}) > 0) { + &Apache::lonnet::devalidate_cache_new('instcats',$dom); + if (&Apache::lonnet::shared_institution($dom)) { + my %servers = &Apache::lonnet::internet_dom_servers($dom); + my %thismachine; + map { $thismachine{$_} = 1; } &Apache::lonnet::current_machine_ids(); + if (keys(%servers)) { + foreach my $server (keys(%servers)) { + next if ($thismachine{$server}); + &Apache::lonnet::remote_devalidate_cache($server,['instcats:'.$dom]); + } + } + } + } + } return $output; } sub check_activedc { my ($dcdom,$dcname,$defdom) = @_; - my %dumphash= - &Apache::lonnet::dump('roles',$dcdom,$dcname); - my $now=time; - my $activedc = 0; - foreach my $item (keys %dumphash) { - my ($domain,$role) = ($item =~ m-^/([^/]+)/[^_]*_(\w+)$-); - if ($role eq 'dc' && $domain eq $defdom) { - my ($trole,$tend,$tstart)=split(/_/,$dumphash{$item}); - if (($tend) && ($tend<$now)) { next; } - if (($tstart) && ($now<$tstart)) { next; } - $activedc = 1; - last; - } + my %roleshash = + &Apache::lonnet::get_my_roles($dcname,$dcdom,'userroles',undef,['dc'],[$defdom]); + if (keys(%roleshash) > 0) { + return 1; } - return $activedc; + return 0; } sub set_permissions { @@ -252,3 +259,24 @@ sub unset_permissions { delete($env{"allowed.$allowtype"}); } } + +sub set_dc_env { + my ($dcname,$dcdom,$defdom) = @_; + $env{'user.name'} = $dcname; + $env{'user.domain'} = $dcdom; + $env{'user.home'} = &Apache::lonnet::homeserver($dcname,$dcdom); + if ($defdom ne '') { + $env{'request.role.domain'} = $defdom; + } + return; +} + +sub unset_dc_env { + delete($env{'user.name'}); + delete($env{'user.domain'}); + delete($env{'user.home'}); + if ($env{'request.role.domain'}) { + delete($env{'request.role.domain'}); + } + return; +}