--- loncom/interface/lonuserutils.pm 2008/05/12 17:52:08 1.54
+++ loncom/interface/lonuserutils.pm 2009/08/14 10:37:22 1.97
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Utility functions for managing LON-CAPA user accounts
#
-# $Id: lonuserutils.pm,v 1.54 2008/05/12 17:52:08 raeburn Exp $
+# $Id: lonuserutils.pm,v 1.97 2009/08/14 10:37:22 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -86,7 +86,7 @@ sub modifystudent {
sub modifyuserrole {
my ($context,$setting,$changeauth,$cid,$udom,$uname,$uid,$umode,$upass,
$first,$middle,$last,$gene,$sec,$forceid,$desiredhome,$email,$role,
- $end,$start,$checkid) = @_;
+ $end,$start,$checkid,$inststatus) = @_;
my ($scope,$userresult,$authresult,$roleresult,$idresult);
if ($setting eq 'course' || $context eq 'course') {
$scope = '/'.$cid;
@@ -124,7 +124,7 @@ sub modifyuserrole {
$userresult =
&Apache::lonnet::modifyuser($udom,$uname,$uid,$umode,$upass,$first,
$middle,$last,$gene,$forceid,$desiredhome,
- $email,$role,$start,$end);
+ $email,$inststatus);
if ($userresult eq 'ok') {
if ($role ne '') {
$role =~ s/_/\//g;
@@ -169,7 +169,7 @@ sub propagate_id_change {
}
sub update_classlist {
- my ($cdom,$cnum,$udom,$uname,$user) = @_;
+ my ($cdom,$cnum,$udom,$uname,$user,$newend) = @_;
my ($uid,$classlistentry);
my $fullname =
&Apache::lonnet::format_name($user->{'firstname'},$user->{'middlename'},
@@ -180,15 +180,37 @@ sub update_classlist {
my @classinfo = split(/:/,$classhash{$uname.':'.$udom});
my $ididx=&Apache::loncoursedata::CL_ID() - 2;
my $nameidx=&Apache::loncoursedata::CL_FULLNAME() - 2;
+ my $endidx = &Apache::loncoursedata::CL_END() - 2;
+ my $startidx = &Apache::loncoursedata::CL_START() - 2;
for (my $i=0; $i<@classinfo; $i++) {
- if ($i == $ididx) {
+ if ($i == $endidx) {
+ if ($newend ne '') {
+ $classlistentry .= $newend.':';
+ } else {
+ $classlistentry .= $classinfo[$i].':';
+ }
+ } elsif ($i == $startidx) {
+ if ($newend ne '') {
+ if ($classinfo[$i] > $newend) {
+ $classlistentry .= $newend.':';
+ } else {
+ $classlistentry .= $classinfo[$i].':';
+ }
+ } else {
+ $classlistentry .= $classinfo[$i].':';
+ }
+ } elsif ($i == $ididx) {
if (defined($user->{'id'})) {
$classlistentry .= $user->{'id'}.':';
} else {
$classlistentry .= $classinfo[$i].':';
}
} elsif ($i == $nameidx) {
- $classlistentry .= $fullname.':';
+ if (defined($user->{'lastname'})) {
+ $classlistentry .= $fullname.':';
+ } else {
+ $classlistentry .= $classinfo[$i].':';
+ }
} else {
$classlistentry .= $classinfo[$i].':';
}
@@ -306,9 +328,11 @@ sub print_upload_manager_header {
&javascript_validations('upload',$krbdefdom,$password_choice,undef,
$env{'request.role.domain'},$context,
$groupslist);
- my $checked=(($env{'form.noFirstLine'})?' checked="checked" ':'');
- $r->print(&mt('Total number of records found in file: [_1].',$distotal).
- "
\n");
+ my $checked=(($env{'form.noFirstLine'})?' checked="checked"':'');
+ $r->print('
' + .&mt('Total number of records found in file: [_1]' + ,''.$distotal.'') + ."
\n"); $r->print(''.&mt('Change authentication for existing users to these settings?').'
'; + $Str .= '' + .&mt('Change authentication for existing users in domain "[_1]" to these settings?' + ,$defdom) + .' ' + .' ' + .'
'; } else { - $Str .= "\n". - &mt('Note: this will not take effect if the user already exists'). + $Str .= '
'."\n". + &mt('This will not take effect if the user already exists.'). &Apache::loncommon::help_open_topic('Auth_Options'). "
\n"; } $Str .= &set_login($defdom,$krbform,$intform,$locform); + my ($home_server_pick,$numlib) = &Apache::loncommon::home_server_form_item($defdom,'lcserver', 'default','hide'); if ($numlib > 1) { - $Str .= '\n".$date_table."
\n"; - if ($context eq 'domain') { - $Str .= '\n".$date_table."
\n" + .&Apache::lonhtmlcommon::row_closure(); + + if ($context eq 'domain') { + $Str .= &Apache::lonhtmlcommon::row_title( + &mt('Settings for assigning roles')) + .&mt('Pick the action to take on roles for these users:').''
+ .''.&mt('Domain Level').'
'
+ .$options
+ .'
' + .''.&mt('Course Level').'' + .'
' + .$cb_script.$coursepick + .&Apache::lonhtmlcommon::row_closure(); } elsif ($context eq 'author') { - $Str .= $options; + $Str .= $options + .&Apache::lonhtmlcommon::row_closure(1); # last row in pick_box } } else { my ($cnum,$cdom) = &get_course_identity(); my $rowtitle = &mt('section'); my $secbox = §ion_picker($cdom,$cnum,'Any',$rowtitle, $permission,$context,'upload'); - $Str .= $secbox."
'.&mt('Students selected from this list can be dropped.').'
\n".'
'."\n".
- &mt('(only do if you know what you are doing.)')."\n";
+ &Apache::lonhtmlcommon::row_title(&mt('Student/Employee ID'))
+ .'
'."\n"
+ .&mt('(only do if you know what you are doing.)')."\n";
if ($context eq 'domain') {
$output .= '
'."\n";
}
- $output .= '
'. - &mt('Your Excel spreadsheet').' '.&mt('is ready for download').'.
'."\n"); + $r->print(&mt('[_1]Your Excel spreadsheet[_2] is ready for download.', '','')."
\n"); } elsif ($mode eq 'csv') { close($CSVfile); - $r->print(''. - &mt('Your CSV file').' is ready for download.'. - "\n"); + $r->print(&mt('[_1]Your CSV file[_2] is ready for download.', '','')."
\n"); $r->rflush(); } if ($mode eq 'autoenroll') { @@ -2588,6 +2698,125 @@ END } } +sub bulkaction_javascript { + my ($formname,$caller) = @_; + my $docstart = 'document'; + if ($caller eq 'popup') { + $docstart = 'opener.document'; + } + my %lt = &Apache::lonlocal::texthash( + acwi => 'Access will be set to start immediately', + asyo => 'as you did not select an end date in the pop-up window', + accw => 'Access will be set to continue indefinitely', + asyd => 'as you did not select an end date in the pop-up window', + sewi => "Sections will be switched to 'No section'", + ayes => "as you either selected the 'No section' option", + oryo => 'or you did not select a section in the pop-up window', + arol => 'A role with no section will be added', + swbs => 'Sections will be switched to:', + rwba => 'Roles will be added for section(s):', + ); + my $alert = &mt("You must select at least one user by checking a user's 'Select' checkbox"); + my $noaction = &mt("You need to select an action to take for the user(s) you have selected"); + my $singconfirm = &mt(' for a single user?'); + my $multconfirm = &mt(' for multiple users?'); + my $output = <<"ENDJS"; +function verify_action (field) { + var numchecked = 0; + var singconf = '$singconfirm'; + var multconf = '$multconfirm'; + if ($docstart.$formname.elements[field].length > 0) { + for (i=0; i<$docstart.$formname.elements[field].length; i++) { + if ($docstart.$formname.elements[field][i].checked == true) { + numchecked ++; + } + } + } else { + if ($docstart.$formname.elements[field].checked == true) { + numchecked ++; + } + } + if (numchecked == 0) { + alert("$alert"); + return; + } else { + var message = $docstart.$formname.bulkaction[$docstart.$formname.bulkaction.selectedIndex].text; + var choice = $docstart.$formname.bulkaction[$docstart.$formname.bulkaction.selectedIndex].value; + if (choice == '') { + alert("$noaction"); + return; + } else { + if (numchecked == 1) { + message += singconf; + } else { + message += multconf; + } +ENDJS + if ($caller ne 'popup') { + $output .= <<"NEWWIN"; + if (choice == 'chgdates' || choice == 'reenable' || choice == 'activate' || choice == 'chgsec') { + opendatebrowser(document.$formname,'$formname','go'); + return; + + } else { + if (confirm(message)) { + document.$formname.phase.value = 'bulkchange'; + document.$formname.submit(); + return; + } + } +NEWWIN + } else { + $output .= <<"POPUP"; + if (choice == 'chgdates' || choice == 'reenable' || choice == 'activate') { + var datemsg = ''; + if (($docstart.$formname.startdate_month.value == '') && + ($docstart.$formname.startdate_day.value == '') && + ($docstart.$formname.startdate_year.value == '')) { + datemsg = "\\n$lt{'acwi'},\\n$lt{'asyo'}.\\n"; + } + if (($docstart.$formname.enddate_month.value == '') && + ($docstart.$formname.enddate_day.value == '') && + ($docstart.$formname.enddate_year.value == '')) { + datemsg += "\\n$lt{'accw'},\\n$lt{'asyd'}.\\n"; + } + if (datemsg != '') { + message += "\\n"+datemsg; + } + } + if (choice == 'chgsec') { + var rolefilter = $docstart.$formname.showrole.options[$docstart.$formname.showrole.selectedIndex].value; + var retained = $docstart.$formname.retainsec.value; + var secshow = $docstart.$formname.newsecs.value; + if (secshow == '') { + if (rolefilter == 'st' || retained == 0 || retained == "") { + message += "\\n\\n$lt{'sewi'},\\n$lt{'ayes'},\\n$lt{'oryo'}.\\n"; + } else { + message += "\\n\\n$lt{'arol'}\\n$lt{'ayes'},\\n$lt{'oryo'}.\\n"; + } + } else { + if (rolefilter == 'st' || retained == 0 || retained == "") { + message += "\\n\\n$lt{'swbs'} "+secshow+".\\n"; + } else { + message += "\\n\\n$lt{'rwba'} "+secshow+".\\n"; + } + } + } + if (confirm(message)) { + $docstart.$formname.phase.value = 'bulkchange'; + $docstart.$formname.submit(); + window.close(); + } +POPUP + } + $output .= ' + } + } +} +'; + return $output; +} + sub print_username_link { my ($mode,$in) = @_; my $output; @@ -2611,7 +2840,7 @@ sub role_type_names { } sub select_actions { - my ($context,$setting,$statusmode) = @_; + my ($context,$setting,$statusmode,$formname) = @_; my %lt = &Apache::lonlocal::texthash( revoke => "Revoke user roles", delete => "Delete user roles", @@ -2672,7 +2901,7 @@ sub select_actions { } } if ($options) { - $output = ''."\n". + $output = ''; if ($choices{'dates'}) { @@ -2688,14 +2917,15 @@ sub select_actions { ''."\n". ''."\n". ''."\n". - ''."\n"; + ''."\n". + ''."\n"; if ($context eq 'course') { $output .= ''."\n"; } } if ($choices{'sections'}) { - $output .= ''."\n". - ''."\n"; + $output .= ''."\n". + ''."\n"; } } return $output; @@ -2709,25 +2939,11 @@ sub date_section_javascript { delete => "Check the boxes for any users for whom roles are to be deleted, and click 'Proceed'", none => "Choose an action to take for selected users", ); - my $output = ' - ENDTWO return $output; @@ -2761,6 +2978,7 @@ sub date_section_selector { my $sec_js = &setsections_javascript($formname,$groupslist); my $output = <<"END"; -'; +ENDJS my %lt = &Apache::lonlocal::texthash ( chac => 'Access dates to apply for selected users', chse => 'Changes in section affiliation to apply to selected users', @@ -2880,7 +3106,6 @@ END $output .= $info.$secbox; } $output .= ''.
-&mt('Use "Save" to update the main window with your selections.').'
'.
'
- + END my ($indexhash,$keylist) = &make_keylist_array(); my $studentcount = 0; @@ -3217,7 +3447,7 @@ END # $r->print(&Apache::loncommon::start_data_table_row()); $r->print(<<"END"); -
- - -
+ ++ + +
++ +
END return; } @@ -3250,23 +3484,42 @@ END sub print_first_users_upload_form { my ($r,$context) = @_; my $str; - $str = ''; + $str = ''; $str .= ''; $str .= ''; - $str .= "\n"; - $str .= ''."\n"; - $str .= '
\n"; - $str .= &Apache::loncommon::help_open_topic("Course_Create_Class_List", - &mt("How do I create a users list from a spreadsheet")). - "'
+ .&Apache::loncommon::help_open_topic("Course_Create_Class_List",
+ &mt("How do I create a users list from a spreadsheet"))
+ ."
\n"
+ .&Apache::loncommon::help_open_topic("Course_Convert_To_CSV",
+ &mt("How do I create a CSV file from a spreadsheet"))
+ ."
'."\n" + .&mt('Please upload an UTF8 encoded file to ensure a correct character encoding in your classlist.')."\n" + .'
'."\n" + .&Apache::loncommon::upfile_select_html() + .&Apache::lonhtmlcommon::row_closure() + .&Apache::lonhtmlcommon::row_title( + '') + .'' + .&Apache::lonhtmlcommon::row_closure(1) + .&Apache::lonhtmlcommon::end_pick_box(); + + $str .= '' + .'' + .'
'; + $str .= &Apache::loncommon::end_page(); + $r->print($str); return; } @@ -3295,7 +3548,7 @@ sub upfile_drop_add { # # Store the field choices away foreach my $field (qw/username names - fname mname lname gen id sec ipwd email role/) { + fname mname lname gen id sec ipwd email role domain/) { $env{'form.'.$field.'_choice'}=$fields{$field}; } &Apache::loncommon::store_course_settings('enrollment_upload', @@ -3309,19 +3562,27 @@ sub upfile_drop_add { 'sec_choice' => 'scalar', 'ipwd_choice' => 'scalar', 'email_choice' => 'scalar', - 'role_choice' => 'scalar' }); + 'role_choice' => 'scalar', + 'domain_choice' => 'scalar', + 'inststatus_choice' => 'scalar'}); # my ($startdate,$enddate) = &get_dates_from_form(); if ($env{'form.makedatesdefault'}) { $r->print(&make_dates_default($startdate,$enddate,$context)); } # Determine domain and desired host (home server) - my $domain=$env{'request.role.domain'}; + my $defdom=$env{'request.role.domain'}; + my $domain; + if ($env{'form.defaultdomain'} ne '') { + $domain = $env{'form.defaultdomain'}; + } else { + $domain = $defdom; + } my $desiredhost = $env{'form.lcserver'}; if (lc($desiredhost) eq 'default') { $desiredhost = undef; } else { - my %home_servers = &Apache::lonnet::get_servers($domain,'library'); + my %home_servers = &Apache::lonnet::get_servers($defdom,'library'); if (! exists($home_servers{$desiredhost})) { $r->print(''.&mt('Error'). &mt('Invalid home server specified').''); @@ -3386,6 +3647,7 @@ sub upfile_drop_add { 'permanentemail','id'); my %canmodify; if (&Apache::lonnet::allowed('mau',$domain)) { + push(@userinfo,'inststatus'); foreach my $field (@userinfo) { $canmodify{$field} = 1; } @@ -3406,7 +3668,9 @@ sub upfile_drop_add { if ($context eq 'course') { my ($cnum,$cdom) = &get_course_identity(); my $roster = &Apache::loncoursedata::get_classlist(); - %userlist = %{$roster}; + if (ref($roster) eq 'HASH') { + %userlist = %{$roster}; + } my %advrolehash = &Apache::lonnet::get_my_roles($cnum,$cdom,undef, \@statuses,\@poss_roles); &gather_userinfo($context,'view',\%userlist,$indexhash,\%info, @@ -3432,6 +3696,8 @@ sub upfile_drop_add { } else { $r->print('\n");
}
+ $r->rflush;
+
my %counts = (
user => 0,
auth => 0,
@@ -3507,21 +3773,30 @@ sub upfile_drop_add {
if ($entries{$fields{'username'}}
ne &LONCAPA::clean_username($entries{$fields{'username'}})) {
$r->print('
'.
- &mt('[_1]: Unacceptable username for user [_2] [_3] [_4] [_5]',
- $entries{$fields{'username'}},$fname,$mname,$lname,$gen).
- '');
+ &mt('[_1]: Unacceptable username for user [_2] [_3] [_4] [_5]',
+ ''.$entries{$fields{'username'}}.'',$fname,$mname,$lname,$gen));
next;
} else {
+ if ($entries{$fields{'domain'}}
+ ne &LONCAPA::clean_domain($entries{$fields{'domain'}})) {
+ $r->print('
'. ''.$entries{$fields{'domain'}}.
+ ': '.&mt('Unacceptable domain for user [_2] [_3] [_4] [_5]',$fname,$mname,$lname,$gen));
+ next;
+ }
my $username = $entries{$fields{'username'}};
+ my $userdomain = $entries{$fields{'domain'}};
+ if ($userdomain eq '') {
+ $userdomain = $domain;
+ }
if (defined($fields{'sec'})) {
if (defined($entries{$fields{'sec'}})) {
$entries{$fields{'sec'}} =~ s/\W//g;
my $item = $entries{$fields{'sec'}};
if ($item eq "none" || $item eq 'all') {
- $r->print('
'.&mt('[_1]: Unable to enroll user [_2] [_3] [_4] [_5] in a section named "[_6]" - this is a reserved word.',$username,$fname,$mname,$lname,$gen,$item));
+ $r->print('
'.&mt('[_1]: Unable to enroll user [_2] [_3] [_4] [_5] in a section named "[_6]" - this is a reserved word.',''.$username.'',$fname,$mname,$lname,$gen,$item));
next;
} elsif (exists($curr_groups{$item})) {
- $r->print('
'.&mt('[_1]: Unable to enroll user [_2] [_3] [_4] [_5] in a section named "[_6]" - this is a course group.',$username,$fname,$mname,$lname,$gen,$item).' '.&mt('Section names and group names must be distinct.'));
+ $r->print('
'.&mt('[_1]: Unable to enroll user [_2] [_3] [_4] [_5] in a section named "[_6]" - this is a course group.',''.$username.'',$fname,$mname,$lname,$gen,$item).' '.&mt('Section names and group names must be distinct.'));
next;
} else {
push(@secs,$item);
@@ -3530,10 +3805,10 @@ sub upfile_drop_add {
}
if ($env{'request.course.sec'} ne '') {
@secs = ($env{'request.course.sec'});
- if (ref($userlist{$username.':'.$domain}) eq 'ARRAY') {
- my $currsec = $userlist{$username.':'.$domain}[$secidx];
+ if (ref($userlist{$username.':'.$userdomain}) eq 'ARRAY') {
+ my $currsec = $userlist{$username.':'.$userdomain}[$secidx];
if ($currsec ne $env{'request.course.sec'}) {
- $r->print('
'.&mt('[_1]: Unable to enroll user [_2] [_3] [_4] [_5] in a section named "[_6]".',$username,$fname,$mname,$lname,$gen,$secs[0]).'
');
+ $r->print('
'.&mt('[_1]: Unable to enroll user [_2] [_3] [_4] [_5] in a section named "[_6]".',''.$username.'',$fname,$mname,$lname,$gen,$secs[0]).'
');
if ($currsec eq '') {
$r->print(&mt('This user already has an active/future student role in the course, unaffiliated to any section.'));
@@ -3562,7 +3837,15 @@ sub upfile_drop_add {
if (defined($fields{'email'})) {
if (defined($entries{$fields{'email'}})) {
$email=$entries{$fields{'email'}};
- unless ($email=~/^[^\@]+\@[^\@]+$/) { $email=''; } }
+ unless ($email=~/^[^\@]+\@[^\@]+$/) { $email=''; }
+ }
+ }
+ # determine affiliation
+ my $inststatus='';
+ if (defined($fields{'inststatus'})) {
+ if (defined($entries{$fields{'inststatus'}})) {
+ $inststatus=$entries{$fields{'inststatus'}};
+ }
}
# determine user password
my $password = $genpwd;
@@ -3583,8 +3866,13 @@ sub upfile_drop_add {
}
if ($role eq '') {
my $rolestr = join(', ',@permitted_roles);
- $r->print('
'.
- &mt('[_1]: You do not have permission to add the requested role [_2] for the user.',$entries{$fields{'username'}},$entries{$fields{'role'}}).'
'.&mt('Allowable role(s) is/are: [_1].',$rolestr)."\n");
+ $r->print('
'
+ .&mt('[_1]: You do not have permission to add the requested role [_2] for the user.'
+ ,''.$entries{$fields{'username'}}.''
+ ,$entries{$fields{'role'}})
+ .'
'
+ .&mt('Allowable role(s) is/are: [_1].',$rolestr)."\n"
+ );
next;
}
}
@@ -3593,16 +3881,16 @@ sub upfile_drop_add {
$role = $defaultrole;
}
# Clean up whitespace
- foreach (\$domain,\$username,\$id,\$fname,\$mname,
- \$lname,\$gen) {
+ foreach (\$id,\$fname,\$mname,\$lname,\$gen) {
$$_ =~ s/(\s+$|^\s+)//g;
}
# check against rules
my $checkid = 0;
my $newuser = 0;
my (%rulematch,%inst_results,%idinst_results);
- my $uhome=&Apache::lonnet::homeserver($username,$domain);
+ my $uhome=&Apache::lonnet::homeserver($username,$userdomain);
if ($uhome eq 'no_host') {
+ next if ($userdomain ne $domain);
$checkid = 1;
$newuser = 1;
my $checkhash;
@@ -3618,38 +3906,40 @@ sub upfile_drop_add {
}
} else {
if ($context eq 'course' || $context eq 'author') {
- if ($role eq '') {
- my @checkroles;
- foreach my $role (@poss_roles) {
- my $endkey;
- if ($role ne 'st') {
- $endkey = ':'.$role;
- }
- if (exists($userlist{$username.':'.$domain.$endkey})) {
- if (!grep(/^\Q$role\E$/,@checkroles)) {
- push(@checkroles,$role);
+ if ($userdomain eq $domain ) {
+ if ($role eq '') {
+ my @checkroles;
+ foreach my $role (@poss_roles) {
+ my $endkey;
+ if ($role ne 'st') {
+ $endkey = ':'.$role;
+ }
+ if (exists($userlist{$username.':'.$userdomain.$endkey})) {
+ if (!grep(/^\Q$role\E$/,@checkroles)) {
+ push(@checkroles,$role);
+ }
}
}
+ if (@checkroles > 0) {
+ %canmodify = &can_modify_userinfo($context,$domain,\@userinfo,\@checkroles);
+ }
+ } elsif (ref($modifiable_fields{$role}) eq 'HASH') {
+ %canmodify = %{$modifiable_fields{$role}};
}
- if (@checkroles > 0) {
- %canmodify = &can_modify_userinfo($context,$domain,\@userinfo,\@checkroles);
- }
- } elsif (ref($modifiable_fields{$role}) eq 'HASH') {
- %canmodify = %{$modifiable_fields{$role}};
}
- }
- my @newinfo = (\$fname,\$mname,\$lname,\$gen,\$email,\$id);
- for (my $i=0; $i<@userinfo; $i++) {
- if (${$newinfo[$i]} ne '') {
- if (!$canmodify{$userinfo[$i]}) {
- ${$newinfo[$i]} = '';
+ my @newinfo = (\$fname,\$mname,\$lname,\$gen,\$email,\$id);
+ for (my $i=0; $i<@newinfo; $i++) {
+ if (${$newinfo[$i]} ne '') {
+ if (!$canmodify{$userinfo[$i]}) {
+ ${$newinfo[$i]} = '';
+ }
}
}
}
}
if ($id ne '') {
if (!$newuser) {
- my %idhash = &Apache::lonnet::idrget($domain,($username));
+ my %idhash = &Apache::lonnet::idrget($userdomain,($username));
if ($idhash{$username} ne $id) {
$checkid = 1;
}
@@ -3657,14 +3947,14 @@ sub upfile_drop_add {
if ($checkid) {
my $checkhash;
my $checks = { 'id' => 1 };
- $checkhash->{$username.':'.$domain} = { 'newuser' => $newuser,
+ $checkhash->{$username.':'.$userdomain} = { 'newuser' => $newuser,
'id' => $id };
&Apache::loncommon::user_rule_check($checkhash,$checks,
\%alerts,\%rulematch,\%idinst_results,\%curr_rules,
\%got_rules);
if (ref($alerts{'id'}) eq 'HASH') {
- if (ref($alerts{'id'}{$domain}) eq 'HASH') {
- next if ($alerts{'id'}{$domain}{$id});
+ if (ref($alerts{'id'}{$userdomain}) eq 'HASH') {
+ next if ($alerts{'id'}{$userdomain}{$id});
}
}
}
@@ -3679,15 +3969,15 @@ sub upfile_drop_add {
if (@secs > 0) {
$sec = $secs[0];
}
- &modifystudent($domain,$username,$cid,$sec,
+ &modifystudent($userdomain,$username,$cid,$sec,
$desiredhost,$context);
$roleresult =
&Apache::lonnet::modifystudent
- ($domain,$username,$id,$amode,$password,
+ ($userdomain,$username,$id,$amode,$password,
$fname,$mname,$lname,$gen,$sec,$enddate,
$startdate,$env{'form.forceid'},
$desiredhost,$email,'manual','',$cid,
- '',$context);
+ '',$context,$inststatus);
$userresult = $roleresult;
} else {
if ($role ne '') {
@@ -3702,12 +3992,12 @@ sub upfile_drop_add {
foreach my $sec (@secs) {
($userres{$sec},$authres{$sec},$roleres{$sec},$idres{$sec}) =
&modifyuserrole($context,$setting,
- $changeauth,$cid,$domain,$username,
+ $changeauth,$cid,$userdomain,$username,
$id,$amode,$password,$fname,
$mname,$lname,$gen,$sec,
$env{'form.forceid'},$desiredhost,
$email,$role,$enddate,
- $startdate,$checkid);
+ $startdate,$checkid,$inststatus);
}
} elsif (@secs > 0) {
$singlesec = $secs[0];
@@ -3718,11 +4008,12 @@ sub upfile_drop_add {
if (!$multiple) {
($userresult,$authresult,$roleresult,$idresult) =
&modifyuserrole($context,$setting,
- $changeauth,$cid,$domain,$username,
+ $changeauth,$cid,$userdomain,$username,
$id,$amode,$password,$fname,
$mname,$lname,$gen,$singlesec,
$env{'form.forceid'},$desiredhost,
- $email,$role,$enddate,$startdate,$checkid);
+ $email,$role,$enddate,$startdate,
+ $checkid,$inststatus);
}
}
if ($multiple) {
@@ -3730,27 +4021,27 @@ sub upfile_drop_add {
$flushc =
&user_change_result($r,$userres{$sec},$authres{$sec},
$roleres{$sec},$idres{$sec},\%counts,$flushc,
- $username,\%userchg);
+ $username,$userdomain,\%userchg);
}
} else {
$flushc =
&user_change_result($r,$userresult,$authresult,
$roleresult,$idresult,\%counts,$flushc,
- $username,\%userchg);
+ $username,$userdomain,\%userchg);
}
} else {
if ($context eq 'course') {
$r->print('
'.
- &mt('[_1]: Unable to enroll. No password specified.',$username)
+ &mt('[_1]: Unable to enroll. No password specified.',''.$username.'')
);
} elsif ($context eq 'author') {
$r->print('
'.
- &mt('[_1]: Unable to add co-author. No password specified.',$username)
+ &mt('[_1]: Unable to add co-author. No password specified.',''.$username.'')
);
} else {
$r->print('
'.
- &mt('[_1]: Unable to add user. No password specified.',$username)
+ &mt('[_1]: Unable to add user. No password specified.',''.$username.'')
);
}
}
@@ -3785,7 +4076,7 @@ sub upfile_drop_add {
''.
&mt('There are no students with current/future access to the course.').
''."\n");
- } else {
+ } elsif (ref($classlist) eq 'HASH') {
# Remove the students we just added from the list of students.
foreach my $line (@userdata) {
my %entries=&Apache::loncommon::record_sep($line);
@@ -3847,13 +4138,13 @@ sub print_namespacing_alerts {
sub user_change_result {
my ($r,$userresult,$authresult,$roleresult,$idresult,$counts,$flushc,
- $username,$userchg) = @_;
+ $username,$userdomain,$userchg) = @_;
my $okresult = 0;
if ($userresult ne 'ok') {
if ($userresult =~ /^error:(.+)$/) {
my $error = $1;
$r->print('
'.
- &mt('[_1]: Unable to add/modify: [_2]',$username,$error));
+ &mt('[_1]: Unable to add/modify: [_2]',''.$username.':'.$userdomain.'',$error));
}
} else {
$counts->{'user'} ++;
@@ -3863,7 +4154,7 @@ sub user_change_result {
if ($authresult =~ /^error:(.+)$/) {
my $error = $1;
$r->print('
'.
- &mt('[_1]: Unable to modify authentication: [_2]',$username,$error));
+ &mt('[_1]: Unable to modify authentication: [_2]',''.$username.':'.$userdomain.'',$error));
}
} else {
$counts->{'auth'} ++;
@@ -3873,7 +4164,7 @@ sub user_change_result {
if ($roleresult =~ /^error:(.+)$/) {
my $error = $1;
$r->print('
'.
- &mt('[_1]: Unable to add role: [_2]',$username,$error));
+ &mt('[_1]: Unable to add role: [_2]',''.$username.':'.$userdomain.'',$error));
}
} else {
$counts->{'role'} ++;
@@ -3881,7 +4172,7 @@ sub user_change_result {
}
if ($okresult) {
$flushc++;
- $userchg->{$username}=1;
+ $userchg->{$username.':'.$userdomain}=1;
$r->print('. ');
if ($flushc>15) {
$r->rflush;
@@ -4143,7 +4434,7 @@ sub update_user_list {
$r->print('
'.&mt("$result_text{'ok'}{$choice} role(s) for [quant,_1,user,users,no users].",$count).'
'); if ($count > 0) { if ($choice eq 'revoke' || $choice eq 'drop') { - $r->print(''.&mt('Re-enabling will re-activate data for the role.
')); + $r->print(''.&mt('Re-enabling will re-activate data for the role.').'
'); } # Flush the course logs so reverse user roles immediately updated &Apache::lonnet::flushcourselogs(); @@ -4164,11 +4455,9 @@ sub classlist_drop { my ($scope,$uname,$udom,$now) = @_; my ($cdom,$cnum) = ($scope=~m{^/($match_domain)/($match_courseid)}); if (&Apache::lonnet::is_course($cdom,$cnum)) { - my $user = $uname.':'.$udom; if (!&active_student_roles($cnum,$cdom,$uname,$udom)) { - my $result = - &Apache::lonnet::cput('classlist', - { $user => $now },$cdom,$cnum); + my %user; + my $result = &update_classlist($cdom,$cnum,$udom,$uname,\%user,$now); return &mt('Drop from classlist: [_1]', ''.$result.'').'