X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=plugins%2FTwitterBridge%2Ftwitter.php;h=f913e4aeae87bc148dca6935851cd59b1305a3db;hb=f71912440a17f468b1d60db2388fc6030631fce6;hp=9c2ba502bfa58b701bc9f111c5c7310e3e3a0712;hpb=0e356d01c13408d0541b0dc04111f613c8d33120;p=quix0rs-gnu-social.git diff --git a/plugins/TwitterBridge/twitter.php b/plugins/TwitterBridge/twitter.php index 9c2ba502bf..f913e4aeae 100644 --- a/plugins/TwitterBridge/twitter.php +++ b/plugins/TwitterBridge/twitter.php @@ -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) @@ -31,7 +30,6 @@ function add_twitter_user($twitter_id, $screen_name) // Clear out any bad old foreign_users with the new user's legit URL // This can happen when users move around or fakester accounts get // repoed, and things like that. - $luser = Foreign_user::getForeignUser($twitter_id, TWITTER_SERVICE); if (!empty($luser)) { @@ -70,7 +68,6 @@ function save_twitter_user($twitter_id, $screen_name) { // Check to see whether the Twitter user is already in the system, // and update its screen name and uri if so. - $fuser = Foreign_user::getForeignUser($twitter_id, TWITTER_SERVICE); if (!empty($fuser)) { @@ -88,9 +85,7 @@ function save_twitter_user($twitter_id, $screen_name) } } else { - // Kill any old, invalid records for this screen name - $fuser = Foreign_user::getByNickname($screen_name, TWITTER_SERVICE); if (!empty($fuser)) { @@ -111,13 +106,11 @@ function save_twitter_user($twitter_id, $screen_name) } 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, // 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) || is_twitter_notice($notice->reply_to)) { @@ -130,14 +123,9 @@ function is_twitter_bound($notice, $flink) { function is_twitter_notice($id) { - $notice = Notice::staticGet('id', $id); + $n2s = Notice_to_status::staticGet('notice_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'); + return (!empty($n2s)); } function broadcast_twitter($notice) @@ -145,17 +133,51 @@ 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)) { + $retweet = retweet_notice($flink, Notice::staticGet('id', $notice->repeat_of)); + if (!empty($retweet)) { + Notice_to_status::saveNew($notice->id, $retweet->id); + } + } 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); + + if (empty($id)) { + common_log(LOG_WARNING, "Trying to retweet notice {$notice->id} with no known status id."); + return null; + } + + try { + $status = $client->statusesRetweet($id); + return $status; + } catch (OAuthClientException $e) { + return process_error($e, $flink, $notice); + } +} + +function twitter_status_id($notice) +{ + $n2s = Notice_to_status::staticGet('notice_id', $notice->id); + if (empty($n2s)) { + return null; + } else { + return $n2s->status_id; + } +} + /** * Pull any extra information from a notice that we should transfer over * to Twitter beyond the notice text itself. @@ -171,6 +193,10 @@ function twitter_update_params($notice) $params['lat'] = $notice->lat; $params['long'] = $notice->lon; } + if (!empty($notice->reply_to) && is_twitter_notice($notice->reply_to)) { + $reply = Notice::staticGet('id', $notice->reply_to); + $params['in_reply_to_status_id'] = twitter_status_id($reply); + } return $params; } @@ -185,6 +211,9 @@ function broadcast_oauth($notice, $flink) { try { $status = $client->statusesUpdate($statustxt, $params); + if (!empty($status)) { + Notice_to_status::saveNew($notice->id, $status->id); + } } catch (OAuthClientException $e) { return process_error($e, $flink, $notice); } @@ -193,7 +222,6 @@ function broadcast_oauth($notice, $flink) { // This could represent a failure posting, // or the Twitter API might just be behaving flakey. - $errmsg = sprintf('Twitter bridge - No data returned by Twitter API when ' . 'trying to post notice %d for User %s (user id %d).', $notice->id, @@ -206,7 +234,6 @@ function broadcast_oauth($notice, $flink) { } // Notice crossed the great divide - $msg = sprintf('Twitter bridge - posted notice %d to Twitter using ' . 'OAuth for User %s (user id %d).', $notice->id, @@ -218,52 +245,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(); @@ -337,11 +318,9 @@ function remove_twitter_link($flink) // Notify the user that her Twitter bridge is down if (isset($user->email)) { - $result = mail_twitter_bridge_removed($user); if (!$result) { - $msg = 'Unable to send email to notify ' . "$user->nickname (user id: $user->id) " . 'that their Twitter bridge link was ' . @@ -350,7 +329,6 @@ function remove_twitter_link($flink) common_log(LOG_WARNING, $msg); } } - } /** @@ -363,7 +341,6 @@ function remove_twitter_link($flink) * * @return boolean success flag */ - function mail_twitter_bridge_removed($user) { $profile = $user->getProfile(); @@ -376,11 +353,11 @@ function mail_twitter_bridge_removed($user) $body = sprintf(_m('Hi, %1$s. We\'re sorry to inform you that your ' . 'link to Twitter has been disabled. We no longer seem to have ' . - 'permission to update your Twitter status. (Did you revoke ' . - '%3$s\'s access?)' . "\n\n" . + 'permission to update your Twitter status. Did you maybe revoke ' . + '%3$s\'s access?' . "\n\n" . 'You can re-enable your Twitter bridge by visiting your ' . "Twitter settings page:\n\n\t%2\$s\n\n" . - "Regards,\n%3\$s\n"), + "Regards,\n%3\$s"), $profile->getBestName(), common_local_url('twittersettings'), common_config('site', 'name')); @@ -388,4 +365,3 @@ function mail_twitter_bridge_removed($user) common_switch_locale(); return mail_to_user($user, $subject, $body); } -