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 =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 =back

View file

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

View file

@ -65,7 +65,7 @@ sub _create {
#------------------------------------------------------------------- #-------------------------------------------------------------------
=head2 addToGroups ( groups ) =head2 addToGroups ( groups [, expireOffset ] )
Adds this user to the specified groups. 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. An array reference containing a list of groups.
=item expireOffset
An override for the default offset of the grouping. Specified in seconds.
=back =back
=cut =cut
sub addToGroups { 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 Digest::MD5;
use Getopt::Long; use Getopt::Long;
use strict; use strict;
use WebGUI::DateTime;
use WebGUI::Grouping; use WebGUI::Grouping;
use WebGUI::Session; use WebGUI::Session;
use WebGUI::SQL; use WebGUI::SQL;
@ -35,6 +36,8 @@ my $authMethod = 'WebGUI';
my $groups; my $groups;
my $ldapUrl; my $ldapUrl;
my $status = 'Active'; my $status = 'Active';
my $expireOffset;
my $expireUnits = 'seconds';
GetOptions( GetOptions(
'usersfile=s'=>\$usersFile, 'usersfile=s'=>\$usersFile,
@ -45,7 +48,9 @@ GetOptions(
'password|identifier:s'=>\$defaultIdentifier, 'password|identifier:s'=>\$defaultIdentifier,
'groups:s'=>\$groups, 'groups:s'=>\$groups,
'ldapUrl:s'=>\$ldapUrl, '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 --delimiter The string that separates each field in the
import file. Defaults to tab. 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 --groups A comma separated list of group ids that
each user in the import file will be set each user in the import file will be set
to. Can be overridden in the import file. to. Can be overridden in the import file.
@ -102,7 +121,7 @@ User File Format:
-Valid field names: -Valid field names:
username password authMethod status username password authMethod status
ldapUrl connectDN groups ldapUrl connectDN groups expireOffset
-In addition to the field names above, you may use any -In addition to the field names above, you may use any
valid profile field name. valid profile field name.
@ -172,6 +191,8 @@ while(<FILE>) {
$user{authMethod} = $authMethod if ($user{authMethod} eq ""); $user{authMethod} = $authMethod if ($user{authMethod} eq "");
$user{groups} = $groups if ($user{groups} eq ""); $user{groups} = $groups if ($user{groups} eq "");
$user{status} = $status if ($user{status} eq ""); $user{status} = $status if ($user{status} eq "");
$user{expireOffset} = $expireOffset if ($user{expireOffset} eq "");
$user{expireOffset} = calculateExpireOffset($user{expireOffset},$expireUnits);
# process user # process user
my ($duplicate) = WebGUI::SQL->quickArray("select count(*) from users where username=".quote($user{username})); my ($duplicate) = WebGUI::SQL->quickArray("select count(*) from users where username=".quote($user{username}));
@ -197,7 +218,7 @@ while(<FILE>) {
} }
if ($user{groups} ne "") { if ($user{groups} ne "") {
my @groups = split(/,/,$user{groups}); my @groups = split(/,/,$user{groups});
$u->addToGroups(\@groups); $u->addToGroups(\@groups,$user{expireOffset});
} }
} }
} }
@ -208,6 +229,20 @@ WebGUI::Session::close();
print "OK\n"; 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)
}