X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=addon%2Ftwitter%2Ftwitter.php;h=1dce9d2f66a38b5b0b6b28f1ec55742504b33442;hb=8cc6e69705c40b942ff74f757d8db743c479646a;hp=9fccefbee0ea1b8b1711ac9d662d2cdbea455241;hpb=cf88b283786c7421b2fe63f7da20c345e1e8672d;p=friendica.git
diff --git a/addon/twitter/twitter.php b/addon/twitter/twitter.php
index 9fccefbee0..1dce9d2f66 100644
--- a/addon/twitter/twitter.php
+++ b/addon/twitter/twitter.php
@@ -1,16 +1,191 @@
+ */
+/* Twitter Plugin for Friendika
+ *
+ * Author: Tobias Diekershoff
+ * tobias.diekershoff@gmx.net
+ *
+ * License:3-clause BSD license (same as Friendika)
+ *
+ * Configuration:
+ * To use this plugin you need a OAuth Consumer key pair (key & secret)
+ * you can get it from Twitter at https://twitter.com/apps
+ *
+ * Register your Friendika site as "Client" application with "Read & Write" access
+ * we do not need "Twitter as login". When you've registered the app you get the
+ * OAuth Consumer key and secret pair for your application/site.
+ *
+ * Add this key pair to your global .htconfig.php
+ *
+ * $a->config['twitter']['consumerkey'] = 'your consumer_key here';
+ * $a->config['twitter']['consumersecret'] = 'your consumer_secret here';
+ *
+ * To activate the plugin itself add it to the $a->config['system']['addon']
+ * setting. After this, your user can configure their Twitter account settings
+ * from "Settings -> Plugin Settings".
+ *
+ * Requirements: PHP5, curl [Slinky library]
+ *
+ * Documentation: http://diekershoff.homeunix.net/redmine/wiki/friendikaplugin/Twitter_Plugin
+ */
+
+/* __TODO__
+ *
+ * - what about multimedia content?
+ * so far we just strip HTML tags from the message
+ */
+
function twitter_install() {
+ // we need some hooks, for the configuration and for sending tweets
+ register_hook('plugin_settings', 'addon/twitter/twitter.php', 'twitter_settings');
+ register_hook('plugin_settings_post', 'addon/twitter/twitter.php', 'twitter_settings_post');
register_hook('post_local_end', 'addon/twitter/twitter.php', 'twitter_post_hook');
+ register_hook('jot_networks', 'addon/twitter/twitter.php', 'twitter_jot_nets');
+ logger("installed twitter");
}
function twitter_uninstall() {
+ unregister_hook('plugin_settings', 'addon/twitter/twitter.php', 'twitter_settings');
+ unregister_hook('plugin_settings_post', 'addon/twitter/twitter.php', 'twitter_settings_post');
unregister_hook('post_local_end', 'addon/twitter/twitter.php', 'twitter_post_hook');
+ unregister_hook('jot_networks', 'addon/twitter/twitter.php', 'twitter_jot_nets');
+}
+
+function twitter_jot_nets(&$a,&$b) {
+ if(! local_user())
+ return;
+
+ $tw_post = get_pconfig(local_user(),'twitter','post');
+ if(intval($tw_post) == 1) {
+ $tw_defpost = get_pconfig(local_user(),'twitter','post_by_default');
+ $selected = ((intval($tw_defpost) == 1) ? ' checked="checked" ' : '');
+ $b .= '
'
+ . t('Post to Twitter') . '
';
+ }
+
+
}
+function twitter_settings_post ($a,$post) {
+ if(! local_user())
+ return;
+ // don't check twitter settings if twitter submit button is not clicked
+ if (!x($_POST,'twitter-submit')) return;
+
+ if (isset($_POST['twitter-disconnect'])) {
+ /***
+ * if the twitter-disconnect checkbox is set, clear the OAuth key/secret pair
+ * from the user configuration
+ * TODO can we revoke the access tokens at Twitter and do we need to do so?
+ */
+ del_pconfig( local_user(), 'twitter', 'consumerkey' );
+ del_pconfig( local_user(), 'twitter', 'consumersecret' );
+ del_pconfig( local_user(), 'twitter', 'post' );
+ } else {
+ if (isset($_POST['twitter-pin'])) {
+ // if the user supplied us with a PIN from Twitter, let the magic of OAuth happen
+ logger('got a Twitter PIN');
+ require_once('library/twitteroauth.php');
+ $ckey = get_config('twitter', 'consumerkey' );
+ $csecret = get_config('twitter', 'consumersecret' );
+ // the token and secret for which the PIN was generated were hidden in the settings
+ // form as token and token2, we need a new connection to Twitter using these token
+ // and secret to request a Access Token with the PIN
+ $connection = new TwitterOAuth($ckey, $csecret, $_POST['twitter-token'], $_POST['twitter-token2']);
+ $token = $connection->getAccessToken( $_POST['twitter-pin'] );
+ // ok, now that we have the Access Token, save them in the user config
+ set_pconfig(local_user(),'twitter', 'oauthtoken', $token['oauth_token']);
+ set_pconfig(local_user(),'twitter', 'oauthsecret', $token['oauth_token_secret']);
+ set_pconfig(local_user(),'twitter', 'post', 1);
+ // reload the Addon Settings page, if we don't do it see Bug #42
+ header('Location: '.$a->get_baseurl().'/settings/addon');
+ } else {
+ // if no PIN is supplied in the POST variables, the user has changed the setting
+ // to post a tweet for every new __public__ posting to the wall
+ set_pconfig(local_user(),'twitter','post',intval($_POST['twitter-enable']));
+ }}
+}
+function twitter_settings(&$a,&$s) {
+ if(! local_user())
+ return;
+ $a->page['htmlhead'] .= '' . "\r\n";
+ /***
+ * 1) Check that we have global consumer key & secret
+ * 2) If no OAuthtoken & stuff is present, generate button to get some
+ * 3) Checkbox for "Send public notices (140 chars only)
+ */
+ $ckey = get_config('twitter', 'consumerkey' );
+ $csecret = get_config('twitter', 'consumersecret' );
+ $otoken = get_pconfig(local_user(), 'twitter', 'oauthtoken' );
+ $osecret = get_pconfig(local_user(), 'twitter', 'oauthsecret' );
+ $enabled = get_pconfig(local_user(), 'twitter', 'post');
+ $checked = (($enabled) ? ' checked="checked" ' : '');
+ $s .= '
';
+ $s .= '
'. t('Twitter Posting Settings') .'
';
+ if ( (!$ckey) && (!$csecret) ) {
+ /***
+ * no global consumer keys
+ * display warning and skip personal config
+ */
+ $s .= '
'. t('No consumer key pair for Twitter found. Please contact your site administrator.') .'
';
+ } else {
+ /***
+ * ok we have a consumer key pair now look into the OAuth stuff
+ */
+ if ( (!$otoken) && (!$osecret) ) {
+ /***
+ * the user has not yet connected the account to twitter...
+ * get a temporary OAuth key/secret pair and display a button with
+ * which the user can request a PIN to connect the account to a
+ * account at Twitter.
+ */
+ require_once('library/twitteroauth.php');
+ $connection = new TwitterOAuth($ckey, $csecret);
+ $request_token = $connection->getRequestToken();
+ $token = $request_token['oauth_token'];
+ /***
+ * make some nice form
+ */
+ $s .= '
'. t('At this Friendika instance the Twitter plugin was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter.') .'
';
+ $s .= '';
+ } else {
+ /***
+ * we have an OAuth key / secret pair for the user
+ * so let's give a chance to disable the postings to Twitter
+ */
+ require_once('library/twitteroauth.php');
+ $connection = new TwitterOAuth($ckey,$csecret,$otoken,$osecret);
+ $details = $connection->get('account/verify_credentials');
+ $s .= '