--- loncom/metadata_database/searchcat.pl 2013/07/25 19:11:10 1.79 +++ loncom/metadata_database/searchcat.pl 2013/08/12 16:52:00 1.80 @@ -2,7 +2,7 @@ # The LearningOnline Network # searchcat.pl "Search Catalog" batch script # -# $Id: searchcat.pl,v 1.79 2013/07/25 19:11:10 raeburn Exp $ +# $Id: searchcat.pl,v 1.80 2013/08/12 16:52:00 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -74,6 +74,7 @@ use IO::File; use HTML::TokeParser; use GDBM_File; use POSIX qw(strftime mktime); +use Mail::Send; use Apache::lonnet(); @@ -209,6 +210,7 @@ foreach my $dom (@domains) { if ($oneuser) { @homeusers=($oneuser); } + # # Loop through the users foreach my $user (@homeusers) { @@ -315,9 +317,6 @@ foreach my $dom (@domains) { if (exists($idstoadd{$addid})) { push(@{$duplicates{$addid}},$uname); } else { - if ((exists($names_by_id{$addid})) && ($names_by_id{$addid} ne $uname)) { - &log(0,"In ids.db ($dom) $addid => $names_by_id{$addid} will be replaced by $addid => $uname"); - } $idstoadd{$addid} = $uname; } } @@ -344,13 +343,47 @@ foreach my $dom (@domains) { } } if (keys(%idstoadd) > 0) { - my $putresult = &Apache::lonnet::put_dom('ids',\%idstoadd,$dom,$hostid); - if ($putresult eq 'ok') { - foreach my $id (sort(keys(%idstoadd))) { - &log(0,"Record added to ids.db for $dom -- $id => ".$idstoadd{$id}); + my $idmessage = ''; + my %newids; + foreach my $addid (sort(keys(%idstoadd))) { + if ((exists($names_by_id{$addid})) && ($names_by_id{$addid} ne $idstoadd{$addid}) && !($idstodelete{$addid})) { + &log(0,"Two usernames associated with a single ID $addid in domain: $dom: $names_by_id{$addid} (current) and $idstoadd{$addid}\n"); + $idmessage .= "$addid,$names_by_id{$addid},$idstoadd{$addid}\n"; + } else { + $newids{$addid} = $idstoadd{$addid}; + } + } + if (keys(%newids) > 0) { + my $putresult = &Apache::lonnet::put_dom('ids',\%idstoadd,$dom,$hostid); + if ($putresult eq 'ok') { + foreach my $id (sort(keys(%idstoadd))) { + &log(0,"Record added to ids.db for $dom -- $id => ".$idstoadd{$id}); + } + } else { + &log(0,"Error: '$putresult' occurred when attempting to add records to ids.db for $dom"); + } + } + if ($idmessage) { + my $to = &Apache::loncommon::build_recipient_list(undef,'idconflictsmail',$dom); + if ($to ne '') { + my $msg = new Mail::Send; + $msg->to($to); + $msg->subject('LON-CAPA studentIDs conflict'); + my $lonhost = $Apache::lonnet::perlvar{'lonHostID'}; + my $hostname = &Apache::lonnet::hostname($lonhost); + my $replytoaddress = 'do-not-reply@'.$hostname; + $msg->add('Reply-to',$replytoaddress); + $msg->add('From',"www@$hostname"); + $msg->add('Content-type','text/plain; charset=UTF-8'); + if (my $fh = $msg->open()) { + print $fh + 'The following IDs are used for more than one user in your domain:'."\n". + 'Each row contains: Student/Employee ID, Current username in ids.db file, '. + 'Additional username'."\n\n". + $idmessage; + $fh->close; + } } - } else { - &log(0,"Error: '$putresult' occurred when attempting to add records to ids.db for $dom"); } } if (keys(%duplicates) > 0) {