<?php
/**
 * A class for rendering inputs of type checkbox.
 */
class form_widget_checkbox extends form_widget_input
{
    ////////////////////////////////////////////////////////////////////////////
    // Construct and destruct functions.

    ////////////////////////////////////////////////////////////////////////////
    // Overload functions.

    ////////////////////////////////////////////////////////////////////////////
    // Interface functions.

    /**
     * Renders inputs of type checkbox.
     *
     * @param array (optional) $option The options.
     * @key string 'value' The checked checkbox.
     * @key array 'option' The options.
     * @key string * A checkbox attribute.
     * @throws invalidargumentexception If the 'option' key is not an array.
     * @return string The rendered inputs.
     */
    public static function render(array $option = array())
    {
        $value = (array_key_exists('value', $option)) ? $option['value'] : '';
        $list = (array_key_exists('option', $option)) ? $option['option'] : array();
        
        if (!is_array($list))
        {
            throw new invalidargumentexception('Argument 1 (key \'option\') passed to ' . __METHOD__ . '() must be an array, ' . gettype($list) . ' given.');
        }
        
        unset($option['value'], $option['option']);
        $option['type'] = 'checkbox';
        $checkbox = array();
        
        foreach ($list as $k => $v)
        {
            $option['value'] = $k;
            
            if ($value == $k)
            {
                $option['checked'] = 'checked';
            }
            else
            {
                unset($option['checked']);
            }
            
            $checkbox[] = parent::render($option) . htmlspecialchars($v);
        }
        
        return implode('<br />', $checkbox);
    }
    
    ////////////////////////////////////////////////////////////////////////////
    // Internal functions.
}
