mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-27 05:38:52 +00:00
Merge pull request #2109 from nickvergessen/ticket/11581
[ticket/11581] Hide categories on level 0 when they have no visible children
This commit is contained in:
commit
36837e1975
3 changed files with 88 additions and 3 deletions
|
@ -125,8 +125,17 @@ class p_master
|
||||||
|
|
||||||
// Clean up module cache array to only let survive modules the user can access
|
// Clean up module cache array to only let survive modules the user can access
|
||||||
$right_id = false;
|
$right_id = false;
|
||||||
|
|
||||||
|
$hide_categories = array();
|
||||||
foreach ($this->module_cache['modules'] as $key => $row)
|
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?
|
// Not allowed to view module?
|
||||||
if (!$this->module_auth_self($row['module_auth']))
|
if (!$this->module_auth_self($row['module_auth']))
|
||||||
{
|
{
|
||||||
|
@ -161,6 +170,22 @@ class p_master
|
||||||
$right_id = $row['right_id'];
|
$right_id = $row['right_id'];
|
||||||
continue;
|
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)
|
// Re-index (this is needed, else we are not able to array_slice later)
|
||||||
|
|
48
tests/functional/ucp_pm_test.php
Normal file
48
tests/functional/ucp_pm_test.php
Normal file
|
@ -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());
|
||||||
|
}
|
||||||
|
}
|
|
@ -726,15 +726,27 @@ class phpbb_functional_test_case extends phpbb_test_case
|
||||||
/**
|
/**
|
||||||
* assertContains for language strings
|
* assertContains for language strings
|
||||||
*
|
*
|
||||||
* @param string $needle Search string
|
* @param string $needle Search string
|
||||||
* @param string $haystack Search this
|
* @param string $haystack Search this
|
||||||
* @param string $message Optional failure message
|
* @param string $message Optional failure message
|
||||||
*/
|
*/
|
||||||
public function assertContainsLang($needle, $haystack, $message = null)
|
public function assertContainsLang($needle, $haystack, $message = null)
|
||||||
{
|
{
|
||||||
$this->assertContains(html_entity_decode($this->lang($needle), ENT_QUOTES), $haystack, $message);
|
$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
|
* Perform some basic assertions for the page
|
||||||
*
|
*
|
||||||
|
|
Loading…
Add table
Reference in a new issue