diff --git a/classes/helpers/FrmEntriesHelper.php b/classes/helpers/FrmEntriesHelper.php index 4e05cb03af..34abcb0930 100644 --- a/classes/helpers/FrmEntriesHelper.php +++ b/classes/helpers/FrmEntriesHelper.php @@ -39,14 +39,14 @@ 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' => '', + 'item_key' => ! $reset && is_string( $posted_key ) ? $posted_key : '', + 'fields' => array(), ); - $values['fields'] = array(); - if ( ! $fields ) { return apply_filters( 'frm_setup_new_entry', $values ); } diff --git a/tests/phpunit/entries/test_FrmEntriesHelper.php b/tests/phpunit/entries/test_FrmEntriesHelper.php index aa7f6e9cbb..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( @@ -22,4 +27,33 @@ 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.' ); + + $_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 ); + $this->assertSame( '', $values['item_key'] ); + } }