aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Fischer <bantu@phpbb.com>2009-12-20 13:52:56 +0000
committerAndreas Fischer <bantu@phpbb.com>2009-12-20 13:52:56 +0000
commit7ac774432e3cc22051d8e5c448690979e9e55c0f (patch)
treec0e54b33bfe699ffd16cd19e44355020d374fd91 /phpBB/feed.php
parentProvide some more generic methods. (diff)
downloadphpbb-7ac774432e3cc22051d8e5c448690979e9e55c0f.tar.gz
phpbb-7ac774432e3cc22051d8e5c448690979e9e55c0f.tar.bz2
phpbb-7ac774432e3cc22051d8e5c448690979e9e55c0f.zip
Improve news feed. It basically only runs two queries now for the main content.
git-svn-id: file:///svn/phpbb/branches/phpBB-3_0_0@10352 89ea8834-ac86-4346-8a33-228a782c2dd0
Diffstat (limited to 'phpBB/feed.php')
-rw-r--r--phpBB/feed.php55
1 files changed, 41 insertions, 14 deletions
diff --git a/phpBB/feed.php b/phpBB/feed.php
index 014d768fc4..04b6b09af4 100644
--- a/phpBB/feed.php
+++ b/phpBB/feed.php
@@ -1041,41 +1041,68 @@ class phpbb_feed_news extends phpbb_feed_base
$this->num_items = (int) $config['feed_limit'];
}
+ function get_news_forums()
+ {
+ global $db, $cache;
+ static $forum_ids;
+
+ $cache_name = 'feed_news_forum_ids';
+ $cache_ttl = 300;
+
+ if (!isset($forum_ids) && ($forum_ids = $cache->get('_' . $cache_name)) === false)
+ {
+ $sql = 'SELECT forum_id
+ FROM ' . FORUMS_TABLE . '
+ WHERE ' . $db->sql_bit_and('forum_options', FORUM_OPTION_FEED_NEWS, '<> 0');
+ $result = $db->sql_query($sql);
+
+ $forum_ids = array();
+ while ($forum_id = (int) $db->sql_fetchfield('forum_id'))
+ {
+ $forum_ids[$forum_id] = $forum_id;
+ }
+ $db->sql_freeresult($result);
+
+ $cache->put('_' . $cache_name, $forum_ids, $cache_ttl);
+ }
+
+ return $forum_ids;
+ }
+
function get_sql()
{
global $auth, $config, $db;
+ // Determine forum ids
+ $forum_ids_news = $this->get_news_forums();
+
+ // Very very unlikely, check anyway
+ if (empty($forum_ids_news))
+ {
+ return false;
+ }
+
// Get passworded forums
$forum_ids_passworded = $this->get_passworded_forums();
- // Get news forums...
- $sql = 'SELECT forum_id
- FROM ' . FORUMS_TABLE . '
- WHERE ' . $db->sql_bit_and('forum_options', FORUM_OPTION_FEED_NEWS, '<> 0');
- $result = $db->sql_query($sql);
-
+ // Check forum_ids
$in_fid_ary = array();
- while ($row = $db->sql_fetchrow($result))
+ foreach ($forum_ids_news as $forum_id)
{
- $forum_id = (int) $row['forum_id'];
-
- // Passworded forum
if (isset($forum_ids_passworded[$forum_id]))
{
continue;
}
- // Make sure we can read this forum
if (!$auth->acl_get('f_read', $forum_id))
{
continue;
}
- $in_fid_ary[] = (int) $row['forum_id'];
+ $in_fid_ary[] = $forum_id;
}
- $db->sql_freeresult($result);
- if (!sizeof($in_fid_ary))
+ if (empty($in_fid_ary))
{
return false;
}