modern-events-calendar-lite/app/libraries/kses.php

227 lines
5.9 KiB
PHP
Raw Normal View History

2024-10-15 12:04:03 +02:00
<?php
// no direct access
defined('ABSPATH') or die();
/**
* MEC Kses Class.
*
*/
class MEC_kses extends MEC_base
{
static $allowed_html_form = NULL;
static $allowed_html_element = NULL;
static $allowed_html_rich = NULL;
static $allowed_html_embed = NULL;
static $allowed_html_page = NULL;
static $allowed_html_full = NULL;
static $allowed_attrs = array(
'data-*' => 1,
'aria-*' => 1,
'type' => 1,
'value' => 1,
'class' => 1,
'id' => 1,
'for' => 1,
'style' => 1,
'src' => 1,
'alt' => 1,
'title' => 1,
'placeholder' => 1,
'href' => 1,
'rel' => 1,
'target' => 1,
'novalidate' => 1,
'name' => 1,
'tabindex' => 1,
'action' => 1,
'method' => 1,
'width' => 1,
'height' => 1,
'selected' => 1,
'checked' => 1,
'readonly' => 1,
'disabled' => 1,
'required' => 1,
'autocomplete' => 1,
'min' => 1,
'max' => 1,
'step' => 1,
'cols' => 1,
'rows' => 1,
'lang' => 1,
'dir' => 1,
'enctype' => 1,
'multiple' => 1,
'frameborder' => 1,
'allow' => 1,
'allowfullscreen' => 1,
'label' => 1,
'align' => 1,
'accept-charset' => 1,
'itemtype' => 1,
'itemscope' => 1,
'itemprop' => 1,
'content' => 1,
'onclick' => 1,
'onsubmit' => 1,
'onchange' => 1,
'xmlns' => 1,
'viewbox' => 1,
'd' => 1,
'transform' => 1,
'fill' => 1,
'enable-background' => 1,
'version' => 1,
'xml:space' => 1,
'xmlns:xlink' => 1,
'onkeydown' => 1,
);
public function __construct()
{
}
public static function full($html)
{
if(is_null($html)) return '';
if(is_null(self::$allowed_html_full))
{
$allowed = wp_kses_allowed_html('post');
self::$allowed_html_full = apply_filters('mec_kses_tags', $allowed, 'full');
}
if(defined('MEC_NO_JS_CSS_IN_HTML') && MEC_NO_JS_CSS_IN_HTML) return wp_kses($html, self::$allowed_html_full);
else return $html;
}
public static function page($html)
{
if(is_null($html)) return '';
if(is_null(self::$allowed_html_page))
{
$allowed = wp_kses_allowed_html('post');
self::$allowed_html_page = apply_filters('mec_kses_tags', $allowed, 'page');
}
return wp_kses($html, self::$allowed_html_page);
}
public static function form($html)
{
if(is_null($html)) return '';
if(is_null(self::$allowed_html_form))
{
$allowed = wp_kses_allowed_html('post');
self::$allowed_html_form = apply_filters('mec_kses_tags', $allowed, 'form');
}
return wp_kses($html, self::$allowed_html_form);
}
public static function element($html)
{
if(is_null($html)) return '';
if(is_null(self::$allowed_html_element))
{
$allowed = wp_kses_allowed_html('post');
self::$allowed_html_element = apply_filters('mec_kses_tags', $allowed, 'element');
}
return wp_kses($html, self::$allowed_html_element);
}
/**
* Element + Embed
* @param $html
* @return string
*/
public static function rich($html)
{
if(is_null($html)) return '';
if(is_null(self::$allowed_html_rich))
{
$allowed = wp_kses_allowed_html('post');
self::$allowed_html_rich = apply_filters('mec_kses_tags', $allowed, 'rich');
}
return wp_kses($html, self::$allowed_html_rich);
}
/**
* Only Embed
* @param $html
* @return string
*/
public static function embed($html)
{
if(is_null($html)) return '';
if(is_null(self::$allowed_html_embed))
{
self::$allowed_html_embed = apply_filters('mec_kses_tags', array(), 'embed');
}
return wp_kses($html, self::$allowed_html_embed);
}
public static function tags($tags, $context)
{
foreach(array(
'svg',
'path',
'div',
'span',
'ul',
'li',
'a',
'button',
'progress',
'dt',
'dl',
) as $tag)
{
$tags[$tag] = self::$allowed_attrs;
}
if(in_array($context, array('form', 'page', 'full')))
{
$tags['form'] = self::$allowed_attrs;
$tags['label'] = self::$allowed_attrs;
$tags['input'] = self::$allowed_attrs;
$tags['select'] = self::$allowed_attrs;
$tags['option'] = self::$allowed_attrs;
$tags['optgroup'] = self::$allowed_attrs;
$tags['textarea'] = self::$allowed_attrs;
$tags['button'] = self::$allowed_attrs;
$tags['fieldset'] = self::$allowed_attrs;
$tags['output'] = self::$allowed_attrs;
}
if(in_array($context, array('embed', 'rich', 'full')))
{
if(!isset($tags['iframe'])) $tags['iframe'] = self::$allowed_attrs;
if(!isset($tags['canvas'])) $tags['canvas'] = self::$allowed_attrs;
}
if($context === 'full')
{
if(!isset($tags['script'])) $tags['script'] = self::$allowed_attrs;
if(!isset($tags['style'])) $tags['style'] = self::$allowed_attrs;
}
return $tags;
}
public static function styles($styles)
{
$styles[] = 'display';
$styles[] = 'opacity';
return $styles;
}
}