]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Notify Twitter when StatusNet user faves/disfaves a Twitter notice
authorEvan Prodromou <evan@status.net>
Sun, 5 Sep 2010 05:07:11 +0000 (01:07 -0400)
committerEvan Prodromou <evan@status.net>
Tue, 7 Sep 2010 08:00:59 +0000 (04:00 -0400)
plugins/TwitterBridge/TwitterBridgePlugin.php
plugins/TwitterBridge/twitteroauthclient.php

index ed17329434cb781806601b8fee229cccb222067c..f7d3b6659a5c400780a326d613739b7cc1bc56ba 100644 (file)
@@ -428,4 +428,77 @@ class TwitterBridgePlugin extends Plugin
         }
         return true;
     }
+
+    /**
+     * Notify remote users when their notices get favorited.
+     *
+     * @param Profile or User $profile of local user doing the faving
+     * @param Notice $notice being favored
+     * @return hook return value
+     */
+
+    function onEndFavorNotice(Profile $profile, Notice $notice)
+    {
+        $flink = Foreign_link::getByUserID($profile->id,
+                                           TWITTER_SERVICE); // twitter service
+
+        if (empty($flink)) {
+            return true;
+        }
+
+        if (!TwitterOAuthClient::isPackedToken($flink->credentials)) {
+            $this->log(LOG_INFO, "Skipping fave processing for {$profile->id} since link is not OAuth.");
+            return true;
+        }
+
+        $status_id = twitter_status_id($notice);
+
+        if (empty($status_id)) {
+            return true;
+        }
+
+        $token = TwitterOAuthClient::unpackToken($flink->credentials);
+        $client = new TwitterOAuthClient($token->key, $token->secret);
+
+        $client->favoritesCreate($status_id);
+
+        return true;
+    }
+
+    /**
+     * Notify remote users when their notices get de-favorited.
+     *
+     * @param Profile $profile Profile person doing the de-faving
+     * @param Notice  $notice  Notice being favored
+     *
+     * @return hook return value
+     */
+
+    function onEndDisfavorNotice(Profile $profile, Notice $notice)
+    {
+        $flink = Foreign_link::getByUserID($profile->id,
+                                           TWITTER_SERVICE); // twitter service
+
+        if (empty($flink)) {
+            return true;
+        }
+
+        if (!TwitterOAuthClient::isPackedToken($flink->credentials)) {
+            $this->log(LOG_INFO, "Skipping fave processing for {$profile->id} since link is not OAuth.");
+            return true;
+        }
+
+        $status_id = twitter_status_id($notice);
+
+        if (empty($status_id)) {
+            return true;
+        }
+
+        $token = TwitterOAuthClient::unpackToken($flink->credentials);
+        $client = new TwitterOAuthClient($token->key, $token->secret);
+
+        $client->favoritesDestroy($status_id);
+
+        return true;
+    }
 }
index 32844a16f45964228ffcdf9f56e85f8f0bcfe116..22ccaba07eda907ec34706c5ed44468e8872570d 100644 (file)
@@ -292,4 +292,36 @@ class TwitterOAuthClient extends OAuthClient
         $status = json_decode($response);
         return $status;
     }
+
+    /**
+     * Calls Twitter's /favorites/create API method
+     *
+     * @param int $id ID of the status to favorite
+     *
+     * @return object faved status
+     */
+
+    function favoritesCreate($id)
+    {
+        $url = "http://api.twitter.com/1/favorites/create/$id.json";
+        $response = $this->oAuthPost($url);
+        $status = json_decode($response);
+        return $status;
+    }
+
+    /**
+     * Calls Twitter's /favorites/destroy API method
+     *
+     * @param int $id ID of the status to unfavorite
+     *
+     * @return object unfaved status
+     */
+
+    function favoritesDestroy($id)
+    {
+        $url = "http://api.twitter.com/1/favorites/destroy/$id.json";
+        $response = $this->oAuthPost($url);
+        $status = json_decode($response);
+        return $status;
+    }
 }