[LON-CAPA-cvs] cvs: loncom /enrollment Autoupdate.pl
raeburn
raeburn at source.lon-capa.org
Wed Dec 6 18:46:16 EST 2023
raeburn Wed Dec 6 23:46:16 2023 EDT
Modified files:
/loncom/enrollment Autoupdate.pl
Log:
- Sanity checking during automated update of user information using
institutional data to prevent deletion of first and last name, or
student/employee ID, in the case of institutional data feed issues.
Index: loncom/enrollment/Autoupdate.pl
diff -u loncom/enrollment/Autoupdate.pl:1.26 loncom/enrollment/Autoupdate.pl:1.27
--- loncom/enrollment/Autoupdate.pl:1.26 Wed Dec 6 23:38:45 2023
+++ loncom/enrollment/Autoupdate.pl Wed Dec 6 23:46:16 2023
@@ -1,7 +1,7 @@
#!/usr/bin/perl
#
# Automated Userinfo update script
-# $Id: Autoupdate.pl,v 1.26 2023/12/06 23:38:45 raeburn Exp $
+# $Id: Autoupdate.pl,v 1.27 2023/12/06 23:46:16 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -49,7 +49,7 @@
# find out which users we need to examine
my @domains = sort(&Apache::lonnet::current_machine_domains());
foreach my $dom (@domains) {
- my %domconfig = &Apache::lonnet::get_dom('configuration',['autoupdate'],
+ my %domconfig = &Apache::lonnet::get_dom('configuration',['autoupdate','usercreation'],
$dom);
#only run if configured to
my $run_update = 0;
@@ -74,7 +74,7 @@
# get courseIDs for domain
my %courses=&Apache::lonnet::courseiddump($dom,'.',1,'.','.','.',1,[$hostid],'.');
# get user information
- my (%users,%instusers,%instids,%counts);
+ my (%users,%instusers,%instids,%counts, at idrules);
my $dir = $Apache::lonnet::perlvar{lonUsersDir}.'/'.$dom;
&descend_tree($dom,$dir,0,\%users,\%courses,$allowed_inactivity,$check_unexpired);
my $resp = &localenroll::allusers_info($dom,\%instusers,\%instids,\%users,\%counts);
@@ -98,6 +98,11 @@
my @types = ('active','future');
my @roles = ('st');
my @cdoms = ($dom);
+ if (ref($domconfig{'usercreation'}) eq 'HASH') {
+ if (ref($domconfig{'usercreation'}{'id_rule'}) eq 'ARRAY') {
+ @idrules = @{$domconfig{'usercreation'}{'id_rule'}};
+ }
+ }
foreach my $uname (sort(keys(%users))) {
my %userhash = &Apache::lonnet::userenvironment($dom,$uname, at info);
my (@inststatuses);
@@ -132,12 +137,59 @@
}
foreach my $field (@fields) {
if ($userhash{$field} ne $instusers{$uname}{$field}) {
- $changed = 1;
- if ($settings->{'classlists'} == 1) {
- if ($field eq 'id') {
- $changes{'id'} = 1;
- } elsif ($field eq 'lastname' || $field eq 'firstname' || $field eq 'middlename' || $field eq 'generation') {
- $changes{'fullname'} = 1;
+ # Do not change student/employee ID when field is modifiable
+ # but institutional data is absent or does not match rules
+ # defined for IDs for institutional users in domain
+ if ($field eq 'id') {
+ if ($instusers{$uname}{$field} eq '') {
+ $instusers{$uname}{$field} = $userhash{$field};
+ next;
+ } elsif (@idrules > 0) {
+ my %idchecks;
+ if (&LONCAPA::localenroll::id_check($dom,$instusers{$uname}{$field},
+ \@idrules,\%idchecks) eq 'ok') {
+ my $matches;
+ foreach my $result (values(%idchecks)) {
+ if ($result) {
+ $matches = 1;
+ last;
+ }
+ }
+ if ($matches) {
+ $changed = 1;
+ } else {
+ $instusers{$uname}{$field} = $userhash{$field};
+ next;
+ }
+ }
+ }
+ } else {
+ $changed = 1;
+ }
+ if ($field eq 'id') {
+ $changes{'id'} = 1;
+ } elsif ($field eq 'lastname' || $field eq 'firstname' || $field eq 'middlename' || $field eq 'generation') {
+ $changes{'fullname'} = 1;
+ }
+ }
+ }
+ # Do not change name information when lastname and firstname are modifiable
+ # but institutional data is absent for both components of a user's name.
+ if ($changed) {
+ if ($changes{'fullname'}) {
+ my %modifiable;
+ map { $modifiable{$_} = 1; } @fields;
+ if (($modifiable{'lastname'}) && ($modifiable{'firstname'}) &&
+ ($instusers{$uname}{'lastname'} eq '') && ($instusers{$uname}{'firstname'} eq '')) {
+ if ($changes{'fullname'}) {
+ undef($changes{'fullname'});
+ }
+ if ($changes{'id'}) {
+ foreach my $field ('lastname','firstname','middlename','generation') {
+ $instusers{$uname}{$field} = $userhash{$field};
+ }
+ } else {
+ undef($changed);
}
}
}
More information about the LON-CAPA-cvs
mailing list