summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZach Copley <zach@controlyourself.ca>2009-07-10 15:28:26 -0700
committerZach Copley <zach@controlyourself.ca>2009-07-10 15:28:26 -0700
commit49e4f958eb7ff89bfb237da9bf810a0d668104e0 (patch)
tree85a66a8ba2aabe9bae288de7d4e59e1991502962
parent36d2c66eee9ddc56acca5f9250521c7f96dfc92f (diff)
parent4a1d7ad0829aeeece7a392ed64bce3d95c21f87e (diff)
Merge branch '0.8.x' of git@gitorious.org:laconica/mainline into 0.8.x
* '0.8.x' of git@gitorious.org:laconica/mainline: When a notice is posted with an attachment, the facebook stream update has media displayed inline, or as links.
-rw-r--r--actions/facebookhome.php4
-rw-r--r--actions/facebooklogin.php4
-rw-r--r--actions/facebooksettings.php4
-rw-r--r--lib/facebookaction.php15
-rw-r--r--lib/facebookutil.php61
5 files changed, 65 insertions, 23 deletions
diff --git a/actions/facebookhome.php b/actions/facebookhome.php
index 34989c978..6d8d0745d 100644
--- a/actions/facebookhome.php
+++ b/actions/facebookhome.php
@@ -57,7 +57,7 @@ class FacebookhomeAction extends FacebookAction
// 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('status_update')) {
+ if (!$this->facebook->api_client->users_hasAppPermission('publish_stream')) {
if ($this->facebook->api_client->data_getUserPreference(
FACEBOOK_PROMPTED_UPDATE_PREF) != 'true') {
@@ -203,7 +203,7 @@ class FacebookhomeAction extends FacebookAction
$api_key = common_config('facebook', 'apikey');
$auth_url = 'http://www.facebook.com/authorize.php?api_key=' .
- $api_key . '&v=1.0&ext_perm=status_update&next=' . $next .
+ $api_key . '&v=1.0&ext_perm=publish_stream&next=' . $next .
'&next_cancel=' . $next . '&submit=skip';
$this->elementStart('span', array('class' => 'facebook-button'));
diff --git a/actions/facebooklogin.php b/actions/facebooklogin.php
index 22007da4f..aa86cfbc0 100644
--- a/actions/facebooklogin.php
+++ b/actions/facebooklogin.php
@@ -31,7 +31,7 @@ class FacebookinviteAction extends FacebookAction
$this->error = $error;
if ($this->flink) {
- if (!$this->facebook->api_client->users_hasAppPermission('status_update') &&
+ if (!$this->facebook->api_client->users_hasAppPermission('publish_stream') &&
$this->facebook->api_client->data_getUserPreference(
FACEBOOK_PROMPTED_UPDATE_PREF) == 'true') {
@@ -60,7 +60,7 @@ class FacebookinviteAction extends FacebookAction
// 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('status_update')) {
+ if (!$this->facebook->api_client->users_hasAppPermission('publish_stream')) {
if ($this->facebook->api_client->data_getUserPreference(
FACEBOOK_PROMPTED_UPDATE_PREF) != 'true') {
diff --git a/actions/facebooksettings.php b/actions/facebooksettings.php
index ee2c279ab..c3b364743 100644
--- a/actions/facebooksettings.php
+++ b/actions/facebooksettings.php
@@ -78,7 +78,7 @@ class FacebooksettingsAction extends FacebookAction
}
}
- if ($this->facebook->api_client->users_hasAppPermission('status_update')) {
+ if ($this->facebook->api_client->users_hasAppPermission('publish_stream')) {
$this->elementStart('form', array('method' => 'post',
'id' => 'facebook_settings'));
@@ -131,7 +131,7 @@ class FacebooksettingsAction extends FacebookAction
$this->elementStart('ul', array('id' => 'fb-permissions-list'));
$this->elementStart('li', array('id' => 'fb-permissions-item'));
- $this->elementStart('fb:prompt-permission', array('perms' => 'status_update',
+ $this->elementStart('fb:prompt-permission', array('perms' => 'publish_stream',
'next_fbjs' => 'document.setLocation(\'' . "$this->app_uri/settings.php" . '\')'));
$this->element('span', array('class' => 'facebook-button'),
sprintf(_('Allow %s to update my Facebook status'), common_config('site', 'name')));
diff --git a/lib/facebookaction.php b/lib/facebookaction.php
index 1ae90d53b..5be2f2fe6 100644
--- a/lib/facebookaction.php
+++ b/lib/facebookaction.php
@@ -460,16 +460,6 @@ class FacebookAction extends Action
}
}
- function updateFacebookStatus($notice)
- {
- $prefix = $this->facebook->api_client->data_getUserPreference(FACEBOOK_NOTICE_PREFIX, $this->fbuid);
- $content = "$prefix $notice->content";
-
- if ($this->facebook->api_client->users_hasAppPermission('status_update', $this->fbuid)) {
- $this->facebook->api_client->users_setStatus($content, $this->fbuid, false, true);
- }
- }
-
function saveNewNotice()
{
@@ -504,7 +494,7 @@ class FacebookAction extends Action
$replyto = $this->trimmed('inreplyto');
$notice = Notice::saveNew($user->id, $content,
- 'Facebook', 1, ($replyto == 'false') ? null : $replyto);
+ 'web', 1, ($replyto == 'false') ? null : $replyto);
if (is_string($notice)) {
$this->showPage($notice);
@@ -514,8 +504,7 @@ class FacebookAction extends Action
common_broadcast_notice($notice);
// Also update the user's Facebook status
- $this->updateFacebookStatus($notice);
- $this->updateProfileBox($notice);
+ facebookBroadcastNotice($notice);
}
diff --git a/lib/facebookutil.php b/lib/facebookutil.php
index 632ec4bad..85077c254 100644
--- a/lib/facebookutil.php
+++ b/lib/facebookutil.php
@@ -86,13 +86,17 @@ function isFacebookBound($notice, $flink) {
// Check to see if the user has given the FB app status update perms
$result = $facebook->api_client->
- users_hasAppPermission('status_update', $fbuid);
+ users_hasAppPermission('publish_stream', $fbuid);
if ($result != 1) {
+ $result = $facebook->api_client->
+ users_hasAppPermission('status_update', $fbuid);
+ }
+ if ($result != 1) {
$user = $flink->getUser();
$msg = "Not sending notice $notice->id to Facebook " .
"because user $user->nickname hasn't given the " .
- 'Facebook app \'status_update\' permission.';
+ 'Facebook app \'status_update\' or \'publish_stream\' permission.';
common_debug($msg);
$success = false;
}
@@ -138,7 +142,56 @@ function facebookBroadcastNotice($notice)
// Okay, we're good to go, update the FB status
try {
- $facebook->api_client->users_setStatus($status, $fbuid, false, true);
+ $result = $facebook->api_client->
+ users_hasAppPermission('publish_stream', $fbuid);
+ if($result == 1){
+ // authorized to use the stream api, so use it
+ $fbattachment = null;
+ $attachments = $notice->attachments();
+ if($attachments){
+ $fbattachment=array();
+ $fbattachment['media']=array();
+ //facebook only supports one attachment per item
+ $attachment = $attachments[0];
+ $fbmedia=array();
+ if(strncmp($attachment->mimetype,'image/',strlen('image/'))==0){
+ $fbmedia['type']='image';
+ $fbmedia['src']=$attachment->url;
+ $fbmedia['href']=$attachment->url;
+ $fbattachment['media'][]=$fbmedia;
+/* Video doesn't seem to work. The notice never makes it to facebook, and no error is reported.
+ }else if(strncmp($attachment->mimetype,'video/',strlen('image/'))==0 || $attachment->mimetype="application/ogg"){
+ $fbmedia['type']='video';
+ $fbmedia['video_src']=$attachment->url;
+ // http://wiki.developers.facebook.com/index.php/Attachment_%28Streams%29
+ // says that preview_img is required... but we have no value to put in it
+ // $fbmedia['preview_img']=$attachment->url;
+ if($attachment->title){
+ $fbmedia['video_title']=$attachment->title;
+ }
+ $fbmedia['video_type']=$attachment->mimetype;
+ $fbattachment['media'][]=$fbmedia;
+*/
+ }else if($attachment->mimetype=='audio/mpeg'){
+ $fbmedia['type']='mp3';
+ $fbmedia['src']=$attachment->url;
+ $fbattachment['media'][]=$fbmedia;
+ }else if($attachment->mimetype=='application/x-shockwave-flash'){
+ $fbmedia['type']='flash';
+ // http://wiki.developers.facebook.com/index.php/Attachment_%28Streams%29
+ // says that imgsrc is required... but we have no value to put in it
+ // $fbmedia['imgsrc']='';
+ $fbmedia['swfsrc']=$attachment->url;
+ $fbattachment['media'][]=$fbmedia;
+ }else{
+ $fbattachment['name']=($attachment->title?$attachment->title:$attachment->url);
+ $fbattachment['href']=$attachment->url;
+ }
+ }
+ $facebook->api_client->stream_publish($status, $fbattachment, null, null, $fbuid);
+ }else{
+ $facebook->api_client->users_setStatus($status, $fbuid, false, true);
+ }
} catch(FacebookRestClientException $e) {
common_log(LOG_ERR, $e->getMessage());
common_log(LOG_ERR,
@@ -150,7 +203,7 @@ function facebookBroadcastNotice($notice)
if ($code >= 200) {
// 200 The application does not have permission to operate on the passed in uid parameter.
- // 250 Updating status requires the extended permission status_update.
+ // 250 Updating status requires the extended permission status_update or publish_stream.
// see: http://wiki.developers.facebook.com/index.php/Users.setStatus#Example_Return_XML
remove_facebook_app($flink);