parent
bb2d50abc3
commit
51abff93a2
|
@ -158,6 +158,15 @@ class REST_Bulkedit_Controller extends REST_Controller {
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
);
|
||||||
|
register_rest_route($this->namespace, '/collection/(?P<collection_id>[\d]+)/' . $this->rest_base . '/(?P<group_id>[0-9a-f]+)/sequence/(?P<sequence_index>[\d]+)',
|
||||||
|
array(
|
||||||
|
array(
|
||||||
|
'methods' => \WP_REST_Server::READABLE,
|
||||||
|
'callback' => array($this, 'get_item_in_sequence'),
|
||||||
|
'permission_callback' => array($this, 'bulk_edit_permissions_check'),
|
||||||
|
),
|
||||||
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -181,6 +190,7 @@ class REST_Bulkedit_Controller extends REST_Controller {
|
||||||
|
|
||||||
if (isset($body['items_ids']) && is_array($body['items_ids']) && !empty($body['items_ids'])) {
|
if (isset($body['items_ids']) && is_array($body['items_ids']) && !empty($body['items_ids'])) {
|
||||||
$args['items_ids'] = $body['items_ids'];
|
$args['items_ids'] = $body['items_ids'];
|
||||||
|
// TODO: recieve and pass sort options
|
||||||
} elseif ( isset($body['use_query']) && $body['use_query'] ) {
|
} elseif ( isset($body['use_query']) && $body['use_query'] ) {
|
||||||
|
|
||||||
unset($body['use_query']['paged']);
|
unset($body['use_query']['paged']);
|
||||||
|
@ -377,6 +387,25 @@ class REST_Bulkedit_Controller extends REST_Controller {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function get_item_in_sequence($request) {
|
||||||
|
$group_id = $request['group_id'];
|
||||||
|
$index = $request['sequence_index'];
|
||||||
|
|
||||||
|
$args = ['id' => $group_id];
|
||||||
|
|
||||||
|
$bulk = new \Tainacan\Bulk_Edit($args);
|
||||||
|
|
||||||
|
$item_id = $bulk->get_item_id_by_index( (int) $index );
|
||||||
|
|
||||||
|
if ( !$item_id ) {
|
||||||
|
return new \WP_REST_Response([
|
||||||
|
'error_message' => __('Item not found.', 'tainacan'),
|
||||||
|
], 404);
|
||||||
|
} else {
|
||||||
|
return new \WP_REST_Response($item_id, 200);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -42,6 +42,7 @@ class Bulk_Edit {
|
||||||
* @type int $collection_id The items collection ID. Required if initializing using a query search
|
* @type int $collection_id The items collection ID. Required if initializing using a query search
|
||||||
* @type array $query The query paramaters used to fetch items that will be part of this bulk edit group
|
* @type array $query The query paramaters used to fetch items that will be part of this bulk edit group
|
||||||
* @type array $items_ids an array containing the IDs of items that will be part of this bulk edit group
|
* @type array $items_ids an array containing the IDs of items that will be part of this bulk edit group
|
||||||
|
* @type array $options an array containing additional options for this bulk edit group (currently used to store sorting information)
|
||||||
* @type string $id The ID of the Bulk edit group.
|
* @type string $id The ID of the Bulk edit group.
|
||||||
*
|
*
|
||||||
* }
|
* }
|
||||||
|
@ -87,7 +88,10 @@ class Bulk_Edit {
|
||||||
|
|
||||||
$wpdb->query( "INSERT INTO $wpdb->postmeta (post_id, meta_key, meta_value) {$items_query->request}" );
|
$wpdb->query( "INSERT INTO $wpdb->postmeta (post_id, meta_key, meta_value) {$items_query->request}" );
|
||||||
|
|
||||||
return;
|
$bulk_params = [
|
||||||
|
'orderby' => isset($params['query']['orderby']) ? $params['query']['orderby'] : 'post_date',
|
||||||
|
'order' => isset($params['query']['order']) ? $params['query']['order'] : 'DESC'
|
||||||
|
];
|
||||||
|
|
||||||
} elseif (isset($params['items_ids']) && is_array($params['items_ids'])) {
|
} elseif (isset($params['items_ids']) && is_array($params['items_ids'])) {
|
||||||
$items_ids = array_filter($params['items_ids'], 'is_integer');
|
$items_ids = array_filter($params['items_ids'], 'is_integer');
|
||||||
|
@ -100,10 +104,23 @@ class Bulk_Edit {
|
||||||
|
|
||||||
$wpdb->query( "INSERT INTO $wpdb->postmeta (post_id, meta_key, meta_value) VALUES $insert_q" );
|
$wpdb->query( "INSERT INTO $wpdb->postmeta (post_id, meta_key, meta_value) VALUES $insert_q" );
|
||||||
|
|
||||||
return;
|
$bulk_params = [
|
||||||
|
'orderby' => isset($params['options']['orderby']) ? $params['options']['orderby'] : 'post_date',
|
||||||
|
'order' => isset($params['options']['order']) ? $params['options']['order'] : 'DESC'
|
||||||
|
];
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is stored to be used by the get_sequence_item_by_index() method, which is used
|
||||||
|
* by the sequence edit routine.
|
||||||
|
*
|
||||||
|
* For everything else, the order does not matter...
|
||||||
|
*/
|
||||||
|
$this->save_options($bulk_params);
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -136,6 +153,46 @@ class Bulk_Edit {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the id of the item in a given position inside the group
|
||||||
|
*
|
||||||
|
* @param int $index THe position of the index to search for. From 1 to the length of the group
|
||||||
|
* @return int|bool Returns the ID of the item or false if the index is out of range
|
||||||
|
*/
|
||||||
|
public function get_item_id_by_index(int $index) {
|
||||||
|
$options = $this->get_options();
|
||||||
|
$query = [
|
||||||
|
'meta_query' => [
|
||||||
|
[
|
||||||
|
'key' => $this->meta_key,
|
||||||
|
'value' => $this->get_id()
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'fields' => 'ids',
|
||||||
|
'post_type' => \Tainacan\Repositories\Repository::get_collections_db_identifiers(),
|
||||||
|
'posts_per_page' => 1,
|
||||||
|
'paged' => $index,
|
||||||
|
'orderby' => $options['orderby'],
|
||||||
|
'order' => $options['order']
|
||||||
|
];
|
||||||
|
|
||||||
|
$object = new \WP_Query($query);
|
||||||
|
|
||||||
|
if ( $object->have_posts() && isset($object->posts) && is_array($object->posts) && isset($object->posts[0]) && is_integer($object->posts[0]) ) {
|
||||||
|
return $object->posts[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function save_options($value) {
|
||||||
|
update_option('tainacan_bulk_' . $this->get_id(), $value);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function get_options() {
|
||||||
|
return get_option('tainacan_bulk_' . $this->get_id());
|
||||||
|
}
|
||||||
|
|
||||||
private function _build_select($fields) {
|
private function _build_select($fields) {
|
||||||
global $wpdb;
|
global $wpdb;
|
||||||
|
|
||||||
|
|
|
@ -89,10 +89,12 @@ class BulkEdit extends TAINACAN_UnitApiTestCase {
|
||||||
|
|
||||||
for ($i = 1; $i<=40; $i++) {
|
for ($i = 1; $i<=40; $i++) {
|
||||||
|
|
||||||
|
$title = 'testeItem ' . str_pad($i, 2, "0", STR_PAD_LEFT);
|
||||||
|
|
||||||
$item = $this->tainacan_entity_factory->create_entity(
|
$item = $this->tainacan_entity_factory->create_entity(
|
||||||
'item',
|
'item',
|
||||||
array(
|
array(
|
||||||
'title' => 'testeItem ' . $i,
|
'title' => $title,
|
||||||
'collection' => $collection,
|
'collection' => $collection,
|
||||||
'status' => 'publish'
|
'status' => 'publish'
|
||||||
),
|
),
|
||||||
|
@ -103,7 +105,7 @@ class BulkEdit extends TAINACAN_UnitApiTestCase {
|
||||||
|
|
||||||
$this->tainacan_item_metadata_factory->create_item_metadata($item, $metadatum, $i % 2 == 0 ? 'even' : 'odd');
|
$this->tainacan_item_metadata_factory->create_item_metadata($item, $metadatum, $i % 2 == 0 ? 'even' : 'odd');
|
||||||
$this->tainacan_item_metadata_factory->create_item_metadata($item, $category, ['good', 'bad']);
|
$this->tainacan_item_metadata_factory->create_item_metadata($item, $category, ['good', 'bad']);
|
||||||
$this->tainacan_item_metadata_factory->create_item_metadata($item, $collection->get_core_title_metadatum(), 'testeItem ' . $i);
|
$this->tainacan_item_metadata_factory->create_item_metadata($item, $collection->get_core_title_metadatum(), $title);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1303,5 +1305,93 @@ class BulkEdit extends TAINACAN_UnitApiTestCase {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group sequence
|
||||||
|
*/
|
||||||
|
function test_get_item_in_sequence() {
|
||||||
|
$Tainacan_Items = \Tainacan\Repositories\Items::get_instance();
|
||||||
|
|
||||||
|
$query = [
|
||||||
|
'posts_per_page' => 22,
|
||||||
|
'orderby' => 'title'
|
||||||
|
];
|
||||||
|
|
||||||
|
$bulk = new \Tainacan\Bulk_Edit([
|
||||||
|
'query' => $query,
|
||||||
|
'collection_id' => $this->collection->get_id()
|
||||||
|
]);
|
||||||
|
|
||||||
|
$item_id = $bulk->get_item_id_by_index(7);
|
||||||
|
|
||||||
|
$item = $Tainacan_Items->fetch($item_id);
|
||||||
|
|
||||||
|
$this->assertEquals('testeItem 34', $item->get_title());
|
||||||
|
|
||||||
|
$item_id = $bulk->get_item_id_by_index(15);
|
||||||
|
|
||||||
|
$item = $Tainacan_Items->fetch($item_id);
|
||||||
|
|
||||||
|
$this->assertEquals('testeItem 26', $item->get_title());
|
||||||
|
|
||||||
|
$query = [
|
||||||
|
'posts_per_page' => 22,
|
||||||
|
'orderby' => 'title',
|
||||||
|
'order' => 'ASC'
|
||||||
|
];
|
||||||
|
|
||||||
|
$bulk = new \Tainacan\Bulk_Edit([
|
||||||
|
'query' => $query,
|
||||||
|
'collection_id' => $this->collection->get_id()
|
||||||
|
]);
|
||||||
|
|
||||||
|
$item_id = $bulk->get_item_id_by_index(19);
|
||||||
|
|
||||||
|
$item = $Tainacan_Items->fetch($item_id);
|
||||||
|
|
||||||
|
$this->assertEquals('testeItem 19', $item->get_title());
|
||||||
|
|
||||||
|
$item_id = $bulk->get_item_id_by_index(30);
|
||||||
|
|
||||||
|
$this->assertFalse($item_id);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group sequence
|
||||||
|
*/
|
||||||
|
function test_api_get_item_in_sequence() {
|
||||||
|
|
||||||
|
$Tainacan_Items = \Tainacan\Repositories\Items::get_instance();
|
||||||
|
|
||||||
|
$query = [
|
||||||
|
'posts_per_page' => 22,
|
||||||
|
'orderby' => 'title',
|
||||||
|
'order' => 'ASC'
|
||||||
|
];
|
||||||
|
|
||||||
|
$bulk = new \Tainacan\Bulk_Edit([
|
||||||
|
'query' => $query,
|
||||||
|
'collection_id' => $this->collection->get_id()
|
||||||
|
]);
|
||||||
|
|
||||||
|
|
||||||
|
$request = new \WP_REST_Request(
|
||||||
|
'GET', $this->api_baseroute . '/' . $bulk->get_id() . '/sequence/7'
|
||||||
|
);
|
||||||
|
|
||||||
|
$response = $this->server->dispatch($request);
|
||||||
|
|
||||||
|
$id = $response->get_data();
|
||||||
|
|
||||||
|
$item = $Tainacan_Items->fetch($id);
|
||||||
|
|
||||||
|
$this->assertEquals('testeItem 07', $item->get_title());
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
Loading…
Reference in New Issue