forked from GNUsocial/gnu-social
Don't cache user-specific information for Notice atom entries
This commit is contained in:
parent
db519d3ffb
commit
94ff04e190
@ -1234,7 +1234,7 @@ class Notice extends Memcached_DataObject
|
|||||||
* @return Activity activity object representing this Notice.
|
* @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));
|
$act = self::cacheGet(Cache::codeKey('notice:as-activity:'.$this->id));
|
||||||
|
|
||||||
@ -1332,68 +1332,37 @@ class Notice extends Memcached_DataObject
|
|||||||
|
|
||||||
$act->context = $ctx;
|
$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)) {
|
if (!empty($atom_feed)) {
|
||||||
$noticeInfoAttr['source'] = $ns->code;
|
|
||||||
if (!empty($ns->url)) {
|
$act->source = new ActivitySource();
|
||||||
$noticeInfoAttr['source_link'] = $ns->url;
|
|
||||||
if (!empty($ns->name)) {
|
// XXX: we should store the actual feed ID
|
||||||
$noticeInfoAttr['source'] = '<a href="'
|
|
||||||
. htmlspecialchars($ns->url)
|
$act->source->id = $atom_feed;
|
||||||
. '" rel="nofollow">'
|
|
||||||
. htmlspecialchars($ns->name)
|
// XXX: we should store the actual feed title
|
||||||
. '</a>';
|
|
||||||
}
|
$act->source->title = $profile->getBestName();
|
||||||
|
|
||||||
|
$act->source->links['alternate'] = $profile->profileurl;
|
||||||
|
$act->source->links['self'] = $atom_feed;
|
||||||
|
|
||||||
|
$act->source->icon = $profile->avatarUrl(AVATAR_PROFILE_SIZE);
|
||||||
|
|
||||||
|
$notice = $profile->getCurrentNotice();
|
||||||
|
|
||||||
|
if (!empty($notice)) {
|
||||||
|
$act->source->updated = self::utcDate($notice->created);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (!empty($cur)) {
|
$user = User::staticGet('id', $profile->id);
|
||||||
$noticeInfoAttr['favorite'] = ($cur->hasFave($this)) ? "true" : "false";
|
|
||||||
$cp = $cur->getProfile();
|
|
||||||
$noticeInfoAttr['repeated'] = ($cp->hasRepeated($this->id)) ? "true" : "false";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!empty($this->repeat_of)) {
|
if (!empty($user)) {
|
||||||
$noticeInfoAttr['repeat_of'] = $this->repeat_of;
|
$act->source->links['license'] = common_config('license', 'url');
|
||||||
}
|
|
||||||
|
|
||||||
$act->extra[] = array('statusnet:notice_info', $noticeInfoAttr, null);
|
|
||||||
|
|
||||||
if ($source) {
|
|
||||||
|
|
||||||
$atom_feed = $profile->getAtomFeed();
|
|
||||||
|
|
||||||
if (!empty($atom_feed)) {
|
|
||||||
|
|
||||||
$act->source = new ActivitySource();
|
|
||||||
|
|
||||||
// XXX: we should store the actual feed ID
|
|
||||||
|
|
||||||
$act->source->id = $atom_feed;
|
|
||||||
|
|
||||||
// XXX: we should store the actual feed title
|
|
||||||
|
|
||||||
$act->source->title = $profile->getBestName();
|
|
||||||
|
|
||||||
$act->source->links['alternate'] = $profile->profileurl;
|
|
||||||
$act->source->links['self'] = $atom_feed;
|
|
||||||
|
|
||||||
$act->source->icon = $profile->avatarUrl(AVATAR_PROFILE_SIZE);
|
|
||||||
|
|
||||||
$notice = $profile->getCurrentNotice();
|
|
||||||
|
|
||||||
if (!empty($notice)) {
|
|
||||||
$act->source->updated = self::utcDate($notice->created);
|
|
||||||
}
|
|
||||||
|
|
||||||
$user = User::staticGet('id', $profile->id);
|
|
||||||
|
|
||||||
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
|
// This has gotten way too long. Needs to be sliced up into functional bits
|
||||||
// or ideally exported to a utility class.
|
// 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($cur, $source);
|
$act = $this->asActivity();
|
||||||
return $act->asString($namespace, $author);
|
$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)
|
||||||
|
{
|
||||||
|
// 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
|
* Returns an XML string fragment with a reference to a notice as an
|
||||||
|
@ -327,16 +327,8 @@ class Activity
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
function asString($namespace=false, $author=true)
|
function asString($namespace=false, $author=true, $source=false)
|
||||||
{
|
{
|
||||||
$c = Cache::instance();
|
|
||||||
|
|
||||||
$str = $c->get(Cache::codeKey('activity:as-string:'.$this->id));
|
|
||||||
|
|
||||||
if (!empty($str)) {
|
|
||||||
return $str;
|
|
||||||
}
|
|
||||||
|
|
||||||
$xs = new XMLStringer(true);
|
$xs = new XMLStringer(true);
|
||||||
|
|
||||||
if ($namespace) {
|
if ($namespace) {
|
||||||
@ -502,7 +494,7 @@ class Activity
|
|||||||
|
|
||||||
// Info on the source feed
|
// Info on the source feed
|
||||||
|
|
||||||
if (!empty($this->source)) {
|
if ($source && !empty($this->source)) {
|
||||||
$xs->elementStart('source');
|
$xs->elementStart('source');
|
||||||
|
|
||||||
$xs->element('id', null, $this->source->id);
|
$xs->element('id', null, $this->source->id);
|
||||||
@ -559,8 +551,6 @@ class Activity
|
|||||||
|
|
||||||
$str = $xs->getString();
|
$str = $xs->getString();
|
||||||
|
|
||||||
$c->set(Cache::codeKey('activity:as-string:'.$this->id), $str);
|
|
||||||
|
|
||||||
return $str;
|
return $str;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user