diff options
-rw-r--r-- | mod/twitter_api/actions/twitter_api/interstitial_settings.php | 53 | ||||
-rw-r--r-- | mod/twitter_api/languages/en.php | 24 | ||||
-rw-r--r-- | mod/twitter_api/lib/twitter_api.php | 2 | ||||
-rw-r--r-- | mod/twitter_api/pages/twitter_api/interstitial.php | 21 | ||||
-rw-r--r-- | mod/twitter_api/start.php | 15 | ||||
-rw-r--r-- | mod/twitter_api/views/default/forms/twitter_api/interstitial_settings.php | 61 | ||||
-rw-r--r-- | mod/twitter_api/views/default/usersettings/twitter_api/edit.php | 21 |
7 files changed, 189 insertions, 8 deletions
diff --git a/mod/twitter_api/actions/twitter_api/interstitial_settings.php b/mod/twitter_api/actions/twitter_api/interstitial_settings.php new file mode 100644 index 000000000..5f742efd8 --- /dev/null +++ b/mod/twitter_api/actions/twitter_api/interstitial_settings.php @@ -0,0 +1,53 @@ +<?php +/** + * Save settings for first time logins with twitter + */ +elgg_make_sticky_form('twitter_api_interstitial'); + +$display_name = get_input('display_name'); +$email = get_input('email'); +$password_1 = get_input('password_1'); +$password_2 = get_input('password_2'); + +if (!$display_name) { + register_error(elgg_echo('twitter_api:interstitial:no_display_name')); + forward(REFERER); +} + +if ($email && !is_email_address($email)) { + register_error(elgg_echo('twitter_api:interstitial:invalid_email')); + forward(REFERER); +} + +$existing_user = get_user_by_email($email); +if ($email && $existing_user) { + register_error(elgg_echo('twitter_api:interstitial:existing_email')); + forward(REFERER); +} + +if ($password_1 && !($password_1 == $password_2)) { + register_error(elgg_echo('twitter_api:interstitial:password_mismatch')); + forward(REFERER); +} + +$user = elgg_get_logged_in_user_entity(); +$user->name = $display_name; + +if ($email) { + $user->email = $email; +} + +if ($password_1) { + $user->salt = generate_random_cleartext_password(); + $user->password = generate_user_password($user, $password_1); +} + +if (!$user->save()) { + register_error(elgg_echo('twitter_api:interstitial:cannot_save')); + forward(REFERER); +} + +elgg_clear_sticky_form('twitter_api_interstitial'); + +system_message(elgg_echo('twitter_api:interstitial:saved')); +forward('/');
\ No newline at end of file diff --git a/mod/twitter_api/languages/en.php b/mod/twitter_api/languages/en.php index 3a422b043..9d8554a9e 100644 --- a/mod/twitter_api/languages/en.php +++ b/mod/twitter_api/languages/en.php @@ -15,6 +15,7 @@ $english = array( '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.", + 'twitter_api:usersettings:cannot_revoke' => "You cannot unlink you account with Twitter because you haven't provided an email address or password. <a href=\"%s\">Provide them now</a>.", 'twitter_api:authorize:error' => 'Unable to authorize Twitter.', 'twitter_api:authorize:success' => 'Twitter access has been authorized.', @@ -28,7 +29,30 @@ $english = array( 'twitter_api:login:error' => 'Unable to login with Twitter.', 'twitter_api:login:email' => "You must enter a valid email address for your new %s account.", + 'twitter_api:invalid_page' => 'Invalid page', + 'twitter_api:deprecated_callback_url' => 'The callback URL has changed for Twitter API to %s. Please ask your administrator to change it.', + + 'twitter_api:interstitial:settings' => 'Configure your settings', + 'twitter_api:interstitial:description' => 'You\'re almost ready to use %s! We need a few more details before you can continue. These are optional, but will allow you login if Twitter goes down or you decide to unlink your accounts.', + + 'twitter_api:interstitial:username' => 'This is your username. It cannot be changed. If you set a password, you can use the username or your email address to log in.', + + 'twitter_api:interstitial:name' => 'This is the name people will see when interacting with you.', + + 'twitter_api:interstitial:email' => 'Your email address. Users cannot see this by default.', + + 'twitter_api:interstitial:password' => 'A password to login if Twitter is down or you decide to unlink your accounts.', + 'twitter_api:interstitial:password2' => 'The same password, again.', + + 'twitter_api:interstitial:no_thanks' => 'No thanks', + + 'twitter_api:interstitial:no_display_name' => 'You must have a display name.', + 'twitter_api:interstitial:invalid_email' => 'You must enter a valid email address or nothing.', + 'twitter_api:interstitial:existing_email' => 'This email address is already registered on this site.', + 'twitter_api:interstitial:password_mismatch' => 'Your passwords do not match.', + 'twitter_api:interstitial:cannot_save' => 'Cannot save account details.', + 'twitter_api:interstitial:saved' => 'Account details saved!', ); add_translation('en', $english); diff --git a/mod/twitter_api/lib/twitter_api.php b/mod/twitter_api/lib/twitter_api.php index 81aef38fb..b14b84f2d 100644 --- a/mod/twitter_api/lib/twitter_api.php +++ b/mod/twitter_api/lib/twitter_api.php @@ -109,7 +109,7 @@ function twitter_api_login() { $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}"; + $forward = "twitter_api/intersitial"; } // set twitter services tokens diff --git a/mod/twitter_api/pages/twitter_api/interstitial.php b/mod/twitter_api/pages/twitter_api/interstitial.php new file mode 100644 index 000000000..d1f1ac20c --- /dev/null +++ b/mod/twitter_api/pages/twitter_api/interstitial.php @@ -0,0 +1,21 @@ +<?php +/** + * An interstitial page for newly created Twitter users. + * + * This prompts them to enter an email address and set a password in case Twitter goes down or they + * want to disassociate their account from twitter. + */ + +$title = elgg_echo('twitter_api:interstitial:settings'); + +$site = get_config('site'); +$content = elgg_echo('twitter_api:interstitial:description', array($site->name)); +$content .= elgg_view_form('twitter_api/interstitial_settings'); + +$params = array( + 'content' => $content, + 'title' => $title, +); +$body = elgg_view_layout('one_sidebar', $params); + +echo elgg_view_page($title, $body); diff --git a/mod/twitter_api/start.php b/mod/twitter_api/start.php index 0c71104b5..b17643c8c 100644 --- a/mod/twitter_api/start.php +++ b/mod/twitter_api/start.php @@ -36,6 +36,9 @@ function twitter_api_init() { // push status messages to twitter elgg_register_plugin_hook_handler('status', 'user', 'twitter_api_tweet'); + + $actions = dirname(__FILE__) . '/actions/twitter_api'; + elgg_register_action('twitter_api/interstitial_settings', "$actions/interstitial_settings.php", 'logged_in'); } /** @@ -75,6 +78,18 @@ function twitter_api_pagehandler($page) { case 'login': twitter_api_login(); break; + case 'interstitial': + gatekeeper(); + // only let twitter users do this. + $guid = elgg_get_logged_in_user_guid(); + $twitter_name = elgg_get_plugin_user_setting('twitter_name', $guid, 'twitter_api'); + if (!$twitter_name) { + register_error(elgg_echo('twitter_api:invalid_page')); + forward(); + } + $pages = dirname(__FILE__) . '/pages/twitter_api'; + include "$pages/interstitial.php"; + break; default: forward(); break; diff --git a/mod/twitter_api/views/default/forms/twitter_api/interstitial_settings.php b/mod/twitter_api/views/default/forms/twitter_api/interstitial_settings.php new file mode 100644 index 000000000..fdeafd46d --- /dev/null +++ b/mod/twitter_api/views/default/forms/twitter_api/interstitial_settings.php @@ -0,0 +1,61 @@ +<?php +/** + * Make the user set up some alternative ways to login. + */ + +$user = elgg_get_logged_in_user_entity(); + +if (elgg_is_sticky_form('twitter_api_interstitial')) { + extract(elgg_get_sticky_values('twitter_api_interstitial')); + elgg_clear_sticky_form('twitter_api_interstitial'); +} + +if (!isset($display_name)) { + $display_name = $user->name; +} + +// username +$title = elgg_echo('username'); + +$body = elgg_echo('twitter_api:interstitial:username'); +$body .= elgg_view('input/text', array('value' => $user->username, 'disabled' => 'disabled')); + +echo elgg_view_module('info', $title, $body); + +// display name +$title = elgg_echo('name'); + +$body = elgg_echo('twitter_api:interstitial:name'); +$body .= elgg_view('input/text', array('name' => 'display_name', 'value' => $display_name)); + +echo elgg_view_module('info', $title, $body); + +// email +$title = elgg_echo('email'); + +$body = elgg_echo('twitter_api:interstitial:email'); +$body .= elgg_view('input/email', array('name' => 'email', 'value' => $email)); + +echo elgg_view_module('info', $title, $body); + +// password +$title = elgg_echo('password'); + +$body = elgg_echo('twitter_api:interstitial:password'); +$body .= elgg_view('input/password', array('name' => 'password_1')); +$body .= elgg_echo('twitter_api:interstitial:password2'); +$body .= elgg_view('input/password', array('name' => 'password_2')); + +echo elgg_view_module('info', $title, $body); + +// buttons + +echo elgg_view('input/submit', array( + 'text' => elgg_echo('save') +)); + +echo elgg_view('output/url', array( + 'class' => 'right', + 'text' => elgg_echo('twitter_api:interstitial:no_thanks'), + 'href' => '/', +));
\ No newline at end of file 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 0898087ca..acb8d9af5 100644 --- a/mod/twitter_api/views/default/usersettings/twitter_api/edit.php +++ b/mod/twitter_api/views/default/usersettings/twitter_api/edit.php @@ -3,10 +3,11 @@ * User settings for Twitter API */ -$user_id = elgg_get_logged_in_user_guid(); -$twitter_name = get_plugin_usersetting('twitter_name', $user_id, 'twitter_api'); -$access_key = get_plugin_usersetting('access_key', $user_id, 'twitter_api'); -$access_secret = get_plugin_usersetting('access_secret', $user_id, 'twitter_api'); +$user = elgg_get_logged_in_user_entity(); +$user_guid = $user->getGUID(); +$twitter_name = get_plugin_usersetting('twitter_name', $user_guid, 'twitter_api'); +$access_key = get_plugin_usersetting('access_key', $user_guid, 'twitter_api'); +$access_secret = get_plugin_usersetting('access_secret', $user_guid, 'twitter_api'); $site_name = elgg_get_site_entity()->name; echo '<div>' . elgg_echo('twitter_api:usersettings:description', array($site_name)) . '</div>'; @@ -16,7 +17,13 @@ if (!$access_key || !$access_secret) { $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"; - echo '<div class="twitter_anywhere">' . elgg_echo('twitter_api:usersettings:authorized', array($site_name, $twitter_name)) . '</div>'; - echo '<div>' . sprintf(elgg_echo('twitter_api:usersettings:revoke'), $url) . '</div>'; + // if this user logged in through twitter and never set up an email address, don't + // let them disassociate their account. + if ($user->email) { + $url = elgg_get_site_url() . "twitter_api/revoke"; + echo '<div class="twitter_anywhere">' . elgg_echo('twitter_api:usersettings:authorized', array($site_name, $twitter_name)) . '</div>'; + echo '<div>' . sprintf(elgg_echo('twitter_api:usersettings:revoke'), $url) . '</div>'; + } else { + echo elgg_echo('twitter_api:usersettings:cannot_revoke', array(elgg_normalize_url('twitter_api/interstitial'))); + } } |