Cache RSVP counts for Event plugin

This commit is contained in:
Evan Prodromou 2011-04-07 00:01:51 -04:00
parent 524b98bfa3
commit a1fa47d904
1 changed files with 36 additions and 11 deletions

View File

@ -138,8 +138,6 @@ class RSVP extends Managed_DataObject
function saveNew($profile, $event, $verb, $options=array())
{
common_debug("RSVP::saveNew({$profile->id}, {$event->id}, '$verb', 'some options');");
if (array_key_exists('uri', $options)) {
$other = RSVP::staticGet('uri', $options['uri']);
if (!empty($other)) {
@ -161,8 +159,6 @@ class RSVP extends Managed_DataObject
$rsvp->event_id = $event->id;
$rsvp->response = self::codeFor($verb);
common_debug("Got value {$rsvp->response} for verb {$verb}");
if (array_key_exists('created', $options)) {
$rsvp->created = $options['created'];
} else {
@ -178,6 +174,8 @@ class RSVP extends Managed_DataObject
$rsvp->insert();
self::blow('rsvp:for-event:%s', $event->id);
// XXX: come up with something sexier
$content = $rsvp->asString();
@ -256,18 +254,39 @@ class RSVP extends Managed_DataObject
static function forEvent($event)
{
$keypart = sprintf('rsvp:for-event:%s', $event->id);
$idstr = self::cacheGet($keypart);
if ($idstr !== false) {
$ids = explode(',', $idstr);
} else {
$ids = array();
$rsvp = new RSVP();
$rsvp->selectAdd();
$rsvp->selectAdd('id');
$rsvp->event_id = $event->id;
if ($rsvp->find()) {
while ($rsvp->fetch()) {
$ids[] = $rsvp->id;
}
}
self::cacheSet($keypart, implode(',', $ids));
}
$rsvps = array(RSVP::POSITIVE => array(),
RSVP::NEGATIVE => array(),
RSVP::POSSIBLE => array());
$rsvp = new RSVP();
$rsvp->event_id = $event->id;
if ($rsvp->find()) {
while ($rsvp->fetch()) {
foreach ($ids as $id) {
$rsvp = RSVP::staticGet('id', $id);
if (!empty($rsvp)) {
$verb = self::verbFor($rsvp->response);
$rsvps[$verb][] = clone($rsvp);
$rsvps[$verb][] = $rsvp;
}
}
@ -375,4 +394,10 @@ class RSVP extends Managed_DataObject
$profile->getBestName(),
$eventTitle);
}
function delete()
{
self::blow('rsvp:for-event:%s', $event->id);
parent::delete();
}
}