File "WPDA_Restore_Repository.php"
Full Path: /home/vantageo/public_html/cache/cache/cache/cache/cache/cache/.wp-cli/wp-content/plugins/wp-data-access/WPDataAccess/Utilities/WPDA_Restore_Repository.php
File size: 2.6 KB
MIME-type: text/x-php
Charset: utf-8
<?php
namespace WPDataAccess\Utilities {
use WPDataAccess\WPDA;
class WPDA_Restore_Repository {
const BACKUP_TABLE_EXTENSION = '_BACKUP_';
protected $repository_tables = array();
public function restore( $restore_date ) {
global $wpdb;
$this->repository_tables = array();
$suppress = $wpdb->suppress_errors( true );
foreach ( WPDA_Repository::CREATE_TABLE as $key => $value ) {
if ( isset( $_REQUEST[ $key ] ) ) {
if ( 'replace' === $_REQUEST[ $key ] || 'add' === $_REQUEST[ $key ] ) {
$this->restore_table(
$wpdb->prefix . $key,
$wpdb->prefix . $key . self::BACKUP_TABLE_EXTENSION . $restore_date,
sanitize_text_field( wp_unslash( $_REQUEST[ $key ] ) )
);
}
}
}
$wpdb->suppress_errors( $suppress );
return $this->repository_tables;
}
protected function restore_table( $arg_table_name, $arg_bck_table_name, $action ) {
global $wpdb;
// Use backticks to prevent SQL injection
$table_name = WPDA::remove_backticks( $arg_table_name );
$bck_table_name = WPDA::remove_backticks( $arg_bck_table_name );
$same_cols = $wpdb->get_results(
$wpdb->prepare(
'
select c1.column_name as column_name
from information_schema.columns c1
where c1.table_schema = %s
and c1.table_name = %s
and c1.column_name in (
select c2.column_name
from information_schema.columns c2
where c2.table_schema = %s
and c2.table_name = %s
)
',
array(
$wpdb->dbname,
$table_name,
$wpdb->dbname,
$bck_table_name,
)
),
'ARRAY_A'
);
// Get selected columns
$selected_columns = '';
foreach ( $same_cols as $same_col ) {
$selected_columns .= $same_col['column_name'] . ',';
}
$selected_columns = substr( $selected_columns, 0, strlen( $selected_columns ) - 1 );
if ( 'replace' === $action ) {
// Truncate table before restoring backup data
$wpdb->query(
$wpdb->prepare(
'truncate table `%1s`', // phpcs:ignore WordPress.DB.PreparedSQLPlaceholders
array(
WPDA::remove_backticks( $table_name ),
)
)
);
}
// Restore data
$result = $wpdb->query(
$wpdb->prepare(
'insert into `%1s` (%1s) select %1s from `%1s`', // phpcs:ignore WordPress.DB.PreparedSQLPlaceholders
array(
WPDA::remove_backticks( $table_name ),
$selected_columns,
$selected_columns,
WPDA::remove_backticks( $bck_table_name ),
)
)
);
$this->repository_tables[ $table_name ] = array(
'rows' => $result,
'errors' => $wpdb->last_error,
);
}
}
}