'.
&personal_data_display($ccuname,$ccdomain,$newuser,
@@ -886,7 +902,7 @@ ENDNOPORTPRIV
unless ($tmp =~ /^(con_lost|error)/i) {
my $now=time;
my %lt=&Apache::lonlocal::texthash(
- 'rer' => "Revoke Existing Roles",
+ 'rer' => "Existing Roles",
'rev' => "Revoke",
'del' => "Delete",
'ren' => "Re-Enable",
@@ -1450,8 +1466,8 @@ sub update_user_data {
$env{'form.ccdomain'});
# Error messages
my $error = '
'.&mt('Error').': ';
- my $end = ''.
- '
'.
&mt('Return to previous page').''.&Apache::loncommon::end_page();
my $title;
@@ -1489,25 +1505,25 @@ sub update_user_data {
$r->print(&update_result_form($uhome));
# Check Inputs
if (! $env{'form.ccuname'} ) {
- $r->print($error.&mt('No login name specified').'.'.$end);
+ $r->print($error.&mt('No login name specified').'.'.$end.$rtnlink);
return;
}
if ( $env{'form.ccuname'} ne
&LONCAPA::clean_username($env{'form.ccuname'}) ) {
$r->print($error.&mt('Invalid login name').'. '.
&mt('Only letters, numbers, periods, dashes, @, and underscores are valid').'.'.
- $end);
+ $end.$rtnlink);
return;
}
if (! $env{'form.ccdomain'} ) {
- $r->print($error.&mt('No domain specified').'.'.$end);
+ $r->print($error.&mt('No domain specified').'.'.$end.$rtnlink);
return;
}
if ( $env{'form.ccdomain'} ne
&LONCAPA::clean_domain($env{'form.ccdomain'}) ) {
$r->print($error.&mt ('Invalid domain name').'. '.
&mt('Only letters, numbers, periods, dashes, and underscores are valid').'.'.
- $end);
+ $end.$rtnlink);
return;
}
if (! exists($env{'form.makeuser'})) {
@@ -1543,19 +1559,19 @@ sub update_user_data {
# If they are creating a new user but have not specified login
# information this will be caught below.
} else {
- $r->print($error.&mt('Invalid login mode or password').$end);
+ $r->print($error.&mt('Invalid login mode or password').$end.$rtnlink);
return;
}
$r->print('
'.&mt('User [_1] in domain [_2]',
$env{'form.ccuname'}, $env{'form.ccdomain'}).'
');
-
+ my (%alerts,%rulematch,%inst_results,%curr_rules);
if ($env{'form.makeuser'}) {
$r->print('
'.&mt('Creating new account.').'
');
# Check for the authentication mode and password
if (! $amode || ! $genpwd) {
- $r->print($error.&mt('Invalid login mode or password').$end);
+ $r->print($error.&mt('Invalid login mode or password').$end.$rtnlink);
return;
}
# Determine desired host
@@ -1566,13 +1582,43 @@ sub update_user_data {
my %home_servers =
&Apache::lonnet::get_servers($env{'form.ccdomain'},'library');
if (! exists($home_servers{$desiredhost})) {
- $r->print($error.&mt('Invalid home server specified'));
+ $r->print($error.&mt('Invalid home server specified').$end.$rtnlink);
return;
}
}
+ # Check ID format
+ my %checkhash;
+ my %checks = ('id' => 1);
+ %{$checkhash{$env{'form.ccuname'}.':'.$env{'form.ccdomain'}}} = (
+ 'newuser' => 1,
+ 'id' => $env{'form.cid'},
+ );
+ if ($env{'form.cid'} ne '') {
+ &Apache::loncommon::user_rule_check(\%checkhash,\%checks,\%alerts,
+ \%rulematch,\%inst_results,\%curr_rules);
+ if (ref($alerts{'id'}) eq 'HASH') {
+ if (ref($alerts{'id'}{$env{'form.ccdomain'}}) eq 'HASH') {
+ my $domdesc =
+ &Apache::lonnet::domain($env{'form.ccdomain'},'description');
+ if ($alerts{'id'}{$env{'form.ccdomain'}}{$env{'form.cid'}}) {
+ my $userchkmsg;
+ if (ref($curr_rules{$env{'form.ccdomain'}}) eq 'HASH') {
+ $userchkmsg =
+ &Apache::loncommon::instrule_disallow_msg('id',
+ $domdesc,1).
+ &Apache::loncommon::user_rule_formats($env{'form.ccdomain'},
+ $domdesc,$curr_rules{$env{'form.ccdomain'}}{'id'},'id');
+ }
+ $r->print($error.&mt('Invalid ID format').$end.
+ $userchkmsg.$rtnlink);
+ return;
+ }
+ }
+ }
+ }
# Call modifyuser
my $result = &Apache::lonnet::modifyuser
- ($env{'form.ccdomain'},$env{'form.ccuname'},$env{'form.cstid'},
+ ($env{'form.ccdomain'},$env{'form.ccuname'},$env{'form.cid'},
$amode,$genpwd,$env{'form.cfirstname'},
$env{'form.cmiddlename'},$env{'form.clastname'},
$env{'form.cgeneration'},undef,$desiredhost,
@@ -1586,7 +1632,7 @@ sub update_user_data {
($env{'form.login'} ne '' )) {
# Modify user privileges
if (! $amode || ! $genpwd) {
- $r->print($error.'Invalid login mode or password'.$end);
+ $r->print($error.'Invalid login mode or password'.$end.$rtnlink);
return;
}
# Only allow authentification modification if the person has authority
@@ -1599,7 +1645,7 @@ sub update_user_data {
($env{'form.ccuname'},$env{'form.ccdomain'}));
} else {
# Okay, this is a non-fatal error.
- $r->print($error.&mt('You do not have the authority to modify this users authentification information').'.');
+ $r->print($error.&mt('You do not have the authority to modify this users authentification information').'.'.$end);
}
}
##
@@ -1607,17 +1653,40 @@ sub update_user_data {
# Check for need to change
my %userenv = &Apache::lonnet::get
('environment',['firstname','middlename','lastname','generation',
- 'permanentemail','portfolioquota','inststatus'],
+ 'id','permanentemail','portfolioquota','inststatus'],
$env{'form.ccdomain'},$env{'form.ccuname'});
my ($tmp) = keys(%userenv);
if ($tmp =~ /^(con_lost|error)/i) {
%userenv = ();
}
# Check to see if we need to change user information
- foreach my $item ('firstname','middlename','lastname','generation','permanentemail') {
+ foreach my $item ('firstname','middlename','lastname','generation','permanentemail','id') {
# Strip leading and trailing whitespace
$env{'form.c'.$item} =~ s/(\s+$|^\s+)//g;
}
+ # Check to see if we can change the ID/student number
+ my $forceid = $env{'form.forceid'};
+ my $recurseid = $env{'form.recurseid'};
+ my $newuser = 0;
+ my $disallowed_id = 0;
+ my (%alerts,%rulematch,%idinst_results,%curr_rules,%got_rules);
+ if (!$forceid) {
+ $env{'form.cid'} = $userenv{'id'};
+ } elsif ($env{'form.cid'} ne $userenv{'id'}) {
+ my $checkhash;
+ my $checks = { 'id' => 1 };
+ $checkhash->{$env{'form.ccuname'}.':'.$env{'form.ccdomain'}} =
+ { 'newuser' => $newuser,
+ 'id' => $env{'form.cid'},
+ };
+ &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'}{$env{'form.ccdomain'}}) eq 'HASH') {
+ $disallowed_id = 1;
+ }
+ }
+ }
my ($quotachanged,$namechanged,$oldportfolioquota,$newportfolioquota,
$inststatus,$isdefault,$defquotatext);
my ($defquota,$settingstatus) =
@@ -1673,6 +1742,7 @@ sub update_user_data {
$env{'form.cmiddlename'} ne $userenv{'middlename'} ||
$env{'form.clastname'} ne $userenv{'lastname'} ||
$env{'form.cgeneration'} ne $userenv{'generation'} ||
+ $env{'form.cid'} ne $userenv{'id'} ||
$env{'form.cpermanentemail'} ne $userenv{'permanentemail'} )) {
$namechanged = 1;
}
@@ -1682,6 +1752,7 @@ sub update_user_data {
$changeHash{'middlename'} = $env{'form.cmiddlename'};
$changeHash{'lastname'} = $env{'form.clastname'};
$changeHash{'generation'} = $env{'form.cgeneration'};
+ $changeHash{'id'} = $env{'form.cid'};
$changeHash{'permanentemail'} = $env{'form.cpermanentemail'};
my $putresult = &Apache::lonnet::put
('environment',\%changeHash,
@@ -1694,6 +1765,7 @@ sub update_user_data {
'mddl' => "middle",
'lst' => "last",
'gen' => "generation",
+ 'id' => "ID/Student number",
'mail' => "permanent e-mail",
'disk' => "disk space allocated to portfolio files",
'prvs' => "Previous",
@@ -1707,6 +1779,7 @@ sub update_user_data {
$lt{'mddl'} |
$lt{'lst'} |
$lt{'gen'} |
+
$lt{'id'} |
$lt{'mail'} |
$lt{'disk'} |
$lt{'prvs'} |
@@ -1714,6 +1787,7 @@ sub update_user_data {
$userenv{'middlename'} |
$userenv{'lastname'} |
$userenv{'generation'} |
+ $userenv{'id'} |
$userenv{'permanentemail'} |
$oldportfolioquota Mb |
@@ -1722,10 +1796,24 @@ sub update_user_data {
$env{'form.cmiddlename'} |
$env{'form.clastname'} |
$env{'form.cgeneration'} |
+
$env{'form.cid'} |
$env{'form.cpermanentemail'} |
$newportfolioquota Mb $defquotatext |
END
+ if (($forceid) && ($recurseid) && (!$disallowed_id) &&
+ (&Apache::lonnet::allowed('mau',$env{'form.ccdomain'}))) {
+ my %userupdate = (
+ lastname => $env{'form.clasaname'},
+ middlename => $env{'form.cmiddlename'},
+ firstname => $env{'form.cfirstname'},
+ generation => $env{'fora.cgeneration'},
+ id => $env{'form.cid'},
+ );
+ my $idresult = &propagate_id_change($env{'form.ccname'},
+ $env{'form.ccdomain'},\%userupdate);
+ $r->print('
'.$idresult.'
');
+ }
if (($env{'form.ccdomain'} eq $env{'user.domain'}) &&
($env{'form.ccuname'} eq $env{'user.name'})) {
my %newenvhash;
@@ -1749,12 +1837,19 @@ END
# They did not want to change the users name but we can
# still tell them what the name is
my %lt=&Apache::lonlocal::texthash(
+ 'id' => "ID/Student number",
'mail' => "Permanent e-mail",
'disk' => "Disk space allocated to user's portfolio files",
);
$r->print(<<"END");
-
$userenv{'firstname'} $userenv{'middlename'} $userenv{'lastname'} $userenv{'generation'} ($lt{'mail'}: $userenv{'permanentemail'})
+
$userenv{'firstname'} $userenv{'middlename'} $userenv{'lastname'} $userenv{'generation'}
END
+ if ($userenv{'permanentemail'} eq '') {
+ $r->print('
');
+ } else {
+ $r->print(' ('.$lt{'mail'}.': '.
+ $userenv{'permanentemail'}.')');
+ }
if ($putresult eq 'ok') {
if ($oldportfolioquota != $newportfolioquota) {
$r->print('
'.$lt{'disk'}.': '.$newportfolioquota.' Mb '.
@@ -1766,6 +1861,7 @@ END
}
##
my $now=time;
+ my $rolechanges = 0;
$r->print(''.&mt('Modifying Roles').'
');
foreach my $key (keys (%env)) {
next if (! $env{$key});
@@ -1786,8 +1882,8 @@ END
$env{'form.ccdomain'},$now);
$r->print($result);
}
- }
- if ($key=~m{^form\.rev\:([^_]+)_cr\.cr/($match_domain)/($match_username)/(\w+)$ }s) {
+ }
+ if ($key=~m{^form\.rev\:([^_]+)_cr\.cr/($match_domain)/($match_username)/(\w+)$}s) {
# Revoke custom role
$r->print(&mt('Revoking custom role:').
' '.$4.' by '.$3.':'.$2.' in '.$1.': '.
@@ -1795,6 +1891,7 @@ END
$env{'form.ccuname'},$1,$2,$3,$4).
'
');
}
+ $rolechanges ++;
} elsif ($key=~/^form\.del/) {
if ($key=~/^form\.del\:([^\_]+)\_([^\_\.]+)$/) {
# Delete standard role
@@ -1820,6 +1917,7 @@ END
$env{'form.ccuname'},$url,$rdom,$rnam,$rolename,$now,
0,1).'
');
}
+ $rolechanges ++;
} elsif ($key=~/^form\.ren/) {
my $udom = $env{'form.ccdomain'};
my $uname = $env{'form.ccuname'};
@@ -1858,6 +1956,7 @@ END
$r->print(&mt('Re-enabling custom role [_1] by [_2]@[_3] in [_4] : [_5]',
$rolename,$rnam,$rdom,$url,$result).'
');
}
+ $rolechanges ++;
} elsif ($key=~/^form\.act/) {
my $udom = $env{'form.ccdomain'};
my $uname = $env{'form.ccuname'};
@@ -1971,10 +2070,14 @@ END
}
$r->print(' '.&mt('Please go back and choose a different section name.').'
');
}
+ $rolechanges ++;
}
} # End of foreach (keys(%env))
# Flush the course logs so reverse user roles immediately updated
&Apache::lonnet::flushcourselogs();
+ if (!$rolechanges) {
+ $r->print(&mt('No roles to modify'));
+ }
$r->print(&Apache::loncommon::end_page());
}
@@ -2434,12 +2537,13 @@ sub handler {
} elsif ($env{'form.action'} eq 'singleuser' && $permission->{'cusr'}) {
my $phase = $env{'form.phase'};
my @search = ('srchterm','srchby','srchin','srchtype','srchdomain');
+ &Apache::loncreateuser::restore_prev_selections();
+ my $srch;
+ foreach my $item (@search) {
+ $srch->{$item} = $env{'form.'.$item};
+ }
if (($phase eq 'get_user_info') || ($phase eq 'userpicked')) {
- my $srch;
- foreach my $item (@search) {
- $srch->{$item} = $env{'form.'.$item};
- }
if ($env{'form.phase'} eq 'get_user_info') {
my ($currstate,$response,$forcenewuser,$results) =
&user_search_result($srch);
@@ -2465,7 +2569,7 @@ sub handler {
$response = '';
}
&print_user_modification_page($r,$ccuname,$ccdomain,
- $srch,$response);
+ $srch,$response,$context);
} elsif ($currstate eq 'query') {
&print_user_query_page($r,'createuser');
} else {
@@ -2475,12 +2579,13 @@ sub handler {
} elsif ($env{'form.phase'} eq 'userpicked') {
my $ccuname = &LONCAPA::clean_username($env{'form.seluname'});
my $ccdomain = &LONCAPA::clean_domain($env{'form.seludom'});
- &print_user_modification_page($r,$ccuname,$ccdomain,$srch);
+ &print_user_modification_page($r,$ccuname,$ccdomain,$srch,'',
+ $context);
}
} elsif ($env{'form.phase'} eq 'update_user_data') {
&update_user_data($r);
} else {
- &print_username_entry_form($r);
+ &print_username_entry_form($r,undef,$srch);
}
} elsif ($env{'form.action'} eq 'custom' && $permission->{'custom'}) {
if ($env{'form.phase'} eq 'set_custom_roles') {
@@ -2489,21 +2594,30 @@ sub handler {
&custom_role_editor($r);
}
} elsif ($env{'form.action'} eq 'listusers' && $permission->{'view'}) {
- $r->print(&header());
+ my ($cb_jscript,$jscript,$totcodes,$codetitles,$idlist,$idlist_titles);
+ my $formname = 'studentform';
+ if ($context eq 'domain' && $env{'form.roletype'} eq 'course') {
+ ($cb_jscript,$jscript,$totcodes,$codetitles,$idlist,$idlist_titles) =
+ &Apache::lonuserutils::courses_selector($env{'request.role.domain'},
+ $formname);
+ my $js = &add_script($jscript).$cb_jscript;
+ my $loadcode =
+ &Apache::lonuserutils::course_selector_loadcode($formname);
+ if ($loadcode ne '') {
+ $r->print(&header($js,{'onload' => $loadcode,}));
+ } else {
+ $r->print(&header($js));
+ }
+ } else {
+ $r->print(&header());
+ }
&Apache::lonhtmlcommon::add_breadcrumb
({href=>'/adm/createuser?action=listusers',
- text=>"List Users' Roles"});
- $r->print(&Apache::lonhtmlcommon::breadcrumbs("List Users' Roles",
+ text=>"List Users"});
+ $r->print(&Apache::lonhtmlcommon::breadcrumbs("List Users",
'User_Management_List'));
- if (! exists($env{'form.state'})) {
- &Apache::lonuserutils::print_html_classlist($r,undef,$permission);
- } elsif ($env{'form.state'} eq 'csv') {
- &Apache::lonuserutils::print_html_classlist($r,'csv',$permission);
- } elsif ($env{'form.state'} eq 'excel') {
- &Apache::lonuserutils::print_html_classlist($r,'excel',$permission);
- } else {
- &Apache::lonuserutils::print_html_classlist($r,undef,$permission);
- }
+ &Apache::lonuserutils::print_userlist($r,undef,$permission,$context,
+ $formname,$totcodes,$codetitles,$idlist,$idlist_titles);
$r->print(&Apache::loncommon::end_page());
} elsif ($env{'form.action'} eq 'expire' && $permission->{'cusr'}) {
$r->print(&header());
@@ -2539,6 +2653,11 @@ sub header {
return $start_page;
}
+sub add_script {
+ my ($js) = @_;
+ return '';
+}
+
###############################################################
###############################################################
# Menu Phase One
@@ -2546,22 +2665,22 @@ sub print_main_menu {
my ($permission) = @_;
my @menu =
(
- { text => 'Upload a File of Users to Set Roles',
+ { text => 'Upload a File of Users to Modify/Create Users and/or Add roles',
help => 'User_Management_Upload',
action => 'upload',
permission => $permission->{'cusr'},
},
- { text => 'Set User Roles for an Individual User',
+ { text => 'Create User/Set User Roles for a single user',
help => 'User_Management_Single_User',
action => 'singleuser',
permission => $permission->{'cusr'},
},
-# { text => 'Display User Roles for Multiple Users',
-# help => 'User_Management_List',
-# action => 'listusers',
-# permission => $permission->{'view'},
-# },
-# { text => 'Expire User Roles ',
+ { text => 'Display Lists of Users',
+ help => 'User_Management_List',
+ action => 'listusers',
+ permission => $permission->{'view'},
+ },
+# { text => 'Expire User Roles',
# help => 'User_Management_Drops',
# action => 'expire',
# permission => $permission->{'cusr'},
@@ -2763,7 +2882,8 @@ sub user_search_result {
{&Apache::lonnet::get('environment',
['firstname',
'lastname',
- 'permanentemail'])};
+ 'permanentemail'],
+ $cudomain,$cuname)};
}
}
}