From a67907308f4f5c8a61d2eb2ea2cf3c907411e469 Mon Sep 17 00:00:00 2001 From: Colin Kuskie Date: Mon, 6 Apr 2009 16:52:23 -0700 Subject: [PATCH] Edit friends interface. New edit template with i18n and variables. Edit with save, to add and remove friends. --- lib/WebGUI/Account/FriendManager.pm | 81 +++++++++++++++--- sbin/installFriendManager.pl | 2 +- .../root_import_account_friendmanager.wgpkg | Bin 1609 -> 1926 bytes 3 files changed, 72 insertions(+), 11 deletions(-) diff --git a/lib/WebGUI/Account/FriendManager.pm b/lib/WebGUI/Account/FriendManager.pm index d2c4b35cd..4d737b0e3 100644 --- a/lib/WebGUI/Account/FriendManager.pm +++ b/lib/WebGUI/Account/FriendManager.pm @@ -129,11 +129,23 @@ sub www_editFriends { my $self = shift; my $session = $self->session; my $form = $session->form; - my $userId = $form->get('userId'); + my $userId = shift || $form->get('userId', 'guid'); my $user = WebGUI::User->new($session, $userId); ##List users in my friends group. Each friend gets a delete link. my $friendsList = $user->friends->getUserList(); + my @friends_loop = (); + while (my ($userId, $username) = each %{ $friendsList }) { + push @friends_loop, { + userId => $userId, + username => $username, + checkForm => WebGUI::Form::checkbox($session, { + name => 'friendToAxe', + value => $userId, + }), + }; + } + ##List users in all administrated groups. Friends are added one at a time. my @manageableUsers = (); my $groupIds = $session->setting->get('groupsToManageFriends'); @@ -141,33 +153,82 @@ 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->get('friendsGroup'), 'withoutExpired') }; + push @manageableUsers, @{ $group->getUsersNotIn($user->{_user}->{'friendsGroup'}, 'withoutExpired') }; } @manageableUsers = uniq @manageableUsers; my %usersToAdd = (); + tie %usersToAdd, 'Tie::IxHash'; my $manager = $session->user; - foreach my $userId (@manageableUsers) { - my $user = WebGUI::User->new($session, $userId); + my $i18n = WebGUI::International->new($session); + $usersToAdd{0} = $i18n->get('Select One'); + my @usersToAdd = (); + USERID: foreach my $newFriendId (@manageableUsers) { + next USERID if $newFriendId eq $userId; + my $user = WebGUI::User->new($session, $newFriendId); ##We don't use acceptsFriendsRequests here because it's overkill. ##No need to check invitations, since friends are managed. ##Existing friends are already filtered out. - next unless $user->profileField('ableToBeFriend'); - $usersToAdd{$userId} = $user->username; + next USERID unless $user->profileField('ableToBeFriend'); + push @usersToAdd, [ $newFriendId, $user->username ]; + } + + @usersToAdd = sort { $a->[1] cmp $b->[1] } @usersToAdd; + foreach my $newFriend (@usersToAdd) { + $usersToAdd{$newFriend->[0]} = $newFriend->[1]; } my $var; - $var->{formHeader} = WebGUI::Form::header($session); + $var->{formHeader} = WebGUI::Form::formHeader($session, { + action => $self->getUrl('module=friendManager;do=editFriendsSave'), + }) + . WebGUI::Form::hidden($session, { name => 'userId', value => $userId } ); $var->{addUserForm} = WebGUI::Form::selectBox($session, { name => 'userToAdd', options => \%usersToAdd, - sortByValue => 1, }); - $var->{formFooter} = WebGUI::Form::footer($session);; + $var->{friends_loop} = \@friends_loop; + $var->{has_friends} = scalar @friends_loop; + $var->{submit} = WebGUI::Form::submit($session); + $var->{formFooter} = WebGUI::Form::formFooter($session); + $var->{username} = $user->username; + $var->{userId} = $user->userId; return $self->processTemplate($var,$session->setting->get("fmEditTemplateId")); } #------------------------------------------------------------------- +=head2 www_editFriendsSave ( ) + +Handle adding and removing people from a user's friend group. The userId of +the user to modify will be in the userId from variable. One userId to add will be +in userToAdd. + +Users to delete will be listed in checkboxes with the name, friendToAxe + +=cut + +sub www_editFriendsSave () { + my $self = shift; + my $session = $self->session; + my $form = $session->form; + my $userId = $form->process('userId', 'guid'); + my $user = WebGUI::User->new($session, $userId); + my $userToAdd = $form->process('userToAdd', 'guid'); + + if ($userToAdd) { + $user->friends->addUsers([$userToAdd]); + } + + my @usersToRemove = $form->process('friendToAxe', 'checkList'); + if (scalar @usersToRemove) { + $user->friends->deleteUsers(\@usersToRemove); + } + + return $self->www_editFriends($userId); +} + +#------------------------------------------------------------------- + =head2 www_getFriendsAsJson ( ) For each user in a group, count how many friends they have and return that data @@ -196,7 +257,7 @@ sub www_getFriendsAsJson { USER: foreach my $userId (@{ $group->getUsers} ) { my $user = WebGUI::User->new($session, $userId); next USER unless $user; - my $friendsCount = scalar $user->friends->getUsers(); + my $friendsCount = scalar @{ $user->friends->getUsers() }; push @records, { userId => $userId, username => $user->username, diff --git a/sbin/installFriendManager.pl b/sbin/installFriendManager.pl index c6d7e1ad4..bc1f6e54b 100644 --- a/sbin/installFriendManager.pl +++ b/sbin/installFriendManager.pl @@ -45,7 +45,7 @@ sub installFriendManagerSettings { print "Installing FriendManager into settings..."; $session->setting->add('groupIdAdminFriends', '3'); $session->setting->add('fmViewTemplateId', '64tqS80D53Z0JoAs2cX2VQ'); - $session->setting->add('fmEditTemplateId', '64tqS80D53Z0JoAs2cX2VQ'); + $session->setting->add('fmEditTemplateId', 'lG2exkH9FeYvn4pA63idNg'); $session->setting->add('groupsToManageFriends', '2'); print "\tDone"; } diff --git a/sbin/packages/root_import_account_friendmanager.wgpkg b/sbin/packages/root_import_account_friendmanager.wgpkg index 7a5526b315059589fe7503b502e28653324f6f2c..c4f2deba23ef66e3a4ef5e745945bef203f29eb3 100644 GIT binary patch literal 1926 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 H03HAU*bf+_