PluginProbe
WP Data Access – App Builder for Tables, Forms, Charts, Maps & Dashboards / 5.5.36
WP Data Access – App Builder for Tables, Forms, Charts, Maps & Dashboards v5.5.36
5.5.84 5.5.83 5.5.82 5.5.81 5.5.80 5.5.79 5.5.77 5.5.76 5.5.75 5.5.73 5.5.72 5.5.22 5.5.23 5.5.29 5.5.3 5.5.31 5.5.32 5.5.34 5.5.35 5.5.36 5.5.37 5.5.4 5.5.40 5.5.41 5.5.42 All 160 releases
wp-data-access / WPDataAccess / Plugin_Table_Models / WPDA_CSV_Uploads_Model.php

WPDA_CSV_Uploads_Model.php in WP Data Access – App Builder for Tables, Forms, Charts, Maps & Dashboards 5.5.36, at WPDataAccess/Plugin_Table_Models/WPDA_CSV_Uploads_Model.php

213 lines 6.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace WPDataAccess\Plugin_Table_Models {
4
5 use WPDataAccess\CSV_Files\WPDA_CSV_Import;
6 use WPDataAccess\WPDA;
7
8 class WPDA_CSV_Uploads_Model extends WPDA_Plugin_Table_Base_Model {
9
10 const BASE_TABLE_NAME = 'wpda_csv_uploads';
11
12 public static function query( $csv_id ) {
13 global $wpdb;
14 return $wpdb->get_results(
15 $wpdb->prepare(
16 'select * from `%1s` where csv_id = %d', // phpcs:ignore WordPress.DB.PreparedSQLPlaceholders
17 array(
18 WPDA::remove_backticks( static::get_base_table_name() ),
19 $csv_id,
20 )
21 )
22 );
23 }
24
25 public static function insert( $csv_name, $real_file_name, $orig_file_name ) {
26 global $wpdb;
27 if ( 1 === $wpdb->insert(
28 static::get_base_table_name(),
29 array(
30 'csv_name' => $csv_name,
31 'csv_real_file_name' => $real_file_name,
32 'csv_orig_file_name' => $orig_file_name,
33 'csv_timestamp' => date( 'Y-m-d H:i:s' ),
34 )
35 )
36 ) {
37 return $wpdb->insert_id;
38 } else {
39 return false;
40 }
41 }
42
43 public static function update( $csv_id, $real_file_name, $orig_file_name ) {
44 global $wpdb;
45 return ( 1 === $wpdb->update(
46 static::get_base_table_name(),
47 array(
48 'csv_real_file_name' => $real_file_name,
49 'csv_orig_file_name' => $orig_file_name,
50 'csv_timestamp' => date( 'Y-m-d H:i:s' ),
51 ),
52 array(
53 'csv_id' => $csv_id,
54 )
55 )
56 );
57 }
58
59 public static function save_mapping() {
60 header( 'Content-Type: text/plain; charset=utf-8' );
61 if (
62 ! isset( $_REQUEST['csv_id'] ) ||
63 ! isset( $_REQUEST['csv_mapping'] ) ||
64 ! isset( $_REQUEST['wpnonce'] )
65 ) {
66 echo 'INV-Wrong arguments';
67 return;
68 }
69
70 $csv_id = sanitize_text_field( wp_unslash( $_REQUEST['csv_id'] ) ); // input var okay.
71
72 // Check if actions is allowed
73 $wp_nonce = isset( $_REQUEST['wpnonce'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['wpnonce'] ) ) : ''; // input var okay.
74 if ( ! wp_verify_nonce( $wp_nonce, "wpda-csv-mapping-{$csv_id}" ) ) {
75 echo 'INV-Not authorized';
76 return;
77 }
78
79 $csv_mapping = json_encode(
80 WPDA::sanitize_text_field_array( $_REQUEST['csv_mapping'], ['delimiter'] ) // phpcs:ignore WordPress.Security.ValidatedSanitizedInput
81 );
82
83 global $wpdb;
84 $wpdb->suppress_errors( true );
85 $rows_update = $wpdb->query(
86 $wpdb->prepare(
87 'update `%1s` set csv_mapping = %s where csv_id = %d', // phpcs:ignore WordPress.DB.PreparedSQLPlaceholders
88 array(
89 WPDA::remove_backticks( static::get_base_table_name() ),
90 $csv_mapping,
91 $csv_id,
92 )
93 )
94 );
95
96 echo '' === $wpdb->last_error ? 'UPD-' . esc_attr( $rows_update ) : 'ERR-' . $wpdb->last_error; // phpcs:ignore WordPress.Security.EscapeOutput
97 }
98
99 public static function preview_mapping() {
100 header( 'Content-Type: text/plain; charset=utf-8' );
101 if (
102 ! isset( $_REQUEST['csv_id'] ) ||
103 ! isset( $_REQUEST['page_number'] ) ||
104 ! isset( $_REQUEST['page_length'] ) ||
105 ! isset( $_REQUEST['wpnonce'] )
106 ) {
107 echo 'INV-Wrong arguments';
108 return;
109 }
110
111 $csv_id = sanitize_text_field( wp_unslash( $_REQUEST['csv_id'] ) ); // input var okay.
112
113 // Check if actions is allowed
114 $wp_nonce = isset( $_REQUEST['wpnonce'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['wpnonce'] ) ) : ''; // input var okay.
115 if ( ! wp_verify_nonce( $wp_nonce, "wpda-csv-preview-mapping-{$csv_id}" ) ) {
116 echo 'INV-Not authorized';
117 return;
118 }
119
120 $page_number = sanitize_text_field( wp_unslash( $_REQUEST['page_number'] ) ); // input var okay.
121 $page_length = sanitize_text_field( wp_unslash( $_REQUEST['page_length'] ) ); // input var okay.
122
123 $dbrow = self::query( $csv_id );
124
125 global $wpdb;
126 if ( '' !== $wpdb->last_error ) {
127 echo 'ERR-' . $wpdb->last_error; // phpcs:ignore WordPress.Security.EscapeOutput
128 }
129 if ( 1 === $wpdb->num_rows ) {
130 if ( ! isset( $dbrow[0]->csv_real_file_name ) ) {
131 echo 'ERR-No file';
132 } else {
133 $upload_dir = WPDA::get_plugin_upload_dir();
134 $file_name = $upload_dir . $dbrow[0]->csv_real_file_name;
135
136 @ini_set( 'auto_detect_line_endings', true );
137 if ( false !== ( $fp = fopen( $file_name, 'rb' ) ) ) {
138 $mapping = isset( $dbrow[0]->csv_mapping ) ? json_decode( $dbrow[0]->csv_mapping, true ) : array();
139 $delimiter = isset( $mapping['settings']['delimiter'] ) ? $mapping['settings']['delimiter'] : ',';
140 $has_header_columns = isset( $mapping['settings']['has_header_columns'] ) ? $mapping['settings']['has_header_columns'] : true;
141
142 if ( '\\t' == $delimiter ) {
143 $delimiter = "\t";
144 }
145
146 $start = ( $page_number - 1 ) * $page_length;
147 if ( $start === 0 ) {
148 $end = $page_length;
149 } else {
150 $end = $page_number * $page_length;
151 }
152 $next_page = $page_number + 1;
153 $prev_page = $page_number - 1;
154 if ( $prev_page < 1 ) {
155 $prev_page = 1;
156 }
157
158 echo '<div style="text-align: right; margin-bottom: 10px;">';
159 echo '<a href="javascript:void(0)" class="button" onclick="preview(' . esc_attr( $prev_page ) . ', ' . esc_attr( $page_length ) . ')">&lt;</a>';
160 echo '&nbsp;';
161 echo '<a href="javascript:void(0)" class="button" onclick="preview(' . esc_attr( $next_page ) . ', ' . esc_attr( $page_length ) . ')">&gt;</a>';
162 echo '</div>';
163 echo '<table class="wp-list-table widefat fixed striped rows">';
164
165 $number_of_columns = 1;
166 if ( 'false' !== $has_header_columns ) {
167 echo '<thead>';
168 if ( false !== ( $data = fgetcsv( $fp, 0, $delimiter, '"' ) ) ) {
169 $number_of_columns = count( $data );//phpcs:ignore - 8.1 proof
170 echo '<tr>';
171 for ( $column = 0; $column < count( $data ); $column++ ) {//phpcs:ignore - 8.1 proof
172 echo '<th>' . esc_attr( $data[$column] ) . '</th>';
173 }
174 echo '</tr>';
175 }
176 echo '</thead>';
177 }
178
179 $row = 0;
180 $fnd = false;
181 echo '<tbody>';
182 while ( false !== ( $data = fgetcsv( $fp, 0, $delimiter, '"' ) ) ) {
183 if ( $row >= $start && $row < $end ) {
184 echo '<tr>';
185 for ( $column = 0; $column < count( $data ); $column++ ) {//phpcs:ignore - 8.1 proof
186 echo '<td>' . esc_attr( $data[$column] ) . '</td>';
187 }
188 echo '</tr>';
189 $fnd = true;
190 }
191
192 $row++;
193 }
194 if ( ! $fnd ) {
195 echo '<tr colspan="' . esc_attr( $number_of_columns ) . '"><td>' . __( 'No data found', 'wp-data-access' ) . '</td></tr>';
196 }
197 echo '</tbody>';
198 echo '</table>';
199
200 fclose( $fp );
201 } else {
202 echo 'ERR-File not found';
203 }
204 }
205 } else {
206 echo 'ERR-No data found';
207 }
208 }
209
210 }
211
212 }
213