Annotation of loncom/enrollment/Autoenroll.pl, revision 1.2
1.2 ! raeburn 1: #!/usr/bin/perl
1.1 raeburn 2:
1.2 ! raeburn 3: use strict;
! 4: use lib '/home/httpd/lib/perl';
! 5: use localenroll;
! 6: use LONCAPA::Configuration;
! 7: use LONCAPA::Enrollment;
! 8: use Apache::lonnet;
! 9: use Apache::loncoursedata;
! 10: use Apache::lonmsg;
! 11: use HTML::Entities;
1.1 raeburn 12:
13: # Determine the library server's domain
1.2 ! raeburn 14: my $perlvarref = LONCAPA::Configuration::read_conf('loncapa.conf');
! 15: my $dom = $$perlvarref{'lonDefDomain'};
! 16: my $tmpdir = $$perlvarref{'lonDaemons'}.'/tmp';
! 17: $ENV{'user.domain'} = $dom;
1.1 raeburn 18:
19: # Determine the present time;
1.2 ! raeburn 20: my $timenow = time();
1.1 raeburn 21:
22: # Determine the courses
1.2 ! raeburn 23: my %courses = &Apache::lonnet::courseiddump($dom,'.',1);
! 24: my %affiliates = ();
! 25: my %enrollvar = ();
! 26: my %logmsg = ();
! 27: my %reply = ();
! 28: my %LC_code = ();
! 29: foreach my $key (sort keys %courses) {
! 30: my $crs;
! 31: if ($key =~ m/^($dom)_(\w+)$/) {
! 32: $crs = $2;
! 33: }
1.1 raeburn 34:
35: # Get course settings
1.2 ! raeburn 36: my %settings = &Apache::lonnet::dump('environment',$dom,$crs);
! 37: %{$enrollvar{$crs}} = ();
! 38: @{$affiliates{$crs}} = ();
! 39: %{$LC_code{$crs}} = ();
! 40: foreach my $item (keys %settings) {
! 41: if ($item =~ m/^internal\.(.+)$/) {
! 42: $enrollvar{$crs}{$1} = $settings{$item};
! 43: } elsif ($item eq 'description') {
! 44: $enrollvar{$crs}{$item} = &HTML::Entities::decode($settings{$item});
! 45: }
! 46: }
! 47: if (($enrollvar{$crs}{autostart} <= $timenow) && ($enrollvar{$crs}{autoend} > $timenow)) {
! 48: if ( ($enrollvar{$crs}{autoadds} == 1) || ($enrollvar{$crs}{autodrops} == 1) ) {
1.1 raeburn 49: # Add to list of classes for retrieval
1.2 ! raeburn 50: $enrollvar{$crs}{sectionnums} =~ s/ //g;
! 51: $enrollvar{$crs}{crosslistings} =~ s/ //g;
! 52: my @sections = ();
! 53: my @crosslistings = ();
! 54: if ($enrollvar{$crs}{sectionnums} =~ m/,/) {
! 55: @sections = split/,/,$enrollvar{$crs}{sectionnums};
! 56: } else {
! 57: $sections[0] = $enrollvar{$crs}{sectionnums};
! 58: }
! 59: if ($enrollvar{$crs}{crosslistings} =~ m/,/) {
! 60: @crosslistings = split/,/,$enrollvar{$crs}{crosslistings}
! 61: } else {
! 62: @crosslistings = $enrollvar{$crs}{crosslistings};
! 63: }
! 64: foreach my $sec (@sections) {
! 65: if ($sec =~ m/^(\w+):(\w*)$/ ) {
! 66: my $course_id = $enrollvar{$crs}{coursecode}.$1;
! 67: my $gp = $2;
! 68: if (!grep/^$course_id$/,@{$affiliates{$crs}}) {
! 69: push @{$affiliates{$crs}}, $course_id;
! 70: $LC_code{$crs}{$course_id} = $gp;
! 71: }
! 72: }
! 73: }
! 74: foreach my $xlist (@crosslistings) {
! 75: if ($xlist =~ m/^(\w+):(\w*)$/) {
! 76: my $course_id = $1;
! 77: my $gp = $2;
! 78: if (!grep/^$course_id$/,@{$affiliates{$crs}}) {
! 79: push @{$affiliates{$crs}}, $course_id;
! 80: $LC_code{$crs}{$course_id} = $gp;
! 81: }
! 82: }
! 83: }
! 84: }
! 85: }
! 86: }
! 87: &localenroll::fetch_enrollment($dom,\%affiliates,\%reply);
1.1 raeburn 88:
89: # Now go through classes and perform required enrollment changes.
1.2 ! raeburn 90: foreach my $crs (sort keys %enrollvar) {
! 91: if ($reply{$crs} > 0) {
! 92: if (($enrollvar{$crs}{autostart} < $timenow) && ($enrollvar{$crs}{autoend} > $timenow)) {
! 93: if (($enrollvar{$crs}{autoadds} == 1) || ($enrollvar{$crs}{autodrops} == 1)) {
! 94: my ($changecount,$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}},\$logmsg{$crs},'automated');
! 95: my $logfile = $crs."_enrollment_log.txt";
! 96: open (FILE,">>$tmpdir/$logfile");
! 97: print FILE "********************\n".localtime(time)." Enrollment messages start --\n";
! 98: print FILE "$logmsg{$crs}\n";
! 99: print FILE "-- ".localtime(time)." Enrollment messages end\n********************\n\n";
! 100: close (FILE);
! 101: if ($changecount > 0) {
! 102: unless ($enrollvar{$crs}{notifylist} eq '') {
! 103: # Send message about enrollment changes to notifylist.
! 104: # Set $ENV{'user.name'}, $ENV{'user.home'} for use by logging in lonmsg
! 105: unless ( ($enrollvar{$crs}{'courseowner'} eq '') || (!defined($enrollvar{$crs}{'courseowner'}) ) ) {
! 106: $ENV{'user.name'} = $enrollvar{$crs}{'courseowner'};
! 107: $ENV{'user.home'} = &Apache::lonnet::homeserver($ENV{'user.name'},$dom);
! 108:
! 109: my $subject = "Student enrollment changes in $enrollvar{$crs}{coursecode}";
! 110: my $message = "The following $changecount change(s) occurred in $enrollvar{$crs}{description} - $enrollvar{$crs}{coursecode} as a result of the automated classlist update:\n\n".$response;
! 111: my @to_notify = ();
! 112: if ($enrollvar{$crs}{notifylist} =~ m/,/) {
! 113: @to_notify = split/,/,$enrollvar{$crs}{notifylist};
! 114: } else {
! 115: $to_notify[0] = $enrollvar{$crs}{notifylist};
! 116: }
! 117: foreach my $cc (@to_notify) {
! 118: my ($ccname,$ccdom) = split/@/,$cc;
! 119: my $status = &Apache::lonmsg::user_normal_msg($ccname,$ccdom,$subject,$message);
! 120: }
! 121: delete($ENV{'user.name'});
! 122: delete($ENV{'user.home'});
! 123: }
! 124: }
! 125: }
! 126: }
! 127: }
! 128: } else {
! 129: print STDERR "No institutional classlist data could be retrieved for $crs\n";
! 130: }
! 131: }
! 132: delete($ENV{'user.domain'});
1.1 raeburn 133:
134: # Check for photos
135:
136: 1;
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>