Changeset 8709
- Timestamp:
- 05/01/08 14:17:57 (1 year ago)
- Files:
-
- branches/1.0/lib/util/sfFillInForm.class.php (modified) (3 diffs)
- branches/1.0/test/unit/util/sfFillInFormTest.php (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
branches/1.0/lib/util/sfFillInForm.class.php
r8707 r8709 148 148 // text input 149 149 $element->removeAttribute('value'); 150 if ($this->hasValue($values, $name)) 151 { 152 $element->setAttribute('value', $this->escapeValue($this->getValue($values, $name), $name)); 153 } 150 $element->setAttribute('value', $this->escapeValue($this->getValue($values, $name, true), $name)); 154 151 } 155 152 } … … 157 154 { 158 155 $el = $element->cloneNode(false); 159 $el->appendChild($dom->createTextNode($this->escapeValue($this->getValue($values, $name ), $name)));156 $el->appendChild($dom->createTextNode($this->escapeValue($this->getValue($values, $name, true), $name))); 160 157 $element->parentNode->replaceChild($el, $element); 161 158 } 162 159 else if ($element->nodeName == 'select') 163 160 { 164 // select165 $value = $this->getValue($values, $name );161 //if the name contains [] it is part of an array that needs to be shifted 162 $value = $this->getValue($values, $name, strpos($name,'[]') !== false); 166 163 $multiple = $element->hasAttribute('multiple'); 167 164 foreach ($xpath->query('descendant::'.$ns.'option', $element) as $option) … … 196 193 } 197 194 198 protected function getValue($values, $name) 195 //use reference to values so that arrays can be shifted. 196 protected function getValue(&$values, $name, $shiftArray = false) 199 197 { 200 198 if (array_key_exists($name, $values)) 201 199 { 202 return $values[$name]; 200 $return = $values[$name]; 201 if ($shiftArray && is_array($return)) 202 { 203 //we need to remove the first element from the array. Therefore we need a reference 204 $arrayRef = &$values[$name]; 205 $return = array_shift($arrayRef); 206 } 207 return $return; 203 208 } 204 209 branches/1.0/test/unit/util/sfFillInFormTest.php
r8695 r8709 12 12 require_once($_test_dir.'/../lib/util/sfFillInForm.class.php'); 13 13 14 $t = new lime_test( 53, new lime_output_color());14 $t = new lime_test(61, new lime_output_color()); 15 15 16 16 $html = <<<EOF … … 45 45 </select> 46 46 <input name="article[or][much][longer]" value="very long!"/> 47 <input name="multiple_text[]" value="text1"/> 48 <input name="multiple_text[]" value="text2"/> 49 <textarea name="multiple_textarea[]">area1</textarea> 50 <textarea name="multiple_textarea[]">area2</textarea> 51 <select name="articles[]" multiple="multiple"> 52 <option value="1">1</option> 53 <option value="2" selected="selected">2</option> 54 <option value="3" selected="selected">3</option> 55 </select> 56 <select name="articles[]" multiple="multiple"> 57 <option value="1" selected="selected">1</option> 58 <option value="2">2</option> 59 <option value="3" selected="selected">3</option> 60 </select> 47 61 <input type="submit" name="submit" value="submit" /> 48 62 </form> … … 76 90 $t->is(get_input_value($xml, 'input_radio', 'checked'), 'checked', '->fillInDom() preserves default values for radio'); 77 91 $t->is(get_input_value($xml, 'input_checkbox_multiple[]', 'checked'), array('checked', null), '->fillInDom() preserves default values for multiple checkboxes'); 78 $t->is($xml->xpath('//form[@name="form1"]/textarea '), array('content'), '->fillInDom() preserves default values for textarea');92 $t->is($xml->xpath('//form[@name="form1"]/textarea[@name="textarea"]'), array('content'), '->fillInDom() preserves default values for textarea'); 79 93 $t->is($xml->xpath('//form[@name="form1"]/select[@name="select"]/option[@selected="selected"]'), array('selected'), '->fillInDom() preserves default values for select'); 80 94 $t->is($xml->xpath('//form[@name="form1"]/select[@name="select_multiple"]/option[@selected="selected"]'), array('selected', 'last'), '->fillInDom() preserves default values for multiple select'); 81 95 $t->is(get_input_value($xml, 'article[title]'), 'title', '->fillInDom() preserves default values for text input'); 82 96 $t->is($xml->xpath('//form[@name="form1"]/select[@name="article[category]"]/option[@selected="selected"]'), array(2, 3), '->fillInDom() preserves default values for select'); 97 $t->is(get_input_value($xml, 'multiple_text[]'), array('text1', 'text2'), '->fillInDom() preserves default values for multiple text inputs'); 98 $t->is($xml->xpath('//form[@name="form1"]/textarea[@name="multiple_textarea[]"]'), array('area1', 'area2'), '->fillInDom() preserves default values for multiple textareas'); 99 $t->is($xml->xpath('//form[@name="form1"]/select[@name="articles[]"][1]/option[@selected="selected"]'), array(2, 3), '->fillInDom() preserves default values for multiple select'); 100 $t->is($xml->xpath('//form[@name="form1"]/select[@name="articles[]"][2]/option[@selected="selected"]'), array(1, 3), '->fillInDom() preserves default values for multiple select'); 83 101 84 102 // check form selection by name … … 135 153 'article[title]' => 'my article title', 136 154 'article[category]' => array(1, 2), 155 'multiple_text[]' => array('m1', 'm2'), 156 'multiple_textarea[]' => array('a1', 'a2'), 157 'articles[]' => array(array(1, 2),array(2, 3)), 137 158 ); 138 159 … … 146 167 $t->is(get_input_value($xml, 'input_checkbox_not_checked', 'checked'), 'checked', '->fillInDom() fills in values for checkbox'); 147 168 $t->is(get_input_value($xml, 'input_checkbox_multiple[]', 'checked'), array(null, 'checked'), '->fillInDom() fills in values for multiple checkboxes'); 148 $t->is($xml->xpath('//form[@name="form1"]/textarea '), array('my content'), '->fillInDom() fills in values for textarea');169 $t->is($xml->xpath('//form[@name="form1"]/textarea[@name="textarea"]'), array('my content'), '->fillInDom() fills in values for textarea'); 149 170 $t->is($xml->xpath('//form[@name="form1"]/select[@name="select"]/option[@selected="selected"]'), array('first'), '->fillInDom() fills in values for select'); 150 171 $t->is($xml->xpath('//form[@name="form1"]/select[@name="select_multiple"]/option[@selected="selected"]'), array('first', 'last'), '->fillInDom() fills in values for multiple select'); 151 172 $t->is(get_input_value($xml, 'article[title]'), 'my article title', '->fillInDom() fills in values for text input'); 152 173 $t->is($xml->xpath('//form[@name="form1"]/select[@name="article[category]"]/option[@selected="selected"]'), array(1, 2), '->fillInDom() fills in values for select'); 174 $t->is(get_input_value($xml, 'multiple_text[]'), array('m1', 'm2'), '->fillInDom() fills in values for multiple text inputs'); 175 $t->is($xml->xpath('//form[@name="form1"]/textarea[@name="multiple_textarea[]"]'), array('a1', 'a2'), '->fillInDom() fills in values for multiple textareas'); 176 $t->is($xml->xpath('//form[@name="form1"]/select[@name="articles[]"][1]/option[@selected="selected"]'), array(1, 2), '->fillInDom() fills in values for multiple select'); 177 $t->is($xml->xpath('//form[@name="form1"]/select[@name="articles[]"][2]/option[@selected="selected"]'), array(2, 3), '->fillInDom() fills in values for multiple select'); 153 178 154 179 // ->setTypes() … … 172 197 $t->is(get_input_value($xml, 'input_checkbox', 'checked'), 'checked', '->setSkipFields() allows to prevent some fields to be filled'); 173 198 $t->is(get_input_value($xml, 'input_checkbox_not_checked', 'checked'), 'checked', '->setSkipFields() allows to prevent some fields to be filled'); 174 $t->is($xml->xpath('//form[@name="form1"]/textarea '), array('content'), '->setSkipFields() allows to prevent some fields to be filled');199 $t->is($xml->xpath('//form[@name="form1"]/textarea[@name="textarea"]'), array('content'), '->setSkipFields() allows to prevent some fields to be filled'); 175 200 $t->is($xml->xpath('//form[@name="form1"]/select[@name="select"]/option[@selected="selected"]'), array('first'), '->setSkipFields() allows to prevent some fields to be filled'); 176 201 $t->is($xml->xpath('//form[@name="form1"]/select[@name="select_multiple"]/option[@selected="selected"]'), array('selected', 'last'), '->setSkipFields() allows to prevent some fields to be filled'); … … 186 211 $t->is(get_input_value($xml, 'empty_input_text'), 'input text', '->addConverter() register a callable to be called for each value'); 187 212 $t->is(get_input_value($xml, 'input_checkbox', 'checked'), '', '->addConverter() register a callable to be called for each value'); 188 $t->is($xml->xpath('//form[@name="form1"]/textarea '), array(str_rot13('my content')), '->addConverter() register a callable to be called for each value');213 $t->is($xml->xpath('//form[@name="form1"]/textarea[@name="textarea"]'), array(str_rot13('my content')), '->addConverter() register a callable to be called for each value'); 189 214 190 215 function get_input_value($xml, $name, $attribute = 'value', $form = null)

