FacebookPlugin: Fix up FBML canvas app so it keeps working after

Facebook removed Profile Boxes and some API calls it relied upon.
See: http://developers.facebook.com/roadmap/deprecations
This commit is contained in:
Zach Copley 2011-01-31 23:42:43 +00:00
parent a7abb2323e
commit 7f1b872088
3 changed files with 16 additions and 87 deletions

View File

@ -81,9 +81,20 @@ class FacebookAction extends Action
function showStylesheets()
{
// Loading CSS via files in Facebook FBML Canvas apps is still busted as of 1/31/11
// See: http://bugs.developers.facebook.net/show_bug.cgi?id=10052
$this->cssLink('css/display.css', 'base');
$this->cssLink('css/display.css', null, 'screen, projection, tv');
$this->cssLink('plugins/Facebook/facebookapp.css');
// Also, Facebook refuses to let me do this... gar!
/*
$baseCss = file_get_contents(INSTALLDIR . '/theme/base/css/display.css');
$this->style($baseCss);
$facebookCss = file_get_contents(INSTALLDIR . '/plugins/Facebook/facebookapp.css');
$this->style($facebookCss);
*/
}
function showScripts()
@ -292,31 +303,6 @@ class FacebookAction extends Action
$this->elementEnd('div');
}
function updateProfileBox($notice)
{
// Need to include inline CSS for styling the Profile box
$app_props = $this->facebook->api_client->Admin_getAppProperties(array('icon_url'));
$icon_url = $app_props['icon_url'];
$style = '<style> .entry-title *, .entry-content * { font-size:14px; font-family:"Lucida Sans Unicode", "Lucida Grande", sans-serif; } .entry-title a, .entry-content a { color:#002E6E; } .entry-title .vcard .photo { float:left; display:inline; margin-right:11px; margin-bottom:11px } .entry-title { margin-bottom:11px; } .entry-title p.entry-content { display:inline; margin-left:5px; } div.entry-content { clear:both; } div.entry-content dl, div.entry-content dt, div.entry-content dd { display:inline; text-transform:lowercase; } div.entry-content dd, div.entry-content .device dt { margin-left:0; margin-right:5px; } div.entry-content dl.timestamp dt, div.entry-content dl.response dt { display:none; } div.entry-content dd a { display:inline-block; } #facebook_statusnet_app { text-indent:-9999px; height:16px; width:16px; display:block; background:url('.$icon_url.') no-repeat 0 0; float:right; } </style>';
$this->xw->openMemory();
$item = new FacebookProfileBoxNotice($notice, $this);
$item->show();
$fbml = "<fb:wide>$style " . $this->xw->outputMemory(false) . "</fb:wide>";
$fbml .= "<fb:narrow>$style " . $this->xw->outputMemory(false) . "</fb:narrow>";
$fbml_main = "<fb:narrow>$style " . $this->xw->outputMemory(false) . "</fb:narrow>";
$this->facebook->api_client->profile_setFBML(null, $this->fbuid, $fbml, null, null, $fbml_main);
$this->xw->openURI('php://output');
}
/**
* Generate pagination links
*

View File

@ -44,33 +44,15 @@ class FacebookhomeAction extends FacebookAction
{
parent::handle($args);
// If the user has opted not to initially allow the app to have
// Facebook status update permission, store that preference. Only
// promt the user the first time she uses the app
if ($this->arg('skip') || $args['fb_sig_request_method'] == 'GET') {
$this->facebook->api_client->data_setUserPreference(
FACEBOOK_PROMPTED_UPDATE_PREF, 'true');
}
if ($this->flink) {
if (!empty($this->flink)) {
$this->user = $this->flink->getUser();
// If this is the first time the user has started the app
// prompt for Facebook status update permission
if (!$this->facebook->api_client->users_hasAppPermission('publish_stream')) {
if ($this->facebook->api_client->data_getUserPreference(
FACEBOOK_PROMPTED_UPDATE_PREF) != 'true') {
$this->getUpdatePermission();
return;
}
}
// Make sure the user's profile box has the lastest notice
$notice = $this->user->getCurrentNotice();
if ($notice) {
$this->updateProfileBox($notice);
}
$this->getUpdatePermission();
return;
}
if ($this->arg('status_submit') == 'Send') {
$this->saveNewNotice();
@ -114,8 +96,6 @@ class FacebookhomeAction extends FacebookAction
// XXX: Do some error handling here
$this->setDefaults();
$this->getUpdatePermission();
return;
} else {
@ -127,12 +107,6 @@ class FacebookhomeAction extends FacebookAction
$this->showFooter();
}
function setDefaults()
{
$this->facebook->api_client->data_setUserPreference(
FACEBOOK_PROMPTED_UPDATE_PREF, 'false');
}
function showNoticeForm()
{
$post_action = "$this->app_uri/index.php";

View File

@ -50,6 +50,7 @@ function getFacebook()
function isFacebookBound($notice, $flink) {
if (empty($flink)) {
common_debug("QQQQQ empty flink");
return false;
}
@ -157,11 +158,6 @@ function facebookBroadcastNotice($notice)
common_log(LOG_WARNING, $msg);
}
// Finally, attempt to update the user's profile box
if ($canPublish == 1 || $canUpdate == 1) {
updateProfileBox($facebook, $flink, $notice, $user);
}
} catch (FacebookRestClientException $e) {
return handleFacebookError($e, $notice, $flink);
}
@ -293,33 +289,6 @@ function publishStream($notice, $user, $fbuid)
);
}
function updateProfileBox($facebook, $flink, $notice, $user) {
$facebook = getFacebook();
$fbaction = new FacebookAction(
$output = 'php://output',
$indent = null,
$facebook,
$flink
);
$fbuid = $flink->foreign_id;
common_debug(
'FacebookPlugin - Attempting to update profile box with '
. "content from notice $notice->id for $user->nickname ($user->id), "
. "Facebook UID: $fbuid"
);
$fbaction->updateProfileBox($notice);
common_debug(
'FacebookPlugin - finished updating profile box for '
. "$user->nickname ($user->id) Facebook UID: $fbuid"
);
}
function format_attachments($attachments)
{
$fbattachment = array();