]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
When a notice is posted with an attachment, the facebook stream update has media...
authorCraig Andrews <candrews@integralblue.com>
Thu, 9 Jul 2009 22:42:19 +0000 (18:42 -0400)
committerCraig Andrews <candrews@integralblue.com>
Thu, 9 Jul 2009 22:42:19 +0000 (18:42 -0400)
http://laconi.ca/trac/ticket/1685

actions/facebookhome.php
actions/facebooklogin.php
actions/facebooksettings.php
lib/facebookaction.php
lib/facebookutil.php

index 34989c9786aa9814f9396d49bcba0db3934e9af3..6d8d0745d78ae4a524e3b1e9f58139747ab43e89 100644 (file)
@@ -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'));
index 22007da4fa6940315795058ce016b177a5747416..aa86cfbc0ce2c8200a7b386a2b3d31fbbe06f3d0 100644 (file)
@@ -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') {
index ee2c279ab5a95b2289e02148d587d043f7666fe9..c3b364743a0d2e6c383dbf94273365ecf15f0029 100644 (file)
@@ -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')));
index 1ae90d53bdeb534afd8a65a1f5f51c5b90a2b480..5be2f2fe6603f9296a870e4ad7f99ae9b47dcb0f 100644 (file)
@@ -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);
 
     }
 
index 632ec4bade172e8f708f965e7b83d5f7a9e1d07b..85077c254ae1dbee2f50b846f07e342d1d264326 100644 (file)
@@ -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);