[LON-CAPA-cvs] cvs: loncom /enrollment Enrollment.pm

raeburn lon-capa-cvs@mail.lon-capa.org
Thu, 11 Dec 2003 03:26:15 -0000


This is a MIME encoded message

--raeburn1071113175
Content-Type: text/plain

raeburn		Wed Dec 10 22:26:15 2003 EDT

  Modified files:              
    /loncom/enrollment	Enrollment.pm 
  Log:
  Changed append to newusermsg. (it was passed by reference not as a scalar).
  
  
--raeburn1071113175
Content-Type: text/plain
Content-Disposition: attachment; filename="raeburn-20031210222615.txt"

Index: loncom/enrollment/Enrollment.pm
diff -u loncom/enrollment/Enrollment.pm:1.7 loncom/enrollment/Enrollment.pm:1.8
--- loncom/enrollment/Enrollment.pm:1.7	Tue Dec  9 15:06:37 2003
+++ loncom/enrollment/Enrollment.pm	Wed Dec 10 22:26:15 2003
@@ -1,5 +1,5 @@
 # Automated Enrollment manager
-# $Id: Enrollment.pm,v 1.7 2003/12/09 20:06:37 albertel Exp $
+# $Id: Enrollment.pm,v 1.8 2003/12/11 03:26:15 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -27,13 +27,17 @@
 
 use Apache::loncoursedata;
 use Apache::lonnet;
+use Apache::lonmsg;
 use HTML::Entities;
 use LONCAPA::Configuration;
+use Time::Local;
+use lib '/home/httpd/lib/perl';
+use localenroll;
 
 use strict;
 
 sub update_LC {
-    my ($dom,$crs,$adds,$drops,$startdate,$enddate,$authtype,$autharg,$classesref,$groupref,$logmsg,$context) = @_; 
+    my ($dom,$crs,$adds,$drops,$startdate,$enddate,$authtype,$autharg,$classesref,$groupref,$logmsg,$newusermsg,$context) = @_; 
 # Get current LON-CAPA student enrollment for this class
     my $configvars = &LONCAPA::Configuration::read_conf('loncapa.conf');
     my $cid = $dom."_".$crs;
@@ -65,6 +69,8 @@
     my $enrollcount = 0;
     my $dropcount = 0;
 
+    srand( time() ^ ($$ + ($$ << 15))  ); # Seed rand in case initial passwords have to be generated for new users.
+
 # Get mapping of IDs to usernames for current LON-CAPA student enrollment for this class 
     my @LCids = ();
     my %unameFromLCid = ();
@@ -247,12 +253,15 @@
 # If no account exists and passwords should be generated
                         if ($authtype eq "int") {
                             if ($authparam eq '') {
-                                ($authparam,$create_passwd,$authchk) = &create_password();
+                                ($authparam) = &create_password();
+                                if ($authparam eq '') {
+                                     $authchk = '';
+                                } else {
+                                    $create_passwd = 1;
+                                }        
                             }
                         } elsif ($authtype eq "local") {
-                            if ($authparam eq '') {
-                                ($authparam,$create_passwd,$authchk) = &create_password();
-                            }
+                             ($authparam,$create_passwd,$authchk) = &localenroll::create_password($authparam);
                         } elsif ($authtype =~ m/^krb/) {
                             if ($authparam eq '') {
                                 $$logmsg .= "No Kerberos domain was provided for the new user - $uname, so the new student was not enrolled in the course.".$linefeed;
@@ -269,7 +278,7 @@
                                 $enrollcount ++;
                                 $addresult .= "$first $last ($pid) - $uname enrolled in section/group $usec.".$linefeed;
                                 if ($context eq 'automated') {
-                                    $$logmsg .= "New $dom user $uname added successfully.".$linefeed;
+                                    $$logmsg .= "New $dom user $uname added successfully.";
                                 }
                                 unless ($emailenc eq '') {
                                     my %emailHash;
@@ -278,10 +287,23 @@
                                     my $putresult = &Apache::lonnet::put('environment',\%emailHash,$dom,$uname);
                                 }
                                 if ($create_passwd) {
-# Send e-mail with inital password to new user at $emailaddr
-                                    $$logmsg .= "Initial password -  - sent to ".$emailaddr.$linefeed;
+# Send e-mail with initial password to new user at $emailaddr. 
+# If e-mail address is invalid, send password via message to courseowner i
+# (if automated call) or to user if roster update. 
+                                    if ($emailaddr eq '') {
+                                        $$newusermsg .= " username: $uname, password: ".$authparam.$linefeed."\n";
+                                    } else {
+                                        my $subject = "New LON-CAPA account";
+                                        my $body = "You have been enrolled in the LON-CAPA system at your school, because you are a registered student in a class that is using the LON-CAPA course management and online homework system.\n\nYou should log-in to the system using the following credentials:\nusername: $uname\npassword: $authparam\n\nThe URL you should use to access the LON-CAPA system at your school is: http://".$ENV{'SERVER_NAME'};
+                                       &Apache::lonmsg::sendemail($emailaddr,$subject,$body); 
+                                    }                                 
+                                    if ($context eq 'automated') {
+                                        $$logmsg .= " Initial password -  - sent to ".$emailaddr.$linefeed;
+                                    }
                                 } else {
-                                    $$logmsg .= $linefeed;
+                                    if ($context eq 'automated') {
+                                        $$logmsg .= $linefeed;
+                                    }
                                 }
                             } else {
                                 $$logmsg .= "An error occurred adding new user $uname - ".$reply.$linefeed;
@@ -380,6 +402,9 @@
                             $dropcount ++;
                             my %userenv = &Apache::lonnet::get('environment',['firstname','lastname','id'],$dom,$uname);
                             $dropresult .= $userenv{'firstname'}." ".$userenv{'lastname'}." (".$userenv{'id'}.") - ".$uname." dropped from section/group ".$$currlist{$uname}[$sec].$linefeed; 
+                            if ($context eq 'automated') {
+                                $$logmsg .= "User $uname student role expired from course.".$linefeed;
+                            }
                         }
                     }
                 }
@@ -432,7 +457,7 @@
     my $xmlfile = $tmpdir."/tmp/".$dom."_".$crs."_".$class."_classlist.xml";
     my $uname = '';
     my @state;
-    my @items = ('autharg','authtype','email','enddate','firstname','generation','lastname','middlename','startdate','studentID');
+    my @items = ('autharg','authtype','email','firstname','generation','lastname','middlename','studentID');
     my $p = HTML::Parser->new
     (
         xml_mode => 1,
@@ -449,6 +474,18 @@
                  my ($text) = @_;
                  if ("@state" eq "students student groupID") {
                      $$studentsref{$uname}[ $$placeref{'groupID'} ] = $groupID;
+                 } elsif ("@state" eq "students student startdate") {
+                     my $start = $text;
+                     unless ($text eq '') {
+                         $start = &process_date($text);
+                     }
+                     $$studentsref{$uname}[ $$placeref{'startdate'} ] = $start; 
+                 } elsif ("@state" eq "students student enddate") {
+                     my $end = $text;
+                     unless ($text eq '') {
+                         $end = &process_date($text);
+                     }
+                     $$studentsref{$uname}[ $$placeref{'enddate'} ] = $end;
                  } else {
                      foreach my $item (@items) {
                          if ("@state" eq "students student $item") {
@@ -466,15 +503,46 @@
                                                                                                              
     $p->parse_file($xmlfile);
     $p->eof;
-#    if (-e "$xmlfile") {
-#        unlink $xmlfile;
-#    }
+    if (-e "$xmlfile") {
+        unlink $xmlfile;
+    }
     return;
 }
 
+sub process_date {
+    my $timestr = shift;
+    my $timestamp = '';
+    if ($timestr =~ m/^\d{4}:\d{2}:\d{2}/) {
+        my @entries = split/:/,$timestr;
+        for (my $j=0; $j<@entries; $j++) {
+            if ( length($entries[$j]) > 1 ) {
+                $entries[$j] =~ s/^0//;
+            }
+        }
+        $entries[1] = $entries[1] - 1;
+        $timestamp =  timelocal($entries[5],$entries[4],$entries[3],$entries[2],$entries[1],$entries[0]);
+    }
+    return $timestamp;
+}
+
 sub create_password {
-    my ($authparam,$create_passwd,$authreply);
-    return ($authparam,$create_passwd,$authreply);
+    my $passwd = '';
+    my @letts = "a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z";
+    for (my $i=0; $i<8; $i++) {
+        my $lettnum = int (rand 2);
+        my $item = '';
+        if ($lettnum) {
+            $item = $letts[int( rand(26) )];
+            my $uppercase = int(rand 2);
+            if ($uppercase) {
+                $item =~ tr/a-z/A-Z/;
+            }
+        } else {
+            $item = int( rand(10) );
+        } 
+        $passwd .= $item;
+    }
+    return ($passwd);
 }
 
 sub CL_autharg { return 0; }

--raeburn1071113175--