diff options
author | Evan Prodromou <evan@status.net> | 2010-12-08 07:25:55 -0500 |
---|---|---|
committer | Evan Prodromou <evan@status.net> | 2010-12-08 07:25:55 -0500 |
commit | b8b5b87c4c106f59e346ca20e45458192f68a744 (patch) | |
tree | 7c61b586fc0c76cf512c2db7d97b9a03c9325bd8 /classes | |
parent | 4b4b763255ad3b2bff8f18da2bd3927b52a54e55 (diff) |
Don't cache user-specific information for Notice atom entries
Diffstat (limited to 'classes')
-rw-r--r-- | classes/Notice.php | 130 |
1 files changed, 76 insertions, 54 deletions
diff --git a/classes/Notice.php b/classes/Notice.php index d6710c3e2..a067cd374 100644 --- a/classes/Notice.php +++ b/classes/Notice.php @@ -1234,7 +1234,7 @@ class Notice extends Memcached_DataObject * @return Activity activity object representing this Notice. */ - function asActivity($cur = null, $source = false) + function asActivity() { $act = self::cacheGet(Cache::codeKey('notice:as-activity:'.$this->id)); @@ -1332,68 +1332,37 @@ class Notice extends Memcached_DataObject $act->context = $ctx; - $noticeInfoAttr = array('local_id' => $this->id); // local notice ID (useful to clients for ordering) + // Source - $ns = $this->getSource(); + $atom_feed = $profile->getAtomFeed(); - if (!empty($ns)) { - $noticeInfoAttr['source'] = $ns->code; - if (!empty($ns->url)) { - $noticeInfoAttr['source_link'] = $ns->url; - if (!empty($ns->name)) { - $noticeInfoAttr['source'] = '<a href="' - . htmlspecialchars($ns->url) - . '" rel="nofollow">' - . htmlspecialchars($ns->name) - . '</a>'; - } - } - } - - if (!empty($cur)) { - $noticeInfoAttr['favorite'] = ($cur->hasFave($this)) ? "true" : "false"; - $cp = $cur->getProfile(); - $noticeInfoAttr['repeated'] = ($cp->hasRepeated($this->id)) ? "true" : "false"; - } - - if (!empty($this->repeat_of)) { - $noticeInfoAttr['repeat_of'] = $this->repeat_of; - } - - $act->extra[] = array('statusnet:notice_info', $noticeInfoAttr, null); - - if ($source) { - - $atom_feed = $profile->getAtomFeed(); + if (!empty($atom_feed)) { - if (!empty($atom_feed)) { - - $act->source = new ActivitySource(); + $act->source = new ActivitySource(); - // XXX: we should store the actual feed ID + // XXX: we should store the actual feed ID - $act->source->id = $atom_feed; + $act->source->id = $atom_feed; - // XXX: we should store the actual feed title + // XXX: we should store the actual feed title - $act->source->title = $profile->getBestName(); + $act->source->title = $profile->getBestName(); - $act->source->links['alternate'] = $profile->profileurl; - $act->source->links['self'] = $atom_feed; + $act->source->links['alternate'] = $profile->profileurl; + $act->source->links['self'] = $atom_feed; - $act->source->icon = $profile->avatarUrl(AVATAR_PROFILE_SIZE); + $act->source->icon = $profile->avatarUrl(AVATAR_PROFILE_SIZE); - $notice = $profile->getCurrentNotice(); + $notice = $profile->getCurrentNotice(); - if (!empty($notice)) { - $act->source->updated = self::utcDate($notice->created); - } + if (!empty($notice)) { + $act->source->updated = self::utcDate($notice->created); + } - $user = User::staticGet('id', $profile->id); + $user = User::staticGet('id', $profile->id); - if (!empty($user)) { - $act->source->links['license'] = common_config('license', 'url'); - } + if (!empty($user)) { + $act->source->links['license'] = common_config('license', 'url'); } } @@ -1414,12 +1383,65 @@ class Notice extends Memcached_DataObject // This has gotten way too long. Needs to be sliced up into functional bits // or ideally exported to a utility class. - function asAtomEntry($namespace=false, $source=false, $author=true, $cur=null) + function asAtomEntry($namespace=false, + $source=false, + $author=true, + $cur=null) + { + $act = $this->asActivity(); + $act->extra[] = $this->noticeInfo($cur); + return $act->asString($namespace, $author, $source); + } + + /** + * Extra notice info for atom entries + * + * Clients use some extra notice info in the atom stream. + * This gives it to them. + * + * @param User $cur Current user + * + * @return array representation of <statusnet:notice_info> element + */ + + function noticeInfo($cur) { - $act = $this->asActivity($cur, $source); - return $act->asString($namespace, $author); + // local notice ID (useful to clients for ordering) + + $noticeInfoAttr = array('local_id' => $this->id); + + // notice source + + $ns = $this->getSource(); + + if (!empty($ns)) { + $noticeInfoAttr['source'] = $ns->code; + if (!empty($ns->url)) { + $noticeInfoAttr['source_link'] = $ns->url; + if (!empty($ns->name)) { + $noticeInfoAttr['source'] = '<a href="' + . htmlspecialchars($ns->url) + . '" rel="nofollow">' + . htmlspecialchars($ns->name) + . '</a>'; + } + } + } + + // favorite and repeated + + if (!empty($cur)) { + $noticeInfoAttr['favorite'] = ($cur->hasFave($this)) ? "true" : "false"; + $cp = $cur->getProfile(); + $noticeInfoAttr['repeated'] = ($cp->hasRepeated($this->id)) ? "true" : "false"; + } + + if (!empty($this->repeat_of)) { + $noticeInfoAttr['repeat_of'] = $this->repeat_of; + } + + return array('statusnet:notice_info', $noticeInfoAttr, null); } - /** * Returns an XML string fragment with a reference to a notice as an |