File:  [LON-CAPA] / loncom / enrollment / Autoenroll.pl
Revision 1.1: download - view: text, annotated - select for diffs
Fri Dec 5 17:08:09 2003 UTC (20 years, 5 months ago) by raeburn
Branches: MAIN
CVS tags: HEAD
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.

#!/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;

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>