* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+if (!defined('STATUSNET')) {
+ exit(1);
+}
+
require_once INSTALLDIR . '/plugins/Facebook/facebook/facebook.php';
require_once INSTALLDIR . '/plugins/Facebook/facebookaction.php';
require_once INSTALLDIR . '/lib/noticelist.php';
}
function isFacebookBound($notice, $flink) {
-
if (empty($flink)) {
return false;
}
// Avoid a loop
-
if ($notice->source == 'Facebook') {
common_log(LOG_INFO, "Skipping notice $notice->id because its " .
'source is Facebook.');
}
// If the user does not want to broadcast to Facebook, move along
-
if (!($flink->noticesync & FOREIGN_NOTICE_SEND == FOREIGN_NOTICE_SEND)) {
common_log(LOG_INFO, "Skipping notice $notice->id " .
'because user has FOREIGN_NOTICE_SEND bit off.');
// 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', $notice->content) ||
($flink->noticesync & FOREIGN_NOTICE_SEND_REPLY)) {
return true;
}
return false;
-
}
function facebookBroadcastNotice($notice)
);
if (isFacebookBound($notice, $flink)) {
-
// Okay, we're good to go, update the FB status
-
$fbuid = $flink->foreign_id;
$user = $flink->getUser();
try {
-
// Check permissions
-
common_debug(
'FacebookPlugin - checking for publish_stream permission for user '
. "$user->nickname ($user->id), Facebook UID: $fbuid"
// NOTE: $facebook->api_client->users_hasAppPermission('publish_stream', $fbuid)
// has been returning bogus results, so we're using FQL to check for
// publish_stream permission now
-
$fql = "SELECT publish_stream FROM permissions WHERE uid = $fbuid";
$result = $facebook->api_client->fql_query($fql);
}
// Post to Facebook
-
if ($notice->hasAttachments() && $canPublish == 1) {
publishStream($notice, $user, $fbuid);
} elseif ($canUpdate == 1 || $canPublish == 1) {
}
// Finally, attempt to update the user's profile box
-
if ($canPublish == 1 || $canUpdate == 1) {
updateProfileBox($facebook, $flink, $notice, $user);
}
. "\"%s\" (Notice details: nickname=%s, user ID=%d, Facebook ID=%d, notice content=\"%s\"). "
. "Removing notice from the Facebook queue for safety.";
common_log(
- LOG_ERROR, sprintf(
+ LOG_ERR, sprintf(
$msg,
$notice->id,
$errmsg,
default:
$msg = "FacebookPlugin - Facebook returned an error we don't know how to deal with while trying to "
. "post notice %d. Error code: %d, error message: \"%s\". (Notice details: "
- . "nickname=%s, user ID=%d, Facebook ID=%d, notice content=\"%s\"). Re-queueing "
- . "notice, and will try to send again later.";
+ . "nickname=%s, user ID=%d, Facebook ID=%d, notice content=\"%s\"). Removing notice "
+ . "from the Facebook queue for safety.";
common_log(
- LOG_ERROR, sprintf(
+ LOG_ERR, sprintf(
$msg,
$notice->id,
$code,
$notice->content
)
);
- // Re-queue and try again later
- return false;
+ return true; // dequeue
break;
}
}
. "Facebook UID: $fbuid"
);
- $text = formatNotice($notice, $user, $fbuid);
-
$facebook = getFacebook();
$result = $facebook->api_client->users_setStatus(
- $text,
+ $notice->content,
$fbuid,
false,
true
. "Facebook UID: $fbuid"
);
- $text = formatNotice($notice, $user, $fbuid);
$fbattachment = format_attachments($notice->attachments());
$facebook = getFacebook();
$facebook->api_client->stream_publish(
- $text,
+ $notice->content,
$fbattachment,
null,
null,
);
}
-function formatNotice($notice, $user, $fbuid)
-{
- // Get the status 'verb' the user has set, if any
-
- common_debug(
- "FacebookPlugin - Looking to see if $user->nickname ($user->id), "
- . "Facebook UID: $fbuid has set a verb for Facebook posting..."
- );
-
- $facebook = getFacebook();
- $verb = trim(
- $facebook->api_client->data_getUserPreference(
- FACEBOOK_NOTICE_PREFIX,
- $fbuid
- )
- );
-
- common_debug("Facebook returned " . var_export($verb, true));
-
- $text = null;
-
- if (!empty($verb)) {
- common_debug("FacebookPlugin - found a verb: $verb");
- $text = trim($verb) . ' ' . $notice->content;
- } else {
- common_debug("FacebookPlugin - no verb found.");
- $text = $notice->content;
- }
-
- return $text;
-}
-
function updateProfileBox($facebook, $flink, $notice, $user) {
$facebook = getFacebook();
common_debug(
'FacebookPlugin - Attempting to update profile box with '
- . "content from notice $notice->id for $user->nickname ($user->id)"
+ . "content from notice $notice->id for $user->nickname ($user->id), "
. "Facebook UID: $fbuid"
);
common_log(LOG_WARNING, $msg);
}
-
}
/**
*
* @return boolean success flag
*/
-
function mail_facebook_app_removed($user)
{
$profile = $user->getProfile();
common_switch_locale();
return mail_to_user($user, $subject, $body);
-
}