<?php
/**
 * A class for rendering inputs of type select.
 */
class form_widget_select implements form_widget
{
    ////////////////////////////////////////////////////////////////////////////
    // Construct and destruct functions.

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

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

    /**
     * Renders an input of type select.
     *
     * @param array (optional) $option The options.
     * @key string 'value' The selected option.
     * @key array 'option' The options.
     * @key string * A select attribute.
     * @throws invalidargumentexception If the 'option' key is not an array.
     * @return string The rendered input.
     */
    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']);
        $select = '<select';
        
        foreach ($option as $k => $v)
        {
            $select .= ' ' . $k . '="' . htmlspecialchars($v) . '"';
        }
        
        $select .= '>';
        
        foreach ($list as $k => $v)
        {
            $select .= '<option value="' . htmlspecialchars($k) . '"' . (($value == $k) ? ' selected="selected"' : '') . '>' . htmlspecialchars($v) . '</option>';
        }
        
        $select .= '</select>';
        return $select;
    }
    
    ////////////////////////////////////////////////////////////////////////////
    // Internal functions.
}
