X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=plugins%2FTwitterBridge%2Ftwitter.php;h=cd1ad70b9b8369fe9b512afd8d18cb5b1d4ff10e;hb=04ca706601a2a3b556cc52fa21b61fcd842c4e87;hp=33d5443c229b98eb86b9c94a32bd38d0847d7b88;hpb=17a16026ff9e0bce287b607e587a9ac7a9c3b74c;p=quix0rs-gnu-social.git diff --git a/plugins/TwitterBridge/twitter.php b/plugins/TwitterBridge/twitter.php index 33d5443c22..cd1ad70b9b 100644 --- a/plugins/TwitterBridge/twitter.php +++ b/plugins/TwitterBridge/twitter.php @@ -30,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)) { @@ -69,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)) { @@ -87,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)) { @@ -110,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)) { @@ -129,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,10 +134,12 @@ function broadcast_twitter($notice) TWITTER_SERVICE); // 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)); + $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); } @@ -164,8 +155,14 @@ function retweet_notice($flink, $notice) $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); } @@ -173,12 +170,12 @@ function retweet_notice($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]; + $n2s = Notice_to_status::staticGet('notice_id', $notice->id); + if (empty($n2s)) { + return null; + } else { + return $n2s->status_id; } - - return null; } /** @@ -214,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); } @@ -222,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, @@ -235,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, @@ -284,15 +282,14 @@ function process_error($e, $flink, $notice) function format_status($notice) { - // XXX: Hack to get around PHP cURL's use of @ being a a meta character - $statustxt = preg_replace('/^@/', ' @', $notice->content); + // Start with the plaintext source of this notice... + $statustxt = $notice->content; // Convert !groups to #hashes - // XXX: Make this an optional setting? - $statustxt = preg_replace('/(^|\s)!([A-Za-z0-9]{1,64})/', "\\1#\\2", $statustxt); + // Twitter still has a 140-char hardcoded max. if (mb_strlen($statustxt) > 140) { $noticeUrl = common_shorten_url($notice->uri); $urlLen = mb_strlen($noticeUrl); @@ -320,11 +317,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 ' . @@ -333,7 +328,6 @@ function remove_twitter_link($flink) common_log(LOG_WARNING, $msg); } } - } /** @@ -346,7 +340,6 @@ function remove_twitter_link($flink) * * @return boolean success flag */ - function mail_twitter_bridge_removed($user) { $profile = $user->getProfile(); @@ -359,11 +352,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')); @@ -371,4 +364,3 @@ function mail_twitter_bridge_removed($user) common_switch_locale(); return mail_to_user($user, $subject, $body); } -