aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/feed.php
diff options
context:
space:
mode:
authorAndreas Fischer <bantu@phpbb.com>2009-12-25 16:27:11 +0000
committerAndreas Fischer <bantu@phpbb.com>2009-12-25 16:27:11 +0000
commitf94b24bc62dc61784a5dcfff261c4ee205c7ce37 (patch)
tree935f07c6a3eefea1705502a457ed7f89ec9f407f /phpBB/feed.php
parentfaf95e858f7bb7f1a0123569f2a27efde6062ea4 (diff)
downloadforums-f94b24bc62dc61784a5dcfff261c4ee205c7ce37.tar
forums-f94b24bc62dc61784a5dcfff261c4ee205c7ce37.tar.gz
forums-f94b24bc62dc61784a5dcfff261c4ee205c7ce37.tar.bz2
forums-f94b24bc62dc61784a5dcfff261c4ee205c7ce37.tar.xz
forums-f94b24bc62dc61784a5dcfff261c4ee205c7ce37.zip
Draft for active topics feed.
git-svn-id: file:///svn/phpbb/branches/phpBB-3_0_0@10380 89ea8834-ac86-4346-8a33-228a782c2dd0
Diffstat (limited to 'phpBB/feed.php')
-rw-r--r--phpBB/feed.php119
1 files changed, 117 insertions, 2 deletions
diff --git a/phpBB/feed.php b/phpBB/feed.php
index f2d823de99..4966793176 100644
--- a/phpBB/feed.php
+++ b/phpBB/feed.php
@@ -360,6 +360,15 @@ class phpbb_feed_factory
return new phpbb_feed_topics();
break;
+ case 'topics_active':
+ if (!$config['feed_topics_active'])
+ {
+ return false;
+ }
+
+ return new phpbb_feed_topics_active();
+ break;
+
case 'news':
global $db;
@@ -680,7 +689,7 @@ class phpbb_feed_topic_base extends phpbb_feed_base
if ($config['feed_item_statistics'])
{
$item_row['statistics'] = $user->lang['POSTED'] . ' ' . $user->lang['POST_BY_AUTHOR'] . ' ' . $this->user_viewprofile($row)
- . ' ' . $this->separator_stats . ' ' . $user->format_date($row['topic_time'])
+ . ' ' . $this->separator_stats . ' ' . $user->format_date($row[$this->get('date')])
. ' ' . $this->separator_stats . ' ' . $user->lang['REPLIES'] . ' ' . $row['topic_replies']
. ' ' . $this->separator_stats . ' ' . $user->lang['VIEWS'] . ' ' . $row['topic_views'];
}
@@ -1188,7 +1197,7 @@ class phpbb_feed_news extends phpbb_feed_topic_base
}
/**
-* 'All Topics' feed
+* New Topics feed
*
* This will give you the last {$this->num_items} created topics
* including the first post.
@@ -1246,5 +1255,111 @@ class phpbb_feed_topics extends phpbb_feed_topic_base
}
}
+/**
+* Active Topics feed
+*
+* This will give you the last {$this->num_items} topics
+* with replies made withing the last {$this->sort_days} days
+* including the last post.
+*
+* @package phpBB3
+*/
+class phpbb_feed_topics_active extends phpbb_feed_topic_base
+{
+ var $sort_days = 7;
+
+ function set_keys()
+ {
+ parent::set_keys();
+
+ $this->set('author_id', 'topic_last_poster_id');
+ $this->set('creator', 'topic_last_poster_name');
+ $this->set('date', 'topic_last_post_time');
+ $this->set('text', 'post_text');
+ }
+
+ function get_sql()
+ {
+ global $db, $config;
+
+ $forum_ids_read = $this->get_readable_forums();
+ if (empty($forum_ids_read))
+ {
+ return false;
+ }
+
+ $in_fid_ary = array_intersect($forum_ids_read, $this->get_forum_ids());
+ $in_fid_ary = array_diff($in_fid_ary, $this->get_passworded_forums());
+ if (empty($in_fid_ary))
+ {
+ return false;
+ }
+
+ // Search for topics in last X days
+ $last_post_time_sql = ($this->sort_days) ? ' AND t.topic_last_post_time > ' . (time() - ($this->sort_days * 24 * 3600)) : '';
+
+ $this->sql = array(
+ 'SELECT' => 'f.forum_id, f.forum_name,
+ t.topic_id, t.topic_title, t.topic_replies, t.topic_views,
+ t.topic_last_poster_id, t.topic_last_poster_name, t.topic_last_post_time,
+ p.post_id, p.post_text, p.bbcode_bitfield, p.bbcode_uid, p.enable_bbcode, p.enable_smilies, p.enable_magic_url',
+ 'FROM' => array(
+ TOPICS_TABLE => 't',
+ POSTS_TABLE => 'p',
+ ),
+ 'LEFT_JOIN' => array(
+ array(
+ 'FROM' => array(FORUMS_TABLE => 'f'),
+ 'ON' => 'f.forum_id = t.forum_id',
+ ),
+ ),
+ 'WHERE' => 'p.post_id = t.topic_last_post_id
+ ' . $last_post_time_sql . '
+ AND t.topic_moved_id = 0
+ AND t.topic_approved = 1
+ AND (' . $db->sql_in_set('t.forum_id', $in_fid_ary) . '
+ OR t.topic_type = ' . POST_GLOBAL . ')',
+ 'ORDER_BY' => 't.topic_last_post_time DESC',
+ );
+
+ return true;
+ }
+
+ function get_forum_ids()
+ {
+ global $db, $cache;
+ static $forum_ids;
+
+ $cache_name = 'feed_topic_active_forum_ids';
+
+ 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_EXCLUDE, '= 0') . '
+ AND ' . $db->sql_bit_and('forum_flags', log(FORUM_FLAG_ACTIVE_TOPICS, 2), '<> 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, 180);
+ }
+
+ return $forum_ids;
+ }
+
+ function adjust_item(&$item_row, &$row)
+ {
+ parent::adjust_item($item_row, $row);
+
+ $item_row['title'] = (isset($row['forum_name']) && $row['forum_name'] !== '') ? $row['forum_name'] . ' ' . $this->separator . ' ' . $item_row['title'] : $item_row['title'];
+ }
+}
+
?> \ No newline at end of file