version 1.23, 2016/01/27 22:23:18
|
version 1.24, 2021/09/01 02:14:42
|
Line 28
|
Line 28
|
use strict; |
use strict; |
use lib '/home/httpd/lib/perl'; |
use lib '/home/httpd/lib/perl'; |
use localenroll; |
use localenroll; |
|
use GDBM_File; |
use Apache::lonnet; |
use Apache::lonnet; |
use Apache::loncommon; |
use Apache::loncommon; |
use Apache::lonlocal; |
use Apache::lonlocal; |
Line 53
|
Line 54
|
#only run if configured to |
#only run if configured to |
my $run_update = 0; |
my $run_update = 0; |
my $settings; |
my $settings; |
|
my $allowed_inactivity; |
|
my $check_unexpired; |
if (ref($domconfig{'autoupdate'}) eq 'HASH') { |
if (ref($domconfig{'autoupdate'}) eq 'HASH') { |
$settings = $domconfig{'autoupdate'}; |
$settings = $domconfig{'autoupdate'}; |
if ($settings->{'run'} eq '1') { |
if ($settings->{'run'} eq '1') { |
$run_update = 1; |
$run_update = 1; |
} |
} |
|
if ($settings->{'lastactive'} =~/^\d+$/) { |
|
$allowed_inactivity = 86400 * $settings->{'lastactive'}; |
|
} |
|
if ($settings->{'unexpired'}) { |
|
$check_unexpired = 1; |
|
} |
} |
} |
next if (!$run_update); |
next if (!$run_update); |
open(my $fh,">>$logfile"); |
open(my $fh,">>$logfile"); |
Line 67
|
Line 76
|
# get user information |
# get user information |
my (%users,%instusers,%instids); |
my (%users,%instusers,%instids); |
my $dir = $Apache::lonnet::perlvar{lonUsersDir}.'/'.$dom; |
my $dir = $Apache::lonnet::perlvar{lonUsersDir}.'/'.$dom; |
&descend_tree($dom,$dir,0,\%users,\%courses); |
&descend_tree($dom,$dir,0,\%users,\%courses,$allowed_inactivity,$check_unexpired); |
my $resp = &localenroll::allusers_info($dom,\%instusers,\%instids,\%users); |
my $resp = &localenroll::allusers_info($dom,\%instusers,\%instids,\%users); |
if ($resp ne 'ok') { |
if ($resp ne 'ok') { |
print $fh &mt('Problem retrieving institutional data for users in domain: [_1].',$dom)."\n". |
print $fh &mt('Problem retrieving institutional data for users in domain: [_1].',$dom)."\n". |
Line 191
|
Line 200
|
} |
} |
|
|
sub descend_tree { |
sub descend_tree { |
my ($dom,$dir,$depth,$alldomusers,$coursesref) = @_; |
my ($dom,$dir,$depth,$alldomusers,$coursesref,$allowed_inactivity,$check_unexpired) = @_; |
if (-d $dir) { |
if (-d $dir) { |
opendir(DIR,$dir); |
opendir(DIR,$dir); |
my @contents = grep(!/^\./,readdir(DIR)); |
my @contents = grep(!/^\./,readdir(DIR)); |
Line 199 sub descend_tree {
|
Line 208 sub descend_tree {
|
$depth ++; |
$depth ++; |
foreach my $item (@contents) { |
foreach my $item (@contents) { |
if (($depth < 4) && (length($item) == 1)) { |
if (($depth < 4) && (length($item) == 1)) { |
&descend_tree($dom,$dir.'/'.$item,$depth,$alldomusers,$coursesref); |
&descend_tree($dom,$dir.'/'.$item,$depth,$alldomusers,$coursesref, |
|
$allowed_inactivity,$check_unexpired); |
} elsif (-e $dir.'/'.$item.'/passwd') { |
} elsif (-e $dir.'/'.$item.'/passwd') { |
if (ref($coursesref) eq 'HASH') { |
if (ref($coursesref) eq 'HASH') { |
next if (exists($coursesref->{$dom.'_'.$item})); |
next if (exists($coursesref->{$dom.'_'.$item})); |
} |
} |
|
if ($allowed_inactivity) { |
|
my $now = time; |
|
my $aclog = $dir.'/'.$item.'/activity.log'; |
|
my $roledb = $dir.'/'.$item.'/roles.db'; |
|
if (-e $aclog) { |
|
my $lastac=(stat($aclog))[9]; |
|
if (($now - $lastac) > $allowed_inactivity) { |
|
if (-e $roledb) { |
|
my $lastrolechg=(stat($roledb))[9]; |
|
next if (($now - $lastrolechg) > $allowed_inactivity); |
|
} else { |
|
next; |
|
} |
|
} |
|
} elsif (-e $roledb) { |
|
my $lastrolechg=(stat($roledb))[9]; |
|
next if (($now - $lastrolechg) > $allowed_inactivity); |
|
} else { |
|
next; |
|
} |
|
} |
|
if ($check_unexpired) { |
|
my $roledb = $dir.'/'.$item.'/roles.db'; |
|
my $unexpired = 0; |
|
my $now = time; |
|
if (-e $roledb) { |
|
my $roleshash = &LONCAPA::tie_user_hash($dom,$item,'roles',&GDBM_READER()) or next; |
|
if (ref($roleshash)) { |
|
while (my ($key,$value) = each(%$roleshash)) { |
|
next if ($key =~ /^rolesdef/); |
|
my ($role,$roleend,$rolestart) = split(/\_/,$value); |
|
next if ($role =~ /^gr\//); |
|
if (!$roleend || $roleend > $now) { |
|
$unexpired = 1; |
|
last; |
|
} |
|
} |
|
&LONCAPA::untie_user_hash($roleshash); |
|
next unless ($unexpired); |
|
} else { |
|
next; |
|
} |
|
} else { |
|
next; |
|
} |
|
} |
$$alldomusers{$item} = ''; |
$$alldomusers{$item} = ''; |
} |
} |
} |
} |