예제 #1
0
 /**
  * Evaluate an option
  *
  * Lists of Supported Types)
  * - bool      : boolean true or false
  * - string    : string
  * - array     : array
  * - enum      : take only one element of possible values
  * - enumarray : take only elements in possible values
  * - number    : number
  * - interval  : interval string. See parse_interval for details
  * - options   : options
  *
  * @access private
  * @static
  * @param mixed $val option value. 
  * @param string $type option type
  * @param mixed $conf config. See evaluate_options. 
  * @return array array(evaluated value, invalid value)
  * @uses parse_interval
  * @uses evaluate_options
  * @version $Id: v 1.7 2008-07-30 11:14:46 sonots $
  * @since   v 1.0
  */
 function evaluate_option($val, $type, $conf = null)
 {
     if (is_null($val)) {
         return array(null, null);
     }
     $retval = $unknown = null;
     switch ($type) {
         case 'bool':
             if ($val === true && is_bool($conf)) {
                 $retval = $conf;
                 break;
             }
             if ($val === false || $val === '0' || $val === 'off' || $val === 'false' || $val === 'FALSE') {
                 $retval = false;
             } elseif ($val === true || $val === '' || $val === '1' || $val === 'on' || $val === 'true' || $val === 'TRUE') {
                 $retval = true;
             } else {
                 $unknown = $val;
             }
             break;
         case 'string':
             if ($val === true) {
                 // no "=value" option is set to true at parse_option_line
                 $retval = is_string($conf) ? $conf : null;
                 break;
             }
             if (is_string($val)) {
                 $retval = $val;
             } else {
                 $unknown = $val;
             }
             break;
         case 'array':
             if ($val === true) {
                 // no "=value" option is set to true at parse_option_line
                 $retval = is_array($conf) ? $conf : null;
                 break;
             }
             $retval = PluginSonotsOption::boolean_to_numeric((array) $val);
             break;
         case 'enum':
             if ($val === true) {
                 $retval = is_array($conf) ? reset($conf) : null;
                 break;
             }
             if (in_array($val, $conf)) {
                 $retval = $val;
             } else {
                 $unknown = $val;
             }
             break;
         case 'enumarray':
             // special array type
             if ($val === true) {
                 $retval = is_array($conf) ? $conf : null;
                 break;
             }
             $retval = array();
             $unknown = array();
             $val = PluginSonotsOption::boolean_to_numeric((array) $val);
             foreach ($val as $elem) {
                 if (in_array($elem, $conf)) {
                     $retval[] = $elem;
                 } else {
                     $unknown[] = $elem;
                 }
             }
             if (empty($retval)) {
                 $retval = null;
             }
             if (empty($unknown)) {
                 $unknown = null;
             }
             break;
         case 'options':
             if ($val === true) {
                 $val = array();
             }
             list($retval, $unknown) = PluginSonotsOption::evaluate_options($val, $conf);
             if (empty($retval)) {
                 $retval = null;
             }
             if (empty($unknown)) {
                 $unknown = null;
             }
             break;
         case 'number':
             if ($val === true) {
                 $retval = is_int($conf) || is_float($conf) ? $conf : null;
                 break;
             }
             if (is_numeric($val)) {
                 $retval = $val;
             } else {
                 $unknown = $val;
             }
             break;
         case 'interval':
             // $conf is default2 or array(default2, start)
             if ($val === true) {
                 $val = is_array($conf) ? $conf[0] : $conf;
             }
             $start = is_array($conf) ? $conf[1] : 1;
             $retval = PluginSonotsOption::parse_interval($val, $start);
             if (is_null($retval)) {
                 $unknown = $val;
             }
             break;
         default:
             $unknown = $val;
             break;
     }
     return array($retval, $unknown);
 }