diff --git a/phpBB/phpbb/feed/controller/feed.php b/phpBB/phpbb/feed/controller/feed.php index a7eb61ba6e..9df56bba0c 100644 --- a/phpBB/phpbb/feed/controller/feed.php +++ b/phpBB/phpbb/feed/controller/feed.php @@ -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 * diff --git a/tests/functional/feed_test.php b/tests/functional/feed_test.php index 984f3da0d5..39cd70019c 100644 --- a/tests/functional/feed_test.php +++ b/tests/functional/feed_test.php @@ -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(