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

📄 htmlmodulemanager.php

📁 很棒的在线教学系统
💻 PHP
📖 第 1 页 / 共 2 页
字号:
     */    function registerModule($module) {        if (is_string($module)) {            // attempt to load the module            $original_module = $module;            $ok = false;            foreach ($this->prefixes as $prefix) {                $module = $prefix . $original_module;                if ($this->_classExists($module)) {                    $ok = true;                    break;                }            }            if (!$ok) {                $module = $original_module;                if (!$this->_classExists($module)) {                    trigger_error($original_module . ' module does not exist',                        E_USER_ERROR);                    return;                }            }            $module = new $module();        }        if (empty($module->name)) {            trigger_error('Module instance of ' . get_class($module) . ' must have name');            return;        }        $this->registeredModules[$module->name] = $module;    }        /**     * Safely tests for class existence without invoking __autoload in PHP5     * or greater.     * @param $name String class name to test     * @note If any other class needs it, we'll need to stash in a      *       conjectured "compatibility" class     * @private     */    function _classExists($name) {        static $is_php_4 = null;        if ($is_php_4 === null) {            $is_php_4 = version_compare(PHP_VERSION, '5', '<');        }        if ($is_php_4) {            return class_exists($name);        } else {            return class_exists($name, false);        }    }        /**     * Adds a module to the current doctype by first registering it,     * and then tacking it on to the active doctype     */    function addModule($module) {        $this->registerModule($module);        if (is_object($module)) $module = $module->name;        $this->userModules[] = $module;    }        /**     * Adds a class prefix that registerModule() will use to resolve a     * string name to a concrete class     */    function addPrefix($prefix) {        $this->prefixes[] = $prefix;    }        /**     * Performs processing on modules, after being called you may     * use getElement() and getElements()     * @param $config Instance of HTMLPurifier_Config     */    function setup($config) {                $this->trusted = $config->get('HTML', 'Trusted');                // generate        $this->doctype = $this->doctypes->make($config);        $modules = $this->doctype->modules;                // take out the default modules that aren't allowed        $lookup = $config->get('HTML', 'AllowedModules');        $special_cases = $config->get('HTML', 'CoreModules');                if (is_array($lookup)) {            foreach ($modules as $k => $m) {                if (isset($special_cases[$m])) continue;                if (!isset($lookup[$m])) unset($modules[$k]);            }        }                // merge in custom modules        $modules = array_merge($modules, $this->userModules);                foreach ($modules as $module) {            $this->processModule($module);            $this->modules[$module]->setup($config);        }                foreach ($this->doctype->tidyModules as $module) {            $this->processModule($module);            $this->modules[$module]->setup($config);        }                // setup lookup table based on all valid modules        foreach ($this->modules as $module) {            foreach ($module->info as $name => $def) {                if (!isset($this->elementLookup[$name])) {                    $this->elementLookup[$name] = array();                }                $this->elementLookup[$name][] = $module->name;            }        }                // note the different choice        $this->contentSets = new HTMLPurifier_ContentSets(            // content set assembly deals with all possible modules,            // not just ones deemed to be "safe"            $this->modules        );        $this->attrCollections = new HTMLPurifier_AttrCollections(            $this->attrTypes,            // there is no way to directly disable a global attribute,            // but using AllowedAttributes or simply not including            // the module in your custom doctype should be sufficient            $this->modules        );    }        /**     * Takes a module and adds it to the active module collection,     * registering it if necessary.     */    function processModule($module) {        if (!isset($this->registeredModules[$module]) || is_object($module)) {            $this->registerModule($module);        }        $this->modules[$module] = $this->registeredModules[$module];    }        /**     * Retrieves merged element definitions.     * @return Array of HTMLPurifier_ElementDef     */    function getElements() {                $elements = array();        foreach ($this->modules as $module) {            foreach ($module->info as $name => $v) {                if (isset($elements[$name])) continue;                // if element is not safe, don't use it                if (!$this->trusted && ($v->safe === false)) continue;                $elements[$name] = $this->getElement($name);            }        }                // remove dud elements, this happens when an element that        // appeared to be safe actually wasn't        foreach ($elements as $n => $v) {            if ($v === false) unset($elements[$n]);        }                return $elements;            }        /**     * Retrieves a single merged element definition     * @param $name Name of element     * @param $trusted Boolean trusted overriding parameter: set to true     *                 if you want the full version of an element     * @return Merged HTMLPurifier_ElementDef     */    function getElement($name, $trusted = null) {                $def = false;        if ($trusted === null) $trusted = $this->trusted;                $modules = $this->modules;                if (!isset($this->elementLookup[$name])) {            return false;        }                foreach($this->elementLookup[$name] as $module_name) {                        $module = $modules[$module_name];                        // copy is used because, ideally speaking, the original            // definition should not be modified. Usually, this will            // make no difference, but for consistency's sake            $new_def = $module->info[$name]->copy();                        // refuse to create/merge in a definition that is deemed unsafe            if (!$trusted && ($new_def->safe === false)) {                $def = false;                continue;            }                        if (!$def && $new_def->standalone) {                // element with unknown safety is not to be trusted.                // however, a merge-in definition with undefined safety                // is fine                if (!$trusted && !$new_def->safe) continue;                $def = $new_def;            } elseif ($def) {                $def->mergeIn($new_def);            } else {                // could "save it for another day":                // non-standalone definitions that don't have a standalone                // to merge into could be deferred to the end                continue;            }                        // attribute value expansions            $this->attrCollections->performInclusions($def->attr);            $this->attrCollections->expandIdentifiers($def->attr, $this->attrTypes);                        // descendants_are_inline, for ChildDef_Chameleon            if (is_string($def->content_model) &&                strpos($def->content_model, 'Inline') !== false) {                if ($name != 'del' && $name != 'ins') {                    // this is for you, ins/del                    $def->descendants_are_inline = true;                }            }                        $this->contentSets->generateChildDef($def, $module);        }                    // add information on required attributes        foreach ($def->attr as $attr_name => $attr_def) {            if ($attr_def->required) {                $def->required_attr[] = $attr_name;            }        }                return $def;            }    }

⌨️ 快捷键说明

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