PluginProbe
WP Data Access – App Builder for Tables, Forms, Charts, Maps & Dashboards / 5.5.82
WP Data Access – App Builder for Tables, Forms, Charts, Maps & Dashboards v5.5.82
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 / WPDataProjects / Parent_Child / WPDP_Child_Form.php

WPDP_Child_Form.php in WP Data Access – App Builder for Tables, Forms, Charts, Maps & Dashboards 5.5.82, at WPDataProjects/Parent_Child/WPDP_Child_Form.php

227 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 /**
4 * Suppress "error - 0 - No summary was found for this file" on phpdoc generation
5 *
6 * @package WPDataProjects\Parent_Child
7 */
8
9 namespace WPDataProjects\Parent_Child {
10
11 use WPDataAccess\Connection\WPDADB;
12 use WPDataProjects\Simple_Form\WPDP_Simple_Form;
13 use WPDataAccess\Utilities\WPDA_Message_Box;
14
15 /**
16 * Class WPDP_Child_Form extends WPDP_Simple_Form
17 *
18 * @see WPDP_Simple_Form
19 *
20 * @author Peter Schulz
21 * @since 2.0.0
22 */
23 class WPDP_Child_Form extends WPDP_Simple_Form {
24
25 /**
26 * Possible values: edit and view
27 *
28 * @var string
29 */
30 protected $mode;
31
32 /**
33 * Saved initially requested action
34 *
35 * Action is changed during processing
36 *
37 * @var string
38 */
39 protected $initial_action;
40
41 /**
42 * Parent key values
43 *
44 * @var array
45 */
46 protected $parent;
47
48 /**
49 * Child relationships (for actual parent)
50 *
51 * @var array
52 */
53 protected $child;
54
55 /**
56 * WPDP_Child_Form constructor
57 *
58 * @param $schema_name
59 * @param $table_name
60 * @param $wpda_list_columns
61 * @param array $args
62 */
63 public function __construct( $schema_name, $table_name, $wpda_list_columns, $args = array() ) {
64 if ( isset( $args['mode'] ) ) {
65 $this->mode = $args['mode'];
66 } else {
67 wp_die( esc_attr__( 'ERROR: Wrong arguments [missing mode]', 'wp-data-access' ) );
68 }
69
70 if ( isset( $args['parent'] ) ) {
71 $this->parent = $args['parent'];
72 } else {
73 wp_die( esc_attr__( 'ERROR: Wrong arguments [missing parent]', 'wp-data-access' ) );
74 }
75
76 if ( isset( $args['child'] ) ) {
77 $this->child = $args['child'];
78 } else {
79 wp_die( esc_attr__( 'ERROR: Wrong arguments [missing child]', 'wp-data-access' ) );
80 }
81
82 $this->page_number_item_name = 'child_page_number';
83
84 parent::__construct( $schema_name, $table_name, $wpda_list_columns, $args );
85
86 $this->initial_action = $this->action;
87 }
88
89 /**
90 * Overwrite method to add parent argument to get back to parent child relationship
91 */
92 protected function add_parent_args() {
93 foreach ( $this->parent['parent_key'] as $parent_key ) {
94 ?>
95 <input type='hidden'
96 name='WPDA_PARENT_KEY*<?php echo( esc_attr( $parent_key ) ); ?>'
97 value='<?php echo( esc_attr( $this->parent['parent_key_value'][ $parent_key ] ) ); ?>'
98 />
99 <?php
100 }
101 $child_tab = $this->get_child_tab();
102 ?>
103 <input type='hidden' name='mode' value='<?php echo esc_attr( $this->mode ); ?>'>
104 <input type='hidden' name='child_request' value='TRUE'/>
105 <input type='hidden' name='child_tab' value='<?php echo esc_attr( $child_tab ); ?>'/>
106 <?php
107 }
108
109 /**
110 * Get actual child tab
111 *
112 * @return string
113 */
114 protected function get_child_tab() {
115 if ( isset( $_REQUEST['child_tab'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- already verified
116 return sanitize_text_field( wp_unslash( $_REQUEST['child_tab'] ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- already verified
117 } else {
118 return '';
119 }
120 }
121
122 /**
123 * Overwrites method add_parent_args_to_back_button to add parent arguments
124 *
125 * @return string|void
126 */
127 protected function add_parent_args_to_back_button() {
128 $child_tab = $this->get_child_tab();
129 $args = "&action=list&mode={$this->mode}&child_request=TRUE&child_tab=$child_tab";
130 foreach ( $this->parent['parent_key'] as $parent_key ) {
131 $args .= '&' . esc_attr( $parent_key ) . '=' . esc_attr( $this->parent['parent_key_value'][ $parent_key ] );
132 }
133
134 return $args;
135 }
136
137 /**
138 * Overwrites method prepare_row to prepare child insert
139 */
140 protected function prepare_row() {
141 parent::prepare_row();
142
143 if ( 'new' === $this->initial_action && 'edit' === $this->action && 'save' === $this->action2 ) {
144 if ( isset( $this->child['relation_nm'] ) ) {
145 // Create relationship (n:m).
146 // Prepare values.
147 if ( - 1 !== $this->auto_increment_value ) {
148 $child_columns = array(
149 $this->child['relation_nm']['child_table_select'][0] =>
150 $this->auto_increment_value,
151 $this->child['relation_nm']['child_table_where'][0] =>
152 $this->parent['parent_key_value'][ $this->parent['parent_key'][0] ],
153 );
154 } else {
155 $index = 0;
156 foreach ( $this->child['relation_nm']['parent_key'] as $parent_key ) {
157 $child_columns[ $this->child['relation_nm']['child_table_select'][ $index ] ] =
158 $this->form_items_new_values[ $this->child['relation_nm']['parent_key'][ $parent_key ] ];
159 $child_columns[ $this->child['relation_nm']['child_table_where'][ $index ] ] =
160 $this->parent['parent_key_value'][ $this->parent['parent_key'][ $index ] ];
161 $index ++;
162 }
163 }
164
165 // Perform insert.
166 $wpdadb = WPDADB::get_db_connection( $this->schema_name );
167 if ( null === $wpdadb ) {
168 /* translators: %s = database name */
169 wp_die( sprintf( esc_attr__( 'ERROR - Remote database %s not available', 'wp-data-access' ), esc_attr( $this->schema_name ) ) );
170 }
171 $result = $wpdadb->insert( $this->child['relation_nm']['child_table'], $child_columns );
172
173 // Error handling.
174 if ( false === $result ) {
175 $this->relationship_insert_failed();
176 } elseif ( 1 !== $result ) {
177 $this->relationship_insert_failed();
178 }
179 }
180 }
181 }
182
183 /**
184 * Message shown on insert error
185 */
186 protected function relationship_insert_failed() {
187 $msg = new WPDA_Message_Box(
188 array(
189 'message_text' => __( 'Error create relationship (insert failed)', 'wp-data-access' ),
190 'message_type' => 'error',
191 'message_is_dismissible' => false,
192 )
193 );
194 $msg->box();
195 }
196
197 /**
198 * Overwrites method prepare_items to add parent key values
199 *
200 * @param bool $set_back_form_values
201 */
202 protected function prepare_items( $set_back_form_values = false ) {
203 parent::prepare_items( $set_back_form_values );
204
205 if ( isset( $this->child['relation_1n'] ) ) {
206 foreach ( $this->child['relation_1n']['child_key'] as $child_key ) {
207 $child_index = $this->get_item_index( $child_key );
208 $child_item = $this->form_items[ $child_index ];
209 if ( $child_item->get_item_name() === $child_key ) {
210 foreach ( $this->child['relation_1n']['parent_key'] as $parent_key ) {
211 foreach ( $this->parent['parent_key'] as $pkey ) {
212 if ( $parent_key === $pkey ) {
213 $child_item->set_item_default_value( $this->parent['parent_key_value'][ $parent_key ] );
214 $child_item->set_hide_item( true );
215 $child_item->set_foreign_key_column( true );
216 }
217 }
218 }
219 }
220 }
221 }
222 }
223
224 }
225
226 }
227