set taxmeta as private when tax turns private #274

This commit is contained in:
leogermani 2019-10-25 17:28:05 -03:00
parent 6e7bd268ee
commit fc2898f701
2 changed files with 371 additions and 286 deletions

View File

@ -40,6 +40,8 @@ class Metadata extends Repository {
add_filter( 'pre_trash_post', array( &$this, 'disable_delete_core_metadata' ), 10, 2 );
add_filter( 'pre_delete_post', array( &$this, 'force_delete_core_metadata' ), 10, 3 );
add_action('tainacan-insert-tainacan-taxonomy', [$this, 'hook_taxonomies_saved_as_private']);
}
/**
@ -1471,4 +1473,39 @@ class Metadata extends Repository {
}
}
}
/**
* When a private taxonomy is saved, check if there are any public metadata and set them to private
*
* @param \Tainacan\Entities\Taxonomy $taxonomy
* @return void
*/
public function hook_taxonomies_saved_as_private($taxonomy) {
if ( $taxonomy instanceof Entities\Taxonomy ) {
$status_obj = get_post_status_object( $taxonomy->get_status() );
if ( is_object($status_obj) && ! $status_obj->public ) {
$stati = get_post_stati(['public' => true]);
$taxonomy_id = $taxonomy->get_id();
$metadata = $this->fetch(['metadata_type' => 'Tainacan\Metadata_Types\Taxonomy', '_option_taxonomy_id' => $taxonomy_id, 'post_status' => $stati], 'OBJECT');
foreach ($metadata as $meta) {
$meta->set_status( $taxonomy->get_status() );
if ( $meta->validate() ) {
$this->insert($meta);
}
}
}
}
}
}

View File

@ -648,6 +648,54 @@ class TaxonomyMetadatumTypes extends TAINACAN_UnitTestCase {
$this->assertTrue($meta->validate(), 'Metadatum should validate because it is private now');
}
function test_set_metadata_to_private_after_taxonomy_is_set_to_private() {
$Tainacan_Metadata = \Tainacan\Repositories\Metadata::get_instance();
$Tainacan_Taxonomies = \Tainacan\Repositories\Taxonomies::get_instance();
$Tainacan_ItemMetadata = \Tainacan\Repositories\Item_Metadata::get_instance();
$collection = $this->tainacan_entity_factory->create_entity(
'collection',
array(
'name' => 'test',
'status' => 'publish'
),
true
);
$tax = $this->tainacan_entity_factory->create_entity(
'taxonomy',
array(
'name' => 'tax_test',
'status' => 'publish'
),
true
);
$metadatum = $this->tainacan_entity_factory->create_entity(
'metadatum',
array(
'name' => 'meta',
'description' => 'description',
'collection' => $collection,
'metadata_type' => 'Tainacan\Metadata_Types\Taxonomy',
'status' => 'publish',
'metadata_type_options' => [
'taxonomy_id' => $tax->get_id(),
'allow_new_terms' => 'yes'
]
),
true
);
$tax->set_status('private');
$tax->validate();
$Tainacan_Taxonomies->insert($tax);
$checkMeta = $Tainacan_Metadata->fetch( $metadatum->get_id() );
$this->assertEquals('private', $checkMeta->get_status());