entity_to_text-1.0.x-dev/src/HtmlPurifier.php
src/HtmlPurifier.php
<?php
namespace Drupal\entity_to_text;
use Drupal\Component\FileSecurity\FileSecurity;
use Drupal\Core\File\FileSystemInterface;
/**
* Create the default HTMLPurifier configuration to transform HTML to text.
*/
class HtmlPurifier {
/**
* The HTMLPurifier cache folder name.
*
* The folder will be located in the root of Drupal public path.
*
* @var string
*/
protected const HTMLPURIFIER_CACHE_NAME = 'HtmlPurifier';
/**
* The file system service.
*
* @var \Drupal\Core\File\FileSystemInterface
*/
protected $fileSystem;
/**
* Construct a new HtmlPurifier object.
*/
public function __construct(FileSystemInterface $file_system) {
$this->fileSystem = $file_system;
}
/**
* Initialize a new instance of HTML Purifier with default configuration.
*
* @return \HTMLPurifier
* The HTMLPurifier object.
*/
public function init(?\HTMLPurifier_Config $config = NULL): \HTMLPurifier {
if (!$config instanceof \HTMLPurifier_Config) {
$config = $this->getHtmlPurifierConfig();
}
return new \HTMLPurifier($config);
}
/**
* Create the default HTMLPurifier configuration to transform HTML to text.
*
* @return \HTMLPurifier_Config
* The HTMLPurifier configuration object.
*/
public function getHtmlPurifierConfig(): \HTMLPurifier_Config {
$public_path = (string) $this->fileSystem->realpath('public://');
$cache_path = $public_path . \DIRECTORY_SEPARATOR . self::HTMLPURIFIER_CACHE_NAME;
$this->fileSystem->prepareDirectory($cache_path, FileSystemInterface::CREATE_DIRECTORY | FileSystemInterface::MODIFY_PERMISSIONS);
// Write a non-public .htaccess on the cache directory.
FileSecurity::writeHtaccess($cache_path);
$config = \HTMLPurifier_Config::createDefault();
$config->set('Cache.SerializerPath', $cache_path);
// Remove empty elements.
$config->set('AutoFormat.RemoveEmpty', TRUE);
$config->set('HTML.AllowedElements', []);
$config->set('CSS.AllowedProperties', []);
return $config;
}
}
