Merge branch 'release/0.17' of https://github.com/tainacan/tainacan into release/0.17

This commit is contained in:
mateuswetah 2020-11-12 12:55:17 -03:00
commit 698ff10541
3 changed files with 168 additions and 35 deletions

View File

@ -169,7 +169,7 @@ class Compound extends Metadata_Type {
public function get_value_as_html(Item_Metadata_Entity $item_metadata) {
$value = $item_metadata->get_value();
$separator = $item_metadata->get_multivalue_separator();
$options = $item_metadata->get_metadatum()->get_metadata_type_object()->get_options();
$options = $item_metadata->get_metadatum()->get_metadata_type_options();
$order = $options['children_order'];
$return = '';

View File

@ -74,7 +74,6 @@ class Taxonomy extends Metadata_Type {
</div>
');
add_filter( 'tainacan-term-to-html', [$this, 'term_to_html'], 10, 2 );
}
/**
@ -231,37 +230,6 @@ class Taxonomy extends Metadata_Type {
}
public function term_to_html($return, $term) {
$collections = $this->get_option( 'link_filtered_by_collections' );
if ( !empty( $collections ) ) {
$return = '';
$id = $term->get_id();
if ( $id ) {
$link = get_term_link( (int) $id );
if (is_string($link)) {
$meta_query = [
'metaquery' => [
[
'key' => 'collection_id',
'compare' => 'IN',
'value' => $collections
]
]
];
$link = $link . '?' . http_build_query( $meta_query );
$return = "<a data-linkto='term' data-id='$id' href='$link'>";
$return.= $term->get_name();
$return .= "</a>";
}
}
return $return;
}
return $return;
}
/**
* Return the value of an Item_Metadata_Entity using a metadatum of this metadatum type as an html string
* @param Item_Metadata_Entity $item_metadata
@ -320,11 +288,11 @@ class Taxonomy extends Metadata_Type {
$terms = [];
$terms[] = $term->_toHtml();
$terms[] = $this->term_to_html($term);
while ($term->get_parent() > 0) {
$term = \Tainacan\Repositories\Terms::get_instance()->fetch( (int) $term->get_parent(), $term->get_taxonomy() );
$terms[] = $term->_toHtml();
$terms[] = $this->term_to_html($term);
}
$terms = \array_reverse($terms);
@ -335,6 +303,35 @@ class Taxonomy extends Metadata_Type {
}
private function term_to_html($term) {
$collections = $this->get_option( 'link_filtered_by_collections' );
if ( !empty( $collections ) ) {
$return = '';
$id = $term->get_id();
if ( $id ) {
$link = get_term_link( (int) $id );
if (is_string($link)) {
$meta_query = [
'metaquery' => [
[
'key' => 'collection_id',
'compare' => 'IN',
'value' => $collections
]
]
];
$link = $link . '?' . http_build_query( $meta_query );
$return = "<a data-linkto='term' data-id='$id' href='$link'>";
$return.= $term->get_name();
$return .= "</a>";
}
}
return $return;
}
return $term->_toHtml();
}
public function _toArray() {
$array = parent::_toArray();

View File

@ -585,4 +585,140 @@ class Taxonomies extends TAINACAN_UnitTestCase {
$this->assertEquals(2, $term_repo->count);
}
function test_term_taxonomy_filtered_by_collections() {
$Tainacan_Taxonomies = \Tainacan\Repositories\Taxonomies::get_instance();
$Tainacan_Terms = \Tainacan\Repositories\Terms::get_instance();
$Tainacan_Item_Metadata = \Tainacan\Repositories\Item_Metadata::get_instance();
$tax = $this->tainacan_entity_factory->create_entity(
'taxonomy',
array(
'name' => 'Tax',
'description' => 'Tax',
'allow_insert' => 'no',
'status' => 'publish'
),
true
);
//retorna a taxonomia
$tax = $Tainacan_Taxonomies->fetch($tax->get_id());
$term_1 = $this->tainacan_entity_factory->create_entity(
'term',
array(
'taxonomy' => $tax->get_db_identifier(),
'name' => 'preto',
'user' => get_current_user_id(),
),
true
);
$term_2 = $this->tainacan_entity_factory->create_entity(
'term',
array(
'taxonomy' => $tax->get_db_identifier(),
'name' => 'branco',
'user' => get_current_user_id(),
),
true
);
$collectionOnly = $this->tainacan_entity_factory->create_entity(
'collection',
array(
'name' => 'testA',
),
true
);
$collectionAll = $this->tainacan_entity_factory->create_entity(
'collection',
array(
'name' => 'testB',
),
true
);
$metadatumOnly = $this->tainacan_entity_factory->create_entity(
'metadatum',
array(
'name' => 'meta',
'description' => 'description',
'collection' => $collectionOnly,
'metadata_type' => 'Tainacan\Metadata_Types\Taxonomy',
'status' => 'publish',
'metadata_type_options' => [
'taxonomy_id' => $tax->get_id(),
'allow_new_terms' => 'no',
'link_filtered_by_collections' => [$collectionOnly->get_id()]
]
),
true
);
$metadatumAll = $this->tainacan_entity_factory->create_entity(
'metadatum',
array(
'name' => 'meta',
'description' => 'description',
'collection' => $collectionAll,
'metadata_type' => 'Tainacan\Metadata_Types\Taxonomy',
'status' => 'publish',
'metadata_type_options' => [
'taxonomy_id' => $tax->get_id(),
'allow_new_terms' => 'no'
]
),
true
);
$itemOnly = $this->tainacan_entity_factory->create_entity(
'item',
array(
'title' => 'item teste',
'description' => 'description',
'collection' => $collectionOnly,
'status' => 'publish'
),
true
);
$itemAll = $this->tainacan_entity_factory->create_entity(
'item',
array(
'title' => 'item teste',
'description' => 'description',
'collection' => $collectionAll,
'status' => 'publish'
),
true
);
$item_metadata_only = $this->tainacan_item_metadata_factory->create_item_metadata($itemOnly, $metadatumOnly, $term_1);
$item_metadata_all = $this->tainacan_item_metadata_factory->create_item_metadata($itemAll, $metadatumAll, $term_2);
$expected_response = get_term_link($term_2->get_id());
$text = $item_metadata_all->get_value_as_html();
preg_match_all('~<a(.*?)href=(\'|")([^"]+)(\'|")(.*?)>~', $text, $matches);
$response = $matches[3][0];
$this->assertEquals($response, $expected_response);
$meta_query = [
'metaquery' => [
[
'key' => 'collection_id',
'compare' => 'IN',
'value' => [$collectionOnly->get_id()]
]
]
];
$expected_response = get_term_link($term_1->get_id()) . '?' . http_build_query( $meta_query );
$text = $item_metadata_only->get_value_as_html();
preg_match_all('~<a(.*?)href=(\'|")([^"]+)(\'|")(.*?)>~', $text, $matches);
$response = $matches[3][0];
$this->assertEquals($response, $expected_response);
}
}