aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNathan Guse <nathaniel.guse@gmail.com>2014-03-13 19:31:22 -0500
committerNathan Guse <nathaniel.guse@gmail.com>2014-03-13 19:31:22 -0500
commit36837e1975cafdb171f8512981caaefccd84c76c (patch)
treebfe8b18065d1aeee36675e6db9e7ca36c0aef326
parent12b8460089d3afcc0348883ba846ce99404ebe77 (diff)
parent6361d382b30f96758020d226d12b19e4f649b643 (diff)
downloadforums-36837e1975cafdb171f8512981caaefccd84c76c.tar
forums-36837e1975cafdb171f8512981caaefccd84c76c.tar.gz
forums-36837e1975cafdb171f8512981caaefccd84c76c.tar.bz2
forums-36837e1975cafdb171f8512981caaefccd84c76c.tar.xz
forums-36837e1975cafdb171f8512981caaefccd84c76c.zip
Merge pull request #2109 from nickvergessen/ticket/11581
[ticket/11581] Hide categories on level 0 when they have no visible children
-rw-r--r--phpBB/includes/functions_module.php25
-rw-r--r--tests/functional/ucp_pm_test.php48
-rw-r--r--tests/test_framework/phpbb_functional_test_case.php18
3 files changed, 88 insertions, 3 deletions
diff --git a/phpBB/includes/functions_module.php b/phpBB/includes/functions_module.php
index dca010518b..e043883145 100644
--- a/phpBB/includes/functions_module.php
+++ b/phpBB/includes/functions_module.php
@@ -125,8 +125,17 @@ class p_master
// Clean up module cache array to only let survive modules the user can access
$right_id = false;
+
+ $hide_categories = array();
foreach ($this->module_cache['modules'] as $key => $row)
{
+ // When the module has no mode (category) we check whether it has visible children
+ // before listing it as well.
+ if (!$row['module_mode'])
+ {
+ $hide_categories[(int) $row['module_id']] = $key;
+ }
+
// Not allowed to view module?
if (!$this->module_auth_self($row['module_auth']))
{
@@ -161,6 +170,22 @@ class p_master
$right_id = $row['right_id'];
continue;
}
+
+ if ($row['module_mode'])
+ {
+ // The parent category has a visible child
+ // So remove it and all its parents from the hide array
+ unset($hide_categories[(int) $row['parent_id']]);
+ foreach ($this->module_cache['parents'][$row['module_id']] as $module_id => $row_id)
+ {
+ unset($hide_categories[$module_id]);
+ }
+ }
+ }
+
+ foreach ($hide_categories as $module_id => $row_id)
+ {
+ unset($this->module_cache['modules'][$row_id]);
}
// Re-index (this is needed, else we are not able to array_slice later)
diff --git a/tests/functional/ucp_pm_test.php b/tests/functional/ucp_pm_test.php
new file mode 100644
index 0000000000..09521cc9f4
--- /dev/null
+++ b/tests/functional/ucp_pm_test.php
@@ -0,0 +1,48 @@
+<?php
+/**
+*
+* @package testing
+* @copyright (c) 2013 phpBB Group
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
+*
+*/
+
+/**
+* @group functional
+*/
+class phpbb_functional_ucp_pm_test extends phpbb_functional_test_case
+{
+ public function setUp()
+ {
+ parent::setUp();
+ $this->login();
+ $this->admin_login();
+ }
+
+ public function test_pm_enabled()
+ {
+ $crawler = self::request('GET', 'ucp.php');
+ $this->assertContainsLang('PRIVATE_MESSAGES', $crawler->filter('html')->text());
+ }
+
+ public function test_pm_disabled()
+ {
+ $this->set_allow_pm(0);
+ $crawler = self::request('GET', 'ucp.php');
+ $this->assertNotContainsLang('PRIVATE_MESSAGES', $crawler->filter('html')->text());
+ $this->set_allow_pm(1);
+ }
+
+ protected function set_allow_pm($enable_pm)
+ {
+ $crawler = self::request('GET', 'adm/index.php?sid=' . $this->sid . '&i=acp_board&mode=message');
+
+ $form = $crawler->selectButton('Submit')->form();
+ $values = $form->getValues();
+
+ $values["config[allow_privmsg]"] = $enable_pm;
+ $form->setValues($values);
+ $crawler = self::submit($form);
+ $this->assertGreaterThan(0, $crawler->filter('.successbox')->count());
+ }
+}
diff --git a/tests/test_framework/phpbb_functional_test_case.php b/tests/test_framework/phpbb_functional_test_case.php
index 411d97b590..a1a4ed73e2 100644
--- a/tests/test_framework/phpbb_functional_test_case.php
+++ b/tests/test_framework/phpbb_functional_test_case.php
@@ -726,15 +726,27 @@ class phpbb_functional_test_case extends phpbb_test_case
/**
* assertContains for language strings
*
- * @param string $needle Search string
- * @param string $haystack Search this
- * @param string $message Optional failure message
+ * @param string $needle Search string
+ * @param string $haystack Search this
+ * @param string $message Optional failure message
*/
public function assertContainsLang($needle, $haystack, $message = null)
{
$this->assertContains(html_entity_decode($this->lang($needle), ENT_QUOTES), $haystack, $message);
}
+ /**
+ * assertNotContains for language strings
+ *
+ * @param string $needle Search string
+ * @param string $haystack Search this
+ * @param string $message Optional failure message
+ */
+ public function assertNotContainsLang($needle, $haystack, $message = null)
+ {
+ $this->assertNotContains(html_entity_decode($this->lang($needle), ENT_QUOTES), $haystack, $message);
+ }
+
/*
* Perform some basic assertions for the page
*