feat: add default metadata section #184
This commit is contained in:
parent
0f876375fc
commit
b6c09a3423
|
@ -140,6 +140,7 @@ class REST_Metadata_Sections_Controller extends REST_Controller {
|
||||||
* @return array|\WP_Error|\WP_REST_Response
|
* @return array|\WP_Error|\WP_REST_Response
|
||||||
*/
|
*/
|
||||||
public function prepare_item_for_response( $item, $request ) {
|
public function prepare_item_for_response( $item, $request ) {
|
||||||
|
|
||||||
if (!empty($item)){
|
if (!empty($item)){
|
||||||
$item_arr = $item->_toArray();
|
$item_arr = $item->_toArray();
|
||||||
if ($request['context'] === 'edit') {
|
if ($request['context'] === 'edit') {
|
||||||
|
@ -148,7 +149,9 @@ class REST_Metadata_Sections_Controller extends REST_Controller {
|
||||||
$item_arr['enabled'] = $item->get_enabled_for_collection();
|
$item_arr['enabled'] = $item->get_enabled_for_collection();
|
||||||
}
|
}
|
||||||
|
|
||||||
$metadata_list = $item->get_metadata_object_list();
|
$metadata_list = $item->get_id() == 'default_section'
|
||||||
|
? $this->metadata_sections_repository->get_default_section_metadata_object_list($item->get_collection())
|
||||||
|
: $item->get_metadata_object_list();
|
||||||
$item_arr['metadata_object_list'] = [];
|
$item_arr['metadata_object_list'] = [];
|
||||||
if($metadata_list != false) {
|
if($metadata_list != false) {
|
||||||
foreach($metadata_list as $metadata) {
|
foreach($metadata_list as $metadata) {
|
||||||
|
|
|
@ -30,6 +30,16 @@ class Metadata_Section extends Entity {
|
||||||
return apply_filters("tainacan-metadata-section-to-string", $this->get_name(), $this);
|
return apply_filters("tainacan-metadata-section-to-string", $this->get_name(), $this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the entity ID
|
||||||
|
*
|
||||||
|
* @return integer
|
||||||
|
*/
|
||||||
|
public function get_id() {
|
||||||
|
$id = $this->get_mapped_property('id');
|
||||||
|
return isset($id) ? $id : 'default_section';
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the metadata section name
|
* Return the metadata section name
|
||||||
*
|
*
|
||||||
|
|
|
@ -119,6 +119,22 @@ class Metadata_Sections extends Repository {
|
||||||
register_post_type( Entities\Metadata_Section::get_post_type(), $args );
|
register_post_type( Entities\Metadata_Section::get_post_type(), $args );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function get_default_section ($collection) {
|
||||||
|
if($collection instanceof Entities\Collection) {
|
||||||
|
$collection_id = $collection->get_id();
|
||||||
|
} else if (is_int($collection)) {
|
||||||
|
$collection_id = $collection;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$defaul_section = new Entities\Metadata_Section();
|
||||||
|
$defaul_section->set_slug('default_section');
|
||||||
|
$defaul_section->set_name(__('Metadata', 'tainacan'));
|
||||||
|
$defaul_section->set_description(__('Metadata section', 'tainacan'));
|
||||||
|
$defaul_section->set_collection_id($collection_id);
|
||||||
|
return $defaul_section;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* fetch metadata section based on ID or WP_Query args
|
* fetch metadata section based on ID or WP_Query args
|
||||||
*
|
*
|
||||||
|
@ -326,6 +342,36 @@ class Metadata_Sections extends Repository {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function get_default_section_metadata_object_list (Entities\Collection $collection) {
|
||||||
|
$metadata_sections_ids = $this->fetch_ids();
|
||||||
|
$args = array(
|
||||||
|
'meta_query' => array(
|
||||||
|
array(
|
||||||
|
'relation' => 'OR',
|
||||||
|
array(
|
||||||
|
'key' => 'metadata_section_id',
|
||||||
|
'value' => 'default_section',
|
||||||
|
'compare' => '='
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
array(
|
||||||
|
'key' => 'metadata_section_id',
|
||||||
|
'compare' => 'NOT EXISTS'
|
||||||
|
)
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
'key' => 'metadata_section_id',
|
||||||
|
'value' => $metadata_sections_ids,
|
||||||
|
'compare' => 'NOT IN'
|
||||||
|
),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
$metadata_repository = \Tainacan\Repositories\Metadata::get_instance();
|
||||||
|
$metadata_list = $metadata_repository->fetch_by_collection($collection, $args);
|
||||||
|
return $metadata_list;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @inheritDoc
|
* @inheritDoc
|
||||||
*/
|
*/
|
||||||
|
@ -366,12 +412,12 @@ class Metadata_Sections extends Repository {
|
||||||
|
|
||||||
ksort( $result_ordinate );
|
ksort( $result_ordinate );
|
||||||
$result_ordinate = array_merge( $result_ordinate, $not_ordinate );
|
$result_ordinate = array_merge( $result_ordinate, $not_ordinate );
|
||||||
|
$result_ordinate[] = $this->get_default_section($collection->get_id());
|
||||||
return $result_ordinate;
|
return $result_ordinate;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
$result[] = $this->get_default_section($collection->get_id());
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -230,7 +230,7 @@ class Metadata extends Repository {
|
||||||
'title' => __( 'Metadata section', 'tainacan' ),
|
'title' => __( 'Metadata section', 'tainacan' ),
|
||||||
'type' => ['integer', 'string', 'array'],
|
'type' => ['integer', 'string', 'array'],
|
||||||
'description' => __( 'The metadata section ID', 'tainacan' ),
|
'description' => __( 'The metadata section ID', 'tainacan' ),
|
||||||
'default' => null
|
'default' => 'default_section'
|
||||||
],
|
],
|
||||||
] );
|
] );
|
||||||
}
|
}
|
||||||
|
|
|
@ -440,9 +440,9 @@ class TAINACAN_REST_Metadata_Sections_Controller extends TAINACAN_UnitApiTestCas
|
||||||
$metadata_list_1 = $response_data[0]['metadata_object_list'];
|
$metadata_list_1 = $response_data[0]['metadata_object_list'];
|
||||||
$metadata_list_2 = $response_data[1]['metadata_object_list'];
|
$metadata_list_2 = $response_data[1]['metadata_object_list'];
|
||||||
|
|
||||||
$this->assertContains($metadatum_1->get_id(), array_column($metadata_list_1, 'id'));
|
$this->assertContains($metadatum_1->get_id(), array_column($metadata_list_1, 'id'), sprintf('Id: %s not found in array: %s', $metadatum_1->get_id(), print_r(array_column($metadata_list_1, 'id'), true)));
|
||||||
$this->assertContains($metadatum_2->get_id(), array_column($metadata_list_1, 'id'));
|
$this->assertContains($metadatum_2->get_id(), array_column($metadata_list_1, 'id'), sprintf('Id: %s not found in array: %s', $metadatum_2->get_id(), print_r(array_column($metadata_list_1, 'id'), true)));
|
||||||
$this->assertContains($metadatum_3->get_id(), array_column($metadata_list_2, 'id'));
|
$this->assertContains($metadatum_3->get_id(), array_column($metadata_list_2, 'id'), sprintf('Id: %s not found in array: %s', $metadatum_3->get_id(), print_r(array_column($metadata_list_2, 'id'), true)));
|
||||||
$this->assertContains($metadatum_4->get_id(), array_column($metadata_list_2, 'id'));
|
$this->assertContains($metadatum_4->get_id(), array_column($metadata_list_2, 'id'), sprintf('Id: %s not found in array: %s', $metadatum_4->get_id(), print_r(array_column($metadata_list_2, 'id'), true)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue