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) {
|
public function get_value_as_html(Item_Metadata_Entity $item_metadata) {
|
||||||
$value = $item_metadata->get_value();
|
$value = $item_metadata->get_value();
|
||||||
$separator = $item_metadata->get_multivalue_separator();
|
$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'];
|
$order = $options['children_order'];
|
||||||
$return = '';
|
$return = '';
|
||||||
|
|
||||||
|
|
|
@ -74,7 +74,6 @@ class Taxonomy extends Metadata_Type {
|
||||||
</div>
|
</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
|
* 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
|
* @param Item_Metadata_Entity $item_metadata
|
||||||
|
@ -320,11 +288,11 @@ class Taxonomy extends Metadata_Type {
|
||||||
|
|
||||||
$terms = [];
|
$terms = [];
|
||||||
|
|
||||||
$terms[] = $term->_toHtml();
|
$terms[] = $this->term_to_html($term);
|
||||||
|
|
||||||
while ($term->get_parent() > 0) {
|
while ($term->get_parent() > 0) {
|
||||||
$term = \Tainacan\Repositories\Terms::get_instance()->fetch( (int) $term->get_parent(), $term->get_taxonomy() );
|
$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);
|
$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() {
|
public function _toArray() {
|
||||||
|
|
||||||
$array = parent::_toArray();
|
$array = parent::_toArray();
|
||||||
|
|
|
@ -585,4 +585,140 @@ class Taxonomies extends TAINACAN_UnitTestCase {
|
||||||
$this->assertEquals(2, $term_repo->count);
|
$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