PluginProbe
WP Data Access – App Builder for Tables, Forms, Charts, Maps & Dashboards / 5.5.81
WP Data Access – App Builder for Tables, Forms, Charts, Maps & Dashboards v5.5.81
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 / Utilities / WPDA_Autocomplete.php

WPDA_Autocomplete.php in WP Data Access – App Builder for Tables, Forms, Charts, Maps & Dashboards 5.5.81, at WPDataAccess/Utilities/WPDA_Autocomplete.php

150 lines 4.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * Suppress "error - 0 - No summary was found for this file" on phpdoc generation
5 *
6 * @package WPDataAccess\Utilities
7 */
8
9 namespace WPDataAccess\Utilities {
10
11 use WPDataAccess\Connection\WPDADB;
12 use WPDataAccess\Simple_Form\WPDA_Simple_Form_Item_Autocomplete;
13 use WPDataAccess\WPDA;
14
15 class WPDA_Autocomplete {
16
17 public function autocomplete() {
18 $status = 'ok';
19 $message = '';
20 $rows = array();
21
22 if (
23 ! isset(
24 $_POST['wpda_wpnonce'],
25 $_POST['wpda_source_column_value'],
26 $_POST['wpda_source_column_name'],
27 $_POST['wpda_target_schema_name'],
28 $_POST['wpda_target_table_name'],
29 $_POST['wpda_target_column_name'],
30 $_POST['wpda_lookup_label_column']
31 )
32 ) {
33 $status = 'error';
34 $message = __( 'Wrong arguments', 'wp-data-access' );
35 } else {
36 $wpda_wpnonce = sanitize_text_field( wp_unslash( $_POST['wpda_wpnonce'] ) ); // input var okay.
37 $wpda_source_column_value = sanitize_text_field( wp_unslash( $_POST['wpda_source_column_value'] ) ); // input var okay.
38 $wpda_source_column_name = sanitize_text_field( wp_unslash( $_POST['wpda_source_column_name'] ) ); // input var okay.
39 $wpda_target_schema_name = sanitize_text_field( wp_unslash( $_POST['wpda_target_schema_name'] ) ); // input var okay.
40 $wpda_target_table_name = sanitize_text_field( wp_unslash( $_POST['wpda_target_table_name'] ) ); // input var okay.
41 $wpda_target_column_name = sanitize_text_field( wp_unslash( $_POST['wpda_target_column_name'] ) ); // input var okay.
42 $wpda_lookup_label_column = sanitize_text_field( wp_unslash( $_POST['wpda_lookup_label_column'] ) ); // input var okay.
43
44 if (
45 ! wp_verify_nonce(
46 $wpda_wpnonce,
47 WPDA_Simple_Form_Item_Autocomplete::AUTOCOMPLETE_NONCE_ACTION .
48 $wpda_target_schema_name . '-' .
49 $wpda_target_table_name . '-' .
50 $wpda_target_column_name . '-' .
51 $wpda_source_column_name . '-' .
52 $wpda_lookup_label_column
53 )
54 ) {
55 $status = 'error';
56 $message = __( 'Not authorized', 'wp-data-access' );
57 } else {
58 $rows = $this->autocomplete_query(
59 $wpda_target_schema_name,
60 $wpda_target_table_name,
61 $wpda_target_column_name,
62 $wpda_lookup_label_column,
63 $wpda_source_column_value
64 );
65 }
66 }
67
68 $response = array(
69 'status' => $status,
70 'message' => $message,
71 'rows' => $rows,
72 );
73
74 WPDA::sent_header( 'application/json' );
75
76 echo json_encode( $response, JSON_NUMERIC_CHECK );
77
78 die();
79 }
80
81 public function autocomplete_query(
82 $wpda_target_schema_name,
83 $wpda_target_table_name,
84 $wpda_target_column_name,
85 $wpda_lookup_label_column,
86 $wpda_source_column_value
87 ) {
88 $wpdadb = WPDADB::get_db_connection( $wpda_target_schema_name );
89 if ( null === $wpdadb ) {
90 return array();
91 }
92
93 $query = '
94 select `' . str_replace( '`', '', (string) $wpda_lookup_label_column ) . '` as value,
95 `' . str_replace( '`', '', (string) $wpda_lookup_label_column ) . '` as label,
96 `' . str_replace( '`', '', (string) $wpda_target_column_name ) . '` as lookup
97 from `' . str_replace( '`', '', (string) $wpda_target_table_name ) . '`
98 where `' . str_replace( '`', '', (string) $wpda_lookup_label_column ) . '` like %s
99 ';
100
101 return $wpdadb->get_results(
102 $wpdadb->prepare(
103 $query,
104 "$wpda_source_column_value%"
105 ),
106 'ARRAY_A'
107 );
108 }
109
110 public function autocomplete_anonymous() {
111 $this->autocomplete();
112 }
113
114 public function autocomplete_lookup(
115 $schema_name,
116 $table_name,
117 $column_name,
118 $lookup_column_name,
119 $lookup_column_value
120 ) {
121 $wpdadb = WPDADB::get_db_connection( $schema_name );
122 if ( null === $wpdadb ) {
123 return false;
124 }
125
126 $query = '
127 select `' . str_replace( '`', '', (string) $lookup_column_name ) . '` as lookup
128 from `' . str_replace( '`', '', (string) $table_name ) . '`
129 where `' . str_replace( '`', '', (string) $column_name ) . '` = %s
130 ';
131
132 $rows = $wpdadb->get_results(
133 $wpdadb->prepare(
134 $query,
135 $lookup_column_value
136 ),
137 'ARRAY_A'
138 );
139
140 if ( 1 === $wpdadb->num_rows ) {
141 return $rows[0]['lookup'];
142 } else {
143 return false;
144 }
145 }
146
147 }
148
149 }
150