update functions `save_children` and `delete_children` #17

This commit is contained in:
vnmedeiros 2020-03-13 12:07:18 -03:00
parent 98215e86ff
commit 9e89b7420b
1 changed files with 29 additions and 64 deletions

View File

@ -28,6 +28,7 @@ class Compound extends Metadata_Type {
</div> </div>
'); ');
add_action( 'tainacan-insert-tainacan-metadatum', array( &$this, 'save_children' ), 10, 1 ); add_action( 'tainacan-insert-tainacan-metadatum', array( &$this, 'save_children' ), 10, 1 );
add_action( 'tainacan-pre-delete-tainacan-metadatum', array( &$this, 'delete_children' ), 10, 1 );
} }
/** /**
@ -50,69 +51,33 @@ class Compound extends Metadata_Type {
$metadatum_type_object = $metadatum->get_metadata_type_object(); $metadatum_type_object = $metadatum->get_metadata_type_object();
if( $metadatum_type_object instanceof \Tainacan\Metadata_Types\Compound ) { if( $metadatum_type_object instanceof \Tainacan\Metadata_Types\Compound ) {
$options = $metadatum_type_object->get_options(); $options = $metadatum->get_metadata_type_options();
$Tainacan_Metadata = \Tainacan\Repositories\Metadata::get_instance();
if( isset( $options['parent'] ) )
if( !isset( $options['parent'] ) ) return;
return;
$options['parent'] = $metadatum->get_ID();
if( isset( $options['before_children'] ) && is_array( $options['before_children'] ) ) { $metadatum->set_metadata_type_options($options);
foreach ( $options['before_children'] as $child) { if( $metadatum->validate() ) {
if( isset( $options['children'] ) && is_array( $options['children'] ) && in_array( $child, $options['children'])) $Tainacan_Metadata = \Tainacan\Repositories\Metadata::get_instance();
continue; $Tainacan_Metadata->update( $metadatum );
$metadatum = new \Tainacan\Entities\Metadatum( $child );
$metadatum->set_parent(0);
if( $metadatum->validate() ) {
$Tainacan_Metadata->update( $field );
}
}
}
if( isset( $options['children'] ) && is_array( $options['children'] ) ) {
foreach ( $options['children'] as $child) {
$metadatum = new \Tainacan\Entities\Metadatum( $child );
$metadatum->set_parent( $options['parent'] );
if( $metadatum->validate() ) {
$Tainacan_Metadata->update( $metadatum );
}
}
} }
} }
} }
/** public function delete_children ( $metadatum) {
* validate the children of the compound
* @param \Tainacan\Entities\Metadatum $metadatum
* @return array|bool
*/
public function validate_options( \Tainacan\Entities\Metadatum $metadatum ) {
if ( !in_array($metadatum->get_status(), apply_filters('tainacan-status-require-validation', ['publish','future','private'])) )
return true;
$metadatum_type_object = $metadatum->get_metadata_type_object(); $metadatum_type_object = $metadatum->get_metadata_type_object();
if( $metadatum_type_object instanceof \Tainacan\Metadata_Types\Compound ) { if( $metadatum_type_object instanceof \Tainacan\Metadata_Types\Compound ) {
$options = $metadatum_type_object->get_options(); $options = parent::get_options();
if( isset( $options['parent'] ) ) {
// if parent is not set, it comes from tests $Tainacan_Metadata = \Tainacan\Repositories\Metadata::get_instance();
if( !isset( $options['parent'] ) ) $childrens = $Tainacan_Metadata->fetch( ['parent' => $options['parent'] ], "OBJECT" );
return true; foreach ($childrens as $child) {
$Tainacan_Metadata->trash($child);
if( !isset( $options['children'] ) || empty( $options['children'] ) ) {
return ['children' => __('Children is required','tainacan')];
}
foreach ($options['children'] as $child) {
$metadatum = new \Tainacan\Entities\Metadatum( $child );
$metadatum->set_parent( $options['parent'] );
if( !$metadatum->validate() ) {
return [ $metadatum->get_errors()[0] ];
} }
} }
} }
return true;
} }
/** /**
@ -125,17 +90,17 @@ class Compound extends Metadata_Type {
$options = parent::get_options(); $options = parent::get_options();
$options['children_objects'] = []; $options['children_objects'] = [];
if( isset( $options['children'] ) && !empty( $options['children'] ) ) { if( isset( $options['parent'] ) ) {
foreach ($options['children'] as $child) { $childrens = $Tainacan_Metadata->fetch( ['parent' => $options['parent'] ], "OBJECT" );
$item = new \Tainacan\Entities\Metadatum( $child ); foreach ($childrens as $child) {
$item_arr = $item->_toArray(); $item_arr = $child->_toArray();
$item_arr['metadata_type_object'] = $item->get_metadata_type_object()->_toArray(); $item_arr['metadata_type_object'] = $child->get_metadata_type_object()->_toArray();
$item_arr['current_user_can_edit'] = $item->can_edit(); $item_arr['current_user_can_edit'] = $child->can_edit();
ob_start(); ob_start();
$item->get_metadata_type_object()->form(); $child->get_metadata_type_object()->form();
$form = ob_get_clean(); $child = ob_get_clean();
$item_arr['edit_form'] = $form; $item_arr['edit_form'] = $form;
$options['children_objects'][] = $item_arr; $options['children_objects'][] = $item_arr;
} }
} }
return $options; return $options;