Exception treatments
This commit is contained in:
parent
48a79a24dd
commit
c4f47882b4
File diff suppressed because it is too large
Load Diff
|
@ -34,11 +34,12 @@ class TAINACAN_REST_Collections_Controller extends WP_REST_Controller {
|
||||||
'methods' => WP_REST_Server::READABLE,
|
'methods' => WP_REST_Server::READABLE,
|
||||||
'callback' => array($this, 'get_items'),
|
'callback' => array($this, 'get_items'),
|
||||||
'permission_callback' => array($this, 'get_items_permissions_check'),
|
'permission_callback' => array($this, 'get_items_permissions_check'),
|
||||||
|
'args' => $this->get_item_schema()
|
||||||
),
|
),
|
||||||
array(
|
array(
|
||||||
'methods' => WP_REST_Server::CREATABLE,
|
'methods' => WP_REST_Server::CREATABLE,
|
||||||
'callback' => array($this, 'create_item'),
|
'callback' => array($this, 'create_item'),
|
||||||
//'permission_callback' => array($this, 'create_item_permissions_check'),
|
'permission_callback' => array($this, 'create_item_permissions_check'),
|
||||||
'args' => $this->get_endpoint_args_for_item_schema(WP_REST_Server::CREATABLE),
|
'args' => $this->get_endpoint_args_for_item_schema(WP_REST_Server::CREATABLE),
|
||||||
),
|
),
|
||||||
));
|
));
|
||||||
|
@ -88,7 +89,7 @@ class TAINACAN_REST_Collections_Controller extends WP_REST_Controller {
|
||||||
$collection_id = $request['collection_id'];
|
$collection_id = $request['collection_id'];
|
||||||
$collection = $this->collections_repository->fetch($collection_id);
|
$collection = $this->collections_repository->fetch($collection_id);
|
||||||
|
|
||||||
$response = $this->prepare_item_for_response($collection, $request);
|
$response = $this->prepare_item_for_response( $collection, $request );
|
||||||
|
|
||||||
return new WP_REST_Response($response, 200);
|
return new WP_REST_Response($response, 200);
|
||||||
}
|
}
|
||||||
|
@ -118,9 +119,11 @@ class TAINACAN_REST_Collections_Controller extends WP_REST_Controller {
|
||||||
|
|
||||||
return json_encode($collections_as_json);
|
return json_encode($collections_as_json);
|
||||||
}
|
}
|
||||||
else {
|
elseif(!empty($item)){
|
||||||
return $item->__toJSON();
|
return $item->__toJSON();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return $item;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -152,15 +155,13 @@ class TAINACAN_REST_Collections_Controller extends WP_REST_Controller {
|
||||||
* @return array|WP_Error|WP_REST_Response
|
* @return array|WP_Error|WP_REST_Response
|
||||||
*/
|
*/
|
||||||
public function create_item( $request ) {
|
public function create_item( $request ) {
|
||||||
$request = json_decode($request->get_body(), true);
|
$request = json_decode($request->get_body(), true);
|
||||||
|
|
||||||
if(empty($request)) {
|
try {
|
||||||
return new WP_Error('rest_empty', __('Empty request.'), array('status' => 204));
|
$prepared_post = $this->prepare_item_for_database( $request );
|
||||||
} elseif (!empty($request['collection_id'])){
|
} catch (\Error $exception){
|
||||||
return new WP_Error( 'rest_post_exists', __( 'Cannot create existing post.' ), array( 'status' => 400 ) );
|
return new WP_REST_Response($exception->getMessage(), 400);
|
||||||
}
|
}
|
||||||
|
|
||||||
$prepared_post = $this->prepare_item_for_database($request);
|
|
||||||
|
|
||||||
if($prepared_post->validate()) {
|
if($prepared_post->validate()) {
|
||||||
$collection = $this->collections_repository->insert( $prepared_post );
|
$collection = $this->collections_repository->insert( $prepared_post );
|
||||||
|
@ -179,11 +180,7 @@ class TAINACAN_REST_Collections_Controller extends WP_REST_Controller {
|
||||||
* @return bool|WP_Error
|
* @return bool|WP_Error
|
||||||
*/
|
*/
|
||||||
public function create_item_permissions_check( $request ) {
|
public function create_item_permissions_check( $request ) {
|
||||||
if(current_user_can('edit_posts')){
|
return true;
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -194,8 +191,11 @@ class TAINACAN_REST_Collections_Controller extends WP_REST_Controller {
|
||||||
* @return object|Entities\Collection|WP_Error
|
* @return object|Entities\Collection|WP_Error
|
||||||
*/
|
*/
|
||||||
public function prepare_item_for_database( $request ) {
|
public function prepare_item_for_database( $request ) {
|
||||||
$this->collection->set_name($request['name']);
|
|
||||||
$this->collection->set_description($request['description']);
|
foreach ($request as $key => $value){
|
||||||
|
$set_ = 'set_' . $key;
|
||||||
|
$this->collection->$set_($value);
|
||||||
|
}
|
||||||
|
|
||||||
return $this->collection;
|
return $this->collection;
|
||||||
}
|
}
|
||||||
|
@ -251,11 +251,7 @@ class TAINACAN_REST_Collections_Controller extends WP_REST_Controller {
|
||||||
* @return bool|WP_Error
|
* @return bool|WP_Error
|
||||||
*/
|
*/
|
||||||
public function update_item_permissions_check( $request ) {
|
public function update_item_permissions_check( $request ) {
|
||||||
if(current_user_can('edit_posts')){
|
return true;
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function get_collection_params() {
|
public function get_collection_params() {
|
||||||
|
@ -274,6 +270,12 @@ class TAINACAN_REST_Collections_Controller extends WP_REST_Controller {
|
||||||
|
|
||||||
return apply_filters("rest_{$this->collection->get_post_type()}_collection_params", $args, $this->collection->get_post_type());
|
return apply_filters("rest_{$this->collection->get_post_type()}_collection_params", $args, $this->collection->get_post_type());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function get_item_schema() {
|
||||||
|
$args = $this->collections_repository->get_map();
|
||||||
|
|
||||||
|
return apply_filters("rest_{$this->collection->get_post_type()}_collection_params", $args, $this->collection->get_post_type());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|
|
@ -141,8 +141,13 @@ class TAINACAN_REST_Items_Controller extends WP_REST_Controller {
|
||||||
* @return object|Entities\Item|WP_Error
|
* @return object|Entities\Item|WP_Error
|
||||||
*/
|
*/
|
||||||
public function prepare_item_for_database( $request ) {
|
public function prepare_item_for_database( $request ) {
|
||||||
$this->item->set_title($request[0]['title']);
|
|
||||||
$this->item->set_description($request[0]['description']);
|
$item_as_array = $request[0];
|
||||||
|
|
||||||
|
foreach ($item_as_array as $key => $value){
|
||||||
|
$set_ = 'set_' . $key;
|
||||||
|
$this->item->$set_($value);
|
||||||
|
}
|
||||||
|
|
||||||
$collection = new Entities\Collection($request[1]);
|
$collection = new Entities\Collection($request[1]);
|
||||||
|
|
||||||
|
@ -174,9 +179,13 @@ class TAINACAN_REST_Items_Controller extends WP_REST_Controller {
|
||||||
*/
|
*/
|
||||||
public function create_item( $request ) {
|
public function create_item( $request ) {
|
||||||
$collection_id = $request['collection_id'];
|
$collection_id = $request['collection_id'];
|
||||||
$item = json_decode($request->get_body(), true);
|
$item = json_decode($request->get_body(), true);
|
||||||
|
|
||||||
$metadata = $this->prepare_item_for_database([$item, $collection_id]);
|
try {
|
||||||
|
$metadata = $this->prepare_item_for_database( [ $item, $collection_id ] );
|
||||||
|
} catch (\Error $exception){
|
||||||
|
return new WP_REST_Response($exception->getMessage(), 400);
|
||||||
|
}
|
||||||
|
|
||||||
if($this->item->validate()) {
|
if($this->item->validate()) {
|
||||||
$item = $this->items_repository->insert($this->item );
|
$item = $this->items_repository->insert($this->item );
|
||||||
|
|
|
@ -5,7 +5,6 @@ use Tainacan\Repositories;
|
||||||
|
|
||||||
class TAINACAN_REST_Metadata_Controller extends WP_REST_Controller {
|
class TAINACAN_REST_Metadata_Controller extends WP_REST_Controller {
|
||||||
private $metadata;
|
private $metadata;
|
||||||
private $item_metadata;
|
|
||||||
private $metadata_repository;
|
private $metadata_repository;
|
||||||
private $item_metadata_repository;
|
private $item_metadata_repository;
|
||||||
private $item_repository;
|
private $item_repository;
|
||||||
|
@ -65,23 +64,38 @@ class TAINACAN_REST_Metadata_Controller extends WP_REST_Controller {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param WP_REST_Request $request
|
||||||
|
*
|
||||||
|
* @return object|void|WP_Error
|
||||||
|
*/
|
||||||
public function prepare_item_for_database( $request ) {
|
public function prepare_item_for_database( $request ) {
|
||||||
$meta = json_decode($request[0]->get_body(), true);
|
$meta = json_decode($request[0]->get_body(), true);
|
||||||
|
|
||||||
$this->metadata->set_name($meta['name']);
|
foreach ($meta as $key => $value){
|
||||||
$this->metadata->set_description($meta['description']);
|
$set_ = 'set_' . $key;
|
||||||
$this->metadata->set_field_type($meta['field_type']);
|
$this->metadata->$set_($value);
|
||||||
|
}
|
||||||
|
|
||||||
$collection = new Entities\Collection($request[1]);
|
$collection = new Entities\Collection($request[1]);
|
||||||
|
|
||||||
$this->metadata->set_collection($collection);
|
$this->metadata->set_collection($collection);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param WP_REST_Request $request
|
||||||
|
*
|
||||||
|
* @return WP_Error|WP_REST_Response
|
||||||
|
*/
|
||||||
public function create_item( $request ) {
|
public function create_item( $request ) {
|
||||||
if(!empty($request['collection_id'])){
|
if(!empty($request['collection_id'])){
|
||||||
$collection_id = $request['collection_id'];
|
$collection_id = $request['collection_id'];
|
||||||
|
|
||||||
$this->prepare_item_for_database([$request, $collection_id]);
|
try {
|
||||||
|
$this->prepare_item_for_database( [ $request, $collection_id ] );
|
||||||
|
} catch (\Error $exception){
|
||||||
|
return new WP_REST_Response($exception->getMessage(), 400);
|
||||||
|
}
|
||||||
|
|
||||||
if($this->metadata->validate()) {
|
if($this->metadata->validate()) {
|
||||||
$this->metadata_repository->insert( $this->metadata );
|
$this->metadata_repository->insert( $this->metadata );
|
||||||
|
@ -98,9 +112,14 @@ class TAINACAN_REST_Metadata_Controller extends WP_REST_Controller {
|
||||||
|
|
||||||
$metadata_added = $this->item_metadata_repository->insert($item_meta);
|
$metadata_added = $this->item_metadata_repository->insert($item_meta);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return new WP_REST_Response($metadata_added->get_metadata()->__toJSON(), 201);
|
return new WP_REST_Response($metadata_added->get_metadata()->__toJSON(), 201);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return new WP_REST_Response($this->metadata->__toJSON(), 201);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return new WP_REST_Response($this->metadata->get_errors(), 200);
|
||||||
}
|
}
|
||||||
} elseif (!empty($request['item_id']) && !empty($request->get_body())){
|
} elseif (!empty($request['item_id']) && !empty($request->get_body())){
|
||||||
$body = json_decode($request->get_body(), true);
|
$body = json_decode($request->get_body(), true);
|
||||||
|
@ -119,6 +138,8 @@ class TAINACAN_REST_Metadata_Controller extends WP_REST_Controller {
|
||||||
$metadata_updated = $this->item_metadata_repository->insert( $item_metadata );
|
$metadata_updated = $this->item_metadata_repository->insert( $item_metadata );
|
||||||
|
|
||||||
return new WP_REST_Response( $metadata_updated->get_metadata()->__toJSON(), 201 );
|
return new WP_REST_Response( $metadata_updated->get_metadata()->__toJSON(), 201 );
|
||||||
|
} else {
|
||||||
|
return new WP_REST_Response( $item_metadata->get_errors(), 200);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
return new WP_REST_Response($request->get_body(), 400);
|
return new WP_REST_Response($request->get_body(), 400);
|
||||||
|
|
|
@ -16,8 +16,7 @@ class Log extends Entity {
|
||||||
*/
|
*/
|
||||||
protected $repository = 'Tainacan_Logs';
|
protected $repository = 'Tainacan_Logs';
|
||||||
|
|
||||||
public function __construct($which=0)
|
public function __construct($which=0) {
|
||||||
{
|
|
||||||
parent::__construct($which);
|
parent::__construct($which);
|
||||||
|
|
||||||
if( is_int($which) && $which == 0) {
|
if( is_int($which) && $which == 0) {
|
||||||
|
|
|
@ -162,8 +162,13 @@ class Collections extends Repository {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function delete($args){
|
/**
|
||||||
if($args[1]['is_permanently'] === true){
|
* @param $args ( is a array like [post_id, [is_permanently => bool]] )
|
||||||
|
*
|
||||||
|
* @return mixed|Collection
|
||||||
|
*/
|
||||||
|
public function delete($args){
|
||||||
|
if(!empty($args[1]) && $args[1]['is_permanently'] === true){
|
||||||
return new Entities\Collection(wp_delete_post($args[0], $args[1]['is_permanently']));
|
return new Entities\Collection(wp_delete_post($args[0], $args[1]['is_permanently']));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -200,8 +200,13 @@ class Items extends Repository {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function delete($args){
|
/**
|
||||||
if($args[1]['is_permanently'] === true){
|
* @param $args ( is a array like [post_id, [is_permanently => bool]] )
|
||||||
|
*
|
||||||
|
* @return mixed|Entities\Item
|
||||||
|
*/
|
||||||
|
public function delete($args){
|
||||||
|
if(!empty($args[1]) && $args[1]['is_permanently'] === true){
|
||||||
return new Entities\Item(wp_delete_post($args[0], $args[1]['is_permanently']));
|
return new Entities\Item(wp_delete_post($args[0], $args[1]['is_permanently']));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@ Plugin Name: Tainacan
|
||||||
Plugin URI: https://github.com/tainacan/tainacan
|
Plugin URI: https://github.com/tainacan/tainacan
|
||||||
Description: Transforme seu site Wordpress em um repositório digital
|
Description: Transforme seu site Wordpress em um repositório digital
|
||||||
Author: Media Lab / UFG
|
Author: Media Lab / UFG
|
||||||
|
Author URI: https://www.medialab.ufg.br
|
||||||
Version: 1.0
|
Version: 1.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,7 @@ class Entity_Factory {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if(empty($type)){
|
if(empty($type)){
|
||||||
throw new \InvalidArgumentException(__('The type can\'t be empty'));
|
throw new \InvalidArgumentException(__('The type can\'t be empty', 'tainacan'));
|
||||||
} elseif(!strrchr($type, '_')){
|
} elseif(!strrchr($type, '_')){
|
||||||
$type = ucfirst(strtolower($type));
|
$type = ucfirst(strtolower($type));
|
||||||
} else {
|
} else {
|
||||||
|
@ -62,7 +62,7 @@ class Entity_Factory {
|
||||||
if ($this->entity->validate()) {
|
if ($this->entity->validate()) {
|
||||||
$this->entity = $this->repository->insert($this->entity);
|
$this->entity = $this->repository->insert($this->entity);
|
||||||
} else {
|
} else {
|
||||||
throw new \ErrorException( __( 'The entity wasn\'t validated.' ) );
|
throw new \ErrorException( __( 'The entity wasn\'t validated.', 'tainacan' ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
} elseif (!empty($args) && !$is_validated_and_in_db){
|
} elseif (!empty($args) && !$is_validated_and_in_db){
|
||||||
|
@ -79,19 +79,19 @@ class Entity_Factory {
|
||||||
|
|
||||||
} elseif (empty($args) && !$is_validated_and_in_db) {
|
} elseif (empty($args) && !$is_validated_and_in_db) {
|
||||||
try {
|
try {
|
||||||
$this->entity->set_name( "$type" . random_int( 0, 10000 ) . " for test" );
|
$this->entity->set_name( "$type " . random_int( 0, 10000 ) . " for test" );
|
||||||
$this->entity->set_description( 'It is only for test' );
|
$this->entity->set_description( 'It is only for test' );
|
||||||
} catch (\Error $exception){
|
} catch (\Error $exception){
|
||||||
$this->entity->set_title( "$type" . random_int( 0, 10000 ) . " for test" );
|
$this->entity->set_title( "$type " . random_int( 0, 10000 ) . " for test" );
|
||||||
$this->entity->set_description( 'It is only for test' );
|
$this->entity->set_description( 'It is only for test' );
|
||||||
}
|
}
|
||||||
|
|
||||||
} elseif (empty($args) && $is_validated_and_in_db) {
|
} elseif (empty($args) && $is_validated_and_in_db) {
|
||||||
try {
|
try {
|
||||||
$this->entity->set_name( "$type" . random_int( 0, 10000 ) . " for test" );
|
$this->entity->set_name( "$type " . random_int( 0, 10000 ) . " for test" );
|
||||||
$this->entity->set_description( 'It is only for test' );
|
$this->entity->set_description( 'It is only for test' );
|
||||||
} catch (\Error $exception){
|
} catch (\Error $exception){
|
||||||
$this->entity->set_title( "$type" . random_int( 0, 10000 ) . " for test" );
|
$this->entity->set_title( "$type " . random_int( 0, 10000 ) . " for test" );
|
||||||
$this->entity->set_description( 'It is only for test' );
|
$this->entity->set_description( 'It is only for test' );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -99,7 +99,7 @@ class Entity_Factory {
|
||||||
if ($this->entity->validate()) {
|
if ($this->entity->validate()) {
|
||||||
$this->entity = $this->repository->insert( $this->entity );
|
$this->entity = $this->repository->insert( $this->entity );
|
||||||
} else {
|
} else {
|
||||||
throw new \ErrorException( __( 'The entity wasn\'t validated.' ) );
|
throw new \ErrorException( __( 'The entity wasn\'t validated.', 'tainacan' ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -8,7 +8,7 @@ class Field_Factory {
|
||||||
|
|
||||||
public function create_field($type, $primitive_type = []){
|
public function create_field($type, $primitive_type = []){
|
||||||
if(empty($type)){
|
if(empty($type)){
|
||||||
throw new \InvalidArgumentException(__('The type can\'t be empty'));
|
throw new \InvalidArgumentException(__('The type can\'t be empty', 'tainacan'));
|
||||||
} elseif(!strrchr($type, '_')){
|
} elseif(!strrchr($type, '_')){
|
||||||
$type = ucfirst(strtolower($type));
|
$type = ucfirst(strtolower($type));
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -8,7 +8,7 @@ class Filter_Factory {
|
||||||
|
|
||||||
public function create_filter($type, $supported_types = []){
|
public function create_filter($type, $supported_types = []){
|
||||||
if(empty($type)){
|
if(empty($type)){
|
||||||
throw new \InvalidArgumentException(__('The type can\'t be empty'));
|
throw new \InvalidArgumentException(__('The type can\'t be empty', 'tainacan'));
|
||||||
} elseif(!strrchr($type, '_')){
|
} elseif(!strrchr($type, '_')){
|
||||||
$type = ucfirst(strtolower($type));
|
$type = ucfirst(strtolower($type));
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -12,7 +12,7 @@ class TAINACAN_UnitTestCase extends \WP_UnitTestCase {
|
||||||
public function setUp(){
|
public function setUp(){
|
||||||
parent::setUp();
|
parent::setUp();
|
||||||
$this->tainacan_entity_factory = new Factories\Entity_Factory();
|
$this->tainacan_entity_factory = new Factories\Entity_Factory();
|
||||||
$this->tainacan_field_factory = new Factories\Field_Factory();
|
$this->tainacan_field_factory = new Factories\Field_Factory();
|
||||||
$this->tainacan_filter_factory = new Factories\Filter_Factory();
|
$this->tainacan_filter_factory = new Factories\Filter_Factory();
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -12,9 +12,9 @@ class TAINACAN_REST_Metadata_Controller extends TAINACAN_UnitApiTestCase {
|
||||||
$item = $this->tainacan_entity_factory->create_entity(
|
$item = $this->tainacan_entity_factory->create_entity(
|
||||||
'item',
|
'item',
|
||||||
array(
|
array(
|
||||||
'title' => 'No name',
|
'title' => 'No name',
|
||||||
'description' => 'No description',
|
'description' => 'No description',
|
||||||
'collection' => $collection
|
'collection' => $collection
|
||||||
),
|
),
|
||||||
true
|
true
|
||||||
);
|
);
|
||||||
|
@ -23,9 +23,9 @@ class TAINACAN_REST_Metadata_Controller extends TAINACAN_UnitApiTestCase {
|
||||||
|
|
||||||
$metadata = json_encode(
|
$metadata = json_encode(
|
||||||
array(
|
array(
|
||||||
'name' => 'Moeda',
|
'name' => 'Moeda',
|
||||||
'description' => 'Descreve campo moeda.',
|
'description' => 'Descreve campo moeda.',
|
||||||
'field_type' => $field->get_primitive_type(),
|
'field_type' => $field->get_primitive_type(),
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -13,8 +13,7 @@ use Tainacan\Repositories\Repository;
|
||||||
* @group architecture
|
* @group architecture
|
||||||
*/
|
*/
|
||||||
class Objects extends TAINACAN_UnitTestCase {
|
class Objects extends TAINACAN_UnitTestCase {
|
||||||
function test_object_transformation()
|
function test_object_transformation() {
|
||||||
{
|
|
||||||
$x = $this->tainacan_entity_factory->create_entity(
|
$x = $this->tainacan_entity_factory->create_entity(
|
||||||
'collection',
|
'collection',
|
||||||
array(
|
array(
|
||||||
|
|
Loading…
Reference in New Issue