From cd2f907ef34ee63fd9015f799f189eec360a1675 Mon Sep 17 00:00:00 2001 From: Doug Bell Date: Tue, 21 Dec 2010 14:33:09 -0600 Subject: [PATCH] migrate friendmanager editFriends to formbuilder --- lib/WebGUI/Account/FriendManager.pm | 71 +++++++++++------------- t/Account/FriendManager.t | 84 +++++++++++++++++++++++++++++ 2 files changed, 116 insertions(+), 39 deletions(-) create mode 100644 t/Account/FriendManager.t diff --git a/lib/WebGUI/Account/FriendManager.pm b/lib/WebGUI/Account/FriendManager.pm index 426b7940f..a498a98d3 100644 --- a/lib/WebGUI/Account/FriendManager.pm +++ b/lib/WebGUI/Account/FriendManager.pm @@ -184,27 +184,13 @@ sub www_editFriends { my $groupName = shift || $form->get('groupName'); - ##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. + # Get the users we can add my @manageableUsers = (); - if ($groupName) { + if ($groupName) { # Only adding users from a single group my $group = WebGUI::Group->find($session, $groupName); push @manageableUsers, @{ $group->getUsersNotIn($user->{_user}->{'friendsGroup'}, 'withoutExpired') }; } - else { + else { # Defaults to groups selected in settings my $groupIds = $session->setting->get('groupsToManageFriends'); my @groupIds = split "\n", $groupIds; foreach my $groupId (@groupIds) { @@ -214,11 +200,8 @@ sub www_editFriends { } @manageableUsers = uniq @manageableUsers; } - my %usersToAdd = (); - tie %usersToAdd, 'Tie::IxHash'; my $manager = $session->user; my $i18n = WebGUI::International->new($session); - $usersToAdd{0} = $i18n->get('Select One'); my @usersToAdd = (); my $overrideProfile = $session->setting->get('overrideAbleToBeFriend'); USERID: foreach my $newFriendId (@manageableUsers) { @@ -231,38 +214,48 @@ sub www_editFriends { push @usersToAdd, [ $newFriendId, $user->username ]; } + tie my %usersToAdd, 'Tie::IxHash'; + $usersToAdd{0} = $i18n->get('Select One'); @usersToAdd = sort { $a->[1] cmp $b->[1] } @usersToAdd; foreach my $newFriend (@usersToAdd) { $usersToAdd{$newFriend->[0]} = $newFriend->[1]; } my $var; - $var->{formHeader} = WebGUI::Form::formHeader($session, { - 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->{has_friends} = @{$user->friends->getUsers("noexpired")}; $var->{username} = $user->username; $var->{userId} = $user->userId; $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) { $var->{groupName} = $groupName; $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")); } diff --git a/t/Account/FriendManager.t b/t/Account/FriendManager.t new file mode 100644 index 000000000..76fa564f6 --- /dev/null +++ b/t/Account/FriendManager.t @@ -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