Skip to content
Snippets Groups Projects
Base.php 1.91 KiB
Newer Older
  • Learn to ignore specific revisions
  • <?php
    /**
     * Base controller class.
     *
     * @since 0.1
     */
    
    namespace CiviCRM_WP_REST\Controller;
    
    use CiviCRM_WP_REST\Endpoint\Endpoint_Interface;
    
    abstract class Base extends \WP_REST_Controller implements Endpoint_Interface {
    
    	/**
    	 * Route namespace.
    	 *
    	 * @since 0.1
    	 * @var string
    	 */
    	protected $namespace = 'civicrm/v3';
    
    	/**
    	 * Gets the endpoint namespace.
    	 *
    	 * @since 0.1
    	 * @return string $namespace
    	 */
    	public function get_namespace() {
    
    		return $this->namespace;
    
    	}
    
    	/**
    	 * Gets the rest base route.
    	 *
    	 * @since 0.1
    	 * @return string $rest_base
    	 */
    	public function get_rest_base() {
    
    		return '/' . $this->rest_base;
    
    	}
    
    	/**
    	 * Retrieves the endpoint ie. '/civicrm/v3/rest'.
    	 *
    	 * @since 0.1
    	 * @return string $rest_base
    	 */
    	public function get_endpoint() {
    
    		return '/' . $this->get_namespace() . $this->get_rest_base();
    
    	}
    
    	/**
    	 * Checks whether the requested route is equal to this endpoint.
    	 *
    	 * @since 0.1
    	 * @param WP_REST_Request $request
    	 * @return bool $is_current_endpoint True if it's equal, false otherwise
    	 */
    	public function is_current_endpoint( $request ) {
    
    		return $this->get_endpoint() == $request->get_route();
    
    	}
    
    	/**
    	 * Authorization status code.
    	 *
    	 * @since 0.1
    	 * @return int $status
    	 */
    	protected function authorization_status_code() {
    
    		$status = 401;
    
    		if ( is_user_logged_in() ) $status = 403;
    
    		return $status;
    
    	}
    
    	/**
    	 * Wrapper for WP_Error.
    	 *
    	 * @since 0.1
    
    	 * @param string|\CiviCRM_API3_Exception|\WP_Error $error
    
    	 * @param mixed $data Error data
    	 * @return WP_Error $error
    	 */
    
    	protected function civi_rest_error( $error, $data = [] ) {
    
    		if ( $error instanceof \CiviCRM_API3_Exception ) {
    
    			return $error->getExtraParams();
    
    
    		} elseif ( $error instanceof \WP_Error ) {
    
    			return $error;
    
    
    		}
    
    		return new \WP_Error( 'civicrm_rest_api_error', $error, empty( $data ) ? [ 'status' => $this->authorization_status_code() ] : $data );