PEAR_Config::_addConfigVars PHP Method

_addConfigVars() public method

public _addConfigVars ( $class, $vars ) : true | PEAR_Error
return true | PEAR_Error
    function _addConfigVars($class, $vars)
    {
        static $called = array();
        if (isset($called[$class])) {
            return;
        }
        $called[$class] = 1;
        if (count($vars) > 3) {
            return $this->raiseError('Roles can only define 3 new config variables or less');
        }
        foreach ($vars as $name => $var) {
            if (!is_array($var)) {
                return $this->raiseError('Configuration information must be an array');
            }
            if (!isset($var['type'])) {
                return $this->raiseError('Configuration information must contain a type');
            } elseif (!in_array($var['type'], array('string', 'mask', 'password', 'directory', 'file', 'set'))) {
                return $this->raiseError('Configuration type must be one of directory, file, string, ' . 'mask, set, or password');
            }
            if (!isset($var['default'])) {
                return $this->raiseError('Configuration information must contain a default value ("default" index)');
            }
            if (is_array($var['default'])) {
                $real_default = '';
                foreach ($var['default'] as $config_var => $val) {
                    if (strpos($config_var, 'text') === 0) {
                        $real_default .= $val;
                    } elseif (strpos($config_var, 'constant') === 0) {
                        if (!defined($val)) {
                            return $this->raiseError('Unknown constant "' . $val . '" requested in ' . 'default value for configuration variable "' . $name . '"');
                        }
                        $real_default .= constant($val);
                    } elseif (isset($this->configuration_info[$config_var])) {
                        $real_default .= $this->configuration_info[$config_var]['default'];
                    } else {
                        return $this->raiseError('Unknown request for "' . $config_var . '" value in ' . 'default value for configuration variable "' . $name . '"');
                    }
                }
                $var['default'] = $real_default;
            }
            if ($var['type'] == 'integer') {
                $var['default'] = (int) $var['default'];
            }
            if (!isset($var['doc'])) {
                return $this->raiseError('Configuration information must contain a summary ("doc" index)');
            }
            if (!isset($var['prompt'])) {
                return $this->raiseError('Configuration information must contain a simple prompt ("prompt" index)');
            }
            if (!isset($var['group'])) {
                return $this->raiseError('Configuration information must contain a simple group ("group" index)');
            }
            if (isset($this->configuration_info[$name])) {
                return $this->raiseError('Configuration variable "' . $name . '" already exists');
            }
            $this->configuration_info[$name] = $var;
            // fix bug #7351: setting custom config variable in a channel fails
            $this->_channelConfigInfo[] = $name;
        }
        return true;
    }