diff options
author | Andreas Fischer <bantu@phpbb.com> | 2009-12-20 13:52:56 +0000 |
---|---|---|
committer | Andreas Fischer <bantu@phpbb.com> | 2009-12-20 13:52:56 +0000 |
commit | 7ac774432e3cc22051d8e5c448690979e9e55c0f (patch) | |
tree | c0e54b33bfe699ffd16cd19e44355020d374fd91 /phpBB/feed.php | |
parent | Provide some more generic methods. (diff) | |
download | phpbb-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.php | 55 |
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; } |