feat: update metadata-section on metadatum edit #184
This commit is contained in:
parent
223059b179
commit
dad16bdbd2
|
@ -24,7 +24,8 @@ class Metadatum extends Entity {
|
||||||
$mask,
|
$mask,
|
||||||
$default_value,
|
$default_value,
|
||||||
$metadata_type,
|
$metadata_type,
|
||||||
$metadata_type_options;
|
$metadata_type_options,
|
||||||
|
$metadatum_section_id;
|
||||||
|
|
||||||
// Collection getter and setter declared here
|
// Collection getter and setter declared here
|
||||||
use \Tainacan\Traits\Entity_Collection_Relation;
|
use \Tainacan\Traits\Entity_Collection_Relation;
|
||||||
|
@ -252,6 +253,15 @@ class Metadatum extends Entity {
|
||||||
return $this->get_mapped_property('semantic_uri');
|
return $this->get_mapped_property('semantic_uri');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the metadatum_section_id
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
function get_metadatum_section_id(){
|
||||||
|
return $this->get_mapped_property('metadatum_section_id');
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the metadatum name
|
* Set the metadatum name
|
||||||
*
|
*
|
||||||
|
@ -432,6 +442,17 @@ class Metadatum extends Entity {
|
||||||
function set_semantic_uri( $value ){
|
function set_semantic_uri( $value ){
|
||||||
$this->set_mapped_property('semantic_uri', $value);
|
$this->set_mapped_property('semantic_uri', $value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set metadatum section ID for the metadatum
|
||||||
|
*
|
||||||
|
* @param [string] $value
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
function set_metadatum_section_id( $value) {
|
||||||
|
return $this->set_mapped_property('metadatum_section_id', $value);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Transient property used to store the status of the metadatum for a particular collection
|
* Transient property used to store the status of the metadatum for a particular collection
|
||||||
|
|
|
@ -295,12 +295,14 @@ class Metadata_Section extends Repository {
|
||||||
|
|
||||||
public function add_metadatum($metadata_section_id, $metadatum_list) {
|
public function add_metadatum($metadata_section_id, $metadatum_list) {
|
||||||
$metadata_section = $this->fetch($metadata_section_id);
|
$metadata_section = $this->fetch($metadata_section_id);
|
||||||
$list = $metadata_section->get_metadatum_list();
|
if ($metadata_section) {
|
||||||
$metadatum_list = array_merge($list, $metadatum_list);
|
$list = $metadata_section->get_metadatum_list();
|
||||||
$metadata_section->set_metadatum_list($metadatum_list);
|
$metadatum_list = array_merge($list, $metadatum_list);
|
||||||
if($metadata_section->validate()) {
|
$metadata_section->set_metadatum_list($metadatum_list);
|
||||||
$metadata_section = $this->update($metadata_section);
|
if($metadata_section->validate()) {
|
||||||
return $metadata_section;
|
$metadata_section = $this->update($metadata_section);
|
||||||
|
return $metadata_section;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -225,6 +225,12 @@ class Metadata extends Repository {
|
||||||
// yes or no. It cant be multiple if its collection_key
|
// yes or no. It cant be multiple if its collection_key
|
||||||
'default' => 'no'
|
'default' => 'no'
|
||||||
],
|
],
|
||||||
|
'metadatum_section_id' => [
|
||||||
|
'map' => 'meta',
|
||||||
|
'title' => __( 'Metadatum section', 'tainacan' ),
|
||||||
|
'type' => ['integer', 'string', 'array'],
|
||||||
|
'description' => __( 'The metadatum section ID', 'tainacan' ),
|
||||||
|
],
|
||||||
] );
|
] );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -651,6 +657,7 @@ class Metadata extends Repository {
|
||||||
|
|
||||||
$this->update_taxonomy_metadatum( $new_metadatum );
|
$this->update_taxonomy_metadatum( $new_metadatum );
|
||||||
$this->update_metadata_type_index( $new_metadatum );
|
$this->update_metadata_type_index( $new_metadatum );
|
||||||
|
$this->update_metadatum_section( $new_metadatum );
|
||||||
|
|
||||||
return $new_metadatum;
|
return $new_metadatum;
|
||||||
}
|
}
|
||||||
|
@ -1585,6 +1592,7 @@ class Metadata extends Repository {
|
||||||
*/
|
*/
|
||||||
public function delete( Entities\Entity $entity, $permanent = true ) {
|
public function delete( Entities\Entity $entity, $permanent = true ) {
|
||||||
$this->delete_taxonomy_metadatum($entity);
|
$this->delete_taxonomy_metadatum($entity);
|
||||||
|
$this->update_metadatum_section($entity, true);
|
||||||
return parent::delete($entity, $permanent);
|
return parent::delete($entity, $permanent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1715,4 +1723,14 @@ class Metadata extends Repository {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function update_metadatum_section( Entities\Metadatum $metadatum, $remove = false ) {
|
||||||
|
$metadatum_section_repository = Metadata_Section::get_instance();
|
||||||
|
if (!$remove) {
|
||||||
|
$metadatum_section_repository->add_metadatum($metadatum->get_metadatum_section_id(), [$metadatum->get_id()]);
|
||||||
|
} else {
|
||||||
|
$metadatum_section_repository->delete_metadatum($metadatum->get_metadatum_section_id(), [$metadatum->get_id()]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -89,6 +89,7 @@ class TAINACAN_REST_Metadata_Section_Controller extends TAINACAN_UnitApiTestCase
|
||||||
'name' => 'name-1',
|
'name' => 'name-1',
|
||||||
'description' => 'description-1',
|
'description' => 'description-1',
|
||||||
'collection' => $collection,
|
'collection' => $collection,
|
||||||
|
'status' => 'publish',
|
||||||
'metadata_type' => 'Tainacan\Metadata_Types\Text',
|
'metadata_type' => 'Tainacan\Metadata_Types\Text',
|
||||||
),
|
),
|
||||||
true
|
true
|
||||||
|
@ -100,6 +101,7 @@ class TAINACAN_REST_Metadata_Section_Controller extends TAINACAN_UnitApiTestCase
|
||||||
'name' => 'name-2',
|
'name' => 'name-2',
|
||||||
'description' => 'description-2',
|
'description' => 'description-2',
|
||||||
'collection' => $collection,
|
'collection' => $collection,
|
||||||
|
'status' => 'publish',
|
||||||
'metadata_type' => 'Tainacan\Metadata_Types\Text',
|
'metadata_type' => 'Tainacan\Metadata_Types\Text',
|
||||||
),
|
),
|
||||||
true
|
true
|
||||||
|
@ -111,6 +113,7 @@ class TAINACAN_REST_Metadata_Section_Controller extends TAINACAN_UnitApiTestCase
|
||||||
'name' => 'name-3',
|
'name' => 'name-3',
|
||||||
'description' => 'description-3',
|
'description' => 'description-3',
|
||||||
'collection' => $collection,
|
'collection' => $collection,
|
||||||
|
'status' => 'publish',
|
||||||
'metadata_type' => 'Tainacan\Metadata_Types\Text',
|
'metadata_type' => 'Tainacan\Metadata_Types\Text',
|
||||||
),
|
),
|
||||||
true
|
true
|
||||||
|
@ -122,6 +125,7 @@ class TAINACAN_REST_Metadata_Section_Controller extends TAINACAN_UnitApiTestCase
|
||||||
'name' => 'Section',
|
'name' => 'Section',
|
||||||
'description' => 'Section Description',
|
'description' => 'Section Description',
|
||||||
'collection' => $collection,
|
'collection' => $collection,
|
||||||
|
'status' => 'publish',
|
||||||
'metadatum_list' => [$metadatum_1->get_id(), $metadatum_1->get_id()]
|
'metadatum_list' => [$metadatum_1->get_id(), $metadatum_1->get_id()]
|
||||||
),
|
),
|
||||||
true
|
true
|
||||||
|
@ -147,6 +151,50 @@ class TAINACAN_REST_Metadata_Section_Controller extends TAINACAN_UnitApiTestCase
|
||||||
$this->assertContains($metadatum_1->get_id(), $metadatum_section_added['metadatum_list']);
|
$this->assertContains($metadatum_1->get_id(), $metadatum_section_added['metadatum_list']);
|
||||||
$this->assertContains($metadatum_2->get_id(), $metadatum_section_added['metadatum_list']);
|
$this->assertContains($metadatum_2->get_id(), $metadatum_section_added['metadatum_list']);
|
||||||
$this->assertContains($metadatum_3->get_id(), $metadatum_section_added['metadatum_list']);
|
$this->assertContains($metadatum_3->get_id(), $metadatum_section_added['metadatum_list']);
|
||||||
|
|
||||||
|
$metadatum = $this->tainacan_entity_factory->create_entity(
|
||||||
|
'metadatum',
|
||||||
|
array(
|
||||||
|
'name' => 'Data',
|
||||||
|
'description' => 'Descreve o dado do campo data.',
|
||||||
|
'collection' => $collection,
|
||||||
|
'status' => 'publish',
|
||||||
|
'metadata_type' => 'Tainacan\Metadata_Types\Text',
|
||||||
|
'multiple' => 'yes'
|
||||||
|
),
|
||||||
|
true
|
||||||
|
);
|
||||||
|
|
||||||
|
$values = json_encode([
|
||||||
|
'name' => 'Dia/Mês/Ano',
|
||||||
|
'description' => 'Continua descrevendo o dado do campo.',
|
||||||
|
'metadatum_section_id' => $metadatum_section->get_id()
|
||||||
|
]);
|
||||||
|
|
||||||
|
$request = new \WP_REST_Request(
|
||||||
|
'PATCH',
|
||||||
|
$this->namespace . '/collection/' . $collection->get_id() . '/metadata/' . $metadatum->get_id()
|
||||||
|
);
|
||||||
|
|
||||||
|
$request->set_body($values);
|
||||||
|
$response = $this->server->dispatch($request);
|
||||||
|
$data = $response->get_data();
|
||||||
|
|
||||||
|
$this->assertEquals($metadatum->get_id(), $data['id']);
|
||||||
|
$this->assertEquals('Dia/Mês/Ano', $data['name']);
|
||||||
|
$this->assertEquals($metadatum_section->get_id(), $data['metadatum_section_id']);
|
||||||
|
|
||||||
|
$request = new \WP_REST_Request(
|
||||||
|
'GET',
|
||||||
|
$this->namespace . '/collection/' . $collection->get_id() . '/metadata-sections/' . $metadatum_section->get_id() . '/metadatum'
|
||||||
|
);
|
||||||
|
$response = $this->server->dispatch($request);
|
||||||
|
$metadata_list = $response->get_data();
|
||||||
|
$this->assertEquals(4, count($metadata_list));
|
||||||
|
$this->assertNotNull(array_search($metadatum_1->get_id(), array_column($metadata_list, "id")));
|
||||||
|
$this->assertNotNull(array_search($metadatum_2->get_id(), array_column($metadata_list, "id")));
|
||||||
|
$this->assertNotNull(array_search($metadatum_3->get_id(), array_column($metadata_list, "id")));
|
||||||
|
$this->assertNotNull(array_search($metadatum->get_id(), array_column($metadata_list, "id")));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function test_delete_metadata_metadatum_section() {
|
public function test_delete_metadata_metadatum_section() {
|
||||||
|
|
Loading…
Reference in New Issue