--- loncom/enrollment/Enrollment.pm 2007/03/02 21:38:18 1.33 +++ loncom/enrollment/Enrollment.pm 2008/08/27 02:37:39 1.39 @@ -1,5 +1,5 @@ # Automated Enrollment manager -# $Id: Enrollment.pm,v 1.33 2007/03/02 21:38:18 raeburn Exp $ +# $Id: Enrollment.pm,v 1.39 2008/08/27 02:37:39 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -115,18 +115,7 @@ sub update_LC { # Get latest institutional enrollment for this class. my %allenrolled = (); my @reg_students = (); - my %place = (); - $place{'autharg'} = &CL_autharg(); - $place{'authtype'} = &CL_authtype(); - $place{'email'} = &CL_email(); - $place{'enddate'} = &CL_enddate(); - $place{'firstname'} = &CL_firstname(); - $place{'generation'} = &CL_generation(); - $place{'groupID'} = &CL_groupID(); - $place{'lastname'} = &CL_lastname(); - $place{'middlename'} = &CL_middlename(); - $place{'startdate'} = &CL_startdate(); - $place{'studentID'} = &CL_studentID(); + my %place = &place_hash(); my %ucount = (); my %enrollinfo = (); foreach my $class (@{$classesref}) { @@ -217,7 +206,7 @@ sub update_LC { # Check for switch from manual to auto unless (($$currlist{$uname}[$type] eq "auto") || ($$currlist{$uname}[$lockedtype] eq "1") || (!$adds) ) { # drop manually added student - my $drop_reply = &Apache::lonnet::modifystudent($dom,$uname,'','','',undef,undef,undef,undef,$$currlist{$uname}[$sec],time,undef,undef,undef,undef,'auto','',$cid); + my $drop_reply = &Apache::lonnet::modifystudent($dom,$uname,'','','',undef,undef,undef,undef,$$currlist{$uname}[$sec],time,undef,undef,undef,undef,'auto','',$cid,'',$context); # re-enroll as auto student if ($drop_reply !~ /^ok/) { $$logmsg .= &mt('An error occured during the attempt to convert [_1] from a manual type to an auto type student - [_2].',$uname,$drop_reply).$linefeed; @@ -249,7 +238,7 @@ sub update_LC { if ( (grep/^$uname$/,@futurestudents) && ($$currlist{$uname}[$type] eq "auto") && ($adds == 1) ) { my $datechange = &datechange_check($$currlist{$uname}[$cstart],$$currlist{$uname}[$cend],$startdate,$enddate); if ($datechange) { - my $modify_access_result = &Apache::lonnet::modify_student_enrollment($dom,$uname,undef,undef,undef,undef,undef,$stuinfo[ $place{groupID} ],$enddate,$startdate,'auto','',$cid); + my $modify_access_result = &Apache::lonnet::modify_student_enrollment($dom,$uname,undef,undef,undef,undef,undef,$stuinfo[ $place{groupID} ],$enddate,$startdate,'auto','',$cid,'',$context); $access = &showaccess($enddate,$startdate); if ($modify_access_result =~ /^ok/) { $$logmsg .= &mt('Change in access dates for [_1].',$uname).$access.$linefeed; @@ -267,13 +256,13 @@ sub update_LC { if ($$currlist{$uname}[$sec]) { $uurl.='/'.$$currlist{$uname}[$sec]; } - my $expire_role_result = &Apache::lonnet::assignrole($dom,$uname,$uurl,'st',$expiretime); + my $expire_role_result = &Apache::lonnet::assignrole($dom,$uname,$uurl,'st',$expiretime,'','','',$context); if ($expire_role_result eq 'ok') { my $modify_section_result; if (grep/^$uname$/,@activestudents) { - $modify_section_result = &Apache::lonnet::modify_student_enrollment($dom,$uname,undef,undef,undef,undef,undef,$stuinfo[ $place{groupID} ],$$currlist{$uname}[$cend],$$currlist{$uname}[$cstart],'auto','',$cid); + $modify_section_result = &Apache::lonnet::modify_student_enrollment($dom,$uname,undef,undef,undef,undef,undef,$stuinfo[ $place{groupID} ],$$currlist{$uname}[$cend],$$currlist{$uname}[$cstart],'auto','',$cid,'',$context); } else { - $modify_section_result = &Apache::lonnet::modify_student_enrollment($dom,$uname,undef,undef,undef,undef,undef,$stuinfo[ $place{groupID} ],$enddate,$startdate,'auto','',$cid); + $modify_section_result = &Apache::lonnet::modify_student_enrollment($dom,$uname,undef,undef,undef,undef,undef,$stuinfo[ $place{groupID} ],$enddate,$startdate,'auto','',$cid,'',$context); $access = &showaccess($enddate,$startdate); } if ($modify_section_result =~ /^ok/) { @@ -331,7 +320,7 @@ sub update_LC { 'linefeed' => $linefeed, 'role' => 'st' }; - my $outcome = &create_newuser($args,$logmsg,$newusermsg,\$enrollcount,\$addresult,\%longroles,\%courseinfo); + my $outcome = &create_newuser($args,$logmsg,$newusermsg,\$enrollcount,\$addresult,\%longroles,\%courseinfo,$context); } else { &execute_add($context,'newstudent',$uname,$dom,$auth,$authparam,$first,$middle,$last,$gene,$pid,$usec,$end,$start,$emailenc,$cid,\$addresult,\$enrollcount,$linefeed,$logmsg); } @@ -388,13 +377,13 @@ sub update_LC { push @saved,$uname; } } elsif (@saved == 0) { - my $drop_reply = &Apache::lonnet::modifystudent($dom,$uname,'','','',undef,undef,undef,undef,$$currlist{$uname}[$sec],time,undef,undef,undef,undef,'auto','',$cid); + my $drop_reply = &Apache::lonnet::modifystudent($dom,$uname,'','','',undef,undef,undef,undef,$$currlist{$uname}[$sec],time,undef,undef,undef,undef,'auto','',$cid,'',$context); if ($drop_reply !~ /^ok/) { $$logmsg .= &mt('An error occured during the attempt to expire the [_1] from the old section [_2] - [_3].',$uname,$$currlist{$uname}[$sec],$drop_reply).$linefeed; } else { $dropcount ++; my %userenv = &Apache::lonnet::get('environment',['firstname','lastname','id'],$dom,$uname); - $dropresult .= $userenv{'firstname'}." ".$userenv{'lastname'}." (".$userenv{'id'}.") - ".$uname.' '.&mt("dropped from section/group: '[_1]'.",$$currlist{$uname}[$sec]).$linefeed; + $dropresult .= $userenv{'firstname'}." ".$userenv{'lastname'}." (".$userenv{'id'}.") - ".$uname.' '.&mt("dropped from section: '[_1]'.",$$currlist{$uname}[$sec]).$linefeed; if ($context eq 'automated') { $$logmsg .= &mt('User [_1] student role expired from course.',$uname).$linefeed; } @@ -428,7 +417,6 @@ sub update_LC { if ($switchcount > 0) { if ($context eq "updatenow") { $switchresult = substr($switchresult,0,rindex($switchresult,"
  • ")); - print STDERR &mt("[quant,_1,student]",$switchcount)."\n"; $switchresult = &mt("The following [quant,_1,student] switched sections in this LON-CAPA course:",$switchcount).'


    '; } else { $switchresult = &mt("The following [quant,_1,student] switched sections in this LON-CAPA course:",$switchcount)."\n\n".$switchresult."\n\n"; @@ -455,7 +443,8 @@ sub update_LC { } sub create_newuser { - my ($args,$logmsg,$newusermsg,$enrollcount,$addresult,$longroles,$courseinfo) = @_; + my ($args,$logmsg,$newusermsg,$enrollcount,$addresult,$longroles, + $courseinfo,$called_context) = @_; my $auth = $args->{'auth'}; my $authparam = $args->{'authparam'}; my $emailenc = $args->{'emailenc'}; @@ -492,7 +481,7 @@ sub create_newuser { } } } elsif ($auth eq "localauth") { - ($authparam,$create_passwd,$authchk) = &Apache::lonnet::auto_create_password($crs,$cdom,$authparam); + ($authparam,$create_passwd,$authchk) = &Apache::lonnet::auto_create_password($crs,$cdom,$authparam,$udom); } elsif ($auth =~ m/^krb/) { if ($authparam eq '') { $$logmsg .= &mt('No Kerberos domain was provided for the new user - [_1], so the new user was not enrolled in the course',$uname).$linefeed; @@ -501,7 +490,7 @@ sub create_newuser { } else { $authchk = 'invalid'; $$logmsg .= &mt('An invalid authentication type was provided for the new user - [_1], so the user was not enrolled in the course.',$uname).$linefeed; - } + } if ($authchk eq 'ok') { # Now create user. my $type = 'auto'; @@ -512,7 +501,7 @@ sub create_newuser { if ($context eq 'createowner' || $context eq 'createcourse') { my $result = &Apache::lonnet::modifyuser($udom,$uname,$pid,$auth,$authparam,$first,$middle,$last,$gene,'1',undef,$emailaddr); if ($result eq 'ok' && $context eq 'createcourse') { - $outcome = &Apache::loncommon::commit_standardrole($udom,$uname,$userurl,$role,$start,$end,$cdom,$crs,$usec); + $outcome = &Apache::loncommon::commit_standardrole($udom,$uname,$userurl,$role,$start,$end,$cdom,$crs,$usec,$called_context); unless ($outcome =~ /^Error:/) { $outcome = 'ok'; } @@ -520,7 +509,7 @@ sub create_newuser { $outcome = $result; } } else { - $outcome=&Apache::lonnet::modifystudent($udom,$uname,$pid,$auth,$authparam,$first,$middle,$last,$gene,$usec,$end,$start,'',undef,$emailaddr,'auto','',$cid); + $outcome=&Apache::lonnet::modifystudent($udom,$uname,$pid,$auth,$authparam,$first,$middle,$last,$gene,$usec,$end,$start,'',undef,$emailaddr,'auto','',$cid,'',$called_context); } if ($outcome eq 'ok') { my $access = &showaccess($end,$start); @@ -528,11 +517,11 @@ sub create_newuser { if ($usec eq '') { $showsec = &mt('none'); } - $$addresult .= "$first $last ($pid) - $uname ".&mt("enrolled in section/group: '[_1]'.",$showsec).$access.$linefeed; + $$addresult .= "$first $last ($pid) - $uname ".&mt("enrolled in section: '[_1]'.",$showsec).$access.$linefeed; unless ($context eq 'createowner' || $context eq 'createcourse') { $$enrollcount ++; } - if ($context eq 'automated') { + if ($called_context eq 'automated') { $$logmsg .= &mt('New [_1] user [_2] added successfully.',$udom,$uname); } unless ($emailenc eq '' || $context eq 'createowner' || $context eq 'createcourse') { @@ -564,17 +553,19 @@ sub create_newuser { } &Apache::lonmsg::sendemail($emailaddr,$subject,$body); } - if ($context eq 'automated') { + if ($called_context eq 'automated') { $$logmsg .= &mt(' Initial password - sent to ').$emailaddr.$linefeed; } } else { - if ($context eq 'automated') { + if ($called_context eq 'automated') { $$logmsg .= $linefeed; } } } else { $$logmsg .= &mt('An error occurred adding new user [_1] - [_2].',$uname,$outcome).$linefeed; } + } else { + $$logmsg .= &mt('An error occurred adding the new user [_1] because the authcheck failed for authtype [_2] and parameter [_3].',$uname,$auth,$authparam).' '.&mt('The authcheck response was [_1].',$authchk).$linefeed; } return $outcome; } @@ -682,14 +673,14 @@ sub execute_add { $changeHash{'permanentemail'} = $emailenc; my $putresult = &Apache::lonnet::put('environment',\%changeHash,$dom,$uname); if ($putresult eq 'ok') { - $$logmsg .= &mt('User information updated for user: [_1]$uname prior to enrollment.',$uname).$linefeed; + $$logmsg .= &mt('User information updated for user: [_1] prior to enrollment.',$uname).$linefeed; } else { $$logmsg .= &mt('There was a problem modifying user data for existing user - [_1] -error: [_2], enrollment will still be attempted.',$uname,$putresult).$linefeed; } } # Assign the role of student in the course. - my $classlist_reply = &Apache::lonnet::modify_student_enrollment($dom,$uname,$pid,$first,$middle,$last,$gene,$usec,$end,$start,'auto','',$cid); + my $classlist_reply = &Apache::lonnet::modify_student_enrollment($dom,$uname,$pid,$first,$middle,$last,$gene,$usec,$end,$start,'auto','',$cid,'',$context); if ($classlist_reply eq 'ok') { my $access = &showaccess($end,$start); my $showsec = $usec; @@ -697,10 +688,10 @@ sub execute_add { $showsec = &mt('none'); } if ($caller eq 'switchtype') { - $$logmsg .= &mt("Existing user [_1] detected in institutional classlist - switched from 'manual' to 'auto' enrollment in section/group [_2].",$uname,$showsec).$access.$linefeed; + $$logmsg .= &mt("Existing user [_1] detected in institutional classlist - switched from 'manual' to 'auto' enrollment in section [_2].",$uname,$showsec).$access.$linefeed; } elsif ($caller eq 'newstudent') { $$enrollcount ++; - $$addresult .= "$first $last ($pid) - $uname ".&mt("enrolled in section/group '[_1]'.",$showsec).$access.$linefeed; + $$addresult .= "$first $last ($pid) - $uname ".&mt("enrolled in section '[_1]'.",$showsec).$access.$linefeed; } if ($context eq 'automated') { $$logmsg .= &mt('Existing [_1] user [_2] enrolled successfully.',$dom,$uname).$linefeed; @@ -858,17 +849,22 @@ sub get_courseinfo { return; } -sub CL_autharg { return 0; } -sub CL_authtype { return 1;} -sub CL_email { return 2;} -sub CL_enddate { return 3;} -sub CL_firstname { return 4;} -sub CL_generation { return 5;} -sub CL_groupID { return 6;} -sub CL_lastname { return 7;} -sub CL_middlename { return 8;} -sub CL_startdate { return 9; } -sub CL_studentID { return 10; } +sub place_hash { + my %place = ( + autharg => 0, + authtype => 1, + email => 2, + enddate => 3, + firstname => 4, + generation => 5, + groupID => 6, + lastname => 7, + middlename => 8, + startdate => 9, + studentID => 10, + ); + return %place; +} sub photo_response_types { my %lt = &Apache::lonlocal::texthash(