Edit friends interface.

New edit template with i18n and variables.
Edit with save, to add and remove friends.
This commit is contained in:
Colin Kuskie 2009-04-06 16:52:23 -07:00
parent 98d7318d64
commit a67907308f
3 changed files with 72 additions and 11 deletions

View file

@ -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,