schema_name = $wpdb->dbname; $this->action = isset( $_REQUEST['action'] ) ? // phpcs:ignore WordPress.Security.NonceVerification sanitize_text_field( wp_unslash( $_REQUEST['action'] ) ) : null; // phpcs:ignore WordPress.Security.NonceVerification } /** * Show HTML page * * @return void */ public function show() { ?>
action ) { // phpcs:ignore WordPress.Security.NonceVerification if ( isset( $_REQUEST['action2'] ) && 'save' === $_REQUEST['action2'] ) { // phpcs:ignore WordPress.Security.NonceVerification $this->upload_file(); } else { $this->show_body_upload(); } } elseif ( 'mapping' === $this->action ) { $this->show_body_mapping(); } elseif ( 'import_start' === $this->action ) { $this->show_body_import_start(); } elseif ( 'import' === $this->action ) { $this->show_body_import(); } elseif ( 'reload' === $this->action ) { $this->show_body_reload(); } else { $this->show_body_main(); } } /** * Show mapping page * * @return void */ protected function show_body_mapping() { $csv_mapping = new WPDA_CSV_Mapping(); $csv_mapping->show(); } /** * Show main page body * * @return void */ protected function show_body_main() { $csv_list_view = new WPDA_List_View( array( 'page_hook_suffix' => 'CSV', 'table_name' => WPDA_CSV_Uploads_Model::get_base_table_name(), 'list_table_class' => 'WPDataAccess\\CSV_Files\\WPDA_CSV_List_Table', 'edit_form_class' => 'WPDataAccess\\Simple_Form\\WPDA_Simple_Form', 'subtitle' => '', ) ); $csv_list_view->show(); } /** * Show upload body * * @return void */ protected function show_body_upload() { $csv_id = isset( $_REQUEST['csv_id'] ) ? // phpcs:ignore WordPress.Security.NonceVerification sanitize_text_field( wp_unslash( $_REQUEST['csv_id'] ) ) : ''; // phpcs:ignore WordPress.Security.NonceVerification $csv_name = isset( $_REQUEST['csv_name'] ) ? // phpcs:ignore WordPress.Security.NonceVerification sanitize_text_field( wp_unslash( $_REQUEST['csv_name'] ) ) : ''; // phpcs:ignore WordPress.Security.NonceVerification $csv_encoding = isset( $_REQUEST['csv_encoding'] ) ? // phpcs:ignore WordPress.Security.NonceVerification sanitize_text_field( wp_unslash( $_REQUEST['csv_encoding'] ) ) : ''; // phpcs:ignore WordPress.Security.NonceVerification ?>ERROR: No CSV file found for this import
'; return; } if ( ! isset( $dbrow[0]->csv_mapping ) ) { echo 'ERROR: Cannot import CSV file without column mapping
'; return; } echo 'Validating column mapping...
'; $upload_dir = WPDA::get_plugin_upload_dir(); $file_name = $upload_dir . $dbrow[0]->csv_real_file_name; $mapping = json_decode( $dbrow[0]->csv_mapping, true ); $delimiter = isset( $mapping['settings']['delimiter'] ) ? $mapping['settings']['delimiter'] : ','; $date_format = isset( $mapping['settings']['date_format'] ) ? $mapping['settings']['date_format'] : '%Y-%m-%d'; $has_header_columns = isset( $mapping['settings']['has_header_columns'] ) ? $mapping['settings']['has_header_columns'] : true; $schema_name = isset( $mapping['database']['wpdaschema_name'] ) ? esc_attr( $mapping['database']['wpdaschema_name'] ) : ''; $table_name = isset( $mapping['database']['table_name'] ) ? esc_attr( $mapping['database']['table_name'] ) : ''; $table_name = str_replace( '`', '', $table_name ); $table_columns = isset( $mapping['columns'] ) ? $mapping['columns'] : array(); if ( 'on' === $truncate_table ) { // Truncate table. $wpdadb = WPDADB::get_db_connection( $schema_name ); $wpdadb->query( $wpdb->prepare( 'truncate table `%1s`', // phpcs:ignore WordPress.DB.PreparedSQLPlaceholders array( WPDA::remove_backticks( $table_name ), ) ) ); echo 'Table `' . esc_attr( $table_name ) . '` truncated...
'; } $columns_inserted = ''; foreach ( $table_columns as $table_column ) { $columns_inserted .= $table_column . ','; } $columns_inserted = substr( $columns_inserted, 0, strlen( $columns_inserted ) - 1 ); $data_type = array(); $data_type_before = array(); $data_type_after = array(); $wpda_list_columns = WPDA_List_Columns_Cache::get_list_columns( $schema_name, $table_name ); $column_data_types = $wpda_list_columns->get_table_columns(); foreach ( $column_data_types as $column ) { $data_type[ $column['column_name'] ] = WPDA::get_type( $column['data_type'] ); switch ( $data_type[ $column['column_name'] ] ) { case 'number': $data_type_before[ $column['column_name'] ] = ''; $data_type_after[ $column['column_name'] ] = ''; break; case 'date': $data_type_before[ $column['column_name'] ] = "str_to_date('"; $data_type_after[ $column['column_name'] ] = "','$date_format')"; break; default: $data_type_before[ $column['column_name'] ] = "'"; $data_type_after[ $column['column_name'] ] = "'"; } } // phpcs:disable Squiz.PHP.DiscouragedFunctions.Discouraged, PluginCheck.CodeAnalysis.PHPErrorReporting.IniDirectiveDisplay_errors echo 'Enabling buffering...
'; set_time_limit( 0 ); @ini_set( 'zlib.output_compression', false ); @ini_set( 'implicit_flush', true ); @ini_set( 'output_buffering', true ); @ini_set( 'display_errors', false ); ob_implicit_flush( true ); echo 'Reading CSV file...
'; @ini_set( 'auto_detect_line_endings', true ); // phpcs:enable Squiz.PHP.DiscouragedFunctions.Discouraged, PluginCheck.CodeAnalysis.PHPErrorReporting.IniDirectiveDisplay_errors if ( false !== ( $fp = fopen( $file_name, 'rb' ) ) ) { // phpcs:ignore $wpdadb = WPDADB::get_db_connection( $schema_name ); if ( null !== $wpdadb ) { $row = 0; $inserted = 0; $errors = 0; echo 'Connecting to database...
'; $suppress_errors = $wpdadb->suppress_errors( true ); while ( false !== ( $data = fgetcsv( $fp, 0, $delimiter, '"' ) ) ) { // phpcs:ignore if ( 0 === $row && 'true' === $has_header_columns ) { // phpcs:ignore // Skip first row. } else { // Prepare insert array. $wpda_insert_column_values = array(); $row_values_valid = true; for ( $column = 0; $column < count( $data ); $column++ ) { // phpcs:ignore if ( isset( $table_columns[ $column ] ) ) { // Add column to array. if ( isset( $table_columns[ $column ] ) ) { if ( 'number' === $data_type[ $table_columns[ $column ] ] || 'date' === $data_type[ $table_columns[ $column ] ] ) { if ( null === $data[ $column ] || 'null' === $data[ $column ] || '' === $data[ $column ] ) { $wpda_insert_column_values[ $table_columns[ $column ] ] = null; } else { if ( 'number' === $data_type[ $table_columns[ $column ] ] ) { $wpda_insert_column_values[ $table_columns[ $column ] ] = $data[ $column ]; } else { try { $date_value = substr( $data[ $column ], 0, 10 ); $convert_date = \DateTime::createFromFormat( str_replace( '%', '', $date_format ), $date_value ); if ( false === $convert_date ) { $error_msg = 'Cannot convert ' . esc_attr( $date_value ) . ' to date (using format ' . esc_attr( $date_format ) . ')'; echo 'Import ready!
"; echo esc_attr( $row ) . ' rows processedERROR: File not found
'; } } } /** * Body reload * * @return void */ protected function show_body_reload() { $csv_id = isset( $_REQUEST['csv_id'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['csv_id'] ) ) : ''; // input var okay. // Security check. $wp_nonce = isset( $_REQUEST['_wpnonce'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['_wpnonce'] ) ) : '?'; // input var okay. if ( ! wp_verify_nonce( $wp_nonce, "wpda-reload-csv-{$csv_id}" ) ) { wp_die( esc_html__( 'ERROR: Not authorized', 'wp-data-access' ) ); } $this->show_body_upload(); } /** * Upload file * * @return void */ protected function upload_file() { // Security check. $wp_nonce = isset( $_REQUEST['_wpnonce'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['_wpnonce'] ) ) : '?'; // input var okay. if ( ! wp_verify_nonce( $wp_nonce, "wpda-import-csv-{$this->schema_name}" ) ) { wp_die( esc_html__( 'ERROR: Not authorized', 'wp-data-access' ) ); } // phpcs:disable Squiz.PHP.DiscouragedFunctions.Discouraged $temp_file_name = isset( $_FILES['filename']['tmp_name'] ) ? sanitize_text_field( $_FILES['filename']['tmp_name'] ) : ''; // For Windows: do NOT unslash! // phpcs:enable Squiz.PHP.DiscouragedFunctions.Discouraged $orig_file_name = isset( $_FILES['filename']['name'] ) ? sanitize_text_field( wp_unslash( $_FILES['filename']['name'] ) ) : ''; if ( isset( $_FILES['filename'] ) && isset( $_REQUEST['csv_name'] ) ) { if ( isset( $_FILES['filename']['error'] ) && UPLOAD_ERR_OK === $_FILES['filename']['error'] && is_uploaded_file( $temp_file_name ) ) { echo '