/lib/vendor/symfony-1.4.14/lib/widget/sfWidgetFormSelectCheckbox.class.php
https://github.com/yuya-takeyama/symfony-hackathon-20110924 · PHP · 129 lines · 69 code · 14 blank · 46 comment · 9 complexity · 1010bdffae5dbc7c869b745cea037124 MD5 · raw file
- <?php
- /*
- * This file is part of the symfony package.
- * (c) Fabien Potencier <fabien.potencier@symfony-project.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
- /**
- * sfWidgetFormSelectCheckbox represents an array of checkboxes.
- *
- * @package symfony
- * @subpackage widget
- * @author Fabien Potencier <fabien.potencier@symfony-project.com>
- * @version SVN: $Id: sfWidgetFormSelectCheckbox.class.php 30762 2010-08-25 12:33:33Z fabien $
- */
- class sfWidgetFormSelectCheckbox extends sfWidgetFormChoiceBase
- {
- /**
- * Constructor.
- *
- * Available options:
- *
- * * choices: An array of possible choices (required)
- * * label_separator: The separator to use between the input checkbox and the label
- * * class: The class to use for the main <ul> tag
- * * separator: The separator to use between each input checkbox
- * * formatter: A callable to call to format the checkbox choices
- * The formatter callable receives the widget and the array of inputs as arguments
- * * template: The template to use when grouping option in groups (%group% %options%)
- *
- * @param array $options An array of options
- * @param array $attributes An array of default HTML attributes
- *
- * @see sfWidgetFormChoiceBase
- */
- protected function configure($options = array(), $attributes = array())
- {
- parent::configure($options, $attributes);
- $this->addOption('class', 'checkbox_list');
- $this->addOption('label_separator', ' ');
- $this->addOption('separator', "\n");
- $this->addOption('formatter', array($this, 'formatter'));
- $this->addOption('template', '%group% %options%');
- }
- /**
- * Renders the widget.
- *
- * @param string $name The element name
- * @param string $value The value selected in this widget
- * @param array $attributes An array of HTML attributes to be merged with the default HTML attributes
- * @param array $errors An array of errors for the field
- *
- * @return string An HTML tag string
- *
- * @see sfWidgetForm
- */
- public function render($name, $value = null, $attributes = array(), $errors = array())
- {
- if ('[]' != substr($name, -2))
- {
- $name .= '[]';
- }
- if (null === $value)
- {
- $value = array();
- }
- $choices = $this->getChoices();
- // with groups?
- if (count($choices) && is_array(current($choices)))
- {
- $parts = array();
- foreach ($choices as $key => $option)
- {
- $parts[] = strtr($this->getOption('template'), array('%group%' => $key, '%options%' => $this->formatChoices($name, $value, $option, $attributes)));
- }
- return implode("\n", $parts);
- }
- else
- {
- return $this->formatChoices($name, $value, $choices, $attributes);
- }
- }
- protected function formatChoices($name, $value, $choices, $attributes)
- {
- $inputs = array();
- foreach ($choices as $key => $option)
- {
- $baseAttributes = array(
- 'name' => $name,
- 'type' => 'checkbox',
- 'value' => self::escapeOnce($key),
- 'id' => $id = $this->generateId($name, self::escapeOnce($key)),
- );
- if ((is_array($value) && in_array(strval($key), $value)) || strval($key) == strval($value))
- {
- $baseAttributes['checked'] = 'checked';
- }
- $inputs[$id] = array(
- 'input' => $this->renderTag('input', array_merge($baseAttributes, $attributes)),
- 'label' => $this->renderContentTag('label', self::escapeOnce($option), array('for' => $id)),
- );
- }
- return call_user_func($this->getOption('formatter'), $this, $inputs);
- }
- public function formatter($widget, $inputs)
- {
- $rows = array();
- foreach ($inputs as $input)
- {
- $rows[] = $this->renderContentTag('li', $input['input'].$this->getOption('label_separator').$input['label']);
- }
- return !$rows ? '' : $this->renderContentTag('ul', implode($this->getOption('separator'), $rows), array('class' => $this->getOption('class')));
- }
- }