/**
  * Get client instance authenticated with 'system' credentials
  * @param bool whether we're getting the system default client which is expected to be authed
  * @return TwitterApiClient
  */
 public static function create_instance($default = true)
 {
     $Client = new TwitterApiClient();
     extract(_twitter_api_config());
     if ($default) {
         if (!$consumer_key || !$consumer_secret || !$access_key || !$access_secret) {
             trigger_error(__('Twitter application not fully configured', 'twitter-api'));
         }
         $Client->set_oauth($consumer_key, $consumer_secret, $access_key, $access_secret);
     } else {
         if ($consumer_key && $consumer_secret) {
             $Client->set_oauth($consumer_key, $consumer_secret);
         }
     }
     return $Client;
 }
/**
 * Test if system-configured client is authed and ready to use
 */
function twitter_api_configured()
{
    function_exists('_twitter_api_config') or twitter_api_include('core');
    extract(_twitter_api_config());
    return $consumer_key && $consumer_secret && $access_key && $access_secret;
}
/**
 * Render full admin page
 */
function twitter_api_admin_render_page()
{
    if (!current_user_can('manage_options')) {
        twitter_api_admin_render_header(__("You don't have permission to manage Twitter API settings", 'twitter-api'), 'error');
        twitter_api_admin_render_footer();
        return;
    }
    try {
        // update applicaion settings if posted
        if (isset($_POST['saf_twitter']) && is_array($update = $_POST['saf_twitter'])) {
            $conf = _twitter_api_config($update);
        } else {
            $conf = _twitter_api_config();
        }
        // check whether we have any OAuth params
        extract($conf);
        if (!$consumer_key || !$consumer_secret) {
            throw new Exception(__('Twitter application not fully configured', 'twitter-api'));
        }
        // else exchange access token if callback // request secret saved as option
        if (isset($_GET['oauth_token']) && isset($_GET['oauth_verifier'])) {
            $Token = twitter_api_oauth_access_token($consumer_key, $consumer_secret, $_GET['oauth_token'], $request_secret, $_GET['oauth_verifier']);
            // have access token, update config and destroy request secret
            $conf = _twitter_api_config(array('request_secret' => '', 'access_key' => $Token->key, 'access_secret' => $Token->secret));
            extract($conf);
            // fall through to verification of credentials
        }
        // else administrator needs to connect / authenticate with Twitter.
        if (!$access_key || !$access_secret) {
            twitter_api_admin_render_header(__('Plugin not yet authenticated with Twitter', 'twitter-api'), 'error');
            twitter_api_admin_render_login($consumer_key, $consumer_secret);
        } else {
            $me = twitter_api_get('account/verify_credentials');
            twitter_api_admin_render_header(sprintf(__('Authenticated as @%s', 'twitter-api'), $me['screen_name']), 'updated');
        }
    } catch (TwitterApiException $Ex) {
        twitter_api_admin_render_header($Ex->getStatus() . ': Error ' . $Ex->getCode() . ', ' . $Ex->getMessage(), 'error');
        if (401 === $Ex->getStatus()) {
            twitter_api_admin_render_login($consumer_key, $consumer_secret);
        }
    } catch (Exception $Ex) {
        twitter_api_admin_render_header($Ex->getMessage(), 'error');
    }
    // end admin page with options form and close wrapper
    twitter_api_admin_render_form();
    twitter_api_admin_render_footer();
}