diff --git a/actions/twittersettings.php b/actions/twittersettings.php index 95649f7066..1389666f97 100644 --- a/actions/twittersettings.php +++ b/actions/twittersettings.php @@ -67,17 +67,59 @@ class TwittersettingsAction extends SettingsAction { return; } + // Verify this is a real Twitter user. if (!$this->verify_credentials($twitter_username, $twitter_password)) { $this->show_form(_('Could not verify your Twitter credentials!')); return; } - - $user = common_current_user(); - - $this->show_form(_('Twitter settings saved.'), true); + // Now that we have a valid Twitter user, we have to make another api call to + // find its Twitter ID. + $twitter_id = $this->get_twitter_id($twitter_username); + if (!$twitter_id) { + $this->show_form(sprintf(_('Unable to retrieve account information for "%s" from Twitter.'), $twitter_username)); + return; + } + + $user = common_current_user(); + + $fuser = Foreign_user::save( + array( + 'id' => $twitter_id, + 'service' => '0', // Twitter + 'uri' => "http://www.twitter.com/$twitter_username", + 'nickname' => $twitter_username, + 'user_id' => $user->id, + 'credentials' => $twitter_password + )); + + if (!$fuser) { + $this->show_form(_('Unable to save your Twitter credentials!')); + } + + $this->show_form(_('Twitter settings saved.'), true); + } + function get_twitter_id($twitter_username) { + + $uri = "http://twitter.com/users/show/$twitter_username.json"; + + common_debug("uri; $uri"); + + $data = $this->get_twitter_data($uri); + + if (!$data) { + return NULL; + } + + $user = json_decode($data); + + if (!$user) { + return NULL; + } + + return $user->id; } function verify_credentials($user, $password) { @@ -103,7 +145,7 @@ class TwittersettingsAction extends SettingsAction { } // PHP's cURL the best thing to use here? -- Zach - function get_twitter_data($uri, $user, $password) { + function get_twitter_data($uri, $user=NULL, $password=NULL) { $options = array( CURLOPT_USERPWD => "$user:$password", CURLOPT_RETURNTRANSFER => true, diff --git a/classes/Foreign_user.php b/classes/Foreign_user.php index d19370aa01..25a6ac979f 100644 --- a/classes/Foreign_user.php +++ b/classes/Foreign_user.php @@ -22,4 +22,29 @@ class Foreign_user extends DB_DataObject /* the code above is auto generated do not remove the tag below */ ###END_AUTOCODE + + static function save($fields) { + + extract($fields); + + $fuser = new Foreign_user(); + + $fuser->id = $id; + $fuser->service = $service; + $fuser->uri = $uri; + $fuser->nickname = $nickname; + $fuser->user_id = $user_id; + $fuser->credentials = $credentials; + $fuser->created = common_sql_now(); + + $result = $fuser->insert(); + + if (!$result) { + common_log_db_error($fuser, 'INSERT', __FILE__); + return FALSE; + } + + return $fuser; + } + }