Merge branch '0.9.x' of git@gitorious.org:statusnet/mainline into 0.9.x-mobile
This commit is contained in:
commit
f3a074ad22
49
README
49
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.
|
||||||
* facebookqueuehandler.php - sends queued notices to Facebook for users
|
|
||||||
of the built-in Facebook application.
|
|
||||||
|
|
||||||
Note that these queue daemons are pretty raw, and need your care. In
|
Note that these queue daemons are pretty raw, and need your care. In
|
||||||
particular, they leak memory, and you may want to restart them on a
|
particular, they leak memory, and you may want to restart them on a
|
||||||
@ -545,53 +543,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 (
|
||||||
|
|
||||||
Built-in Facebook Application
|
|
||||||
-----------------------------
|
|
||||||
|
|
||||||
StatusNet's Facebook application allows your users to automatically
|
|
||||||
update their Facebook statuses with their latest notices, invite
|
|
||||||
their friends to use the app (and thus your site), view their notice
|
|
||||||
timelines, and post notices -- all from within Facebook. The application
|
|
||||||
is built into StatusNet and runs on your host. For automatic Facebook
|
|
||||||
status updating to work you will need to enable queuing and run the
|
|
||||||
facebookqueuehandler.php daemon (see the "Queues and daemons" section
|
|
||||||
above).
|
|
||||||
|
|
||||||
Quick setup instructions*:
|
|
||||||
|
|
||||||
Install the Facebook Developer application on Facebook:
|
|
||||||
|
|
||||||
http://www.facebook.com/developers/
|
|
||||||
|
|
||||||
Use it to create a new application and generate an API key and secret.
|
|
||||||
Uncomment the Facebook app section of your config.php and copy in the
|
|
||||||
key and secret, e.g.:
|
|
||||||
|
|
||||||
# Config section for the built-in Facebook application
|
|
||||||
$config['facebook']['apikey'] = 'APIKEY';
|
|
||||||
$config['facebook']['secret'] = 'SECRET';
|
|
||||||
|
|
||||||
In Facebook's application editor, specify the following URLs for your app:
|
|
||||||
|
|
||||||
- Canvas Callback URL: http://example.net/mublog/facebook/
|
|
||||||
- Post-Remove Callback URL: http://example.net/mublog/facebook/remove
|
|
||||||
- Post-Add Redirect URL: http://apps.facebook.com/yourapp/
|
|
||||||
- Canvas Page URL: http://apps.facebook.com/yourapp/
|
|
||||||
|
|
||||||
(Replace 'example.net' with your host's URL, 'mublog' with the path
|
|
||||||
to your StatusNet installation, and 'yourapp' with the name of the
|
|
||||||
Facebook application you created.)
|
|
||||||
|
|
||||||
Additionally, Choose "Web" for Application type in the Advanced tab.
|
|
||||||
In the "Canvas setting" section, choose the "FBML" for Render Method,
|
|
||||||
"Smart Size" for IFrame size, and "Full width (760px)" for Canvas Width.
|
|
||||||
Everything else can be left with default values.
|
|
||||||
|
|
||||||
*For more detailed instructions please see the installation guide on the
|
|
||||||
StatusNet wiki:
|
|
||||||
|
|
||||||
http://status.net/trac/wiki/FacebookApplication
|
|
||||||
|
|
||||||
Sitemaps
|
Sitemaps
|
||||||
--------
|
--------
|
||||||
|
|
||||||
|
@ -46,6 +46,11 @@ class Profile extends Memcached_DataObject
|
|||||||
/* the code above is auto generated do not remove the tag below */
|
/* the code above is auto generated do not remove the tag below */
|
||||||
###END_AUTOCODE
|
###END_AUTOCODE
|
||||||
|
|
||||||
|
function getUser()
|
||||||
|
{
|
||||||
|
return User::staticGet('id', $this->id);
|
||||||
|
}
|
||||||
|
|
||||||
function getAvatar($width, $height=null)
|
function getAvatar($width, $height=null)
|
||||||
{
|
{
|
||||||
if (is_null($height)) {
|
if (is_null($height)) {
|
||||||
|
20
lib/api.php
20
lib/api.php
@ -134,11 +134,19 @@ class ApiAction extends Action
|
|||||||
$twitter_user['protected'] = false; # not supported by StatusNet yet
|
$twitter_user['protected'] = false; # not supported by StatusNet yet
|
||||||
$twitter_user['followers_count'] = $profile->subscriberCount();
|
$twitter_user['followers_count'] = $profile->subscriberCount();
|
||||||
|
|
||||||
// To be supported soon...
|
// Need to pull up the user for some of this
|
||||||
$twitter_user['profile_background_color'] = '';
|
$user = $profile->getUser();
|
||||||
$twitter_user['profile_text_color'] = '';
|
$design = $user->getDesign();
|
||||||
$twitter_user['profile_link_color'] = '';
|
$defaultDesign = Design::siteDesign();
|
||||||
$twitter_user['profile_sidebar_fill_color'] = '';
|
if (!$design) $design = $defaultDesign;
|
||||||
|
$color = Design::toWebColor(empty($design->backgroundcolor) ? $defaultDesign->backgroundcolor : $design->backgroundcolor);
|
||||||
|
$twitter_user['profile_background_color'] = ($color == null) ? '' : '#'.$color->hexValue();
|
||||||
|
$color = Design::toWebColor(empty($design->textcolor) ? $defaultDesign->textcolor : $design->textcolor);
|
||||||
|
$twitter_user['profile_text_color'] = ($color == null) ? '' : '#'.$color->hexValue();
|
||||||
|
$color = Design::toWebColor(empty($design->linkcolor) ? $defaultDesign->linkcolor : $design->linkcolor);
|
||||||
|
$twitter_user['profile_link_color'] = ($color == null) ? '' : '#'.$color->hexValue();
|
||||||
|
$color = Design::toWebColor(empty($design->sidebarcolor) ? $defaultDesign->sidebarcolor : $design->sidebarcolor);
|
||||||
|
$twitter_user['profile_sidebar_fill_color'] = ($color == null) ? '' : '#'.$color->hexValue();
|
||||||
$twitter_user['profile_sidebar_border_color'] = '';
|
$twitter_user['profile_sidebar_border_color'] = '';
|
||||||
|
|
||||||
$twitter_user['friends_count'] = $profile->subscriptionCount();
|
$twitter_user['friends_count'] = $profile->subscriptionCount();
|
||||||
@ -147,8 +155,6 @@ class ApiAction extends Action
|
|||||||
|
|
||||||
$twitter_user['favourites_count'] = $profile->faveCount(); // British spelling!
|
$twitter_user['favourites_count'] = $profile->faveCount(); // British spelling!
|
||||||
|
|
||||||
// Need to pull up the user for some of this
|
|
||||||
$user = User::staticGet($profile->id);
|
|
||||||
|
|
||||||
$timezone = 'UTC';
|
$timezone = 'UTC';
|
||||||
|
|
||||||
|
72
lib/mail.php
72
lib/mail.php
@ -640,75 +640,3 @@ function mail_notify_attn($user, $notice)
|
|||||||
mail_to_user($user, $subject, $body);
|
mail_to_user($user, $subject, $body);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Send a mail message to notify a user that her Twitter bridge link
|
|
||||||
* has stopped working, and therefore has been removed. This can
|
|
||||||
* happen when the user changes her Twitter password, or otherwise
|
|
||||||
* revokes access.
|
|
||||||
*
|
|
||||||
* @param User $user user whose Twitter bridge link has been removed
|
|
||||||
*
|
|
||||||
* @return boolean success flag
|
|
||||||
*/
|
|
||||||
|
|
||||||
function mail_twitter_bridge_removed($user)
|
|
||||||
{
|
|
||||||
common_init_locale($user->language);
|
|
||||||
|
|
||||||
$profile = $user->getProfile();
|
|
||||||
|
|
||||||
$subject = sprintf(_('Your Twitter bridge has been disabled.'));
|
|
||||||
|
|
||||||
$site_name = common_config('site', 'name');
|
|
||||||
|
|
||||||
$body = sprintf(_('Hi, %1$s. We\'re sorry to inform you that your ' .
|
|
||||||
'link to Twitter has been disabled. We no longer seem to have ' .
|
|
||||||
'permission to update your Twitter status. (Did you revoke ' .
|
|
||||||
'%3$s\'s access?)' . "\n\n" .
|
|
||||||
'You can re-enable your Twitter bridge by visiting your ' .
|
|
||||||
"Twitter settings page:\n\n\t%2\$s\n\n" .
|
|
||||||
"Regards,\n%3\$s\n"),
|
|
||||||
$profile->getBestName(),
|
|
||||||
common_local_url('twittersettings'),
|
|
||||||
common_config('site', 'name'));
|
|
||||||
|
|
||||||
common_init_locale();
|
|
||||||
return mail_to_user($user, $subject, $body);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Send a mail message to notify a user that her Facebook Application
|
|
||||||
* access has been removed.
|
|
||||||
*
|
|
||||||
* @param User $user user whose Facebook app link has been removed
|
|
||||||
*
|
|
||||||
* @return boolean success flag
|
|
||||||
*/
|
|
||||||
|
|
||||||
function mail_facebook_app_removed($user)
|
|
||||||
{
|
|
||||||
common_init_locale($user->language);
|
|
||||||
|
|
||||||
$profile = $user->getProfile();
|
|
||||||
|
|
||||||
$site_name = common_config('site', 'name');
|
|
||||||
|
|
||||||
$subject = sprintf(
|
|
||||||
_('Your %1$s Facebook application access has been disabled.',
|
|
||||||
$site_name));
|
|
||||||
|
|
||||||
$body = sprintf(_("Hi, %1\$s. We're sorry to inform you that we are " .
|
|
||||||
'unable to update your Facebook status from %2$s, and have disabled ' .
|
|
||||||
'the Facebook application for your account. This may be because ' .
|
|
||||||
'you have removed the Facebook application\'s authorization, or ' .
|
|
||||||
'have deleted your Facebook account. You can re-enable the ' .
|
|
||||||
'Facebook application and automatic status updating by ' .
|
|
||||||
"re-installing the %2\$s Facebook application.\n\nRegards,\n\n%2\$s"),
|
|
||||||
$user->nickname, $site_name);
|
|
||||||
|
|
||||||
common_init_locale();
|
|
||||||
return mail_to_user($user, $subject, $body);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -87,7 +87,7 @@ function omb_broadcast_notice($notice)
|
|||||||
common_debug('Posting to ' . $rp->postnoticeurl, __FILE__);
|
common_debug('Posting to ' . $rp->postnoticeurl, __FILE__);
|
||||||
|
|
||||||
/* Post notice. */
|
/* Post notice. */
|
||||||
$service = new Laconica_OMB_Service_Consumer(
|
$service = new StatusNet_OMB_Service_Consumer(
|
||||||
array(OMB_ENDPOINT_POSTNOTICE => $rp->postnoticeurl));
|
array(OMB_ENDPOINT_POSTNOTICE => $rp->postnoticeurl));
|
||||||
try {
|
try {
|
||||||
$service->setToken($rp->token, $rp->secret);
|
$service->setToken($rp->token, $rp->secret);
|
||||||
|
@ -86,14 +86,6 @@ class Router
|
|||||||
|
|
||||||
$m->connect('doc/:title', array('action' => 'doc'));
|
$m->connect('doc/:title', array('action' => 'doc'));
|
||||||
|
|
||||||
// facebook
|
|
||||||
|
|
||||||
$m->connect('facebook', array('action' => 'facebookhome'));
|
|
||||||
$m->connect('facebook/index.php', array('action' => 'facebookhome'));
|
|
||||||
$m->connect('facebook/settings.php', array('action' => 'facebooksettings'));
|
|
||||||
$m->connect('facebook/invite.php', array('action' => 'facebookinvite'));
|
|
||||||
$m->connect('facebook/remove', array('action' => 'facebookremove'));
|
|
||||||
|
|
||||||
// main stuff is repetitive
|
// main stuff is repetitive
|
||||||
|
|
||||||
$main = array('login', 'logout', 'register', 'subscribe',
|
$main = array('login', 'logout', 'register', 'subscribe',
|
||||||
|
@ -48,12 +48,6 @@ class UnQueueManager
|
|||||||
jabber_public_notice($notice);
|
jabber_public_notice($notice);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'facebook':
|
|
||||||
if ($this->_isLocal($notice)) {
|
|
||||||
require_once INSTALLDIR . '/lib/facebookutil.php';
|
|
||||||
return facebookBroadcastNotice($notice);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 'ping':
|
case 'ping':
|
||||||
if ($this->_isLocal($notice)) {
|
if ($this->_isLocal($notice)) {
|
||||||
require_once INSTALLDIR . '/lib/ping.php';
|
require_once INSTALLDIR . '/lib/ping.php';
|
||||||
@ -72,7 +66,7 @@ class UnQueueManager
|
|||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if (Event::handle('UnqueueHandleNotice', array(&$notice, $queue))) {
|
if (Event::handle('UnqueueHandleNotice', array(&$notice, $queue))) {
|
||||||
throw ServerException("UnQueueManager: Unknown queue: $queue");
|
throw new ServerException("UnQueueManager: Unknown queue: $queue");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -906,8 +906,6 @@ function common_broadcast_notice($notice, $remote=false)
|
|||||||
function common_enqueue_notice($notice)
|
function common_enqueue_notice($notice)
|
||||||
{
|
{
|
||||||
static $localTransports = array('omb',
|
static $localTransports = array('omb',
|
||||||
'twitter',
|
|
||||||
'facebook',
|
|
||||||
'ping');
|
'ping');
|
||||||
|
|
||||||
static $allTransports = array('sms', 'plugin');
|
static $allTransports = array('sms', 'plugin');
|
||||||
|
@ -1,76 +0,0 @@
|
|||||||
This plugin allows you to utilize Facebook Connect with StatusNet.
|
|
||||||
Supported Facebook Connect features:
|
|
||||||
|
|
||||||
- Authenticate (register/login/logout -- works similar to OpenID)
|
|
||||||
- Associate an existing StatusNet account with a Facebook account
|
|
||||||
- Disconnect a Facebook account from a StatusNet account
|
|
||||||
|
|
||||||
Future planned functionality:
|
|
||||||
|
|
||||||
- Invite Facebook friends to use your StatusNet installation
|
|
||||||
- Auto-subscribe Facebook friends already using StatusNet
|
|
||||||
- Share StatusNet favorite notices to your Facebook stream
|
|
||||||
|
|
||||||
To use the plugin you will need to configure a Facebook application
|
|
||||||
to point to your StatusNet installation (see the Installation section
|
|
||||||
below).
|
|
||||||
|
|
||||||
Installation
|
|
||||||
============
|
|
||||||
|
|
||||||
If you don't already have the built-in Facebook application configured,
|
|
||||||
you'll need to log into Facebook and create/configure a new application.
|
|
||||||
Please follow the instructions in the section titled, "Setting Up Your
|
|
||||||
Application and Getting an API Key," on the following page of the
|
|
||||||
Facebook developer wiki:
|
|
||||||
|
|
||||||
http://wiki.developers.facebook.com/index.php/Connect/Setting_Up_Your_Site
|
|
||||||
|
|
||||||
If you already are using the build-in StatusNet Facebook application,
|
|
||||||
you can modify your existing application's configuration using the
|
|
||||||
Facebook Developer Application on Facebook. Use it to edit your
|
|
||||||
application settings, and under the 'Connect' tab, change the 'Connect
|
|
||||||
URL' to be the main URL for your StatusNet site. E.g.:
|
|
||||||
|
|
||||||
http://SITE/PATH_TO_STATUSNET/
|
|
||||||
|
|
||||||
After you application is created and configured, you'll need to add its
|
|
||||||
API key and secret to your StatusNet config.php file:
|
|
||||||
|
|
||||||
$config['facebook']['apikey'] = 'APIKEY';
|
|
||||||
$config['facebook']['secret'] = 'SECRET';
|
|
||||||
|
|
||||||
Finally, to enable the plugin, add the following stanza to your
|
|
||||||
config.php:
|
|
||||||
|
|
||||||
addPlugin('FBConnect');
|
|
||||||
|
|
||||||
To try out the plugin, fire up your browser and connect to:
|
|
||||||
|
|
||||||
http://SITE/PATH_TO_STATUSNET/main/facebooklogin
|
|
||||||
|
|
||||||
or, if you do not have fancy URLs turned on:
|
|
||||||
|
|
||||||
http://SITE/PATH_TO_STATUSNET/index.php/main/facebooklogin
|
|
||||||
|
|
||||||
You should see a page with a blue button that says: "Connect with
|
|
||||||
Facebook".
|
|
||||||
|
|
||||||
Connect/Disconnect existing account
|
|
||||||
===================================
|
|
||||||
|
|
||||||
If the Facebook Connect plugin is enabled, there will be a new Facebook
|
|
||||||
Connect Settings tab under each user's Connect menu. Users can connect
|
|
||||||
and disconnect to their Facebook accounts from it. Note: Before a user
|
|
||||||
can disconnect from Facebook, she must set a normal StatusNet password.
|
|
||||||
Otherwise, she might not be able to login in to her account in the
|
|
||||||
future. This is usually only required for users who have used Facebook
|
|
||||||
Connect to register their StatusNet account, and therefore haven't
|
|
||||||
already set a local password.
|
|
||||||
|
|
||||||
Helpful links
|
|
||||||
=============
|
|
||||||
|
|
||||||
Facebook Connect Homepage:
|
|
||||||
http://developers.facebook.com/connect.php
|
|
||||||
|
|
@ -27,7 +27,7 @@
|
|||||||
* @link http://status.net/
|
* @link http://status.net/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
require_once INSTALLDIR . '/plugins/FBConnect/FBConnectPlugin.php';
|
require_once INSTALLDIR . '/plugins/Facebook/FacebookPlugin.php';
|
||||||
|
|
||||||
class FBConnectauthAction extends Action
|
class FBConnectauthAction extends Action
|
||||||
{
|
{
|
@ -21,7 +21,8 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
require_once INSTALLDIR . '/plugins/FBConnect/FBConnectPlugin.php';
|
|
||||||
|
require_once INSTALLDIR . '/plugins/Facebook/FacebookPlugin.php';
|
||||||
|
|
||||||
class FBConnectLoginAction extends Action
|
class FBConnectLoginAction extends Action
|
||||||
{
|
{
|
@ -2,7 +2,7 @@
|
|||||||
/**
|
/**
|
||||||
* StatusNet, the distributed open-source microblogging tool
|
* StatusNet, the distributed open-source microblogging tool
|
||||||
*
|
*
|
||||||
* Plugin to enable Facebook Connect
|
* Plugin to add a StatusNet Facebook application
|
||||||
*
|
*
|
||||||
* PHP version 5
|
* PHP version 5
|
||||||
*
|
*
|
||||||
@ -27,22 +27,16 @@
|
|||||||
* @link http://status.net/
|
* @link http://status.net/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (!defined('STATUSNET') && !defined('LACONICA')) {
|
if (!defined('STATUSNET')) {
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
define("FACEBOOK_CONNECT_SERVICE", 3);
|
define("FACEBOOK_CONNECT_SERVICE", 3);
|
||||||
|
|
||||||
require_once INSTALLDIR . '/lib/facebookutil.php';
|
require_once INSTALLDIR . '/plugins/Facebook/facebookutil.php';
|
||||||
require_once INSTALLDIR . '/plugins/FBConnect/FBConnectAuth.php';
|
|
||||||
require_once INSTALLDIR . '/plugins/FBConnect/FBConnectLogin.php';
|
|
||||||
require_once INSTALLDIR . '/plugins/FBConnect/FBConnectSettings.php';
|
|
||||||
require_once INSTALLDIR . '/plugins/FBConnect/FBCLoginGroupNav.php';
|
|
||||||
require_once INSTALLDIR . '/plugins/FBConnect/FBCSettingsNav.php';
|
|
||||||
require_once INSTALLDIR . '/plugins/FBConnect/FBC_XDReceiver.php';
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Plugin to enable Facebook Connect
|
* Facebook plugin to add a StatusNet Facebook application
|
||||||
*
|
*
|
||||||
* @category Plugin
|
* @category Plugin
|
||||||
* @package StatusNet
|
* @package StatusNet
|
||||||
@ -51,22 +45,88 @@ require_once INSTALLDIR . '/plugins/FBConnect/FBC_XDReceiver.php';
|
|||||||
* @link http://status.net/
|
* @link http://status.net/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class FBConnectPlugin extends Plugin
|
class FacebookPlugin extends Plugin
|
||||||
{
|
{
|
||||||
function __construct()
|
|
||||||
{
|
|
||||||
parent::__construct();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Hook in new actions
|
/**
|
||||||
function onRouterInitialized(&$m) {
|
* Add Facebook app actions to the router table
|
||||||
|
*
|
||||||
|
* Hook for RouterInitialized event.
|
||||||
|
*
|
||||||
|
* @param Net_URL_Mapper &$m path-to-action mapper
|
||||||
|
*
|
||||||
|
* @return boolean hook return
|
||||||
|
*/
|
||||||
|
|
||||||
|
function onRouterInitialized(&$m)
|
||||||
|
{
|
||||||
|
|
||||||
|
// Facebook App stuff
|
||||||
|
|
||||||
|
$m->connect('facebook/app', array('action' => 'facebookhome'));
|
||||||
|
$m->connect('facebook/app/index.php', array('action' => 'facebookhome'));
|
||||||
|
$m->connect('facebook/app/settings.php',
|
||||||
|
array('action' => 'facebooksettings'));
|
||||||
|
$m->connect('facebook/app/invite.php', array('action' => 'facebookinvite'));
|
||||||
|
$m->connect('facebook/app/remove', array('action' => 'facebookremove'));
|
||||||
|
|
||||||
|
// Facebook Connect stuff
|
||||||
|
|
||||||
$m->connect('main/facebookconnect', array('action' => 'FBConnectAuth'));
|
$m->connect('main/facebookconnect', array('action' => 'FBConnectAuth'));
|
||||||
$m->connect('main/facebooklogin', array('action' => 'FBConnectLogin'));
|
$m->connect('main/facebooklogin', array('action' => 'FBConnectLogin'));
|
||||||
$m->connect('settings/facebook', array('action' => 'FBConnectSettings'));
|
$m->connect('settings/facebook', array('action' => 'FBConnectSettings'));
|
||||||
$m->connect('xd_receiver.html', array('action' => 'FBC_XDReceiver'));
|
$m->connect('xd_receiver.html', array('action' => 'FBC_XDReceiver'));
|
||||||
}
|
|
||||||
|
|
||||||
// Add in xmlns:fb
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Automatically load the actions and libraries used by the Facebook app
|
||||||
|
*
|
||||||
|
* @param Class $cls the class
|
||||||
|
*
|
||||||
|
* @return boolean hook return
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
function onAutoload($cls)
|
||||||
|
{
|
||||||
|
switch ($cls) {
|
||||||
|
case 'FacebookAction':
|
||||||
|
case 'FacebookhomeAction':
|
||||||
|
case 'FacebookinviteAction':
|
||||||
|
case 'FacebookremoveAction':
|
||||||
|
case 'FacebooksettingsAction':
|
||||||
|
include_once INSTALLDIR . '/plugins/Facebook/' .
|
||||||
|
strtolower(mb_substr($cls, 0, -6)) . '.php';
|
||||||
|
return false;
|
||||||
|
case 'FBConnectAuthAction':
|
||||||
|
case 'FBConnectLoginAction':
|
||||||
|
case 'FBConnectSettingsAction':
|
||||||
|
case 'FBC_XDReceiverAction':
|
||||||
|
include_once INSTALLDIR . '/plugins/Facebook/' .
|
||||||
|
mb_substr($cls, 0, -6) . '.php';
|
||||||
|
return false;
|
||||||
|
case 'FBCLoginGroupNav':
|
||||||
|
include_once INSTALLDIR . '/plugins/Facebook/FBCLoginGroupNav.php';
|
||||||
|
return false;
|
||||||
|
case 'FBCSettingsNav':
|
||||||
|
include_once INSTALLDIR . '/plugins/Facebook/FBCSettingsNav.php';
|
||||||
|
return false;
|
||||||
|
default:
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Override normal HTML output to force the content type to
|
||||||
|
* text/html and add in xmlns:fb
|
||||||
|
*
|
||||||
|
* @param Action $action the current action
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
|
||||||
function onStartShowHTML($action)
|
function onStartShowHTML($action)
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -78,6 +138,7 @@ class FBConnectPlugin extends Plugin
|
|||||||
// text/html even though Facebook Connect uses XHTML. This is
|
// text/html even though Facebook Connect uses XHTML. This is
|
||||||
// A bug in Facebook Connect, and this is a temporary solution
|
// A bug in Facebook Connect, and this is a temporary solution
|
||||||
// until they fix their JavaScript libs.
|
// until they fix their JavaScript libs.
|
||||||
|
|
||||||
header('Content-Type: text/html');
|
header('Content-Type: text/html');
|
||||||
|
|
||||||
$action->extraHeaders();
|
$action->extraHeaders();
|
||||||
@ -100,22 +161,31 @@ class FBConnectPlugin extends Plugin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Note: this script needs to appear in the <body>
|
/**
|
||||||
|
* Add in the Facebook Connect JavaScript stuff
|
||||||
|
*
|
||||||
|
* Note: this script needs to appear in the <body>
|
||||||
|
*
|
||||||
|
* @param Action $action the current action
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
function onEndShowScripts($action)
|
function onEndShowScripts($action)
|
||||||
{
|
{
|
||||||
if ($this->reqFbScripts($action)) {
|
if ($this->reqFbScripts($action)) {
|
||||||
|
|
||||||
$apikey = common_config('facebook', 'apikey');
|
$apikey = common_config('facebook', 'apikey');
|
||||||
$plugin_path = common_path('plugins/FBConnect');
|
$plugin_path = common_path('plugins/Facebook');
|
||||||
|
|
||||||
$login_url = common_local_url('FBConnectAuth');
|
$login_url = common_local_url('FBConnectAuth');
|
||||||
$logout_url = common_local_url('logout');
|
$logout_url = common_local_url('logout');
|
||||||
|
|
||||||
// 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.
|
||||||
|
|
||||||
$js = '<script type="text/javascript">';
|
$js = '<script type="text/javascript">';
|
||||||
$js .= ' $(document).ready(function () {';
|
$js .= ' $(document).ready(function () {';
|
||||||
$js .= ' FB_RequireFeatures(';
|
$js .= ' FB_RequireFeatures(';
|
||||||
$js .= ' ["XFBML"], function() {';
|
$js .= ' ["XFBML"], function() {';
|
||||||
@ -154,6 +224,7 @@ class FBConnectPlugin extends Plugin
|
|||||||
$js = sprintf($js, $apikey, $login_url, $logout_url);
|
$js = sprintf($js, $apikey, $login_url, $logout_url);
|
||||||
|
|
||||||
// Compress the bugger down a bit
|
// Compress the bugger down a bit
|
||||||
|
|
||||||
$js = str_replace(' ', '', $js);
|
$js = str_replace(' ', '', $js);
|
||||||
|
|
||||||
$action->raw(" $js"); // leading two spaces to make it line up
|
$action->raw(" $js"); // leading two spaces to make it line up
|
||||||
@ -161,19 +232,37 @@ class FBConnectPlugin extends Plugin
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Note: this script needs to appear as close as possible to </body>
|
/**
|
||||||
|
* Add in an additional Facebook Connect script that's supposed to
|
||||||
|
* appear as close as possible to </body>
|
||||||
|
*
|
||||||
|
* @param Action $action the current action
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
function onEndShowFooter($action)
|
function onEndShowFooter($action)
|
||||||
{
|
{
|
||||||
if ($this->reqFbScripts($action)) {
|
if ($this->reqFbScripts($action)) {
|
||||||
$action->script('http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php');
|
$action->script('http://static.ak.connect.facebook.com' .
|
||||||
|
'/js/api_lib/v0.4/FeatureLoader.js.php');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Output Facebook Connect specific CSS link
|
||||||
|
*
|
||||||
|
* @param Action $action the current action
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
function onEndShowStatusNetStyles($action)
|
function onEndShowStatusNetStyles($action)
|
||||||
{
|
{
|
||||||
if ($this->reqFbScripts($action)) {
|
if ($this->reqFbScripts($action)) {
|
||||||
$action->cssLink('plugins/FBConnect/FBConnectPlugin.css');
|
$action->cssLink('plugins/Facebook/FBConnect.css');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -182,12 +271,13 @@ class FBConnectPlugin extends Plugin
|
|||||||
* want to output FB namespace, scripts, CSS, etc. on the pages that
|
* want to output FB namespace, scripts, CSS, etc. on the pages that
|
||||||
* really need them.
|
* really need them.
|
||||||
*
|
*
|
||||||
* @param Action the action in question
|
* @param Action $action the current action
|
||||||
*
|
*
|
||||||
* @return boolean true
|
* @return boolean true
|
||||||
*/
|
*/
|
||||||
|
|
||||||
function reqFbScripts($action) {
|
function reqFbScripts($action)
|
||||||
|
{
|
||||||
|
|
||||||
// If you're logged in w/FB Connect, you always need the FB stuff
|
// If you're logged in w/FB Connect, you always need the FB stuff
|
||||||
|
|
||||||
@ -249,10 +339,19 @@ class FBConnectPlugin extends Plugin
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add in a Facebook Connect avatar to the primary nav menu
|
||||||
|
*
|
||||||
|
* @param Action $action the current action
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
function onStartPrimaryNav($action)
|
function onStartPrimaryNav($action)
|
||||||
{
|
{
|
||||||
|
|
||||||
$user = common_current_user();
|
$user = common_current_user();
|
||||||
|
|
||||||
$connect = 'FBConnectSettings';
|
$connect = 'FBConnectSettings';
|
||||||
if (common_config('xmpp', 'enabled')) {
|
if (common_config('xmpp', 'enabled')) {
|
||||||
$connect = 'imsettings';
|
$connect = 'imsettings';
|
||||||
@ -283,7 +382,7 @@ class FBConnectPlugin extends Plugin
|
|||||||
'alt' => 'Facebook Connect User',
|
'alt' => 'Facebook Connect User',
|
||||||
'width' => '16'), '');
|
'width' => '16'), '');
|
||||||
|
|
||||||
$iconurl = common_path('plugins/FBConnect/fbfavicon.ico');
|
$iconurl = common_path('plugins/Facebook/fbfavicon.ico');
|
||||||
$action->element('img', array('id' => 'fb_favicon',
|
$action->element('img', array('id' => 'fb_favicon',
|
||||||
'src' => $iconurl));
|
'src' => $iconurl));
|
||||||
|
|
||||||
@ -295,9 +394,19 @@ class FBConnectPlugin extends Plugin
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Alter the local nav menu to have a Facebook Connect login and
|
||||||
|
* settings pages
|
||||||
|
*
|
||||||
|
* @param Action $action the current action
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
function onStartShowLocalNavBlock($action)
|
function onStartShowLocalNavBlock($action)
|
||||||
{
|
{
|
||||||
$action_name = get_class($action);
|
$action_name = get_class($action);
|
||||||
|
|
||||||
$login_actions = array('LoginAction', 'RegisterAction',
|
$login_actions = array('LoginAction', 'RegisterAction',
|
||||||
'OpenidloginAction', 'FBConnectLoginAction');
|
'OpenidloginAction', 'FBConnectLoginAction');
|
||||||
@ -320,6 +429,14 @@ class FBConnectPlugin extends Plugin
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Have the logout process do some Facebook Connect cookie cleanup
|
||||||
|
*
|
||||||
|
* @param Action $action the current action
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
|
||||||
function onStartLogout($action)
|
function onStartLogout($action)
|
||||||
{
|
{
|
||||||
$action->logout();
|
$action->logout();
|
||||||
@ -339,9 +456,16 @@ class FBConnectPlugin extends Plugin
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the URL of the user's Facebook avatar
|
||||||
|
*
|
||||||
|
* @param int $fbuid the Facebook user ID
|
||||||
|
*
|
||||||
|
* @return string $url the url for the user's Facebook avatar
|
||||||
|
*/
|
||||||
|
|
||||||
function getProfilePicURL($fbuid)
|
function getProfilePicURL($fbuid)
|
||||||
{
|
{
|
||||||
|
|
||||||
$facebook = getFacebook();
|
$facebook = getFacebook();
|
||||||
$url = null;
|
$url = null;
|
||||||
|
|
||||||
@ -360,8 +484,70 @@ class FBConnectPlugin extends Plugin
|
|||||||
"Facebook client failure requesting profile pic!");
|
"Facebook client failure requesting profile pic!");
|
||||||
}
|
}
|
||||||
|
|
||||||
return $url;
|
return $url;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a Facebook 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, 'facebook');
|
||||||
|
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 == 'facebook') && ($this->_isLocal($notice))) {
|
||||||
|
facebookBroadcastNotice($notice);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine whether the notice was locally created
|
||||||
|
*
|
||||||
|
* @param Notice $notice the notice
|
||||||
|
*
|
||||||
|
* @return boolean locality
|
||||||
|
*/
|
||||||
|
|
||||||
|
function _isLocal($notice)
|
||||||
|
{
|
||||||
|
return ($notice->is_local == Notice::LOCAL_PUBLIC ||
|
||||||
|
$notice->is_local == Notice::LOCAL_NONPUBLIC);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add Facebook queuehandler 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/Facebook/facebookqueuehandler.php');
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
129
plugins/Facebook/README
Normal file
129
plugins/Facebook/README
Normal file
@ -0,0 +1,129 @@
|
|||||||
|
This plugin allows you to use Facebook Connect with StatusNet, provides a
|
||||||
|
Facebook application for your users, and allows them to update their
|
||||||
|
Facebook statuses from StatusNet.
|
||||||
|
|
||||||
|
Facebook Connect
|
||||||
|
----------------
|
||||||
|
|
||||||
|
Facebook connect allows users to register and login using nothing but their
|
||||||
|
Facebook credentials. With Facebook Connect, your users can:
|
||||||
|
|
||||||
|
- Authenticate (register/login/logout -- works similar to OpenID)
|
||||||
|
- Associate an existing StatusNet account with a Facebook account
|
||||||
|
- Disconnect a Facebook account from a StatusNet account
|
||||||
|
|
||||||
|
Built-in Facebook Application
|
||||||
|
-----------------------------
|
||||||
|
|
||||||
|
The plugin also installs a StatusNet Facebook application that allows your
|
||||||
|
users to automatically update their Facebook statuses with their latest
|
||||||
|
notices, invite their friends to use the app (and thus your site), view
|
||||||
|
their notice timelines, and post notices -- all from within Facebook. The
|
||||||
|
application is built into the StatusNet Facebook plugin and runs on your
|
||||||
|
host.
|
||||||
|
|
||||||
|
Quick setup instructions*
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
Install the Facebook Developer application on Facebook:
|
||||||
|
|
||||||
|
http://www.facebook.com/developers/
|
||||||
|
|
||||||
|
Use it to create a new application and generate an API key and secret. Add a
|
||||||
|
Facebook app section of your config.php and copy in the key and secret,
|
||||||
|
e.g.:
|
||||||
|
|
||||||
|
// Config section for the built-in Facebook application
|
||||||
|
$config['facebook']['apikey'] = 'APIKEY';
|
||||||
|
$config['facebook']['secret'] = 'SECRET';
|
||||||
|
|
||||||
|
In Facebook's application editor, specify the following URLs for your app:
|
||||||
|
|
||||||
|
- Canvas Callback URL : http://example.net/mublog/facebook/app/
|
||||||
|
- Post-Remove Callback URL: http://example.net/mublog/facebook/app/remove
|
||||||
|
- Post-Add Redirect URL : http://apps.facebook.com/yourapp/
|
||||||
|
- Canvas Page URL : http://apps.facebook.com/yourapp/
|
||||||
|
- Connect URL : http://example.net/mublog/
|
||||||
|
|
||||||
|
*** ATTENTION ***
|
||||||
|
These URLs have changed slightly since StatusNet version 0.8.1,
|
||||||
|
so if you have been using the Facebook app previously, you will
|
||||||
|
need to update your configuration!
|
||||||
|
|
||||||
|
Replace "example.net" with your host's URL, "mublog" with the path to your
|
||||||
|
StatusNet installation, and 'yourapp' with the name of the Facebook
|
||||||
|
application you created. (If you don't have "Fancy URLs" on, you'll need to
|
||||||
|
change http://example.net/mublog/ to http://example.net/mublog/index.php/).
|
||||||
|
|
||||||
|
Additionally, Choose "Web" for Application type in the Advanced tab. In the
|
||||||
|
"Canvas setting" section, choose the "FBML" for Render Method, "Smart Size"
|
||||||
|
for IFrame size, and "Full width (760px)" for Canvas Width. Everything else
|
||||||
|
can be left with default values.
|
||||||
|
|
||||||
|
* NOTE: For more under-the-hood detailed instructions about setting up a
|
||||||
|
Facebook application and getting an API key, check out the
|
||||||
|
following pages on the Facebook wiki:
|
||||||
|
|
||||||
|
http://wiki.developers.facebook.com/index.php/Connect/Setting_Up_Your_Site
|
||||||
|
http://wiki.developers.facebook.com/index.php/Creating_your_first_application
|
||||||
|
|
||||||
|
Finally you must activate the plugin by adding the following line to your
|
||||||
|
config.php:
|
||||||
|
|
||||||
|
addPlugin('Facebook');
|
||||||
|
|
||||||
|
Testing It Out
|
||||||
|
--------------
|
||||||
|
|
||||||
|
If the Facebook plugin is enabled and working, there will be a new Facebook
|
||||||
|
Connect Settings tab under each user's Connect menu. Users can connect and
|
||||||
|
disconnect* to their Facebook accounts from it.
|
||||||
|
|
||||||
|
To try out the plugin, fire up your browser and connect to:
|
||||||
|
|
||||||
|
http://SITE/PATH_TO_STATUSNET/main/facebooklogin
|
||||||
|
|
||||||
|
or, if you do not have fancy URLs turned on:
|
||||||
|
|
||||||
|
http://SITE/PATH_TO_STATUSNET/index.php/main/facebooklogin
|
||||||
|
|
||||||
|
You should see a page with a blue button that says: "Connect with Facebook"
|
||||||
|
and you should be able to login or register.
|
||||||
|
|
||||||
|
From within Facebook, you should also be able to get to the Facebook
|
||||||
|
application, and run it by hitting the link you specified above when
|
||||||
|
configuring it:
|
||||||
|
|
||||||
|
http://apps.facebook.com/yourapp/
|
||||||
|
|
||||||
|
That link should be present you with a login screen. After logging in to
|
||||||
|
the app, you are given the option to update their Facebook status via
|
||||||
|
StatusNet.
|
||||||
|
|
||||||
|
* Note: Before a user can disconnect from Facebook, she must set a normal
|
||||||
|
StatusNet password. Otherwise, she might not be able to login in to her
|
||||||
|
account in the future. This is usually only required for users who have
|
||||||
|
used Facebook Connect to register their StatusNet account, and therefore
|
||||||
|
haven't already set a local password.
|
||||||
|
|
||||||
|
Offline Queue Handling
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
For larger sites needing better performance it's possible to enable queuing
|
||||||
|
and have users' notices posted to Facebook via a separate "offline"
|
||||||
|
FacebookQueueHandler (facebookqueuhandler.php in the Facebook plugin
|
||||||
|
directory), which will be started by the plugin along with their other
|
||||||
|
daemons when you run scripts/startdaemons.sh. See the StatusNet README for
|
||||||
|
more about queuing and daemons.
|
||||||
|
|
||||||
|
TODO
|
||||||
|
----
|
||||||
|
|
||||||
|
- Invite Facebook friends to use your StatusNet installation via Facebook
|
||||||
|
Connect
|
||||||
|
- Auto-subscribe Facebook friends already using StatusNet
|
||||||
|
- Share StatusNet favorite notices to your Facebook stream
|
||||||
|
- Allow users to update their Facebook statuses once they have authenticated
|
||||||
|
with Facebook Connect (no need for them to use the Facebook app if they
|
||||||
|
don't want to).
|
||||||
|
- Re-design the whole thing to support multiple instances of StatusNet
|
@ -2,7 +2,7 @@
|
|||||||
/**
|
/**
|
||||||
* StatusNet, the distributed open-source microblogging tool
|
* StatusNet, the distributed open-source microblogging tool
|
||||||
*
|
*
|
||||||
* Low-level generator for HTML
|
* Base Facebook Action
|
||||||
*
|
*
|
||||||
* PHP version 5
|
* PHP version 5
|
||||||
*
|
*
|
||||||
@ -22,18 +22,17 @@
|
|||||||
* @category Faceboook
|
* @category Faceboook
|
||||||
* @package StatusNet
|
* @package StatusNet
|
||||||
* @author Zach Copley <zach@status.net>
|
* @author Zach Copley <zach@status.net>
|
||||||
* @copyright 2008 StatusNet, Inc.
|
* @copyright 2008-2009 StatusNet, Inc.
|
||||||
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
|
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
|
||||||
* @link http://status.net/
|
* @link http://status.net/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (!defined('STATUSNET') && !defined('LACONICA'))
|
if (!defined('STATUSNET') && !defined('LACONICA')) {
|
||||||
{
|
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
require_once INSTALLDIR.'/lib/facebookutil.php';
|
require_once INSTALLDIR . '/plugins/Facebook/facebookutil.php';
|
||||||
require_once INSTALLDIR.'/lib/noticeform.php';
|
require_once INSTALLDIR . '/lib/noticeform.php';
|
||||||
|
|
||||||
class FacebookAction extends Action
|
class FacebookAction extends Action
|
||||||
{
|
{
|
||||||
@ -45,17 +44,6 @@ class FacebookAction extends Action
|
|||||||
var $app_uri = null;
|
var $app_uri = null;
|
||||||
var $app_name = null;
|
var $app_name = null;
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructor
|
|
||||||
*
|
|
||||||
* Just wraps the HTMLOutputter constructor.
|
|
||||||
*
|
|
||||||
* @param string $output URI to output to, default = stdout
|
|
||||||
* @param boolean $indent Whether to indent output, default true
|
|
||||||
*
|
|
||||||
* @see XMLOutputter::__construct
|
|
||||||
* @see HTMLOutputter::__construct
|
|
||||||
*/
|
|
||||||
function __construct($output='php://output', $indent=true, $facebook=null, $flink=null)
|
function __construct($output='php://output', $indent=true, $facebook=null, $flink=null)
|
||||||
{
|
{
|
||||||
parent::__construct($output, $indent);
|
parent::__construct($output, $indent);
|
||||||
@ -107,10 +95,8 @@ class FacebookAction extends Action
|
|||||||
/**
|
/**
|
||||||
* Start an Facebook ready HTML document
|
* Start an Facebook ready HTML document
|
||||||
*
|
*
|
||||||
* For Facebook we don't want to actually output any headers,
|
* For Facebook we don't want to actually output any headers,
|
||||||
* DTD info, etc. Just Stylesheet and JavaScript links.
|
* DTD info, etc. Just Stylesheet and JavaScript links.
|
||||||
*
|
|
||||||
* If $type isn't specified, will attempt to do content negotiation.
|
|
||||||
*
|
*
|
||||||
* @param string $type MIME type to use; default is to do negotation.
|
* @param string $type MIME type to use; default is to do negotation.
|
||||||
*
|
*
|
||||||
@ -139,8 +125,6 @@ class FacebookAction extends Action
|
|||||||
/**
|
/**
|
||||||
* Show notice form.
|
* Show notice form.
|
||||||
*
|
*
|
||||||
* MAY overload if no notice form needed... or direct message box????
|
|
||||||
*
|
|
||||||
* @return nothing
|
* @return nothing
|
||||||
*/
|
*/
|
||||||
function showNoticeForm()
|
function showNoticeForm()
|
||||||
@ -157,10 +141,6 @@ class FacebookAction extends Action
|
|||||||
$this->elementEnd('div');
|
$this->elementEnd('div');
|
||||||
}
|
}
|
||||||
|
|
||||||
function showAside()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
function showHead($error, $success)
|
function showHead($error, $success)
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -214,8 +194,6 @@ class FacebookAction extends Action
|
|||||||
/**
|
/**
|
||||||
* Show header of the page.
|
* Show header of the page.
|
||||||
*
|
*
|
||||||
* Calls template methods
|
|
||||||
*
|
|
||||||
* @return nothing
|
* @return nothing
|
||||||
*/
|
*/
|
||||||
function showHeader()
|
function showHeader()
|
||||||
@ -257,7 +235,7 @@ class FacebookAction extends Action
|
|||||||
$this->element('a',
|
$this->element('a',
|
||||||
array('href' => common_local_url('register')), _('Register'));
|
array('href' => common_local_url('register')), _('Register'));
|
||||||
$this->text($loginmsg_part2);
|
$this->text($loginmsg_part2);
|
||||||
$this->elementEnd('p');
|
$this->elementEnd('p');
|
||||||
$this->elementEnd('dd');
|
$this->elementEnd('dd');
|
||||||
|
|
||||||
$this->elementEnd('dl');
|
$this->elementEnd('dl');
|
||||||
@ -295,7 +273,7 @@ class FacebookAction extends Action
|
|||||||
$this->elementEnd('ul');
|
$this->elementEnd('ul');
|
||||||
|
|
||||||
$this->submit('submit', _('Login'));
|
$this->submit('submit', _('Login'));
|
||||||
$this->elementEnd('fieldset');
|
$this->elementEnd('fieldset');
|
||||||
$this->elementEnd('form');
|
$this->elementEnd('form');
|
||||||
|
|
||||||
$this->elementStart('p');
|
$this->elementStart('p');
|
||||||
@ -313,8 +291,8 @@ class FacebookAction extends Action
|
|||||||
|
|
||||||
// Need to include inline CSS for styling the Profile box
|
// Need to include inline CSS for styling the Profile box
|
||||||
|
|
||||||
$app_props = $this->facebook->api_client->Admin_getAppProperties(array('icon_url'));
|
$app_props = $this->facebook->api_client->Admin_getAppProperties(array('icon_url'));
|
||||||
$icon_url = $app_props['icon_url'];
|
$icon_url = $app_props['icon_url'];
|
||||||
|
|
||||||
$style = '<style>
|
$style = '<style>
|
||||||
.entry-title *,
|
.entry-title *,
|
@ -17,9 +17,11 @@
|
|||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
|
if (!defined('STATUSNET') && !defined('LACONICA')) {
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
require_once INSTALLDIR.'/lib/facebookaction.php';
|
require_once INSTALLDIR . '/plugins/Facebook/facebookaction.php';
|
||||||
|
|
||||||
class FacebookhomeAction extends FacebookAction
|
class FacebookhomeAction extends FacebookAction
|
||||||
{
|
{
|
@ -21,7 +21,7 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
require_once(INSTALLDIR.'/lib/facebookaction.php');
|
require_once INSTALLDIR . '/plugins/Facebook/facebookaction.php';
|
||||||
|
|
||||||
class FacebookinviteAction extends FacebookAction
|
class FacebookinviteAction extends FacebookAction
|
||||||
{
|
{
|
@ -17,9 +17,11 @@
|
|||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
|
if (!defined('STATUSNET') && !defined('LACONICA')) {
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
require_once(INSTALLDIR.'/lib/facebookaction.php');
|
require_once INSTALLDIR . '/plugins/Facebook/facebookaction.php';
|
||||||
|
|
||||||
class FacebookinviteAction extends FacebookAction
|
class FacebookinviteAction extends FacebookAction
|
||||||
{
|
{
|
||||||
@ -27,25 +29,24 @@ class FacebookinviteAction extends FacebookAction
|
|||||||
function handle($args)
|
function handle($args)
|
||||||
{
|
{
|
||||||
parent::handle($args);
|
parent::handle($args);
|
||||||
|
|
||||||
$this->error = $error;
|
$this->error = $error;
|
||||||
|
|
||||||
if ($this->flink) {
|
if ($this->flink) {
|
||||||
if (!$this->facebook->api_client->users_hasAppPermission('publish_stream') &&
|
if (!$this->facebook->api_client->users_hasAppPermission('publish_stream') &&
|
||||||
$this->facebook->api_client->data_getUserPreference(
|
$this->facebook->api_client->data_getUserPreference(
|
||||||
FACEBOOK_PROMPTED_UPDATE_PREF) == 'true') {
|
FACEBOOK_PROMPTED_UPDATE_PREF) == 'true') {
|
||||||
|
|
||||||
echo '<h1>REDIRECT TO HOME</h1>';
|
echo '<h1>REDIRECT TO HOME</h1>';
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$this->showPage();
|
$this->showPage();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function showContent()
|
function showContent()
|
||||||
{
|
{
|
||||||
|
|
||||||
// If the user has opted not to initially allow the app to have
|
// If the user has opted not to initially allow the app to have
|
||||||
// Facebook status update permission, store that preference. Only
|
// Facebook status update permission, store that preference. Only
|
||||||
// promt the user the first time she uses the app
|
// promt the user the first time she uses the app
|
||||||
@ -68,34 +69,31 @@ class FacebookinviteAction extends FacebookAction
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
$this->showLoginForm();
|
$this->showLoginForm();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function showSuccessContent()
|
function showSuccessContent()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function showFormContent()
|
function showFormContent()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function title()
|
function title()
|
||||||
{
|
{
|
||||||
return sprintf(_('Login'));
|
return sprintf(_('Login'));
|
||||||
}
|
}
|
||||||
|
|
||||||
function redirectHome()
|
function redirectHome()
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -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,9 +30,8 @@ Daemon script for pushing new notices to Facebook.
|
|||||||
|
|
||||||
END_OF_FACEBOOK_HELP;
|
END_OF_FACEBOOK_HELP;
|
||||||
|
|
||||||
require_once INSTALLDIR.'/scripts/commandline.inc';
|
require_once INSTALLDIR . '/scripts/commandline.inc';
|
||||||
|
require_once INSTALLDIR . '/plugins/Facebook/facebookutil.php';
|
||||||
require_once INSTALLDIR . '/lib/facebookutil.php';
|
|
||||||
require_once INSTALLDIR . '/lib/queuehandler.php';
|
require_once INSTALLDIR . '/lib/queuehandler.php';
|
||||||
|
|
||||||
class FacebookQueueHandler extends QueueHandler
|
class FacebookQueueHandler extends QueueHandler
|
@ -17,9 +17,11 @@
|
|||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
|
if (!defined('STATUSNET') && !defined('LACONICA')) {
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
require_once INSTALLDIR.'/lib/facebookaction.php';
|
require_once INSTALLDIR . '/plugins/Facebook/facebookaction.php';
|
||||||
|
|
||||||
class FacebookremoveAction extends FacebookAction
|
class FacebookremoveAction extends FacebookAction
|
||||||
{
|
{
|
@ -17,9 +17,11 @@
|
|||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
|
if (!defined('STATUSNET') && !defined('LACONICA')) {
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
require_once INSTALLDIR.'/lib/facebookaction.php';
|
require_once INSTALLDIR . '/plugins/Facebook/facebookaction.php';
|
||||||
|
|
||||||
class FacebooksettingsAction extends FacebookAction
|
class FacebooksettingsAction extends FacebookAction
|
||||||
{
|
{
|
||||||
@ -91,16 +93,16 @@ class FacebooksettingsAction extends FacebookAction
|
|||||||
'id' => 'facebook_settings'));
|
'id' => 'facebook_settings'));
|
||||||
|
|
||||||
$this->elementStart('ul', 'form_data');
|
$this->elementStart('ul', 'form_data');
|
||||||
|
|
||||||
$this->elementStart('li');
|
$this->elementStart('li');
|
||||||
|
|
||||||
$this->checkbox('noticesync', _('Automatically update my Facebook status with my notices.'),
|
$this->checkbox('noticesync', _('Automatically update my Facebook status with my notices.'),
|
||||||
($this->flink) ? ($this->flink->noticesync & FOREIGN_NOTICE_SEND) : true);
|
($this->flink) ? ($this->flink->noticesync & FOREIGN_NOTICE_SEND) : true);
|
||||||
|
|
||||||
$this->elementEnd('li');
|
$this->elementEnd('li');
|
||||||
|
|
||||||
$this->elementStart('li');
|
$this->elementStart('li');
|
||||||
|
|
||||||
$this->checkbox('replysync', _('Send "@" replies to Facebook.'),
|
$this->checkbox('replysync', _('Send "@" replies to Facebook.'),
|
||||||
($this->flink) ? ($this->flink->noticesync & FOREIGN_NOTICE_SEND_REPLY) : true);
|
($this->flink) ? ($this->flink->noticesync & FOREIGN_NOTICE_SEND_REPLY) : true);
|
||||||
|
|
||||||
@ -115,15 +117,15 @@ class FacebooksettingsAction extends FacebookAction
|
|||||||
_('A string to prefix notices with.'));
|
_('A string to prefix notices with.'));
|
||||||
|
|
||||||
$this->elementEnd('li');
|
$this->elementEnd('li');
|
||||||
|
|
||||||
$this->elementStart('li');
|
$this->elementStart('li');
|
||||||
|
|
||||||
$this->submit('save', _('Save'));
|
$this->submit('save', _('Save'));
|
||||||
|
|
||||||
$this->elementEnd('li');
|
$this->elementEnd('li');
|
||||||
|
|
||||||
$this->elementEnd('ul');
|
$this->elementEnd('ul');
|
||||||
|
|
||||||
$this->elementEnd('form');
|
$this->elementEnd('form');
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
@ -148,8 +150,8 @@ class FacebooksettingsAction extends FacebookAction
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function title()
|
function title()
|
||||||
{
|
{
|
||||||
return _('Sync preferences');
|
return _('Sync preferences');
|
||||||
}
|
}
|
@ -17,9 +17,9 @@
|
|||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
require_once INSTALLDIR.'/extlib/facebook/facebook.php';
|
require_once INSTALLDIR . '/plugins/Facebook/facebook/facebook.php';
|
||||||
require_once INSTALLDIR.'/lib/facebookaction.php';
|
require_once INSTALLDIR . '/plugins/Facebook/facebookaction.php';
|
||||||
require_once INSTALLDIR.'/lib/noticelist.php';
|
require_once INSTALLDIR . '/lib/noticelist.php';
|
||||||
|
|
||||||
define("FACEBOOK_SERVICE", 2); // Facebook is foreign_service ID 2
|
define("FACEBOOK_SERVICE", 2); // Facebook is foreign_service ID 2
|
||||||
define("FACEBOOK_NOTICE_PREFIX", 1);
|
define("FACEBOOK_NOTICE_PREFIX", 1);
|
||||||
@ -258,3 +258,38 @@ function remove_facebook_app($flink)
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send a mail message to notify a user that her Facebook Application
|
||||||
|
* access has been removed.
|
||||||
|
*
|
||||||
|
* @param User $user user whose Facebook app link has been removed
|
||||||
|
*
|
||||||
|
* @return boolean success flag
|
||||||
|
*/
|
||||||
|
|
||||||
|
function mail_facebook_app_removed($user)
|
||||||
|
{
|
||||||
|
common_init_locale($user->language);
|
||||||
|
|
||||||
|
$profile = $user->getProfile();
|
||||||
|
|
||||||
|
$site_name = common_config('site', 'name');
|
||||||
|
|
||||||
|
$subject = sprintf(
|
||||||
|
_('Your %1$s Facebook application access has been disabled.',
|
||||||
|
$site_name));
|
||||||
|
|
||||||
|
$body = sprintf(_("Hi, %1\$s. We're sorry to inform you that we are " .
|
||||||
|
'unable to update your Facebook status from %2$s, and have disabled ' .
|
||||||
|
'the Facebook application for your account. This may be because ' .
|
||||||
|
'you have removed the Facebook application\'s authorization, or ' .
|
||||||
|
'have deleted your Facebook account. You can re-enable the ' .
|
||||||
|
'Facebook application and automatic status updating by ' .
|
||||||
|
"re-installing the %2\$s Facebook application.\n\nRegards,\n\n%2\$s"),
|
||||||
|
$user->nickname, $site_name);
|
||||||
|
|
||||||
|
common_init_locale();
|
||||||
|
return mail_to_user($user, $subject, $body);
|
||||||
|
|
||||||
|
}
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
@ -312,3 +312,40 @@ function remove_twitter_link($flink)
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send a mail message to notify a user that her Twitter bridge link
|
||||||
|
* has stopped working, and therefore has been removed. This can
|
||||||
|
* happen when the user changes her Twitter password, or otherwise
|
||||||
|
* revokes access.
|
||||||
|
*
|
||||||
|
* @param User $user user whose Twitter bridge link has been removed
|
||||||
|
*
|
||||||
|
* @return boolean success flag
|
||||||
|
*/
|
||||||
|
|
||||||
|
function mail_twitter_bridge_removed($user)
|
||||||
|
{
|
||||||
|
common_init_locale($user->language);
|
||||||
|
|
||||||
|
$profile = $user->getProfile();
|
||||||
|
|
||||||
|
$subject = sprintf(_('Your Twitter bridge has been disabled.'));
|
||||||
|
|
||||||
|
$site_name = common_config('site', 'name');
|
||||||
|
|
||||||
|
$body = sprintf(_('Hi, %1$s. We\'re sorry to inform you that your ' .
|
||||||
|
'link to Twitter has been disabled. We no longer seem to have ' .
|
||||||
|
'permission to update your Twitter status. (Did you revoke ' .
|
||||||
|
'%3$s\'s access?)' . "\n\n" .
|
||||||
|
'You can re-enable your Twitter bridge by visiting your ' .
|
||||||
|
"Twitter settings page:\n\n\t%2\$s\n\n" .
|
||||||
|
"Regards,\n%3\$s\n"),
|
||||||
|
$profile->getBestName(),
|
||||||
|
common_local_url('twittersettings'),
|
||||||
|
common_config('site', 'name'));
|
||||||
|
|
||||||
|
common_init_locale();
|
||||||
|
return mail_to_user($user, $subject, $body);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -39,7 +39,6 @@ $daemons = array();
|
|||||||
|
|
||||||
$daemons[] = INSTALLDIR.'/scripts/pluginqueuehandler.php';
|
$daemons[] = INSTALLDIR.'/scripts/pluginqueuehandler.php';
|
||||||
$daemons[] = INSTALLDIR.'/scripts/ombqueuehandler.php';
|
$daemons[] = INSTALLDIR.'/scripts/ombqueuehandler.php';
|
||||||
$daemons[] = INSTALLDIR.'/scripts/facebookqueuehandler.php';
|
|
||||||
$daemons[] = INSTALLDIR.'/scripts/pingqueuehandler.php';
|
$daemons[] = INSTALLDIR.'/scripts/pingqueuehandler.php';
|
||||||
|
|
||||||
if(common_config('xmpp','enabled')) {
|
if(common_config('xmpp','enabled')) {
|
||||||
|
@ -47,7 +47,9 @@ class URLDetectionTest extends PHPUnit_Framework_TestCase
|
|||||||
array('127.0.0.1/\'test',
|
array('127.0.0.1/\'test',
|
||||||
'<a href="http://127.0.0.1/\'test" title="http://127.0.0.1/\'test" rel="external">127.0.0.1/\'test</a>'),
|
'<a href="http://127.0.0.1/\'test" title="http://127.0.0.1/\'test" rel="external">127.0.0.1/\'test</a>'),
|
||||||
array('127.0.0.1/"test',
|
array('127.0.0.1/"test',
|
||||||
'<a href="http://127.0.0.1/"test" title="http://127.0.0.1/"test" rel="external">127.0.0.1/"test</a>'),
|
'<a href="http://127.0.0.1/" title="http://127.0.0.1/" rel="external">127.0.0.1/</a>"test'),
|
||||||
|
array('127.0.0.1/test"test',
|
||||||
|
'<a href="http://127.0.0.1/test" title="http://127.0.0.1/test" rel="external">127.0.0.1/test</a>"test'),
|
||||||
array('127.0.0.1/-test',
|
array('127.0.0.1/-test',
|
||||||
'<a href="http://127.0.0.1/-test" title="http://127.0.0.1/-test" rel="external">127.0.0.1/-test</a>'),
|
'<a href="http://127.0.0.1/-test" title="http://127.0.0.1/-test" rel="external">127.0.0.1/-test</a>'),
|
||||||
array('127.0.0.1/_test',
|
array('127.0.0.1/_test',
|
||||||
@ -170,6 +172,8 @@ class URLDetectionTest extends PHPUnit_Framework_TestCase
|
|||||||
'\'<a href="http://example.com/" title="http://example.com/" rel="external">http://example.com</a>\''),
|
'\'<a href="http://example.com/" title="http://example.com/" rel="external">http://example.com</a>\''),
|
||||||
array('"http://example.com"',
|
array('"http://example.com"',
|
||||||
'"<a href="http://example.com/" title="http://example.com/" rel="external">http://example.com</a>"'),
|
'"<a href="http://example.com/" title="http://example.com/" rel="external">http://example.com</a>"'),
|
||||||
|
array('"http://example.com/"',
|
||||||
|
'"<a href="http://example.com/" title="http://example.com/" rel="external">http://example.com/</a>"'),
|
||||||
array('http://example.com',
|
array('http://example.com',
|
||||||
'<a href="http://example.com/" title="http://example.com/" rel="external">http://example.com</a>'),
|
'<a href="http://example.com/" title="http://example.com/" rel="external">http://example.com</a>'),
|
||||||
array('(http://example.com)',
|
array('(http://example.com)',
|
||||||
|
Loading…
Reference in New Issue
Block a user