From 5f89a281e93d0952092810cf7802f6c872af4491 Mon Sep 17 00:00:00 2001 From: Doug Bell Date: Tue, 16 Nov 2010 13:26:38 -0600 Subject: [PATCH] fix #11965: FriendMgr pagination and getUsersNotIn --- ...ot_import_account_friendmanager_edit.wgpkg | Bin 0 -> 1293 bytes lib/WebGUI/Account/FriendManager.pm | 4 +- lib/WebGUI/Group.pm | 17 +++++++-- t/Group.t | 35 +++++++++++++++++- 4 files changed, 49 insertions(+), 7 deletions(-) create mode 100644 docs/upgrades/packages-7.10.5/root_import_account_friendmanager_edit.wgpkg diff --git a/docs/upgrades/packages-7.10.5/root_import_account_friendmanager_edit.wgpkg b/docs/upgrades/packages-7.10.5/root_import_account_friendmanager_edit.wgpkg new file mode 100644 index 0000000000000000000000000000000000000000..3dcb81ccadcf73ad2665f069bb6e8dfa9eee24df GIT binary patch literal 1293 zcmV+o1@ihIiwFP!00000|Ls>>Z`(E$_H%v(;inY{BFnO3SMdyZYjf$EAX}3a#k>Wy zMB7{>QXuKuiv0H-lDg1N++j%5J2#eCIpoP)CiIe_E|pHw+sM`1V`J=DXW% zH5#aTS`FXtbX#E&qWp-3_`CN@t~vqYO?K`>Z;SnEa2pjjD; z6E2dsE1c!2Icj4iq@gmS&3ryishp9dUd_nzBV`F+nr&OPL9Q9kC4CHptdzj#1SdCm zDz9;T58G)-eW}(d8H`v$7e|w9m?VeD{``exd_mCX5d%liB;{B|C?ykhVn;G8rj$h} z%vZ%oj+2D4X@mkZ^e|#0*7xiIHN*`h{}BehWJKIbA}%ZoPGIIDHJ}9N%A=W%tcT;6 z&zbTjf)bWwn1MEgM-r-Px3H8%72Bm}ZL+#Qe|<_mEm$WX9tSkJn$~lvycS$>wa#sX zod8mKPLqVN?Z8e2pXZY-lI3t6; z2Xi1Y`Jj){OpwXwLdUq?*!KgX-R>m`rR0GgA_-W2UHMoIJETK*>f)~ zJ+Dss9)`1WeN+VkAZ1#GL{!6cf@WCW**&Em2K}KJ5=#QGNoI8jV8Aj9wjl|t(qi>) zD6mrFz+)qJ3n=A0FMN@A`j44nktKr~bUY*R{V5;^cT{2~xn_r0YxR`b!!urgVPA`V zn5OQ&Ta*|6VW=rPY2G@u^w9$zHCT&-PW10hY9ZTq@d~Mopvsi=>^{68R;vsmX=Hk( zRR)LU+rcu{!;fTqc6;&aByz-AuRB6dsd7Qd5{P>`XC*w1`uJMKtDW zb^;OXms2VSzfQeVC~A;;b?u;RMg&#B>nSjIjRj%0zBnZbD~01(1{V1a zu0Oi`Y;-DZATQyA641b(qHhrp> z>K=T_6FQ+qQ}f%s&~JDAJ4|~%H|@NMbGU;n+-rd8IUnd>7DzknIZowRfP%ji zk|;XAxqSaPKvcfx`hH+9EgPYx@(r2bd1^J{daiFPMSv_T?a=RqEx#Ss^a!$`5<1D7 zvRV1<;C0XodaYhP33?-RnMxqF0m`hsx0JV-ZFc31FE5zRS<9CLPxn2UOGdMeVyT+>ah#0QOyX-*wBDxp5(M`&-qt{x@A$;c4-v zkdGHc=$dFcVe#Pfind($session, $groupName); - push @manageableUsers, @{ $group->getUsersNotIn($user->{_user}->{'friendsGroup'}, 'withoutExpired') }; + push @manageableUsers, @{ $group->getUsersNotIn($user->friends->getId, 'withoutExpired') }; } else { my $groupIds = $session->setting->get('groupsToManageFriends'); @@ -210,7 +210,7 @@ sub www_editFriends { foreach my $groupId (@groupIds) { my $group = WebGUI::Group->new($session, $groupId); next GROUP unless $group->getId || $group->getId eq 'new'; - push @manageableUsers, @{ $group->getUsersNotIn($user->{_user}->{'friendsGroup'}, 'withoutExpired') }; + push @manageableUsers, @{ $group->getUsersNotIn($user->friends->getId, 'withoutExpired') }; } @manageableUsers = uniq @manageableUsers; } diff --git a/lib/WebGUI/Group.pm b/lib/WebGUI/Group.pm index 5e6b9c5c3..9dc05b017 100644 --- a/lib/WebGUI/Group.pm +++ b/lib/WebGUI/Group.pm @@ -979,24 +979,33 @@ sub getUsersNotIn { if($groupId eq "") { return $self->getUsers($withoutExpired); } + my $selfWhere; + if ( $self->getId ne '2' ) { + $selfWhere = "and groupId=" . $self->session->db->dbh->quote( $self->getId ); + } + else { + $selfWhere = 'and userId != ' . $self->session->db->dbh->quote( "1" ); + } my $expireTime = 0; if ($withoutExpired) { $expireTime = time(); } - my $sql = q{ + my $sql = qq{ select userId from - groupings + users + left join + groupings using (userId) where expireDate > ? - and groupId=? + $selfWhere and userId not in (select userId from groupings where expireDate > ? and groupId=?) }; - my @users = $self->session->db->buildArray($sql, [$expireTime,$self->getId,$expireTime,$groupId]); + my @users = $self->session->db->buildArray($sql, [$expireTime,$expireTime,$groupId]); return \@users; } diff --git a/t/Group.t b/t/Group.t index 6f898e565..9becd08c7 100644 --- a/t/Group.t +++ b/t/Group.t @@ -93,7 +93,7 @@ my @ldapTests = ( ); -plan tests => (168 + (scalar(@scratchTests) * 2) + scalar(@ipTests)); # increment this value for each test you create +plan tests => (172 + (scalar(@scratchTests) * 2) + scalar(@ipTests)); # increment this value for each test you create my $session = WebGUI::Test->session; my $testCache = WebGUI::Cache->new($session, 'myTestKey'); @@ -832,4 +832,37 @@ ok( WebGUI::Group->vitalGroup(3), '... 3'); ok( WebGUI::Group->vitalGroup('pbgroup000000000000015'), '... pbgroup000000000000015'); ok(! WebGUI::Group->vitalGroup('27'), '... 27 is not vital'); +#---------------------------------------------------------------------------- +# getUsersNotIn + +# Normal group +my $happyDude = WebGUI::User->create( $session ); +$happyDude->username(" Happy Dude "); +addToCleanup( $happyDude ); + +$gA->addUsers([ $happyDude->getId ]); +$gB->addUsers([ $happyDude->getId ]); +cmp_deeply( + $gA->getUsersNotIn( $gZ->getId ), + superbagof( $happyDude->getId ), + "get the users not in the group", +); +ok( + !grep( { $_ eq $happyDude->getId } @{$gA->getUsersNotIn( $gB->getId )}), + "don't get the users in both groups", +); + +# Special-case Registered Users +my $regUser = WebGUI::Group->new( $session, "2" ); +cmp_deeply( + $regUser->getUsersNotIn( $gZ->getId ), + superbagof( $happyDude->getId ), + "registered users: get the users not in the group", +); +ok( + !grep( { $_ eq $happyDude->getId } @{$regUser->getUsersNotIn( $gA->getId )}), + "registered users: don't get the users in both groups", +); + + #vim:ft=perl