]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - classes/Status_network_tag.php
Merge branch 'extprofile' into 0.9.x
[quix0rs-gnu-social.git] / classes / Status_network_tag.php
index 18c508bc8e13c8f447f710d6094f710b7d4e4c98..2273ecb2e5cf90fb08d96c30ba3ca65996673474 100644 (file)
@@ -26,7 +26,7 @@ class Status_network_tag extends Safe_DataObject
 
     public $__table = 'status_network_tag';                      // table name
     public $site_id;                  // int(4)  primary_key not_null
-    public $tag;                      // varchar(64)  primary_key not_null 
+    public $tag;                      // varchar(64)  primary_key not_null
     public $created;                 // datetime()   not_null
 
 
@@ -34,7 +34,7 @@ class Status_network_tag extends Safe_DataObject
     {
         global $config;
         global $_DB_DATAOBJECT;
-        
+
         $sn = new Status_network();
         $sn->_connect();
 
@@ -43,7 +43,6 @@ class Status_network_tag extends Safe_DataObject
         $this->_connect();
     }
 
-
     /* Static get */
     function staticGet($k,$v=null)
     {
@@ -61,9 +60,73 @@ 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)) {
+                if ($packed == '') {
+                    return array();
+                } else {
+                    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, 0, 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;
+    }
 }