Permalink
Browse files

BC fixes for disabled checkboxes

see: d504642
see: #3545

Signed-off-by: Rachman Chavik <rchavik@xintesa.com>
  • Loading branch information...
1 parent 1cb2438 commit ee08fe5c1fff0ba5c0e7fcc07df90d1ff3f83bd1 @dereuromark dereuromark committed with rchavik Jan 30, 2013
Showing with 76 additions and 5 deletions.
  1. +69 −0 lib/Cake/Test/Case/View/Helper/FormHelperTest.php
  2. +7 −5 lib/Cake/View/Helper/FormHelper.php
@@ -2445,6 +2445,33 @@ public function testInputCheckboxWithDisabledElements() {
);
$result = $this->Form->input('Contact.multiple', array('multiple' => 'checkbox', 'disabled' => $disabled, 'options' => $options));
$this->assertTags($result, $expected);
+
+ // make sure 50 does only disable 50, and not 50f5c0cf
+ $options = array('50' => 'Fifty', '50f5c0cf' => 'Stringy');
+ $disabled = array(50);
+
+ $expected = array(
+ array('div' => array('class' => 'input select')),
+ array('label' => array('for' => "ContactMultiple")),
+ 'Multiple',
+ '/label',
+ array('input' => array('type' => 'hidden', 'name' => "data[Contact][multiple]", 'value' => '', 'id' => "ContactMultiple")),
+ array('div' => array('class' => 'checkbox')),
+ array('input' => array('type' => 'checkbox', 'name' => "data[Contact][multiple][]", 'value' => 50, 'disabled' => 'disabled', 'id' => "ContactMultiple50")),
+ array('label' => array('for' => "ContactMultiple50")),
+ 'Fifty',
+ '/label',
+ '/div',
+ array('div' => array('class' => 'checkbox')),
+ array('input' => array('type' => 'checkbox', 'name' => "data[Contact][multiple][]", 'value' => '50f5c0cf', 'id' => "ContactMultiple50f5c0cf")),
+ array('label' => array('for' => "ContactMultiple50f5c0cf")),
+ 'Stringy',
+ '/label',
+ '/div',
+ '/div'
+ );
+ $result = $this->Form->input('Contact.multiple', array('multiple' => 'checkbox', 'disabled' => $disabled, 'options' => $options));
+ $this->assertTags($result, $expected);
}
/**
@@ -4277,6 +4304,48 @@ public function testHabtmSelectBox() {
'/select'
);
$this->assertTags($result, $expected);
+
+ // make sure only 50 is selected, and not 50f5c0cf
+ $this->View->viewVars['contactTags'] = array(
+ '1' => 'blue',
+ '50f5c0cf' => 'red',
+ '50' => 'green'
+ );
+ $this->Form->request->data = array(
+ 'Contact' => array(),
+ 'ContactTag' => array(
+ array(
+ 'id' => 1,
+ 'name' => 'blue'
+ ),
+ array(
+ 'id' => 50,
+ 'name' => 'green'
+ )
+ )
+ );
+ $this->Form->create('Contact');
+ $result = $this->Form->input('ContactTag', array('div' => false, 'label' => false));
+ $expected = array(
+ 'input' => array(
+ 'type' => 'hidden', 'name' => 'data[ContactTag][ContactTag]', 'value' => '', 'id' => 'ContactTagContactTag_'
+ ),
+ 'select' => array(
+ 'name' => 'data[ContactTag][ContactTag][]', 'id' => 'ContactTagContactTag',
+ 'multiple' => 'multiple'
+ ),
+ array('option' => array('value' => '1', 'selected' => 'selected')),
+ 'blue',
+ '/option',
+ array('option' => array('value' => '50f5c0cf')),
+ 'red',
+ '/option',
+ array('option' => array('value' => '50', 'selected' => 'selected')),
+ 'green',
+ '/option',
+ '/select'
+ );
+ $this->assertTags($result, $expected);
}
/**
@@ -2631,19 +2631,21 @@ protected function _selectOptions($elements = array(), $parents = array(), $show
if ($attributes['style'] === 'checkbox') {
$htmlOptions['value'] = $name;
- $disabledType = null;
$hasDisabled = !empty($attributes['disabled']);
if ($hasDisabled) {
- $disabledType = gettype($attributes['disabled']);
+ $disabledIsArray = is_array($attributes['disabled']);
+ if ($disabledIsArray) {
+ $disabledIsNumeric = is_numeric($htmlOptions['value']);
+ }
}
if (
$hasDisabled &&
- $disabledType === 'array' &&
- in_array($htmlOptions['value'], $attributes['disabled'])
+ $disabledIsArray &&
+ in_array($htmlOptions['value'], $attributes['disabled'], !$disabledIsNumeric)
) {
$htmlOptions['disabled'] = 'disabled';
}
- if ($hasDisabled && $disabledType !== 'array') {
+ if ($hasDisabled && !$disabledIsArray) {
$htmlOptions['disabled'] = $attributes['disabled'] === true ? 'disabled' : $attributes['disabled'];
}

0 comments on commit ee08fe5

Please sign in to comment.