956 lines
26 KiB
PHP
956 lines
26 KiB
PHP
<?php
|
|
|
|
if (!function_exists('curl_init')) {
|
|
throw new Exception('Facebook needs the CURL PHP extension.');
|
|
}
|
|
if (!function_exists('json_decode')) {
|
|
throw new Exception('Facebook needs the JSON PHP extension.');
|
|
}
|
|
|
|
/**
|
|
* Thrown when an API call returns an exception.
|
|
*
|
|
* @author Naitik Shah <naitik@facebook.com>
|
|
*/
|
|
class FacebookApiException extends Exception
|
|
{
|
|
/**
|
|
* The result from the API server that represents the exception information.
|
|
*/
|
|
protected $result;
|
|
|
|
/**
|
|
* Make a new API Exception with the given result.
|
|
*
|
|
* @param Array $result the result from the API server
|
|
*/
|
|
public function __construct($result) {
|
|
$this->result = $result;
|
|
|
|
$code = isset($result['error_code']) ? $result['error_code'] : 0;
|
|
|
|
if (isset($result['error_description'])) {
|
|
// OAuth 2.0 Draft 10 style
|
|
$msg = $result['error_description'];
|
|
} else if (isset($result['error']) && is_array($result['error'])) {
|
|
// OAuth 2.0 Draft 00 style
|
|
$msg = $result['error']['message'];
|
|
} else if (isset($result['error_msg'])) {
|
|
// Rest server style
|
|
$msg = $result['error_msg'];
|
|
} else {
|
|
$msg = 'Unknown Error. Check getResult()';
|
|
}
|
|
|
|
parent::__construct($msg, $code);
|
|
}
|
|
|
|
/**
|
|
* Return the associated result object returned by the API server.
|
|
*
|
|
* @returns Array the result from the API server
|
|
*/
|
|
public function getResult() {
|
|
return $this->result;
|
|
}
|
|
|
|
/**
|
|
* Returns the associated type for the error. This will default to
|
|
* 'Exception' when a type is not available.
|
|
*
|
|
* @return String
|
|
*/
|
|
public function getType() {
|
|
if (isset($this->result['error'])) {
|
|
$error = $this->result['error'];
|
|
if (is_string($error)) {
|
|
// OAuth 2.0 Draft 10 style
|
|
return $error;
|
|
} else if (is_array($error)) {
|
|
// OAuth 2.0 Draft 00 style
|
|
if (isset($error['type'])) {
|
|
return $error['type'];
|
|
}
|
|
}
|
|
}
|
|
return 'Exception';
|
|
}
|
|
|
|
/**
|
|
* To make debugging easier.
|
|
*
|
|
* @returns String the string representation of the error
|
|
*/
|
|
public function __toString() {
|
|
$str = $this->getType() . ': ';
|
|
if ($this->code != 0) {
|
|
$str .= $this->code . ': ';
|
|
}
|
|
return $str . $this->message;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Provides access to the Facebook Platform.
|
|
*
|
|
* @author Naitik Shah <naitik@facebook.com>
|
|
*/
|
|
class Facebook
|
|
{
|
|
/**
|
|
* Version.
|
|
*/
|
|
const VERSION = '2.1.2';
|
|
|
|
/**
|
|
* Default options for curl.
|
|
*/
|
|
public static $CURL_OPTS = array(
|
|
CURLOPT_CONNECTTIMEOUT => 10,
|
|
CURLOPT_RETURNTRANSFER => true,
|
|
CURLOPT_TIMEOUT => 60,
|
|
CURLOPT_USERAGENT => 'facebook-php-2.0',
|
|
);
|
|
|
|
/**
|
|
* List of query parameters that get automatically dropped when rebuilding
|
|
* the current URL.
|
|
*/
|
|
protected static $DROP_QUERY_PARAMS = array(
|
|
'session',
|
|
'signed_request',
|
|
);
|
|
|
|
/**
|
|
* Maps aliases to Facebook domains.
|
|
*/
|
|
public static $DOMAIN_MAP = array(
|
|
'api' => 'https://api.facebook.com/',
|
|
'api_read' => 'https://api-read.facebook.com/',
|
|
'graph' => 'https://graph.facebook.com/',
|
|
'www' => 'https://www.facebook.com/',
|
|
);
|
|
|
|
/**
|
|
* The Application ID.
|
|
*/
|
|
protected $appId;
|
|
|
|
/**
|
|
* The Application API Secret.
|
|
*/
|
|
protected $apiSecret;
|
|
|
|
/**
|
|
* The active user session, if one is available.
|
|
*/
|
|
protected $session;
|
|
|
|
/**
|
|
* The data from the signed_request token.
|
|
*/
|
|
protected $signedRequest;
|
|
|
|
/**
|
|
* Indicates that we already loaded the session as best as we could.
|
|
*/
|
|
protected $sessionLoaded = false;
|
|
|
|
/**
|
|
* Indicates if Cookie support should be enabled.
|
|
*/
|
|
protected $cookieSupport = false;
|
|
|
|
/**
|
|
* Base domain for the Cookie.
|
|
*/
|
|
protected $baseDomain = '';
|
|
|
|