BC fix for checkbox ids

Revert to previous behavior for id generation of checkboxes, This commit
can be reverted for 2.5+ is desired

Fixes #2733
This commit is contained in:
AD7six 2014-02-03 17:51:57 +00:00
parent ecf5aec1ae
commit adc0bf3ded
2 changed files with 27 additions and 26 deletions

View file

@ -3287,8 +3287,8 @@ class FormHelperTest extends CakeTestCase {
$expected = array( $expected = array(
'input' => array('type' => 'hidden', 'name' => 'data[Model][multi_field]', 'value' => '', 'id' => 'ModelMultiField'), 'input' => array('type' => 'hidden', 'name' => 'data[Model][multi_field]', 'value' => '', 'id' => 'ModelMultiField'),
array('div' => array('class' => 'checkbox')), array('div' => array('class' => 'checkbox')),
array('input' => array('type' => 'checkbox', 'name' => 'data[Model][multi_field][]', 'value' => '1/2', 'id' => 'ModelMultiField1/2')), array('input' => array('type' => 'checkbox', 'name' => 'data[Model][multi_field][]', 'value' => '1/2', 'id' => 'ModelMultiField12')),
array('label' => array('for' => 'ModelMultiField1/2')), array('label' => array('for' => 'ModelMultiField12')),
'half', 'half',
'/label', '/label',
'/div', '/div',
@ -3568,8 +3568,8 @@ class FormHelperTest extends CakeTestCase {
$result = $this->Form->radio('Model.field', array('1/2' => 'half')); $result = $this->Form->radio('Model.field', array('1/2' => 'half'));
$expected = array( $expected = array(
'input' => array('type' => 'hidden', 'name' => 'data[Model][field]', 'value' => '', 'id' => 'ModelField_'), 'input' => array('type' => 'hidden', 'name' => 'data[Model][field]', 'value' => '', 'id' => 'ModelField_'),
array('input' => array('type' => 'radio', 'name' => 'data[Model][field]', 'value' => '1/2', 'id' => 'ModelField1/2')), array('input' => array('type' => 'radio', 'name' => 'data[Model][field]', 'value' => '1/2', 'id' => 'ModelField12')),
'label' => array('for' => 'ModelField1/2'), 'label' => array('for' => 'ModelField12'),
'half', 'half',
'/label' '/label'
); );
@ -4254,16 +4254,16 @@ class FormHelperTest extends CakeTestCase {
*/ */
public function testDomIdSuffix() { public function testDomIdSuffix() {
$result = $this->Form->domIdSuffix('1 string with 1$-dollar signs'); $result = $this->Form->domIdSuffix('1 string with 1$-dollar signs');
$this->assertEquals('1StringWith1$-dollarSigns', $result); $this->assertEquals('1StringWith1DollarSigns', $result);
$result = $this->Form->domIdSuffix('<abc x="foo" y=\'bar\'>'); $result = $this->Form->domIdSuffix('<abc x="foo" y=\'bar\'>');
$this->assertEquals('AbcX=FooY=Bar', $result);
$result = $this->Form->domIdSuffix('1 string with 1$-dollar signs', 'xhtml');
$this->assertEquals('1StringWith1-dollarSigns', $result);
$result = $this->Form->domIdSuffix('<abc x="foo" y=\'bar\'>', 'xhtml');
$this->assertEquals('AbcXFooYBar', $result); $this->assertEquals('AbcXFooYBar', $result);
$result = $this->Form->domIdSuffix('1 string with 1$-dollar signs', 'html5');
$this->assertEquals('1StringWith1$-dollarSigns', $result);
$result = $this->Form->domIdSuffix('<abc x="foo" y=\'bar\'>', 'html5');
$this->assertEquals('AbcX=FooY=Bar', $result);
} }
/** /**
@ -4281,14 +4281,14 @@ class FormHelperTest extends CakeTestCase {
$result = $this->Form->domIdSuffix('a\'b'); $result = $this->Form->domIdSuffix('a\'b');
$this->assertEquals('AB2', $result); $this->assertEquals('AB2', $result);
$result = $this->Form->domIdSuffix('1 string with 1$-dollar', 'xhtml'); $result = $this->Form->domIdSuffix('1 string with 1$-dollar');
$this->assertEquals('1StringWith1-dollar', $result); $this->assertEquals('1StringWith1Dollar', $result);
$result = $this->Form->domIdSuffix('1 string with 1€-dollar', 'xhtml'); $result = $this->Form->domIdSuffix('1 string with 1$-dollar');
$this->assertEquals('1StringWith1-dollar1', $result); $this->assertEquals('1StringWith1Dollar1', $result);
$result = $this->Form->domIdSuffix('1 string with 1$-dollar', 'xhtml'); $result = $this->Form->domIdSuffix('1 string with 1$-dollar');
$this->assertEquals('1StringWith1-dollar2', $result); $this->assertEquals('1StringWith1Dollar2', $result);
} }
/** /**
@ -5180,31 +5180,32 @@ class FormHelperTest extends CakeTestCase {
array('div' => array('class' => 'checkbox')), array('div' => array('class' => 'checkbox')),
array('input' => array( array('input' => array(
'type' => 'checkbox', 'name' => 'data[Model][multi_field][]', 'type' => 'checkbox', 'name' => 'data[Model][multi_field][]',
'value' => 'a+', 'id' => 'ModelMultiFieldA+' 'value' => 'a+', 'id' => 'ModelMultiFieldA2'
)), )),
array('label' => array('for' => 'ModelMultiFieldA+')), array('label' => array('for' => 'ModelMultiFieldA2')),
'first', 'first',
'/label', '/label',
'/div', '/div',
array('div' => array('class' => 'checkbox')), array('div' => array('class' => 'checkbox')),
array('input' => array( array('input' => array(
'type' => 'checkbox', 'name' => 'data[Model][multi_field][]', 'type' => 'checkbox', 'name' => 'data[Model][multi_field][]',
'value' => 'a++', 'id' => 'ModelMultiFieldA++' 'value' => 'a++', 'id' => 'ModelMultiFieldA1'
)), )),
array('label' => array('for' => 'ModelMultiFieldA++')), array('label' => array('for' => 'ModelMultiFieldA1')),
'second', 'second',
'/label', '/label',
'/div', '/div',
array('div' => array('class' => 'checkbox')), array('div' => array('class' => 'checkbox')),
array('input' => array( array('input' => array(
'type' => 'checkbox', 'name' => 'data[Model][multi_field][]', 'type' => 'checkbox', 'name' => 'data[Model][multi_field][]',
'value' => 'a+++', 'id' => 'ModelMultiFieldA+++' 'value' => 'a+++', 'id' => 'ModelMultiFieldA'
)), )),
array('label' => array('for' => 'ModelMultiFieldA+++')), array('label' => array('for' => 'ModelMultiFieldA')),
'third', 'third',
'/label', '/label',
'/div' '/div'
); );
$this->assertTags($result, $expected); $this->assertTags($result, $expected);
$result = $this->Form->select( $result = $this->Form->select(

View file

@ -2078,14 +2078,14 @@ class FormHelper extends AppHelper {
* limitation, but to avoid layout issues it still filters out some sensitive chars. * limitation, but to avoid layout issues it still filters out some sensitive chars.
* *
* @param string $value The value that should be transferred into a DOM ID suffix. * @param string $value The value that should be transferred into a DOM ID suffix.
* @param string $type Doctype to use. Defaults to html5. Anything else will use limited chars. * @param string $type Doctype to use. Defaults to html4.
* @return string DOM ID * @return string DOM ID
*/ */
public function domIdSuffix($value, $type = 'html5') { public function domIdSuffix($value, $type = 'html4') {
if ($type === 'html5') { if ($type === 'html5') {
$value = str_replace(array('@', '<', '>', ' ', '"', '\''), '_', $value); $value = str_replace(array('@', '<', '>', ' ', '"', '\''), '_', $value);
} else { } else {
$value = preg_replace('~[^\\pL\d-_]+~u', '_', $value); $value = Inflector::camelize(Inflector::slug($value));
} }
$value = Inflector::camelize($value); $value = Inflector::camelize($value);
$count = 1; $count = 1;