Merge branch '0.9.x' of git@gitorious.org:statusnet/mainline into 0.9.x
This commit is contained in:
commit
4e639b8769
72
README
72
README
@ -526,8 +526,6 @@ This will run eight (for now) queue handlers:
|
|||||||
of registered users.
|
of registered users.
|
||||||
* xmppconfirmhandler.php - sends confirmation messages to registered
|
* xmppconfirmhandler.php - sends confirmation messages to registered
|
||||||
users.
|
users.
|
||||||
* twitterqueuehandler.php - sends queued notices to Twitter for user
|
|
||||||
who have opted to set up Twitter bridging.
|
|
||||||
* facebookqueuehandler.php - sends queued notices to Facebook for users
|
* facebookqueuehandler.php - sends queued notices to Facebook for users
|
||||||
of the built-in Facebook application.
|
of the built-in Facebook application.
|
||||||
|
|
||||||
@ -547,54 +545,6 @@ our kind of hacky home-grown DB-based queue solution. See the "queues"
|
|||||||
config section below for how to configure to use STOMP. As of this
|
config section below for how to configure to use STOMP. As of this
|
||||||
writing, the software has been tested with ActiveMQ (
|
writing, the software has been tested with ActiveMQ (
|
||||||
|
|
||||||
Twitter Bridge
|
|
||||||
--------------
|
|
||||||
|
|
||||||
* OAuth
|
|
||||||
|
|
||||||
As of 0.8.1, OAuth is used to to access protected resources on Twitter
|
|
||||||
instead of HTTP Basic Auth. To use Twitter bridging you will need
|
|
||||||
to register your instance of StatusNet as an application on Twitter
|
|
||||||
(http://twitter.com/apps), and update the following variables in your
|
|
||||||
config.php with the consumer key and secret Twitter generates for you:
|
|
||||||
|
|
||||||
$config['twitter']['consumer_key'] = 'YOURKEY';
|
|
||||||
$config['twitter']['consumer_secret'] = 'YOURSECRET';
|
|
||||||
|
|
||||||
When registering your application with Twitter set the type to "Browser"
|
|
||||||
and your Callback URL to:
|
|
||||||
|
|
||||||
http://example.org/mublog/twitter/authorization
|
|
||||||
|
|
||||||
The default access type should be, "Read & Write".
|
|
||||||
|
|
||||||
* Importing statuses from Twitter
|
|
||||||
|
|
||||||
To allow your users to import their friends' Twitter statuses, you will
|
|
||||||
need to enable the bidirectional Twitter bridge in config.php:
|
|
||||||
|
|
||||||
$config['twitterbridge']['enabled'] = true;
|
|
||||||
|
|
||||||
and run the TwitterStatusFetcher daemon (scripts/twitterstatusfetcher.php).
|
|
||||||
Additionally, you will want to set the integration source variable,
|
|
||||||
which will keep notices posted to Twitter via StatusNet from looping
|
|
||||||
back. The integration source should be set to the name of your
|
|
||||||
application, exactly as you specified it on the settings page for your
|
|
||||||
StatusNet application on Twitter, e.g.:
|
|
||||||
|
|
||||||
$config['integration']['source'] = 'YourApp';
|
|
||||||
|
|
||||||
* Twitter Friends Syncing
|
|
||||||
|
|
||||||
Users may set a flag in their settings ("Subscribe to my Twitter friends
|
|
||||||
here" under the Twitter tab) to have StatusNet attempt to locate and
|
|
||||||
subscribe to "friends" (people they "follow") on Twitter who also have
|
|
||||||
accounts on your StatusNet system, and who have previously set up a link
|
|
||||||
for automatically posting notices to Twitter.
|
|
||||||
|
|
||||||
As of 0.8.0, this is no longer accomplished via a cron job. Instead you
|
|
||||||
must run the SyncTwitterFriends daemon (scripts/synctwitterfreinds.php).
|
|
||||||
|
|
||||||
Built-in Facebook Application
|
Built-in Facebook Application
|
||||||
-----------------------------
|
-----------------------------
|
||||||
|
|
||||||
@ -1251,24 +1201,11 @@ For SMS integration.
|
|||||||
enabled: Whether to enable SMS integration. Defaults to true. Queues
|
enabled: Whether to enable SMS integration. Defaults to true. Queues
|
||||||
should also be enabled.
|
should also be enabled.
|
||||||
|
|
||||||
twitter
|
|
||||||
-------
|
|
||||||
|
|
||||||
For Twitter integration
|
|
||||||
|
|
||||||
enabled: Whether to enable Twitter integration. Defaults to true.
|
|
||||||
Queues should also be enabled.
|
|
||||||
|
|
||||||
integration
|
integration
|
||||||
-----------
|
-----------
|
||||||
|
|
||||||
A catch-all for integration with other systems.
|
A catch-all for integration with other systems.
|
||||||
|
|
||||||
source: The name to use for the source of posts to Twitter. Defaults
|
|
||||||
to 'statusnet', but if you request your own source name from
|
|
||||||
Twitter <http://twitter.com/help/request_source>, you can use
|
|
||||||
that here instead. Status updates on Twitter will then have
|
|
||||||
links to your site.
|
|
||||||
taguri: base for tag:// URIs. Defaults to site-server + ',2009'.
|
taguri: base for tag:// URIs. Defaults to site-server + ',2009'.
|
||||||
|
|
||||||
inboxes
|
inboxes
|
||||||
@ -1446,15 +1383,6 @@ dir: directory to write backgrounds too. Default is '/background/'
|
|||||||
path: path to backgrounds. Default is sub-path of install path; note
|
path: path to backgrounds. Default is sub-path of install path; note
|
||||||
that you may need to change this if you change site-path too.
|
that you may need to change this if you change site-path too.
|
||||||
|
|
||||||
twitterbridge
|
|
||||||
-------------
|
|
||||||
|
|
||||||
A bi-direction bridge to Twitter (http://twitter.com/).
|
|
||||||
|
|
||||||
enabled: default false. If true, will show user's Twitter friends'
|
|
||||||
notices in their inbox and faves pages, only to the user. You
|
|
||||||
must also run the twitterstatusfetcher.php script.
|
|
||||||
|
|
||||||
ping
|
ping
|
||||||
----
|
----
|
||||||
|
|
||||||
|
@ -81,7 +81,7 @@ class Avatar extends Memcached_DataObject
|
|||||||
if (empty($server)) {
|
if (empty($server)) {
|
||||||
$server = common_config('site', 'server');
|
$server = common_config('site', 'server');
|
||||||
}
|
}
|
||||||
|
common_debug('path = ' . $path);
|
||||||
// XXX: protocol
|
// XXX: protocol
|
||||||
|
|
||||||
return 'http://'.$server.$path.$filename;
|
return 'http://'.$server.$path.$filename;
|
||||||
|
@ -223,7 +223,6 @@ require_once INSTALLDIR.'/lib/theme.php';
|
|||||||
require_once INSTALLDIR.'/lib/mail.php';
|
require_once INSTALLDIR.'/lib/mail.php';
|
||||||
require_once INSTALLDIR.'/lib/subs.php';
|
require_once INSTALLDIR.'/lib/subs.php';
|
||||||
require_once INSTALLDIR.'/lib/Shorturl_api.php';
|
require_once INSTALLDIR.'/lib/Shorturl_api.php';
|
||||||
require_once INSTALLDIR.'/lib/twitter.php';
|
|
||||||
|
|
||||||
require_once INSTALLDIR.'/lib/clientexception.php';
|
require_once INSTALLDIR.'/lib/clientexception.php';
|
||||||
require_once INSTALLDIR.'/lib/serverexception.php';
|
require_once INSTALLDIR.'/lib/serverexception.php';
|
||||||
|
@ -98,34 +98,37 @@ class ConnectSettingsNav extends Widget
|
|||||||
|
|
||||||
function show()
|
function show()
|
||||||
{
|
{
|
||||||
# action => array('prompt', 'title')
|
|
||||||
$menu = array();
|
|
||||||
if (common_config('xmpp', 'enabled')) {
|
|
||||||
$menu['imsettings'] =
|
|
||||||
array(_('IM'),
|
|
||||||
_('Updates by instant messenger (IM)'));
|
|
||||||
}
|
|
||||||
if (common_config('sms', 'enabled')) {
|
|
||||||
$menu['smssettings'] =
|
|
||||||
array(_('SMS'),
|
|
||||||
_('Updates by SMS'));
|
|
||||||
}
|
|
||||||
if (common_config('twitter', 'enabled')) {
|
|
||||||
$menu['twittersettings'] =
|
|
||||||
array(_('Twitter'),
|
|
||||||
_('Twitter integration options'));
|
|
||||||
}
|
|
||||||
|
|
||||||
$action_name = $this->action->trimmed('action');
|
$action_name = $this->action->trimmed('action');
|
||||||
$this->action->elementStart('ul', array('class' => 'nav'));
|
$this->action->elementStart('ul', array('class' => 'nav'));
|
||||||
|
|
||||||
foreach ($menu as $menuaction => $menudesc) {
|
if (Event::handle('StartConnectSettingsNav', array(&$this->action))) {
|
||||||
$this->action->menuItem(common_local_url($menuaction),
|
|
||||||
$menudesc[0],
|
# action => array('prompt', 'title')
|
||||||
$menudesc[1],
|
$menu = array();
|
||||||
$action_name === $menuaction);
|
if (common_config('xmpp', 'enabled')) {
|
||||||
|
$menu['imsettings'] =
|
||||||
|
array(_('IM'),
|
||||||
|
_('Updates by instant messenger (IM)'));
|
||||||
|
}
|
||||||
|
if (common_config('sms', 'enabled')) {
|
||||||
|
$menu['smssettings'] =
|
||||||
|
array(_('SMS'),
|
||||||
|
_('Updates by SMS'));
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($menu as $menuaction => $menudesc) {
|
||||||
|
$this->action->menuItem(common_local_url($menuaction),
|
||||||
|
$menudesc[0],
|
||||||
|
$menudesc[1],
|
||||||
|
$action_name === $menuaction);
|
||||||
|
}
|
||||||
|
|
||||||
|
Event::handle('EndConnectSettingsNav', array(&$this->action));
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->action->elementEnd('ul');
|
$this->action->elementEnd('ul');
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -140,7 +140,7 @@ $default =
|
|||||||
array('enabled' => true),
|
array('enabled' => true),
|
||||||
'sms' =>
|
'sms' =>
|
||||||
array('enabled' => true),
|
array('enabled' => true),
|
||||||
'twitterbridge' =>
|
'twitterimport' =>
|
||||||
array('enabled' => false),
|
array('enabled' => false),
|
||||||
'integration' =>
|
'integration' =>
|
||||||
array('source' => 'StatusNet', # source attribute for Twitter
|
array('source' => 'StatusNet', # source attribute for Twitter
|
||||||
|
@ -86,10 +86,6 @@ class Router
|
|||||||
|
|
||||||
$m->connect('doc/:title', array('action' => 'doc'));
|
$m->connect('doc/:title', array('action' => 'doc'));
|
||||||
|
|
||||||
// Twitter
|
|
||||||
|
|
||||||
$m->connect('twitter/authorization', array('action' => 'twitterauthorization'));
|
|
||||||
|
|
||||||
// facebook
|
// facebook
|
||||||
|
|
||||||
$m->connect('facebook', array('action' => 'facebookhome'));
|
$m->connect('facebook', array('action' => 'facebookhome'));
|
||||||
@ -136,7 +132,7 @@ class Router
|
|||||||
// settings
|
// settings
|
||||||
|
|
||||||
foreach (array('profile', 'avatar', 'password', 'im',
|
foreach (array('profile', 'avatar', 'password', 'im',
|
||||||
'email', 'sms', 'twitter', 'userdesign', 'other') as $s) {
|
'email', 'sms', 'userdesign', 'other') as $s) {
|
||||||
$m->connect('settings/'.$s, array('action' => $s.'settings'));
|
$m->connect('settings/'.$s, array('action' => $s.'settings'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -48,11 +48,6 @@ class UnQueueManager
|
|||||||
jabber_public_notice($notice);
|
jabber_public_notice($notice);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'twitter':
|
|
||||||
if ($this->_isLocal($notice)) {
|
|
||||||
broadcast_twitter($notice);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 'facebook':
|
case 'facebook':
|
||||||
if ($this->_isLocal($notice)) {
|
if ($this->_isLocal($notice)) {
|
||||||
require_once INSTALLDIR . '/lib/facebookutil.php';
|
require_once INSTALLDIR . '/lib/facebookutil.php';
|
||||||
|
@ -115,26 +115,48 @@ class FBConnectPlugin extends Plugin
|
|||||||
// XXX: Facebook says we don't need this FB_RequireFeatures(),
|
// XXX: Facebook says we don't need this FB_RequireFeatures(),
|
||||||
// but we actually do, for IE and Safari. Gar.
|
// but we actually do, for IE and Safari. Gar.
|
||||||
|
|
||||||
$html = sprintf('<script type="text/javascript">
|
$js = '<script type="text/javascript">';
|
||||||
$(document).ready(function () {
|
$js .= ' $(document).ready(function () {';
|
||||||
FB_RequireFeatures(
|
$js .= ' FB_RequireFeatures(';
|
||||||
["XFBML"],
|
$js .= ' ["XFBML"], function() {';
|
||||||
function() {
|
$js .= ' FB.init("%1$s", "../xd_receiver.html");';
|
||||||
FB.init("%s", "../xd_receiver.html");
|
$js .= ' }';
|
||||||
}
|
$js .= ' );';
|
||||||
); });
|
$js .= ' });';
|
||||||
|
|
||||||
function goto_login() {
|
$js .= ' function goto_login() {';
|
||||||
window.location = "%s";
|
$js .= ' window.location = "%2$s";';
|
||||||
}
|
$js .= ' }';
|
||||||
|
|
||||||
function goto_logout() {
|
// The below function alters the logout link so that it logs the user out
|
||||||
window.location = "%s";
|
// of Facebook Connect as well as the site. However, for some pages
|
||||||
}
|
// (FB Connect Settings) we need to output the FB Connect scripts (to
|
||||||
</script>', $apikey,
|
// show an existing FB connection even if the user isn't authenticated
|
||||||
$login_url, $logout_url);
|
// with Facebook connect) but NOT alter the logout link. And the only
|
||||||
|
// way to reliably do that is with the FB Connect .js libs. Crazy.
|
||||||
|
|
||||||
$action->raw($html);
|
$js .= ' FB.ensureInit(function() {';
|
||||||
|
$js .= ' FB.Connect.ifUserConnected(';
|
||||||
|
$js .= ' function() { ';
|
||||||
|
$js .= ' $(\'#nav_logout a\').attr(\'href\', \'#\');';
|
||||||
|
$js .= ' $(\'#nav_logout a\').click(function() {';
|
||||||
|
$js .= ' FB.Connect.logoutAndRedirect(\'%3$s\');';
|
||||||
|
$js .= ' return false;';
|
||||||
|
$js .= ' })';
|
||||||
|
$js .= ' },';
|
||||||
|
$js .= ' function() {';
|
||||||
|
$js .= ' return false;';
|
||||||
|
$js .= ' }';
|
||||||
|
$js .= ' );';
|
||||||
|
$js .= ' });';
|
||||||
|
$js .= '</script>';
|
||||||
|
|
||||||
|
$js = sprintf($js, $apikey, $login_url, $logout_url);
|
||||||
|
|
||||||
|
// Compress the bugger down a bit
|
||||||
|
$js = str_replace(' ', '', $js);
|
||||||
|
|
||||||
|
$action->raw(" $js"); // leading two spaces to make it line up
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -150,7 +172,6 @@ class FBConnectPlugin extends Plugin
|
|||||||
|
|
||||||
function onEndShowStatusNetStyles($action)
|
function onEndShowStatusNetStyles($action)
|
||||||
{
|
{
|
||||||
|
|
||||||
if ($this->reqFbScripts($action)) {
|
if ($this->reqFbScripts($action)) {
|
||||||
$action->cssLink('plugins/FBConnect/FBConnectPlugin.css');
|
$action->cssLink('plugins/FBConnect/FBConnectPlugin.css');
|
||||||
}
|
}
|
||||||
@ -269,66 +290,9 @@ class FBConnectPlugin extends Plugin
|
|||||||
$action->elementEnd('li');
|
$action->elementEnd('li');
|
||||||
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$action->menuItem(common_local_url('all', array('nickname' => $user->nickname)),
|
return true;
|
||||||
_('Home'), _('Personal profile and friends timeline'), false, 'nav_home');
|
|
||||||
$action->menuItem(common_local_url('profilesettings'),
|
|
||||||
_('Account'), _('Change your email, avatar, password, profile'), false, 'nav_account');
|
|
||||||
$action->menuItem(common_local_url($connect),
|
|
||||||
_('Connect'), _('Connect to services'), false, 'nav_connect');
|
|
||||||
if (common_config('invite', 'enabled')) {
|
|
||||||
$action->menuItem(common_local_url('invite'),
|
|
||||||
_('Invite'),
|
|
||||||
sprintf(_('Invite friends and colleagues to join you on %s'),
|
|
||||||
common_config('site', 'name')),
|
|
||||||
false, 'nav_invitecontact');
|
|
||||||
}
|
|
||||||
|
|
||||||
// Need to override the Logout link to make it do FB stuff
|
|
||||||
if (!empty($fbuid)) {
|
|
||||||
|
|
||||||
$logout_url = common_local_url('logout');
|
|
||||||
$title = _('Logout from the site');
|
|
||||||
$text = _('Logout');
|
|
||||||
|
|
||||||
$html = sprintf('<li id="nav_logout"><a href="#" title="%s" ' .
|
|
||||||
'onclick="FB.Connect.logoutAndRedirect(\'%s\');">%s</a></li>',
|
|
||||||
$title, $logout_url, $text);
|
|
||||||
|
|
||||||
$action->raw($html);
|
|
||||||
|
|
||||||
} else {
|
|
||||||
$action->menuItem(common_local_url('logout'),
|
|
||||||
_('Logout'), _('Logout from the site'), false, 'nav_logout');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if (!common_config('site', 'openidonly')) {
|
|
||||||
if (!common_config('site', 'closed')) {
|
|
||||||
$action->menuItem(common_local_url('register'),
|
|
||||||
_('Register'), _('Create an account'), false, 'nav_register');
|
|
||||||
}
|
|
||||||
$action->menuItem(common_local_url('login'),
|
|
||||||
_('Login'), _('Login to the site'), false, 'nav_login');
|
|
||||||
} else {
|
|
||||||
$this->menuItem(common_local_url('openidlogin'),
|
|
||||||
_('OpenID'), _('Login with OpenID'), false, 'nav_openid');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$action->menuItem(common_local_url('doc', array('title' => 'help')),
|
|
||||||
_('Help'), _('Help me!'), false, 'nav_help');
|
|
||||||
if ($user || !common_config('site', 'private')) {
|
|
||||||
$action->menuItem(common_local_url('peoplesearch'),
|
|
||||||
_('Search'), _('Search for people or text'), false, 'nav_search');
|
|
||||||
}
|
|
||||||
|
|
||||||
// We are replacing the primary nav entirely; give other
|
|
||||||
// plugins a chance to handle it here.
|
|
||||||
|
|
||||||
Event::handle('EndPrimaryNav', array($action));
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function onStartShowLocalNavBlock($action)
|
function onStartShowLocalNavBlock($action)
|
||||||
@ -357,7 +321,7 @@ class FBConnectPlugin extends Plugin
|
|||||||
}
|
}
|
||||||
|
|
||||||
function onStartLogout($action)
|
function onStartLogout($action)
|
||||||
{
|
{
|
||||||
$action->logout();
|
$action->logout();
|
||||||
$fbuid = $this->loggedIn();
|
$fbuid = $this->loggedIn();
|
||||||
|
|
||||||
|
86
plugins/TwitterBridge/README
Normal file
86
plugins/TwitterBridge/README
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
This Twitter "bridge" plugin allows you to integrate your StatusNet
|
||||||
|
instance with Twitter. Installing it will allow your users to:
|
||||||
|
|
||||||
|
- automatically post notices to thier Twitter accounts
|
||||||
|
- automatically subscribe to other Twitter users who are also using
|
||||||
|
your StatusNet install, if possible (requires running a daemon)
|
||||||
|
- import their Twitter friends' tweets (requires running a daemon)
|
||||||
|
|
||||||
|
Installation
|
||||||
|
------------
|
||||||
|
|
||||||
|
To enable the plugin, add the following to your config.php:
|
||||||
|
|
||||||
|
require_once(INSTALLDIR . '/plugins/TwitterBridge/TwitterBridgePlugin.php');
|
||||||
|
$tb = new TwitterBridgePlugin();
|
||||||
|
|
||||||
|
OAuth is used to to access protected resources on Twitter (as opposed to
|
||||||
|
HTTP Basic Auth)*. To use Twitter bridging you will need to register
|
||||||
|
your instance of StatusNet as an application on Twitter
|
||||||
|
(http://twitter.com/apps), and update the following variables in your
|
||||||
|
config.php with the consumer key and secret Twitter generates for you:
|
||||||
|
|
||||||
|
$config['twitter']['consumer_key'] = 'YOURKEY';
|
||||||
|
$config['twitter']['consumer_secret'] = 'YOURSECRET';
|
||||||
|
|
||||||
|
When registering your application with Twitter set the type to "Browser"
|
||||||
|
and your Callback URL to:
|
||||||
|
|
||||||
|
http://example.org/mublog/twitter/authorization
|
||||||
|
|
||||||
|
The default access type should be, "Read & Write".
|
||||||
|
|
||||||
|
* Note: The plugin will still push notices to Twitter for users who
|
||||||
|
have previously setup the Twitter bridge using their Twitter name and
|
||||||
|
password under an older versions of StatusNet, but all new Twitter
|
||||||
|
bridge connections will use OAuth.
|
||||||
|
|
||||||
|
Deamons
|
||||||
|
-------
|
||||||
|
|
||||||
|
For friend syncing and importing notices running two additional daemon
|
||||||
|
scripts is necessary (synctwitterfriends.php and
|
||||||
|
twitterstatusfetcher.php).
|
||||||
|
|
||||||
|
In the daemons subidrectory of the plugin are three scripts:
|
||||||
|
|
||||||
|
* Twitter Friends Syncing (daemons/synctwitterfriends.php)
|
||||||
|
|
||||||
|
Users may set a flag in their settings ("Subscribe to my Twitter friends
|
||||||
|
here" under the Twitter tab) to have StatusNet attempt to locate and
|
||||||
|
subscribe to "friends" (people they "follow") on Twitter who also have
|
||||||
|
accounts on your StatusNet system, and who have previously set up a link
|
||||||
|
for automatically posting notices to Twitter.
|
||||||
|
|
||||||
|
The plugin will try to start this daemon when you run
|
||||||
|
scripts/startdaemons.sh.
|
||||||
|
|
||||||
|
* Importing statuses from Twitter (daemons/twitterstatusfetcher.php)
|
||||||
|
|
||||||
|
To allow your users to import their friends' Twitter statuses, you will
|
||||||
|
need to enable the bidirectional Twitter bridge in your config.php:
|
||||||
|
|
||||||
|
$config['twitterimport']['enabled'] = true;
|
||||||
|
|
||||||
|
The plugin will then start the TwitterStatusFetcher daemon along with the
|
||||||
|
other daemons when you run scripts/startdaemons.sh.
|
||||||
|
|
||||||
|
Additionally, you will want to set the integration source variable,
|
||||||
|
which will keep notices posted to Twitter via StatusNet from looping
|
||||||
|
back. The integration source should be set to the name of your
|
||||||
|
application, exactly as you specified it on the settings page for your
|
||||||
|
StatusNet application on Twitter, e.g.:
|
||||||
|
|
||||||
|
$config['integration']['source'] = 'YourApp';
|
||||||
|
|
||||||
|
* TwitterQueueHandler (daemons/twitterqueuehandler.php)
|
||||||
|
|
||||||
|
This script sends queued notices to Twitter for user who have opted to
|
||||||
|
set up Twitter bridging.
|
||||||
|
|
||||||
|
It's not strictly necessary to run this queue handler, and sites that
|
||||||
|
haven't enabled queuing are still able to push notices to Twitter, but
|
||||||
|
for larger sites and sites that wish to improve performance, this
|
||||||
|
script allows notices to be sent "offline" via a separate process.
|
||||||
|
|
||||||
|
The plugin will start this script when you run scripts/startdaemons.sh.
|
187
plugins/TwitterBridge/TwitterBridgePlugin.php
Normal file
187
plugins/TwitterBridge/TwitterBridgePlugin.php
Normal file
@ -0,0 +1,187 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* StatusNet, the distributed open-source microblogging tool
|
||||||
|
*
|
||||||
|
* PHP version 5
|
||||||
|
*
|
||||||
|
* LICENCE: This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* @category Plugin
|
||||||
|
* @package StatusNet
|
||||||
|
* @author Zach Copley <zach@status.net>
|
||||||
|
* @copyright 2009 Control Yourself, Inc.
|
||||||
|
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
|
||||||
|
* @link http://laconi.ca/
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (!defined('STATUSNET')) {
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
require_once INSTALLDIR . '/plugins/TwitterBridge/twitter.php';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Plugin for sending and importing Twitter statuses
|
||||||
|
*
|
||||||
|
* This class allows users to link their Twitter accounts
|
||||||
|
*
|
||||||
|
* @category Plugin
|
||||||
|
* @package StatusNet
|
||||||
|
* @author Zach Copley <zach@status.net>
|
||||||
|
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
|
||||||
|
* @link http://laconi.ca/
|
||||||
|
* @link http://twitter.com/
|
||||||
|
*/
|
||||||
|
|
||||||
|
class TwitterBridgePlugin extends Plugin
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Initializer for the plugin.
|
||||||
|
*/
|
||||||
|
|
||||||
|
function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add Twitter-related paths to the router table
|
||||||
|
*
|
||||||
|
* Hook for RouterInitialized event.
|
||||||
|
*
|
||||||
|
* @param Net_URL_Mapper &$m path-to-action mapper
|
||||||
|
*
|
||||||
|
* @return boolean hook return
|
||||||
|
*/
|
||||||
|
|
||||||
|
function onRouterInitialized(&$m)
|
||||||
|
{
|
||||||
|
$m->connect('twitter/authorization',
|
||||||
|
array('action' => 'twitterauthorization'));
|
||||||
|
$m->connect('settings/twitter', array('action' => 'twittersettings'));
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add the Twitter Settings page to the Connect Settings menu
|
||||||
|
*
|
||||||
|
* @param Action &$action The calling page
|
||||||
|
*
|
||||||
|
* @return boolean hook return
|
||||||
|
*/
|
||||||
|
function onEndConnectSettingsNav(&$action)
|
||||||
|
{
|
||||||
|
$action_name = $action->trimmed('action');
|
||||||
|
|
||||||
|
$action->menuItem(common_local_url('twittersettings'),
|
||||||
|
_('Twitter'),
|
||||||
|
_('Twitter integration options'),
|
||||||
|
$action_name === 'twittersettings');
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Automatically load the actions and libraries used by the Twitter bridge
|
||||||
|
*
|
||||||
|
* @param Class $cls the class
|
||||||
|
*
|
||||||
|
* @return boolean hook return
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
function onAutoload($cls)
|
||||||
|
{
|
||||||
|
switch ($cls) {
|
||||||
|
case 'TwittersettingsAction':
|
||||||
|
case 'TwitterauthorizationAction':
|
||||||
|
include_once INSTALLDIR . '/plugins/TwitterBridge/' .
|
||||||
|
strtolower(mb_substr($cls, 0, -6)) . '.php';
|
||||||
|
return false;
|
||||||
|
case 'TwitterOAuthClient':
|
||||||
|
include_once INSTALLDIR . '/plugins/TwitterBridge/twitteroauthclient.php';
|
||||||
|
return false;
|
||||||
|
default:
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a Twitter queue item for each notice
|
||||||
|
*
|
||||||
|
* @param Notice $notice the notice
|
||||||
|
* @param array &$transports the list of transports (queues)
|
||||||
|
*
|
||||||
|
* @return boolean hook return
|
||||||
|
*/
|
||||||
|
function onStartEnqueueNotice($notice, &$transports)
|
||||||
|
{
|
||||||
|
array_push($transports, 'twitter');
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* broadcast the message when not using queuehandler
|
||||||
|
*
|
||||||
|
* @param Notice &$notice the notice
|
||||||
|
* @param array $queue destination queue
|
||||||
|
*
|
||||||
|
* @return boolean hook return
|
||||||
|
*/
|
||||||
|
function onUnqueueHandleNotice(&$notice, $queue)
|
||||||
|
{
|
||||||
|
if (($queue == 'twitter') && ($this->_isLocal($notice))) {
|
||||||
|
broadcast_twitter($notice);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine whether the notice was locally created
|
||||||
|
*
|
||||||
|
* @param Notice $notice
|
||||||
|
*
|
||||||
|
* @return boolean locality
|
||||||
|
*/
|
||||||
|
function _isLocal($notice)
|
||||||
|
{
|
||||||
|
return ($notice->is_local == Notice::LOCAL_PUBLIC ||
|
||||||
|
$notice->is_local == Notice::LOCAL_NONPUBLIC);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add Twitter bridge daemons to the list of daemons to start
|
||||||
|
*
|
||||||
|
* @param array $daemons the list fo daemons to run
|
||||||
|
*
|
||||||
|
* @return boolean hook return
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
function onGetValidDaemons($daemons)
|
||||||
|
{
|
||||||
|
array_push($daemons, INSTALLDIR .
|
||||||
|
'/plugins/TwitterBridge/daemons/twitterqueuehandler.php');
|
||||||
|
array_push($daemons, INSTALLDIR .
|
||||||
|
'/plugins/TwitterBridge/daemons/synctwitterfriends.php');
|
||||||
|
|
||||||
|
if (common_config('twitterimport', 'enabled')) {
|
||||||
|
array_push($daemons, INSTALLDIR
|
||||||
|
. '/plugins/TwitterBridge/daemons/twitterstatusfetcher.php');
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -18,7 +18,7 @@
|
|||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
define('INSTALLDIR', realpath(dirname(__FILE__) . '/..'));
|
define('INSTALLDIR', realpath(dirname(__FILE__) . '/../../..'));
|
||||||
|
|
||||||
$shortoptions = 'di::';
|
$shortoptions = 'di::';
|
||||||
$longoptions = array('id::', 'debug');
|
$longoptions = array('id::', 'debug');
|
||||||
@ -32,6 +32,9 @@ END_OF_TRIM_HELP;
|
|||||||
|
|
||||||
require_once INSTALLDIR . '/scripts/commandline.inc';
|
require_once INSTALLDIR . '/scripts/commandline.inc';
|
||||||
require_once INSTALLDIR . '/lib/parallelizingdaemon.php';
|
require_once INSTALLDIR . '/lib/parallelizingdaemon.php';
|
||||||
|
require_once INSTALLDIR . '/plugins/TwitterBridge/twitter.php';
|
||||||
|
require_once INSTALLDIR . '/plugins/TwitterBridge/twitterbasicauthclient.php';
|
||||||
|
require_once INSTALLDIR . '/plugins/TwitterBridge/twitteroauthclient.php';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Daemon to sync local friends with Twitter friends
|
* Daemon to sync local friends with Twitter friends
|
||||||
@ -44,14 +47,6 @@ require_once INSTALLDIR . '/lib/parallelizingdaemon.php';
|
|||||||
* @link http://status.net/
|
* @link http://status.net/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
$helptext = <<<END_OF_TWITTER_HELP
|
|
||||||
Batch script for synching local friends with Twitter friends.
|
|
||||||
|
|
||||||
END_OF_TWITTER_HELP;
|
|
||||||
|
|
||||||
require_once INSTALLDIR . '/scripts/commandline.inc';
|
|
||||||
require_once INSTALLDIR . '/lib/parallelizingdaemon.php';
|
|
||||||
|
|
||||||
class SyncTwitterFriendsDaemon extends ParallelizingDaemon
|
class SyncTwitterFriendsDaemon extends ParallelizingDaemon
|
||||||
{
|
{
|
||||||
/**
|
/**
|
@ -18,7 +18,7 @@
|
|||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
define('INSTALLDIR', realpath(dirname(__FILE__) . '/..'));
|
define('INSTALLDIR', realpath(dirname(__FILE__) . '/../../..'));
|
||||||
|
|
||||||
$shortoptions = 'i::';
|
$shortoptions = 'i::';
|
||||||
$longoptions = array('id::');
|
$longoptions = array('id::');
|
||||||
@ -30,10 +30,9 @@ Daemon script for pushing new notices to Twitter.
|
|||||||
|
|
||||||
END_OF_ENJIT_HELP;
|
END_OF_ENJIT_HELP;
|
||||||
|
|
||||||
require_once INSTALLDIR.'/scripts/commandline.inc';
|
require_once INSTALLDIR . '/scripts/commandline.inc';
|
||||||
|
|
||||||
require_once INSTALLDIR . '/lib/twitter.php';
|
|
||||||
require_once INSTALLDIR . '/lib/queuehandler.php';
|
require_once INSTALLDIR . '/lib/queuehandler.php';
|
||||||
|
require_once INSTALLDIR . '/plugins/TwitterBridge/twitter.php';
|
||||||
|
|
||||||
class TwitterQueueHandler extends QueueHandler
|
class TwitterQueueHandler extends QueueHandler
|
||||||
{
|
{
|
@ -18,7 +18,7 @@
|
|||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
define('INSTALLDIR', realpath(dirname(__FILE__) . '/..'));
|
define('INSTALLDIR', realpath(dirname(__FILE__) . '/../../..'));
|
||||||
|
|
||||||
// Tune number of processes and how often to poll Twitter
|
// Tune number of processes and how often to poll Twitter
|
||||||
// XXX: Should these things be in config.php?
|
// XXX: Should these things be in config.php?
|
||||||
@ -36,8 +36,12 @@ Batch script for retrieving Twitter messages from foreign service.
|
|||||||
|
|
||||||
END_OF_TRIM_HELP;
|
END_OF_TRIM_HELP;
|
||||||
|
|
||||||
require_once INSTALLDIR .'/scripts/commandline.inc';
|
require_once INSTALLDIR . '/scripts/commandline.inc';
|
||||||
|
require_once INSTALLDIR . '/lib/common.php';
|
||||||
require_once INSTALLDIR . '/lib/daemon.php';
|
require_once INSTALLDIR . '/lib/daemon.php';
|
||||||
|
require_once INSTALLDIR . '/plugins/TwitterBridge/twitter.php';
|
||||||
|
require_once INSTALLDIR . '/plugins/TwitterBridge/twitterbasicauthclient.php';
|
||||||
|
require_once INSTALLDIR . '/plugins/TwitterBridge/twitteroauthclient.php';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fetcher for statuses from Twitter
|
* Fetcher for statuses from Twitter
|
||||||
@ -496,8 +500,6 @@ class TwitterStatusFetcher extends ParallelizingDaemon
|
|||||||
$avatar->filename = $filename;
|
$avatar->filename = $filename;
|
||||||
$avatar->url = Avatar::url($filename);
|
$avatar->url = Avatar::url($filename);
|
||||||
|
|
||||||
common_debug($this->name() . " - New filename: $avatar->url");
|
|
||||||
|
|
||||||
$avatar->created = common_sql_now();
|
$avatar->created = common_sql_now();
|
||||||
|
|
||||||
$id = $avatar->insert();
|
$id = $avatar->insert();
|
||||||
@ -515,9 +517,7 @@ class TwitterStatusFetcher extends ParallelizingDaemon
|
|||||||
|
|
||||||
function fetchAvatar($url, $filename)
|
function fetchAvatar($url, $filename)
|
||||||
{
|
{
|
||||||
$avatar_dir = INSTALLDIR . '/avatar/';
|
$avatarfile = Avatar::path($filename);
|
||||||
|
|
||||||
$avatarfile = $avatar_dir . $filename;
|
|
||||||
|
|
||||||
$out = fopen($avatarfile, 'wb');
|
$out = fopen($avatarfile, 'wb');
|
||||||
if (!$out) {
|
if (!$out) {
|
@ -23,6 +23,9 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
|
|||||||
|
|
||||||
define('TWITTER_SERVICE', 1); // Twitter is foreign_service ID 1
|
define('TWITTER_SERVICE', 1); // Twitter is foreign_service ID 1
|
||||||
|
|
||||||
|
require_once INSTALLDIR . '/plugins/TwitterBridge/twitterbasicauthclient.php';
|
||||||
|
require_once INSTALLDIR . '/plugins/TwitterBridge/twitteroauthclient.php';
|
||||||
|
|
||||||
function updateTwitter_user($twitter_id, $screen_name)
|
function updateTwitter_user($twitter_id, $screen_name)
|
||||||
{
|
{
|
||||||
$uri = 'http://twitter.com/' . $screen_name;
|
$uri = 'http://twitter.com/' . $screen_name;
|
@ -31,9 +31,32 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
require_once INSTALLDIR . '/plugins/TwitterBridge/twitter.php';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class for doing OAuth authentication against Twitter
|
||||||
|
*
|
||||||
|
* Peforms the OAuth "dance" between StatusNet and Twitter -- requests a token,
|
||||||
|
* authorizes it, and exchanges it for an access token. It also creates a link
|
||||||
|
* (Foreign_link) between the StatusNet user and Twitter user and stores the
|
||||||
|
* access token and secret in the link.
|
||||||
|
*
|
||||||
|
* @category Twitter
|
||||||
|
* @package StatusNet
|
||||||
|
* @author Zach Copley <zach@status.net>
|
||||||
|
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
|
||||||
|
* @link http://laconi.ca/
|
||||||
|
*
|
||||||
|
*/
|
||||||
class TwitterauthorizationAction extends Action
|
class TwitterauthorizationAction extends Action
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* Initialize class members. Looks for 'oauth_token' parameter.
|
||||||
|
*
|
||||||
|
* @param array $args misc. arguments
|
||||||
|
*
|
||||||
|
* @return boolean true
|
||||||
|
*/
|
||||||
function prepare($args)
|
function prepare($args)
|
||||||
{
|
{
|
||||||
parent::prepare($args);
|
parent::prepare($args);
|
@ -31,8 +31,8 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
require_once INSTALLDIR.'/lib/connectsettingsaction.php';
|
require_once INSTALLDIR . '/lib/connectsettingsaction.php';
|
||||||
require_once INSTALLDIR.'/lib/twitter.php';
|
require_once INSTALLDIR . '/plugins/TwitterBridge/twitter.php';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Settings for Twitter integration
|
* Settings for Twitter integration
|
||||||
@ -82,11 +82,6 @@ class TwittersettingsAction extends ConnectSettingsAction
|
|||||||
|
|
||||||
function showContent()
|
function showContent()
|
||||||
{
|
{
|
||||||
if (!common_config('twitter', 'enabled')) {
|
|
||||||
$this->element('div', array('class' => 'error'),
|
|
||||||
_('Twitter is not available.'));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$user = common_current_user();
|
$user = common_current_user();
|
||||||
|
|
||||||
@ -157,7 +152,7 @@ class TwittersettingsAction extends ConnectSettingsAction
|
|||||||
false);
|
false);
|
||||||
$this->elementEnd('li');
|
$this->elementEnd('li');
|
||||||
|
|
||||||
if (common_config('twitterbridge','enabled')) {
|
if (common_config('twitterimport','enabled')) {
|
||||||
$this->elementStart('li');
|
$this->elementStart('li');
|
||||||
$this->checkbox('noticerecv',
|
$this->checkbox('noticerecv',
|
||||||
_('Import my Friends Timeline.'),
|
_('Import my Friends Timeline.'),
|
@ -49,15 +49,6 @@ if(common_config('xmpp','enabled')) {
|
|||||||
$daemons[] = INSTALLDIR.'/scripts/xmppconfirmhandler.php';
|
$daemons[] = INSTALLDIR.'/scripts/xmppconfirmhandler.php';
|
||||||
}
|
}
|
||||||
|
|
||||||
if(common_config('twitterbridge','enabled')) {
|
|
||||||
$daemons[] = INSTALLDIR.'/scripts/twitterstatusfetcher.php';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (common_config('twitter', 'enabled')) {
|
|
||||||
$daemons[] = INSTALLDIR.'/scripts/twitterqueuehandler.php';
|
|
||||||
$daemons[] = INSTALLDIR.'/scripts/synctwitterfriends.php';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (common_config('sms', 'enabled')) {
|
if (common_config('sms', 'enabled')) {
|
||||||
$daemons[] = INSTALLDIR.'/scripts/smsqueuehandler.php';
|
$daemons[] = INSTALLDIR.'/scripts/smsqueuehandler.php';
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user