Merge pull request #6780 from Neo-CTC/ticket/17470

[ticket/17470] Feed enable config not enforced
This commit is contained in:
Marc Alexander 2025-02-16 18:00:31 +01:00 committed by GitHub
commit 4f5ace858d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 55 additions and 0 deletions

View file

@ -134,6 +134,8 @@ class feed
*/
public function forums()
{
$this->check_enabled();
if (!$this->config['feed_overall_forums'])
{
$this->send_unavailable();
@ -151,6 +153,8 @@ class feed
*/
public function news()
{
$this->check_enabled();
// Get at least one news forum
$sql = 'SELECT forum_id
FROM ' . FORUMS_TABLE . '
@ -176,6 +180,8 @@ class feed
*/
public function topics()
{
$this->check_enabled();
if (!$this->config['feed_topics_new'])
{
$this->send_unavailable();
@ -193,6 +199,8 @@ class feed
*/
public function topics_new()
{
$this->check_enabled();
return $this->topics();
}
@ -205,6 +213,8 @@ class feed
*/
public function topics_active()
{
$this->check_enabled();
if (!$this->config['feed_topics_active'])
{
$this->send_unavailable();
@ -224,6 +234,8 @@ class feed
*/
public function forum($forum_id)
{
$this->check_enabled();
if (!$this->config['feed_forum'])
{
$this->send_unavailable();
@ -243,6 +255,8 @@ class feed
*/
public function topic($topic_id)
{
$this->check_enabled();
if (!$this->config['feed_topic'])
{
$this->send_unavailable();
@ -260,6 +274,8 @@ class feed
*/
public function overall()
{
$this->check_enabled();
if (!$this->config['feed_overall'])
{
$this->send_unavailable();
@ -407,6 +423,22 @@ class feed
return $response;
}
/**
* Check if feeds are enabled in the configuration.
*
* @throws http_exception If feeds are disabled.
*
* @return void
*/
protected function check_enabled()
{
// Feeds are disabled, no need to continue
if (!$this->config['feed_enable'])
{
throw new http_exception(404, 'NO_FEED_ENABLED');
}
}
/**
* Throw and exception saying that the feed isn't available
*

View file

@ -261,6 +261,29 @@ class phpbb_functional_feed_test extends phpbb_functional_test_case
$this->data['topics']['Feeds #exclude - Topic #1'] = (int) $post['topic_id'];
}
public function test_feeds_disabled()
{
$this->login();
$this->admin_login();
// Disable feeds in ACP
$crawler = self::request('GET', "adm/index.php?sid={$this->sid}&i=acp_board&mode=feed");
$form = $crawler->selectButton('Submit')->form();
$crawler = self::submit($form, ['config[feed_enable]' => false]);
self::assertContainsLang('CONFIG_UPDATED', $crawler->filter('.successbox')->text());
// Assert that feeds aren't available
$crawler = self::request('GET', 'app.php/feed/overall', array(), false);
self::assert_response_status_code(404);
$this->assertContainsLang('NO_FEED_ENABLED', $crawler->text());
// Enable feeds again in ACP
$crawler = self::request('GET', "adm/index.php?sid={$this->sid}&i=acp_board&mode=feed");
$form = $crawler->selectButton('Submit')->form();
$crawler = self::submit($form, ['config[feed_enable]' => true]);
self::assertContainsLang('CONFIG_UPDATED', $crawler->filter('.successbox')->text());
}
public function test_feeds_exclude()
{
$this->load_ids(array(