diff --git a/src/api/endpoints/class-tainacan-rest-collections-controller.php b/src/api/endpoints/class-tainacan-rest-collections-controller.php index 2e4f8a335..5747d1c7e 100644 --- a/src/api/endpoints/class-tainacan-rest-collections-controller.php +++ b/src/api/endpoints/class-tainacan-rest-collections-controller.php @@ -169,7 +169,13 @@ class TAINACAN_REST_Collections_Controller extends WP_REST_Controller { return new WP_REST_Response($collection->__toJSON(), 201); } - return new WP_REST_Response($prepared_post->get_errors(), 400); + return new WP_REST_Response([ + [ + 'error_message' => __('One or more values are invalid.', 'tainacan'), + 'errors' => $prepared_post->get_errors() + ], + $prepared_post->__toJSON() + ], 400); } /** diff --git a/src/api/endpoints/class-tainacan-rest-items-controller.php b/src/api/endpoints/class-tainacan-rest-items-controller.php index f3268e6b8..e35abd524 100644 --- a/src/api/endpoints/class-tainacan-rest-items-controller.php +++ b/src/api/endpoints/class-tainacan-rest-items-controller.php @@ -196,7 +196,14 @@ class TAINACAN_REST_Items_Controller extends WP_REST_Controller { return new WP_REST_Response($metadata_added->get_item()->__toJSON(), 201 ); } - return new WP_REST_Response($item->get_errors(), 400); + + return new WP_REST_Response([ + [ + 'error_message' => __('One or more values are invalid.', 'tainacan'), + 'errors' => $item->get_errors() + ], + $item->__toJSON() + ], 400); } /** diff --git a/src/api/endpoints/class-tainacan-rest-metadata-controller.php b/src/api/endpoints/class-tainacan-rest-metadata-controller.php index 6ebd2c413..3e25b319b 100644 --- a/src/api/endpoints/class-tainacan-rest-metadata-controller.php +++ b/src/api/endpoints/class-tainacan-rest-metadata-controller.php @@ -45,6 +45,11 @@ class TAINACAN_REST_Metadata_Controller extends WP_REST_Controller { 'callback' => array($this, 'create_item'), 'permission_callback' => array($this, 'create_item_permissions_check') ), + array( + 'methods' => WP_REST_Server::DELETABLE, + 'callback' => array($this, 'delete_item'), + 'permission_callback' => array($this, 'delete_teim_permissions_check') + ) ) ); register_rest_route($this->namespace, '/' . $this->rest_base . '/item/(?P[\d]+)', @@ -119,7 +124,13 @@ class TAINACAN_REST_Metadata_Controller extends WP_REST_Controller { return new WP_REST_Response($this->metadata->__toJSON(), 201); } } else { - return new WP_REST_Response($this->metadata->get_errors(), 200); + return new WP_REST_Response([ + [ + 'error_message' => __('One or more values are invalid.', 'tainacan'), + 'errors' => $this->metadata->get_errors() + ], + $this->metadata->__toJSON(), + ], 400); } } elseif (!empty($request['item_id']) && !empty($request->get_body())){ $body = json_decode($request->get_body(), true); @@ -139,7 +150,13 @@ class TAINACAN_REST_Metadata_Controller extends WP_REST_Controller { return new WP_REST_Response( $metadata_updated->__toJSON(), 201 ); } else { - return new WP_REST_Response( $item_metadata->get_errors(), 200); + return new WP_REST_Response( [ + [ + 'error_message' => __('One or more values are invalid.', 'tainacan'), + 'errors' => $item_metadata->get_errors() + ], + $item_metadata->__toJSON(), + ], 400); } } else { return new WP_REST_Response($request->get_body(), 400); @@ -155,13 +172,7 @@ class TAINACAN_REST_Metadata_Controller extends WP_REST_Controller { if($request['item_id']) { foreach ( $item as $metadata ) { - - $metadata_as_json[] = json_encode( - array_merge( - json_decode($metadata->get_metadata()->__toJSON(), true), - ['value' => $metadata->get_value()] - ) - ); + $metadata_as_json[] = $metadata->__toJSON(); } } else { foreach ( $item as $metadata ) { @@ -182,20 +193,18 @@ class TAINACAN_REST_Metadata_Controller extends WP_REST_Controller { $prepared_item = $this->prepare_item_for_response($collection_metadata, $request); - return new WP_REST_Response($prepared_item, 200); - } elseif(!empty($request['item_id'])){ - $item_id = $request['item_id']; - - $item = new Entities\Item($item_id); - - $item_metadata = $this->item_metadata_repository->fetch($item, 'OBJECT'); - - $prepared_item = $this->prepare_item_for_response($item_metadata, $request); - return new WP_REST_Response($prepared_item, 200); } - return new WP_REST_Response($request->get_body(), 400); + $item_id = $request['item_id']; + + $item = new Entities\Item($item_id); + + $item_metadata = $this->item_metadata_repository->fetch($item, 'OBJECT'); + + $prepared_item = $this->prepare_item_for_response($item_metadata, $request); + + return new WP_REST_Response($prepared_item, 200); } public function get_item_permissions_check( $request ) { @@ -210,6 +219,20 @@ class TAINACAN_REST_Metadata_Controller extends WP_REST_Controller { return parent::get_collection_params(); // TODO: Change the autogenerated stub } + public function delete_item( $request ) { + if(!empty($request->get_body())){ + $body = json_decode($request->get_body()); + + $collection_id = $request['collection_id']; + $metadata_id = $body['metadata_id']; + + return new WP_REST_Response(['error' => 'Not Implemented.'], 400); + } + } + + public function delete_item_permissions_check( $request ) { + return parent::delete_item_permissions_check( $request ); // TODO: Change the autogenerated stub + } } ?> \ No newline at end of file diff --git a/src/classes/entities/class-tainacan-item-metadata-entity.php b/src/classes/entities/class-tainacan-item-metadata-entity.php index cd255a2a1..ca1a90f12 100644 --- a/src/classes/entities/class-tainacan-item-metadata-entity.php +++ b/src/classes/entities/class-tainacan-item-metadata-entity.php @@ -27,9 +27,10 @@ class Item_Metadata_Entity extends Entity { } public function __toJSON(){ - $json['value'] = $this->get_value(); - $json['item'] = $this->get_item(); - $json['metadata'] = $this->get_metadata(); + $json['value'] = $this->get_value(); + $json['item'] = $this->get_item()->__toJSON(); + $json['metadata'] = $this->get_metadata()->__toJSON(); + return json_encode($json); } diff --git a/src/classes/repositories/class-tainacan-item-metadata.php b/src/classes/repositories/class-tainacan-item-metadata.php index b8ac16d6b..1beabe330 100644 --- a/src/classes/repositories/class-tainacan-item-metadata.php +++ b/src/classes/repositories/class-tainacan-item-metadata.php @@ -17,7 +17,9 @@ class Item_Metadata extends Repository { delete_post_meta($item_metadata->item->get_id(), $item_metadata->metadata->get_id()); if (is_array($item_metadata->get_value())){ - foreach ($item_metadata->get_value() as $value){ + $values = $item_metadata->get_value(); + + foreach ($values as $value){ add_post_meta($item_metadata->item->get_id(), $item_metadata->metadata->get_id(), wp_slash( $value )); } } @@ -34,8 +36,23 @@ class Item_Metadata extends Repository { } - public function delete($object){ - + /** + * Delete Item Metadata + * + * @param $item_metadata + * + * @return mixed|void + */ + public function delete($item_metadata){ +// if(is_array($item_metadata->get_value())){ +// $values = $item_metadata->get_value(); +// +// foreach ($values as $value){ +// delete_post_meta($item_metadata->item->get_id(), $item_metadata->metadata->get_id(), wp_slash($value)); +// } +// } else { +// delete_post_meta($item_metadata->item->get_id(), $item_metadata->metadata->get_id(), wp_slash($item_metadata->get_value())); +// } } /** diff --git a/tests/test-api-metadata.php b/tests/test-api-metadata.php index 5f4072268..6862e169a 100644 --- a/tests/test-api-metadata.php +++ b/tests/test-api-metadata.php @@ -58,11 +58,12 @@ class TAINACAN_REST_Metadata_Controller extends TAINACAN_UnitApiTestCase { $response = $this->server->dispatch($request); - $metadata_updated = json_decode($response->get_data(), true); + $item_metadata_updated = json_decode($response->get_data(), true); + $metadata = json_decode($item_metadata_updated['metadata'], true); - $this->assertEquals($metadata_added['id'], $metadata_updated['id']); + $this->assertEquals($metadata_added['id'], $metadata['id']); - $metav = get_post_meta($item->get_id(), $metadata_updated['id'], true); + $metav = get_post_meta($item->get_id(), $metadata['id'], true); $this->assertEquals('Valorado', $metav); } @@ -139,10 +140,11 @@ class TAINACAN_REST_Metadata_Controller extends TAINACAN_UnitApiTestCase { $this->assertContainsOnly('string', $data); - $metadata = json_decode($data[0], true); + $item_metadata = json_decode($data[0], true); + $metadata = json_decode($item_metadata['metadata'], true); $this->assertEquals('Data', $metadata['name']); - $this->assertEquals('12/12/2017', $metadata['value']); + $this->assertEquals('12/12/2017', $item_metadata['value']); } }