mirror of
https://github.com/kamilwylegala/cakephp2-php8.git
synced 2025-03-18 15:39:53 +00:00
Adding possibility to specify if option values should be escaped, and adding tests for it
git-svn-id: https://svn.cakephp.org/repo/branches/1.2.x.x@5019 3807eeeb-6ff5-0310-8944-8be069107fe0
This commit is contained in:
parent
d4bd5e5dbc
commit
22adcb07a1
2 changed files with 40 additions and 4 deletions
|
@ -751,6 +751,13 @@ class FormHelper extends AppHelper {
|
||||||
*/
|
*/
|
||||||
function select($fieldName, $options = array(), $selected = null, $attributes = array(), $showEmpty = '') {
|
function select($fieldName, $options = array(), $selected = null, $attributes = array(), $showEmpty = '') {
|
||||||
$showParents = false;
|
$showParents = false;
|
||||||
|
$escapeOptions = true;
|
||||||
|
|
||||||
|
if (isset($attributes['escape'])) {
|
||||||
|
$escapeOptions = $attributes['escape'];
|
||||||
|
unset($attributes['escape']);
|
||||||
|
}
|
||||||
|
|
||||||
$this->setFormTag($fieldName);
|
$this->setFormTag($fieldName);
|
||||||
$this->__secure();
|
$this->__secure();
|
||||||
$attributes = $this->domId((array)$attributes);
|
$attributes = $this->domId((array)$attributes);
|
||||||
|
@ -790,7 +797,7 @@ class FormHelper extends AppHelper {
|
||||||
$options[''] = $showEmpty;
|
$options[''] = $showEmpty;
|
||||||
$options = array_reverse($options, true);
|
$options = array_reverse($options, true);
|
||||||
}
|
}
|
||||||
$select = am($select, $this->__selectOptions(array_reverse($options, true), $selected, array(), $showParents));
|
$select = am($select, $this->__selectOptions(array_reverse($options, true), $selected, array(), $showParents, array('escape' => $escapeOptions)));
|
||||||
$select[] = sprintf($this->Html->tags['selectend']);
|
$select[] = sprintf($this->Html->tags['selectend']);
|
||||||
return $this->output(implode("\n", $select));
|
return $this->output(implode("\n", $select));
|
||||||
}
|
}
|
||||||
|
@ -1033,7 +1040,9 @@ class FormHelper extends AppHelper {
|
||||||
*
|
*
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
function __selectOptions($elements = array(), $selected = null, $parents = array(), $showParents = null) {
|
function __selectOptions($elements = array(), $selected = null, $parents = array(), $showParents = null, $attributes = array()) {
|
||||||
|
$attributes = am(array('escape' => true), $attributes);
|
||||||
|
|
||||||
$select = array();
|
$select = array();
|
||||||
foreach($elements as $name => $title) {
|
foreach($elements as $name => $title) {
|
||||||
$htmlOptions = array();
|
$htmlOptions = array();
|
||||||
|
@ -1042,7 +1051,7 @@ class FormHelper extends AppHelper {
|
||||||
$select[] = $this->Html->tags['optiongroupend'];
|
$select[] = $this->Html->tags['optiongroupend'];
|
||||||
$parents[] = $name;
|
$parents[] = $name;
|
||||||
}
|
}
|
||||||
$select = am($select, $this->__selectOptions($title, $selected, $parents, $showParents));
|
$select = am($select, $this->__selectOptions($title, $selected, $parents, $showParents, $attributes));
|
||||||
if (!empty($name)) {
|
if (!empty($name)) {
|
||||||
$select[] = sprintf($this->Html->tags['optiongroup'], $name, '');
|
$select[] = sprintf($this->Html->tags['optiongroup'], $name, '');
|
||||||
}
|
}
|
||||||
|
@ -1061,7 +1070,8 @@ class FormHelper extends AppHelper {
|
||||||
}
|
}
|
||||||
|
|
||||||
if($showParents || (!in_array($title, $parents))) {
|
if($showParents || (!in_array($title, $parents))) {
|
||||||
$select[] = sprintf($this->Html->tags['selectoption'], $name, $this->Html->_parseAttributes($htmlOptions), h($title));
|
$title = ife($attributes['escape'], h($title), $title);
|
||||||
|
$select[] = sprintf($this->Html->tags['selectoption'], $name, $this->Html->_parseAttributes($htmlOptions), $title);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -537,6 +537,32 @@ class FormHelperTest extends CakeTestCase {
|
||||||
$this->assertNoPattern('/option value="other"\s+selected="selected"/', $result);
|
$this->assertNoPattern('/option value="other"\s+selected="selected"/', $result);
|
||||||
$this->assertNoPattern('/<select[^<>]+[^name|id]=[^<>]*>/', $result);
|
$this->assertNoPattern('/<select[^<>]+[^name|id]=[^<>]*>/', $result);
|
||||||
$this->assertNoPattern('/<option[^<>]+[^value|selected]=[^<>]*>/', $result);
|
$this->assertNoPattern('/<option[^<>]+[^value|selected]=[^<>]*>/', $result);
|
||||||
|
|
||||||
|
$this->Form->data = array();
|
||||||
|
$result = $this->Form->select('Model/field', array('value' => 'good', 'other' => 'bad'));
|
||||||
|
$this->assertPattern('/option value=""/', $result);
|
||||||
|
$this->assertPattern('/option value="value"/', $result);
|
||||||
|
$this->assertPattern('/option value="other"/', $result);
|
||||||
|
$this->assertPattern('/<\/option>\s+<option/', $result);
|
||||||
|
$this->assertPattern('/<\/option>\s+<\/select>/', $result);
|
||||||
|
$this->assertNoPattern('/option value="field"\s+selected="selected"/', $result);
|
||||||
|
$this->assertNoPattern('/option value="other"\s+selected="selected"/', $result);
|
||||||
|
|
||||||
|
$result = $this->Form->select('Model/field', array('first' => 'first "html" <chars>', 'second' => 'value'), null, array(), false);
|
||||||
|
$this->assertPattern('/' .
|
||||||
|
'<select[^>]*>\s+' .
|
||||||
|
'<option\s+value="first"[^>]*>first "html" <chars><\/option>\s+'.
|
||||||
|
'<option\s+value="second"[^>]*>value<\/option>\s+'.
|
||||||
|
'<\/select>'.
|
||||||
|
'/i', $result);
|
||||||
|
|
||||||
|
$result = $this->Form->select('Model/field', array('first' => 'first "html" <chars>', 'second' => 'value'), null, array('escape' => false), false);
|
||||||
|
$this->assertPattern('/' .
|
||||||
|
'<select[^>]*>\s+' .
|
||||||
|
'<option\s+value="first"[^>]*>first "html" <chars><\/option>\s+'.
|
||||||
|
'<option\s+value="second"[^>]*>value<\/option>\s+'.
|
||||||
|
'<\/select>'.
|
||||||
|
'/i', $result);
|
||||||
}
|
}
|
||||||
|
|
||||||
function testDaySelect() {
|
function testDaySelect() {
|
||||||
|
|
Loading…
Add table
Reference in a new issue