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;
}