File "WPDP_Parent_List_Table.php"
Full Path: /home/vantageo/public_html/cache/cache/cache/cache/cache/cache/cache/.wp-cli/wp-content/plugins/wp-data-access/WPDataProjects/Parent_Child/WPDP_Parent_List_Table.php
File size: 8.04 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\List_Table\WPDP_List_Table_Lookup;
use WPDataAccess\Data_Dictionary\WPDA_Dictionary_Exist;
/**
* Class WPDP_Parent_List_Table extends WPDP_List_Table_Lookup
*
* @see WPDP_List_Table_Lookup
*
* @author Peter Schulz
* @since 2.0.0
*/
class WPDP_Parent_List_Table extends WPDP_List_Table_Lookup {
/**
* Project info
*
* @var array
*/
protected $project;
/**
* User message
*
* @var string
*/
protected $message_confirm_delete;
/**
* WPDP_Parent_List_Table constructor
*
* @param array $args
*/
public function __construct( $args = array() ) {
if ( isset( $args['project'] ) ) {
$this->project = $args['project'];
} else {
wp_die( __( 'ERROR: Wrong arguments', 'wp-data-access' ) );
}
$args['allow_import'] = 'off';
parent::__construct( $args );
$this->message_confirm_delete =
__( "Delete current item and all its relationships?\\nThis action cannot be undone.\\n\'Cancel\' to stop, \'OK\' to delete.", 'wp-data-access' );
if ( isset( $args['where_clause'] ) && '' !== $args['where_clause'] ) {
$this->where = $args['where_clause'];
}
if ( isset( $args['orderby_clause'] ) && '' !== $args['orderby_clause'] ) {
$this->orderby = $args['orderby_clause'];
}
}
/**
* Overwrites method bind_action_buttons to set message_confirm_delete
*/
protected function bind_action_buttons() {
?>
<script type='text/javascript'>
jQuery(function () {
jQuery("#doaction").click(function () {
return wpdp_action_button("<?php echo $this->message_confirm_delete; // phpcs:ignore WordPress.Security.EscapeOutput ?>");
});
jQuery("#doaction2").click(function () {
return wpdp_action_button("<?php echo $this->message_confirm_delete; // phpcs:ignore WordPress.Security.EscapeOutput ?>");
});
});
</script>
<?php
}
/**
* Overwrites method column_default_add_action to set mode
*
* @param array $item
* @param string $column_name
* @param array $actions
*/
protected function column_default_add_action( $item, $column_name, &$actions ) {
if ( 'view' === $this->project->get_mode() ) {
unset( $actions['edit'] );
unset( $actions['delete'] );
?>
<script type='text/javascript'>
jQuery("#view_form_" + <?php echo esc_attr( self::$list_number - 1 ); ?>).append('<input type="hidden" name="mode" value="view">');
jQuery("#edit_form_" + <?php echo esc_attr( self::$list_number - 1 ); ?>).remove();
jQuery("#delete_form_" + <?php echo esc_attr( self::$list_number - 1 ); ?>).remove();
</script>
<?php
} else {
?>
<script type='text/javascript'>
jQuery("#" + <?php echo esc_attr( self::$list_number - 1 ); ?>).append('<input type="hidden" name="mode" value="view">');
jQuery("#edit_form_" + <?php echo esc_attr( self::$list_number - 1 ); ?>).append('<input type="hidden" name="mode" value="edit">');
jQuery("#delete_form_" + <?php echo esc_attr( self::$list_number - 1 ); ?>).append('<input type="hidden" name="mode" value="edit">');
</script>
<?php
if ( 'off' !== $this->allow_delete ) {
$title = __( 'Delete parent row and its child rows', 'wp-data-access' );
$actions['delete'] = sprintf(
'
<a href="javascript:void(0)" class="wpda_tooltip"
title="' . $title . '"
onclick="if (confirm(\'%s\')) jQuery(\'%s\').submit()"
>
<span style="white-space:nowrap">
<i class="fas fa-trash wpda_icon_on_button"></i>
%s
</span>
</a>
',
$this->message_confirm_delete,
'#delete_form_' . strval( self::$list_number - 1 ),
__( 'Delete', 'wp-data-access' )
);
}
}
}
/**
* Overwrite method
*
* @param array $item
*
* @return string
*/
protected function add_parent_args_as_string( $item ) {
$parent_args = '';
if ( isset( $this->project ) ) {
$parents = $this->project->get_parent();
if ( isset( $parents['key'] ) && is_array( $parents['key'] ) ) {
foreach ( $parents['key'] as $key ) {
$value = null;
if ( isset( $item[ $key ] ) ) {
$value = $item[ $key ];
}
$parent_args .= "<input type='hidden' name='WPDA_PARENT_KEY*" . esc_attr( $key ) . "' value='" . esc_attr( $value ) . "' >";
}
}
}
return $parent_args;
}
/**
* Overwrite method get_bulk_actions to add action 'Delete Permanently'
*
* @return array
*/
public function get_bulk_actions() {
if ( 'view' === $this->project->get_mode() ) {
return '';
}
if ( ! $this->bulk_actions_enabled ) {
// Bulk actions disabled.
return '';
}
if ( empty( $this->wpda_list_columns->get_table_primary_key() ) ) {
// Tables has no primary key: no bulk actions allowed!
// Primary key is neccesary to ensure uniqueness.
return '';
}
if ( 'off' !== $this->allow_delete ) {
$actions = parent::get_bulk_actions();
} else {
$actions = array();
}
return $actions;
}
/**
* Overwrites method delete_row to delete child rows on parent delete
*
* @param string $where where clause
* @param string $engine connect or empty
*
* @return mixed
*/
public function delete_row( $where, $engine = '' ) {
foreach ( $this->project->get_children() as $child ) {
if ( isset( $child['relation_nm'] ) ) {
$table_name = $child['relation_nm']['child_table'];
$row_to_be_deleted = array();
$i = 0;
foreach ( $where as $key ) {
$row_to_be_deleted[ $child['relation_nm']['child_table_where'][ $i ] ] = $key;
$i ++;
}
$this->delete_row_relationship( $table_name, $row_to_be_deleted );
} elseif ( isset( $child['relation_1n'] ) ) {
$table_name = $child['table_name'];
$row_to_be_deleted = array();
$i = 0;
foreach ( $where as $key ) {
$row_to_be_deleted[ $child['relation_1n']['child_key'][ $i ] ] = $key;
$i ++;
}
$this->delete_row_relationship( $table_name, $row_to_be_deleted );
}
}
return parent::delete_row( $where, $engine );
}
/**
* Delete relationship
*
* @param string $table_name Database table name
* @param string $where SQL where clause
*
* @return mixed Return value of SQL delete
*/
public function delete_row_relationship( $table_name, $where ) {
$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 ) ) );
}
$cannot_delete_from_view = new WPDA_Dictionary_Exist( $this->schema_name, $table_name );
if ( $cannot_delete_from_view->is_view() ) {
// Cannot delete rows from view
return;
}
return $wpdadb->delete( $table_name, $where ); // db call ok; no-cache ok.
}
/**
* Overwrites method add_header_button to add arguments
*/
protected function add_header_button() {
if ( 'edit' === $this->project->get_mode() && 'off' !== $this->allow_insert ) {
if ( is_admin() ) {
$url = "?page={$this->page}";
} else {
$url = '';
}
?>
<form
method="post"
action="<?php echo esc_attr( $url ); ?>"
style="display: inline-block; vertical-align: unset;"
>
<div>
<input type="hidden" name="action" value="new">
<input type="hidden" name="mode" value="edit">
<input type="hidden" name="table_name" value="<?php echo esc_attr( $this->table_name ); ?>">
<button type="submit" class="page-title-action">
<i class="fas fa-plus-circle wpda_icon_on_button"></i>
<?php echo __( 'Add New', 'wp-data-access' ); ?>
</button>
</div>
</form>
<?php
if ( null !== $this->wpda_import ) {
$this->wpda_import->add_button( __( 'Import', 'wp-data-access' ) );
}
}
}
}
}