Horde_Config::_parseLevel PHP Метод

_parseLevel() защищенный Метод

Parses one level of the configuration XML tree into the associative array containing the traversed configuration tree.
protected _parseLevel ( &$conf, DOMNodeList $children, string $ctx )
$children DOMNodeList The XML nodes of the level that should be parsed.
$ctx string A string representing the current position (context prefix) inside the configuration XML file.
    protected function _parseLevel(&$conf, $children, $ctx)
    {
        foreach ($children as $node) {
            if ($node->nodeType != XML_ELEMENT_NODE) {
                continue;
            }
            $name = $node->getAttribute('name');
            $desc = $GLOBALS['injector']->getInstance('Horde_Core_Factory_TextFilter')->filter($node->getAttribute('desc'), 'linkurls');
            $required = !($node->getAttribute('required') == 'false');
            $quote = !($node->getAttribute('quote') == 'false');
            $curctx = empty($ctx) ? $name : $ctx . '|' . $name;
            switch ($node->tagName) {
                case 'configdescription':
                    if (empty($name)) {
                        $name = uniqid(mt_rand());
                    }
                    $conf[$name] = array('_type' => 'description', 'desc' => $GLOBALS['injector']->getInstance('Horde_Core_Factory_TextFilter')->filter($this->_default($curctx, $this->_getNodeOnlyText($node)), 'linkurls'));
                    break;
                case 'configheader':
                    if (empty($name)) {
                        $name = uniqid(mt_rand());
                    }
                    $conf[$name] = array('_type' => 'header', 'desc' => $this->_default($curctx, $this->_getNodeOnlyText($node)));
                    break;
                case 'configswitch':
                    $values = $this->_getSwitchValues($node, $ctx);
                    list($default, $isDefault) = $quote ? $this->__default($curctx, $this->_getNodeOnlyText($node)) : $this->__defaultRaw($curctx, $this->_getNodeOnlyText($node));
                    if ($default === '') {
                        $default = key($values);
                    }
                    if (is_bool($default)) {
                        $default = $default ? 'true' : 'false';
                    }
                    $conf[$name] = array('desc' => $desc, 'switch' => $values, 'default' => $default, 'is_default' => $isDefault, 'quote' => $quote);
                    break;
                case 'configenum':
                    $values = $this->_getEnumValues($node);
                    list($default, $isDefault) = $quote ? $this->__default($curctx, $this->_getNodeOnlyText($node)) : $this->__defaultRaw($curctx, $this->_getNodeOnlyText($node));
                    if ($default === '') {
                        $default = key($values);
                    }
                    if (is_bool($default)) {
                        $default = $default ? 'true' : 'false';
                    }
                    $conf[$name] = array('_type' => 'enum', 'required' => $required, 'quote' => $quote, 'values' => $values, 'desc' => $desc, 'default' => $default, 'is_default' => $isDefault);
                    break;
                case 'configlist':
                    list($default, $isDefault) = $this->__default($curctx, null);
                    if (is_null($default)) {
                        $default = $this->_getNodeOnlyText($node);
                    } elseif (is_array($default)) {
                        $default = implode(', ', $default);
                    }
                    $conf[$name] = array('_type' => 'stringlist', 'required' => $required, 'desc' => $desc, 'default' => $default, 'is_default' => $isDefault);
                    break;
                case 'configmultienum':
                    $default = $this->_getNodeOnlyText($node);
                    if (strlen($default)) {
                        $default = explode(',', $default);
                    } else {
                        $default = array();
                    }
                    list($default, $isDefault) = $this->__default($curctx, $default);
                    $conf[$name] = array('_type' => 'multienum', 'required' => $required, 'values' => $this->_getEnumValues($node), 'desc' => $desc, 'default' => Horde_Array::valuesToKeys($default), 'is_default' => $isDefault);
                    break;
                case 'configpassword':
                    $conf[$name] = array('_type' => 'password', 'required' => $required, 'desc' => $desc, 'default' => $this->_default($curctx, $this->_getNodeOnlyText($node)), 'is_default' => $this->_isDefault($curctx, $this->_getNodeOnlyText($node)));
                    break;
                case 'configstring':
                    $conf[$name] = array('_type' => 'text', 'required' => $required, 'desc' => $desc, 'default' => $this->_default($curctx, $this->_getNodeOnlyText($node)), 'is_default' => $this->_isDefault($curctx, $this->_getNodeOnlyText($node)));
                    if ($conf[$name]['default'] === false) {
                        $conf[$name]['default'] = 'false';
                    } elseif ($conf[$name]['default'] === true) {
                        $conf[$name]['default'] = 'true';
                    }
                    break;
                case 'configboolean':
                    $default = $this->_getNodeOnlyText($node);
                    $default = !(empty($default) || $default === 'false');
                    $conf[$name] = array('_type' => 'boolean', 'required' => $required, 'desc' => $desc, 'default' => $this->_default($curctx, $default), 'is_default' => $this->_isDefault($curctx, $default));
                    break;
                case 'configinteger':
                    $values = $this->_getEnumValues($node);
                    $conf[$name] = array('_type' => 'int', 'required' => $required, 'values' => $values, 'desc' => $desc, 'default' => $this->_default($curctx, $this->_getNodeOnlyText($node)), 'is_default' => $this->_isDefault($curctx, $this->_getNodeOnlyText($node)));
                    if ($node->getAttribute('octal') == 'true' && $conf[$name]['default'] != '') {
                        $conf[$name]['_type'] = 'octal';
                        $conf[$name]['default'] = sprintf('0%o', $this->_default($curctx, octdec($this->_getNodeOnlyText($node))));
                    }
                    break;
                case 'configldap':
                    $conf[$node->getAttribute('switchname')] = $this->_configLDAP($ctx, $node);
                    break;
                case 'configldapuser':
                    $conf = array_merge($conf, $this->_configLDAPUser($ctx, $node));
                    break;
                case 'configphp':
                    $conf[$name] = array('_type' => 'php', 'required' => $required, 'quote' => false, 'desc' => $desc, 'default' => $this->_defaultRaw($curctx, $this->_getNodeOnlyText($node)), 'is_default' => $this->_isDefaultRaw($curctx, $this->_getNodeOnlyText($node)));
                    break;
                case 'configsecret':
                    $conf[$name] = array('_type' => 'text', 'required' => true, 'desc' => $desc, 'default' => $this->_default($curctx, strval(new Horde_Support_Randomid())), 'is_default' => $this->_isDefault($curctx, $this->_getNodeOnlyText($node)));
                    break;
                case 'configsql':
                    $conf[$node->getAttribute('switchname')] = $this->configSQL($ctx, $node);
                    break;
                case 'confignosql':
                    $conf[$node->getAttribute('switchname')] = $this->configNoSQL($ctx, $node);
                    break;
                case 'configvfs':
                    $conf[$node->getAttribute('switchname')] = $this->_configVFS($ctx, $node);
                    break;
                case 'configsection':
                    $conf[$name] = array();
                    $cur =& $conf[$name];
                    if ($node->hasChildNodes()) {
                        $this->_parseLevel($cur, $node->childNodes, $curctx);
                    }
                    break;
                case 'configtab':
                    $key = uniqid(mt_rand());
                    $conf[$key] = array('tab' => $name, 'desc' => $desc);
                    if ($node->hasChildNodes()) {
                        $this->_parseLevel($conf, $node->childNodes, $ctx);
                    }
                    break;
                case 'configplaceholder':
                    $conf[uniqid(mt_rand())] = 'placeholder';
                    break;
                default:
                    $conf[$name] = array();
                    $cur =& $conf[$name];
                    if ($node->hasChildNodes()) {
                        $this->_parseLevel($cur, $node->childNodes, $curctx);
                    }
                    break;
            }
        }
    }