PluginProbe
Bit Form – Contact Form, Payment Forms, Multi Step Forms, Calculator & Custom Form Builder / V3.3.2
Bit Form – Contact Form, Payment Forms, Multi Step Forms, Calculator & Custom Form Builder vV3.3.2
V3.3.2 3.3.1 V-3.3.0 3.2.2 3.2.1 3.2.0 3.1.4 3.1.3 3.1.2 3.1.1 3.1.0 V3.0.3 V3.0.2 -3.0.1 V_3.0.0 1.1.1 1.1.8 1.2 1.3 1.4 1.4.18 1.5.2 1.9 2.0 2.10.0 All 139 releases
← All changes | includes/Admin/Form/AdminFormHandler.php +10 -3 V-3.3.0 → V3.3.2 View file →
@@ -244,8 +244,9 @@
244 244 // Guard: never persist orphan fields (in fields but in no layout) — they
245 245 // render nothing yet their validation rules block submission. Covers old
246 246 // clients and hand-edited imports (importAForm funnels through here).
247 247 $this->pruneOrphanFields($fields, $nestedLayout, $layout, null, $post);
248 + FormManager::syncCompositeChildNames($fields);
248 249 $form_content = [
249 250 'fields' => $fields,
250 251 'layout' => $layout,
251 252 'nestedLayout' => $nestedLayout,
@@ -588,8 +589,9 @@
588 589 }
589 590
590 591 // Guard: never persist orphan fields (see createNewForm). Fail closed.
591 592 $this->pruneOrphanFields($fields, $nestedLayout, $layout, $formID, $post);
593 + FormManager::syncCompositeChildNames($fields);
592 594
593 595 $form_content = [
594 596 'fields' => $fields,
595 597 'layout' => $layout,
@@ -1163,9 +1165,9 @@
1163 1165 'title' => $emailTemplatevalue->title,
1164 1166 'sub' => $emailTemplatevalue->sub,
1165 1167 'body' => $emailTemplatevalue->body,
1166 1168 'status' => isset($emailTemplatevalue->status) ? (int) $emailTemplatevalue->status : 1,
1167 - 'config' => !empty($emailTemplatevalue->config) ? json_decode($emailTemplatevalue->config) : (object) [],
1169 + 'config' => EmailTemplateHandler::normalizeConfig($emailTemplatevalue->config ?? null),
1168 1170 ];
1169 1171 }
1170 1172 }
1171 1173 // get all pdf template
@@ -1460,9 +1462,9 @@
1460 1462 'title' => $emailTemplatevalue->title,
1461 1463 'sub' => $emailTemplatevalue->sub,
1462 1464 'body' => $emailTemplatevalue->body,
1463 1465 'status' => isset($emailTemplatevalue->status) ? (int) $emailTemplatevalue->status : 1,
1464 - 'config' => !empty($emailTemplatevalue->config) ? json_decode($emailTemplatevalue->config) : (object) [],
1466 + 'config' => EmailTemplateHandler::normalizeConfig($emailTemplatevalue->config ?? null),
1465 1467 ];
1466 1468 }
1467 1469 }
1468 1470 $integrationHandler = new IntegrationHandler($formID);
@@ -2489,10 +2491,15 @@
2489 2491 $layout = $formContent->layout;
2490 2492 foreach ($form_fields as $key => $value) {
2491 2493 // $field_name = preg_replace('/[\`\~\!\@\#\$\'\.\s\?\+\-\*\&\|\/\\!]/', '_', $value->lbl);
2492 2494 if (isset($entries[$key])) {
2493 - $form_fields->{$key}->val = $entries[$key];
2495 + $isPassword = isset($value->typ) && 'password' === $value->typ;
2496 + // Never hand a stored password back to the browser; blank keeps it on update.
2497 + $form_fields->{$key}->val = $isPassword ? '' : $entries[$key];
2494 2498 $form_fields->{$key}->name = $key;
2499 + if ($isPassword && '' !== (string) $entries[$key] && isset($value->valid) && is_object($value->valid)) {
2500 + $form_fields->{$key}->valid->req = false;
2501 + }
2495 2502 }
2496 2503 }
2497 2504 $workFlowRunHelper = new WorkFlow($formID);
2498 2505 $workFlowreturnedOnLoad = $workFlowRunHelper->executeOnLoad(