update functions `save_children` and `delete_children` #17
This commit is contained in:
parent
98215e86ff
commit
9e89b7420b
|
@ -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;
|
||||||
|
|
||||||
if( isset( $options['before_children'] ) && is_array( $options['before_children'] ) ) {
|
$options['parent'] = $metadatum->get_ID();
|
||||||
foreach ( $options['before_children'] as $child) {
|
$metadatum->set_metadata_type_options($options);
|
||||||
if( isset( $options['children'] ) && is_array( $options['children'] ) && in_array( $child, $options['children']))
|
if( $metadatum->validate() ) {
|
||||||
continue;
|
$Tainacan_Metadata = \Tainacan\Repositories\Metadata::get_instance();
|
||||||
|
$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;
|
||||||
|
|
Loading…
Reference in New Issue