Added expiration overrides for groupings imported through the user importer.

This commit is contained in:
JT Smith 2003-02-13 02:01:14 +00:00
parent 50a5561f64
commit f1067a0d8f
4 changed files with 58 additions and 10 deletions

View file

@ -407,7 +407,7 @@ An integer which represents the amount of time for the interval.
=item units
A string which represents the units of the interval. The string must be 'years', 'months', 'days', 'hours', 'minutes', or 'seconds'.
A string which represents the units of the interval. The string must be 'years', 'months', 'weeks', 'days', 'hours', 'minutes', or 'seconds'.
=back

View file

@ -83,7 +83,7 @@ sub addGroupsToGroups {
#-------------------------------------------------------------------
=head2 addUsersToGroups ( users, groups )
=head2 addUsersToGroups ( users, groups [, expireOffset ] )
Adds users to the specified groups.
@ -97,13 +97,22 @@ An array reference containing a list of users.
An array reference containing a list of groups.
=item expireOffset
An override for the default offset of the grouping. Specified in seconds.
=back
=cut
sub addUsersToGroups {
foreach my $gid (@{$_[1]}) {
my ($expireOffset) = WebGUI::SQL->quickArray("select expireOffset from groups where groupId=$gid");
my $expireOffset;
if ($_[2]) {
$expireOffset = $_[2];
} else {
($expireOffset) = WebGUI::SQL->quickArray("select expireOffset from groups where groupId=$gid");
}
foreach my $uid (@{$_[0]}) {
my ($isIn) = WebGUI::SQL->quickArray("select count(*) from groupings where groupId=$gid and userId=$uid");
unless ($isIn) {

View file

@ -65,7 +65,7 @@ sub _create {
#-------------------------------------------------------------------
=head2 addToGroups ( groups )
=head2 addToGroups ( groups [, expireOffset ] )
Adds this user to the specified groups.
@ -75,12 +75,16 @@ Adds this user to the specified groups.
An array reference containing a list of groups.
=item expireOffset
An override for the default offset of the grouping. Specified in seconds.
=back
=cut
sub addToGroups {
WebGUI::Grouping::addUsersToGroups([$_[0]->{_userId}],$_[1]);
WebGUI::Grouping::addUsersToGroups([$_[0]->{_userId}],$_[1],$_[2]);
}
#-------------------------------------------------------------------

View file

@ -18,6 +18,7 @@ BEGIN {
use Digest::MD5;
use Getopt::Long;
use strict;
use WebGUI::DateTime;
use WebGUI::Grouping;
use WebGUI::Session;
use WebGUI::SQL;
@ -35,6 +36,8 @@ my $authMethod = 'WebGUI';
my $groups;
my $ldapUrl;
my $status = 'Active';
my $expireOffset;
my $expireUnits = 'seconds';
GetOptions(
'usersfile=s'=>\$usersFile,
@ -45,7 +48,9 @@ GetOptions(
'password|identifier:s'=>\$defaultIdentifier,
'groups:s'=>\$groups,
'ldapUrl:s'=>\$ldapUrl,
'status:s'=>\$status
'status:s'=>\$status,
'expireOffset:i'=>\$expireOffset,
'expireUnits:s'=>\$expireUnits
);
@ -72,6 +77,20 @@ Options:
--delimiter The string that separates each field in the
import file. Defaults to tab.
--expireOffset The the amount of time before the user will
be expired from the groups they are added
to. Defaults to the expire offset set in
the group definition within WebGUI. May be
overridden in the import file.
--expireUnits Valid values are "seconds", "minutes",
"hours", "days", "weeks", "months", "years",
or "epoch". Defaults to "seconds". This is
the units of the expire offset. If set to
"epoch" the system will assume that the
expire offset is an epoch date rather than
an interval.
--groups A comma separated list of group ids that
each user in the import file will be set
to. Can be overridden in the import file.
@ -102,7 +121,7 @@ User File Format:
-Valid field names:
username password authMethod status
ldapUrl connectDN groups
ldapUrl connectDN groups expireOffset
-In addition to the field names above, you may use any
valid profile field name.
@ -172,6 +191,8 @@ while(<FILE>) {
$user{authMethod} = $authMethod if ($user{authMethod} eq "");
$user{groups} = $groups if ($user{groups} eq "");
$user{status} = $status if ($user{status} eq "");
$user{expireOffset} = $expireOffset if ($user{expireOffset} eq "");
$user{expireOffset} = calculateExpireOffset($user{expireOffset},$expireUnits);
# process user
my ($duplicate) = WebGUI::SQL->quickArray("select count(*) from users where username=".quote($user{username}));
@ -197,7 +218,7 @@ while(<FILE>) {
}
if ($user{groups} ne "") {
my @groups = split(/,/,$user{groups});
$u->addToGroups(\@groups);
$u->addToGroups(\@groups,$user{expireOffset});
}
}
}
@ -208,6 +229,20 @@ WebGUI::Session::close();
print "OK\n";
#-------------------------------------------------
# calculateExpireOffset(expireOffset,expireUnits)
# return: offsetInSeconds
sub calculateExpireOffset {
my ($offset, $units) = @_;
return undef if ($offset < 1);
if ($units eq "epoch") {
my $seconds = (WebGUI::DateTime::time() - $offset);
if ($seconds < 1) {
return undef;
} else {
return $seconds;
}
}
return WebGUI::DateTime::intervalToSeconds($offset, $units)
}