File "WPDP_Child_Form.php"
Full Path: /home/vantageo/public_html/cache/.wp-cli/wp-content/plugins/wp-data-access/WPDataProjects/Parent_Child/WPDP_Child_Form.php
File size: 6.28 KB
MIME-type: text/x-php
Charset: utf-8
<?php
/**
* Suppress "error - 0 - No summary was found for this file" on phpdoc generation
*
* @package WPDataProjects\Parent_Child
*/
namespace WPDataProjects\Parent_Child {
use WPDataAccess\Connection\WPDADB;
use WPDataProjects\Simple_Form\WPDP_Simple_Form;
use WPDataAccess\Utilities\WPDA_Message_Box;
/**
* Class WPDP_Child_Form extends WPDP_Simple_Form
*
* @see WPDP_Simple_Form
*
* @author Peter Schulz
* @since 2.0.0
*/
class WPDP_Child_Form extends WPDP_Simple_Form {
/**
* Possible values: edit and view
*
* @var string
*/
protected $mode;
/**
* Saved initially requested action
*
* Action is changed during processing
*
* @var string
*/
protected $initial_action;
/**
* Parent key values
*
* @var array
*/
protected $parent;
/**
* Child relationships (for actual parent)
*
* @var array
*/
protected $child;
/**
* WPDP_Child_Form constructor
*
* @param $schema_name
* @param $table_name
* @param $wpda_list_columns
* @param array $args
*/
public function __construct( $schema_name, $table_name, $wpda_list_columns, $args = array() ) {
if ( isset( $args['mode'] ) ) {
$this->mode = $args['mode'];
} else {
wp_die( __( 'ERROR: Wrong arguments [missing mode]', 'wp-data-access' ) );
}
if ( isset( $args['parent'] ) ) {
$this->parent = $args['parent'];
} else {
wp_die( __( 'ERROR: Wrong arguments [missing parent]', 'wp-data-access' ) );
}
if ( isset( $args['child'] ) ) {
$this->child = $args['child'];
} else {
wp_die( __( 'ERROR: Wrong arguments [missing child]', 'wp-data-access' ) );
}
$this->page_number_item_name = 'child_page_number';
parent::__construct( $schema_name, $table_name, $wpda_list_columns, $args );
$this->initial_action = $this->action;
}
/**
* Overwrite method to add parent argument to get back to parent child relationship
*/
protected function add_parent_args() {
foreach ( $this->parent['parent_key'] as $parent_key ) {
?>
<input type='hidden'
name='WPDA_PARENT_KEY*<?php echo( esc_attr( $parent_key ) ); ?>'
value='<?php echo( esc_attr( $this->parent['parent_key_value'][ $parent_key ] ) ); ?>'
/>
<?php
}
$child_tab = $this->get_child_tab();
?>
<input type='hidden' name='mode' value='<?php echo esc_attr( $this->mode ); ?>'>
<input type='hidden' name='child_request' value='TRUE'/>
<input type='hidden' name='child_tab' value='<?php echo esc_attr( $child_tab ); ?>'/>
<?php
}
/**
* Get actual child tab
*
* @return string
*/
protected function get_child_tab() {
if ( isset( $_REQUEST['child_tab'] ) ) {
return sanitize_text_field( wp_unslash( $_REQUEST['child_tab'] ) ); // input var okay.
} else {
return '';
}
}
/**
* Overwrites method add_parent_args_to_back_button to add parent arguments
*
* @return string|void
*/
protected function add_parent_args_to_back_button() {
$child_tab = $this->get_child_tab();
$args = "&action=list&mode={$this->mode}&child_request=TRUE&child_tab=$child_tab";
foreach ( $this->parent['parent_key'] as $parent_key ) {
$args .= '&' . esc_attr( $parent_key ) . '=' . esc_attr( $this->parent['parent_key_value'][ $parent_key ] );
}
return $args;
}
/**
* Overwrites method prepare_row to prepare child insert
*/
protected function prepare_row() {
parent::prepare_row();
if ( 'new' === $this->initial_action && 'edit' === $this->action && 'save' === $this->action2 ) {
if ( isset( $this->child['relation_nm'] ) ) {
// Create relationship (n:m).
// Prepare values.
if ( - 1 !== $this->auto_increment_value ) {
$child_columns = array(
$this->child['relation_nm']['child_table_select'][0] =>
$this->auto_increment_value,
$this->child['relation_nm']['child_table_where'][0] =>
$this->parent['parent_key_value'][ $this->parent['parent_key'][0] ],
);
} else {
$index = 0;
foreach ( $this->child['relation_nm']['parent_key'] as $parent_key ) {
$child_columns[ $this->child['relation_nm']['child_table_select'][ $index ] ] =
$this->form_items_new_values[ $this->child['relation_nm']['parent_key'][ $parent_key ] ];
$child_columns[ $this->child['relation_nm']['child_table_where'][ $index ] ] =
$this->parent['parent_key_value'][ $this->parent['parent_key'][ $index ] ];
$index ++;
}
}
// Perform insert.
$wpdadb = WPDADB::get_db_connection( $this->schema_name );
if ( null === $wpdadb ) {
wp_die( sprintf( __( 'ERROR - Remote database %s not available', 'wp-data-access' ), esc_attr( $this->schema_name ) ) );
}
$result = $wpdadb->insert( $this->child['relation_nm']['child_table'], $child_columns );
// Error handling.
if ( false === $result ) {
$this->relationship_insert_failed();
} elseif ( 1 !== $result ) {
$this->relationship_insert_failed();
}
}
}
}
/**
* Message shown on insert error
*/
protected function relationship_insert_failed() {
$msg = new WPDA_Message_Box(
array(
'message_text' => __( 'Error create relationship (insert failed)', 'wp-data-access' ),
'message_type' => 'error',
'message_is_dismissible' => false,
)
);
$msg->box();
}
/**
* Overwrites method prepare_items to add parent key values
*
* @param bool $set_back_form_values
*/
protected function prepare_items( $set_back_form_values = false ) {
parent::prepare_items( $set_back_form_values );
if ( isset( $this->child['relation_1n'] ) ) {
foreach ( $this->child['relation_1n']['child_key'] as $child_key ) {
$child_index = $this->get_item_index( $child_key );
$child_item = $this->form_items[ $child_index ];
if ( $child_item->get_item_name() === $child_key ) {
foreach ( $this->child['relation_1n']['parent_key'] as $parent_key ) {
foreach ( $this->parent['parent_key'] as $pkey ) {
if ( $parent_key === $pkey ) {
$child_item->set_item_default_value( $this->parent['parent_key_value'][ $parent_key ] );
$child_item->set_hide_item( true );
$child_item->set_foreign_key_column( true );
}
}
}
}
}
}
}
}
}