]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Use Status_network's caching settings when loading Status_network_tag entries; cache...
authorBrion Vibber <brion@pobox.com>
Wed, 25 Aug 2010 18:59:39 +0000 (11:59 -0700)
committerBrion Vibber <brion@pobox.com>
Wed, 25 Aug 2010 19:22:42 +0000 (12:22 -0700)
(with fixes from tagcache branch)

classes/Status_network.php
classes/Status_network_tag.php

index 5680c145843671d0dd126e4bd0dad5b8b98839d5..c4f37ce1c67228b2827f7345d66f73fed258a265 100644 (file)
@@ -308,15 +308,7 @@ class Status_network extends Safe_DataObject
      */
     function getTags()
     {
-        $result = array();
-        
-        $tags = new Status_network_tag();
-        $tags->site_id = $this->site_id;
-        if ($tags->find()) {
-            while ($tags->fetch()) {
-                $result[] = $tags->tag;
-            }
-        }
+        $result = Status_network_tag::getTags($this->site_id);
 
         // XXX : for backwards compatibility
         if (empty($result)) {
@@ -329,6 +321,7 @@ class Status_network extends Safe_DataObject
     /**
      * Save a given set of tags
      * @param array tags
+     * @fixme only add/remove differentials
      */
     function setTags($tags)
     {
index 18c508bc8e13c8f447f710d6094f710b7d4e4c98..975392c76163a0afb5c37440c43e510be589e216 100644 (file)
@@ -61,9 +61,69 @@ class Status_network_tag extends Safe_DataObject
     ###END_AUTOCODE
 
 
-
     function pkeyGet($kv)
     {
         return Memcached_DataObject::pkeyGet('Status_network_tag', $kv);
     }
+
+    /**
+     * Fetch the (possibly cached) tag entries for the given site id.
+     * Uses status_network's cache settings.
+     *
+     * @param string $site_id
+     * @return array of strings
+     */
+    static function getTags($site_id)
+    {
+        $key = 'status_network_tags:' . $site_id;
+        if (Status_network::$cache) {
+            $packed = Status_network::$cache->get($key);
+            if (is_string($packed)) {
+                return explode('|', $packed);
+            }
+        }
+
+        $result = array();
+
+        $tags = new Status_network_tag();
+        $tags->site_id = $site_id;
+        if ($tags->find()) {
+            while ($tags->fetch()) {
+                $result[] = $tags->tag;
+            }
+        }
+
+        if (Status_network::$cache) {
+            $packed = implode('|', $result);
+            Status_network::$cache->set($key, $packed, 3600);
+        }
+
+        return $result;
+    }
+
+    /**
+     * Drop the cached tag entries for this site.
+     * Needed after inserting/deleting a tag entry.
+     */
+    function decache()
+    {
+        $key = 'status_network_tags:' . $this->site_id;
+        if (Status_network::$cache) {
+            Status_network::$cache->delete($key);
+        }
+    }
+
+    function insert()
+    {
+        $ret = parent::insert();
+        $this->decache();
+        return $ret;
+    }
+
+    function delete()
+    {
+        $ret = parent::delete();
+        $this->decache();
+        return $ret;
+    }
 }