refactor filters and meta fetch_by_collection considering perms #274
This commit is contained in:
parent
6a5c60ed44
commit
6e7bd268ee
|
@ -201,24 +201,20 @@ class REST_Filters_Controller extends REST_Controller {
|
|||
* @throws \Exception
|
||||
*/
|
||||
public function create_item_permissions_check( $request ) {
|
||||
if(isset($request['collection_id']) && isset($request['metadatum_id'])) {
|
||||
$metadata = $this->metadatum_repository->fetch( $request['metadatum_id'] );
|
||||
$collection = $this->collection_repository->fetch( $request['collection_id'] );
|
||||
|
||||
if ( ( $metadata instanceof Entities\Metadatum ) && ( $collection instanceof Entities\Collection ) ) {
|
||||
return $this->filter_repository->can_edit( new Entities\Filter() ) && $metadata->can_edit() && $collection->can_edit();
|
||||
}
|
||||
|
||||
} elseif (isset($request['collection_id'])){
|
||||
if( isset($request['collection_id']) ) {
|
||||
$collection = $this->collection_repository->fetch( $request['collection_id'] );
|
||||
|
||||
if ( $collection instanceof Entities\Collection ) {
|
||||
return $collection->can_edit();
|
||||
return current_user_can( 'tnc_col_' . $collection->get_id() . '_manage_filters' );
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
return current_user_can( 'tnc_rep_manage_filters' );
|
||||
|
||||
}
|
||||
|
||||
return $this->filter_repository->can_edit(new Entities\Metadatum());
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -386,7 +382,7 @@ class REST_Filters_Controller extends REST_Controller {
|
|||
$filters = $this->filter_repository->fetch( $args, 'OBJECT' );
|
||||
} else {
|
||||
$collection = $this->collection_repository->fetch($request['collection_id']);
|
||||
$filters = $this->filter_repository->fetch_by_collection($collection, $args, 'OBJECT');
|
||||
$filters = $this->filter_repository->fetch_by_collection($collection, $args);
|
||||
}
|
||||
|
||||
$response = [];
|
||||
|
|
|
@ -352,7 +352,7 @@ class REST_Metadata_Controller extends REST_Controller {
|
|||
|
||||
$collection = new Entities\Collection( $collection_id );
|
||||
|
||||
$result = $this->metadatum_repository->fetch_by_collection( $collection, $args, 'OBJECT' );
|
||||
$result = $this->metadatum_repository->fetch_by_collection( $collection, $args );
|
||||
} else {
|
||||
$args = [
|
||||
'meta_query' => [
|
||||
|
|
|
@ -140,7 +140,7 @@ class Elastic_Press {
|
|||
|
||||
if ($col) {
|
||||
|
||||
$metadata = $Tainacan_Metadata->fetch_by_collection($col, ['posts_per_page' => -1], 'OBJECT');
|
||||
$metadata = $Tainacan_Metadata->fetch_by_collection($col, ['posts_per_page' => -1]);
|
||||
|
||||
foreach ($metadata as $meta) {
|
||||
$meta_ids[] = $meta->get_id();
|
||||
|
@ -200,7 +200,7 @@ class Elastic_Press {
|
|||
|
||||
foreach ( $args['post_type'] as $cpt ) {
|
||||
$col = $Tainacan_Collections->fetch_by_db_identifier($cpt);
|
||||
$_filters = $Tainacan_Filters->fetch_by_collection($col, ['posts_per_page' => -1], 'OBJECT');
|
||||
$_filters = $Tainacan_Filters->fetch_by_collection($col, ['posts_per_page' => -1]);
|
||||
foreach ($_filters as $filter) {
|
||||
$include = [];
|
||||
$filter_id = $filter->get_id();
|
||||
|
|
|
@ -484,7 +484,7 @@ class Collection extends Entity {
|
|||
function get_metadata() {
|
||||
$Tainacan_Metadata = \Tainacan\Repositories\Metadata::get_instance();
|
||||
|
||||
return $Tainacan_Metadata->fetch_by_collection( $this, [], 'OBJECT' );
|
||||
return $Tainacan_Metadata->fetch_by_collection( $this );
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -351,23 +351,67 @@ class Filters extends Repository {
|
|||
*
|
||||
* @param Entities\Collection $collection
|
||||
* @param array $args WP_Query args plus disabled_metadata
|
||||
* @param string $output The desired output format (@see \Tainacan\Repositories\Repository::fetch_output() for possible values)
|
||||
*
|
||||
* @return array Entities\Metadatum
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function fetch_by_collection( Entities\Collection $collection, $args = [], $output = null ) {
|
||||
public function fetch_by_collection( Entities\Collection $collection, $args = [] ) {
|
||||
$collection_id = $collection->get_id();
|
||||
|
||||
//get parent collections
|
||||
$parents = get_post_ancestors( $collection_id );
|
||||
|
||||
//insert the actual collection
|
||||
if ( is_numeric($collection_id) ) {
|
||||
$parents[] = $collection_id;
|
||||
}
|
||||
|
||||
//search for default metadatum
|
||||
$parents[] = 'default';
|
||||
|
||||
$results = [];
|
||||
|
||||
$args = array_merge( [
|
||||
'parent' => 0
|
||||
], $args );
|
||||
|
||||
$original_meta_q = isset( $args['meta_query'] ) ? $args['meta_query'] : [];
|
||||
|
||||
/**
|
||||
* Since we introduced roles & capabalities management, we can not rely
|
||||
* on WordPress behavior when handling default post status values.
|
||||
* WordPress checks if the current user can read_priva_posts, but this is
|
||||
* not enough for us. We have to handle this ourselves to mimic WordPress behavior
|
||||
* considering how tainacan manages metadata capabilities
|
||||
*/
|
||||
if ( ! isset($args['post_status']) ) {
|
||||
|
||||
foreach ( $parents as $parent_id ) {
|
||||
|
||||
// Add public states.
|
||||
$statuses = get_post_stati( array( 'public' => true ) );
|
||||
|
||||
$read_private_cap = 'default' == $parent_id ? 'tnc_rep_read_private_filters' : 'tnc_col_' . $parent_id . '_read_private_filters';
|
||||
if ( current_user_can($read_private_cap) ) {
|
||||
$statuses = array_merge( $statuses, get_post_stati( array( 'private' => true ) ) );
|
||||
}
|
||||
|
||||
$args['post_status'] = $statuses;
|
||||
|
||||
$meta_query = array(
|
||||
'key' => 'collection_id',
|
||||
'value' => $parent_id,
|
||||
);
|
||||
|
||||
$args['meta_query'] = $original_meta_q;
|
||||
$args['meta_query'][] = $meta_query;
|
||||
|
||||
//var_dump($args);
|
||||
$results = array_merge($results, $this->fetch( $args, 'OBJECT' ));
|
||||
|
||||
}
|
||||
|
||||
} else {
|
||||
$meta_query = array(
|
||||
'key' => 'collection_id',
|
||||
'value' => $parents,
|
||||
|
@ -378,14 +422,16 @@ class Filters extends Repository {
|
|||
'parent' => 0
|
||||
], $args );
|
||||
|
||||
if ( isset( $args['meta_query'] ) ) {
|
||||
$args['meta_query'] = $original_meta_q;
|
||||
$args['meta_query'][] = $meta_query;
|
||||
} else {
|
||||
$args['meta_query'] = array( $meta_query );
|
||||
|
||||
$results = $this->fetch( $args, 'OBJECT' );
|
||||
}
|
||||
|
||||
|
||||
|
||||
return $this->order_result(
|
||||
$this->fetch( $args, $output ),
|
||||
$results,
|
||||
$collection,
|
||||
isset( $args['include_disabled'] ) ? $args['include_disabled'] : false
|
||||
);
|
||||
|
@ -414,11 +460,55 @@ class Filters extends Repository {
|
|||
$parents = get_post_ancestors( $collection_id );
|
||||
|
||||
//insert the actual collection
|
||||
if ( is_numeric($collection_id) ) {
|
||||
$parents[] = $collection_id;
|
||||
}
|
||||
|
||||
//search for default metadatum
|
||||
$parents[] = 'default';
|
||||
|
||||
$results = [];
|
||||
|
||||
$args = array_merge( [
|
||||
'parent' => 0
|
||||
], $args );
|
||||
|
||||
$original_meta_q = isset( $args['meta_query'] ) ? $args['meta_query'] : [];
|
||||
|
||||
/**
|
||||
* Since we introduced roles & capabalities management, we can not rely
|
||||
* on WordPress behavior when handling default post status values.
|
||||
* WordPress checks if the current user can read_priva_posts, but this is
|
||||
* not enough for us. We have to handle this ourselves to mimic WordPress behavior
|
||||
* considering how tainacan manages metadata capabilities
|
||||
*/
|
||||
if ( ! isset($args['post_status']) ) {
|
||||
|
||||
foreach ( $parents as $parent_id ) {
|
||||
|
||||
// Add public states.
|
||||
$statuses = get_post_stati( array( 'public' => true ) );
|
||||
|
||||
$read_private_cap = 'default' == $parent_id ? 'tnc_rep_read_private_filters' : 'tnc_col_' . $parent_id . '_read_private_filters';
|
||||
if ( current_user_can($read_private_cap) ) {
|
||||
$statuses = array_merge( $statuses, get_post_stati( array( 'private' => true ) ) );
|
||||
}
|
||||
|
||||
$args['post_status'] = $statuses;
|
||||
|
||||
$meta_query = array(
|
||||
'key' => 'collection_id',
|
||||
'value' => $parent_id,
|
||||
);
|
||||
|
||||
$args['meta_query'] = $original_meta_q;
|
||||
$args['meta_query'][] = $meta_query;
|
||||
|
||||
$results = array_merge($results, $this->fetch_ids( $args ));
|
||||
|
||||
}
|
||||
|
||||
} else {
|
||||
$meta_query = array(
|
||||
'key' => 'collection_id',
|
||||
'value' => $parents,
|
||||
|
@ -429,13 +519,13 @@ class Filters extends Repository {
|
|||
'parent' => 0
|
||||
], $args );
|
||||
|
||||
if ( isset( $args['meta_query'] ) ) {
|
||||
$args['meta_query'] = $original_meta_q;
|
||||
$args['meta_query'][] = $meta_query;
|
||||
} elseif ( is_array( $args ) ) {
|
||||
$args['meta_query'] = array( $meta_query );
|
||||
|
||||
$results = $this->fetch_ids( $args );
|
||||
}
|
||||
|
||||
return $this->fetch_ids( $args );
|
||||
return $results;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -229,7 +229,7 @@ class Item_Metadata extends Repository {
|
|||
return [];
|
||||
}
|
||||
|
||||
$meta_list = $Tainacan_Metadata->fetch_by_collection( $collection, $args, 'OBJECT' );
|
||||
$meta_list = $Tainacan_Metadata->fetch_by_collection( $collection, $args );
|
||||
|
||||
$return = [];
|
||||
|
||||
|
|
|
@ -364,23 +364,67 @@ class Metadata extends Repository {
|
|||
*
|
||||
* @param Entities\Collection $collection
|
||||
* @param array $args WP_Query args plus disabled_metadata
|
||||
* @param string $output The desired output format (@see \Tainacan\Repositories\Repository::fetch_output() for possible values)
|
||||
*
|
||||
* @return array Entities\Metadatum
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function fetch_by_collection( Entities\Collection $collection, $args = [], $output = null ) {
|
||||
public function fetch_by_collection( Entities\Collection $collection, $args = [] ) {
|
||||
$collection_id = $collection->get_id();
|
||||
|
||||
//get parent collections
|
||||
$parents = get_post_ancestors( $collection_id );
|
||||
|
||||
//insert the actual collection
|
||||
if ( is_numeric($collection_id) ) {
|
||||
$parents[] = $collection_id;
|
||||
}
|
||||
|
||||
//search for default metadatum
|
||||
$parents[] = $this->get_default_metadata_attribute();
|
||||
|
||||
$results = [];
|
||||
|
||||
$args = array_merge( [
|
||||
'parent' => 0
|
||||
], $args );
|
||||
|
||||
$original_meta_q = isset( $args['meta_query'] ) ? $args['meta_query'] : [];
|
||||
|
||||
/**
|
||||
* Since we introduced roles & capabalities management, we can not rely
|
||||
* on WordPress behavior when handling default post status values.
|
||||
* WordPress checks if the current user can read_priva_posts, but this is
|
||||
* not enough for us. We have to handle this ourselves to mimic WordPress behavior
|
||||
* considering how tainacan manages metadata capabilities
|
||||
*/
|
||||
if ( ! isset($args['post_status']) ) {
|
||||
|
||||
foreach ( $parents as $parent_id ) {
|
||||
|
||||
// Add public states.
|
||||
$statuses = get_post_stati( array( 'public' => true ) );
|
||||
|
||||
$read_private_cap = $this->get_default_metadata_attribute() == $parent_id ? 'tnc_rep_read_private_metadata' : 'tnc_col_' . $parent_id . '_read_private_metadata';
|
||||
if ( current_user_can($read_private_cap) ) {
|
||||
$statuses = array_merge( $statuses, get_post_stati( array( 'private' => true ) ) );
|
||||
}
|
||||
|
||||
$args['post_status'] = $statuses;
|
||||
|
||||
$meta_query = array(
|
||||
'key' => 'collection_id',
|
||||
'value' => $parent_id,
|
||||
);
|
||||
|
||||
$args['meta_query'] = $original_meta_q;
|
||||
$args['meta_query'][] = $meta_query;
|
||||
|
||||
//var_dump($args);
|
||||
$results = array_merge($results, $this->fetch( $args, 'OBJECT' ));
|
||||
|
||||
}
|
||||
|
||||
} else {
|
||||
$meta_query = array(
|
||||
'key' => 'collection_id',
|
||||
'value' => $parents,
|
||||
|
@ -391,14 +435,16 @@ class Metadata extends Repository {
|
|||
'parent' => 0
|
||||
], $args );
|
||||
|
||||
if ( isset( $args['meta_query'] ) ) {
|
||||
$args['meta_query'] = $original_meta_q;
|
||||
$args['meta_query'][] = $meta_query;
|
||||
} elseif ( is_array( $args ) ) {
|
||||
$args['meta_query'] = array( $meta_query );
|
||||
|
||||
$results = $this->fetch( $args, 'OBJECT' );
|
||||
}
|
||||
|
||||
|
||||
|
||||
return $this->order_result(
|
||||
$this->fetch( $args, $output ),
|
||||
$results,
|
||||
$collection,
|
||||
isset( $args['include_disabled'] ) ? $args['include_disabled'] : false
|
||||
);
|
||||
|
@ -427,11 +473,55 @@ class Metadata extends Repository {
|
|||
$parents = get_post_ancestors( $collection_id );
|
||||
|
||||
//insert the actual collection
|
||||
if ( is_numeric($collection_id) ) {
|
||||
$parents[] = $collection_id;
|
||||
}
|
||||
|
||||
//search for default metadatum
|
||||
$parents[] = $this->get_default_metadata_attribute();
|
||||
|
||||
$results = [];
|
||||
|
||||
$args = array_merge( [
|
||||
'parent' => 0
|
||||
], $args );
|
||||
|
||||
$original_meta_q = isset( $args['meta_query'] ) ? $args['meta_query'] : [];
|
||||
|
||||
/**
|
||||
* Since we introduced roles & capabalities management, we can not rely
|
||||
* on WordPress behavior when handling default post status values.
|
||||
* WordPress checks if the current user can read_priva_posts, but this is
|
||||
* not enough for us. We have to handle this ourselves to mimic WordPress behavior
|
||||
* considering how tainacan manages metadata capabilities
|
||||
*/
|
||||
if ( ! isset($args['post_status']) ) {
|
||||
|
||||
foreach ( $parents as $parent_id ) {
|
||||
|
||||
// Add public states.
|
||||
$statuses = get_post_stati( array( 'public' => true ) );
|
||||
|
||||
$read_private_cap = $this->get_default_metadata_attribute() == $parent_id ? 'tnc_rep_read_private_metadata' : 'tnc_col_' . $parent_id . '_read_private_metadata';
|
||||
if ( current_user_can($read_private_cap) ) {
|
||||
$statuses = array_merge( $statuses, get_post_stati( array( 'private' => true ) ) );
|
||||
}
|
||||
|
||||
$args['post_status'] = $statuses;
|
||||
|
||||
$meta_query = array(
|
||||
'key' => 'collection_id',
|
||||
'value' => $parent_id,
|
||||
);
|
||||
|
||||
$args['meta_query'] = $original_meta_q;
|
||||
$args['meta_query'][] = $meta_query;
|
||||
|
||||
$results = array_merge($results, $this->fetch_ids( $args ));
|
||||
|
||||
}
|
||||
|
||||
} else {
|
||||
$meta_query = array(
|
||||
'key' => 'collection_id',
|
||||
'value' => $parents,
|
||||
|
@ -442,13 +532,13 @@ class Metadata extends Repository {
|
|||
'parent' => 0
|
||||
], $args );
|
||||
|
||||
if ( isset( $args['meta_query'] ) ) {
|
||||
$args['meta_query'] = $original_meta_q;
|
||||
$args['meta_query'][] = $meta_query;
|
||||
} elseif ( is_array( $args ) ) {
|
||||
$args['meta_query'] = array( $meta_query );
|
||||
|
||||
$results = $this->fetch_ids( $args );
|
||||
}
|
||||
|
||||
return $this->fetch_ids( $args );
|
||||
return $results;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -456,11 +546,11 @@ class Metadata extends Repository {
|
|||
* metadata not ordinated appear on the end of the list
|
||||
*
|
||||
*
|
||||
* @param \WP_Query|array $result Response from method fetch
|
||||
* @param array $result Response from method fetch_by_collection
|
||||
* @param Entities\Collection $collection
|
||||
* @param bool $include_disabled Wether to include disabled metadata in the results or not
|
||||
*
|
||||
* @return array or WP_Query ordinate
|
||||
* @return array
|
||||
*/
|
||||
public function order_result( $result, Entities\Collection $collection, $include_disabled = false ) {
|
||||
$order = $collection->get_metadata_order();
|
||||
|
@ -495,29 +585,8 @@ class Metadata extends Repository {
|
|||
$result_ordinate = array_merge( $result_ordinate, $not_ordinate );
|
||||
|
||||
return $result_ordinate;
|
||||
} // if the result is a wp query object
|
||||
else {
|
||||
$posts = $result->posts;
|
||||
$result_ordinate = [];
|
||||
$not_ordinate = [];
|
||||
|
||||
foreach ( $posts as $item ) {
|
||||
$id = $item->ID;
|
||||
$index = array_search( $id, array_column( $order, 'id' ) );
|
||||
|
||||
if ( $index !== false ) {
|
||||
$result_ordinate[ $index ] = $item;
|
||||
} else {
|
||||
$not_ordinate[] = $item;
|
||||
}
|
||||
}
|
||||
|
||||
ksort( $result_ordinate );
|
||||
$result->posts = $result_ordinate;
|
||||
$result->posts = array_merge( $result->posts, $not_ordinate );
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
|
||||
return $result;
|
||||
|
@ -761,7 +830,7 @@ class Metadata extends Repository {
|
|||
]
|
||||
],
|
||||
'include_disabled' => true
|
||||
], 'OBJECT' );
|
||||
] );
|
||||
|
||||
}
|
||||
|
||||
|
@ -783,7 +852,7 @@ class Metadata extends Repository {
|
|||
]
|
||||
],
|
||||
'posts_per_page' => 1
|
||||
], 'OBJECT' );
|
||||
] );
|
||||
|
||||
if ( is_array( $results ) && sizeof( $results ) == 1 && $results[0] instanceof \Tainacan\Entities\Metadatum ) {
|
||||
return $results[0];
|
||||
|
@ -810,7 +879,7 @@ class Metadata extends Repository {
|
|||
]
|
||||
],
|
||||
'posts_per_page' => 1
|
||||
], 'OBJECT' );
|
||||
] );
|
||||
|
||||
if ( is_array( $results ) && sizeof( $results ) == 1 && $results[0] instanceof \Tainacan\Entities\Metadatum ) {
|
||||
return $results[0];
|
||||
|
|
|
@ -206,18 +206,17 @@ class Taxonomies extends Repository {
|
|||
*
|
||||
* @param Entities\Collection $collection
|
||||
* @param array $args WP_Query args plus disabled_metadata
|
||||
* @param string $output The desired output format (@see \Tainacan\Repositories\Repository::fetch_output() for possible values)
|
||||
*
|
||||
* @return array Entities\Taxonomy
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function fetch_by_collection( Entities\Collection $collection, $args = [], $output = null ) {
|
||||
public function fetch_by_collection( Entities\Collection $collection, $args = [] ) {
|
||||
$collection_id = $collection->get_id();
|
||||
|
||||
$Tainacan_Metadata = Metadata::get_instance();
|
||||
|
||||
// get all taxonomy metadata in this collection
|
||||
$taxonomy_metas = $Tainacan_Metadata->fetch_by_collection($collection, ['metadata_type' => 'Tainacan\Metadata_Types\Taxonomy'], 'OBJECT');
|
||||
$taxonomy_metas = $Tainacan_Metadata->fetch_by_collection($collection, ['metadata_type' => 'Tainacan\Metadata_Types\Taxonomy']);
|
||||
|
||||
$tax_ids = [];
|
||||
|
||||
|
@ -237,7 +236,7 @@ class Taxonomies extends Repository {
|
|||
];
|
||||
|
||||
$args = array_merge($args, $newargs);
|
||||
return $this->fetch($args, $output);
|
||||
return $this->fetch($args, 'OBJECT');
|
||||
|
||||
}
|
||||
|
||||
|
@ -339,7 +338,7 @@ class Taxonomies extends Repository {
|
|||
|
||||
// register taxonomies to other collections considering metadata inheritance
|
||||
foreach ( $collections as $collection ) {
|
||||
$taxonomies = $this->fetch_by_collection($collection, ['nopaging' => true], 'OBJECT');
|
||||
$taxonomies = $this->fetch_by_collection($collection, ['nopaging' => true]);
|
||||
foreach ( $taxonomies as $taxonomy ) {
|
||||
register_taxonomy_for_object_type( $taxonomy->get_db_identifier(), $collection->get_db_identifier() );
|
||||
}
|
||||
|
|
|
@ -505,7 +505,7 @@ class DevInterface {
|
|||
}
|
||||
|
||||
|
||||
$metalist = $Tainacan_Metadata->fetch_by_collection($cpts[$post_type], [], 'OBJECT');
|
||||
$metalist = $Tainacan_Metadata->fetch_by_collection( $cpts[$post_type] );
|
||||
|
||||
foreach ($metalist as $meta) {
|
||||
$item_meta = new \Tainacan\Entities\Item_Metadata_Entity($entity, $meta);
|
||||
|
|
|
@ -53,7 +53,7 @@ use Tainacan\Entities;
|
|||
public static function metadata_dropdown( $collection , $selected, $name_metadatum = 'tnc_prop_metadatum_id', $args = []){
|
||||
$Tainacan_Metadata = \Tainacan\Repositories\Metadata::get_instance();
|
||||
$collection = ( is_numeric( $collection ) ) ? new Entities\Collection( $collection ) : $collection;
|
||||
$metadatum = $Tainacan_Metadata->fetch_by_collection( $collection, $args, 'OBJECT');
|
||||
$metadatum = $Tainacan_Metadata->fetch_by_collection( $collection, $args);
|
||||
?>
|
||||
<select name="<?php echo $name_metadatum ?>">
|
||||
<option value=""><?php echo __('Select an option','tainacan') ?>...</option>
|
||||
|
@ -76,7 +76,7 @@ use Tainacan\Entities;
|
|||
public static function metadata_checkbox_list( $collection , $selected,$name_metadatum = 'tnc_prop_tnc_metadatum_ids[]', $args = []) {
|
||||
$Tainacan_Metadata = \Tainacan\Repositories\Metadata::get_instance();
|
||||
$collection = ( is_numeric( $collection ) ) ? new Entities\Collection( $collection ) : $collection;
|
||||
$metadatum = $Tainacan_Metadata->fetch_by_collection( $collection, $args, 'OBJECT');
|
||||
$metadatum = $Tainacan_Metadata->fetch_by_collection( $collection, $args);
|
||||
$selected = ( is_array( $selected) ) ? $selected : json_decode($selected);
|
||||
$selected = ( $selected ) ? $selected : [];
|
||||
?>
|
||||
|
|
|
@ -459,7 +459,7 @@ class TAINACAN_REST_Exposers extends TAINACAN_UnitApiTestCase {
|
|||
$collection = $Tainacan_collections->fetch($id);
|
||||
|
||||
$Tainacan_Metadata = \Tainacan\Repositories\Metadata::get_instance();
|
||||
$metadata = $Tainacan_Metadata->fetch_by_collection( $collection, [ 'order' => 'id' ], 'OBJECT' );
|
||||
$metadata = $Tainacan_Metadata->fetch_by_collection( $collection, [ 'order' => 'id' ] );
|
||||
|
||||
$this->assertEquals(count($mapper->metadata), count($metadata));
|
||||
foreach ($metadata as $metadatum) {
|
||||
|
|
|
@ -667,7 +667,7 @@ class TAINACAN_REST_Items_Controller extends TAINACAN_UnitApiTestCase {
|
|||
true
|
||||
);
|
||||
|
||||
// $metas = \Tainacan\Repositories\Metadata::get_instance()->fetch_by_collection($collection, [], 'OBJECT');
|
||||
// $metas = \Tainacan\Repositories\Metadata::get_instance()->fetch_by_collection($collection);
|
||||
//
|
||||
// foreach ($metas as $m) {
|
||||
// var_dump($m->get_name());
|
||||
|
|
|
@ -18,6 +18,26 @@ class Capabilities extends TAINACAN_UnitTestCase {
|
|||
function setUp() {
|
||||
parent::setUp();
|
||||
|
||||
/**
|
||||
* Test fixtures:
|
||||
*
|
||||
* Repo
|
||||
* - public_taxonomy
|
||||
* - private_taxonomy
|
||||
* - public_repo_metadatum
|
||||
* - private_repo_metadatum
|
||||
* - public_repo_filter
|
||||
* - private_repo_filter
|
||||
* - public_collection (5 items)
|
||||
* --- (Core Title adn Description)
|
||||
* --- public_metadatum
|
||||
* --- private_metadatum
|
||||
* --- public_filter
|
||||
* --- private_filter
|
||||
* - private_collection (5 items)
|
||||
* --- (Core Title adn Description)
|
||||
* --- meta_relationshipt (with public collection)
|
||||
*/
|
||||
$subscriber = $this->factory()->user->create(array( 'role' => 'subscriber' ));
|
||||
$this->subscriber = get_userdata( $subscriber );
|
||||
|
||||
|
@ -26,7 +46,7 @@ class Capabilities extends TAINACAN_UnitTestCase {
|
|||
$collection1 = $this->tainacan_entity_factory->create_entity(
|
||||
'collection',
|
||||
array(
|
||||
'name' => 'test_col',
|
||||
'name' => 'Public Col',
|
||||
'status' => 'publish'
|
||||
),
|
||||
true
|
||||
|
@ -36,7 +56,7 @@ class Capabilities extends TAINACAN_UnitTestCase {
|
|||
$collection2 = $this->tainacan_entity_factory->create_entity(
|
||||
'collection',
|
||||
array(
|
||||
'name' => 'test_col',
|
||||
'name' => 'Private Col',
|
||||
'status' => 'private'
|
||||
),
|
||||
true
|
||||
|
@ -46,7 +66,7 @@ class Capabilities extends TAINACAN_UnitTestCase {
|
|||
$taxonomy = $this->tainacan_entity_factory->create_entity(
|
||||
'taxonomy',
|
||||
array(
|
||||
'name' => 'genero',
|
||||
'name' => 'Public Tax',
|
||||
'description' => 'tipos de musica',
|
||||
'allow_insert' => 'yes',
|
||||
'status' => 'publish'
|
||||
|
@ -59,10 +79,10 @@ class Capabilities extends TAINACAN_UnitTestCase {
|
|||
$taxonomy2 = $this->tainacan_entity_factory->create_entity(
|
||||
'taxonomy',
|
||||
array(
|
||||
'name' => 'genero2',
|
||||
'name' => 'Private Tax',
|
||||
'description' => 'tipos de musica2',
|
||||
'allow_insert' => 'yes',
|
||||
'status' => 'publish'
|
||||
'status' => 'private'
|
||||
),
|
||||
true
|
||||
);
|
||||
|
@ -97,7 +117,7 @@ class Capabilities extends TAINACAN_UnitTestCase {
|
|||
$metadatum_text = $this->tainacan_entity_factory->create_entity(
|
||||
'metadatum',
|
||||
array(
|
||||
'name' => 'text',
|
||||
'name' => 'Public meta',
|
||||
'status' => 'publish',
|
||||
'collection' => $collection1,
|
||||
'metadata_type' => 'Tainacan\Metadata_Types\Text',
|
||||
|
@ -110,7 +130,7 @@ class Capabilities extends TAINACAN_UnitTestCase {
|
|||
$metadatum_repo = $this->tainacan_entity_factory->create_entity(
|
||||
'metadatum',
|
||||
array(
|
||||
'name' => 'repo',
|
||||
'name' => 'Public Repo Meta',
|
||||
'status' => 'publish',
|
||||
'collection_id' => 'default',
|
||||
'metadata_type' => 'Tainacan\Metadata_Types\Text',
|
||||
|
@ -123,7 +143,7 @@ class Capabilities extends TAINACAN_UnitTestCase {
|
|||
$metadatum_text2 = $this->tainacan_entity_factory->create_entity(
|
||||
'metadatum',
|
||||
array(
|
||||
'name' => 'text',
|
||||
'name' => 'Private Meta',
|
||||
'status' => 'private',
|
||||
'collection' => $collection1,
|
||||
'metadata_type' => 'Tainacan\Metadata_Types\Text',
|
||||
|
@ -136,7 +156,7 @@ class Capabilities extends TAINACAN_UnitTestCase {
|
|||
$metadatum_repo2 = $this->tainacan_entity_factory->create_entity(
|
||||
'metadatum',
|
||||
array(
|
||||
'name' => 'repo',
|
||||
'name' => 'Private Repo Meta',
|
||||
'status' => 'private',
|
||||
'collection_id' => 'default',
|
||||
'metadata_type' => 'Tainacan\Metadata_Types\Text',
|
||||
|
@ -167,7 +187,7 @@ class Capabilities extends TAINACAN_UnitTestCase {
|
|||
$filter = $this->tainacan_entity_factory->create_entity(
|
||||
'filter',
|
||||
array(
|
||||
'name' => 'filtro',
|
||||
'name' => 'Public filter',
|
||||
'collection' => $collection1,
|
||||
'description' => 'Teste Filtro',
|
||||
'status' => 'publish',
|
||||
|
@ -181,7 +201,7 @@ class Capabilities extends TAINACAN_UnitTestCase {
|
|||
$filter = $this->tainacan_entity_factory->create_entity(
|
||||
'filter',
|
||||
array(
|
||||
'name' => 'filtro',
|
||||
'name' => 'Public repo filter',
|
||||
'collection_id' => 'default',
|
||||
'description' => 'Teste Filtro',
|
||||
'status' => 'publish',
|
||||
|
@ -195,7 +215,7 @@ class Capabilities extends TAINACAN_UnitTestCase {
|
|||
$filter = $this->tainacan_entity_factory->create_entity(
|
||||
'filter',
|
||||
array(
|
||||
'name' => 'filtro',
|
||||
'name' => 'Private Filter',
|
||||
'collection' => $collection1,
|
||||
'description' => 'Teste Filtro',
|
||||
'status' => 'private',
|
||||
|
@ -209,7 +229,7 @@ class Capabilities extends TAINACAN_UnitTestCase {
|
|||
$filter = $this->tainacan_entity_factory->create_entity(
|
||||
'filter',
|
||||
array(
|
||||
'name' => 'filtro',
|
||||
'name' => 'Private repo filter',
|
||||
'collection_id' => 'default',
|
||||
'description' => 'Teste Filtro',
|
||||
'status' => 'private',
|
||||
|
@ -260,7 +280,6 @@ class Capabilities extends TAINACAN_UnitTestCase {
|
|||
$this->assertFalse( user_can($this->subscriber, 'tnc_rep_manage_taxonomies') );
|
||||
|
||||
$this->subscriber->add_cap('manage_tainacan');
|
||||
$this->subscriber->get_role_caps();
|
||||
|
||||
$this->assertTrue( user_can($this->subscriber, 'tnc_rep_manage_taxonomies') );
|
||||
|
||||
|
@ -271,7 +290,6 @@ class Capabilities extends TAINACAN_UnitTestCase {
|
|||
$this->assertFalse( user_can($this->subscriber, 'tnc_col_25_read_private_filters') );
|
||||
|
||||
$this->subscriber->add_cap('manage_tainacan_collection_25');
|
||||
$this->subscriber->get_role_caps();
|
||||
|
||||
$this->assertTrue( user_can($this->subscriber, 'tnc_col_25_read_private_filters') );
|
||||
$this->assertFalse( user_can($this->subscriber, 'tnc_col_36_read_private_filters') );
|
||||
|
@ -283,12 +301,18 @@ class Capabilities extends TAINACAN_UnitTestCase {
|
|||
$this->assertFalse( user_can($this->subscriber, 'tnc_col_25_read_private_filters') );
|
||||
|
||||
$this->subscriber->add_cap('tnc_col_all_read_private_filters');
|
||||
$this->subscriber->get_role_caps();
|
||||
|
||||
$this->assertTrue( user_can($this->subscriber, 'tnc_col_25_read_private_filters') );
|
||||
$this->assertTrue( user_can($this->subscriber, 'tnc_col_36_read_private_filters') );
|
||||
$this->assertFalse( user_can($this->subscriber, 'tnc_col_25_edit_posts') );
|
||||
|
||||
$this->assertFalse( user_can($this->subscriber2, 'tnc_col_25_read_private_filters') );
|
||||
|
||||
$this->subscriber2->add_cap('manage_tainacan_collection_all');
|
||||
|
||||
$this->assertTrue( user_can($this->subscriber2, 'tnc_col_25_read_private_filters') );
|
||||
$this->assertTrue( user_can($this->subscriber2, 'tnc_col_36_read_private_filters') );
|
||||
|
||||
}
|
||||
|
||||
// function test_items_capabilities() {
|
||||
|
@ -336,4 +360,95 @@ class Capabilities extends TAINACAN_UnitTestCase {
|
|||
|
||||
}
|
||||
|
||||
/**
|
||||
* @group filters
|
||||
*/
|
||||
function test_filters_metacap() {
|
||||
|
||||
wp_set_current_user($this->subscriber2->ID);
|
||||
|
||||
$this->assertFalse( $this->public_filter->can_edit() );
|
||||
$this->assertFalse( $this->public_repo_filter->can_edit() );
|
||||
$this->assertFalse( $this->private_filter->can_edit() );
|
||||
$this->assertFalse( $this->private_repo_filter->can_edit() );
|
||||
|
||||
$this->subscriber2->add_cap( 'tnc_rep_manage_filters' );
|
||||
|
||||
$this->assertFalse( $this->public_filter->can_edit() );
|
||||
$this->assertTrue( $this->public_repo_filter->can_edit() );
|
||||
$this->assertFalse( $this->private_filter->can_edit() );
|
||||
$this->assertTrue( $this->private_repo_filter->can_edit() );
|
||||
|
||||
$this->subscriber2->add_cap( 'tnc_col_' . $this->public_collection->get_id() . '_manage_filters' );
|
||||
|
||||
$this->assertTrue( $this->public_filter->can_edit() );
|
||||
$this->assertTrue( $this->public_repo_filter->can_edit() );
|
||||
$this->assertTrue( $this->private_filter->can_edit() );
|
||||
$this->assertTrue( $this->private_repo_filter->can_edit() );
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @group fetch_by_collection
|
||||
*/
|
||||
function test_fetch_meta_by_collection() {
|
||||
global $current_user;
|
||||
wp_set_current_user($this->subscriber2->ID);
|
||||
|
||||
$meta = tainacan_metadata()->fetch_by_collection($this->public_collection);
|
||||
$this->AssertEquals(4, sizeof($meta));
|
||||
$meta = tainacan_metadata()->fetch_ids_by_collection($this->public_collection);
|
||||
$this->AssertEquals(4, sizeof($meta));
|
||||
|
||||
$this->subscriber2->add_cap( 'tnc_col_' . $this->public_collection->get_id() . '_read_private_metadata' );
|
||||
$current_user = $this->subscriber2; // force update current user object with new capabilities
|
||||
|
||||
$meta = tainacan_metadata()->fetch_by_collection($this->public_collection);
|
||||
$this->AssertEquals(5, sizeof($meta));
|
||||
$meta = tainacan_metadata()->fetch_ids_by_collection($this->public_collection);
|
||||
$this->AssertEquals(5, sizeof($meta));
|
||||
|
||||
$this->subscriber2->add_cap( 'tnc_rep_read_private_metadata' );
|
||||
$current_user = $this->subscriber2; // force update current user object with new capabilities
|
||||
|
||||
$meta = tainacan_metadata()->fetch_by_collection($this->public_collection);
|
||||
$this->AssertEquals(6, sizeof($meta));
|
||||
$meta = tainacan_metadata()->fetch_ids_by_collection($this->public_collection);
|
||||
$this->AssertEquals(6, sizeof($meta));
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @group fetch_by_collection
|
||||
*/
|
||||
function test_fetch_filter_by_collection() {
|
||||
global $current_user;
|
||||
wp_set_current_user($this->subscriber2->ID);
|
||||
|
||||
$meta = tainacan_filters()->fetch_by_collection($this->public_collection);
|
||||
$this->AssertEquals(2, sizeof($meta));
|
||||
$meta = tainacan_filters()->fetch_ids_by_collection($this->public_collection);
|
||||
$this->AssertEquals(2, sizeof($meta));
|
||||
|
||||
$this->subscriber2->add_cap( 'tnc_col_' . $this->public_collection->get_id() . '_read_private_filters' );
|
||||
$current_user = $this->subscriber2; // force update current user object with new capabilities
|
||||
|
||||
$meta = tainacan_filters()->fetch_by_collection($this->public_collection);
|
||||
$this->AssertEquals(3, sizeof($meta));
|
||||
$meta = tainacan_filters()->fetch_ids_by_collection($this->public_collection);
|
||||
$this->AssertEquals(3, sizeof($meta));
|
||||
|
||||
$this->subscriber2->add_cap( 'tnc_rep_read_private_filters' );
|
||||
$current_user = $this->subscriber2; // force update current user object with new capabilities
|
||||
|
||||
$meta = tainacan_filters()->fetch_by_collection($this->public_collection);
|
||||
$this->AssertEquals(4, sizeof($meta));
|
||||
$meta = tainacan_filters()->fetch_ids_by_collection($this->public_collection);
|
||||
$this->AssertEquals(4, sizeof($meta));
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -525,16 +525,16 @@ class TaxonomyMetadatumTypes extends TAINACAN_UnitTestCase {
|
|||
true
|
||||
);
|
||||
|
||||
$taxonomies_1 = $Tainacan_Taxonomies->fetch_by_collection($collection, [], 'OBJECT');
|
||||
$taxonomies_1 = $Tainacan_Taxonomies->fetch_by_collection($collection);
|
||||
$this->assertEquals(2, sizeof($taxonomies_1));
|
||||
|
||||
$taxonomies_2 = $Tainacan_Taxonomies->fetch_by_collection($collection2, [], 'OBJECT');
|
||||
$taxonomies_2 = $Tainacan_Taxonomies->fetch_by_collection($collection2);
|
||||
$this->assertEquals(2, sizeof($taxonomies_2));
|
||||
|
||||
$taxonomies_3 = $Tainacan_Taxonomies->fetch_by_collection($collection2_c, [], 'OBJECT');
|
||||
$taxonomies_3 = $Tainacan_Taxonomies->fetch_by_collection($collection2_c);
|
||||
$this->assertEquals(3, sizeof($taxonomies_3));
|
||||
|
||||
$taxonomies_4 = $Tainacan_Taxonomies->fetch_by_collection($collection2_gc, [], 'OBJECT');
|
||||
$taxonomies_4 = $Tainacan_Taxonomies->fetch_by_collection($collection2_gc);
|
||||
$this->assertEquals(3, sizeof($taxonomies_4));
|
||||
|
||||
|
||||
|
|
|
@ -115,7 +115,7 @@ class CoreMetadatumTypes extends TAINACAN_UnitTestCase {
|
|||
true
|
||||
);
|
||||
|
||||
$metadata = $Tainacan_Metadata->fetch_by_collection( $collection, [], 'OBJECT' ) ;
|
||||
$metadata = $Tainacan_Metadata->fetch_by_collection( $collection ) ;
|
||||
|
||||
foreach ( $metadata as $index => $metadatum ){
|
||||
if ( $metadatum->get_metadata_type_object()->get_core() && $metadatum->get_metadata_type_object()->get_related_mapped_prop() == 'title') {
|
||||
|
@ -150,7 +150,7 @@ class CoreMetadatumTypes extends TAINACAN_UnitTestCase {
|
|||
true
|
||||
);
|
||||
|
||||
$metadata = $Tainacan_Metadata->fetch_by_collection( $collection, [], 'OBJECT' ) ;
|
||||
$metadata = $Tainacan_Metadata->fetch_by_collection( $collection ) ;
|
||||
|
||||
foreach ( $metadata as $index => $metadatum ){
|
||||
if ( $metadatum->get_metadata_type_object()->get_core() && $metadatum->get_metadata_type_object()->get_related_mapped_prop() == 'title') {
|
||||
|
|
|
@ -281,7 +281,7 @@ class Filters extends TAINACAN_UnitTestCase {
|
|||
true
|
||||
);
|
||||
|
||||
$retrieve_filters = $Tainacan_Filters->fetch_by_collection( $collection_son, [], 'OBJECT' );
|
||||
$retrieve_filters = $Tainacan_Filters->fetch_by_collection( $collection_son );
|
||||
|
||||
$retrieve_filters_ids = $Tainacan_Filters->fetch_ids_by_collection( $collection_son, [] );
|
||||
|
||||
|
|
|
@ -109,7 +109,7 @@ class ImporterTests extends TAINACAN_UnitTestCase {
|
|||
$_SESSION['tainacan_importer'][$id]->set_collection( $collection );
|
||||
|
||||
// get collection metadata to map
|
||||
$metadata = $Tainacan_Metadata->fetch_by_collection( $collection, [], 'OBJECT' ) ;
|
||||
$metadata = $Tainacan_Metadata->fetch_by_collection( $collection ) ;
|
||||
|
||||
//create a random mapping
|
||||
$map = [];
|
||||
|
@ -202,7 +202,7 @@ class ImporterTests extends TAINACAN_UnitTestCase {
|
|||
];
|
||||
|
||||
// get collection metadata to map
|
||||
$metadata = $Tainacan_Metadata->fetch_by_collection( $collection, [], 'OBJECT' ) ;
|
||||
$metadata = $Tainacan_Metadata->fetch_by_collection( $collection ) ;
|
||||
|
||||
//create a random mapping
|
||||
$map = [];
|
||||
|
@ -364,7 +364,7 @@ class ImporterTests extends TAINACAN_UnitTestCase {
|
|||
];
|
||||
|
||||
// get collection metadata to map
|
||||
$metadata = $Tainacan_Metadata->fetch_by_collection( $collection, [], 'OBJECT' ) ;
|
||||
$metadata = $Tainacan_Metadata->fetch_by_collection( $collection ) ;
|
||||
|
||||
//create a random mapping
|
||||
$map = [];
|
||||
|
@ -507,7 +507,7 @@ class ImporterTests extends TAINACAN_UnitTestCase {
|
|||
];
|
||||
|
||||
// get collection metadata to map
|
||||
$metadata = $Tainacan_Metadata->fetch_by_collection( $collection, [], 'OBJECT' ) ;
|
||||
$metadata = $Tainacan_Metadata->fetch_by_collection( $collection ) ;
|
||||
|
||||
//create a random mapping
|
||||
$map = [];
|
||||
|
@ -646,7 +646,7 @@ class ImporterTests extends TAINACAN_UnitTestCase {
|
|||
];
|
||||
|
||||
// get collection metadata to map
|
||||
$metadata = $Tainacan_Metadata->fetch_by_collection( $collection, [], 'OBJECT' ) ;
|
||||
$metadata = $Tainacan_Metadata->fetch_by_collection( $collection ) ;
|
||||
|
||||
//create a random mapping
|
||||
$map = [];
|
||||
|
|
|
@ -160,7 +160,7 @@ class Metadata extends TAINACAN_UnitTestCase {
|
|||
true
|
||||
);
|
||||
|
||||
$retrieve_metadata = $Tainacan_Metadata->fetch_by_collection( $collection_son, [], 'OBJECT' );
|
||||
$retrieve_metadata = $Tainacan_Metadata->fetch_by_collection( $collection_son );
|
||||
|
||||
$retrieve_metadata_ids = $Tainacan_Metadata->fetch_ids_by_collection( $collection_son, [] );
|
||||
|
||||
|
@ -262,10 +262,10 @@ class Metadata extends TAINACAN_UnitTestCase {
|
|||
|
||||
$update_collection = $Tainacan_Collections->update( $collection );
|
||||
|
||||
$metadata_ordinate = $Tainacan_Metadata->fetch_by_collection( $update_collection, [], 'OBJECT' );
|
||||
$metadata_ordinate = $Tainacan_Metadata->fetch_by_collection( $update_collection );
|
||||
$this->assertEquals( 'metadatum2', $metadata_ordinate[0]->get_name() );
|
||||
|
||||
$metadata_ordinate_enabled = $Tainacan_Metadata->fetch_by_collection( $update_collection, [ 'include_disabled' => true ], 'OBJECT' );
|
||||
$metadata_ordinate_enabled = $Tainacan_Metadata->fetch_by_collection( $update_collection, [ 'include_disabled' => true ] );
|
||||
$this->assertEquals( 'metadatum3', $metadata_ordinate_enabled[0]->get_name() );
|
||||
|
||||
$this->assertFalse($metadata_ordinate_enabled[0]->get_enabled_for_collection());
|
||||
|
|
Loading…
Reference in New Issue