You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

113 lines
3.7 KiB

<?php
// (c) Copyright by authors of the Tiki Wiki CMS Groupware Project
//
// All Rights Reserved. See copyright.txt for details and a complete list of authors.
// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details.
// $Id$
/**
* @file
* Customised version of HTMLPurifier.func.php for easy use in Tiki
* This overrides the HTMLPurifier() function in HTMLPurifier.func.php
*
* Defines a function wrapper for HTML Purifier for quick use.
* @note ''HTMLPurifier()'' is NOT the same as ''new HTMLPurifier()''
*/
/**
* Purify HTML.
* @param $html String HTML to purify
* @param $config Configuration to use, can be any value accepted by
* HTMLPurifier_Config::create()
*/
/**
* @param $html
* @param null $config
* @return mixed
*/
function HTMLPurifier($html, $config = null)
{
static $purifier = false;
if (! $purifier || ! $config) {
if (! $config) { // mod for tiki temp files location
$config = getHTMLPurifierTikiConfig();
}
$purifier = new HTMLPurifier();
}
return $purifier->purify($html, $config);
}
/**
* @return mixed
*/
function getHTMLPurifierTikiConfig()
{
global $tikipath, $prefs;
$directory = $tikipath . 'temp/cache/HTMLPurifierCache';
if (! is_dir($directory)) {
if (! mkdir($directory)) {
$directory = $tikipath . 'temp/cache';
} else {
chmod(
$directory,
(int)$prefs['smarty_cache_perms'] | 0111 // Add search/execute permission for all ("chmod a+x"). "--x--x--x" is 0111 (octal).
);
}
}
$conf = HTMLPurifier_Config::createDefault();
$conf->set('Cache.SerializerPath', $directory);
if ($prefs['feature_wysiwyg'] == 'y' || $prefs['popupLinks'] == 'y') {
$conf->set('HTML.DefinitionID', 'allow target');
$conf->set('HTML.DefinitionRev', 1);
$conf->set('Attr.EnableID', 1);
$conf->set('HTML.Doctype', 'XHTML 1.0 Transitional');
$conf->set('HTML.TidyLevel', 'light');
if ($def = $conf->maybeGetRawHTMLDefinition()) {
$def->addAttribute('a', 'target', 'Enum#_blank,_self,_target,_top');
$def->addAttribute('a', 'name', 'CDATA');
// Add usemap attribute to img tag
$def->addAttribute('img', 'usemap', 'CDATA');
// rel attribute for anchors
$def->addAttribute('a', 'rel', 'CDATA');
// Add map tag
$map = $def->addElement(
'map', // name
'Block', // content set
'Flow', // allowed children
'Common', // attribute collection
[ // attributes
'name' => 'CDATA',
'id' => 'ID',
'title' => 'CDATA',
]
);
$map->excludes = ['map' => true];
// Add area tag
$area = $def->addElement(
'area', // name
'Block', // content set
'Empty', // don't allow children
'Common', // attribute collection
[ // attributes
'name' => 'CDATA',
'id' => 'ID',
'alt' => 'Text',
'coords' => 'CDATA',
'accesskey' => 'Character',
'nohref' => new HTMLPurifier_AttrDef_Enum(['nohref']),
'href' => 'URI',
'shape' => new HTMLPurifier_AttrDef_Enum(['rect','circle','poly','default']),
'tabindex' => 'Number',
'target' => new HTMLPurifier_AttrDef_Enum(['_blank','_self','_target','_top'])
]
);
$area->excludes = ['area' => true];
}
}
return $conf;
}