');
my ($fixedauth,$varauth,$authmsg);
- if ($rulematch) {
+ if (ref($rulematch{$ccuname.':'.$ccdomain}) eq 'HASH') {
+ my $matchedrule = $rulematch{$ccuname.':'.$ccdomain}{'username'};
+ my ($rules,$ruleorder) =
+ &Apache::lonnet::inst_userrules($ccdomain,'username');
if (ref($rules) eq 'HASH') {
- if (ref($rules->{$rulematch}) eq 'HASH') {
- my $authtype = $rules->{$rulematch}{'authtype'};
+ if (ref($rules->{$matchedrule}) eq 'HASH') {
+ my $authtype = $rules->{$matchedrule}{'authtype'};
if ($authtype !~ /^(krb4|krb5|int|fsys|loc)$/) {
$r->print(&Apache::lonuserutils::set_login($ccdomain,$authformkrb,$authformint,$authformloc));
} else {
- my $authparm = $rules->{$rulematch}{'authparm'};
+ my $authparm = $rules->{$matchedrule}{'authparm'};
if ($authtype =~ /^krb(4|5)$/) {
my $ver = $1;
if ($authparm ne '') {
@@ -801,12 +817,12 @@ $lt{'hs'}: $home_server_pick
KERB
- $authmsg = $rules->{$rulematch}{'authmsg'};
+ $authmsg = $rules->{$matchedrule}{'authmsg'};
}
} else {
$fixedauth =
''."\n";
- if ($rules->{$rulematch}{'authparmfixed'}) {
+ if ($rules->{$matchedrule}{'authparmfixed'}) {
$fixedauth .=
''."\n";
} else {
@@ -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");
-