From 51417949b30516eef8863cc23d20926873618cb2 Mon Sep 17 00:00:00 2001 From: Hoang Huu Date: Thu, 3 Oct 2019 17:24:12 +0700 Subject: [PATCH] Update API --- inc/api/class-base-api.php | 27 ++++++ inc/api/v1/agency.php | 180 +++++++++++++------------------------ inc/api/v1/agent.php | 138 +++++++++++----------------- inc/api/v1/property.php | 59 ++++++------ 4 files changed, 171 insertions(+), 233 deletions(-) diff --git a/inc/api/class-base-api.php b/inc/api/class-base-api.php index cc8724eb..93afec5e 100755 --- a/inc/api/class-base-api.php +++ b/inc/api/class-base-api.php @@ -226,4 +226,31 @@ abstract class Base_API { return true; } + + /** + * Get the query params for collections of attachments. + * + * @return array + */ + public function get_collection_params() { + $params['page'] = [ + 'description' => __( 'Current page of the collection.', 'opalestate-pro' ), + 'type' => 'integer', + 'default' => 1, + 'sanitize_callback' => 'absint', + 'validate_callback' => 'rest_validate_request_arg', + 'minimum' => 1, + ]; + $params['per_page'] = [ + 'description' => __( 'Maximum number of items to be returned in result set.', 'opalestate-pro' ), + 'type' => 'integer', + 'default' => 10, + 'minimum' => 1, + 'maximum' => 100, + 'sanitize_callback' => 'absint', + 'validate_callback' => 'rest_validate_request_arg', + ]; + + return $params; + } } diff --git a/inc/api/v1/agency.php b/inc/api/v1/agency.php index 638fca62..c212c3a9 100755 --- a/inc/api/v1/agency.php +++ b/inc/api/v1/agency.php @@ -29,71 +29,64 @@ class Agency_Api extends Base_Api { * @access public * @var string $base . */ - public $base = '/agency'; + public $base = '/agencies'; + + /** + * Post type. + * + * @var string + */ + protected $post_type = 'opalestate_agency'; /** * Register Routes * * Register all CURD actions with POST/GET/PUT and calling function for each * - * @return avoid * @since 1.0 * */ public function register_routes() { /** - * Get agency list. + * Get list of agencies. * - * Call http://domain.com/wp-json/estate-api/v1/agency/list + * Call http://domain.com/wp-json/estate-api/v1/agencies */ - register_rest_route( $this->namespace, $this->base . '/list', [ - 'methods' => WP_REST_Server::READABLE, - 'callback' => [ $this, 'get_list' ], - 'permission_callback' => [ $this, 'validate_request' ], - ] ); + register_rest_route( + $this->namespace, + '/' . $this->base, + [ + [ + 'methods' => WP_REST_Server::READABLE, + 'callback' => [ $this, 'get_items' ], + // 'permission_callback' => [ $this, 'get_items_permissions_check' ], + 'args' => $this->get_collection_params(), + ], + ] + ); - /** - * Get agency detail. - * - * Call http://domain.com/wp-json/estate-api/v1/agency/1 - */ - register_rest_route( $this->namespace, $this->base . '/(?P\d+)', [ - 'methods' => WP_REST_Server::READABLE, - 'callback' => [ $this, 'get_detail' ], - 'permission_callback' => [ $this, 'validate_request' ], - ] ); - - /** - * Create a agency. - * - * Call http://domain.com/wp-json/estate-api/v1/agency/create - */ - register_rest_route( $this->namespace, $this->base . '/create', [ - 'methods' => 'GET', - 'callback' => [ $this, 'create' ], - 'permission_callback' => [ $this, 'validate_request' ], - ] ); - - /** - * Edit a agency. - * - * Call http://domain.com/wp-json/estate-api/v1/agency/edit - */ - register_rest_route( $this->namespace, $this->base . '/edit', [ - 'methods' => 'GET', - 'callback' => [ $this, 'edit' ], - ] ); - - /** - * Delete a agency. - * - * Call http://domain.com/wp-json/estate-api/v1/agency/delete - */ - register_rest_route( $this->namespace, $this->base . '/delete', [ - 'methods' => 'GET', - 'callback' => [ $this, 'delete' ], - 'permission_callback' => [ $this, 'validate_request' ], - ] ); + register_rest_route( + $this->namespace, + '/' . $this->base . '/(?P[\d]+)', + [ + 'args' => [ + 'id' => [ + 'description' => __( 'Unique identifier for the resource.', 'opalestate-pro' ), + 'type' => 'integer', + ], + ], + [ + 'methods' => WP_REST_Server::READABLE, + 'callback' => [ $this, 'get_item' ], + // 'permission_callback' => [ $this, 'get_item_permissions_check' ], + ], + [ + 'methods' => WP_REST_Server::EDITABLE, + 'callback' => [ $this, 'update_item' ], + // 'permission_callback' => [ $this, 'update_item_permissions_check' ], + ], + ] + ); } @@ -106,47 +99,28 @@ class Agency_Api extends Base_Api { * @since 1.0 * */ - public function get_list( $request ) { - $agencies = []; - $error = []; - $agency = null; - if ( $agency == null ) { - $agencies['agencies'] = []; + public function get_items( $request ) { + $agencies['agencies'] = []; - $agency_list = get_posts( [ - 'post_type' => 'opalestate_agency', - 'posts_per_page' => $this->per_page(), - 'suppress_filters' => true, - 'paged' => $this->get_paged(), - ] ); + $per_page = isset( $request['per_page'] ) && $request['per_page'] ? $request['per_page'] : 5; + $paged = isset( $request['page'] ) && $request['page'] ? $request['page'] : 1; - if ( $agency_list ) { - $i = 0; - foreach ( $agency_list as $agency_info ) { - $agencies['agencies'][ $i ] = $this->get_agency_data( $agency_info ); - $i++; - } - } - } else { - if ( get_post_type( $agency ) == 'opalestate_agency' ) { - $agency_info = get_post( $agency ); + $agency_list = get_posts( [ + 'post_type' => $this->post_type, + 'posts_per_page' => $per_page, + 'paged' => $paged, + 'suppress_filters' => true, + ] ); - $agencies['agencies'][0] = $this->get_agency_data( $agency_info ); - - } else { - $error['error'] = sprintf( - /* translators: %s: agency */ - esc_html__( 'Form %s not found!', 'opalestate-pro' ), - $agency - ); - - return $this->get_response( 404, $error ); + if ( $agency_list ) { + $i = 0; + foreach ( $agency_list as $agency_info ) { + $agencies['agencies'][ $i ] = $this->get_agency_data( $agency_info ); + $i++; } } $response['collection'] = $agencies['agencies']; - $response['pages'] = 4; - $response['current'] = 1; return $this->get_response( 200, $response ); } @@ -160,20 +134,20 @@ class Agency_Api extends Base_Api { * @since 1.0 * */ - public function get_detail( $request ) { + public function get_item( $request ) { $response = []; if ( $request['id'] > 0 ) { $post = get_post( $request['id'] ); - if ( $post && 'opalestate_agency' == get_post_type( $request['id'] ) ) { + if ( $post && $this->post_type == get_post_type( $request['id'] ) ) { $agency = $this->get_agency_data( $post ); $response['agency'] = $agency ? $agency : []; - $code = 200; + $code = 200; } else { - $code = 404; + $code = 404; $response['error'] = sprintf( esc_html__( 'Agency ID: %s does not exist!', 'opalestate-pro' ), $request['id'] ); } } else { - $code = 404; + $code = 404; $response['error'] = sprintf( esc_html__( 'Invalid ID.', 'opalestate-pro' ), $request['id'] ); } @@ -213,30 +187,4 @@ class Agency_Api extends Base_Api { return apply_filters( 'opalestate_api_agencies', $ouput ); } - - /** - * Delete job - * - * Based on request to get collection - * - * @return WP_REST_Response is json data - * @since 1.0 - * - */ - public function delete() { - - } - - - public function reviews() { - - } - - public function categories() { - - } - - public function tags() { - - } } diff --git a/inc/api/v1/agent.php b/inc/api/v1/agent.php index 493904b0..501ae94c 100755 --- a/inc/api/v1/agent.php +++ b/inc/api/v1/agent.php @@ -20,14 +20,20 @@ class Agent_Api extends Base_Api { * @access public * @var string $base . */ - public $base = '/agent'; + public $base = '/agents'; + + /** + * Post type. + * + * @var string + */ + protected $post_type = 'opalestate_agent'; /** * Register Routes * * Register all CURD actions with POST/GET/PUT and calling function for each * - * @return avoid * @since 1.0 * */ @@ -35,56 +41,43 @@ class Agent_Api extends Base_Api { /** * Get list of agents. * - * Call http://domain.com/wp-json/estate-api/v1/agent/list + * Call http://domain.com/wp-json/estate-api/v1/agents */ - register_rest_route( $this->namespace, $this->base . '/list', [ - 'methods' => WP_REST_Server::READABLE, - 'callback' => [ $this, 'get_list' ], - 'permission_callback' => [ $this, 'validate_request' ], - ] ); + register_rest_route( + $this->namespace, + '/' . $this->base, + [ + [ + 'methods' => WP_REST_Server::READABLE, + 'callback' => [ $this, 'get_items' ], + // 'permission_callback' => [ $this, 'get_items_permissions_check' ], + 'args' => $this->get_collection_params(), + ], + ] + ); - /** - * Get agent detail. - * - * Call http://domain.com/wp-json/estate-api/v1/agent/1 - */ - register_rest_route( $this->namespace, $this->base . '/(?P\d+)', [ - 'methods' => WP_REST_Server::READABLE, - 'callback' => [ $this, 'get_detail' ], - 'permission_callback' => [ $this, 'validate_request' ], - ] ); - - /** - * Create a agent. - * - * Call http://domain.com/wp-json/estate-api/v1/agent/create - */ - register_rest_route( $this->namespace, $this->base . '/create', [ - 'methods' => 'GET', - 'callback' => [ $this, 'create' ], - 'permission_callback' => [ $this, 'validate_request' ], - ] ); - - /** - * Edit a agent. - * - * Call http://domain.com/wp-json/estate-api/v1/agent/edit - */ - register_rest_route( $this->namespace, $this->base . '/edit', [ - 'methods' => 'GET', - 'callback' => [ $this, 'edit' ], - ] ); - - /** - * Delete a agent. - * - * Call http://domain.com/wp-json/estate-api/v1/agent/delete - */ - register_rest_route( $this->namespace, $this->base . '/delete', [ - 'methods' => 'GET', - 'callback' => [ $this, 'delete' ], - 'permission_callback' => [ $this, 'validate_request' ], - ] ); + register_rest_route( + $this->namespace, + '/' . $this->base . '/(?P[\d]+)', + [ + 'args' => [ + 'id' => [ + 'description' => __( 'Unique identifier for the resource.', 'opalestate-pro' ), + 'type' => 'integer', + ], + ], + [ + 'methods' => WP_REST_Server::READABLE, + 'callback' => [ $this, 'get_item' ], + // 'permission_callback' => [ $this, 'get_item_permissions_check' ], + ], + [ + 'methods' => WP_REST_Server::EDITABLE, + 'callback' => [ $this, 'update_item' ], + // 'permission_callback' => [ $this, 'update_item_permissions_check' ], + ], + ] + ); } /** @@ -96,17 +89,17 @@ class Agent_Api extends Base_Api { * @since 1.0 * */ - public function get_list( $request ) { - $agents = []; - + public function get_items( $request ) { $agents['agents'] = []; + $per_page = isset( $request['per_page'] ) && $request['per_page'] ? $request['per_page'] : 5; + $paged = isset( $request['page'] ) && $request['page'] ? $request['page'] : 1; $agent_list = get_posts( [ - 'post_type' => 'opalestate_agent', - 'posts_per_page' => $this->per_page(), + 'post_type' => $this->post_type, + 'posts_per_page' => $per_page, + 'paged' => $paged, 'suppress_filters' => true, - 'paged' => $this->get_paged(), ] ); if ( $agent_list ) { @@ -118,8 +111,6 @@ class Agent_Api extends Base_Api { } $response['collection'] = $agents['agents']; - $response['pages'] = 4; - $response['current'] = 1; return $this->get_response( 200, $response ); } @@ -133,11 +124,11 @@ class Agent_Api extends Base_Api { * @since 1.0 * */ - public function get_detail( $request ) { + public function get_item( $request ) { $response = []; if ( $request['id'] > 0 ) { $post = get_post( $request['id'] ); - if ( $post && 'opalestate_agent' == get_post_type( $request['id'] ) ) { + if ( $post && $this->post_type == get_post_type( $request['id'] ) ) { $agent = $this->get_agent_data( $post ); $response['agent'] = $agent ? $agent : []; $code = 200; @@ -177,7 +168,7 @@ class Agent_Api extends Base_Api { $agent = new OpalEstate_Agent( $agent_info->ID ); $ouput['info']['avatar'] = $agent->get_meta( 'avatar' ); - $ouput['info']['featured'] = (int) $agent->is_featured(); + $ouput['info']['featured'] = $agent->is_featured(); $ouput['info']['trusted'] = $agent->get_trusted(); $ouput['info']['email'] = $agent->get_meta( 'email' ); $ouput['info']['address'] = $agent->get_meta( 'address' ); @@ -190,29 +181,4 @@ class Agent_Api extends Base_Api { return apply_filters( 'opalestate_api_agents', $ouput ); } - - /** - * Delete job - * - * Based on request to get collection - * - * @return WP_REST_Response is json data - * @since 1.0 - * - */ - public function delete() { - - } - - public function reviews() { - - } - - public function categories() { - - } - - public function tags() { - - } } diff --git a/inc/api/v1/property.php b/inc/api/v1/property.php index d7a6f7c9..d6aabac5 100644 --- a/inc/api/v1/property.php +++ b/inc/api/v1/property.php @@ -80,18 +80,18 @@ class Property_Api extends Base_Api { 'callback' => [ $this, 'update_item' ], // 'permission_callback' => [ $this, 'update_item_permissions_check' ], ], - [ - 'methods' => WP_REST_Server::DELETABLE, - 'callback' => [ $this, 'delete_item' ], - // 'permission_callback' => [ $this, 'delete_item_permissions_check' ], - 'args' => [ - 'force' => [ - 'default' => false, - 'description' => __( 'Whether to bypass trash and force deletion.', 'opalestate-pro' ), - 'type' => 'boolean', - ], - ], - ], + // [ + // 'methods' => WP_REST_Server::DELETABLE, + // 'callback' => [ $this, 'delete_item' ], + // // 'permission_callback' => [ $this, 'delete_item_permissions_check' ], + // 'args' => [ + // 'force' => [ + // 'default' => false, + // 'description' => __( 'Whether to bypass trash and force deletion.', 'opalestate-pro' ), + // 'type' => 'boolean', + // ], + // ], + // ], ] ); } @@ -127,8 +127,6 @@ class Property_Api extends Base_Api { } $response['collection'] = $properties; - $response['pages'] = 4; - $response['current'] = 1; return $this->get_response( 200, $response ); } @@ -162,6 +160,21 @@ class Property_Api extends Base_Api { return $this->get_response( $code, $response ); } + public function delete_item( $request ) { + $id = (int) $request['id']; + $force = (bool) $request['force']; + + $property = get_post( absint( $request['id'] ) ); + if ( ! $property || $this->post_type != $property->post_type ) { + $response['test'] = 0; + } else { + wp_delete_post( absint( $request['id'] ) ); + $response['test'] = 1; + } + + return $response; + } + /** * The opalestate_property post object, generate the data for the API output * @@ -268,23 +281,7 @@ class Property_Api extends Base_Api { * @return array */ public function get_collection_params() { - $params['page'] = [ - 'description' => __( 'Current page of the collection.', 'opalestate-pro' ), - 'type' => 'integer', - 'default' => 1, - 'sanitize_callback' => 'absint', - 'validate_callback' => 'rest_validate_request_arg', - 'minimum' => 1, - ]; - $params['per_page'] = [ - 'description' => __( 'Maximum number of items to be returned in result set.', 'opalestate-pro' ), - 'type' => 'integer', - 'default' => 10, - 'minimum' => 1, - 'maximum' => 100, - 'sanitize_callback' => 'absint', - 'validate_callback' => 'rest_validate_request_arg', - ]; + $params = parent::get_collection_params(); return $params; }