diff --git a/lib/WebGUI/Group.pm b/lib/WebGUI/Group.pm index b42c37b5d..e79ba33d4 100755 --- a/lib/WebGUI/Group.pm +++ b/lib/WebGUI/Group.pm @@ -133,7 +133,8 @@ sub addGroups { =head2 addUsers ( users [, expireOffset ] ) -Adds users to this group. +Adds users to this group. If a user is already a member of a group, their expiration date +is updated. =head3 users @@ -155,6 +156,7 @@ sub addUsers { my ($isIn) = $self->session->db->quickArray("select count(*) from groupings where groupId=? and userId=?", [$self->getId, $uid]); unless ($isIn) { $self->session->db->write("insert into groupings (groupId,userId,expireDate) values (?,?,?)", [$self->getId, $uid, ($self->session->datetime->time()+$expireOffset)]); + $self->session->stow->delete("gotGroupsForUser"); } else { $self->userGroupExpireDate($uid,($self->session->datetime->time()+$expireOffset)); } @@ -281,6 +283,7 @@ sub deleteUsers { foreach my $uid (@{$users}) { $self->session->db->write("delete from groupings where groupId=? and userId=?",[$self->getId, $uid]); } + $self->session->stow->delete("gotGroupsForUser"); } #------------------------------------------------------------------- @@ -937,7 +940,7 @@ sub set { =head2 userIsAdmin ( [ userId, value ] ) -Returns a 1 or 0 depending upon whether the user is a sub-admin for this group. +Sets or returns $userid's status as a group admin in this group. =head3 userId @@ -945,7 +948,8 @@ A guid that is the unique identifier for a user. Defaults to the currently logge =head3 value -If specified the admin flag will be set to this value. +If defined and not the empty string, the admin flag will be set to this value. Otherwise, +returns 1 if the user has been set as a group admin and 0 if the user hasn't. =cut @@ -958,7 +962,7 @@ sub userIsAdmin { return $value; } else { my ($admin) = $self->session->db->quickArray("select groupAdmin from groupings where groupId=? and userId=?", [$self->getId, $userId]); - return $admin; + return ($admin ? 1 : 0); } } diff --git a/lib/WebGUI/i18n/English/WebGUI.pm b/lib/WebGUI/i18n/English/WebGUI.pm index 6069e9ee7..fe32bb732 100644 --- a/lib/WebGUI/i18n/English/WebGUI.pm +++ b/lib/WebGUI/i18n/English/WebGUI.pm @@ -647,7 +647,7 @@ Be aware that any database links you create here will be available to all conten }, '977 description' => { - message => q|Set this to yes to make this user a secondary admin. Secondary admins have the ability + message => q|Set this to yes to make this user a group admin. Group admins have the ability to add or remove users from their groups. |, lastUpdated => 1132359856, @@ -1036,7 +1036,7 @@ removed from the system after a set period of time. That period of time is set }, '977' => { - message => q|Is secondary admin?|, + message => q|Is group admin?|, lastUpdated => 1053803387 }, @@ -1280,9 +1280,7 @@ When users are added to the system they are put into the registered users group.

Secondary Admins
Users in the Secondary Admins group may -add new users, but cannot edit users. Also, if you are a Secondary -Admin and are a member of a different group, you can be set as an admin for that group. This -will allow you to add or remove members from that group. +add new users, but cannot edit users.

Style Managers
diff --git a/t/Group.t b/t/Group.t index faedba876..631682097 100644 --- a/t/Group.t +++ b/t/Group.t @@ -18,7 +18,7 @@ use WebGUI::Utility; use WebGUI::User; use WebGUI::Group; -use Test::More tests => 51; # increment this value for each test you create +use Test::More tests => 59; # increment this value for each test you create use Test::Deep; my $session = WebGUI::Test->session; @@ -143,24 +143,43 @@ cmp_bag($gX->getGroupsIn(), [3], 'Not able to add B tree under Z tree under X'); my $user = WebGUI::User->new($session, "new"); $gX->userIsAdmin($user->userId, "yes"); ok(!$gX->userIsAdmin($user->userId), "userIsAdmin: User who isn't secondary admin can't be group admin"); - -$user->addToGroups([12]); -ok($user->isInGroup(12), "userIsAdmin: Added dude to Secondary Admins"); +isnt($gX->userIsAdmin($user->userId), 'yes', "userIsAdmin returns 1 or 0, not value"); $gX->userIsAdmin($user->userId, 1); ok(!$gX->userIsAdmin($user->userId), "userIsAdmin: User must be member of group to be group admin"); -my $addedUserTime = time(); +my $expireOffset = $gX->expireOffset; + $user->addToGroups([$gX->getId]); -ok($user->isInGroup($gX->getId), "userIsAdmin: Added dude to gX"); +##User expire time is calculated correctly +my $expireTime = abs($gX->userGroupExpireDate($user->userId) - $expireOffset - time()); +ok( $expireTime < 1, 'userGroupExpireDate: Default expire time'); +ok($user->isInGroup($gX->getId), "addToGroups: Added dude to gX"); $gX->userIsAdmin($user->userId, 1); ok($gX->userIsAdmin($user->userId), "userIsAdmin: Dude set to be group admin for gX"); -my $expireOffset = $gX->expireOffset; -my $expireTime = $addedUserTime+$expireOffset; +sleep 5; +$expireTime = time() + $expireOffset - $gX->userGroupExpireDate($user->userId) ; +ok( ($expireTime < 6 && $expireTime > 0), 'userGroupExpireDate: Default expire time ages'); -ok( abs($gX->userGroupExpireDate($user->userId) - $expireTime) < 1, 'userGroupExpireDate: Default expire time'); +$gX->addUsers([$user->userId]); +my $expireTime = abs($gX->userGroupExpireDate($user->userId) - $expireOffset - time()); +ok( $expireTime < 1, 'adding exising user to group resets expire date'); +ok($gX->userIsAdmin($user->userId), "userIsAdmin: adding existing user to group does not change group admin status"); + +##undef and the empty string will return the set value because they're +##interpreted as the empty string. +is($gX->userIsAdmin($user->userId, ''), 1, "userIsAdmin: empty string returns status"); +is($gX->userIsAdmin($user->userId, undef), 1, "userIsAdmin: undef returns status"); + +##Now we'll try various settings and see how they work with userIsAdmin. +$gX->userIsAdmin($user->userId, 0); +ok(!$gX->userIsAdmin($user->userId), "userIsAdmin: trying 0 as value"); +$gX->userIsAdmin($user->userId, '0E0'); +ok(!$gX->userIsAdmin($user->userId), "userIsAdmin: trying '0E0'(string) as value"); +$gX->userIsAdmin($user->userId, 0E0); +ok(!$gX->userIsAdmin($user->userId), "userIsAdmin: trying 0E0 as value"); $user->delete;