diff --git a/README.md b/README.md index 55a1b94..3a83f8c 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # ExpressionEngine Twitter -ExpressionEngine Twitter is nearly an identical port of EllisLabs Twitter Timeline plugin, via Bryant Hughes's [TGL_Twitter](https://github.com/bryantAXS/TGL_Twitter). However ExpressionEngine Twitter has a CP Backend, allowing a user to authenticate with Twitter using oAuth. +This module is a EE 3 version of the ClickRain EE Twitter module which is nearly an identical port of EllisLabs Twitter Timeline plugin, via Bryant Hughes's [TGL_Twitter](https://github.com/bryantAXS/TGL_Twitter). However ExpressionEngine Twitter has a CP Backend, allowing a user to authenticate with Twitter using oAuth. ExpressionEngine Twitter uses the Twitter 1.1 API, and provides tags that make it possible to conform to Twitter's [Display Requirements](https://dev.twitter.com/terms/display-requirements). @@ -10,7 +10,7 @@ While we have incentive to keep this project working because we use it frequentl ## Requirements -* EE 2.0 +* EE 3.0 * Twitter Account * PHP 5 >= 5.3 diff --git a/system/expressionengine/third_party/twitter/css/twitter.css b/system/expressionengine/third_party/twitter/css/twitter.css deleted file mode 100644 index ebdc54c..0000000 --- a/system/expressionengine/third_party/twitter/css/twitter.css +++ /dev/null @@ -1,4 +0,0 @@ -#generate_request_token{ - display:block; - margin-top:10px; -} \ No newline at end of file diff --git a/system/expressionengine/third_party/twitter/mcp.twitter.php b/system/expressionengine/third_party/twitter/mcp.twitter.php deleted file mode 100755 index 7f4bf02..0000000 --- a/system/expressionengine/third_party/twitter/mcp.twitter.php +++ /dev/null @@ -1,194 +0,0 @@ -EE =& get_instance(); - $this->site_id = $this->EE->config->item('site_id'); - $this->base_url = BASE.AMP.'C=addons_modules'.AMP.'M=show_module_cp'.AMP.'module=twitter'; - - // load table lib for control panel - $this->EE->load->library('table'); - $this->EE->load->helper('form'); - - $this->EE->cp->load_package_css('twitter'); - - // Set page title - // $this->EE->cp->set_variable was deprecated in 2.6 - if (version_compare(APP_VER, '2.6', '>=')) { - $this->EE->view->cp_page_title = $this->EE->lang->line('twitter_module_name'); - } else { - $this->EE->cp->set_variable('cp_page_title', $this->EE->lang->line('twitter_module_name')); - } - } - /** - * Module CP index function - * - * @return void - * @author Bryant Hughes - */ - public function index() - { - $this->EE->load->model('twitter_model'); - - $this->data['form_action'] = 'C=addons_modules'.AMP.'M=show_module_cp'.AMP.'module=twitter'.AMP.'method=submit_settings'; - $this->data['settings'] = $this->EE->twitter_model->get_settings(); - - return $this->EE->load->view('index', $this->data, TRUE); - } - - /** - * Called after new settings have been submitted - * - * @return void - * @author Bryant Hughes - */ - public function submit_settings() - { - - $this->EE->load->model('twitter_model'); - - //loops through the post and adds all settings (deletes old settings first) - $success = $this->EE->twitter_model->insert_new_settings(); - - $settings = $this->EE->twitter_model->get_settings(); - - if($success && isset($settings['pin']) && ! isset($settings['access_token'], $settings['access_token_secret'])){ - - //if a pin has been submitted, we want to generate the access tokens for the app - if($this->generate_access_tokens($settings)){ - $this->EE->session->set_flashdata('message_success', $this->EE->lang->line('Success! You are now Authenticated.')); - }else{ - - //if the pin was not able to be created, delete the submitted pin and send the user back to the authenticate page. - /* - TODO : we could use some better UX here. Ideally sending the user back to this page happens after they create a request token, - and sending them back because of an invaid acess token authentication is somewhat confusing - */ - $this->EE->twitter_model->delete_setting('pin'); - $this->EE->session->set_flashdata('message_failure', $this->EE->lang->line('Error authenticating with Twitter. Please verify Pin and re-submit')); - $this->EE->functions->redirect(BASE.AMP.'C=addons_modules'.AMP.'M=show_module_cp'.AMP.'module=twitter'.AMP.'method=register_with_twitter'); - } - - }else{ - - //else : sumission before pin as been submitted, or after all settings have been submitted - - if(! $success){ - $this->EE->session->set_flashdata('message_failure', $this->EE->lang->line('Error saving settings.')); - }else{ - $this->EE->session->set_flashdata('message_success', $this->EE->lang->line('Success!')); - } - - } - - $this->EE->functions->redirect(BASE.AMP.'C=addons_modules'.AMP.'M=show_module_cp'.AMP.'module=twitter'); - - } - - /** - * Called after a user clicks "Register" - * - * @return void - * @author Bryant Hughes - */ - public function register_with_twitter() - { - - $this->EE->load->model('twitter_model'); - $settings = $this->EE->twitter_model->get_settings(); - - $oauth = new TwitterEETwitter_OAuth($settings['consumer_key'], $settings['consumer_secret']); - $request = $oauth->getRequestToken(); - - if($request != FALSE){ - - $requestToken = $request['oauth_token']; - $requestTokenSecret = $request['oauth_token_secret']; - - //save auth tokens into the db - $success = $this->EE->twitter_model->insert_secret_token($requestToken,$requestTokenSecret); - - if($success){ - - // get Twitter generated registration URL and load the authenticate view - $this->data['register_url'] = $oauth->getAuthorizeURL($request); - $this->EE->session->set_flashdata('message_success', $this->EE->lang->line('Success!')); - return $this->EE->load->view('authenticate', $this->data, TRUE); - } - else - { - $this->EE->session->set_flashdata('message_failure', $this->EE->lang->line('There was an error saving request tokens.')); - $this->EE->functions->redirect(BASE.AMP.'C=addons_modules'.AMP.'M=show_module_cp'.AMP.'module=twitter'); - } - - }else{ - - //else : we were not able to create request tokens, probably becase the consumer key/secret were correct. lets erase those keys - // from the settings and send the user back to square one of the process. - - $this->EE->twitter_model->delete_all_settings(); - $this->EE->session->set_flashdata('message_failure', $this->EE->lang->line('There was an error generating request tokens. Please verify and re-submit your Consumer Key and Secret.')); - $this->EE->functions->redirect(BASE.AMP.'C=addons_modules'.AMP.'M=show_module_cp'.AMP.'module=twitter'); - - } - - } - - /** - * Used to generate the access tokens from Twitter. This is the last step in the authentication process - * - * @param string $settings - * @return boolean : depending if we were able to generate the tokens and save them to the DB or NOT - * @author Bryant Hughes - */ - private function generate_access_tokens($settings) - { - $this->EE->load->model('twitter_model'); - - //Retrieve our previously generated request token & secret - $requestToken = $settings['request_token']; - $requestTokenSecret = $settings['request_token_secret']; - - $oauth = new TwitterEETwitter_OAuth('consumer_key', 'consumer_secret', $requestToken, $requestTokenSecret); - - // Generate access token by providing PIN for Twitter - $request = $oauth->getAccessToken(NULL, $settings['pin']); - - if($request != FALSE) - { - $access_token = $request['oauth_token']; - $access_token_secret = $request['oauth_token_secret']; - - // Save our access token/secret - return $this->EE->twitter_model->insert_access_token($access_token, $access_token_secret); - } - else - { - return FALSE; - } - - } - - /** - * function that kills all settings in the DB and starts us over at square one. - * - * @return void - * @author Bryant Hughes - */ - public function erase_settings() - { - $this->EE->load->model('twitter_model'); - $this->EE->twitter_model->delete_all_settings(); - $this->EE->session->set_flashdata('message_success', $this->EE->lang->line('Authentication Settings Erased.')); - $this->EE->functions->redirect(BASE.AMP.'C=addons_modules'.AMP.'M=show_module_cp'.AMP.'module=twitter'); - } - -} - -/* End of File: mcp.module.php */ diff --git a/system/expressionengine/third_party/twitter/views/authenticate.php b/system/expressionengine/third_party/twitter/views/authenticate.php deleted file mode 100644 index 14c7c93..0000000 --- a/system/expressionengine/third_party/twitter/views/authenticate.php +++ /dev/null @@ -1,20 +0,0 @@ - - -
Your request token has been saved.
-Please read the entire directions before proceeding
"; - - echo "First, click here to be taken to Twitter, where you can authenticate this site. Copy the Pin number Twitter provides. Then, come back to this page and click here to be taken back to the settings form, where you will submit your Pin.
"; - - }else{ - - echo "There was an error generating your request tokens
"; - } - -?> - diff --git a/system/expressionengine/third_party/twitter/views/index.php b/system/expressionengine/third_party/twitter/views/index.php deleted file mode 100755 index fd90319..0000000 --- a/system/expressionengine/third_party/twitter/views/index.php +++ /dev/null @@ -1,72 +0,0 @@ -table->set_template($cp_table_template); - $this->table->set_heading('Twitter Settings', ''); - - //consumer keys - $consumer_key = isset($settings['consumer_key']) ? $settings['consumer_key'] : ''; - $consumer_secret = isset($settings['consumer_secret']) ? $settings['consumer_secret'] : ''; - - $consumer_key_input_data = array('name' => 'consumer_key','value' => $consumer_key ,'maxlength' => '100' ,'style' => 'width:50%'); - $consumer_secret_input_data = array('name' => 'consumer_secret','value' => $consumer_secret ,'maxlength' => '100' ,'style' => 'width:50%'); - - $this->table->add_row('' . lang('twitter_settings_consumer_key') . '', form_input($consumer_key_input_data)); - $this->table->add_row('' . lang('twitter_settings_consumer_secret') . '', form_input($consumer_secret_input_data)); - - - //request tokens - $request_token = isset($settings['request_token']) ? $settings['request_token'] : FALSE; - $request_token_secret = isset($settings['request_token_secret']) ? $settings['request_token_secret'] : FALSE; - - if($request_token != FALSE && $request_token_secret != FALSE && ! empty($consumer_key) && ! empty($consumer_secret)){ - echo form_hidden('request_token', $request_token); - echo form_hidden('request_token_secret', $request_token_secret); - - //pin - $pin = isset($settings['pin']) ? $settings['pin'] : ''; - - $pin_input_data = array('name' => 'pin','value' => $pin ,'maxlength' => '10' ,'style' => 'width:50%'); - $this->table->add_row('' . lang('twitter_settings_pin') . '', form_input($pin_input_data)); - } - - if(isset($settings['consumer_key'], $settings['consumer_secret']) && !empty($settings['consumer_key']) && !empty($settings['consumer_key']) && ! isset($settings['pin'])){ - $this->table->add_row(lang('twitter_settings_generate_warning'),"" . lang('twitter_settings_generate') . "
"); - } - - //access tokens - $access_token = isset($settings['access_token']) ? $settings['access_token'] : FALSE; - $access_token_secret = isset($settings['access_token_secret']) ? $settings['access_token_secret'] : FALSE; - - if($access_token != FALSE && $access_token_secret != FALSE){ - echo form_hidden('access_token', $access_token); - echo form_hidden('access_token_secret', $access_token_secret); - } - - if(isset($settings['consumer_key'], $settings['consumer_secret'], $settings['request_token'], $settings['request_token_secret'], $settings['pin'], $settings['access_token'], $settings['access_token_secret'])) - { - echo '" . lang('twitter_settings_erase') . "
"); - echo $this->table->generate(); - - }else{ - - echo $this->table->generate(); - echo form_submit(array('name' => 'Submit', 'id' => 'submit', 'value' => 'Update', 'class' => 'submit')); - - } - - - - - - - - - diff --git a/system/user/addons/twitter/addon.setup.php b/system/user/addons/twitter/addon.setup.php new file mode 100644 index 0000000..11b7f59 --- /dev/null +++ b/system/user/addons/twitter/addon.setup.php @@ -0,0 +1,12 @@ + 'Expertees', + 'author_url' => 'http://expertees.nl', + 'name' => 'Twitter', + 'description' => 'Twitter plugin', + 'version' => '1.8.0', + 'namespace' => 'Twitter', + 'settings_exist' => TRUE, + 'docs_url' => 'https://github.com/TKuypers/EE_Twitter', +); \ No newline at end of file diff --git a/system/expressionengine/third_party/twitter/classes/OAuth.php b/system/user/addons/twitter/classes/OAuth.php similarity index 100% rename from system/expressionengine/third_party/twitter/classes/OAuth.php rename to system/user/addons/twitter/classes/OAuth.php diff --git a/system/expressionengine/third_party/twitter/classes/twitteroauth.php b/system/user/addons/twitter/classes/twitteroauth.php similarity index 100% rename from system/expressionengine/third_party/twitter/classes/twitteroauth.php rename to system/user/addons/twitter/classes/twitteroauth.php diff --git a/system/expressionengine/third_party/twitter/language/english/lang.twitter.php b/system/user/addons/twitter/language/english/lang.twitter.php similarity index 86% rename from system/expressionengine/third_party/twitter/language/english/lang.twitter.php rename to system/user/addons/twitter/language/english/lang.twitter.php index a07ee88..524fa71 100755 --- a/system/expressionengine/third_party/twitter/language/english/lang.twitter.php +++ b/system/user/addons/twitter/language/english/lang.twitter.php @@ -12,5 +12,9 @@ 'twitter_settings_generate' => 'Generate new Request Token', 'twitter_settings_erase' => 'Erase Authentication Settings', +'settings' => 'Settings', +'btn_save_form' => 'Save settings', +'btn_saving' => 'Saving', + '' => '' ); diff --git a/system/user/addons/twitter/mcp.twitter.php b/system/user/addons/twitter/mcp.twitter.php new file mode 100755 index 0000000..1ebcd0f --- /dev/null +++ b/system/user/addons/twitter/mcp.twitter.php @@ -0,0 +1,335 @@ +load->model('twitter_model'); + } + + /** + * Module CP index function + * + * @return void + * @author Bryant Hughes + */ + public function index() + { + // check if we have a result + $rules = array( + 'consumer_key' => 'required|minLength[3]', + 'consumer_secret' => 'required|minLength[3]', + ); + $result = ee('Validation')->make($rules)->validate($_POST); + + if($result->isValid()) + { + // do save + $save = $this->submit_settings(); + + // handle errors + if($save == 'pin_success') + { + $message = lang('Success! You are now Authenticated.'); + ee('CP/Alert')->makeBanner('success-message')->asSuccess()->withTitle(lang('Form saved'))->addToBody($message)->defer(); + } + else if($save == 'pin_error') + { + $message = lang('Error authenticating with Twitter. Please verify Pin and re-submit'); + ee('CP/Alert')->makeBanner('error-message')->asError()->withTitle(lang('Error'))->addToBody($message)->defer(); + } + else if($save == TRUE) + { + $message = lang('Success!'); + ee('CP/Alert')->makeBanner('success-message')->asSuccess()->withTitle(lang('Form saved'))->addToBody($message)->defer(); + } + else + { + $message = lang('Error saving settings.'); + ee('CP/Alert')->makeBanner('error-message')->asError()->withTitle(lang('Error'))->addToBody($message)->defer(); + } + + ee()->functions->redirect(ee('CP/URL', 'addons/settings/twitter/')->compile()); + exit; + } + else + { + // get the settings + $settings = ee()->twitter_model->get_settings(); + + $consumer_key = (isset($settings['consumer_key'])) ? $settings['consumer_key'] : ''; + $consumer_secret = (isset($settings['consumer_secret'])) ? $settings['consumer_secret'] : ''; + $pin = (isset($settings['pin'])) ? $settings['pin'] : ''; + $request_token = (isset($settings['request_token'])) ? $settings['request_token'] : FALSE; + $request_token_secret = (isset($settings['request_token_secret'])) ? $settings['request_token_secret'] : FALSE; + $access_token = (isset($settings['access_token'])) ? $settings['access_token'] : FALSE; + $access_token_secret = (isset($settings['access_token_secret'])) ? $settings['access_token_secret'] : FALSE; + + + // consumer key + $fields[] = array + ( + 'title' => 'twitter_settings_consumer_key', + 'fields' => array( + 'consumer_key' => array( + 'type' => 'text', + 'value' => $consumer_key, + 'required' => TRUE + ) + ), + ); + + // consumer secret + $fields[] = array + ( + 'title' => 'twitter_settings_consumer_secret', + 'fields' => array( + 'consumer_secret' => array( + 'type' => 'text', + 'value' => $consumer_secret, + 'required' => TRUE + ) + ), + ); + + // add the pin fields + if($request_token != FALSE && $request_token_secret != FALSE && ! empty($consumer_key) && ! empty($consumer_secret)) + { + + $fields[] = array + ( + 'title' => 'twitter_settings_pin', + 'fields' => array( + 'request_token' => array( + 'type' => 'hidden', + 'value' => $request_token, + ), + 'request_token_secret' => array( + 'type' => 'hidden', + 'value' => $request_token_secret, + ), + 'pin' => array( + 'type' => 'text', + 'value' => $pin, + ), + ), + ); + } + + // add the button + if(isset($settings['consumer_key'], $settings['consumer_secret']) && !empty($settings['consumer_key']) && !empty($settings['consumer_key']) && ! isset($settings['pin'])) + { + $fields[] = array + ( + 'title' => 'twitter_settings_generate', + 'fields' => array( + 'generate_settings' => array( + 'type' => 'html', + 'content' => ''.lang('twitter_settings_generate').'', + ) + ) + ); + } + + // add the access token fields + if($access_token != FALSE && $access_token_secret != FALSE) + { + $fields[] = array + ( + 'fields' => array( + 'access_token' => array( + 'type' => 'hidden', + 'value' => $access_token, + ), + 'access_token_secret' => array( + 'type' => 'hidden', + 'value' => $access_token_secret, + ), + ), + ); + } + + $form = array($fields); + + // final view variables we need to render the form + $vars = array('sections' => $form); + $vars += array + ( + 'base_url' => ee('CP/URL', 'addons/settings/twitter'), + 'cp_page_title' => lang('twitter_module_name'), + 'save_btn_text' => 'btn_save_form', + 'save_btn_text_working' => 'btn_saving', + 'settings' => $settings, + ); + + // add the error to the form + if($_POST) + $vars['errors'] = $result; + + return array + ( + 'body' => ee('View')->make('twitter:settings')->render($vars), + 'breadcrumb' => array(ee('CP/URL', 'addons/settings/twitter/')->compile() => lang('twitter_module_name')), + 'heading' => lang('settings') + ); + } + } + + /** + * Called after new settings have been submitted + * + * @return void + * @author Bryant Hughes + */ + private function submit_settings() + { + //loops through the post and adds all settings (deletes old settings first) + $success = ee()->twitter_model->insert_new_settings(); + $settings = ee()->twitter_model->get_settings(); + + if($success && isset($settings['pin']) && ! isset($settings['access_token'], $settings['access_token_secret'])){ + + //if a pin has been submitted, we want to generate the access tokens for the app + if($this->generate_access_tokens($settings)) + { + return 'pin_success'; + } + else + { + //if the pin was not able to be created, delete the submitted pin and send the user back to the authenticate page. + ee()->twitter_model->delete_setting('pin'); + + return 'pin_error'; + } + + } + else + { + //else : sumission before pin as been submitted, or after all settings have been submitted + if(!$success) + return FALSE; + + return TRUE; + } + } + + /** + * Called after a user clicks "Register" + * + * @return void + * @author Bryant Hughes + */ + public function register_with_twitter() + { + $settings = ee()->twitter_model->get_settings(); + + $oauth = new TwitterEETwitter_OAuth($settings['consumer_key'], $settings['consumer_secret']); + $request = $oauth->getRequestToken(); + + if($request != FALSE) + { + $requestToken = $request['oauth_token']; + $requestTokenSecret = $request['oauth_token_secret']; + + //save auth tokens into the db + $success = ee()->twitter_model->insert_secret_token($requestToken, $requestTokenSecret); + + if($success) + { + $message = lang('Success! You are now Authenticated.'); + ee('CP/Alert')->makeBanner('success-message')->asSuccess()->withTitle(lang('Succesfully authenticated'))->addToBody($message)->now(); + + // final view variables we need to render the form + $vars = array + ( + 'base_url' => ee('CP/URL', 'addons/settings/twitter'), + 'cp_page_title' => lang('twitter_module_name'), + 'register_url' => $oauth->getAuthorizeURL($request) + ); + return array + ( + 'body' => ee('View')->make('twitter:authenticate')->render($vars), + 'breadcrumb' => array(ee('CP/URL', 'addons/settings/twitter/')->compile() => lang('twitter_module_name')), + 'heading' => lang('settings') + ); + } + else + { + $message = lang('There was an error saving request tokens.'); + ee('CP/Alert')->makeBanner('error-message')->asError()->withTitle(lang('Error'))->addToBody($message)->defer(); + + ee()->functions->redirect(ee('CP/URL', 'addons/settings/twitter/')->compile()); + exit; + } + + } + else + { + $message = lang('There was an error generating request tokens. Please verify and re-submit your Consumer Key and Secret.'); + ee('CP/Alert')->makeBanner('error-message')->asError()->withTitle(lang('Error'))->addToBody($message)->defer(); + + ee()->functions->redirect(ee('CP/URL', 'addons/settings/twitter/')->compile()); + exit; + } + + } + + /** + * Used to generate the access tokens from Twitter. This is the last step in the authentication process + * + * @param string $settings + * @return boolean : depending if we were able to generate the tokens and save them to the DB or NOT + * @author Bryant Hughes + */ + private function generate_access_tokens($settings) + { + ee()->load->model('twitter_model'); + + //Retrieve our previously generated request token & secret + $requestToken = $settings['request_token']; + $requestTokenSecret = $settings['request_token_secret']; + + $oauth = new TwitterEETwitter_OAuth('consumer_key', 'consumer_secret', $requestToken, $requestTokenSecret); + + // Generate access token by providing PIN for Twitter + $request = $oauth->getAccessToken(NULL, $settings['pin']); + + if($request != FALSE) + { + $access_token = $request['oauth_token']; + $access_token_secret = $request['oauth_token_secret']; + + // Save our access token/secret + return ee()->twitter_model->insert_access_token($access_token, $access_token_secret); + } + else + { + return FALSE; + } + + } + + /** + * function that kills all settings in the DB and starts us over at square one. + * + * @return void + * @author Bryant Hughes + */ + public function erase_settings() + { + ee()->twitter_model->delete_all_settings(); + + $message = lang('Authentication Settings Erased.'); + ee('CP/Alert')->makeBanner('success-message')->asSuccess()->withTitle(lang('Succesfully authenticated'))->addToBody($message)->defer(); + + ee()->functions->redirect(ee('CP/URL', 'addons/settings/twitter/')->compile()); + exit; + } + +} + +/* End of File: mcp.module.php */ diff --git a/system/expressionengine/third_party/twitter/mod.twitter.php b/system/user/addons/twitter/mod.twitter.php similarity index 82% rename from system/expressionengine/third_party/twitter/mod.twitter.php rename to system/user/addons/twitter/mod.twitter.php index 61fb68b..7a9b9ef 100755 --- a/system/expressionengine/third_party/twitter/mod.twitter.php +++ b/system/user/addons/twitter/mod.twitter.php @@ -46,10 +46,8 @@ function Twitter() { */ function __construct() { - $this->EE =& get_instance(); - - if ($this->EE->config->item('twitter_cache_path')) { - $this->cache_path = $this->EE->config->item('twitter_cache_path'); + if (ee()->config->item('twitter_cache_path')) { + $this->cache_path = ee()->config->item('twitter_cache_path'); if (substr_compare($this->cache_path, '/', -1, 1) !== 0) { $this->cache_path = $this->cache_path . '/'; } @@ -62,22 +60,22 @@ function __construct() public function user() { // Fetch parameters - $this->refresh = $this->EE->TMPL->fetch_param('twitter_refresh', $this->refresh); - $this->limit = $this->EE->TMPL->fetch_param('limit', $this->limit); - $count = $this->EE->TMPL->fetch_param('count'); - $this->use_stale = $this->EE->TMPL->fetch_param('use_stale_cache', 'yes'); - $this->target = $this->EE->TMPL->fetch_param('target', ''); - $screen_name = $this->EE->TMPL->fetch_param('screen_name'); - $prefix = $this->EE->TMPL->fetch_param('prefix', ''); - $userprefix = $this->EE->TMPL->fetch_param('userprefix', NULL); - $include_rts = ($this->EE->TMPL->fetch_param('retweets', 'yes') == 'yes') ? TRUE : FALSE; - $exclude_replies = ($this->EE->TMPL->fetch_param('replies', 'yes') == 'yes') ? FALSE : TRUE; - $images_only = ($this->EE->TMPL->fetch_param('images_only', "no") == 'yes') ? TRUE : FALSE; - $links_only = ($this->EE->TMPL->fetch_param('links_only', "no") == 'yes') ? TRUE : FALSE; + $this->refresh = ee()->TMPL->fetch_param('twitter_refresh', $this->refresh); + $this->limit = ee()->TMPL->fetch_param('limit', $this->limit); + $count = ee()->TMPL->fetch_param('count'); + $this->use_stale = ee()->TMPL->fetch_param('use_stale_cache', 'yes'); + $this->target = ee()->TMPL->fetch_param('target', ''); + $screen_name = ee()->TMPL->fetch_param('screen_name'); + $prefix = ee()->TMPL->fetch_param('prefix', ''); + $userprefix = ee()->TMPL->fetch_param('userprefix', NULL); + $include_rts = (ee()->TMPL->fetch_param('retweets', 'yes') == 'yes') ? TRUE : FALSE; + $exclude_replies = (ee()->TMPL->fetch_param('replies', 'yes') == 'yes') ? FALSE : TRUE; + $images_only = (ee()->TMPL->fetch_param('images_only', "no") == 'yes') ? TRUE : FALSE; + $links_only = (ee()->TMPL->fetch_param('links_only', "no") == 'yes') ? TRUE : FALSE; if (!$screen_name) { - $this->EE->TMPL->log_item("Parameter screen_name was not provided"); + ee()->TMPL->log_item("Parameter screen_name was not provided"); return; } @@ -87,7 +85,7 @@ public function user() $timeline = 'user'; $log_extra = "For User {$screen_name}"; - $this->EE->TMPL->log_item("Using '{$timeline}' Twitter Timeline {$log_extra}"); + ee()->TMPL->log_item("Using '{$timeline}' Twitter Timeline {$log_extra}"); $statuses = array(); @@ -109,17 +107,17 @@ public function user() public function search() { // Fetch parameters - $this->refresh = $this->EE->TMPL->fetch_param('twitter_refresh', $this->refresh); - $this->limit = $this->EE->TMPL->fetch_param('limit', $this->limit); - $this->use_stale = $this->EE->TMPL->fetch_param('use_stale_cache', 'yes'); - $this->target = $this->EE->TMPL->fetch_param('target', ''); - $query = $this->EE->TMPL->fetch_param('query'); - $prefix = $this->EE->TMPL->fetch_param('prefix', ''); - $userprefix = $this->EE->TMPL->fetch_param('userprefix', NULL); + $this->refresh = ee()->TMPL->fetch_param('twitter_refresh', $this->refresh); + $this->limit = ee()->TMPL->fetch_param('limit', $this->limit); + $this->use_stale = ee()->TMPL->fetch_param('use_stale_cache', 'yes'); + $this->target = ee()->TMPL->fetch_param('target', ''); + $query = ee()->TMPL->fetch_param('query'); + $prefix = ee()->TMPL->fetch_param('prefix', ''); + $userprefix = ee()->TMPL->fetch_param('userprefix', NULL); if (!$query) { - $this->EE->TMPL->log_item("Parameter query was not provided"); + ee()->TMPL->log_item("Parameter query was not provided"); return; } @@ -127,7 +125,7 @@ public function search() $timeline = 'search'; $log_extra = "For search {$query}"; - $this->EE->TMPL->log_item("Using '{$timeline}' Twitter Timeline {$log_extra}"); + ee()->TMPL->log_item("Using '{$timeline}' Twitter Timeline {$log_extra}"); $url = "search/tweets"; $params = array('q' => $query, 'include_rts' =>'true'); @@ -142,25 +140,25 @@ public function search() public function get_list() { // Fetch parameters - $this->refresh = $this->EE->TMPL->fetch_param('twitter_refresh', $this->refresh); - $this->limit = $this->EE->TMPL->fetch_param('limit', $this->limit); - $count = $this->EE->TMPL->fetch_param('count'); - $this->use_stale = $this->EE->TMPL->fetch_param('use_stale_cache', 'yes'); - $this->target = $this->EE->TMPL->fetch_param('target', ''); - $screen_name = $this->EE->TMPL->fetch_param('screen_name', ''); - $list = $this->EE->TMPL->fetch_param('list', ''); - $prefix = $this->EE->TMPL->fetch_param('prefix', ''); - $userprefix = $this->EE->TMPL->fetch_param('userprefix', NULL); - $include_rts = ($this->EE->TMPL->fetch_param('retweets', 'yes') == 'yes') ? TRUE : FALSE; + $this->refresh = ee()->TMPL->fetch_param('twitter_refresh', $this->refresh); + $this->limit = ee()->TMPL->fetch_param('limit', $this->limit); + $count = ee()->TMPL->fetch_param('count'); + $this->use_stale = ee()->TMPL->fetch_param('use_stale_cache', 'yes'); + $this->target = ee()->TMPL->fetch_param('target', ''); + $screen_name = ee()->TMPL->fetch_param('screen_name', ''); + $list = ee()->TMPL->fetch_param('list', ''); + $prefix = ee()->TMPL->fetch_param('prefix', ''); + $userprefix = ee()->TMPL->fetch_param('userprefix', NULL); + $include_rts = (ee()->TMPL->fetch_param('retweets', 'yes') == 'yes') ? TRUE : FALSE; if (!$screen_name) { - $this->EE->TMPL->log_item("Parameter screen_name was not provided"); + ee()->TMPL->log_item("Parameter screen_name was not provided"); return; } if (!$list) { - $this->EE->TMPL->log_item("Parameter list was not provided"); + ee()->TMPL->log_item("Parameter list was not provided"); return; } @@ -168,7 +166,7 @@ public function get_list() $timeline = 'list'; $log_extra = "For User {$screen_name}, list {$list}"; - $this->EE->TMPL->log_item("Using '{$timeline}' Twitter Timeline {$log_extra}"); + ee()->TMPL->log_item("Using '{$timeline}' Twitter Timeline {$log_extra}"); $url = "lists/statuses"; $params = array('owner_screen_name' => $screen_name, 'slug' => $list, 'include_rts' => $include_rts); @@ -233,7 +231,7 @@ private function render_tweets($statuses, $prefix, $userprefix, $images_only = F $val['retweeter'] = $retweeter; } - $tagdata = $this->EE->TMPL->tagdata; + $tagdata = ee()->TMPL->tagdata; $images = array(); @@ -326,17 +324,17 @@ private function render_tweets($statuses, $prefix, $userprefix, $images_only = F // Clean the tweet - $val['text'] = $this->EE->security->xss_clean($val['text']); - $val['text'] = $this->EE->functions->encode_ee_tags($val['text'], TRUE); + $val['text'] = ee()->security->xss_clean($val['text']); + $val['text'] = ee()->functions->encode_ee_tags($val['text'], TRUE); // Prep conditionals $cond = $val; - $tagdata = $this->EE->functions->prep_conditionals($tagdata, $cond['user']); + $tagdata = ee()->functions->prep_conditionals($tagdata, $cond['user']); unset($cond['user']); $cond['retweeted'] = $retweeted; - $tagdata = $this->EE->functions->prep_conditionals($tagdata, $cond); + $tagdata = ee()->functions->prep_conditionals($tagdata, $cond); $variables[$prefix . 'permalink'] = $this->_build_permalink($val); @@ -379,10 +377,10 @@ private function render_tweets($statuses, $prefix, $userprefix, $images_only = F } if (empty($loopvars)) { - return $this->EE->TMPL->no_results(); + return ee()->TMPL->no_results(); } - return $this->EE->TMPL->parse_variables($this->EE->TMPL->tagdata, $loopvars); + return ee()->TMPL->parse_variables(ee()->TMPL->tagdata, $loopvars); } /** @@ -418,7 +416,7 @@ function _fetch_data($url, $params) if ($this->cache_expired OR ! $cached_json) { - $this->EE->TMPL->log_item("Fetching Twitter timeline remotely"); + ee()->TMPL->log_item("Fetching Twitter timeline remotely"); if ( function_exists('curl_init')) { @@ -438,7 +436,7 @@ function _fetch_data($url, $params) // Did we try to grab new data? Tell them that it failed. if ( ! $cached_json OR $this->cache_expired) { - $this->EE->TMPL->log_item("Twitter Timeline Error: Unable to retrieve statuses from Twitter.com"); + ee()->TMPL->log_item("Twitter Timeline Error: Unable to retrieve statuses from Twitter.com"); // Rate limit hit and no cached data? // We definitely need to write a cache file so we don't continue @@ -455,11 +453,11 @@ function _fetch_data($url, $params) return FALSE; } - $this->EE->TMPL->log_item("Twitter Timeline Using Stale Cache: ".$uniqueid); + ee()->TMPL->log_item("Twitter Timeline Using Stale Cache: ".$uniqueid); } else { - $this->EE->TMPL->log_item("Twitter Timeline Retrieved From Cache."); + ee()->TMPL->log_item("Twitter Timeline Retrieved From Cache."); } @@ -478,7 +476,7 @@ function _fetch_data($url, $params) if ( ! $json_obj) { - $this->EE->TMPL->log_item("Twitter Timeline Error: Invalid Cache File"); + ee()->TMPL->log_item("Twitter Timeline Error: Invalid Cache File"); return FALSE; } } @@ -532,7 +530,7 @@ function _check_json($rawjson) if ($error['code'] === 88) { $this->rate_limit_hit = TRUE; } - $this->EE->TMPL->log_item("Twitter Timeline error: " . $error['message']); + ee()->TMPL->log_item("Twitter Timeline error: " . $error['message']); return FALSE; } @@ -554,13 +552,13 @@ function _check_json($rawjson) function _check_cache($hash) { if (version_compare(APP_VER, '2.8', '>=')) { - $cache = $this->EE->cache->get("/twitter/{$hash}/content"); + $cache = ee()->cache->get("/twitter/{$hash}/content"); if (!$cache) { return FALSE; } - $timestamp = $this->EE->cache->get("/twitter/{$hash}/timestamp"); + $timestamp = ee()->cache->get("/twitter/{$hash}/timestamp"); if (time() > ($timestamp + ($this->refresh * 60))) { $this->cache_expired = TRUE; @@ -621,8 +619,8 @@ function _check_cache($hash) function _write_cache($data, $hash) { if (version_compare(APP_VER, '2.8', '>=')) { - $this->EE->cache->save("/twitter/{$hash}/content", $data); - $this->EE->cache->save("/twitter/{$hash}/timestamp", time()); + ee()->cache->save("/twitter/{$hash}/content", $data); + ee()->cache->save("/twitter/{$hash}/timestamp", time()); } else { // Check for cache directory @@ -673,8 +671,8 @@ function _curl_fetch($url, $params) //this is where we have modified the plugin to fetch our data via oauth - $this->EE->load->model('twitter_model'); - $settings = $this->EE->twitter_model->get_settings(); + ee()->load->model('twitter_model'); + $settings = ee()->twitter_model->get_settings(); // Read in our saved access token/secret $access_token = isset($settings['access_token']) ? $settings['access_token'] : FALSE; diff --git a/system/expressionengine/third_party/twitter/models/twitter_model.php b/system/user/addons/twitter/models/twitter_model.php similarity index 95% rename from system/expressionengine/third_party/twitter/models/twitter_model.php rename to system/user/addons/twitter/models/twitter_model.php index 7d5d54b..d701590 100644 --- a/system/expressionengine/third_party/twitter/models/twitter_model.php +++ b/system/user/addons/twitter/models/twitter_model.php @@ -20,15 +20,14 @@ function __construct() { parent::__construct(); - $this->_ee =& get_instance(); - $this->site_id = $this->_ee->config->item('site_id'); + $this->site_id = ee()->config->item('site_id'); //prep-cache - if (! isset($this->_ee->session->cache['twitter'])) + if (! isset(ee()->session->cache['twitter'])) { - $this->_ee->session->cache['twitter'] = array(); + ee()->session->cache['twitter'] = array(); } - $this->cache =& $this->_ee->session->cache['twitter']; + $this->cache =& ee()->session->cache['twitter']; } diff --git a/system/expressionengine/third_party/twitter/upd.twitter.php b/system/user/addons/twitter/upd.twitter.php similarity index 62% rename from system/expressionengine/third_party/twitter/upd.twitter.php rename to system/user/addons/twitter/upd.twitter.php index dbeb6c5..e64162a 100755 --- a/system/expressionengine/third_party/twitter/upd.twitter.php +++ b/system/user/addons/twitter/upd.twitter.php @@ -1,26 +1,25 @@ EE =& get_instance(); - $this->site_id = $this->EE->config->item('site_id'); + ee()->load->dbforge(); + $this->site_id = ee()->config->item('site_id'); } public function install() { - $this->EE->db->insert('modules', array( + ee()->db->insert('modules', array( 'module_name' => 'Twitter', 'module_version' => $this->version, 'has_cp_backend' => 'y', 'has_publish_fields' => 'n' )); - $this->EE->load->dbforge(); + ee()->load->dbforge(); //create twitter module settings table $fields = array( @@ -30,12 +29,12 @@ public function install() 'var_value' => array('type' => 'varchar', 'constraint' => '100', 'null' => FALSE) ); - $this->EE->dbforge->add_field($fields); - $this->EE->dbforge->add_key('id', TRUE); - $this->EE->dbforge->create_table($this->db_settings_table); + ee()->dbforge->add_field($fields); + ee()->dbforge->add_key('id', TRUE); + ee()->dbforge->create_table($this->db_settings_table); // get the module id - $results = $this->EE->db->query("SELECT * FROM exp_modules WHERE module_name = 'Twitter'"); + $results = ee()->db->query("SELECT * FROM exp_modules WHERE module_name = 'Twitter'"); $module_id = $results->row('module_id'); $sql = array(); @@ -51,18 +50,18 @@ public function update( $current = '' ) { if($current == $this->version) { return FALSE; } if($current != $this->version && $this->version == '1.4.2') { - $this->EE->db->query("RENAME TABLE exp_twitter_settings TO exp_cr_twitter_settings"); + ee()->db->query("RENAME TABLE exp_twitter_settings TO exp_cr_twitter_settings"); } return TRUE; } public function uninstall() { - $this->EE->load->dbforge(); + ee()->load->dbforge(); - $this->EE->db->query("DELETE FROM exp_modules WHERE module_name = 'Twitter'"); + ee()->db->query("DELETE FROM exp_modules WHERE module_name = 'Twitter'"); - $this->EE->dbforge->drop_table($this->db_settings_table); + ee()->dbforge->drop_table($this->db_settings_table); return TRUE; } diff --git a/system/user/addons/twitter/views/authenticate.php b/system/user/addons/twitter/views/authenticate.php new file mode 100644 index 0000000..51fd463 --- /dev/null +++ b/system/user/addons/twitter/views/authenticate.php @@ -0,0 +1,28 @@ ++ Your request token has been saved. +
++ Please read the entire directions before proceeding +
++ First, click here to be taken to Twitter, where you can authenticate this site. Copy the Pin number Twitter provides. + Then, come back to this page and click here to be taken back to the settings form, where you will submit your Pin. +
+ + else: ?> + ++ There was an error generating your request tokens +
+ + endif; ?> + +