Bulk edit set_value support array as input
This commit is contained in:
parent
42cddd93f6
commit
a80aeff4c1
|
@ -119,8 +119,8 @@ class REST_Bulkedit_Controller extends REST_Controller {
|
||||||
'description' => __( 'The metadatum ID', 'tainacan' ),
|
'description' => __( 'The metadatum ID', 'tainacan' ),
|
||||||
],
|
],
|
||||||
'value' => [
|
'value' => [
|
||||||
'type' => 'string/integer',
|
'type' => 'string/integer/array',
|
||||||
'description' => __( 'The value to be added', 'tainacan' ),
|
'description' => __( 'The value to be set', 'tainacan' ),
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
|
|
@ -296,7 +296,10 @@ class Bulk_Edit {
|
||||||
$dummyItem = new Entities\Item();
|
$dummyItem = new Entities\Item();
|
||||||
$dummyItem->set_status('publish');
|
$dummyItem->set_status('publish');
|
||||||
$checkItemMetadata = new Entities\Item_Metadata_Entity($dummyItem, $metadatum);
|
$checkItemMetadata = new Entities\Item_Metadata_Entity($dummyItem, $metadatum);
|
||||||
$checkItemMetadata->set_value( $metadatum->is_multiple() ? [$value] : $value );
|
if ( $metadatum->is_multiple() && !is_array($value)) {
|
||||||
|
$value = [$value];
|
||||||
|
}
|
||||||
|
$checkItemMetadata->set_value( $value );
|
||||||
|
|
||||||
if ($checkItemMetadata->validate()) {
|
if ($checkItemMetadata->validate()) {
|
||||||
$this->_remove_values($metadatum);
|
$this->_remove_values($metadatum);
|
||||||
|
@ -455,11 +458,17 @@ class Bulk_Edit {
|
||||||
|
|
||||||
if ($tax instanceof Entities\Taxonomy) {
|
if ($tax instanceof Entities\Taxonomy) {
|
||||||
|
|
||||||
$term = $taxRepo->term_exists($tax, $value, 0, true);
|
if ( !is_array($value) ) {
|
||||||
|
$value = [$value];
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($value as $v) {
|
||||||
|
|
||||||
|
$term = $taxRepo->term_exists($tax, $v, 0, true);
|
||||||
$term_id = false;
|
$term_id = false;
|
||||||
|
|
||||||
if (false === $term) {
|
if (false === $term) {
|
||||||
$term = wp_insert_term($value, $tax->get_db_identifier());
|
$term = wp_insert_term($v, $tax->get_db_identifier());
|
||||||
if (is_WP_Error($term) || !isset($term['term_taxonomy_id'])) {
|
if (is_WP_Error($term) || !isset($term['term_taxonomy_id'])) {
|
||||||
return new \WP_Error( 'error', __( 'Error adding term', 'tainacan' ) );
|
return new \WP_Error( 'error', __( 'Error adding term', 'tainacan' ) );
|
||||||
}
|
}
|
||||||
|
@ -474,7 +483,13 @@ class Bulk_Edit {
|
||||||
|
|
||||||
$query = "INSERT IGNORE INTO $wpdb->term_relationships (object_id, term_taxonomy_id) $insert_q";
|
$query = "INSERT IGNORE INTO $wpdb->term_relationships (object_id, term_taxonomy_id) $insert_q";
|
||||||
|
|
||||||
return $wpdb->query($query);
|
$return = $wpdb->query($query);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return $return;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//TODO update term count
|
//TODO update term count
|
||||||
|
|
||||||
|
@ -485,7 +500,13 @@ class Bulk_Edit {
|
||||||
|
|
||||||
global $wpdb;
|
global $wpdb;
|
||||||
|
|
||||||
$insert_q = $this->_build_select( $wpdb->prepare("post_id, %s, %s", $metadatum->get_id(), $value) );
|
if ( !is_array($value) ) {
|
||||||
|
$value = [$value];
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($value as $v) {
|
||||||
|
|
||||||
|
$insert_q = $this->_build_select( $wpdb->prepare("post_id, %s, %s", $metadatum->get_id(), $v) );
|
||||||
|
|
||||||
$query = "INSERT IGNORE INTO $wpdb->postmeta (post_id, meta_key, meta_value) $insert_q";
|
$query = "INSERT IGNORE INTO $wpdb->postmeta (post_id, meta_key, meta_value) $insert_q";
|
||||||
|
|
||||||
|
@ -499,12 +520,17 @@ class Bulk_Edit {
|
||||||
];
|
];
|
||||||
$column = $map_field[$field];
|
$column = $map_field[$field];
|
||||||
$update_q = $this->_build_select( "post_id" );
|
$update_q = $this->_build_select( "post_id" );
|
||||||
$core_query = $wpdb->prepare( "UPDATE $wpdb->posts SET $column = %s WHERE ID IN ($update_q)", $value );
|
$core_query = $wpdb->prepare( "UPDATE $wpdb->posts SET $column = %s WHERE ID IN ($update_q)", $v );
|
||||||
|
|
||||||
$wpdb->query($core_query);
|
$wpdb->query($core_query);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $affected;
|
$return = $affected;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return $return; // return last value
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1431,7 +1431,138 @@ class BulkEdit extends TAINACAN_UnitApiTestCase {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function test_set_multiple_tax_meta() {
|
||||||
|
$Tainacan_Items = \Tainacan\Repositories\Items::get_instance();
|
||||||
|
|
||||||
|
$query = [
|
||||||
|
'meta_query' => [
|
||||||
|
[
|
||||||
|
'key' => $this->metadatum->get_id(),
|
||||||
|
'value' => 'even'
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'posts_per_page' => 5
|
||||||
|
];
|
||||||
|
|
||||||
|
$bulk = new \Tainacan\Bulk_Edit([
|
||||||
|
'query' => $query,
|
||||||
|
'collection_id' => $this->collection->get_id()
|
||||||
|
]);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$bulk->set_value($this->category, ['super', 'dooper']);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$items = $Tainacan_Items->fetch([
|
||||||
|
'tax_query' => [
|
||||||
|
[
|
||||||
|
'taxonomy' => $this->taxonomy->get_db_identifier(),
|
||||||
|
'field' => 'name',
|
||||||
|
'terms' => 'bad'
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'posts_per_page' => -1
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->assertEquals(35, $items->found_posts);
|
||||||
|
|
||||||
|
$items = $Tainacan_Items->fetch([
|
||||||
|
'tax_query' => [
|
||||||
|
[
|
||||||
|
'taxonomy' => $this->taxonomy->get_db_identifier(),
|
||||||
|
'field' => 'name',
|
||||||
|
'terms' => 'good'
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'posts_per_page' => -1
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->assertEquals(35, $items->found_posts);
|
||||||
|
|
||||||
|
$items = $Tainacan_Items->fetch([
|
||||||
|
'tax_query' => [
|
||||||
|
[
|
||||||
|
'taxonomy' => $this->taxonomy->get_db_identifier(),
|
||||||
|
'field' => 'name',
|
||||||
|
'terms' => 'super'
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'posts_per_page' => -1
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->assertEquals(5, $items->found_posts);
|
||||||
|
|
||||||
|
$items = $Tainacan_Items->fetch([
|
||||||
|
'tax_query' => [
|
||||||
|
[
|
||||||
|
'taxonomy' => $this->taxonomy->get_db_identifier(),
|
||||||
|
'field' => 'name',
|
||||||
|
'terms' => 'dooper'
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'posts_per_page' => -1
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->assertEquals(5, $items->found_posts);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function test_set_regular_multiple_meta() {
|
||||||
|
$Tainacan_Items = \Tainacan\Repositories\Items::get_instance();
|
||||||
|
|
||||||
|
$query = [
|
||||||
|
'meta_query' => [
|
||||||
|
[
|
||||||
|
'key' => $this->metadatum->get_id(),
|
||||||
|
'value' => 'even'
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'posts_per_page' => 5
|
||||||
|
];
|
||||||
|
|
||||||
|
$bulk = new \Tainacan\Bulk_Edit([
|
||||||
|
'query' => $query,
|
||||||
|
'collection_id' => $this->collection->get_id()
|
||||||
|
]);
|
||||||
|
|
||||||
|
// single valued metadatum dont accept array
|
||||||
|
$error = $bulk->set_value($this->metadatum, ['super', 'dooper']);
|
||||||
|
$this->assertTrue(is_wp_error($error));
|
||||||
|
|
||||||
|
$bulk->set_value($this->multiple_meta, ['super', 'dooper']);
|
||||||
|
|
||||||
|
|
||||||
|
$items = $Tainacan_Items->fetch([
|
||||||
|
'meta_query' => [
|
||||||
|
[
|
||||||
|
'key' => $this->multiple_meta->get_id(),
|
||||||
|
'value' => 'super'
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'posts_per_page' => -1
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->assertEquals(5, $items->found_posts);
|
||||||
|
|
||||||
|
$items = $Tainacan_Items->fetch([
|
||||||
|
'meta_query' => [
|
||||||
|
[
|
||||||
|
'key' => $this->multiple_meta->get_id(),
|
||||||
|
'value' => 'dooper'
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'posts_per_page' => -1
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->assertEquals(5, $items->found_posts);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
Loading…
Reference in New Issue