- $profile = Profile::current();
-
- $keypart = sprintf('Inbox:notice_tag:%d:%d', $this->target,
- $profile instanceof Profile ? $profile->id : 0);
-
- $tag = Memcached_DataObject::cacheGet($keypart);
-
- if ($tag === false) {
-
- $stream = new InboxNoticeStream($this->target, $profile);
-
- $ids = $stream->getNoticeIds(0, Inbox::MAX_NOTICES, null, null);
-
- if (empty($ids)) {
- $tag = array();
+ // FIXME: Get the Profile::current() value some other way
+ // to avoid confusion between background stuff and session.
+ $stream = new InboxNoticeStream($this->target, Profile::current());
+
+ $ids = $stream->getNoticeIds(0, self::MAX_NOTICES, null, null);
+
+ if (empty($ids)) {
+ $tag = array();
+ } else {
+ $weightexpr = common_sql_weight('notice_tag.created', common_config('tag', 'dropoff'));
+ // @fixme should we use the cutoff too? Doesn't help with indexing per-user.
+
+ $qry = 'SELECT notice_tag.tag, '.
+ $weightexpr . ' as weight ' .
+ 'FROM notice_tag JOIN notice ' .
+ 'ON notice_tag.notice_id = notice.id ' .
+ 'WHERE notice.id in (' . implode(',', $ids) . ')'.
+ 'GROUP BY notice_tag.tag ' .
+ 'ORDER BY weight DESC ';
+
+ $limit = TAGS_PER_SECTION;
+ $offset = 0;
+
+ if (common_config('db','type') == 'pgsql') {
+ $qry .= ' LIMIT ' . $limit . ' OFFSET ' . $offset;