[LON-CAPA-cvs] cvs: loncom /enrollment Autoenroll.pl
raeburn
lon-capa-cvs@mail.lon-capa.org
Fri, 05 Dec 2003 17:08:09 -0000
raeburn Fri Dec 5 12:08:09 2003 EDT
Added files:
/loncom/enrollment Autoenroll.pl
Log:
Automated enrollment script - called by cron to carry out nightly enrollment updates, for all courses on the library server on which it is running. Makes calls to localenroll.pm to retrieve institutional data, and LONCAPA::Enrollment.pm to parse the retrieved classlists (stored as XML in /home/httpd/perl/tmp) and carry out the required changes.
Index: loncom/enrollment/Autoenroll.pl
+++ loncom/enrollment/Autoenroll.pl
#!/usr/bin/perl -w
use strict;
use lib '/home/httpd/lib/perl';
use localenroll;
use LONCAPA::Configuration;
use LONCAPA::Enrollment;
use Apache::lonnet;
use Apache::loncoursedata;
# Determine the library server's domain
my $perlvarref = LONCAPA::Configuration::read_conf('loncapa.conf');
my $dom = $$perlvarref{'lonDefDomain'};
print "Domain is $dom\n";
# Determine the present time;
my $timenow = time();
# Determine the courses
my %courses = &Apache::lonnet::courseiddump($dom,'.',1);
my %affiliates = ();
my %enrollvar = ();
my %LC_code = ();
foreach my $key (sort keys %courses) {
my $crs;
if ($key =~ m/^($dom)_(\w+)$/) {
$crs = $2;
}
# Get course settings
my %settings = &Apache::lonnet::dump('environment',$dom,$crs);
%{$enrollvar{$crs}} = ();
@{$affiliates{$crs}} = ();
%{$LC_code{$crs}} = ();
foreach my $item (keys %settings) {
if ($item =~ m/^internal\.(.+)$/) {
$enrollvar{$crs}{$1} = $settings{$item};
}
}
if (($enrollvar{$crs}{autostart} >= $timenow) && ($enrollvar{$crs}{autoend} < $timenow)) {
if (($enrollvar{$crs}{autoadds} == 1) || ($enrollvar{$crs}{autodrops} == 1) {
# Add to list of classes for retrieval
$enrollvar{$crs}{sectionnums} =~ s/ //g;
$enrollvar{$crs}{crosslistings} =~ s/ //g;
my @sections = ();
my @crosslistings = ();
if ($enrollvar{$crs}{sectionnums} =~ m/,/) {
@sections = split/,/,$enrollvar{$crs}{sectionnums};
} else {
@$sections = $enrollvar{$crs}{sectionnums};
}
if ($enrollvar{$crs}{crosslistings} =~ m/,/) {
@crosslistings = split/,/,$enrollvar{$crs}{crosslistings}
} else {
@crosslistings = $enrollvar{$crs}{crosslistings};
}
foreach my $sec (@sections) {
if ($sec =~ m/^(\w+):/(\w*)$) {
my $course_id = $enrollvar{$crs}{coursecode}.$1;
my $gp = $2;
if (!grep/^$course_id$/,@{$affiliates{$crs}}) {
push @{$affiliates{$crs}}, $course_id;
$LC_code{$crs}{$course_id} = $gp;
}
}
}
foreach my $xlist (@crosslistings) {
if ($xlist =~ m/^(\w+):(\w*)$/) {
my $course_id = $1;
my $gp = $2;
if (!grep/^$course_id$/,@{$affiliates{$crs}}) {
push @{$affiliates{$crs}}, $course_id;
$LC_code{$crs}{$course_id} = $gp;
}
}
}
}
}
print "Key is $key, Value is $courses{$key}\n";
}
&localenroll::fetch_enrollment($dom,\%affiliates,\%reply);
# Now go through classes and perform required enrollment changes.
foreach my $crs (sort keys %enrollvar) {
if (($enrollvar{$crs}{autostart} >= $timenow) && ($enrollvar{$crs}{autoend} < $timenow)) {
if (($enrollvar{$crs}{autoadds} == 1) || ($enrollvar{$crs}{autodrops} == 1)) {
my $response = &LONCAPA::Enrollment::update_LC($dom,$crs,$enrollvar{$crs}{autoadds},$enrollvar{$crs}{autodrops},$enrollvar{$crs}{startdate},$enrollvar{$crs}{enddate},$enrollvar{$crs}{authtype},$enrollvar{$crs}{autharg},\@{$affiliates{$crs}},\%{$LC_code{$crs}},"automated");
unless ($enrollvar{$crs}{notifylist} eq '') {
# Send message about enrollment changes to notifylist.
}
}
}
}
# Check for photos
1;