type = $options[$id]['type']; $this->path = $options[$id]['dir']; error_log("Restore Backup"); error_log($this->type); error_log($this->path); $this->restore(); } public function restore() { if ( ! class_exists( 'PclZip' ) ){ require ABSPATH . 'wp-admin/includes/class-pclzip.php'; } if ( $this->type == 'Complete' || $this->type == 'complete' ){ $this->restore_complete(); } if ( $this->type == 'Database' || $this->type == 'database' ){ $this->restore_database(); } if ( $this->type == 'File' || $this->type == 'file' ){ $this->restore_files(); } } public function restore_complete() { error_log("Inside restore_complete"); $filename = basename( $this->path, '.zip' ) . '.sql'; $file_path = ABSPATH . $filename; $this->restore_files(); $this->restore_database( $file_path ); } public function restore_database( $file = null ) { error_log("Inside restore_database"); global $wpdb; if ( ! $file ) { $archive = new PclZip( $this->path ); $filename = basename( $this->path, '.zip' ) . '.sql'; $path_info = wp_upload_dir(); $dir = $path_info['basedir'].'/'.WPDB_BACKUPS_DIR.'/'; $file_path = $dir .$filename; if ( ! $archive->extract( PCLZIP_OPT_PATH, $dir ) ){ wp_die( esc_html__('Unable to extract zip file. Please check that zlib php extension is enabled.','wpdbbkp').'', esc_html__('ZIP Error','wpdbbkp') ); } } else { $file_path = $file; } $database_file = $file_path ; $database_name=$this->wp_backup_get_config_db_name(); $database_user=$this->wp_backup_get_config_data('DB_USER'); $datadase_password=$this->wp_backup_get_config_data('DB_PASSWORD'); $database_host=$this->wp_backup_get_config_data('DB_HOST'); ini_set("max_execution_time", "5000"); ini_set("max_input_time", "5000"); ini_set('memory_limit', '1000M'); set_time_limit(0); ignore_user_abort(true); if ( '' !== ( trim( (string) $database_name ) ) && '' !== ( trim( (string) $database_user ) ) && '' !== ( trim( (string) $database_host ) ) ) { $conn = mysqli_connect( (string) $database_host, (string) $database_user, (string) $datadase_password ); // phpcs:ignore if ( $conn ) { /*BEGIN: Select the Database*/ if(!mysqli_select_db($conn, (string)$database_name)) { $sql = "CREATE DATABASE IF NOT EXISTS `".(string)$database_name."`"; mysqli_query($conn, $sql); mysqli_select_db($conn, (string)$database_name); } /*END: Select the Database*/ /* BEGIN: Remove All Tables from the Database */ $found_tables = null; $result = mysqli_query( $conn, 'SHOW TABLES FROM `' . (string) $database_name . '`' ); // phpcs:ignore if ( $result ) { // $row = mysqli_fetch_row( $result ); // phpcs:ignore while ($row = mysqli_fetch_row($result)) { $found_tables[] = $row[0]; } if ( count( $found_tables ) > 0 ) { foreach ( $found_tables as $table_name ) { mysqli_query( $conn, "DROP TABLE " . (string) $database_name . ".".$table_name ); // phpcs:ignore } } } /* END: Remove All Tables from the Database */ /* BEGIN: Restore Database Content */ if ( isset( $database_file ) ) { $database_file = $database_file; if ( file_exists( $database_file ) ) { $sql_file = file_get_contents( $database_file, true ); if($sql_file){ $sql_queries = explode( ";\n", $sql_file ); $sql_queries_count = count( $sql_queries ); mysqli_query($conn, "SET sql_mode = ''"); for ( $i = 0; $i < $sql_queries_count; $i++ ) { $sql_query_=apply_filters( 'wpdbbkp_sql_query_restore', $sql_queries[ $i ] ); mysqli_query($conn, $sql_query_ ); // phpcs:ignore } } } } /* END: Restore Database Content */ } } @unlink( $file_path ); } public function restore_files( $file = null ) { error_log("Inside restore_files"); if ( ! $file){ $archive = new PclZip( $this->path ); } else{ $archive = new PclZip( $file ); } if ( ! $archive->extract( PCLZIP_OPT_PATH, ABSPATH ) ){ wp_die( esc_html__('Unable to extract zip file. Please check that zlib php extension is enabled.','wpdbbkp').'', esc_html__('ZIP Error','wpdbbkp') ); } } public function wp_backup_get_config_db_name() { $filepath=get_home_path().'/wp-config.php'; $config_file = @file_get_contents("$filepath", true); if($config_file){ preg_match("/'DB_NAME',\s*'(.*)?'/", $config_file, $matches); return $matches[1]; } return ''; } public function wp_backup_get_config_data($key) { $filepath=get_home_path().'/wp-config.php'; $config_file = @file_get_contents("$filepath", true); if($config_file){ switch($key) { case 'DB_NAME': preg_match("/'DB_NAME',\s*'(.*)?'/", $config_file, $matches); break; case 'DB_USER': preg_match("/'DB_USER',\s*'(.*)?'/", $config_file, $matches); break; case 'DB_PASSWORD': preg_match("/'DB_PASSWORD',\s*'(.*)?'/", $config_file, $matches); break; case 'DB_HOST': preg_match("/'DB_HOST',\s*'(.*)?'/", $config_file, $matches); break; } return $matches[1]; } return ''; } }