Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Loading…

allow between to be an array of strings #864

Merged
merged 3 commits into from

2 participants

@markstory
Owner

What happens when there are fewer elements in the 'between' array than there are radio buttons?

@dereuromark
Collaborator

I'd say that is the developer's fault. just as if you pass an array into sth that is supposed to be a string etc.
right now it would not diplay any errors and silently display only the ones provided so far.

@dereuromark
Collaborator

any objections? is is this good?

@markstory
Owner

I think you're still missing tests for the behaviour when there are fewer elements in the between option then there are radio options.

@dereuromark
Collaborator

no, I added one with 7aa78c4

@dereuromark
Collaborator

do you want me to write a more verbose one? because the previous requirements have been met - as linked above.

@markstory
Owner

Ah so you did.

@dereuromark
Collaborator

May I (or anybody else) merge then? I itch to use it :-)

@markstory markstory merged commit bc4db91 into from
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
This page is out of date. Refresh to see the latest.
View
229 lib/Cake/Test/Case/View/Helper/FormHelperTest.php
@@ -35,13 +35,6 @@
class ContactTestController extends Controller {
/**
- * name property
- *
- * @var string 'ContactTest'
- */
- public $name = 'ContactTest';
-
-/**
* uses property
*
* @var mixed null
@@ -58,13 +51,6 @@ class ContactTestController extends Controller {
class Contact extends CakeTestModel {
/**
- * primaryKey property
- *
- * @var string 'id'
- */
- public $primaryKey = 'id';
-
-/**
* useTable property
*
* @var bool false
@@ -72,13 +58,6 @@ class Contact extends CakeTestModel {
public $useTable = false;
/**
- * name property
- *
- * @var string 'Contact'
- */
- public $name = 'Contact';
-
-/**
* Default schema
*
* @var array
@@ -162,13 +141,6 @@ class ContactTagsContact extends CakeTestModel {
public $useTable = false;
/**
- * name property
- *
- * @var string 'Contact'
- */
- public $name = 'ContactTagsContact';
-
-/**
* Default schema
*
* @var array
@@ -207,13 +179,6 @@ class ContactNonStandardPk extends Contact {
public $primaryKey = 'pk';
/**
- * name property
- *
- * @var string 'ContactNonStandardPk'
- */
- public $name = 'ContactNonStandardPk';
-
-/**
* schema method
*
* @return void
@@ -271,20 +236,6 @@ class UserForm extends CakeTestModel {
public $useTable = false;
/**
- * primaryKey property
- *
- * @var string 'id'
- */
- public $primaryKey = 'id';
-
-/**
- * name property
- *
- * @var string 'UserForm'
- */
- public $name = 'UserForm';
-
-/**
* hasMany property
*
* @var array
@@ -326,20 +277,6 @@ class OpenidUrl extends CakeTestModel {
public $useTable = false;
/**
- * primaryKey property
- *
- * @var string 'id'
- */
- public $primaryKey = 'id';
-
-/**
- * name property
- *
- * @var string 'OpenidUrl'
- */
- public $name = 'OpenidUrl';
-
-/**
* belongsTo property
*
* @var array
@@ -389,13 +326,6 @@ public function beforeValidate($options = array()) {
class ValidateUser extends CakeTestModel {
/**
- * primaryKey property
- *
- * @var string 'id'
- */
- public $primaryKey = 'id';
-
-/**
* useTable property
*
* @var bool false
@@ -403,13 +333,6 @@ class ValidateUser extends CakeTestModel {
public $useTable = false;
/**
- * name property
- *
- * @var string 'ValidateUser'
- */
- public $name = 'ValidateUser';
-
-/**
* hasOne property
*
* @var array
@@ -453,13 +376,6 @@ public function beforeValidate($options = array()) {
class ValidateProfile extends CakeTestModel {
/**
- * primaryKey property
- *
- * @var string 'id'
- */
- public $primaryKey = 'id';
-
-/**
* useTable property
*
* @var bool false
@@ -481,13 +397,6 @@ class ValidateProfile extends CakeTestModel {
);
/**
- * name property
- *
- * @var string 'ValidateProfile'
- */
- public $name = 'ValidateProfile';
-
-/**
* hasOne property
*
* @var array
@@ -527,13 +436,6 @@ public function beforeValidate($options = array()) {
class ValidateItem extends CakeTestModel {
/**
- * primaryKey property
- *
- * @var string 'id'
- */
- public $primaryKey = 'id';
-
-/**
* useTable property
*
* @var bool false
@@ -541,13 +443,6 @@ class ValidateItem extends CakeTestModel {
public $useTable = false;
/**
- * name property
- *
- * @var string 'ValidateItem'
- */
- public $name = 'ValidateItem';
-
-/**
* schema property
*
* @var array
@@ -591,25 +486,12 @@ public function beforeValidate($options = array()) {
class TestMail extends CakeTestModel {
/**
- * primaryKey property
- *
- * @var string 'id'
- */
- public $primaryKey = 'id';
-
-/**
* useTable property
*
* @var bool false
*/
public $useTable = false;
-/**
- * name property
- *
- * @var string 'TestMail'
- */
- public $name = 'TestMail';
}
/**
@@ -3534,6 +3416,51 @@ public function testRadio() {
'/fieldset'
);
$this->assertTags($result, $expected);
+
+ $result = $this->Form->radio(
+ 'Model.field',
+ array('option A', 'option B', 'option C'),
+ array('separator' => '--separator--', 'between' => array('between A', 'between B', 'between C'))
+ );
+
+ $expected = array(
+ 'fieldset' => array(),
+ 'legend' => array(),
+ 'Field',
+ '/legend',
+ 'input' => array(
+ 'type' => 'hidden', 'name' => 'data[Model][field]',
+ 'value' => '', 'id' => 'ModelField_'
+ ),
+ array('input' => array(
+ 'type' => 'radio', 'name' => 'data[Model][field]',
+ 'value' => '0', 'id' => 'ModelField0'
+ )),
+ array('label' => array('for' => 'ModelField0')),
+ 'option A',
+ '/label',
+ 'between A',
+ '--separator--',
+ array('input' => array(
+ 'type' => 'radio', 'name' => 'data[Model][field]',
+ 'value' => '1', 'id' => 'ModelField1'
+ )),
+ array('label' => array('for' => 'ModelField1')),
+ 'option B',
+ '/label',
+ 'between B',
+ '--separator--',
+ array('input' => array(
+ 'type' => 'radio', 'name' => 'data[Model][field]',
+ 'value' => '2', 'id' => 'ModelField2'
+ )),
+ array('label' => array('for' => 'ModelField2')),
+ 'option C',
+ '/label',
+ 'between C',
+ '/fieldset'
+ );
+ $this->assertTags($result, $expected);
}
/**
@@ -3607,6 +3534,72 @@ public function testRadioDisabled() {
'/fieldset'
);
$this->assertTags($result, $expected);
+
+ $result = $this->Form->input('Model.field', array(
+ 'options' => array('1' => 'first', '2' => 'second'),
+ 'type' => 'radio',
+ 'before' => '--before--',
+ 'after' => '--after--',
+ 'separator' => '--separator--',
+ 'between' => array('--between first--', '--between second--')
+ ));
+
+ $expected = array(
+ 'div' => array('class' => 'input radio'),
+ '--before--',
+ 'fieldset' => array(),
+ 'legend' => array(),
+ 'Field',
+ '/legend',
+ array('input' => array('type' => 'hidden', 'name' => 'data[Model][field]', 'id' => 'ModelField_', 'value' => '')),
+ array('input' => array('type' => 'radio', 'name' => 'data[Model][field]', 'value' => '1', 'id' => 'ModelField1')),
+ array('label' => array('for' => 'ModelField1')),
+ 'first',
+ '/label',
+ '--between first--',
+ '--separator--',
+ array('input' => array('type' => 'radio', 'name' => 'data[Model][field]', 'value' => '2', 'id' => 'ModelField2')),
+ array('label' => array('for' => 'ModelField2')),
+ 'second',
+ '/label',
+ '--between second--',
+ '/fieldset',
+ '--after--',
+ '/div'
+ );
+ $this->assertTags($result, $expected);
+
+ $result = $this->Form->input('Model.field', array(
+ 'options' => array('1' => 'first', '2' => 'second'),
+ 'type' => 'radio',
+ 'before' => '--before--',
+ 'after' => '--after--',
+ 'separator' => '--separator--',
+ 'between' => array('--between first--')
+ ));
+
+ $expected = array(
+ 'div' => array('class' => 'input radio'),
+ '--before--',
+ 'fieldset' => array(),
+ 'legend' => array(),
+ 'Field',
+ '/legend',
+ array('input' => array('type' => 'hidden', 'name' => 'data[Model][field]', 'id' => 'ModelField_', 'value' => '')),
+ array('input' => array('type' => 'radio', 'name' => 'data[Model][field]', 'value' => '1', 'id' => 'ModelField1')),
+ array('label' => array('for' => 'ModelField1')),
+ 'first',
+ '/label',
+ '--between first--',
+ '--separator--',
+ array('input' => array('type' => 'radio', 'name' => 'data[Model][field]', 'value' => '2', 'id' => 'ModelField2')),
+ array('label' => array('for' => 'ModelField2')),
+ 'second',
+ '/label',
+ '/fieldset',
+ '--after--',
+ '/div'
+ );
}
/**
View
9 lib/Cake/View/Helper/FormHelper.php
@@ -1303,7 +1303,8 @@ public function checkbox($fieldName, $options = array()) {
* ### Attributes:
*
* - `separator` - define the string in between the radio buttons
- * - `between` - the string between legend and input set
+ * - `between` - the string between legend and input set or array of strings to insert
+ * strings between each input block
* - `legend` - control whether or not the widget set has a fieldset & legend
* - `value` - indicate a value that is should be checked
* - `label` - boolean to indicate whether or not labels for widgets show be displayed
@@ -1388,6 +1389,9 @@ public function radio($fieldName, $options = array(), $attributes = array()) {
if ($label) {
$optTitle = $this->Html->useTag('label', $tagName, '', $optTitle);
}
+ if (is_array($between)) {
+ $optTitle .= array_shift($between);
+ }
$allOptions = array_merge($attributes, $optionsHere);
$out[] = $this->Html->useTag('radio', $attributes['name'], $tagName,
array_diff_key($allOptions, array('name' => '', 'type' => '', 'id' => '')),
@@ -1405,6 +1409,9 @@ public function radio($fieldName, $options = array(), $attributes = array()) {
}
$out = $hidden . implode($separator, $out);
+ if (is_array($between)) {
+ $between = '';
+ }
if ($legend) {
$out = $this->Html->useTag('fieldset', '', $this->Html->useTag('legend', $legend) . $between . $out);
}
Something went wrong with that request. Please try again.