--- loncom/misc/refresh_courseids_db.pl 2017/06/26 01:50:11 1.21 +++ loncom/misc/refresh_courseids_db.pl 2023/10/02 21:01:21 1.24 @@ -1,7 +1,7 @@ #!/usr/bin/perl # The LearningOnline Network # -# $Id: refresh_courseids_db.pl,v 1.21 2017/06/26 01:50:11 raeburn Exp $ +# $Id: refresh_courseids_db.pl,v 1.24 2023/10/02 21:01:21 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -183,6 +183,7 @@ sub recurse_courses { my $creator = $courseinfo{'internal.creator'}; my $creationcontext = $courseinfo{'internal.creationcontext'}; my $inst_code = $courseinfo{'internal.coursecode'}; + my $xlists = $courseinfo{'internal.crosslistings'}; my $releaserequired = $courseinfo{'internal.releaserequired'}; my $uniquecode = $courseinfo{'internal.uniquecode'}; $inst_code = '' if (!defined($inst_code)); @@ -224,11 +225,13 @@ sub recurse_courses { if (($chome ne '') && ($lastaccess->{$cid} > $twodaysago)) { $env{'request.course.id'} = $cdom.'_'.$cnum; $env{'request.role'} = 'cc./'.$cdom.'/'.$cnum; + $env{'request.role.adv'} = 1; my $readmap = 1; ($reqdmajor,$reqdminor) = &Apache::lonrelrequtils::get_release_req($cnum,$cdom, $crstype,$readmap, $globals_set); + delete($env{'request.role.adv'}); delete($env{'request.course.id'}); delete($env{'request.role'}); } elsif ($releaserequired) { @@ -279,9 +282,20 @@ sub recurse_courses { my $cc = $1; unless ($cc eq $owner) { my ($result,$desc) = &Apache::lonnet::auto_validate_instcode($cnum,$cdom,$inst_code,$cc); + unless ($result eq 'valid') { + if ($xlists ne '') { + foreach my $xlist (split(',',$xlists)) { + my ($inst_crosslist,$lcsec) = split(':',$xlist); + $result = + &Apache::lonnet::auto_validate_inst_crosslist($cnum,$cdom,$inst_code, + $inst_crosslist,$cc); + last if ($result eq 'valid'); + } + } + } if ($result eq 'valid') { if (@newcoowners > 0) { - unless (grep(/^\Q$cc\E$/,@newcoowners)) { + unless (grep(/^\Q$cc\E$/,@newcoowners)) { push(@newcoowners,$cc); } } else { @@ -337,6 +351,11 @@ sub recurse_courses { } } } + my $curruserdoms = $courseinfo{'internal.userdomains'}; + my $updateduserdoms = &get_unique_domains($cdom,$cnum); + if ($curruserdoms ne $updateduserdoms) { + $changes{'internal.userdomains'} = $updateduserdoms; + } if (keys(%changes)) { if (&Apache::lonnet::put('environment',\%changes,$cdom,$cnum) eq 'ok') { print $fh "Course's environment.db for ".$cdom."_".$cnum." successfully updated with following entries: "; @@ -373,3 +392,28 @@ sub last_map_update { return $lastupdate; } +sub get_unique_domains { + my ($cdom,$cnum) = @_; + my %classlist = &Apache::lonnet::dump('classlist',$cdom,$cnum); + my (%uniquedom,$udomstr); + foreach my $key (keys(%classlist)) { + my $udom = (split(/:/,$key))[1]; + $uniquedom{$udom} = 1; + } + my %dumphash = + &Apache::lonnet::dump('nohist_userroles',$cdom,$cnum); + foreach my $entry (keys(%dumphash)) { + my $udom = (split(/\:/,$entry))[2]; + $uniquedom{$udom} = 1; + } + foreach my $udom (keys(%uniquedom)) { + if (&Apache::lonnet::domain($udom) eq '') { + delete($uniquedom{$udom}); + } + } + if (keys(%uniquedom) > 0) { + $udomstr = join(',',sort(keys(%uniquedom))); + } + return $udomstr; +} +