mirror of
https://github.com/moodle/moodle.git
synced 2025-07-04 05:57:09 +02:00
Prior to this change, all the line endings in the imported HTMLPurifier library were using CRLF (\r\n aka Windows style), but the HTMLPurifier source and also the downloadable artefacts use LF (\n aka Linux style) as line endings. This has been the case since510d190382
when with the commit "MDL-38672 import HTML Purifier 4.5.0" all line endings were changed from LF to CRLF. There was no comment in the commit on why this change was done. As the original source uses LF, this commit partly reverts510d190382
and goes back to LF as line endings. Signed-off-by: Daniel Ziegenberg <daniel@ziegenberg.at>
107 lines
3.1 KiB
PHP
107 lines
3.1 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Responsible for creating definition caches.
|
|
*/
|
|
class HTMLPurifier_DefinitionCacheFactory
|
|
{
|
|
/**
|
|
* @type array
|
|
*/
|
|
protected $caches = array('Serializer' => array());
|
|
|
|
/**
|
|
* @type array
|
|
*/
|
|
protected $implementations = array();
|
|
|
|
/**
|
|
* @type HTMLPurifier_DefinitionCache_Decorator[]
|
|
*/
|
|
protected $decorators = array();
|
|
|
|
/**
|
|
* Initialize default decorators
|
|
*/
|
|
public function setup()
|
|
{
|
|
$this->addDecorator('Cleanup');
|
|
}
|
|
|
|
/**
|
|
* Retrieves an instance of global definition cache factory.
|
|
* @param HTMLPurifier_DefinitionCacheFactory $prototype
|
|
* @return HTMLPurifier_DefinitionCacheFactory
|
|
*/
|
|
public static function instance($prototype = null)
|
|
{
|
|
static $instance;
|
|
if ($prototype !== null) {
|
|
$instance = $prototype;
|
|
} elseif ($instance === null || $prototype === true) {
|
|
$instance = new HTMLPurifier_DefinitionCacheFactory();
|
|
$instance->setup();
|
|
}
|
|
return $instance;
|
|
}
|
|
|
|
/**
|
|
* Registers a new definition cache object
|
|
* @param string $short Short name of cache object, for reference
|
|
* @param string $long Full class name of cache object, for construction
|
|
*/
|
|
public function register($short, $long)
|
|
{
|
|
$this->implementations[$short] = $long;
|
|
}
|
|
|
|
/**
|
|
* Factory method that creates a cache object based on configuration
|
|
* @param string $type Name of definitions handled by cache
|
|
* @param HTMLPurifier_Config $config Config instance
|
|
* @return mixed
|
|
*/
|
|
public function create($type, $config)
|
|
{
|
|
$method = $config->get('Cache.DefinitionImpl');
|
|
if ($method === null) {
|
|
return new HTMLPurifier_DefinitionCache_Null($type);
|
|
}
|
|
if (!empty($this->caches[$method][$type])) {
|
|
return $this->caches[$method][$type];
|
|
}
|
|
if (isset($this->implementations[$method]) &&
|
|
class_exists($class = $this->implementations[$method], false)) {
|
|
$cache = new $class($type);
|
|
} else {
|
|
if ($method != 'Serializer') {
|
|
trigger_error("Unrecognized DefinitionCache $method, using Serializer instead", E_USER_WARNING);
|
|
}
|
|
$cache = new HTMLPurifier_DefinitionCache_Serializer($type);
|
|
}
|
|
foreach ($this->decorators as $decorator) {
|
|
$new_cache = $decorator->decorate($cache);
|
|
// prevent infinite recursion in PHP 4
|
|
unset($cache);
|
|
$cache = $new_cache;
|
|
}
|
|
$this->caches[$method][$type] = $cache;
|
|
return $this->caches[$method][$type];
|
|
}
|
|
|
|
/**
|
|
* Registers a decorator to add to all new cache objects
|
|
* @param HTMLPurifier_DefinitionCache_Decorator|string $decorator An instance or the name of a decorator
|
|
*/
|
|
public function addDecorator($decorator)
|
|
{
|
|
if (is_string($decorator)) {
|
|
$class = "HTMLPurifier_DefinitionCache_Decorator_$decorator";
|
|
$decorator = new $class;
|
|
}
|
|
$this->decorators[$decorator->name] = $decorator;
|
|
}
|
|
}
|
|
|
|
// vim: et sw=4 sts=4
|