]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
cache groups per user
authorEvan Prodromou <evan@status.net>
Tue, 5 Apr 2011 21:20:17 +0000 (17:20 -0400)
committerEvan Prodromou <evan@status.net>
Tue, 5 Apr 2011 21:20:17 +0000 (17:20 -0400)
classes/Profile.php

index 73a98d4ff51541e1b4b4e05c9d99e3c37af97098..f7a94413b253d76b8127b68eb0068c8eb64c14f1 100644 (file)
@@ -245,30 +245,37 @@ class Profile extends Memcached_DataObject
         return !empty($request);
     }
 
-    function getGroups($offset=0, $limit=null)
+    function getGroups($offset=0, $limit=PROFILES_PER_PAGE)
     {
-        $qry =
-          'SELECT user_group.* ' .
-          'FROM user_group JOIN group_member '.
-          'ON user_group.id = group_member.group_id ' .
-          'WHERE group_member.profile_id = %d ' .
-          'ORDER BY group_member.created DESC ';
-
-        if ($offset>0 && !is_null($limit)) {
-            if ($offset) {
-                if (common_config('db','type') == 'pgsql') {
-                    $qry .= ' LIMIT ' . $limit . ' OFFSET ' . $offset;
-                } else {
-                    $qry .= ' LIMIT ' . $offset . ', ' . $limit;
+        $ids = array();
+        
+        $keypart = sprintf('profile:groups:%d', $this->id);
+
+        $idstring = self::cacheGet($keypart);
+
+        if ($idstring !== false) {
+            $ids = explode(',', $idstring);
+        } else {
+            $gm = new Group_member();
+
+            $gm->profile_id = $this->id;
+
+            if ($gm->find()) {
+                while ($gm->fetch()) {
+                    $ids[] = $gm->group_id;
                 }
             }
+
+            self::cacheSet($keypart, implode(',', $ids));
         }
 
-        $groups = new User_group();
+        $groups = array();
 
-        $cnt = $groups->query(sprintf($qry, $this->id));
+        foreach ($ids as $id) {
+            $groups[] = User_group::staticGet('id', $id);
+        }
 
-        return $groups;
+        return new ArrayWrapper($groups);
     }
 
     /**
@@ -286,6 +293,7 @@ class Profile extends Memcached_DataObject
         } else {
             if (Event::handle('StartJoinGroup', array($group, $this))) {
                 $join = Group_member::join($group->id, $this->id);
+                self::blow('profile:groups:%d', $this->id);
                 Event::handle('EndJoinGroup', array($group, $this));
             }
         }
@@ -305,6 +313,7 @@ class Profile extends Memcached_DataObject
     {
         if (Event::handle('StartLeaveGroup', array($group, $this))) {
             Group_member::leave($group->id, $this->id);
+            self::blow('profile:groups:%d', $this->id);
             Event::handle('EndLeaveGroup', array($group, $this));
         }
     }