]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - plugins/FacebookBridge/lib/facebookclient.php
Merge remote-tracking branch 'upstream/master' into social-master
[quix0rs-gnu-social.git] / plugins / FacebookBridge / lib / facebookclient.php
index da8c95c9f2dfdf14e6a8b7c6c5845520a2810fc4..5faad5dfb767f009606311147d935408a6a57dce 100644 (file)
@@ -23,7 +23,7 @@
  * @package   StatusNet
  * @author    Craig Andrews <candrews@integralblue.com>
  * @author    Zach Copley <zach@status.net>
- * @copyright 2009-2010 StatusNet, Inc.
+ * @copyright 2009-2011 StatusNet, Inc.
  * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
  * @link      http://status.net/
  */
@@ -48,7 +48,12 @@ class Facebookclient
     protected $notice        = null; // The user's notice
     protected $user          = null; // Sender of the notice
 
-    function __construct($notice)
+    /**
+     *
+     * @param Notice $notice the notice to manipulate
+     * @param Profile $profile local user to act as; if left empty, the notice's poster will be used.
+     */
+    function __construct($notice, $profile=null)
     {
         $this->facebook = self::getFacebook();
 
@@ -60,13 +65,13 @@ class Facebookclient
 
         $this->notice = $notice;
 
-        $this->flink = Foreign_link::getByUserID(
-            $notice->profile_id,
-            FACEBOOK_SERVICE
-        );
-
-        if (!empty($this->flink)) {
+        $profile_id = $profile ? $profile->id : $notice->profile_id;
+        try {
+            $this->flink = Foreign_link::getByUserID($profile_id, FACEBOOK_SERVICE);
             $this->user = $this->flink->getUser();
+        } catch (NoResultException $e) {
+            // at least $this->flink could've gotten set to something,
+            // but the logic that was here before didn't care, so let's not care either
         }
     }
 
@@ -128,7 +133,6 @@ class Facebookclient
      */
     static function facebookBroadcastNotice($notice)
     {
-        common_debug("ZZZZZ facebookBroadcastNotice() - entered ", __FILE__);
         $client = new Facebookclient($notice);
         return $client->sendNotice();
     }
@@ -138,8 +142,6 @@ class Facebookclient
      */
     function isFacebookBound() {
 
-        common_debug("ZZZZZ isFacebookBound() - entered", __FILE__);
-
         if (empty($this->flink)) {
             // User hasn't setup bridging
             return false;
@@ -173,19 +175,12 @@ class Facebookclient
 
         // If it's not a reply, or if the user WANTS to send @-replies,
         // then, yeah, it can go to Facebook.
-        if (!preg_match('/@[a-zA-Z0-9_]{1,15}\b/u', $this->notice->content) ||
+
+        if (empty($this->notice->reply_to) ||
             ($this->flink->noticesync & FOREIGN_NOTICE_SEND_REPLY)) {
             return true;
         }
 
-        common_debug(
-            sprintf(
-                "ZZZZZ isFacebookBound() - notice %d this notice does not go to Facebook",
-                $this->notice->id
-            ),
-            __FILE__
-        );
-
         return false;
     }
 
@@ -208,6 +203,9 @@ class Facebookclient
                 return $this->sendGraph();
             }
         }
+
+        // dequeue
+        return true;
     }
 
     /*
@@ -342,7 +340,8 @@ class Facebookclient
     function checkPermission($permission)
     {
         if (!in_array($permission, array('publish_stream', 'status_update'))) {
-             throw new ServerException("No such permission!");
+             // TRANS: Server exception thrown when permission check fails.
+             throw new ServerException(_('No such permission!'));
         }
 
         $fbuid = $this->flink->foreign_id;
@@ -399,7 +398,6 @@ class Facebookclient
             );
 
             return false;
-
         }
     }
 
@@ -463,7 +461,7 @@ class Facebookclient
                     ),
                     __FILE__
                 );
-            // @fixme: We want to rety at a later time when the throttling has expired
+            // @todo FIXME: We want to rety at a later time when the throttling has expired
             // instead of just giving up.
             return true;
             break;
@@ -584,7 +582,6 @@ class Facebookclient
         );
 
         if (!empty($result)) { // result will contain the item ID
-
             // Save a mapping
             Notice_to_item::saveNew($this->notice->id, $result);
 
@@ -600,7 +597,6 @@ class Facebookclient
                 ),
                 __FILE__
             );
-
         } else {
 
             $msg = sprintf(
@@ -631,7 +627,7 @@ class Facebookclient
 
         // Facebook has a 420-char hardcoded max.
         if (mb_strlen($statustxt) > 420) {
-            $noticeUrl = common_shorten_url($this->notice->uri);
+            $noticeUrl = common_shorten_url($this->notice->getUrl());
             $urlLen = mb_strlen($noticeUrl);
             $txt = mb_substr($statustxt, 0, 420 - ($urlLen + 3)) . ' … ' . $noticeUrl;
         }
@@ -654,9 +650,10 @@ class Facebookclient
 
         foreach($attachments as $attachment)
         {
-            if($enclosure = $attachment->getEnclosure()){
+            try {
+                $enclosure = $attachment->getEnclosure();
                 $fbmedia = $this->getFacebookMedia($enclosure);
-            }else{
+            } catch (ServerException $e) {
                 $fbmedia = $this->getFacebookMedia($attachment);
             }
             if($fbmedia){
@@ -742,7 +739,6 @@ class Facebookclient
             $result = $this->mailFacebookDisconnect();
 
             if (!$result) {
-
                 $msg = 'Unable to send email to notify %s (%d), fbuid %d '
                      . 'about his/her Facebook link being removed.';
 
@@ -757,9 +753,7 @@ class Facebookclient
                     __FILE__
                 );
             }
-
         } else {
-
             $msg = 'Unable to send email to notify %s (%d), fbuid %d '
                  . 'about his/her Facebook link being removed because the '
                  . 'user has not set an email address.';
@@ -791,26 +785,23 @@ class Facebookclient
 
         common_switch_locale($this->user->language);
 
+        // TRANS: E-mail subject.
         $subject = _m('Your Facebook connection has been removed');
 
-        $msg = <<<BODY
-Hi %1$s,
+        // TRANS: E-mail body. %1$s is a username, %2$s is the StatusNet sitename.
+        $msg = _m("Hi %1\$s,\n\n".
+                  "We are sorry to inform you we are unable to publish your notice to\n".
+                  "Facebook, and have removed the connection between your %2\$s account and\n".
+                  "Facebook.\n\n".
+                  "This may have happened because you have removed permission for %2\$s\n".
+                  "to post on your behalf, or perhaps you have deactivated your Facebook\n".
+                  "account. You can reconnect your %2\$s account to Facebook at any time by\n".
+                  "logging in with Facebook again.\n\n".
+                  "Sincerely,\n\n".
+                  "%2\$s\n");
 
-We're sorry to inform you we are unable to publish your notice to
-Facebook, and have removed the connection between your %2$s account and
-Facebook.
-
-This may have happened because you have removed permission for %2$s
-to post on your behalf, or perhaps you have deactivated your Facebook
-account. You can reconnect your %s account to Facebook at any time by
-logging in with Facebook again.
-
-Sincerely,
-
-%2$s
-BODY;
         $body = sprintf(
-            _m($msg),
+            $msg,
             $this->user->nickname,
             $siteName
         );
@@ -850,22 +841,21 @@ BODY;
 
         common_switch_locale($user->language);
 
+        // TRANS: E-mail subject. %s is the StatusNet sitename.
         $subject = _m('Contact the %s administrator to retrieve your account');
 
-        $msg = <<<BODY
-Hi %1$s,
+        // TRANS: E-mail body. %1$s is a username,
+        // TRANS: %2$s is the StatusNet sitename, %3$s is the site contact e-mail address.
+        $msg = _m("Hi %1\$s,\n\n".
+                  "We have noticed you have deauthorized the Facebook connection for your\n".
+                  "%2\$s account.  You have not set a password for your %2\$s account yet, so\n".
+                  "you will not be able to login. If you wish to continue using your %2\$s\n".
+                  "account, please contact the site administrator (%3\$s) to set a password.\n\n".
+                  "Sincerely,\n\n".
+                  "%2\$s\n");
 
-We've noticed you have deauthorized the Facebook connection for your
-%2$s account.  You have not set a password for your %2$s account yet, so
-you will not be able to login. If you wish to continue using your %2$s
-account, please contact the site administrator (%3$s) to set a password.
-
-Sincerely,
-
-%2$s
-BODY;
         $body = sprintf(
-            _m($msg),
+            $msg,
             $user->nickname,
             $siteName,
             $siteEmail
@@ -907,7 +897,7 @@ BODY;
      */
     static function facebookStatusId($notice)
     {
-        $n2i = Notice_to_item::staticGet('notice_id', $notice->id);
+        $n2i = Notice_to_item::getKV('notice_id', $notice->id);
 
         if (empty($n2i)) {
             return null;
@@ -927,30 +917,29 @@ BODY;
     static function addFacebookUser($fbuser)
     {
         // remove any existing, possibly outdated, record
-        $luser = Foreign_user::getForeignUser($fbuser['id'], FACEBOOK_SERVICE);
-
-        if (!empty($luser)) {
-
-            $result = $luser->delete();
-
+        try {
+            $fuser = Foreign_user::getForeignUser($fbuser->id, FACEBOOK_SERVICE);
+            $result = $fuser->delete();
             if ($result != false) {
                 common_log(
                     LOG_INFO,
                     sprintf(
                         'Removed old Facebook user: %s, fbuid %d',
-                        $fbuid['name'],
-                        $fbuid['id']
+                        $fbuid->name,
+                        $fbuid->id
                     ),
                     __FILE__
                 );
             }
+        } catch (NoResultException $e) {
+            // no old foreign users exist for this id
         }
 
         $fuser = new Foreign_user();
 
-        $fuser->nickname = $fbuser['name'];
-        $fuser->uri      = $fbuser['link'];
-        $fuser->id       = $fbuser['id'];
+        $fuser->nickname = $fbuser->username;
+        $fuser->uri      = $fbuser->link;
+        $fuser->id       = $fbuser->id;
         $fuser->service  = FACEBOOK_SERVICE;
         $fuser->created  = common_sql_now();
 
@@ -961,8 +950,8 @@ BODY;
                 LOG_WARNING,
                     sprintf(
                         'Failed to add new Facebook user: %s, fbuid %d',
-                        $fbuser['name'],
-                        $fbuser['id']
+                        $fbuser->username,
+                        $fbuser->id
                     ),
                     __FILE__
             );
@@ -973,8 +962,8 @@ BODY;
                 LOG_INFO,
                 sprintf(
                     'Added new Facebook user: %s, fbuid %d',
-                    $fbuser['name'],
-                    $fbuser['id']
+                    $fbuser->name,
+                    $fbuser->id
                 ),
                 __FILE__
             );
@@ -989,12 +978,10 @@ BODY;
      */
     function streamRemove()
     {
-        $n2i = Notice_to_item::staticGet('notice_id', $this->notice->id);
+        $n2i = Notice_to_item::getKV('notice_id', $this->notice->id);
 
         if (!empty($this->flink) && !empty($n2i)) {
-
             try {
-
                 $result = $this->facebook->api(
                     array(
                         'method'  => 'stream.remove',
@@ -1004,7 +991,6 @@ BODY;
                 );
 
                 if (!empty($result) && result == true) {
-
                     common_log(
                       LOG_INFO,
                         sprintf(
@@ -1022,7 +1008,6 @@ BODY;
                 } else {
                     throw new FaceboookApiException(var_export($result, true));
                 }
-
             } catch (FacebookApiException $e) {
                 common_log(
                   LOG_WARNING,
@@ -1048,12 +1033,10 @@ BODY;
      */
     function like()
     {
-        $n2i = Notice_to_item::staticGet('notice_id', $this->notice->id);
+        $n2i = Notice_to_item::getKV('notice_id', $this->notice->id);
 
         if (!empty($this->flink) && !empty($n2i)) {
-
             try {
-
                 $result = $this->facebook->api(
                     array(
                         'method'  => 'stream.addlike',
@@ -1063,7 +1046,6 @@ BODY;
                 );
 
                 if (!empty($result) && result == true) {
-
                     common_log(
                       LOG_INFO,
                         sprintf(
@@ -1075,11 +1057,9 @@ BODY;
                         ),
                         __FILE__
                     );
-
                 } else {
                     throw new FacebookApiException(var_export($result, true));
                 }
-
             } catch (FacebookApiException $e) {
                 common_log(
                   LOG_WARNING,
@@ -1104,12 +1084,10 @@ BODY;
      */
     function unLike()
     {
-        $n2i = Notice_to_item::staticGet('notice_id', $this->notice->id);
+        $n2i = Notice_to_item::getKV('notice_id', $this->notice->id);
 
         if (!empty($this->flink) && !empty($n2i)) {
-
             try {
-
                 $result = $this->facebook->api(
                     array(
                         'method'  => 'stream.removeLike',
@@ -1119,7 +1097,6 @@ BODY;
                 );
 
                 if (!empty($result) && result == true) {
-
                     common_log(
                       LOG_INFO,
                         sprintf(
@@ -1135,7 +1112,6 @@ BODY;
                 } else {
                     throw new FacebookApiException(var_export($result, true));
                 }
-
             } catch (FacebookApiException $e) {
                   common_log(
                   LOG_WARNING,
@@ -1153,5 +1129,4 @@ BODY;
             }
         }
     }
-
 }