]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - plugins/TwitterBridge/twitter.php
remove require_once for disappeared TwitterBasicAuthClient
[quix0rs-gnu-social.git] / plugins / TwitterBridge / twitter.php
index 306ba2442abc7ee572318bb18ec0522b4bce2f65..b8e5457402b46018b001b9834ac610b3f81f815a 100644 (file)
@@ -23,7 +23,6 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
 
 define('TWITTER_SERVICE', 1); // Twitter is foreign_service ID 1
 
-require_once INSTALLDIR . '/plugins/TwitterBridge/twitterbasicauthclient.php';
 require_once INSTALLDIR . '/plugins/TwitterBridge/twitteroauthclient.php';
 
 function add_twitter_user($twitter_id, $screen_name)
@@ -115,9 +114,12 @@ function is_twitter_bound($notice, $flink) {
     // Check to see if notice should go to Twitter
     if (!empty($flink) && ($flink->noticesync & FOREIGN_NOTICE_SEND)) {
 
-        // If it's not a Twitter-style reply, or if the user WANTS to send replies.
+        // If it's not a Twitter-style reply, or if the user WANTS to send replies,
+        // or if it's in reply to a twitter notice
+
         if (!preg_match('/^@[a-zA-Z0-9_]{1,15}\b/u', $notice->content) ||
-            ($flink->noticesync & FOREIGN_NOTICE_SEND_REPLY)) {
+            ($flink->noticesync & FOREIGN_NOTICE_SEND_REPLY) ||
+            is_twitter_notice($notice->reply_to)) {
             return true;
         }
     }
@@ -125,22 +127,60 @@ function is_twitter_bound($notice, $flink) {
     return false;
 }
 
+function is_twitter_notice($id)
+{
+    $notice = Notice::staticGet('id', $id);
+
+    if (empty($notice)) {
+        // it's not any kind of notice, so it's definitely not a Twitter notice.
+        return false;
+    }
+
+    return ($notice->source == 'twitter');
+}
+
 function broadcast_twitter($notice)
 {
     $flink = Foreign_link::getByUserID($notice->profile_id,
                                        TWITTER_SERVICE);
 
-    if (is_twitter_bound($notice, $flink)) {
-        if (TwitterOAuthClient::isPackedToken($flink->credentials)) {
+    // Don't bother with basic auth, since it's no longer allowed
+
+    if (!empty($flink) && TwitterOAuthClient::isPackedToken($flink->credentials)) {
+        if (!empty($notice->repeat_of) && is_twitter_notice($notice->repeat_of)) {
+            return retweet_notice($flink, Notice::staticGet('id', $notice->repeat_of));
+        } else if (is_twitter_bound($notice, $flink)) {
             return broadcast_oauth($notice, $flink);
-        } else {
-            return broadcast_basicauth($notice, $flink);
         }
     }
 
     return true;
 }
 
+function retweet_notice($flink, $notice)
+{
+    $token = TwitterOAuthClient::unpackToken($flink->credentials);
+    $client = new TwitterOAuthClient($token->key, $token->secret);
+
+    $id = twitter_status_id($notice);
+
+    try {
+        $status = $client->statusesRetweet($id);
+    } catch (OAuthClientException $e) {
+        return process_error($e, $flink, $notice);
+    }
+}
+
+function twitter_status_id($notice)
+{
+    if ($notice->source == 'twitter' &&
+        preg_match('#^http://twitter.com/[\w_.]+/status/(\d+)$#', $notice->uri, $match)) {
+        return $match[1];
+    }
+
+    return null;
+}
+
 /**
  * Pull any extra information from a notice that we should transfer over
  * to Twitter beyond the notice text itself.
@@ -159,7 +199,6 @@ function twitter_update_params($notice)
     return $params;
 }
 
-
 function broadcast_oauth($notice, $flink) {
     $user = $flink->getUser();
     $statustxt = format_status($notice);
@@ -204,52 +243,6 @@ function broadcast_oauth($notice, $flink) {
     return true;
 }
 
-function broadcast_basicauth($notice, $flink)
-{
-    $user = $flink->getUser();
-
-    $statustxt = format_status($notice);
-    $params = twitter_update_params($notice);
-
-    $client = new TwitterBasicAuthClient($flink);
-    $status = null;
-
-    try {
-        $status = $client->statusesUpdate($statustxt, $params);
-    } catch (BasicAuthException $e) {
-        return process_error($e, $flink, $notice);
-    }
-
-    if (empty($status)) {
-
-        $errmsg = sprintf('Twitter bridge - No data returned by Twitter API when ' .
-                          'trying to post notice %d for %s (user id %d).',
-                          $notice->id,
-                          $user->nickname,
-                          $user->id);
-
-        common_log(LOG_WARNING, $errmsg);
-
-        $errmsg = sprintf('No data returned by Twitter API when ' .
-                          'trying to post notice %d for %s (user id %d).',
-                          $notice->id,
-                          $user->nickname,
-                          $user->id);
-        common_log(LOG_WARNING, $errmsg);
-        return false;
-    }
-
-    $msg = sprintf('Twitter bridge - posted notice %d to Twitter using ' .
-                   'HTTP basic auth for User %s (user id %d).',
-                   $notice->id,
-                   $user->nickname,
-                   $user->id);
-
-    common_log(LOG_INFO, $msg);
-
-    return true;
-}
-
 function process_error($e, $flink, $notice)
 {
     $user = $flink->getUser();