summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--actions/favorited.php37
-rw-r--r--config.php.sample4
-rw-r--r--lib/common.php2
3 files changed, 26 insertions, 17 deletions
diff --git a/actions/favorited.php b/actions/favorited.php
index 5f6c19c16..dc8070d06 100644
--- a/actions/favorited.php
+++ b/actions/favorited.php
@@ -56,12 +56,10 @@ class FavoritedAction extends StreamAction {
function show_notices($page) {
- // XXX: Make dropoff configurable like tags?
-
- $qry =
- 'SELECT notice_id, sum(exp(-(now() - modified)/864000)) as weight ' .
- 'FROM fave GROUP BY notice_id ' .
- 'ORDER BY weight DESC';
+ $qry = 'SELECT notice.*, sum(exp(-(now() - fave.modified) / %s)) as weight ' .
+ 'FROM notice JOIN fave ON notice.id = fave.notice_id ' .
+ 'GROUP BY fave.notice_id ' .
+ 'ORDER BY weight DESC';
$offset = ($page - 1) * NOTICES_PER_PAGE;
$limit = NOTICES_PER_PAGE + 1;
@@ -72,25 +70,30 @@ class FavoritedAction extends StreamAction {
$qry .= ' LIMIT ' . $offset . ', ' . $limit;
}
- // XXX: Figure out how to cache these queries.
+ # Figure out how to cache this query
- $fave = new Fave;
- $fave->query($qry);
+ $notice = new Notice;
+ $notice->query(sprintf($qry, common_config('popular', 'dropoff')));
- $notice_list = array();
+ common_element_start('ul', array('id' => 'notices'));
- while ($fave->fetch()) {
- array_push($notice_list, $fave->notice_id);
- }
+ $cnt = 0;
- $notice = new Notice();
+ while ($notice->fetch() && $cnt <= NOTICES_PER_PAGE) {
+ $cnt++;
- $notice->query(sprintf('SELECT * FROM notice WHERE id in (%s)',
- implode(',', $notice_list)));
+ if ($cnt > NOTICES_PER_PAGE) {
+ break;
+ }
- $cnt = $this->show_notice_list($notice);
+ $item = new NoticeListItem($notice);
+ $item->show();
+ }
+
+ common_element_end('ul');
common_pagination($page > 1, $cnt > NOTICES_PER_PAGE,
$page, 'favorited');
}
+
}
diff --git a/config.php.sample b/config.php.sample
index 5f7a44c63..db1a21663 100644
--- a/config.php.sample
+++ b/config.php.sample
@@ -96,6 +96,10 @@ $config['sphinx']['port'] = 3312;
#raise this if traffic is slow, lower it if it's fast
#$config['tag']['dropoff'] = 86400.0 * 10;
+#exponential decay factor for popular (most favorited notices)
+#default 10 days -- similar to tag dropoff
+#$config['popular']['dropoff'] = 86400.0 * 10;
+
#optionally show non-local messages in public timeline
#$config['public']['localonly'] = false;
diff --git a/lib/common.php b/lib/common.php
index f727a1cc1..b8ecbe151 100644
--- a/lib/common.php
+++ b/lib/common.php
@@ -116,6 +116,8 @@ $config =
'port' => 3312),
'tag' =>
array('dropoff' => 864000.0),
+ 'popular' =>
+ array('dropoff' => 864000.0),
'daemon' =>
array('piddir' => '/var/run',
'user' => false,