Merge branch 'release/0.17' of https://github.com/tainacan/tainacan into release/0.17
This commit is contained in:
commit
698ff10541
|
@ -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 = '';
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue