From 60713c8a203b4d92db016f38cf8d78165d72b30a Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Thu, 11 Apr 2013 14:06:08 +0200 Subject: [PATCH 1/7] [ticket/11492] Add functional test for empty teampage PHPBB3-11492 --- tests/functional/memberlist_test.php | 9 +++++ .../phpbb_functional_test_case.php | 40 +++++++++++++++++++ 2 files changed, 49 insertions(+) diff --git a/tests/functional/memberlist_test.php b/tests/functional/memberlist_test.php index 879bee2f0e..5c5d96d777 100644 --- a/tests/functional/memberlist_test.php +++ b/tests/functional/memberlist_test.php @@ -40,4 +40,13 @@ class phpbb_functional_memberlist_test extends phpbb_functional_test_case $this->assert_response_success(); $this->assertContains('admin', $crawler->filter('h2')->text()); } + + public function test_leaders() + { + $this->login(); + $this->remove_user_group('ADMINISTRATORS', array('admin')); + + $crawler = $this->request('GET', 'memberlist.php?mode=leaders&sid=' . $this->sid); + $this->assert_response_success(); + } } diff --git a/tests/test_framework/phpbb_functional_test_case.php b/tests/test_framework/phpbb_functional_test_case.php index a411d9c98a..283110a104 100644 --- a/tests/test_framework/phpbb_functional_test_case.php +++ b/tests/test_framework/phpbb_functional_test_case.php @@ -316,6 +316,46 @@ class phpbb_functional_test_case extends phpbb_test_case return user_add($user_row); } + protected function remove_user_group($group_name, $usernames) + { + global $db, $cache, $auth, $config, $phpbb_dispatcher, $phpbb_container; + + $config = new phpbb_config(array()); + $config['coppa_enable'] = 0; + + $db = $this->get_db(); + + $cache = new phpbb_mock_null_cache; + + $cache_driver = new phpbb_cache_driver_null(); + $phpbb_container = $this->getMock('Symfony\Component\DependencyInjection\ContainerInterface'); + $phpbb_container + ->expects($this->any()) + ->method('get') + ->with('cache.driver') + ->will($this->returnValue($cache_driver)); + + if (!function_exists('utf_clean_string')) + { + require_once(__DIR__ . '/../../phpBB/includes/utf/utf_tools.php'); + } + if (!function_exists('group_user_del')) + { + require_once(__DIR__ . '/../../phpBB/includes/functions_user.php'); + } + $phpbb_dispatcher = new phpbb_mock_event_dispatcher(); + $auth = $this->getMock('Observer', array('acl_clear_prefetch')); + + $sql = 'SELECT group_id + FROM ' . GROUPS_TABLE . " + WHERE group_name = '" . $db->sql_escape($group_name) . "'"; + $result = $db->sql_query($sql); + $group_id = (int) $db->sql_fetchfield('group_id'); + $db->sql_freeresult($result); + + return group_user_del($group_id, false, $usernames, $group_name); + } + protected function login($username = 'admin') { $this->add_lang('ucp'); From 59ad90b25c50f0a4062ae5e190b27811c4c0279b Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Thu, 11 Apr 2013 15:18:47 +0200 Subject: [PATCH 2/7] [ticket/11492] Add tests for removing/adding users PHPBB3-11492 --- tests/functional/memberlist_test.php | 25 ++++++++- .../phpbb_functional_test_case.php | 52 ++++++++++++++++++- 2 files changed, 75 insertions(+), 2 deletions(-) diff --git a/tests/functional/memberlist_test.php b/tests/functional/memberlist_test.php index 5c5d96d777..f27092aa36 100644 --- a/tests/functional/memberlist_test.php +++ b/tests/functional/memberlist_test.php @@ -44,9 +44,32 @@ class phpbb_functional_memberlist_test extends phpbb_functional_test_case public function test_leaders() { $this->login(); - $this->remove_user_group('ADMINISTRATORS', array('admin')); + $this->create_user('memberlist-test-user'); + $this->create_user('memberlist-test-moderator'); + // Admin should be listed, user not $crawler = $this->request('GET', 'memberlist.php?mode=leaders&sid=' . $this->sid); $this->assert_response_success(); + $this->assertContains('admin', $crawler->filter('tr')->text()); + $this->assertNotContains('memberlist-test-user', $crawler->filter('tr')->text()); + $this->assertNotContains('memberlist-test-moderator', $crawler->filter('tr')->text()); + + // Remove admin from admins, still a moderator + $this->remove_user_group('ADMINISTRATORS', array('admin')); + $crawler = $this->request('GET', 'memberlist.php?mode=leaders&sid=' . $this->sid); + $this->assert_response_success(); + $this->assertContains('admin', $crawler->filter('tr')->text()); + + // Remove admin from moderators + $this->remove_user_group('GLOBAL_MODERATORS', array('admin')); + $crawler = $this->request('GET', 'memberlist.php?mode=leaders&sid=' . $this->sid); + $this->assert_response_success(); + $this->assertNotContains('admin', $crawler->filter('tr')->text()); + + // Add mod to moderators + $this->add_user_group('GLOBAL_MODERATORS', array('memberlist-test-moderator')); + $crawler = $this->request('GET', 'memberlist.php?mode=leaders&sid=' . $this->sid); + $this->assert_response_success(); + $this->assertContains('memberlist-test-moderator', $crawler->filter('tr')->text()); } } diff --git a/tests/test_framework/phpbb_functional_test_case.php b/tests/test_framework/phpbb_functional_test_case.php index 283110a104..3eba57caa7 100644 --- a/tests/test_framework/phpbb_functional_test_case.php +++ b/tests/test_framework/phpbb_functional_test_case.php @@ -318,13 +318,18 @@ class phpbb_functional_test_case extends phpbb_test_case protected function remove_user_group($group_name, $usernames) { - global $db, $cache, $auth, $config, $phpbb_dispatcher, $phpbb_container; + global $db, $cache, $auth, $config, $phpbb_dispatcher, $phpbb_log, $phpbb_container; $config = new phpbb_config(array()); $config['coppa_enable'] = 0; $db = $this->get_db(); + $phpbb_log = $this->getMock('phpbb_log'); + $phpbb_log + ->expects($this->any()) + ->method('add') + ->will($this->returnValue(true)); $cache = new phpbb_mock_null_cache; $cache_driver = new phpbb_cache_driver_null(); @@ -356,6 +361,51 @@ class phpbb_functional_test_case extends phpbb_test_case return group_user_del($group_id, false, $usernames, $group_name); } + protected function add_user_group($group_name, $usernames) + { + global $db, $cache, $auth, $config, $phpbb_dispatcher, $phpbb_log, $phpbb_container; + + $config = new phpbb_config(array()); + $config['coppa_enable'] = 0; + + $db = $this->get_db(); + + $phpbb_log = $this->getMock('phpbb_log'); + $phpbb_log + ->expects($this->any()) + ->method('add') + ->will($this->returnValue(true)); + $cache = new phpbb_mock_null_cache; + + $cache_driver = new phpbb_cache_driver_null(); + $phpbb_container = $this->getMock('Symfony\Component\DependencyInjection\ContainerInterface'); + $phpbb_container + ->expects($this->any()) + ->method('get') + ->with('cache.driver') + ->will($this->returnValue($cache_driver)); + + if (!function_exists('utf_clean_string')) + { + require_once(__DIR__ . '/../../phpBB/includes/utf/utf_tools.php'); + } + if (!function_exists('group_user_del')) + { + require_once(__DIR__ . '/../../phpBB/includes/functions_user.php'); + } + $phpbb_dispatcher = new phpbb_mock_event_dispatcher(); + $auth = $this->getMock('Observer', array('acl_clear_prefetch')); + + $sql = 'SELECT group_id + FROM ' . GROUPS_TABLE . " + WHERE group_name = '" . $db->sql_escape($group_name) . "'"; + $result = $db->sql_query($sql); + $group_id = (int) $db->sql_fetchfield('group_id'); + $db->sql_freeresult($result); + + return group_user_add($group_id, false, $usernames, $group_name); + } + protected function login($username = 'admin') { $this->add_lang('ucp'); From e5503e20d84c94c66de33500324afb9a4c774c77 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Thu, 11 Apr 2013 15:28:55 +0200 Subject: [PATCH 3/7] [ticket/11492] Do not add the user again PHPBB3-11492 --- tests/functional/memberlist_test.php | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/functional/memberlist_test.php b/tests/functional/memberlist_test.php index f27092aa36..c822c06263 100644 --- a/tests/functional/memberlist_test.php +++ b/tests/functional/memberlist_test.php @@ -44,7 +44,6 @@ class phpbb_functional_memberlist_test extends phpbb_functional_test_case public function test_leaders() { $this->login(); - $this->create_user('memberlist-test-user'); $this->create_user('memberlist-test-moderator'); // Admin should be listed, user not From f920c69ad5cbe9d435a2235180dfd5e7dc9905d4 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Thu, 11 Apr 2013 15:44:54 +0200 Subject: [PATCH 4/7] [ticket/11492] Split into mutliple tests PHPBB3-11492 --- tests/functional/memberlist_test.php | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/tests/functional/memberlist_test.php b/tests/functional/memberlist_test.php index c822c06263..46d7976230 100644 --- a/tests/functional/memberlist_test.php +++ b/tests/functional/memberlist_test.php @@ -49,26 +49,36 @@ class phpbb_functional_memberlist_test extends phpbb_functional_test_case // Admin should be listed, user not $crawler = $this->request('GET', 'memberlist.php?mode=leaders&sid=' . $this->sid); $this->assert_response_success(); - $this->assertContains('admin', $crawler->filter('tr')->text()); - $this->assertNotContains('memberlist-test-user', $crawler->filter('tr')->text()); - $this->assertNotContains('memberlist-test-moderator', $crawler->filter('tr')->text()); + $this->assertContains('admin', $crawler->text()); + $this->assertNotContains('memberlist-test-user', $crawler->text()); + $this->assertNotContains('memberlist-test-moderator', $crawler->text()); + } + + public function test_leaders_remove_users() + { + $this->login(); // Remove admin from admins, still a moderator $this->remove_user_group('ADMINISTRATORS', array('admin')); $crawler = $this->request('GET', 'memberlist.php?mode=leaders&sid=' . $this->sid); $this->assert_response_success(); - $this->assertContains('admin', $crawler->filter('tr')->text()); + $this->assertContains('admin', $crawler->text()); // Remove admin from moderators $this->remove_user_group('GLOBAL_MODERATORS', array('admin')); $crawler = $this->request('GET', 'memberlist.php?mode=leaders&sid=' . $this->sid); $this->assert_response_success(); - $this->assertNotContains('admin', $crawler->filter('tr')->text()); + $this->assertNotContains('admin', $crawler->text()); + } + + public function test_leaders_add_users() + { + $this->login(); // Add mod to moderators $this->add_user_group('GLOBAL_MODERATORS', array('memberlist-test-moderator')); $crawler = $this->request('GET', 'memberlist.php?mode=leaders&sid=' . $this->sid); $this->assert_response_success(); - $this->assertContains('memberlist-test-moderator', $crawler->filter('tr')->text()); + $this->assertContains('memberlist-test-moderator', $crawler->text()); } } From 7f527e801221bf5638acf0d46a94c0e28ec03331 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Thu, 11 Apr 2013 15:59:31 +0200 Subject: [PATCH 5/7] [ticket/11492] Fix issues with log object PHPBB3-11492 --- .../phpbb_functional_test_case.php | 26 +++++++------------ 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/tests/test_framework/phpbb_functional_test_case.php b/tests/test_framework/phpbb_functional_test_case.php index 3eba57caa7..db6a6066e4 100644 --- a/tests/test_framework/phpbb_functional_test_case.php +++ b/tests/test_framework/phpbb_functional_test_case.php @@ -318,18 +318,17 @@ class phpbb_functional_test_case extends phpbb_test_case protected function remove_user_group($group_name, $usernames) { - global $db, $cache, $auth, $config, $phpbb_dispatcher, $phpbb_log, $phpbb_container; + global $db, $cache, $auth, $config, $phpbb_dispatcher, $phpbb_log, $phpbb_container, $phpbb_root_path, $phpEx; $config = new phpbb_config(array()); $config['coppa_enable'] = 0; $db = $this->get_db(); + $phpbb_dispatcher = new phpbb_mock_event_dispatcher(); + $user = $this->getMock('phpbb_user'); + $auth = $this->getMock('phpbb_auth'); - $phpbb_log = $this->getMock('phpbb_log'); - $phpbb_log - ->expects($this->any()) - ->method('add') - ->will($this->returnValue(true)); + $phpbb_log = new phpbb_log($db, $user, $auth, $phpbb_dispatcher, $phpbb_root_path, 'adm/', $phpEx, LOG_TABLE); $cache = new phpbb_mock_null_cache; $cache_driver = new phpbb_cache_driver_null(); @@ -348,8 +347,6 @@ class phpbb_functional_test_case extends phpbb_test_case { require_once(__DIR__ . '/../../phpBB/includes/functions_user.php'); } - $phpbb_dispatcher = new phpbb_mock_event_dispatcher(); - $auth = $this->getMock('Observer', array('acl_clear_prefetch')); $sql = 'SELECT group_id FROM ' . GROUPS_TABLE . " @@ -363,18 +360,17 @@ class phpbb_functional_test_case extends phpbb_test_case protected function add_user_group($group_name, $usernames) { - global $db, $cache, $auth, $config, $phpbb_dispatcher, $phpbb_log, $phpbb_container; + global $db, $cache, $auth, $config, $phpbb_dispatcher, $phpbb_log, $phpbb_container, $phpbb_root_path, $phpEx; $config = new phpbb_config(array()); $config['coppa_enable'] = 0; $db = $this->get_db(); + $phpbb_dispatcher = new phpbb_mock_event_dispatcher(); + $user = $this->getMock('phpbb_user'); + $auth = $this->getMock('phpbb_auth'); - $phpbb_log = $this->getMock('phpbb_log'); - $phpbb_log - ->expects($this->any()) - ->method('add') - ->will($this->returnValue(true)); + $phpbb_log = new phpbb_log($db, $user, $auth, $phpbb_dispatcher, $phpbb_root_path, 'adm/', $phpEx, LOG_TABLE); $cache = new phpbb_mock_null_cache; $cache_driver = new phpbb_cache_driver_null(); @@ -393,8 +389,6 @@ class phpbb_functional_test_case extends phpbb_test_case { require_once(__DIR__ . '/../../phpBB/includes/functions_user.php'); } - $phpbb_dispatcher = new phpbb_mock_event_dispatcher(); - $auth = $this->getMock('Observer', array('acl_clear_prefetch')); $sql = 'SELECT group_id FROM ' . GROUPS_TABLE . " From 4d4cf25edddac7de305f0d291550189ba8a5492e Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Thu, 11 Apr 2013 16:28:10 +0200 Subject: [PATCH 6/7] [ticket/11492] Fix the test once more PHPBB3-11492 --- tests/functional/memberlist_test.php | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/tests/functional/memberlist_test.php b/tests/functional/memberlist_test.php index 46d7976230..66e3591f21 100644 --- a/tests/functional/memberlist_test.php +++ b/tests/functional/memberlist_test.php @@ -58,17 +58,11 @@ class phpbb_functional_memberlist_test extends phpbb_functional_test_case { $this->login(); - // Remove admin from admins, still a moderator + // Remove admin from admins $this->remove_user_group('ADMINISTRATORS', array('admin')); $crawler = $this->request('GET', 'memberlist.php?mode=leaders&sid=' . $this->sid); $this->assert_response_success(); $this->assertContains('admin', $crawler->text()); - - // Remove admin from moderators - $this->remove_user_group('GLOBAL_MODERATORS', array('admin')); - $crawler = $this->request('GET', 'memberlist.php?mode=leaders&sid=' . $this->sid); - $this->assert_response_success(); - $this->assertNotContains('admin', $crawler->text()); } public function test_leaders_add_users() From 1296417b526312f3b79d2b64bff86476209fb037 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Thu, 11 Apr 2013 16:38:14 +0200 Subject: [PATCH 7/7] [ticket/11492] Initialize $user_ids and $group_users arrays Also avoid unneccessary calls to permissions when user_ids is empty PHPBB3-11492 --- phpBB/memberlist.php | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/phpBB/memberlist.php b/phpBB/memberlist.php index d25583b84a..e6045b151a 100644 --- a/phpBB/memberlist.php +++ b/phpBB/memberlist.php @@ -146,7 +146,7 @@ switch ($mode) $result = $db->sql_query($db->sql_build_query('SELECT', $sql_ary)); - $user_ary = array(); + $user_ary = $user_ids = $group_users = array(); while ($row = $db->sql_fetchrow($result)) { $row['forums'] = ''; @@ -157,11 +157,13 @@ switch ($mode) } $db->sql_freeresult($result); - if ($config['teampage_forums']) + $user_ids = array_unique($user_ids); + + if (!empty($user_ids) && $config['teampage_forums']) { $template->assign_var('S_DISPLAY_MODERATOR_FORUMS', true); // Get all moderators - $perm_ary = $auth->acl_get_list(array_unique($user_ids), array('m_'), false); + $perm_ary = $auth->acl_get_list($user_ids, array('m_'), false); foreach ($perm_ary as $forum_id => $forum_ary) {