migrate friendmanager editFriends to formbuilder
This commit is contained in:
parent
0b5614ad1c
commit
cd2f907ef3
2 changed files with 116 additions and 39 deletions
|
|
@ -184,27 +184,13 @@ sub www_editFriends {
|
||||||
|
|
||||||
my $groupName = shift || $form->get('groupName');
|
my $groupName = shift || $form->get('groupName');
|
||||||
|
|
||||||
##List users in my friends group. Each friend gets a delete link.
|
# Get the users we can add
|
||||||
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 @manageableUsers = ();
|
||||||
if ($groupName) {
|
if ($groupName) { # Only adding users from a single group
|
||||||
my $group = WebGUI::Group->find($session, $groupName);
|
my $group = WebGUI::Group->find($session, $groupName);
|
||||||
push @manageableUsers, @{ $group->getUsersNotIn($user->{_user}->{'friendsGroup'}, 'withoutExpired') };
|
push @manageableUsers, @{ $group->getUsersNotIn($user->{_user}->{'friendsGroup'}, 'withoutExpired') };
|
||||||
}
|
}
|
||||||
else {
|
else { # Defaults to groups selected in settings
|
||||||
my $groupIds = $session->setting->get('groupsToManageFriends');
|
my $groupIds = $session->setting->get('groupsToManageFriends');
|
||||||
my @groupIds = split "\n", $groupIds;
|
my @groupIds = split "\n", $groupIds;
|
||||||
foreach my $groupId (@groupIds) {
|
foreach my $groupId (@groupIds) {
|
||||||
|
|
@ -214,11 +200,8 @@ sub www_editFriends {
|
||||||
}
|
}
|
||||||
@manageableUsers = uniq @manageableUsers;
|
@manageableUsers = uniq @manageableUsers;
|
||||||
}
|
}
|
||||||
my %usersToAdd = ();
|
|
||||||
tie %usersToAdd, 'Tie::IxHash';
|
|
||||||
my $manager = $session->user;
|
my $manager = $session->user;
|
||||||
my $i18n = WebGUI::International->new($session);
|
my $i18n = WebGUI::International->new($session);
|
||||||
$usersToAdd{0} = $i18n->get('Select One');
|
|
||||||
my @usersToAdd = ();
|
my @usersToAdd = ();
|
||||||
my $overrideProfile = $session->setting->get('overrideAbleToBeFriend');
|
my $overrideProfile = $session->setting->get('overrideAbleToBeFriend');
|
||||||
USERID: foreach my $newFriendId (@manageableUsers) {
|
USERID: foreach my $newFriendId (@manageableUsers) {
|
||||||
|
|
@ -231,38 +214,48 @@ sub www_editFriends {
|
||||||
push @usersToAdd, [ $newFriendId, $user->username ];
|
push @usersToAdd, [ $newFriendId, $user->username ];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tie my %usersToAdd, 'Tie::IxHash';
|
||||||
|
$usersToAdd{0} = $i18n->get('Select One');
|
||||||
@usersToAdd = sort { $a->[1] cmp $b->[1] } @usersToAdd;
|
@usersToAdd = sort { $a->[1] cmp $b->[1] } @usersToAdd;
|
||||||
foreach my $newFriend (@usersToAdd) {
|
foreach my $newFriend (@usersToAdd) {
|
||||||
$usersToAdd{$newFriend->[0]} = $newFriend->[1];
|
$usersToAdd{$newFriend->[0]} = $newFriend->[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
my $var;
|
my $var;
|
||||||
$var->{formHeader} = WebGUI::Form::formHeader($session, {
|
$var->{has_friends} = @{$user->friends->getUsers("noexpired")};
|
||||||
action => $self->getUrl('module=friendManager;do=editFriendsSave'),
|
|
||||||
})
|
|
||||||
. WebGUI::Form::hidden($session, { name => 'userId', value => $user->userId } );
|
|
||||||
if ($groupName) {
|
|
||||||
$var->{formHeader} .= WebGUI::Form::hidden($session, { name => 'groupName', value => $groupName });
|
|
||||||
}
|
|
||||||
$var->{addUserForm} = WebGUI::Form::selectBox($session, {
|
|
||||||
name => 'userToAdd',
|
|
||||||
options => \%usersToAdd,
|
|
||||||
});
|
|
||||||
$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->{username} = $user->username;
|
||||||
$var->{userId} = $user->userId;
|
$var->{userId} = $user->userId;
|
||||||
$var->{manageUrl} = $self->getUrl('module=friendManager;do=view');
|
$var->{manageUrl} = $self->getUrl('module=friendManager;do=view');
|
||||||
$var->{removeAll} = WebGUI::Form::checkbox($session, { name => 'removeAllFriends', value => 'all', });
|
|
||||||
if (! $groupName) {
|
|
||||||
$var->{addManagers} = WebGUI::Form::checkbox($session, { name => 'addManagers', value => 'addManagers', });
|
|
||||||
}
|
|
||||||
if ($groupName) {
|
if ($groupName) {
|
||||||
$var->{groupName} = $groupName;
|
$var->{groupName} = $groupName;
|
||||||
$var->{viewAllUrl} = $self->getUrl('module=friendManager;do=editFriends;userId='.$userId);
|
$var->{viewAllUrl} = $self->getUrl('module=friendManager;do=editFriends;userId='.$userId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
my $form = WebGUI::FormBuilder->new( $session,
|
||||||
|
name => "friendManager",
|
||||||
|
action => $self->getUrl('module=friendManager;do=editFriendsSave')
|
||||||
|
);
|
||||||
|
$form->addField( "Hidden", name => "userId", value => $user->userId );
|
||||||
|
if ( $groupName ) {
|
||||||
|
$form->addField( "Hidden", name => 'groupName', value => $groupName );
|
||||||
|
}
|
||||||
|
|
||||||
|
# Add checkboxes to remove friends
|
||||||
|
my $friendsList = $user->friends->getUserList();
|
||||||
|
while (my ($userId, $username) = each %{ $friendsList }) {
|
||||||
|
$form->addField( "Checkbox", name => 'friendToAxe', value => $userId, label => $username );
|
||||||
|
}
|
||||||
|
|
||||||
|
# Add a selectbox to add friends
|
||||||
|
$form->addField( "SelectBox", name => 'userToAdd', options => \%usersToAdd );
|
||||||
|
|
||||||
|
$form->addField( "Checkbox", name => 'removeAllFriends', value => 'all' );
|
||||||
|
if (!$groupName) {
|
||||||
|
$form->addField( "Checkbox", name => 'addManagers', value => 'addManagers' );
|
||||||
|
}
|
||||||
|
$form->addField( 'Submit', name => "submit" );
|
||||||
|
$form->toTemplateVars( "form", $var );
|
||||||
|
|
||||||
return $self->processTemplate($var,$session->setting->get("fmEditTemplateId"));
|
return $self->processTemplate($var,$session->setting->get("fmEditTemplateId"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
84
t/Account/FriendManager.t
Normal file
84
t/Account/FriendManager.t
Normal file
|
|
@ -0,0 +1,84 @@
|
||||||
|
# vim:syntax=perl
|
||||||
|
#-------------------------------------------------------------------
|
||||||
|
# WebGUI is Copyright 2001-2009 Plain Black Corporation.
|
||||||
|
#-------------------------------------------------------------------
|
||||||
|
# Please read the legal notices (docs/legal.txt) and the license
|
||||||
|
# (docs/license.txt) that came with this distribution before using
|
||||||
|
# this software.
|
||||||
|
#------------------------------------------------------------------
|
||||||
|
# http://www.plainblack.com info@plainblack.com
|
||||||
|
#------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Test the Account FriendManager
|
||||||
|
#
|
||||||
|
#
|
||||||
|
|
||||||
|
use FindBin;
|
||||||
|
use strict;
|
||||||
|
use lib "$FindBin::Bin/lib";
|
||||||
|
use Test::More;
|
||||||
|
use WebGUI::Test; # Must use this before any other WebGUI modules
|
||||||
|
use WebGUI::Session;
|
||||||
|
use WebGUI::Test::Mechanize;
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
# Init
|
||||||
|
my $session = WebGUI::Test->session;
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
# Test the edit page of the friends manager
|
||||||
|
|
||||||
|
# Start a session
|
||||||
|
my $mech = WebGUI::Test::Mechanize->new( config => WebGUI::Test->file );
|
||||||
|
$mech->get_ok( '/' );
|
||||||
|
|
||||||
|
# Get our admin
|
||||||
|
my $admin = WebGUI::User->new( $mech->session, "3" );
|
||||||
|
|
||||||
|
# Add a user who can be a friend for admin
|
||||||
|
my $edgar_friendly = WebGUI::Test->user( username => 'edgarfriendly', ableToBeFriend => 1 );
|
||||||
|
$edgar_friendly = WebGUI::User->new( $mech->session, $edgar_friendly->getId ); # fix the session
|
||||||
|
|
||||||
|
# Add a user who is not very nice
|
||||||
|
my $simon_phoenix = WebGUI::Test->user( username => 'simonphoenix', ableToBeFriend => 0 );
|
||||||
|
$simon_phoenix = WebGUI::User->new( $mech->session, $simon_phoenix->getId ); # fix the session
|
||||||
|
|
||||||
|
$mech->session->user({ user => $admin });
|
||||||
|
|
||||||
|
$mech->get_ok( '/?op=account;module=friendManager;do=editFriends;userId=3;groupName=Registered%20Users', "friend manager" );
|
||||||
|
$mech->content_lacks( $simon_phoenix->getId, "simon isn't friendly" );
|
||||||
|
$mech->submit_form_ok(
|
||||||
|
{
|
||||||
|
form_name => "friendManager",
|
||||||
|
fields => {
|
||||||
|
userToAdd => $edgar_friendly->getId,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"submit form to add a friend"
|
||||||
|
);
|
||||||
|
ok( $admin->friends->hasUser( $edgar_friendly ), "friend was added" );
|
||||||
|
|
||||||
|
$mech->get_ok( '/?op=account;module=friendManager;do=editFriends;userId=3;groupName=Registered%20Users', "friend manager" );
|
||||||
|
$mech->content_lacks( $simon_phoenix->getId, "simon isn't friendly" );
|
||||||
|
$mech->submit_form_ok(
|
||||||
|
{
|
||||||
|
form_name => "friendManager",
|
||||||
|
fields => {
|
||||||
|
friendToAxe => $edgar_friendly->getId,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"submit form to axe a friend"
|
||||||
|
);
|
||||||
|
|
||||||
|
# Instance a new group with the same ID as the admin's friends group.
|
||||||
|
# There is some stale cache problem with using $admin->friends directly
|
||||||
|
ok( !WebGUI::Group->new( $session, $admin->get('friendsGroup') )->hasUser( $edgar_friendly ), "friend was removed" );
|
||||||
|
|
||||||
|
TODO: {
|
||||||
|
local $TODO = "Fix this stale cache problem";
|
||||||
|
ok( !$admin->friends->hasUser( $edgar_friendly ), "friend was removed" );
|
||||||
|
};
|
||||||
|
|
||||||
|
done_testing;
|
||||||
|
|
||||||
|
#vim:ft=perl
|
||||||
Loading…
Add table
Add a link
Reference in a new issue