/** * Executes this filter. * * @param sfFilterChain A sfFilterChain instance */ public function execute($filterChain) { // execute next filter $filterChain->execute(); $response = $this->context->getResponse(); $request = $this->context->getRequest(); $fillInForm = new sfFillInForm(); // converters foreach ($this->getParameter('converters', array()) as $functionName => $fields) { $fillInForm->addConverter($functionName, $fields); } // skip fields $fillInForm->setSkipFields((array) $this->getParameter('skip_fields', array())); // types $excludeTypes = (array) $this->getParameter('exclude_types', array('hidden', 'password')); $checkTypes = (array) $this->getParameter('check_types', array('text', 'checkbox', 'radio', 'password', 'hidden')); $fillInForm->setTypes(array_diff($checkTypes, $excludeTypes)); // fill in $method = 'fillIn' . ucfirst(strtolower($this->getParameter('content_type', 'Html'))); try { $content = $fillInForm->{$method}($response->getContent(), $this->getParameter('name'), $this->getParameter('id'), $request->getParameterHolder()->getAll()); $response->setContent($content); } catch (sfException $e) { if (sfConfig::get('sf_logging_enabled')) { $this->context->getEventDispatcher()->notify(new sfEvent($this, 'application.log', array($e->getMessage(), 'priority' => sfLogger::ERR))); } } }
$xml = simplexml_import_dom($f->fillInDom(clone $dom, null, null, $values)); $t->is(get_input_value($xml, 'hidden_input'), '2', '->setSkipFields() allows to prevent some fields to be filled'); $t->is(get_input_value($xml, 'input_text'), 'default_value', '->setSkipFields() allows to prevent some fields to be filled'); $t->is(get_input_value($xml, 'empty_input_text'), 'input text', '->setSkipFields() allows to prevent some fields to be filled'); $t->is(get_input_value($xml, 'password'), 'mypassword', '->setSkipFields() allows to prevent some fields to be filled'); $t->is(get_input_value($xml, 'input_checkbox', 'checked'), 'checked', '->setSkipFields() allows to prevent some fields to be filled'); $t->is(get_input_value($xml, 'input_checkbox_not_checked', 'checked'), 'checked', '->setSkipFields() allows to prevent some fields to be filled'); $t->is($xml->xpath('//form[@name="form1"]/textarea[@name="textarea"]'), array('content'), '->setSkipFields() allows to prevent some fields to be filled'); $t->is($xml->xpath('//form[@name="form1"]/select[@name="select"]/option[@selected="selected"]'), array('first'), '->setSkipFields() allows to prevent some fields to be filled'); $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'); $t->is(get_input_value($xml, 'article[title]'), 'title', '->setSkipFields() allows to prevent some fields to be filled'); $t->is($xml->xpath('//form[@name="form1"]/select[@name="article[category]"]/option[@selected="selected"]'), array(1, 2), '->setSkipFields() allows to prevent some fields to be filled'); // ->addconverter() $t->diag('->addConverter()'); $f = new sfFillInForm(); $f->addConverter('str_rot13', array('input_text', 'textarea')); $xml = simplexml_import_dom($f->fillInDom(clone $dom, null, null, $values)); $t->is(get_input_value($xml, 'input_text'), str_rot13('my input text'), '->addConverter() register a callable to be called for each value'); $t->is(get_input_value($xml, 'empty_input_text'), 'input text', '->addConverter() register a callable to be called for each value'); $t->is(get_input_value($xml, 'input_checkbox', 'checked'), '', '->addConverter() register a callable to be called for each value'); $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'); function get_input_value($xml, $name, $attribute = 'value', $form = null) { $value = ""; $xpath = ($form ? '//form[@name="' . $form . '"]' : '//form') . sprintf('/input[@name="%s"]', $name); $values = $xml->xpath($xpath); if (count($values) > 1 || substr($name, -2) == '[]') { foreach ($values as $val) { $value[] = $val[$attribute]; } } else {