diff options
Diffstat (limited to 'mod/twitter_api')
-rw-r--r-- | mod/twitter_api/graphics/sign-in-with-twitter-d.png | bin | 0 -> 3306 bytes | |||
-rw-r--r-- | mod/twitter_api/graphics/sign-in-with-twitter-l.png | bin | 0 -> 3062 bytes | |||
-rw-r--r-- | mod/twitter_api/languages/en.php | 2 | ||||
-rw-r--r-- | mod/twitter_api/lib/twitter_api.php | 133 | ||||
-rw-r--r-- | mod/twitter_api/start.php | 61 | ||||
-rw-r--r-- | mod/twitter_api/views/default/settings/twitter_api/edit.php | 13 | ||||
-rw-r--r-- | mod/twitter_api/views/default/twitter_api/css.php | 7 | ||||
-rw-r--r-- | mod/twitter_api/views/default/twitter_api/login.php | 4 | ||||
-rw-r--r-- | mod/twitter_api/views/default/usersettings/twitter_api/edit.php | 4 |
9 files changed, 110 insertions, 114 deletions
diff --git a/mod/twitter_api/graphics/sign-in-with-twitter-d.png b/mod/twitter_api/graphics/sign-in-with-twitter-d.png Binary files differnew file mode 100644 index 000000000..b49a0ba59 --- /dev/null +++ b/mod/twitter_api/graphics/sign-in-with-twitter-d.png diff --git a/mod/twitter_api/graphics/sign-in-with-twitter-l.png b/mod/twitter_api/graphics/sign-in-with-twitter-l.png Binary files differnew file mode 100644 index 000000000..834d43cfd --- /dev/null +++ b/mod/twitter_api/graphics/sign-in-with-twitter-l.png diff --git a/mod/twitter_api/languages/en.php b/mod/twitter_api/languages/en.php index 940a49d9b..3a422b043 100644 --- a/mod/twitter_api/languages/en.php +++ b/mod/twitter_api/languages/en.php @@ -11,7 +11,7 @@ $english = array( 'twitter_api:consumer_key' => 'Consumer Key', 'twitter_api:consumer_secret' => 'Consumer Secret', - 'twitter_api:settings:instructions' => 'You must obtain a consumer key and secret from <a href="https://twitter.com/oauth_clients" target="_blank">Twitter</a>. Most of the fields are self explanatory, the one piece of data you will need is the callback url which takes the form http://[yoursite]/action/twitterlogin/return - [yoursite] is the url of your Elgg network.', + 'twitter_api:settings:instructions' => 'You must obtain a consumer key and secret from <a href="https://dev.twitter.com/apps/new" target="_blank">Twitter</a>. Fill out the new app application. Select "Browser" as the application type and "Read & Write" for the access type. The callback url is %stwitter_api/authorize', 'twitter_api:usersettings:description' => "Link your %s account with Twitter.", 'twitter_api:usersettings:request' => "You must first <a href=\"%s\">authorize</a> %s to access your Twitter account.", diff --git a/mod/twitter_api/lib/twitter_api.php b/mod/twitter_api/lib/twitter_api.php index 0621c2b13..81aef38fb 100644 --- a/mod/twitter_api/lib/twitter_api.php +++ b/mod/twitter_api/lib/twitter_api.php @@ -24,9 +24,9 @@ function twitter_api_allow_sign_on_with_twitter() { } /** - * Forwards + * Forwards the user to twitter to authenticate * - * @todo what is this? + * This includes the login URL as the callback */ function twitter_api_forward() { // sanity check @@ -41,7 +41,18 @@ function twitter_api_forward() { } /** - * Log in a user with twitter. + * Log in a user referred from Twitter's OAuth API + * + * If the user has already linked their account with Twitter, it is a seamless + * login. If this is a first time login (or a user from deprecated twitter login + * plugin), we create a new account (update the account). + * + * If a plugin wants to be notified when someone logs in with twitter or a new + * twitter user signs up, register for the standard login or create user events + * and check for 'twitter_api' context. + * + * The user has to be redirected from Twitter for this to work. It depends on + * the Twitter OAuth data. */ function twitter_api_login() { @@ -64,32 +75,26 @@ function twitter_api_login() { 'access_key' => $token['oauth_token'], 'access_secret' => $token['oauth_token_secret'], ), - 'limit' => 0 + 'limit' => 0, ); $users = elgg_get_entities_from_plugin_user_settings($options); if ($users) { if (count($users) == 1 && login($users[0])) { - system_message(elgg_echo('twitter_api:login:success')); - - // trigger login hook - elgg_trigger_plugin_hook('login', 'twitter_api', array('user' => $users[0])); + system_message(elgg_echo('twitter_api:login:success')); } else { - system_message(elgg_echo('twitter_api:login:error')); + register_error(elgg_echo('twitter_api:login:error')); } - - forward(); - } else { - // need Twitter account credentials - elgg_load_library('twitter_oauth'); + forward(elgg_get_site_url()); + } else { $consumer_key = elgg_get_plugin_setting('consumer_key', 'twitter_api'); $consumer_secret = elgg_get_plugin_setting('consumer_secret', 'twitter_api'); $api = new TwitterOAuth($consumer_key, $consumer_secret, $token['oauth_token'], $token['oauth_token_secret']); $twitter = $api->get('account/verify_credentials'); - // backward compatibility for stalled-development Twitter Login plugin + // backward compatibility for deprecated Twitter Login plugin $user = FALSE; if ($twitter_user = get_user_by_username($token['screen_name'])) { if (($screen_name = $twitter_user->twitter_screen_name) && ($screen_name == $token['screen_name'])) { @@ -101,47 +106,9 @@ function twitter_api_login() { // create new user if (!$user) { - // check new registration allowed - if (!twitter_api_allow_new_users_with_twitter()) { - register_error(elgg_echo('registerdisabled')); - forward(); - } - - // trigger a hook for plugin authors to intercept - if (!elgg_trigger_plugin_hook('new_twitter_user', 'twitter_service', array('account' => $twitter), TRUE)) { - // halt execution - register_error(elgg_echo('twitter_api:login:error')); - forward(); - } - - // Elgg-ify Twitter credentials - $username = $twitter->screen_name; - while (get_user_by_username($username)) { - $username = $twitter->screen_name . '_' . rand(1000, 9999); - } - - $password = generate_random_cleartext_password(); - $name = $twitter->name; - - $user = new ElggUser(); - $user->username = $username; - $user->name = $name; - $user->access_id = ACCESS_PUBLIC; - $user->salt = generate_random_cleartext_password(); - $user->password = generate_user_password($user, $password); - $user->owner_guid = 0; - $user->container_guid = 0; - - if (!$user->save()) { - register_error(elgg_echo('registerbad')); - forward(); - } - - // @todo require email address? - + $user = twitter_api_create_user($twitter); $site_name = elgg_get_site_entity()->name; system_message(elgg_echo('twitter_api:login:email', array($site_name))); - $forward = "settings/user/{$user->username}"; } @@ -156,9 +123,6 @@ function twitter_api_login() { // login new user if (login($user)) { system_message(elgg_echo('twitter_api:login:success')); - - // trigger login hook for new user - elgg_trigger_plugin_hook('first_login', 'twitter_api', array('user' => $user)); } else { system_message(elgg_echo('twitter_api:login:error')); } @@ -172,10 +136,50 @@ function twitter_api_login() { } /** + * Create a new user from Twitter information + * + * @param object $twitter Twitter OAuth response + * @return ElggUser + */ +function twitter_api_create_user($twitter) { + // check new registration allowed + if (!twitter_api_allow_new_users_with_twitter()) { + register_error(elgg_echo('registerdisabled')); + forward(); + } + + // Elgg-ify Twitter credentials + $username = $twitter->screen_name; + while (get_user_by_username($username)) { + // @todo I guess we just hope this is good enough + $username = $twitter->screen_name . '_' . rand(1000, 9999); + } + + $password = generate_random_cleartext_password(); + $name = $twitter->name; + + $user = new ElggUser(); + $user->username = $username; + $user->name = $name; + $user->access_id = ACCESS_PUBLIC; + $user->salt = generate_random_cleartext_password(); + $user->password = generate_user_password($user, $password); + $user->owner_guid = 0; + $user->container_guid = 0; + + if (!$user->save()) { + register_error(elgg_echo('registerbad')); + forward(); + } + + return $user; +} + +/** * Pull in the latest avatar from twitter. * - * @param unknown_type $user - * @param unknown_type $file_location + * @param ElggUser $user + * @param string $file_location */ function twitter_api_update_user_avatar($user, $file_location) { // twitter's images have a few suffixes: @@ -213,8 +217,6 @@ function twitter_api_update_user_avatar($user, $file_location) { // update user's icontime $user->icontime = time(); - - return TRUE; } /** @@ -243,7 +245,6 @@ function twitter_api_authorize() { ), 'limit' => 0 ); - $users = elgg_get_entities_from_plugin_user_settings($options); if ($users) { @@ -281,13 +282,12 @@ function twitter_api_revoke() { } /** - * Returns the url to authorize a user. + * Gets the url to authorize a user. * * @param string $callback The callback URL */ -function twitter_api_get_authorize_url($callback = NULL) { +function twitter_api_get_authorize_url($callback = NULL, $login = true) { global $SESSION; - elgg_load_library('twitter_oauth'); $consumer_key = elgg_get_plugin_setting('consumer_key', 'twitter_api'); $consumer_secret = elgg_get_plugin_setting('consumer_secret', 'twitter_api'); @@ -302,7 +302,7 @@ function twitter_api_get_authorize_url($callback = NULL) { 'oauth_token_secret' => $token['oauth_token_secret'], ); - return $twitter->getAuthorizeURL($token['oauth_token']); + return $twitter->getAuthorizeURL($token['oauth_token'], $login); } /** @@ -312,7 +312,6 @@ function twitter_api_get_authorize_url($callback = NULL) { */ function twitter_api_get_access_token($oauth_verifier = FALSE) { global $SESSION; - elgg_load_library('twitter_oauth'); $consumer_key = elgg_get_plugin_setting('consumer_key', 'twitter_api'); $consumer_secret = elgg_get_plugin_setting('consumer_secret', 'twitter_api'); diff --git a/mod/twitter_api/start.php b/mod/twitter_api/start.php index 8a49db719..0c71104b5 100644 --- a/mod/twitter_api/start.php +++ b/mod/twitter_api/start.php @@ -12,14 +12,14 @@ function twitter_api_init() { // require libraries $base = elgg_get_plugins_path() . 'twitter_api'; - elgg_register_library('twitter_oauth', "$base/vendors/twitteroauth/twitterOAuth.php"); + elgg_register_class('TwitterOAuth', "$base/vendors/twitteroauth/twitterOAuth.php"); elgg_register_library('twitter_api', "$base/lib/twitter_api.php"); - elgg_load_library('twitter_api'); // extend site views - elgg_extend_view('metatags', 'twitter_api/metatags'); - elgg_extend_view('css', 'twitter_api/css'); + //elgg_extend_view('metatags', 'twitter_api/metatags'); + elgg_extend_view('css/elgg', 'twitter_api/css'); + elgg_extend_view('css/admin', 'twitter_api/css'); // sign on with twitter if (twitter_api_allow_sign_on_with_twitter()) { @@ -34,14 +34,14 @@ function twitter_api_init() { // register Walled Garden public pages elgg_register_plugin_hook_handler('public_pages', 'walled_garden', 'twitter_api_public_pages'); - // allow plugin authors to hook into this service - elgg_register_plugin_hook_handler('tweet', 'twitter_service', 'twitter_api_tweet'); + // push status messages to twitter + elgg_register_plugin_hook_handler('status', 'user', 'twitter_api_tweet'); } /** * Handles old pg/twitterservice/ handler * - * @param array$page + * @param array $page */ function twitter_api_pagehandler_deprecated($page) { $url = elgg_get_site_url() . 'pg/twitter_api/authorize'; @@ -55,7 +55,7 @@ function twitter_api_pagehandler_deprecated($page) { /** * Serves pages for twitter. * - * @param array$page + * @param array $page */ function twitter_api_pagehandler($page) { if (!isset($page[0])) { @@ -82,53 +82,48 @@ function twitter_api_pagehandler($page) { } /** - * Push a tweet to twitter. + * Push a status update to twitter. * - * @param unknown_type $hook - * @param unknown_type $entity_type - * @param unknown_type $returnvalue - * @param unknown_type $params + * @param string $hook + * @param string $type + * @param null $returnvalue + * @param array $params */ -function twitter_api_tweet($hook, $entity_type, $returnvalue, $params) { - static $plugins; - if (!$plugins) { - $plugins = elgg_trigger_plugin_hook('plugin_list', 'twitter_service', NULL, array()); - } +function twitter_api_tweet($hook, $type, $returnvalue, $params) { - // ensure valid plugin - if (!in_array($params['plugin'], $plugins)) { - return NULL; + if (!elgg_instanceof($params['user'])) { + return; } + // @todo - allow admin to select origins? + // check admin settings $consumer_key = elgg_get_plugin_setting('consumer_key', 'twitter_api'); $consumer_secret = elgg_get_plugin_setting('consumer_secret', 'twitter_api'); if (!($consumer_key && $consumer_secret)) { - return NULL; + return; } // check user settings - $user_id = elgg_get_logged_in_user_guid(); + $user_id = $params['user']->getGUID(); $access_key = elgg_get_plugin_user_setting('access_key', $user_id, 'twitter_api'); $access_secret = elgg_get_plugin_user_setting('access_secret', $user_id, 'twitter_api'); if (!($access_key && $access_secret)) { - return NULL; + return; } // send tweet $api = new TwitterOAuth($consumer_key, $consumer_secret, $access_key, $access_secret); $response = $api->post('statuses/update', array('status' => $params['message'])); - - return TRUE; } /** - * Return tweets for a user. + * Get tweets for a user. * - * @param int $user_id The Elgg user GUID + * @param int $user_id The Elgg user GUID * @param array $options */ -function twitter_api_fetch_tweets($user_guid, $options=array()) { +function twitter_api_fetch_tweets($user_guid, $options = array()) { // check admin settings $consumer_key = elgg_get_plugin_setting('consumer_key', 'twitter_api'); $consumer_secret = elgg_get_plugin_setting('consumer_secret', 'twitter_api'); @@ -151,10 +146,10 @@ function twitter_api_fetch_tweets($user_guid, $options=array()) { /** * Register as public pages for walled garden. * - * @param unknown_type $hook - * @param unknown_type $type - * @param unknown_type $return_value - * @param unknown_type $params + * @param string $hook + * @param string $type + * @param array $return_value + * @param array $params */ function twitter_api_public_pages($hook, $type, $return_value, $params) { $return_value[] = 'twitter_api/forward'; diff --git a/mod/twitter_api/views/default/settings/twitter_api/edit.php b/mod/twitter_api/views/default/settings/twitter_api/edit.php index 9deac3989..4e52a5c9d 100644 --- a/mod/twitter_api/views/default/settings/twitter_api/edit.php +++ b/mod/twitter_api/views/default/settings/twitter_api/edit.php @@ -1,8 +1,9 @@ <?php /** - * + * Twitter API plugin settings */ -$insert_view = elgg_view('twittersettings/extend'); + +$instructions = elgg_echo('twitter_api:settings:instructions', array(elgg_get_site_url())); $consumer_key_string = elgg_echo('twitter_api:consumer_key'); $consumer_key_view = elgg_view('input/text', array( @@ -15,7 +16,7 @@ $consumer_secret_string = elgg_echo('twitter_api:consumer_secret'); $consumer_secret_view = elgg_view('input/text', array( 'name' => 'params[consumer_secret]', 'value' => $vars['entity']->consumer_secret, - 'class' => 'text_input', + 'class' => 'text_input twitter-secret', )); $sign_on_with_twitter_string = elgg_echo('twitter_api:login'); @@ -39,9 +40,9 @@ $new_users_with_twitter_view = elgg_view('input/dropdown', array( )); $settings = <<<__HTML -<div>$insert_view</div> -<div>$consumer_key_string $consumer_key_view</div> -<div>$consumer_secret_string $consumer_secret_view</div> +<div class="elgg-instructs mtm"><p>$instructions</p></div> +<div><label>$consumer_key_string</label><br /> $consumer_key_view</div> +<div><label>$consumer_secret_string</label><br /> $consumer_secret_view</div> <div>$sign_on_with_twitter_string $sign_on_with_twitter_view</div> <div>$new_users_with_twitter $new_users_with_twitter_view</div> __HTML; diff --git a/mod/twitter_api/views/default/twitter_api/css.php b/mod/twitter_api/views/default/twitter_api/css.php index 140ce6a52..04bbed668 100644 --- a/mod/twitter_api/views/default/twitter_api/css.php +++ b/mod/twitter_api/views/default/twitter_api/css.php @@ -4,9 +4,10 @@ */ ?> -#twitter_api_site_settings .text_input { - width: 350px; -} #login_with_twitter { padding: 10px 0 0 0; } + +.twitter-secret { + width: 400px; +}
\ No newline at end of file diff --git a/mod/twitter_api/views/default/twitter_api/login.php b/mod/twitter_api/views/default/twitter_api/login.php index d0aca87ac..17bd76d56 100644 --- a/mod/twitter_api/views/default/twitter_api/login.php +++ b/mod/twitter_api/views/default/twitter_api/login.php @@ -1,10 +1,10 @@ <?php /** - * + * Extension of login form for Twitter sign in */ $url = elgg_get_site_url() . 'twitter_api/forward'; -$img_url = elgg_get_site_url() . 'mod/twitter_api/graphics/sign_in_with_twitter.gif'; +$img_url = elgg_get_site_url() . 'mod/twitter_api/graphics/sign-in-with-twitter-d.png'; $login = <<<__HTML <div id="login_with_twitter"> diff --git a/mod/twitter_api/views/default/usersettings/twitter_api/edit.php b/mod/twitter_api/views/default/usersettings/twitter_api/edit.php index 77dd5cc5d..0898087ca 100644 --- a/mod/twitter_api/views/default/usersettings/twitter_api/edit.php +++ b/mod/twitter_api/views/default/usersettings/twitter_api/edit.php @@ -1,6 +1,6 @@ <?php /** - * + * User settings for Twitter API */ $user_id = elgg_get_logged_in_user_guid(); @@ -13,7 +13,7 @@ echo '<div>' . elgg_echo('twitter_api:usersettings:description', array($site_nam if (!$access_key || !$access_secret) { // send user off to validate account - $request_link = twitter_api_get_authorize_url(); + $request_link = twitter_api_get_authorize_url(null, false); echo '<div>' . elgg_echo('twitter_api:usersettings:request', array($request_link, $site_name)) . '</div>'; } else { $url = elgg_get_site_url() . "twitter_api/revoke"; |