PluginProbe
JetFormBuilder — Dynamic Blocks Form Builder / 3.6.6
JetFormBuilder — Dynamic Blocks Form Builder v3.6.6
3.6.6.1 3.6.6 3.6.5.4 3.6.5.3 3.6.5.2 3.6.5.1 3.6.5 3.6.4.2 3.6.4.1 3.6.4 3.6.3.1 3.6.3 3.6.2.2 3.6.2.1 3.6.2 3.6.1.1 3.6.1 3.6.0.1 trunk 1.0.0 1.0.1 1.0.2 1.0.3 1.1.0 1.1.1 All 134 releases
← All changes | modules/multi-gateway/module.php +69 -12 3.6.2.2 → 3.6.6 View file →
@@ -132,21 +132,60 @@
132 132 * @param Form_Handler $handler
133 133 */
134 134 public function set_gateway_from_submitted_multi_gateway( Form_Handler $handler ) {
135 135
136 - $selected = jet_fb_context()->get_request( 'multi_gateway' );
136 + $handler_form_id = (int) $handler->get_form_id();
137 + $selected = $this->get_allowed_gateway_for_submission(
138 + jet_fb_context()->get_request( 'multi_gateway' ),
139 + $handler_form_id
140 + );
137 141
142 + // ADDED: normalize to parent for meta read (_jf_gateways stored on parent form post)
143 + $real_form_id = $this->get_real_form_id( $handler_form_id );
144 +
145 + $gateways_module = \JFB_Modules\Gateways\Module::instance();
146 +
147 + $gateways = $gateways_module->get_form_gateways_by_id( $real_form_id );
148 + $is_manual = 'manual' === ( $gateways['mode'] ?? 'single' );
149 +
150 + if ( '' === $selected && ! $is_manual ) {
151 + return;
152 + }
153 +
154 + $gateways['gateway'] = $selected ?: 'none';
155 +
156 + // IMPORTANT: set module form_id to handler form id (revision),
157 + // so Default_With_Gateway_Executor won't overwrite our runtime selection.
158 + $gateways_module->set_form_id( $handler_form_id );
159 + $gateways_module->save_gateways_form_data( $gateways );
160 + }
161 +
162 + public function get_allowed_gateway_for_submission( $selected, int $form_id ): string {
138 163 if ( ! is_string( $selected ) || '' === $selected ) {
139 - return;
164 + return '';
140 165 }
141 166
142 167 $selected = sanitize_key( $selected );
143 168
144 - $handler_form_id = (int) $handler->get_form_id();
169 + if ( '' === $selected ) {
170 + return '';
171 + }
145 172
146 - // ADDED: normalize to parent for meta read (_jf_gateways stored on parent form post)
147 - $real_form_id = $handler_form_id;
173 + $real_form_id = $this->get_real_form_id( $form_id );
174 + $gateways = \JFB_Modules\Gateways\Module::instance()->get_form_gateways_by_id( $real_form_id );
148 175
176 + if ( ! is_array( $gateways ) ) {
177 + return '';
178 + }
179 +
180 + $allowed = $this->get_allowed_gateways_for_frontend( $gateways );
181 +
182 + return in_array( $selected, $allowed, true ) ? $selected : '';
183 + }
184 +
185 + private function get_real_form_id( int $form_id ): int {
186 + $real_form_id = $form_id;
187 +
149 188 $parent = wp_is_post_revision( $real_form_id );
150 189 if ( $parent ) {
151 190 $real_form_id = (int) $parent;
152 191 }
@@ -160,16 +199,34 @@
160 199 if ( $parent ) {
161 200 $real_form_id = (int) $parent;
162 201 }
163 202
164 - $gateways_module = \JFB_Modules\Gateways\Module::instance();
203 + return $real_form_id;
204 + }
165 205
166 - $gateways = $gateways_module->get_form_gateways_by_id( $real_form_id );
206 + private function get_allowed_gateways_for_frontend( array $gateways ): array {
207 + $mode = $gateways['mode'] ?? 'single';
208 + $allowed = array();
167 209
168 - $gateways['gateway'] = $selected;
210 + if ( 'manual' === $mode ) {
211 + foreach ( $gateways as $key => $value ) {
212 + if ( ! is_string( $key ) || in_array( $key, array( 'mode', 'gateway' ), true ) ) {
213 + continue;
214 + }
169 215
170 - // IMPORTANT: set module form_id to handler form id (revision),
171 - // so Default_With_Gateway_Executor won't overwrite our runtime selection.
172 - $gateways_module->set_form_id( $handler_form_id );
173 - $gateways_module->save_gateways_form_data( $gateways );
216 + if ( is_array( $value ) && ! empty( $value['show_on_front'] ) ) {
217 + $allowed[] = sanitize_key( $key );
218 + }
219 + }
220 +
221 + return array_filter( $allowed );
222 + }
223 +
224 + $gateway = $gateways['gateway'] ?? 'none';
225 +
226 + if ( is_string( $gateway ) && '' !== $gateway && 'none' !== $gateway ) {
227 + $allowed[] = sanitize_key( $gateway );
228 + }
229 +
230 + return array_filter( $allowed );
174 231 }
175 232 }