PluginProbe
WP Data Access – App Builder for Tables, Forms, Charts, Maps & Dashboards / 5.5.84
WP Data Access – App Builder for Tables, Forms, Charts, Maps & Dashboards v5.5.84
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 / Simple_Form / WPDA_Simple_Form_Item_Autocomplete.php

WPDA_Simple_Form_Item_Autocomplete.php in WP Data Access – App Builder for Tables, Forms, Charts, Maps & Dashboards 5.5.84, at WPDataAccess/Simple_Form/WPDA_Simple_Form_Item_Autocomplete.php

167 lines 6.6 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\Simple_Form
7 */
8
9 namespace WPDataAccess\Simple_Form {
10
11 use WPDataAccess\Utilities\WPDA_Autocomplete;
12
13 /**
14 * Class WPDA_Simple_Form_Item_Autocomplete
15 *
16 * Adds autocomplete support to input field
17 *
18 * @author Peter Schulz
19 * @since 4.1.3
20 */
21 class WPDA_Simple_Form_Item_Autocomplete extends WPDA_Simple_Form_Item {
22
23 const AUTOCOMPLETE_NONCE_ACTION = 'WPDA-AUTO-COMPLETE-';
24
25 protected $autocomplete_def = null;
26 protected $tableform_settings = null;
27 private $lookup_column_name = '';
28
29
30 protected function show_item() {
31 $this->set_item_class( 'wpda_autocomplete_key' );
32
33 parent::show_item();
34
35 if ( null === $this->autocomplete_def ) {
36 wp_die( '<span style="font-weight: bold">' . esc_attr__( 'ERROR: Invalid autocomplete lookup usage', 'wp-data-access' ) . '</span>' );
37 }
38
39 $lookup_value = '';
40 foreach ( $this->tableform_settings as $tableform_setting ) {
41 if ( $tableform_setting->column_name === $this->autocomplete_def->source_column_name[0] ) {
42 $this->lookup_column_name = $tableform_setting->lookup;
43 }
44 }
45
46 if ( null !== $this->item_value && '' !== $this->item_value ) {
47 // Get lookup value
48 $schema_name = $this->autocomplete_def->target_schema_name;
49 $table_name = $this->autocomplete_def->target_table_name;
50 $column_name = $this->autocomplete_def->target_column_name[0];
51 $lookup_column_value = $this->item_value;
52
53 if ( '' === $this->lookup_column_name ) {
54 wp_die( '<span style="font-weight: bold">' . esc_attr__( 'ERROR: Invalid autocomplete lookup usage', 'wp-data-access' ) . '</span>' );
55 }
56
57 $wpda_autocomplete = new WPDA_Autocomplete();
58 $lookup_value = $wpda_autocomplete->autocomplete_lookup(
59 $schema_name,
60 $table_name,
61 $column_name,
62 $this->lookup_column_name,
63 $lookup_column_value
64 );
65
66 if ( false === $lookup_value ) {
67 echo '<div>Lookup value not found!</div>';
68 }
69 }
70
71 $placeholder = esc_attr__( 'Start typing', 'wp-data-access' ) . ' ' . esc_attr( strtolower( $this->get_item_label() ) ) . '...';
72 $item_name = esc_attr( $this->get_item_name() );
73 echo "<input type='text' id='wpda_autocomplete_{$item_name}' class='wpda_autocomplete' placeholder='{$placeholder}' value='{$lookup_value}'/>"; // phpcs:ignore WordPress.Security.EscapeOutput
74
75 $this->add_js();
76 }
77
78 protected function add_js() {
79 ?>
80 <script type="text/javascript">
81 jQuery(function() {
82 let wpda_path = '<?php echo esc_url( admin_url( 'admin-ajax.php' ) ); ?>';
83 let item_name = '<?php echo esc_attr( $this->get_item_name() ); ?>';
84
85 let autocomplete_def = '<?php echo json_encode( $this->autocomplete_def ); ?>';
86 let tableform_settings = '<?php echo json_encode( $this->tableform_settings ); ?>';
87
88 let autocomplete_def_json = jQuery.parseJSON(autocomplete_def);
89 let tableform_settings_json = jQuery.parseJSON(tableform_settings);
90
91 jQuery('#wpda_autocomplete_' + item_name).autocomplete({
92 autoFocus: true,
93 source: function (name, response) {
94 jQuery.ajax({
95 method: 'POST',
96 url: wpda_path + '?action=wpda_autocomplete',
97 data: {
98 wpda_wpnonce: '<?php
99 echo esc_attr(
100 wp_create_nonce(
101 self::AUTOCOMPLETE_NONCE_ACTION .
102 $this->autocomplete_def->target_schema_name . '-' .
103 $this->autocomplete_def->target_table_name . '-' .
104 $this->autocomplete_def->target_column_name[0] . '-' .
105 $this->autocomplete_def->source_column_name[0] . '-' .
106 $this->lookup_column_name
107 )
108 );
109 ?>',
110 wpda_source_column_value: jQuery('#wpda_autocomplete_' + item_name).val(),
111 wpda_source_column_name: autocomplete_def_json.source_column_name[0],
112 wpda_target_schema_name: autocomplete_def_json.target_schema_name,
113 wpda_target_table_name: autocomplete_def_json.target_table_name,
114 wpda_target_column_name: autocomplete_def_json.target_column_name[0],
115 wpda_lookup_label_column: "<?php echo esc_attr( $this->lookup_column_name ); ?>"
116 }
117 }).done(
118 function (msg) {
119 if (msg.status === "error") {
120 alert(msg.message);
121 } else {
122 response(msg.rows);
123 }
124 }
125 ).error(
126 function (msg) {
127 alert('ERROR: Autocomplete service call return an invalid response');
128 }
129 );
130 },
131 select: function(e,ui) {
132 jQuery('#' + item_name).val(ui.item.lookup);
133 },
134 change: function(event){
135 if (jQuery('#wpda_autocomplete_' + item_name).val()=='') {
136 jQuery('#' + item_name).val('');
137 }
138 },
139 classes: {
140 "ui-autocomplete": "wpda-autocomplete",
141 }
142 });
143 });
144 </script>
145 <style type="text/css">
146 ul.wpda-autocomplete.ui-widget-content {
147 background: white;
148 color: inherit;
149 }
150 ul.wpda-autocomplete li.ui-menu-item .ui-menu-item-wrapper.ui-state-active {
151 background: #efefef;
152 color: unset;
153 border: none;
154 }
155 </style>
156 <?php
157 }
158
159 public function set_autocomplete( $autocomplete_def, $tableform_settings ) {
160 $this->autocomplete_def = $autocomplete_def;
161 $this->tableform_settings = $tableform_settings;
162 }
163
164 }
165
166 }
167