]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - plugins/TagSub/TagSub.php
Make optional arguments for getNoticeIds explicit
[quix0rs-gnu-social.git] / plugins / TagSub / TagSub.php
index fdae3e2db050e12448b0384821bedaf109f3e7ce..c0c4c1ec86f4c2233f31fbf743563019a0d21605 100644 (file)
@@ -42,7 +42,6 @@ if (!defined('STATUSNET')) {
  *
  * @see      DB_DataObject
  */
-
 class TagSub extends Managed_DataObject
 {
     public $__table = 'tagsub'; // table name
@@ -106,4 +105,64 @@ class TagSub extends Managed_DataObject
         );
     }
 
+    /**
+     * Start a tag subscription!
+     *
+     * @param profile $profile subscriber
+     * @param string $tag subscribee
+     * @return TagSub
+     */
+    static function start(Profile $profile, $tag)
+    {
+        $ts = new TagSub();
+        $ts->tag = $tag;
+        $ts->profile_id = $profile->id;
+        $ts->created = common_sql_now();
+        $ts->insert();
+        self::blow('tagsub:by_profile:%d', $profile->id);
+        return $ts;
+    }
+
+    /**
+     * End a tag subscription!
+     *
+     * @param profile $profile subscriber
+     * @param string $tag subscribee
+     */
+    static function cancel(Profile $profile, $tag)
+    {
+        $ts = TagSub::pkeyGet(array('tag' => $tag,
+                                    'profile_id' => $profile->id));
+        if ($ts) {
+            $ts->delete();
+            self::blow('tagsub:by_profile:%d', $profile->id);
+        }
+    }
+
+    static function forProfile(Profile $profile)
+    {
+        $tags = array();
+
+        $keypart = sprintf('tagsub:by_profile:%d', $profile->id);
+        $tagstring = self::cacheGet($keypart);
+        
+        if ($tagstring !== false) { // cache hit
+               if (!empty($tagstring)) {
+               $tags = explode(',', $tagstring);
+               }
+        } else {
+            $tagsub             = new TagSub();
+            $tagsub->profile_id = $profile->id;
+            $tagsub->selectAdd();
+            $tagsub->selectAdd('tag');
+
+            if ($tagsub->find()) {
+                               $tags = $tagsub->fetchAll('tag');
+            }
+
+            self::cacheSet($keypart, implode(',', $tags));
+        }
+
+        return $tags;
+    }
 }