From edb15d423b5ae141f29b8282057c857afd6b43cd Mon Sep 17 00:00:00 2001 From: "vivi-the-going-merry[bot]" <308115520+vivi-the-going-merry[bot]@users.noreply.github.com> Date: Thu, 22 Oct 2026 19:11:05 -0600 Subject: [PATCH 1/6] Add failing test: setup_new_vars keeps posted Entry Key (formidable-pro#6891) --- .../phpunit/entries/test_FrmEntriesHelper.php | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/tests/phpunit/entries/test_FrmEntriesHelper.php b/tests/phpunit/entries/test_FrmEntriesHelper.php index aa7f6e9cbb..a4d8027052 100644 --- a/tests/phpunit/entries/test_FrmEntriesHelper.php +++ b/tests/phpunit/entries/test_FrmEntriesHelper.php @@ -22,4 +22,31 @@ public function test_display_value() { $this->assertIsString( $display_value ); $this->assertSame( 'Option 1, Option 2', $display_value ); } + + /** + * The Entry Key typed on one page of a multi-page form must survive to the next page. + */ + public function test_setup_new_vars_keeps_posted_item_key() { + $form_id = $this->factory->form->create(); + $this->factory->field->create( + array( + 'form_id' => $form_id, + 'type' => 'text', + ) + ); + $fields = FrmField::get_all_for_form( $form_id ); + + $_POST['item_key'] = 'My Typed Key'; + + $values = FrmEntriesHelper::setup_new_vars( $fields ); + $this->assertSame( 'my-typed-key', $values['item_key'] ); + + $values = FrmEntriesHelper::setup_new_vars( $fields, '', true ); + $this->assertSame( '', $values['item_key'], 'A reset form must not carry the posted key.' ); + + unset( $_POST['item_key'] ); + + $values = FrmEntriesHelper::setup_new_vars( $fields ); + $this->assertSame( '', $values['item_key'] ); + } } From 0767dcf1f172339b584bde45a1dc05442580129f Mon Sep 17 00:00:00 2001 From: "vivi-the-going-merry[bot]" <308115520+vivi-the-going-merry[bot]@users.noreply.github.com> Date: Thu, 22 Oct 2026 19:15:36 -0600 Subject: [PATCH 2/6] Keep the posted Entry Key when showing the next page of a new entry Co-Authored-By: Claude Sonnet 5.5 --- classes/helpers/FrmEntriesHelper.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/classes/helpers/FrmEntriesHelper.php b/classes/helpers/FrmEntriesHelper.php index 4e05cb03af..80b1e3078a 100644 --- a/classes/helpers/FrmEntriesHelper.php +++ b/classes/helpers/FrmEntriesHelper.php @@ -42,7 +42,7 @@ public static function setup_new_vars( $fields, $form = '', $reset = false, $arg $values = array( 'name' => '', 'description' => '', - 'item_key' => '', + 'item_key' => $reset ? '' : FrmAppHelper::get_post_param( 'item_key', '', 'sanitize_title' ), ); $values['fields'] = array(); From 066b2d2b1859501f9ea9212239f951fac49be9f6 Mon Sep 17 00:00:00 2001 From: "vivi-the-going-merry[bot]" <308115520+vivi-the-going-merry[bot]@users.noreply.github.com> Date: Thu, 22 Oct 2026 19:20:33 -0600 Subject: [PATCH 3/6] Group consecutive assignments in test for PHPCS Co-Authored-By: Claude Sonnet 5.5 --- tests/phpunit/entries/test_FrmEntriesHelper.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/phpunit/entries/test_FrmEntriesHelper.php b/tests/phpunit/entries/test_FrmEntriesHelper.php index a4d8027052..54ad8dc939 100644 --- a/tests/phpunit/entries/test_FrmEntriesHelper.php +++ b/tests/phpunit/entries/test_FrmEntriesHelper.php @@ -37,8 +37,7 @@ public function test_setup_new_vars_keeps_posted_item_key() { $fields = FrmField::get_all_for_form( $form_id ); $_POST['item_key'] = 'My Typed Key'; - - $values = FrmEntriesHelper::setup_new_vars( $fields ); + $values = FrmEntriesHelper::setup_new_vars( $fields ); $this->assertSame( 'my-typed-key', $values['item_key'] ); $values = FrmEntriesHelper::setup_new_vars( $fields, '', true ); From a4c0eada3203a6a773e8302569df8ec269882bf0 Mon Sep 17 00:00:00 2001 From: "vivi-the-going-merry[bot]" <308115520+vivi-the-going-merry[bot]@users.noreply.github.com> Date: Thu, 22 Oct 2026 19:25:21 -0600 Subject: [PATCH 4/6] Align test assignments for PHPCS Co-Authored-By: Claude Sonnet 5.5 --- tests/phpunit/entries/test_FrmEntriesHelper.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/phpunit/entries/test_FrmEntriesHelper.php b/tests/phpunit/entries/test_FrmEntriesHelper.php index 54ad8dc939..b1cb76f39e 100644 --- a/tests/phpunit/entries/test_FrmEntriesHelper.php +++ b/tests/phpunit/entries/test_FrmEntriesHelper.php @@ -34,8 +34,7 @@ public function test_setup_new_vars_keeps_posted_item_key() { 'type' => 'text', ) ); - $fields = FrmField::get_all_for_form( $form_id ); - + $fields = FrmField::get_all_for_form( $form_id ); $_POST['item_key'] = 'My Typed Key'; $values = FrmEntriesHelper::setup_new_vars( $fields ); $this->assertSame( 'my-typed-key', $values['item_key'] ); From 609ba61a1306b00ea49cda61c2ae4c01a9178ea4 Mon Sep 17 00:00:00 2001 From: "vivi-the-going-merry[bot]" <308115520+vivi-the-going-merry[bot]@users.noreply.github.com> Date: Thu, 22 Oct 2026 22:11:20 -0600 Subject: [PATCH 5/6] Keep a posted array Entry Key out of the view; clean up $_POST in tearDown Co-Authored-By: Claude Sonnet 5.5 --- classes/helpers/FrmEntriesHelper.php | 5 +++-- tests/phpunit/entries/test_FrmEntriesHelper.php | 9 +++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/classes/helpers/FrmEntriesHelper.php b/classes/helpers/FrmEntriesHelper.php index 80b1e3078a..5a6d5d76ce 100644 --- a/classes/helpers/FrmEntriesHelper.php +++ b/classes/helpers/FrmEntriesHelper.php @@ -39,10 +39,11 @@ class FrmEntriesHelper { public static function setup_new_vars( $fields, $form = '', $reset = false, $args = array() ) { remove_action( 'media_buttons', 'FrmFormsController::insert_form_button' ); - $values = array( + $posted_key = FrmAppHelper::get_post_param( 'item_key', '', 'sanitize_title' ); + $values = array( 'name' => '', 'description' => '', - 'item_key' => $reset ? '' : FrmAppHelper::get_post_param( 'item_key', '', 'sanitize_title' ), + 'item_key' => ( ! $reset && is_string( $posted_key ) ) ? $posted_key : '', ); $values['fields'] = array(); diff --git a/tests/phpunit/entries/test_FrmEntriesHelper.php b/tests/phpunit/entries/test_FrmEntriesHelper.php index b1cb76f39e..c728fc4719 100644 --- a/tests/phpunit/entries/test_FrmEntriesHelper.php +++ b/tests/phpunit/entries/test_FrmEntriesHelper.php @@ -9,6 +9,11 @@ #[\PHPUnit\Framework\Attributes\CoversClass( FrmEntriesHelper::class )] class test_FrmEntriesHelper extends FrmUnitTest { + public function tearDown(): void { + unset( $_POST['item_key'] ); + parent::tearDown(); + } + public function test_display_value() { $value = serialize( array( 'Option 1', 'Option 2' ) ); $field = $this->factory->field->create_and_get( @@ -42,6 +47,10 @@ public function test_setup_new_vars_keeps_posted_item_key() { $values = FrmEntriesHelper::setup_new_vars( $fields, '', true ); $this->assertSame( '', $values['item_key'], 'A reset form must not carry the posted key.' ); + $_POST['item_key'] = array( 'x' ); + $values = FrmEntriesHelper::setup_new_vars( $fields ); + $this->assertSame( '', $values['item_key'], 'An array posted as the key must not reach the view.' ); + unset( $_POST['item_key'] ); $values = FrmEntriesHelper::setup_new_vars( $fields ); From 067ac4c06dba6c69f871751697cdc9fe498ed333 Mon Sep 17 00:00:00 2001 From: "vivi-the-going-merry[bot]" <308115520+vivi-the-going-merry[bot]@users.noreply.github.com> Date: Thu, 22 Oct 2026 22:15:56 -0600 Subject: [PATCH 6/6] Drop redundant parentheses and keep FrmEntriesHelper under the file length limit Co-Authored-By: Claude Sonnet 5.5 --- classes/helpers/FrmEntriesHelper.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/classes/helpers/FrmEntriesHelper.php b/classes/helpers/FrmEntriesHelper.php index 5a6d5d76ce..34abcb0930 100644 --- a/classes/helpers/FrmEntriesHelper.php +++ b/classes/helpers/FrmEntriesHelper.php @@ -43,11 +43,10 @@ public static function setup_new_vars( $fields, $form = '', $reset = false, $arg $values = array( 'name' => '', 'description' => '', - 'item_key' => ( ! $reset && is_string( $posted_key ) ) ? $posted_key : '', + 'item_key' => ! $reset && is_string( $posted_key ) ? $posted_key : '', + 'fields' => array(), ); - $values['fields'] = array(); - if ( ! $fields ) { return apply_filters( 'frm_setup_new_entry', $values ); }