diff options
Diffstat (limited to 'mod/twitter_api/start.php')
-rw-r--r-- | mod/twitter_api/start.php | 179 |
1 files changed, 179 insertions, 0 deletions
diff --git a/mod/twitter_api/start.php b/mod/twitter_api/start.php new file mode 100644 index 000000000..e6221de6b --- /dev/null +++ b/mod/twitter_api/start.php @@ -0,0 +1,179 @@ +<?php +/** + * Elgg Twitter Service + * This service plugin allows users to authenticate their Elgg account with Twitter. + * + * @package TwitterAPI + */ + +elgg_register_event_handler('init', 'system', 'twitter_api_init'); + +function twitter_api_init() { + + // require libraries + $base = elgg_get_plugins_path() . 'twitter_api'; + 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/elgg', 'twitter_api/css'); + elgg_extend_view('css/admin', 'twitter_api/css'); + elgg_extend_view('js/elgg', 'twitter_api/js'); + + // sign on with twitter + if (twitter_api_allow_sign_on_with_twitter()) { + elgg_extend_view('login/extend', 'twitter_api/login'); + } + + // register page handler + elgg_register_page_handler('twitter_api', 'twitter_api_pagehandler'); + // backward compatibility + elgg_register_page_handler('twitterservice', 'twitter_api_pagehandler_deprecated'); + + // register Walled Garden public pages + elgg_register_plugin_hook_handler('public_pages', 'walled_garden', 'twitter_api_public_pages'); + + // 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'); +} + +/** + * Handles old pg/twitterservice/ handler + * + * @param array $page + * @return bool + */ +function twitter_api_pagehandler_deprecated($page) { + $url = elgg_get_site_url() . 'pg/twitter_api/authorize'; + $msg = elgg_echo('twitter_api:deprecated_callback_url', array($url)); + register_error($msg); + + return twitter_api_pagehandler($page); +} + + +/** + * Serves pages for twitter. + * + * @param array $page + * @return bool + */ +function twitter_api_pagehandler($page) { + if (!isset($page[0])) { + return false; + } + + switch ($page[0]) { + case 'authorize': + twitter_api_authorize(); + break; + case 'revoke': + twitter_api_revoke(); + break; + case 'forward': + twitter_api_forward(); + break; + 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: + return false; + } + return true; +} + +/** + * Push a status update to twitter. + * + * @param string $hook + * @param string $type + * @param null $returnvalue + * @param array $params + */ +function twitter_api_tweet($hook, $type, $returnvalue, $params) { + + 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; + } + + // check user settings + $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; + } + + // send tweet + $api = new TwitterOAuth($consumer_key, $consumer_secret, $access_key, $access_secret); + $api->post('statuses/update', array('status' => $params['message'])); +} + +/** + * Get tweets for a user. + * + * @param int $user_guid The Elgg user GUID + * @param array $options + * @return 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'); + if (!($consumer_key && $consumer_secret)) { + return FALSE; + } + + // check user settings + $access_key = elgg_get_plugin_user_setting('access_key', $user_guid, 'twitter_api'); + $access_secret = elgg_get_plugin_user_setting('access_secret', $user_guid, 'twitter_api'); + if (!($access_key && $access_secret)) { + return FALSE; + } + + // fetch tweets + $api = new TwitterOAuth($consumer_key, $consumer_secret, $access_key, $access_secret); + return $api->get('statuses/user_timeline', $options); +} + +/** + * Register as public pages for walled garden. + * + * @param string $hook + * @param string $type + * @param array $return_value + * @param array $params + * @return array + */ +function twitter_api_public_pages($hook, $type, $return_value, $params) { + $return_value[] = 'twitter_api/forward'; + $return_value[] = 'twitter_api/login'; + + return $return_value; +} |