forked from GNUsocial/gnu-social
Use cached sources for favorites & repeats info on threaded notice lists
This commit is contained in:
@@ -44,6 +44,7 @@ class Fave extends Memcached_DataObject
|
||||
common_log_db_error($fave, 'INSERT', __FILE__);
|
||||
return false;
|
||||
}
|
||||
self::blow('fave:by_notice', $fave->notice_id);
|
||||
|
||||
Event::handle('EndFavorNotice', array($profile, $notice));
|
||||
}
|
||||
@@ -61,6 +62,7 @@ class Fave extends Memcached_DataObject
|
||||
if (Event::handle('StartDisfavorNotice', array($profile, $notice, &$result))) {
|
||||
|
||||
$result = parent::delete();
|
||||
self::blow('fave:by_notice', $this->notice_id);
|
||||
|
||||
if ($result) {
|
||||
Event::handle('EndDisfavorNotice', array($profile, $notice));
|
||||
@@ -208,4 +210,31 @@ class Fave extends Memcached_DataObject
|
||||
|
||||
return $fav;
|
||||
}
|
||||
|
||||
/**
|
||||
* Grab a list of profile who have favored this notice.
|
||||
*
|
||||
* @return ArrayWrapper masquerading as a Fave
|
||||
*/
|
||||
static function byNotice($noticeId)
|
||||
{
|
||||
$c = self::memcache();
|
||||
$key = Cache::key('fave:by_notice', $noticeId);
|
||||
|
||||
$wrapper = $c->get($key);
|
||||
if (!$wrapper) {
|
||||
// @fixme caching & scalability!
|
||||
$fave = new Fave();
|
||||
$fave->notice_id = $noticeId;
|
||||
$fave->find();
|
||||
|
||||
$profiles = array();
|
||||
while ($fave->fetch()) {
|
||||
$list[] = clone($fave);
|
||||
}
|
||||
$wrapper = new ArrayWrapper($list);
|
||||
$c->set($key, $wrapper);
|
||||
}
|
||||
return $wrapper;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user