⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 validator.php

📁 php-4.4.7学习linux时下载的源代码
💻 PHP
📖 第 1 页 / 共 5 页
字号:
        if (!isset($list['attribs']) || !isset($list['attribs']['name'])) {            $unknown = $allowignore ? '<filelist>' : '<dir name="*unknown*">';            $dirname = $iscontents ? '<contents>' : $unknown;        } else {            $dirname = '<dir name="' . $list['attribs']['name'] . '">';        }        $res = $this->_stupidSchemaValidate($struc, $list, $dirname);        if ($allowignore && $res) {            $this->_pf->getFilelist();            $fcontents = $this->_pf->getContents();            $filelist = array();            if (!isset($fcontents['dir']['file'][0])) {                $fcontents['dir']['file'] = array($fcontents['dir']['file']);            }            foreach ($fcontents['dir']['file'] as $file) {                $filelist[$file['attribs']['name']] = true;            }            if (isset($list['install'])) {                if (!isset($list['install'][0])) {                    $list['install'] = array($list['install']);                }                foreach ($list['install'] as $file) {                    if (!isset($filelist[$file['attribs']['name']])) {                        $this->_notInContents($file['attribs']['name'], 'install');                    }                }            }            if (isset($list['ignore'])) {                if (!isset($list['ignore'][0])) {                    $list['ignore'] = array($list['ignore']);                }                foreach ($list['ignore'] as $file) {                    if (!isset($filelist[$file['attribs']['name']])) {                        $this->_notInContents($file['attribs']['name'], 'ignore');                    }                }            }        }        if (!$allowignore && isset($list['file'])) {            if (!isset($list['file'][0])) {                // single file                $list['file'] = array($list['file']);            }            foreach ($list['file'] as $i => $file)            {                if (isset($file['attribs']) && isset($file['attribs']['name']) &&                      $file['attribs']['name']{0} == '.' &&                        $file['attribs']['name']{1} == '/') {                    // name is something like "./doc/whatever.txt"                    $this->_invalidFileName($file['attribs']['name']);                }                if (isset($file['attribs']) && isset($file['attribs']['role'])) {                    if (!$this->_validateRole($file['attribs']['role'])) {                        if (isset($this->_packageInfo['usesrole'])) {                            $roles = $this->_packageInfo['usesrole'];                            if (!isset($roles[0])) {                                $roles = array($roles);                            }                            foreach ($roles as $role) {                                if ($role['role'] = $file['attribs']['role']) {                                    $msg = 'This package contains role "%role%" and requires ' .                                        'package "%package%" to be used';                                    if (isset($role['uri'])) {                                        $params = array('role' => $role['role'],                                            'package' => $role['uri']);                                    } else {                                        $params = array('role' => $role['role'],                                            'package' => $this->_pf->_registry->                                            parsedPackageNameToString(array('package' =>                                                $role['package'], 'channel' => $role['channel']),                                                true));                                    }                                    $this->_stack->push('_mustInstallRole', 'error', $params, $msg);                                }                            }                        }                        $this->_invalidFileRole($file['attribs']['name'],                            $dirname, $file['attribs']['role']);                    }                }                if (!isset($file['attribs'])) {                    continue;                }                $save = $file['attribs'];                if ($dirs) {                    $save['name'] = $dirs . '/' . $save['name'];                }                unset($file['attribs']);                if (count($file) && $this->_curState != PEAR_VALIDATE_DOWNLOADING) { // has tasks                    foreach ($file as $task => $value) {                        if ($tagClass = $this->_pf->getTask($task)) {                            if (!is_array($value) || !isset($value[0])) {                                $value = array($value);                            }                            foreach ($value as $v) {                                $ret = call_user_func(array($tagClass, 'validateXml'),                                    $this->_pf, $v, $this->_pf->_config, $save);                                if (is_array($ret)) {                                    $this->_invalidTask($task, $ret, @$save['name']);                                }                            }                        } else {                            if (isset($this->_packageInfo['usestask'])) {                                $roles = $this->_packageInfo['usestask'];                                if (!isset($roles[0])) {                                    $roles = array($roles);                                }                                foreach ($roles as $role) {                                    if ($role['task'] = $task) {                                        $msg = 'This package contains task "%task%" and requires ' .                                            'package "%package%" to be used';                                        if (isset($role['uri'])) {                                            $params = array('task' => $role['task'],                                                'package' => $role['uri']);                                        } else {                                            $params = array('task' => $role['task'],                                                'package' => $this->_pf->_registry->                                                parsedPackageNameToString(array('package' =>                                                    $role['package'], 'channel' => $role['channel']),                                                    true));                                        }                                        $this->_stack->push('_mustInstallTask', 'error',                                            $params, $msg);                                    }                                }                            }                            $this->_unknownTask($task, $save['name']);                        }                    }                }            }        }        if (isset($list['ignore'])) {            if (!$allowignore) {                $this->_ignoreNotAllowed('ignore');            }        }        if (isset($list['install'])) {            if (!$allowignore) {                $this->_ignoreNotAllowed('install');            }        }        if (isset($list['file'])) {            if ($allowignore) {                $this->_fileNotAllowed('file');            }        }        if (isset($list['dir'])) {            if ($allowignore) {                $this->_fileNotAllowed('dir');            } else {                if (!isset($list['dir'][0])) {                    $list['dir'] = array($list['dir']);                }                foreach ($list['dir'] as $dir) {                    if (isset($dir['attribs']) && isset($dir['attribs']['name'])) {                        if ($dir['attribs']['name'] == '/' ||                              !isset($this->_packageInfo['contents']['dir']['dir'])) {                            // always use nothing if the filelist has already been flattened                            $newdirs = '';                        } elseif ($dirs == '') {                            $newdirs = $dir['attribs']['name'];                        } else {                            $newdirs = $dirs . '/' . $dir['attribs']['name'];                        }                    } else {                        $newdirs = $dirs;                    }                    $this->_validateFilelist($dir, $allowignore, $newdirs);                }            }        }    }    function _validateRelease()    {        if (isset($this->_packageInfo['phprelease'])) {            $release = 'phprelease';            if (isset($this->_packageInfo['providesextension'])) {                $this->_cannotProvideExtension($release);            }            if (isset($this->_packageInfo['srcpackage']) || isset($this->_packageInfo['srcuri'])) {                $this->_cannotHaveSrcpackage($release);            }            $releases = $this->_packageInfo['phprelease'];            if (!is_array($releases)) {                return true;            }            if (!isset($releases[0])) {                $releases = array($releases);            }            foreach ($releases as $rel) {                $this->_stupidSchemaValidate(array(                    '*installconditions',                    '*filelist',                ), $rel, '<phprelease>');            }        }        if (isset($this->_packageInfo['extsrcrelease'])) {            $release = 'extsrcrelease';            if (!isset($this->_packageInfo['providesextension'])) {                $this->_mustProvideExtension($release);            }            if (isset($this->_packageInfo['srcpackage']) || isset($this->_packageInfo['srcuri'])) {                $this->_cannotHaveSrcpackage($release);            }            $releases = $this->_packageInfo['extsrcrelease'];            if (!is_array($releases)) {                return true;            }            if (!isset($releases[0])) {                $releases = array($releases);            }            foreach ($releases as $rel) {                $this->_stupidSchemaValidate(array(                    '*installconditions',                    '*configureoption->name->prompt->?default',                    '*binarypackage',                    '*filelist',                ), $rel, '<extsrcrelease>');                if (isset($rel['binarypackage'])) {                    if (!is_array($rel['binarypackage']) || !isset($rel['binarypackage'][0])) {                        $rel['binarypackage'] = array($rel['binarypackage']);                    }                    foreach ($rel['binarypackage'] as $bin) {                        if (!is_string($bin)) {                            $this->_binaryPackageMustBePackagename();                        }                    }                }            }        }        if (isset($this->_packageInfo['extbinrelease'])) {            $release = 'extbinrelease';            if (!isset($this->_packageInfo['providesextension'])) {                $this->_mustProvideExtension($release);            }            if (isset($this->_packageInfo['channel']) &&                  !isset($this->_packageInfo['srcpackage'])) {                $this->_mustSrcPackage($release);            }            if (isset($this->_packageInfo['uri']) && !isset($this->_packageInfo['srcuri'])) {                $this->_mustSrcuri($release);            }            $releases = $this->_packageInfo['extbinrelease'];            if (!is_array($releases)) {                return true;            }            if (!isset($releases[0])) {                $releases = array($releases);            }            foreach ($releases as $rel) {                $this->_stupidSchemaValidate(array(                    '*installconditions',                    '*filelist',                ), $rel, '<extbinrelease>');            }        }        if (isset($this->_packageInfo['bundle'])) {            $release = 'bundle';            if (isset($this->_packageInfo['providesextension'])) {                $this->_cannotProvideExtension($release);            }            if (isset($this->_packageInfo['srcpackage']) || isset($this->_packageInfo['srcuri'])) {                $this->_cannotHaveSrcpackage($release);            }            $releases = $this->_packageInfo['bundle'];            if (!is_array($releases) || !isset($releases[0])) {                $releases = array($releases);            }            foreach ($releases as $rel) {                $this->_stupidSchemaValidate(array(                    '*installconditions',                    '*filelist',                ), $rel, '<bundle>');            }        }        foreach ($releases as $rel) {            if (is_array($rel) && array_key_exists('installconditions', $rel)) {                $this->_validateInstallConditions($rel['installconditions'],                    "<$release><installconditions>");            }            if (is_array($rel) && array_key_exists('filelist', $rel)) {                if ($rel['filelist']) {                                        $this->_validateFilelist($rel['filelist'], true);                }            }        }    }    /**     * This is here to allow role extension through plugins     * @param string     */    function _validateRole($role)    {        return in_array($role, PEAR_Installer_Role::getValidRoles($this->_pf->getPackageType()));    }    function _pearVersionTooLow($version)    {        $this->_stack->push(__FUNCTION__, 'error',            array('version' => $version),            'This package.xml requires PEAR version %version% to parse properly, we are ' .            'version 1.4.9');    }    function _invalidTagOrder($oktags, $actual, $root)    {        $this->_stack->push(__FUNCTION__, 'error',            array('oktags' => $oktags, 'actual' => $actual, 'root' => $root),            'Invalid tag order in %root%, found <%actual%> expected one of "%oktags%"');    }    function _ignoreNotAllowed($type)    {        $this->_stack->push(__FUNCTION__, 'error', array('type' => $type),            '<%type%> is not allowed inside global <contents>, only inside ' .            '<phprelease>/<extbinrelease>, use <dir> and <file> only');    }    function _fileNotAllowed($type)    {        $this->_stack->push(__FUNCTION__, 'error', array('type' => $type),            '<%type%> is not allowed inside release <filelist>, only inside ' .            '<contents>, use <ignore> and <install> only');

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -