Annotation of loncom/automation/Autocreate.pl, revision 1.1
1.1 ! raeburn 1: #!/usr/bin/perl
! 2: #
! 3: # Automated Course Creation script
! 4: #
! 5: # Copyright Michigan State University Board of Trustees
! 6: #
! 7: # This file is part of the LearningOnline Network with CAPA (LON-CAPA).
! 8: #
! 9: # LON-CAPA is free software; you can redistribute it and/or modify
! 10: # it under the terms of the GNU General Public License as published by
! 11: # the Free Software Foundation; either version 2 of the License, or
! 12: # (at your option) any later version.
! 13: #
! 14: # LON-CAPA is distributed in the hope that it will be useful,
! 15: # but WITHOUT ANY WARRANTY; without even the implied warranty of
! 16: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
! 17: # GNU General Public License for more details.
! 18: #
! 19: # You should have received a copy of the GNU General Public License
! 20: # along with LON-CAPA; if not, write to the Free Software
! 21: # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
! 22: #
! 23: # /home/httpd/html/adm/gpl.txt
! 24: #
! 25: # http://www.lon-capa.org/
! 26: #
! 27: # Run as www. Call this from an entry in /etc/cron.d/loncapa
! 28: #
! 29: # www /home/httpd/perl/Autocreate.pl $dom $uname:$udom
! 30: #
! 31: # where $dom is the name of the course domain, $uname and $udom are the
! 32: # username and domain of a Domain Coordinator in the domain.
! 33: #
! 34: use strict;
! 35: use lib '/home/httpd/lib/perl';
! 36: use Apache::lonnet;
! 37: use LONCAPA::batchcreatecourse;
! 38: use LONCAPA::Configuration;
! 39:
! 40: my $perlvarref = &LONCAPA::Configuration::read_conf('loncapa.conf');
! 41: my $logfile = $$perlvarref{'lonDaemons'}.'/logs/autocreate.log';
! 42: my @domains = &Apache::lonnet::current_machine_domains();
! 43: open (my $fh,">>$logfile");
! 44: print $fh "********************\n".localtime(time)." Autocreation messages start --\n";
! 45: if (@ARGV < 2) {
! 46: print $fh "usage: ./Autocreate <coursedomain username:domain>.\nPlease provide the username and domain of a Domain Coordinator.\n";
! 47: exit;
! 48: }
! 49: # check if $defdom is a domain hosted on this library server.
! 50: my $defdom = $ARGV[0];
! 51: my ($dcname,$dcdom) = ($ARGV[1] =~ /^([^:]+):([^:]+)$/);
! 52: if ($defdom eq '' || !grep/^$defdom$/,@domains) {
! 53: print $fh "The domain you supplied is not a valid domain for this server\n\n";
! 54: close($fh);
! 55: exit;
! 56: }
! 57: # check if user is an active domain coordinator.
! 58: if (!&check_activedc($dcdom,$dcname,$defdom)) {
! 59: print $fh "The username you supplied for domain $defdom does not have an active domain coordinator role in the domain\n\n";
! 60: close($fh);
! 61: exit;
! 62: }
! 63:
! 64: my $batchdir = $$perlvarref{'lonDaemons'}.'/tmp/addcourse/'.$defdom.'/auto';
! 65: opendir(DIR,"$batchdir/pending");
! 66: my @requests = grep(!/^\.\.?$/,readdir(DIR));
! 67: closedir(DIR);
! 68: my %courseids = ();
! 69: my $cccflag = 0;
! 70: unless ($ENV{'allowed.ccc'}) {
! 71: $ENV{'allowed.ccc'} = 'F';
! 72: $cccflag = 1;
! 73: }
! 74: my $wwwid=getpwnam('www');
! 75: if ($wwwid!=$<) {
! 76: my $emailto=$$perlvarref{'lonAdmEMail'};
! 77: my $subj="LON: $$perlvarref{'lonHostID'} User ID mismatch";
! 78: my $requestmail = "To: $emailto\n";
! 79: $requestmail .=
! 80: "Subject: LON: $$perlvarref{'lonHostID'} User ID mismatch\n".
! 81: "User ID mismatch. Autocreate.pl must be run as user www\n";
! 82: if ($emailto =~ /^[^\@]+\@[^\@]+$/) {
! 83: if (open(MAIL, "|/usr/lib/sendmail -oi -t -odb")) {
! 84: print MAIL $requestmail;
! 85: close(MAIL);
! 86: print $fh "Autocreate.pl must be run as user www\n\n";
! 87: } else {
! 88: print $fh "Could not send notification e-mail to $emailto\n\n";
! 89: }
! 90: } else {
! 91: print $fh "Notification e-mail address for Administrator is not a valid e-mail address\n\n";
! 92: }
! 93: close($fh);
! 94: exit;
! 95: }
! 96:
! 97: my ($output,$logmsg) = &LONCAPA::batchcreatecourse::create_courses(\@requests,\%courseids,'auto',$defdom,$dcname,$dcdom);
! 98:
! 99: # Copy requests from pending directory to processed directory and unlink.
! 100: foreach my $request (@requests) {
! 101: if ((-e "$batchdir/pending/$request") && $request !~ /\.\./ && $request ne '' &&$request ne './') {
! 102: open(FILE,"<$batchdir/pending/$request");
! 103: my @buffer = <FILE>;
! 104: close(FILE);
! 105: open(FILE,">$batchdir/processed/$request");
! 106: print FILE @buffer;
! 107: close(FILE);
! 108: if (-e "$batchdir/processed/$request") {
! 109: unlink("$batchdir/pending/$request");
! 110: }
! 111: }
! 112: }
! 113:
! 114: foreach my $key (sort keys %courseids) {
! 115: print $fh "created course: $key\n";
! 116: }
! 117:
! 118: if ($cccflag) {
! 119: delete($ENV{'allowed.ccc'});
! 120: }
! 121: print $fh "-- ".localtime(time)." Autocreation messages end\n*******************\n\n";
! 122: close($fh);
! 123:
! 124: sub check_activedc {
! 125: my ($dcdom,$dcname,$defdom) = @_;
! 126: my %dumphash=
! 127: &Apache::lonnet::dump('roles',$dcdom,$dcname);
! 128: my $now=time;
! 129: my $activedc = 0;
! 130: foreach my $item (keys %dumphash) {
! 131: my ($domain,$role) = ($item =~ m-^/([^/]+)/[^_]*_(\w+)$-);
! 132: if ($role eq 'dc' && $domain eq $defdom) {
! 133: my ($trole,$tend,$tstart)=split(/_/,$dumphash{$item});
! 134: if (($tend) && ($tend<$now)) { next; }
! 135: if (($tstart) && ($now<$tstart)) { next; }
! 136: $activedc = 1;
! 137: last;
! 138: }
! 139: }
! 140: return $activedc;
! 141: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>