BCheck if object exists

This commit is contained in:
Claudio Sanches 2017-02-17 00:09:46 -02:00
parent 94b0800735
commit 18dc63757b
1 changed files with 22 additions and 16 deletions

View File

@ -33,6 +33,16 @@ abstract class WC_REST_CRUD_Controller extends WC_REST_Posts_Controller {
*/ */
protected $hierarchical = false; protected $hierarchical = false;
/**
* Get object.
*
* @param int $id Object ID.
* @return WP_Error|WC_Data
*/
protected function get_object( $id ) {
return new WP_Error( 'invalid-method', sprintf( __( "Method '%s' not implemented. Must be overridden in subclass.", 'woocommerce' ), __METHOD__ ), array( 'status' => 405 ) );
}
/** /**
* Check if a given request has access to read an item. * Check if a given request has access to read an item.
* *
@ -40,7 +50,9 @@ abstract class WC_REST_CRUD_Controller extends WC_REST_Posts_Controller {
* @return WP_Error|boolean * @return WP_Error|boolean
*/ */
public function get_item_permissions_check( $request ) { public function get_item_permissions_check( $request ) {
if ( ! wc_rest_check_post_permissions( $this->post_type, 'read', (int) $request['id'] ) ) { $object = $this->get_object( (int) $request['id'] );
if ( $object && 0 !== $object->get_id() && ! wc_rest_check_post_permissions( $this->post_type, 'read', $object->get_id() ) ) {
return new WP_Error( 'woocommerce_rest_cannot_view', __( 'Sorry, you cannot view this resource.', 'woocommerce' ), array( 'status' => rest_authorization_required_code() ) ); return new WP_Error( 'woocommerce_rest_cannot_view', __( 'Sorry, you cannot view this resource.', 'woocommerce' ), array( 'status' => rest_authorization_required_code() ) );
} }
@ -54,7 +66,9 @@ abstract class WC_REST_CRUD_Controller extends WC_REST_Posts_Controller {
* @return WP_Error|boolean * @return WP_Error|boolean
*/ */
public function update_item_permissions_check( $request ) { public function update_item_permissions_check( $request ) {
if ( ! wc_rest_check_post_permissions( $this->post_type, 'edit', (int) $request['id'] ) ) { $object = $this->get_object( (int) $request['id'] );
if ( $object && 0 !== $object->get_id() && ! wc_rest_check_post_permissions( $this->post_type, 'edit', $object->get_id() ) ) {
return new WP_Error( 'woocommerce_rest_cannot_edit', __( 'Sorry, you are not allowed to edit this resource.', 'woocommerce' ), array( 'status' => rest_authorization_required_code() ) ); return new WP_Error( 'woocommerce_rest_cannot_edit', __( 'Sorry, you are not allowed to edit this resource.', 'woocommerce' ), array( 'status' => rest_authorization_required_code() ) );
} }
@ -68,23 +82,15 @@ abstract class WC_REST_CRUD_Controller extends WC_REST_Posts_Controller {
* @return bool|WP_Error * @return bool|WP_Error
*/ */
public function delete_item_permissions_check( $request ) { public function delete_item_permissions_check( $request ) {
if ( ! wc_rest_check_post_permissions( $this->post_type, 'delete', (int) $request['id'] ) ) { $object = $this->get_object( (int) $request['id'] );
if ( $object && 0 !== $object->get_id() && ! wc_rest_check_post_permissions( $this->post_type, 'delete', $object->get_id() ) ) {
return new WP_Error( 'woocommerce_rest_cannot_delete', __( 'Sorry, you are not allowed to delete this resource.', 'woocommerce' ), array( 'status' => rest_authorization_required_code() ) ); return new WP_Error( 'woocommerce_rest_cannot_delete', __( 'Sorry, you are not allowed to delete this resource.', 'woocommerce' ), array( 'status' => rest_authorization_required_code() ) );
} }
return true; return true;
} }
/**
* Get object.
*
* @param int $id Object ID.
* @return WP_Error|WC_Data
*/
protected function get_object( $id ) {
return new WP_Error( 'invalid-method', sprintf( __( "Method '%s' not implemented. Must be overridden in subclass.", 'woocommerce' ), __METHOD__ ), array( 'status' => 405 ) );
}
/** /**
* Get object permalink. * Get object permalink.
* *
@ -128,7 +134,7 @@ abstract class WC_REST_CRUD_Controller extends WC_REST_Posts_Controller {
public function get_item( $request ) { public function get_item( $request ) {
$object = $this->get_object( (int) $request['id'] ); $object = $this->get_object( (int) $request['id'] );
if ( 0 === $object->get_id() ) { if ( ! $object || 0 === $object->get_id() ) {
return new WP_Error( "woocommerce_rest_{$this->post_type}_invalid_id", __( 'Invalid ID.', 'woocommerce' ), array( 'status' => 404 ) ); return new WP_Error( "woocommerce_rest_{$this->post_type}_invalid_id", __( 'Invalid ID.', 'woocommerce' ), array( 'status' => 404 ) );
} }
@ -215,7 +221,7 @@ abstract class WC_REST_CRUD_Controller extends WC_REST_Posts_Controller {
public function update_item( $request ) { public function update_item( $request ) {
$object = $this->get_object( (int) $request['id'] ); $object = $this->get_object( (int) $request['id'] );
if ( 0 === $object->get_id() ) { if ( ! $object || 0 === $object->get_id() ) {
return new WP_Error( "woocommerce_rest_{$this->post_type}_invalid_id", __( 'Invalid ID.', 'woocommerce' ), array( 'status' => 404 ) ); return new WP_Error( "woocommerce_rest_{$this->post_type}_invalid_id", __( 'Invalid ID.', 'woocommerce' ), array( 'status' => 404 ) );
} }
@ -375,7 +381,7 @@ abstract class WC_REST_CRUD_Controller extends WC_REST_Posts_Controller {
$object = $this->get_object( (int) $request['id'] ); $object = $this->get_object( (int) $request['id'] );
$result = false; $result = false;
if ( 0 === $object->get_id() ) { if ( ! $object || 0 === $object->get_id() ) {
return new WP_Error( "woocommerce_rest_{$this->post_type}_invalid_id", __( 'Invalid ID.', 'woocommerce' ), array( 'status' => 404 ) ); return new WP_Error( "woocommerce_rest_{$this->post_type}_invalid_id", __( 'Invalid ID.', 'woocommerce' ), array( 'status' => 404 ) );
} }