]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Cache RSVP counts for Event plugin
authorEvan Prodromou <evan@status.net>
Thu, 7 Apr 2011 04:01:51 +0000 (00:01 -0400)
committerEvan Prodromou <evan@status.net>
Thu, 7 Apr 2011 04:01:51 +0000 (00:01 -0400)
plugins/Event/RSVP.php

index 314d297a3604c8aaa38df0b2f6781f8513f8fad4..85862d375df134e33eac3f89da3dea233bf567ac 100644 (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();
+    }
 }