Beispiel #1
4
function facebookBroadcastNotice($notice)
{
    $facebook = getFacebook();
    $flink = Foreign_link::getByUserID($notice->profile_id, FACEBOOK_SERVICE);
    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);
            $canPublish = 0;
            if (!empty($result)) {
                $canPublish = $result[0]['publish_stream'];
            }
            if ($canPublish == 1) {
                common_debug("FacebookPlugin - {$user->nickname} ({$user->id}), Facebook UID: {$fbuid} " . 'has publish_stream permission.');
            } else {
                common_debug("FacebookPlugin - {$user->nickname} ({$user->id}), Facebook UID: {$fbuid} " . 'does NOT have publish_stream permission. Facebook ' . 'returned: ' . var_export($result, true));
            }
            common_debug('FacebookPlugin - checking for status_update permission for user ' . "{$user->nickname} ({$user->id}), Facebook UID: {$fbuid}. ");
            $canUpdate = $facebook->api_client->users_hasAppPermission('status_update', $fbuid);
            if ($canUpdate == 1) {
                common_debug("FacebookPlugin - {$user->nickname} ({$user->id}), Facebook UID: {$fbuid} " . 'has status_update permission.');
            } else {
                common_debug("FacebookPlugin - {$user->nickname} ({$user->id}), Facebook UID: {$fbuid} " . 'does NOT have status_update permission. Facebook ' . 'returned: ' . var_export($canPublish, true));
            }
            // Post to Facebook
            if ($notice->hasAttachments() && $canPublish == 1) {
                publishStream($notice, $user, $fbuid);
            } elseif ($canUpdate == 1 || $canPublish == 1) {
                statusUpdate($notice, $user, $fbuid);
            } else {
                $msg = "FacebookPlugin - Not sending notice {$notice->id} to Facebook " . "because user {$user->nickname} has not given the " . 'Facebook app \'status_update\' or \'publish_stream\' permission.';
                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);
        }
    }
    return true;
}
Beispiel #2
0
function facebookBroadcastNotice($notice)
{
    $facebook = getFacebook();
    $flink = Foreign_link::getByUserID($notice->profile_id, FACEBOOK_SERVICE);
    $fbuid = $flink->foreign_id;
    if (isFacebookBound($notice, $flink)) {
        $status = null;
        // Get the status 'verb' (prefix) the user has set
        try {
            $prefix = $facebook->api_client->data_getUserPreference(FACEBOOK_NOTICE_PREFIX, $fbuid);
            $status = "{$prefix} {$notice->content}";
        } catch (FacebookRestClientException $e) {
            common_log(LOG_ERR, $e->getMessage());
            return false;
        }
        // Okay, we're good to go!
        try {
            $facebook->api_client->users_setStatus($status, $fbuid, false, true);
            updateProfileBox($facebook, $flink, $notice);
        } catch (FacebookRestClientException $e) {
            common_log(LOG_ERR, $e->getMessage());
            return false;
            // Should we remove flink if this fails?
        }
    }
    return true;
}
function facebookBroadcastNotice($notice)
{
    $facebook = getFacebook();
    $flink = Foreign_link::getByUserID($notice->profile_id, FACEBOOK_SERVICE);
    if (isFacebookBound($notice, $flink)) {
        // Okay, we're good to go, update the FB status
        $status = null;
        $fbuid = $flink->foreign_id;
        $user = $flink->getUser();
        $attachments = $notice->attachments();
        try {
            // Get the status 'verb' (prefix) the user has set
            // XXX: Does this call count against our per user FB request limit?
            // If so we should consider storing verb elsewhere or not storing
            $prefix = trim($facebook->api_client->data_getUserPreference(FACEBOOK_NOTICE_PREFIX, $fbuid));
            $status = "{$prefix} {$notice->content}";
            $can_publish = $facebook->api_client->users_hasAppPermission('publish_stream', $fbuid);
            $can_update = $facebook->api_client->users_hasAppPermission('status_update', $fbuid);
            if (!empty($attachments) && $can_publish == 1) {
                $fbattachment = format_attachments($attachments);
                $facebook->api_client->stream_publish($status, $fbattachment, null, null, $fbuid);
                common_log(LOG_INFO, "Posted notice {$notice->id} w/attachment " . "to Facebook user's stream (fbuid = {$fbuid}).");
            } elseif ($can_update == 1 || $can_publish == 1) {
                $facebook->api_client->users_setStatus($status, $fbuid, false, true);
                common_log(LOG_INFO, "Posted notice {$notice->id} to Facebook " . "as a status update (fbuid = {$fbuid}).");
            } else {
                $msg = "Not sending notice {$notice->id} to Facebook " . "because user {$user->nickname} hasn't given the " . 'Facebook app \'status_update\' or \'publish_stream\' permission.';
                common_log(LOG_WARNING, $msg);
            }
            // Finally, attempt to update the user's profile box
            if ($can_publish == 1 || $can_update == 1) {
                updateProfileBox($facebook, $flink, $notice);
            }
        } catch (FacebookRestClientException $e) {
            $code = $e->getCode();
            $msg = "Facebook returned error code {$code}: " . $e->getMessage() . ' - ' . "Unable to update Facebook status (notice {$notice->id}) " . "for {$user->nickname} (user id: {$user->id})!";
            common_log(LOG_WARNING, $msg);
            if ($code == 100 || $code == 200 || $code == 250) {
                // 100 The account is 'inactive' (probably - this is not well documented)
                // 200 The application does not have permission to operate on the passed in uid parameter.
                // 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);
            } else {
                // Try sending again later.
                return false;
            }
        }
    }
    return true;
}