web/wp-content/plugins/social/lib/social/response.php
changeset 196 5e8dcbe22c24
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/wp-content/plugins/social/lib/social/response.php	Tue Dec 04 18:43:10 2012 -0800
@@ -0,0 +1,161 @@
+<?php
+/**
+ * Handles the response from wp_remote_post|get requests.
+ *
+ * @package Social
+ */
+final class Social_Response {
+
+	/**
+	 * Initializes a response object.
+	 *
+	 * @static
+	 * @param  Social_Service  $service
+	 * @param  array  $request
+	 * @param  Social_Service_Account $account
+	 * @return Social_Response
+	 */
+	public static function factory(&$service, array $request, &$account) {
+		return new Social_Response($service, $request, $account);
+	}
+
+	/**
+	 * @var  Social_Service|Social_Service_Facebook|Social_Service_Twitter  service object
+	 */
+	private $_service = null;
+
+	/**
+	 * @var  array  request object
+	 */
+	private $_request = array();
+
+	/**
+	 * @var Social_Service_Account  account object
+	 */
+	private $_account = null;
+
+	/**
+	 * @param  Social_Service  $service
+	 * @param  array  $request
+	 * @param  Social_Service_Account $account
+	 */
+	public function __construct(&$service, array $request, &$account) {
+		$this->_service = $service;
+		$this->_request = $request;
+		$this->_account = $account;
+	}
+
+	/**
+	 * Checks to see if the response has reached it's limit.
+	 *
+	 * @return bool
+	 */
+	public function limit_reached() {
+		$body = $this->body();
+		if (isset($body->result) and $body->result == 'error' and isset($body->response)) {
+			return $this->_service->limit_reached($body->response);
+		}
+
+		return false;
+	}
+
+	/**
+	 * Checks to see if the status is a duplicate.
+	 *
+	 * @return bool
+	 */
+	public function duplicate_status() {
+		$body = $this->body();
+		if (isset($body->result) and $body->result == 'error' and isset($body->response)) {
+			return $this->_service->duplicate_status($body->response);
+		}
+
+		return false;
+	}
+
+	/**
+	 * Checks to see if the broadcasting account has been deauthorized.
+	 *
+	 * @param  bool  $check_invalid_key
+	 * @return bool
+	 */
+	public function deauthorized($check_invalid_key = FALSE) {
+		$body = $this->body();
+		if ((isset($body->result) and $body->result == 'error') and isset($body->response) and $this->_service->deauthorized($body->response, $check_invalid_key)) {
+			if ($this->_account->personal()) {
+				$url = Social::settings_url(array(), true);
+			}
+			else {
+				$url = Social::settings_url();
+			}
+
+			$deauthorized = get_option('social_deauthorized', array());
+			if (!isset($deauthorized[$this->_service->key()])) {
+				$deauthorized[$this->_service->key()] = array();
+			}
+			$deauthorized[$this->_service->key()][$this->_account->id()] = sprintf(__('Unable to publish to %s with account %s. Please <a href="%">re-authorize</a> this account.', 'social'), esc_html($this->_service->title()), esc_html($this->_account->name()), esc_url($url));
+			update_option('social_deauthorized', $deauthorized);
+
+			Social::log('Removing deauthorized account: :account', array(
+				'account' => print_r($this->_account)
+			));
+			$this->_service->remove_account($this->_account)->save();
+
+			return true;
+		}
+
+		return false;
+	}
+
+	/**
+	 * Checks the response to see if an unknown error occurred.
+	 *
+	 * @return bool
+	 */
+	public function general_error() {
+		$body = $this->body();
+		if (is_wp_error($this->_request) or isset($body->result) and $body->result == 'error' and isset($body->response)) {
+			return true;
+		}
+
+		return false;
+	}
+
+	/**
+	 * Returns the request response ID.
+	 *
+	 * @return string
+	 */
+	public function id() {
+		if ($body = $this->body()) {
+			if (isset($body->response) && isset($body->response->{$this->_service->response_id_key()})) {
+				return $body->response->{$this->_service->response_id_key()};
+			}
+		}
+		return '0';
+	}
+
+	/**
+	 * Returns the request body.
+	 *
+	 * @return bool|object
+	 */
+	public function body() {
+		if (isset($this->_request['body'])) {
+			return $this->_request['body'];
+		}
+
+		return false;
+	}
+
+	/**
+	 * Returns the response message.
+	 *
+	 * @param  string  $default  default message to use
+	 * @return mixed
+	 */
+	public function message($default) {
+		return $this->_service->response_message($this->body(), $default);
+	}
+
+} // End Social_Response