[Php-blog-plugin-cvs] additional_plugins/serendipity_plugin_twitter ChangeLog, 1.25, 1.26 documenta
A reliable, secure & extensible PHP blog | Not mainstream since 2002
Brought to you by:
garvinhicking,
jhermanns
From: Garvin H. <gar...@us...> - 2010-09-22 07:12:33
|
Update of /cvsroot/php-blog/additional_plugins/serendipity_plugin_twitter In directory sfp-cvsdas-2.v30.ch3.sourceforge.com:/tmp/cvs-serv12530 Modified Files: ChangeLog documentation_de.html lang_de.inc.php lang_en.inc.php plugin_version.inc.php serendipity_event_twitter.php serendipity_plugin_twitter.php Log Message: OAuth support Index: serendipity_plugin_twitter.php =================================================================== RCS file: /cvsroot/php-blog/additional_plugins/serendipity_plugin_twitter/serendipity_plugin_twitter.php,v retrieving revision 1.24 retrieving revision 1.25 diff -u -d -r1.24 -r1.25 --- serendipity_plugin_twitter.php 4 Jun 2010 06:08:47 -0000 1.24 +++ serendipity_plugin_twitter.php 22 Sep 2010 07:12:24 -0000 1.25 @@ -172,7 +172,7 @@ $cachefile = $serendipity['serendipityPath'] . PATH_SMARTY_COMPILE . "/twitterresult.$cache_user.json"; // Remove Cachefile - unlink($cachefile); + @unlink($cachefile); } function output($out) { Index: lang_de.inc.php =================================================================== RCS file: /cvsroot/php-blog/additional_plugins/serendipity_plugin_twitter/lang_de.inc.php,v retrieving revision 1.15 retrieving revision 1.16 diff -u -d -r1.15 -r1.16 --- lang_de.inc.php 20 Aug 2009 21:00:12 -0000 1.15 +++ lang_de.inc.php 22 Sep 2010 07:12:24 -0000 1.16 @@ -177,3 +177,38 @@ @define('PLUGIN_EVENT_TWITTER_SHOW_SHORTURL', 'Kurze URL für jeden Artikel anzeigen'); @define('PLUGIN_EVENT_TWITTER_SHOW_SHORTURL_DESC', 'Zeigt die default KurzURL im Footer jedes Artikels an. Wenn TweetThis smartifizieren angeschaltet wurde, dann erhält jeder Eintrag die Smarty Variable entry.url_shorturl.'); + +// oauth +@define('PLUGIN_EVENT_TWITTER_CONSUMER_KEY', 'Consumer key'); +@define('PLUGIN_EVENT_TWITTER_CONSUMER_KEY_DESC', 'Den "Consumer key" und "Consumer secret" erhältst du von Twitter nach dem du für deinen Block eine Twitter-Applikation erstellt hast.'); +@define('PLUGIN_EVENT_TWITTER_CONSUMER_SECRET', 'Consumer secret'); +@define('PLUGIN_EVENT_TWITTER_REGISTER_APP', ' + +<p>Klicke auf den folgenden Button um einen Twitter OAuth-Account zu erstellen, damit Dein Blog mit Twitter kommunizieren kann. Auf der Twitter-Seite musst Du folgende Werte ausfüllen:</p> +<div style="padding: 5px 0px 5px 15px"> +<p><strong>Application Icon</strong>: (kann leergelassen werden)</p> +<p><strong>Application Name</strong>: %APPNAME%</p> +<p><strong>Description</strong>: Twitter-Plugin für Serendipity-Blog</p> +<p><strong>Application Website</strong>: %APPSITE%</p> +<p><strong>Organization</strong>: (kann leergelassen werden)</p> +<p><strong>Website</strong>: %APPSITE%</p> +<p><strong>Application Type</strong>: Browser</p> +<p><strong>Callback URL</strong>: %APPCALLBACK%</p> +<p><strong>Default Access type</strong>: Read & Write</p> +<p><strong>Use Twitter for login</strong>: (nicht aktivieren)</p> +</div> +<p>Nachdem die Werte eingegeben wurden und der Captcha ausgefüllt, wird Twitter eine Seite zeigen in der <strong>Consumer Key</strong> und <strong>Consumer Secret</strong> aufgeführt werden. Diese beiden Werte müssen hier in der Plugin-Konfiguration in den gleichnamigen Feldern ausgefüllt werden.</p> +'); +@define('PLUGIN_EVENT_TWITTER_SIGN_IN', 'Klicke auf den folgenden Button und erlaube Twitter eine Verbindung herzustellen.'); +@define('PLUGIN_EVENT_TWITTER_TIMELINE', 'Status Timeline'); +@define('PLUGIN_EVENT_TWITTER_TIMELINE_DESC', ''); +@define('PLUGIN_EVENT_TWITTER_VERBINDUNG_OK', 'Verbindung hergestellt'); +@define('PLUGIN_EVENT_TWITTER_VERBINDUNG_DEL', 'Verbindung löschen'); + +@define('PLUGIN_EVENT_TWITTER_VERBINDUNG_DEL_OK', 'Twitter OAuth token entfernt'); +@define('PLUGIN_EVENT_TWITTER_CLOSEWINDOW', 'Fenster schließen'); +@define('PLUGIN_EVENT_TWITTER_REGISTER', 'Registrieren'); +@define('PLUGIN_EVENT_TWITTER_SIGNIN', 'Einloggen'); +@define('PLUGIN_EVENT_TWITTER_CALLBACKURL', 'Call Back URL (bei Twitter angeben)'); +@define('PLUGIN_EVENT_TWITTER_VERBINDUNG_ERROR', 'Fehler im Twitter Callback'); + Index: ChangeLog =================================================================== RCS file: /cvsroot/php-blog/additional_plugins/serendipity_plugin_twitter/ChangeLog,v retrieving revision 1.25 retrieving revision 1.26 diff -u -d -r1.25 -r1.26 --- ChangeLog 14 Jun 2010 10:40:48 -0000 1.25 +++ ChangeLog 22 Sep 2010 07:12:24 -0000 1.26 @@ -2,7 +2,6 @@ * Collect all tweets of a day/week/whatever of the blog owner into one article and publish it dayly/weekly/whatever -* OAuth? * "check tweetback" link should add new tweetbacks immediately * Link twitter accs with s9y accs. Only s9y autors linked to a twitter acc should be able to create tweets with that acc. @@ -10,6 +9,10 @@ * Twitter offset for tweetbacks? Tweeter is showing correct time, tweetbacks not?! +1.23: (rasch,garvinhicking) +---------------------- + * Twitters OAuth authentication + 1.21: Fix parse error 1.20 Index: lang_en.inc.php =================================================================== RCS file: /cvsroot/php-blog/additional_plugins/serendipity_plugin_twitter/lang_en.inc.php,v retrieving revision 1.15 retrieving revision 1.16 diff -u -d -r1.15 -r1.16 --- lang_en.inc.php 20 Aug 2009 21:00:12 -0000 1.15 +++ lang_en.inc.php 22 Sep 2010 07:12:24 -0000 1.16 @@ -177,3 +177,38 @@ @define('PLUGIN_EVENT_TWITTER_SHOW_SHORTURL', 'Show short URL for each article'); @define('PLUGIN_EVENT_TWITTER_SHOW_SHORTURL_DESC', 'Will show the drefault short URL in the footer of each article. If TwwetThis smartifying is enabled, each entry will get the variable entry.url_shorturl instead.'); + +// oauth +@define('PLUGIN_EVENT_TWITTER_CONSUMER_KEY', 'Consumer key'); +@define('PLUGIN_EVENT_TWITTER_CONSUMER_KEY_DESC', 'The "consumer key" and "consumer secret" you get from Twitter after you created for your block a Twitter application.'); +@define('PLUGIN_EVENT_TWITTER_CONSUMER_SECRET', 'Consumer secret'); +@define('PLUGIN_EVENT_TWITTER_REGISTER_APP', ' + +<p>Click on the button below to create a Twitter OAuth-Account, so that your blog can be authorized. On this Twitter-page you need to fill in those values:</p> +<div style="padding: 5px 0px 5px 15px"> +<p><strong>Application Icon</strong>: (can be left blank)</p> +<p><strong>Application Name</strong>: %APPNAME%</p> +<p><strong>Description</strong>: Twitter-Plugin for Serendipity-Blog</p> +<p><strong>Application Website</strong>: %APPSITE%</p> +<p><strong>Organization</strong>: (can be left blank)</p> +<p><strong>Website</strong>: %APPSITE%</p> +<p><strong>Application Type</strong>: Browser</p> +<p><strong>Callback URL</strong>: %APPCALLBACK%</p> +<p><strong>Default Access type</strong>: Read & Write</p> +<p><strong>Use Twitter for login</strong>: (leave unchecked)</p> +</div> +<p>After you have entered those values and the captcha graphic, Twitter will show you a page where it lists a <strong>Consumer key</strong> and <strong>consumer secret</strong>. Those are the values you need to enter here in the plugin configuration screen. +'); +@define('PLUGIN_EVENT_TWITTER_SIGN_IN', 'Click on the button below and allow Twitter to connect.'); +@define('PLUGIN_EVENT_TWITTER_TIMELINE', 'Status Timeline'); +@define('PLUGIN_EVENT_TWITTER_TIMELINE_DESC', ''); +@define('PLUGIN_EVENT_TWITTER_VERBINDUNG_OK', 'Connected'); +@define('PLUGIN_EVENT_TWITTER_VERBINDUNG_DEL', 'Delete link'); + +@define('PLUGIN_EVENT_TWITTER_VERBINDUNG_DEL_OK', 'Twitter OAuth token removed'); +@define('PLUGIN_EVENT_TWITTER_CLOSEWINDOW', 'Close window'); +@define('PLUGIN_EVENT_TWITTER_REGISTER', 'Register'); +@define('PLUGIN_EVENT_TWITTER_SIGNIN', 'Sign in'); +@define('PLUGIN_EVENT_TWITTER_CALLBACKURL', 'Call Back URL (enter in twitter)'); +@define('PLUGIN_EVENT_TWITTER_VERBINDUNG_ERROR', 'Twitter Callback Error'); + Index: plugin_version.inc.php =================================================================== RCS file: /cvsroot/php-blog/additional_plugins/serendipity_plugin_twitter/plugin_version.inc.php,v retrieving revision 1.22 retrieving revision 1.23 diff -u -d -r1.22 -r1.23 --- plugin_version.inc.php 14 Jun 2010 10:40:48 -0000 1.22 +++ plugin_version.inc.php 22 Sep 2010 07:12:24 -0000 1.23 @@ -1,4 +1,4 @@ <?php // Actual version of both plugins -@define('PLUGIN_TWITTER_VERSION', '1.21'); +@define('PLUGIN_TWITTER_VERSION', '1.23'); Index: documentation_de.html =================================================================== RCS file: /cvsroot/php-blog/additional_plugins/serendipity_plugin_twitter/documentation_de.html,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- documentation_de.html 3 Jul 2009 22:39:12 -0000 1.2 +++ documentation_de.html 22 Sep 2010 07:12:24 -0000 1.3 @@ -1,8 +1,16 @@ <html> <head> - <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> - <title>Hilfedatei: Twitter Plugin</title> +<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> +<title>Hilfedatei: Twitter Plugin</title> <link rel="stylesheet" type="text/css" href="documentation/documentation.css"/> + <style type="text/css"> +<!-- +.Stil1 { + color: #EE0000; + font-weight: bold; +} +--> + </style> </head> <body> <div id="title"> @@ -12,12 +20,29 @@ <div id="content"> <h2>Inhalt</h2> <ol> + <li><a href="#twitter_register">Verbindung zu Twitter</a></li> <li><a href="#twitter_client">Microblogging Client</a></li> <li><a href="#announce_twitter">Ankündigung über Twitter</a></li> <li><a href="#tweetbacks">Tweetbacks</a></li> </ol> </div> +<a name="twitter_register"></a> +<h2>Verbindung zu Twitter</h2> + +<p>Um dein Blog mit Twitter zu verbinden, sind folgende Schritte notwendig:</p> +<ul> + <li>Als erstes muÃt du für deinen Blog eine eigene Twitter-Applikation erstellen. Klicke dazu auf den Button "Register App".<br> + Wähle unter Application Type "Browser" aus und trage in "Callback URL" die über dem Button "Register App" angezeigte Callback URL.<br> + Wähle unter Default Access type "Read & Write" aus.</li> + <li>Nach dem Speichern erhältst du von deiner Twitter-Applikation den "Consumer key" und "Consumer secret".</li> + <li>Trage den "Consumer key" und "Consumer secret" in den Einstellungen ein unter Benutzerkonten ein und klicke auf Speichern.</li> + <li>Klicke anschlieÃend auf den Button "Sign in" und erlaube Twitter eine Verbindung herzustellen.</li> + <li><span class="Stil1">WICHTIG!</span> Wenn du mehrere Twitter Accounts anlegen möchtest must du dich zwischendurch bei Twitter ausloggen.</li> +</ul> + +<p><a href="#top">top</a></p> + <a name="twitter_client"></a> <h2>Microblogging Client</h2> Index: serendipity_event_twitter.php =================================================================== RCS file: /cvsroot/php-blog/additional_plugins/serendipity_plugin_twitter/serendipity_event_twitter.php,v retrieving revision 1.21 retrieving revision 1.22 diff -u -d -r1.21 -r1.22 --- serendipity_event_twitter.php 14 Jun 2010 10:40:48 -0000 1.21 +++ serendipity_event_twitter.php 22 Sep 2010 07:12:24 -0000 1.22 @@ -83,7 +83,7 @@ ); $config_twitter = array( - 'twitter_title', 'id_count', 'id_title', 'id_service', 'twittername', 'twitterpwd', + 'twitter_title', 'id_count', 'id_title', 'id_service', 'twittername', 'twitterpwd','twitteroa_sign_in','twitteroa_consumer_key','twitteroa_consumer_secret' ); if (is_numeric($this->get_config('id_count',1))) { $idcount = $this->get_config('id_count',1); @@ -96,10 +96,13 @@ $config_twitter[] = 'id_service' . $idx; $config_twitter[] = 'twittername' . $idx; $config_twitter[] = 'twitterpwd' . $idx; + $config_twitter[] = 'twitteroa_consumer_secret' . $idx; + $config_twitter[] = 'twitteroa_consumer_key' . $idx; + $config_twitter[] = 'twitteroa_sign_in' . $idx; } $config_tweeter = array( - 'tweeter_title', 'tweeter_show', 'tweeter_history', 'tweeter_history_count' + 'tweeter_title', 'tweeter_show', 'tweeter_history', 'tweeter_history_count', 'tweeter_timeline' ); $config_tweetback = array( @@ -163,7 +166,98 @@ $propbag->add('configuration', $configuration); } - + + function handleConfig($name, &$propbag, $idx = '') { + global $serendipity; + switch($name) { + case 'twitteroa_consumer_secret': + if (!$this->get_config('id_service' . $idx) OR $this->get_config('id_service' . $idx) == "twitter") { + $u = $this->get_config('twittername' . $idx); + $kd = $this->get_config('twitteroa_key_' . $idx . $u); + $td = $this->get_config('twitteroa_token_' . $idx . $u); + + if (!empty($kd) && !empty($td)) { + // OAuth token and key is setup. + } else { + $propbag->add('type', 'string'); + $propbag->add('name', PLUGIN_EVENT_TWITTER_CONSUMER_SECRET); + $propbag->add('description', PLUGIN_EVENT_TWITTER_CONSUMER_KEY_DESC); + } + } + break; + + case 'twitteroa_consumer_key': + if (!$this->get_config('id_service' . $idx) OR $this->get_config('id_service' . $idx) == "twitter") { + + $u = $this->get_config('twittername' . $idx); + $kd = $this->get_config('twitteroa_key_' . $idx . $u); + $td = $this->get_config('twitteroa_token_' . $idx . $u); + + if (!empty($kd) && !empty($td)) { + // OAuth token and key is setup. + } else { + $propbag->add('type', 'string'); + $propbag->add('name', PLUGIN_EVENT_TWITTER_CONSUMER_KEY); + $propbag->add('description', PLUGIN_EVENT_TWITTER_CONSUMER_KEY_DESC); + } + } + break; + + case 'twitteroa_sign_in': + if (!$this->get_config('id_service' . $idx) OR $this->get_config('id_service' . $idx) == "twitter") { + $u = $this->get_config('twittername' . $idx); + $kd = $this->get_config('twitteroa_key_' . $idx . $u); + $td = $this->get_config('twitteroa_token_' . $idx . $u); + + $kk = $this->get_config('twitteroa_consumer_secret' . $idx); + $ks = $this->get_config('twitteroa_consumer_key' . $idx); + + if (!empty($kd) && !empty($td)) { + // OAuth token and key is setup + $linkdel = $serendipity['baseURL'] . $serendipity['indexFile'] . '?/' . TwitterPluginFileAccess::get_permaplugin_path() . '/twitteroa-del=' . $idx; + $propbag->add('type', 'content'); + $propbag->add('default', PLUGIN_EVENT_TWITTER_VERBINDUNG_OK . ' <a padding-left: 30px;" href="' . $linkdel . '" target="_blank" onclick="window.open(\''.$linkdel.'\',\'\',\'width=800,height=400\'); return false">'.PLUGIN_EVENT_TWITTER_VERBINDUNG_DEL.'</a>'); + } elseif (!empty($ks) && !empty($kk)) { + // OAuth not yet setup, but we have consumer key/secret + $url = $serendipity['baseURL'] . $serendipity['indexFile'] . '?/' . TwitterPluginFileAccess::get_permaplugin_path() . '/twitteroa-redirect=' . $idx; + $propbag->add('type', 'content'); + $propbag->add('default', PLUGIN_EVENT_TWITTER_SIGN_IN.' + <p><div style="width: 151px; + height: 24px; line-height: 24px; + background: url(\'' . $this->get_config('plugin_rel_url') . '/img/signin.png\') no-repeat;"> + <a style="color: #fff; padding-left: 30px;" href="' . $url . '" target="_blank" onclick="window.open(\''.$url.'\',\'\',\'width=800,height=400\'); return false">' . PLUGIN_EVENT_TWITTER_SIGNIN . '</a></div></p>'); + + } else { + // OAuth not yet setup, and no consumer key/secret yet. + $url = $serendipity['baseURL'] . $serendipity['indexFile'] . '?/' . TwitterPluginFileAccess::get_permaplugin_path() . '/twitteroa-callback=' . $idx; + $propbag->add('type', 'content'); + + $desc = str_replace( + array( + '%APPNAME%', + '%APPSITE%', + '%APPCALLBACK%' + ), + array( + $serendipity['blogTitle'], + $serendipity['baseURL'], + $url + ), + PLUGIN_EVENT_TWITTER_REGISTER_APP + ); + $propbag->add('default', $desc . ' + <p><div style="width: 151px; + height: 24px; line-height: 24px; + background: url(\'' . $this->get_config('plugin_rel_url') . '/img/signin.png\') no-repeat;"> + <a style="color: #fff; padding-left: 30px;" href="http://twitter.com/apps/new" target="_blank">' . PLUGIN_EVENT_TWITTER_REGISTER . '</a></div></p>'); + } + } + break; + } + + return true; + } + function introspect_config_item($name, &$propbag) { global $serendipity; @@ -256,10 +350,26 @@ break; case 'twitterpwd': - $propbag->add('type', 'string'); - $propbag->add('name', PLUGIN_EVENT_TWITTER_ACCOUNT_PWD); - $propbag->add('description', PLUGIN_EVENT_TWITTER_ACCOUNT_PWD_DESC); - $propbag->add('input_type', 'password'); + + if (!$this->get_config('id_service') OR $this->get_config('id_service') == "identica") { + $propbag->add('type', 'string'); + $propbag->add('name', PLUGIN_EVENT_TWITTER_ACCOUNT_PWD); + $propbag->add('description', PLUGIN_EVENT_TWITTER_ACCOUNT_PWD_DESC); + $propbag->add('input_type', 'password'); + } + + break; + + case 'twitteroa_consumer_key': + $this->handleConfig('twitteroa_consumer_key', $propbag); + break; + + case 'twitteroa_consumer_secret': + $this->handleConfig('twitteroa_consumer_secret', $propbag); + break; + + case 'twitteroa_sign_in': + $this->handleConfig('twitteroa_sign_in', $propbag); break; // Backend Client @@ -283,6 +393,25 @@ $propbag->add('default', 'disable'); break; + case 'tweeter_timeline': + $tb_statuses = array( + 'public_timeline' => 'public_timeline', + 'home_timeline' => 'home_timeline', + 'friends_timeline' => 'friends_timeline', + 'user_timeline' => 'user_timeline', + 'mentions' => 'mentions', + 'retweeted_by_me' => 'retweeted_by_me', + 'retweeted_to_me' => 'retweeted_to_me', + 'retweets_of_me' => 'retweets_of_me', + ); + + $propbag->add('type', 'select'); + $propbag->add('name', PLUGIN_EVENT_TWITTER_TIMELINE); + $propbag->add('description', PLUGIN_EVENT_TWITTER_TIMELINE_DESC); + $propbag->add('select_values', $tb_statuses); + $propbag->add('default', 'home_timeline'); + break; + case 'tweeter_history': $propbag->add('type', 'boolean'); $propbag->add('name', PLUGIN_EVENT_TWITTER_TWEETER_HISTORY); @@ -540,14 +669,28 @@ $propbag->add('name', PLUGIN_EVENT_TWITTER_ACCOUNT_NAME); $propbag->add('description', PLUGIN_EVENT_TWITTER_ACCOUNT_NAME_DESC); break; - + case 'twitterpwd'. $idx: - $propbag->add('type', 'string'); - $propbag->add('name', PLUGIN_EVENT_TWITTER_ACCOUNT_PWD); - $propbag->add('description', PLUGIN_EVENT_TWITTER_ACCOUNT_PWD_DESC); - $propbag->add('input_type', 'password'); + if (!$this->get_config('id_service'. $idx) OR $this->get_config('id_service'. $idx) == "identica"){ + $propbag->add('type', 'string'); + $propbag->add('name', PLUGIN_EVENT_TWITTER_ACCOUNT_PWD); + $propbag->add('description', PLUGIN_EVENT_TWITTER_ACCOUNT_PWD_DESC); + $propbag->add('input_type', 'password'); + } break; - } + + case 'twitteroa_consumer_key'. $idx: + $this->handleConfig('twitteroa_consumer_key', $propbag, $idx); + break; + + case 'twitteroa_consumer_secret'. $idx: + $this->handleConfig('twitteroa_consumer_secret', $propbag, $idx); + break; + + case 'twitteroa_sign_in'. $idx: + $this->handleConfig('twitteroa_sign_in', $propbag, $idx); + break; + } } return true; @@ -619,9 +762,9 @@ $this->show_img(dirname(__FILE__) . '/img/pixel.png', (int)$next_check); return true; } - $parts = explode('=',$eventData); $command = $parts[0]; + $fparts = explode('&', $parts[1]); if ($command=="tweetback") { if (!$_SESSION['serendipityAuthedUser']) { echo "DON'T HACK!<br>"; @@ -649,6 +792,139 @@ } return true; } + else if ($command == "twitteroa-del") { + $this->twitteroalog($command); + + // Remove current twitter OAuth key and token to allow to re-connect + if (!serendipity_userLoggedIn()) { + die ("Don't hack!"); + } + $idx = $fparts[0]; + + $u = $this->get_config('twittername' . $idx); + $kd = $this->set_config('twitteroa_key_' . $idx . $u, ''); + $td = $this->set_config('twitteroa_token_' . $idx . $u, ''); + + serendipity_die('<div align="center"> + <h1>' . PLUGIN_EVENT_TWITTER_VERBINDUNG_DEL_OK . '</h1> + <a href="javascript:window.close()">' . PLUGIN_EVENT_TWITTER_CLOSEWINDOW . '</a> + </div>'); + + return true; + } + else if ($command == "twitteroa-redirect") { + $this->twitteroalog($command); + + if (!serendipity_userLoggedIn()) { + die ("Don't hack!"); + } + $idx = $fparts[0]; + + $u = $this->get_config('twittername' . $idx); + $kd = $this->get_config('twitteroa_key_' . $idx .$u); + $td = $this->get_config('twitteroa_token_' . $idx . $u); + $kk = $this->get_config('twitteroa_consumer_key' . $idx); + $ks = $this->get_config('twitteroa_consumer_secret' . $idx); + + require_once(dirname(__FILE__) . '/twitteroauth/twitteroauth.php'); + + $twittername = $u; + $callbackurl = $serendipity['baseURL'] . $serendipity['indexFile'] . '?/' . TwitterPluginFileAccess::get_permaplugin_path() . '/twitteroa-callback=' . $idx + . "&twittername=" . $twittername; + + define('CONSUMER_KEY', $kk); + define('CONSUMER_SECRET', $ks); + define('OAUTH_CALLBACK', $callbackurl); + + /* Build TwitterOAuth object with client credentials. */ + $connection = new TwitterOAuth($kk, $ks); + + /* Get temporary credentials. */ + $request_token = $connection->getRequestToken(OAUTH_CALLBACK); + + /* Save temporary credentials to session. */ + $_SESSION['oauth_token'] = $token = $request_token['oauth_token']; + $_SESSION['oauth_token_secret'] = $request_token['oauth_token_secret']; + + /* If last connection failed don't display authorization link. */ + switch ($connection->http_code) { + case 200: + /* Build authorize URL and redirect user to Twitter. */ + $url = $connection->getAuthorizeURL($token); + header('Location: ' . $url); + exit; + break; + default: + serendipity_die('<div align="center"> + <h1>' . PLUGIN_EVENT_TWITTER_VERBINDUNG_ERROR . '</h1> + <div align="left"><pre>' . print_r($connection, true) . '</pre> + <pre>' . print_r($request_token, true) . '</pre> + <pre>' . print_r($_SESSION, true) . '</pre> + <pre>' . print_r($_REQUEST, true) . '</pre></div> + <a href="javascript:window.close()">' . PLUGIN_EVENT_TWITTER_CLOSEWINDOW . '</a> + </div>'); + } + return true; + + } + else if ($command == "twitteroa-callback") { + $this->twitteroalog($command); + + if (!serendipity_userLoggedIn()) { + die ("Don't hack!"); + } + $idx = $fparts[0]; + + $u = $this->get_config('twittername' . $idx); + $kd = $this->get_config('twitteroa_key_' . $idx .$u); + $td = $this->get_config('twitteroa_token_' . $idx . $u); + $kk = $this->get_config('twitteroa_consumer_key' . $idx); + $ks = $this->get_config('twitteroa_consumer_secret' . $idx); + + require_once(dirname(__FILE__) . '/twitteroauth/twitteroauth.php'); + define('CONSUMER_KEY', $kk); + define('CONSUMER_SECRET', $ks); + + /* If the oauth_token is old redirect to the connect page. */ + if (isset($_REQUEST['oauth_token']) && $_SESSION['oauth_token'] !== $_REQUEST['oauth_token']) { + $_SESSION['oauth_status'] = 'oldtoken'; + $url = $serendipity['baseURL'] . $serendipity['indexFile'] . '?/' . TwitterPluginFileAccess::get_permaplugin_path() . '/twitteroa-redirect=' . $idx; + header('Location: ' . $url); + exit; + } + + /* Create TwitteroAuth object with app key/secret and token key/secret from default phase */ + $connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $_SESSION['oauth_token'], $_SESSION['oauth_token_secret']); + + /* Request access tokens from twitter */ + $access_token = $connection->getAccessToken($_REQUEST['oauth_verifier']); + $this->set_config('twitteroa_key_' . $idx . $u, $access_token['oauth_token']); + $this->set_config('twitteroa_token_' . $idx . $u, $access_token['oauth_token_secret']); + + /* Remove no longer needed request tokens */ + unset($_SESSION['oauth_token']); + unset($_SESSION['oauth_token_secret']); + + /* If HTTP response is 200 continue otherwise send to connect page to retry */ + if (200 == $connection->http_code) { + serendipity_die('<div align="center"> + <h1>' . PLUGIN_EVENT_TWITTER_VERBINDUNG_OK . '</h1> + <a href="javascript:window.close()">' . PLUGIN_EVENT_TWITTER_CLOSEWINDOW . '</a> + </div>'); + } else { + serendipity_die('<div align="center"> + <h1>' . PLUGIN_EVENT_TWITTER_VERBINDUNG_ERROR . '</h1> + <pre>' . print_r($connection, true) . '</pre> + <pre>' . print_r($access_token, true) . '</pre> + <pre>' . print_r($_SESSION, true) . '</pre> + <pre>' . print_r($_REQUEST, true) . '</pre> + <a href="javascript:window.close()">' . PLUGIN_EVENT_TWITTER_CLOSEWINDOW . '</a> + </div>'); + } + + return true; + } + else if ($command=="tweetback.png") { $param = preg_replace('@^tweetback.png=@','',$eventData); @@ -737,6 +1013,21 @@ } + function twitteroalog($cmd) { + static $debug = false; + global $serendipity; + + if ($debug) { + $fp = fopen($serendipity['serendipityPath'] . PATH_SMARTY_COMPILE . "/twitteroa.log", 'a'); + fwrite($fp, date('d.m.Y H:i') . ' - ' . $cmd . ' - ' . $_SERVER['REMOTE_ADDR'] . "\n"); + fwrite($fp, print_r($_SERVER, true) . "\n\n"); + fwrite($fp, print_r($_REQUEST, true) . "\n\n"); + fwrite($fp, print_r($_SESSION, true) . "\n\n"); + fclose($fp); + } + return true; + } + function cleanup() { global $serendipity; @@ -1193,9 +1484,32 @@ return true; } + function twitteroa_connect() { + require_once(dirname(__FILE__).'/twitteroauth/twitteroauth.php'); + + $idx = ''; // Always use primary account for this + $u = $this->get_config('twittername' . $idx); + $kd = $oauth_token = $this->get_config('twitteroa_key_' . $idx .$u); + $td = $oauth_token_secret = $this->get_config('twitteroa_token_' . $idx . $u); + $kk = $consumer_key = $this->get_config('twitteroa_consumer_key' . $idx); + $ks = $consumer_secret = $this->get_config('twitteroa_consumer_secret' . $idx); + + /* Create a TwitterOauth object with consumer/user tokens. */ + $connection = new TwitterOAuth($consumer_key, $consumer_secret, $oauth_token, $oauth_token_secret); + return $connection; + } + function twitter_published_entry_to_account($account_name, $account_pwd, $account_type, $update) { - $api = new Twitter($account_type=='identica'); - $api->update($account_name, $account_pwd, $update); + if ($account_type == "identica"){ + $api = new Twitter($account_type=='identica'); + $api->update($account_name, $account_pwd, $update); + } else { + $connection = $this->twitteroa_connect(); + + /* statuses/update */ + $parameters = array('status' => $update); + $status = $connection->post('statuses/update', $parameters); + } echo "<li>$account_type update for $account_name: [" . mb_convert_encoding($update, LANG_CHARSET) . "]</li>"; } @@ -1432,7 +1746,7 @@ echo "<h2>Tweets found</h2>"; echo "Found " . count($entries) . " tweets.<br>"; echo "<ul>"; - foreach($entries as $entry) { + foreach($entries as $entry) { $comment_url = $this->comment_url($entry); echo "<li>"; //echo "<b>twitter search</b>: " . $entry[TWITTER_SEARCHRESULT_URL_QUERY] . "<br/>"; @@ -1447,7 +1761,7 @@ echo '<a href="' . $comment_url . '">comment url in blog</a><br/>'; echo 'Time:' . $entry[TWITTER_SEARCHRESULT_PUBDATE] . ', ' . strtotime($entry[TWITTER_SEARCHRESULT_PUBDATE]); echo "</li>"; - } + } echo "</ul>"; } @@ -1517,6 +1831,18 @@ fclose($fp); } + function load_timeline() { + $status_timeline = array( + "public_timeline", + "home_timeline", + "friends_timeline", + "user_timeline", + "mentions", + "retweeted_by_me", + "retweeted_to_me", + "retweets_of_me"); + return $status_timeline; + } function load_identities() { $idcount = $this->get_config('id_count',1); @@ -1531,7 +1857,14 @@ } function display_twitter_client($tweeter_in_sidbar = false) { - $identities = $this->load_identities(); + $identities = $this->load_identities(); + $status_timeline = $this->load_timeline(); + + if ($_POST['tweeter_timeline']){ + $pstatus_timeline = $_POST['tweeter_timeline']; + }else{ + $pstatus_timeline = $this->get_config('tweeter_timeline'); + } // Always remember last set identity $val_identitiy = $_POST['tweeter_account']; @@ -1568,10 +1901,21 @@ if (LANG_CHARSET!='UTF-8' && function_exists("mb_convert_encoding")) { $update = mb_convert_encoding($update, 'UTF-8', LANG_CHARSET); } - $api = new Twitter($account_type=='identica'); - $twit = $api->update( $account_name, $account_pwd, $update ); - - if($twit === true){ + + if ($account_type == "identica"){ + $api = new Twitter($account_type=='identica'); + $twit = $api->update( $account_name, $account_pwd, $update ); + } else { + $connection = $this->twitteroa_connect(); + + /* statuses/update */ + $parameters = array('status' => $update); + $status = $connection->post('statuses/update', $parameters); + #print_r($status); + $twit = true; + } + + if ($twit === true){ $notice = PLUGIN_EVENT_TWITTER_TWEETER_STORED; } else{ @@ -1583,7 +1927,7 @@ } elseif (isset($_POST['tweeter_change_identity'])) { $val_tweet = $_POST['tweet']; - $val_short =$_POST['shorturl']; + $val_short = $_POST['shorturl']; } // Display the form @@ -1596,9 +1940,25 @@ // Display history if($this->get_config('tweeter_history', false) === true){ - $count = $this->get_config('tweeter_history_count', 10); - $api = new Twitter($account_type=='identica'); - $statuses = $api->timeline( $account_name, $account_pwd, $count ); + if ($account_type == "identica"){ + $count = $this->get_config('tweeter_history_count', 10); + $api = new Twitter($account_type=='identica'); + $statuses = $api->timeline( $account_name, $account_pwd, $count ); + } else { + require_once(dirname(__FILE__).'/twitteroauth/twitteroauth.php'); + if ($_POST['tweeter_timeline']){ + $get_connection = "statuses/".$_POST['tweeter_timeline']; + } else { + $get_connection = "statuses/".$this->get_config('tweeter_timeline'); + } + + $connection = $this->twitteroa_connect(); + $statuses = $connection->get($get_connection); + $http_code = $connection->http_code; + + $api = new Twitter($account_type=='identica'); + } + $buffer = ''; if (!is_array($statuses)) { if (empty($statuses)) { @@ -1618,6 +1978,15 @@ } } else { + if ($account_type == "twitter"){ + if ($_POST['tweeter_timeline']){ + $buffer .= "<h2>".PLUGIN_EVENT_TWITTER_TIMELINE.": ".$_POST['tweeter_timeline']."</h2>"; + } else { + $buffer .= "<h2>".PLUGIN_EVENT_TWITTER_TIMELINE.": ".$this->get_config('tweeter_timeline')."</h2>"; + } + + } + foreach($statuses as $status){ // Setup links inside of the text $status->text = $api->replace_links_in_status($status->text); @@ -1638,10 +2007,17 @@ } // Add each status formatted to a html buffer - $buffer .= ' <li class="tweeter_line"><img class="tweeter_profile_img" src="'.$status->user->profile_image_url.'" width="48" height="48" alt="" title="' . $status->user->screen_name . '"/></li> - <li><a class="tweeter_profile_link" href="' . $api->get_base_url() .$status->user->screen_name.'">'.$status->user->screen_name.'</a> '.$status->text.'</li> - <li class="tweeter_time_ago"><a href="' . $api->get_status_url($status->user->screen_name, $status->id) . '">'.Twitter::create_status_ago_string($status->created_at).'</a> from ' . $status->source . ' ' . $reply_link . ' ' . $direct_link . ' ' . $retweet_link . '</li> -'; + $buffer .= '<li class="tweeter_line"> + <div class="tweeter_profile_img"> + <img src="'.$status->user->profile_image_url.'" width="48" height="48" alt="" title="' . $status->user->screen_name . '"/> + </div + <div class="tweeter_profile_text"> + <a href="' . $api->get_base_url() .$status->user->screen_name.'">'.$status->user->screen_name.'</a> '.$status->text.' + </div> + <div class="tweeter_profile_links"> + <a href="' . $api->get_status_url($status->user->screen_name, $status->id) . '">'.Twitter::create_status_ago_string($status->created_at).'</a> from ' . $status->source . ' ' . $reply_link . ' ' . $direct_link . ' ' . $retweet_link . ' + </div> + </li>'; } } |