diff --git a/lib/WebGUI/Account/FriendManager.pm b/lib/WebGUI/Account/FriendManager.pm index fc950a037..d2c4b35cd 100644 --- a/lib/WebGUI/Account/FriendManager.pm +++ b/lib/WebGUI/Account/FriendManager.pm @@ -8,6 +8,7 @@ use WebGUI::Pluggable; use WebGUI::Utility; use base qw/WebGUI::Account/; +use List::MoreUtils qw/uniq/; use JSON qw(from_json to_json); =head1 NAME @@ -76,12 +77,19 @@ sub editSettingsForm { defaultValue => [2,3], ); $f->template( - name => "friendManagerViewTemplateId", - value => $self->session->setting->get("friendManagerViewTemplateId"), + name => "fmViewTemplateId", + value => $self->session->setting->get("fmViewTemplateId"), namespace => "Account/FriendManager/View", label => $i18n->get("view template label"), hoverHelp => $i18n->get("view template hoverHelp"), ); + $f->template( + name => "fmEditTemplateId", + value => $self->session->setting->get("fmEditTemplateId"), + namespace => "Account/FriendManager/Edit", + label => $i18n->get("edit template label"), + hoverHelp => $i18n->get("edit template hoverHelp"), + ); return $f->printRowsOnly; } @@ -100,7 +108,8 @@ sub editSettingsFormSave { my $setting = $session->setting; my $form = $session->form; - $setting->set("friendManagerViewTemplateId", $form->process("friendManagerViewTemplateId", "template")); + $setting->set("fmViewTemplateId", $form->process("fmViewTemplateId", "template")); + $setting->set("fmEditTemplateId", $form->process("fmEditTemplateId", "template")); my $groupsToManageFriends = $form->process("groupsToManageFriends", "group"); $setting->set("groupsToManageFriends", $groupsToManageFriends); $setting->set("groupIdAdminFriends", $form->process("groupIdAdminFriends", "group")); @@ -111,6 +120,8 @@ sub editSettingsFormSave { =head2 www_editFriends ( ) Edit the friends for a user. Uses the form variable userId, to determine which user. +Only users in the managed groups are shown. Group inheritance is supported, but +only for WebGUI defined groups. =cut @@ -119,11 +130,40 @@ sub www_editFriends { my $session = $self->session; my $form = $session->form; my $userId = $form->get('userId'); + my $user = WebGUI::User->new($session, $userId); ##List users in my friends group. Each friend gets a delete link. + my $friendsList = $user->friends->getUserList(); ##List users in all administrated groups. Friends are added one at a time. + my @manageableUsers = (); + my $groupIds = $session->setting->get('groupsToManageFriends'); + my @groupIds = split "\n", $groupIds; + 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') }; + } + @manageableUsers = uniq @manageableUsers; + my %usersToAdd = (); + my $manager = $session->user; + foreach my $userId (@manageableUsers) { + my $user = WebGUI::User->new($session, $userId); + ##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; + } - return $self->processTemplate($var,$session->setting->get("friendManagerViewTemplateId")); + my $var; + $var->{formHeader} = WebGUI::Form::header($session); + $var->{addUserForm} = WebGUI::Form::selectBox($session, { + name => 'userToAdd', + options => \%usersToAdd, + sortByValue => 1, + }); + $var->{formFooter} = WebGUI::Form::footer($session);; + return $self->processTemplate($var,$session->setting->get("fmEditTemplateId")); } #------------------------------------------------------------------- @@ -202,7 +242,7 @@ sub www_view { }; } - return $self->processTemplate($var,$session->setting->get("friendManagerViewTemplateId")); + return $self->processTemplate($var,$session->setting->get("fmViewTemplateId")); } diff --git a/lib/WebGUI/i18n/English/Account_FriendManager.pm b/lib/WebGUI/i18n/English/Account_FriendManager.pm index a61afe96c..32ce9a895 100644 --- a/lib/WebGUI/i18n/English/Account_FriendManager.pm +++ b/lib/WebGUI/i18n/English/Account_FriendManager.pm @@ -23,6 +23,16 @@ our $I18N = { lastUpdated => 0, }, + 'edit template label' => { + message => q{Edit Friends Template}, + lastUpdated => 0, + }, + + 'edit template hoverHelp' => { + message => q{This template renders the interface for adding or removing friends for a user.}, + lastUpdated => 0, + }, + 'groupsToManageFriends label' => { message => q{Groups to Manage as Friends}, lastUpdated => 0, diff --git a/sbin/installFriendManager.pl b/sbin/installFriendManager.pl index 64d12fc76..c6d7e1ad4 100644 --- a/sbin/installFriendManager.pl +++ b/sbin/installFriendManager.pl @@ -44,7 +44,8 @@ sub installFriendManagerSettings { my $session = shift; print "Installing FriendManager into settings..."; $session->setting->add('groupIdAdminFriends', '3'); - $session->setting->add('friendManagerViewTemplateId', '64tqS80D53Z0JoAs2cX2VQ'); + $session->setting->add('fmViewTemplateId', '64tqS80D53Z0JoAs2cX2VQ'); + $session->setting->add('fmEditTemplateId', '64tqS80D53Z0JoAs2cX2VQ'); $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 c1d302706..7a5526b31 100644 Binary files a/sbin/packages/root_import_account_friendmanager.wgpkg and b/sbin/packages/root_import_account_friendmanager.wgpkg differ