From fed25ad45ba81d06bc763e8f7a18525cafb404dc Mon Sep 17 00:00:00 2001 From: Will Rossiter Date: Mon, 21 Mar 2011 09:14:45 +1300 Subject: [PATCH] BUGFIX: added exists() check on getFormFields (via Bruce Walter) to prevent fieldless forms. BUGFIX: if built form is empty still strip the $UserDefinedForm token out of the content. --- code/UserDefinedForm.php | 12 ++++++++---- tests/UserDefinedFormControllerTest.php | 10 ++++++++-- tests/UserDefinedFormTest.yml | 3 ++- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/code/UserDefinedForm.php b/code/UserDefinedForm.php index bf1bab0..b051e08 100755 --- a/code/UserDefinedForm.php +++ b/code/UserDefinedForm.php @@ -324,10 +324,14 @@ class UserDefinedForm_Controller extends Page_Controller { * @return Array */ public function index() { - if($this->Content && $form = $this->Form()) { - $hasLocation = stristr($this->Content, '$UserDefinedForm'); + if($content = $this->Content) { + $hasLocation = stristr($content, '$UserDefinedForm'); + if($hasLocation) { - $content = str_ireplace('$UserDefinedForm', $form->forTemplate(), $this->Content); + $replace = ($form = $this->Form()) ? $form->forTemplate() : ""; + + $content = str_ireplace('$UserDefinedForm', $replace, $content); + return array( 'Content' => DBField::create('HTMLText', $content), 'Form' => "" @@ -349,7 +353,7 @@ class UserDefinedForm_Controller extends Page_Controller { */ function Form() { $fields = $this->getFormFields(); - if(!$fields) return false; + if(!$fields || !$fields->exists()) return false; $actions = $this->getFormActions(); diff --git a/tests/UserDefinedFormControllerTest.php b/tests/UserDefinedFormControllerTest.php index 8233697..1d1309f 100644 --- a/tests/UserDefinedFormControllerTest.php +++ b/tests/UserDefinedFormControllerTest.php @@ -110,10 +110,15 @@ class UserDefinedFormControllerTest extends FunctionalTest { $field->write(); $controller = new UserDefinedFormControllerTest_Controller($form); - $fields = $controller->getFormFields(); $this->assertEquals($fields->First()->RightTitle(), "Right Title"); + + // test empty form + $emptyForm = $this->objFromFixture('UserDefinedForm', 'empty-form'); + $controller = new UserDefinedFormControllerTest_Controller($emptyForm); + + $this->assertFalse($controller->Form()); } function testGetFormActions() { @@ -213,7 +218,8 @@ class UserDefinedFormControllerTest_Controller extends UserDefinedForM_Controlle */ function Form() { $form = parent::Form(); - $form->disableSecurityToken(); + + if($form) $form->disableSecurityToken(); return $form; } diff --git a/tests/UserDefinedFormTest.yml b/tests/UserDefinedFormTest.yml index 77acadc..ffc12f5 100644 --- a/tests/UserDefinedFormTest.yml +++ b/tests/UserDefinedFormTest.yml @@ -121,7 +121,8 @@ UserDefinedForm: custom-rules-form: Title: Custom Rules Form Fields: =>EditableCheckbox.checkbox-2, =>EditableTextField.basic-text-2 - + empty-form: + Title: Empty Form \ No newline at end of file