$temp = new admin_settingpage('experimental', get_string('experimental', 'admin'));
$temp->add(new admin_setting_configcheckbox('enableglobalsearch', get_string('enableglobalsearch', 'admin'), get_string('configenableglobalsearch', 'admin'), 0));
$temp->add(new admin_setting_configcheckbox('smartpix', get_string('smartpix', 'admin'), get_string('configsmartpix', 'admin'), 0));
- $temp->add(new admin_setting_configcheckbox('enablehtmlpurifier', get_string('enablehtmlpurifier', 'admin'), get_string('configenablehtmlpurifier', 'admin'), 0));
+ $item = new admin_setting_configcheckbox('enablehtmlpurifier', get_string('enablehtmlpurifier', 'admin'), get_string('configenablehtmlpurifier', 'admin'), 0);
+ $item->set_updatedcallback('reset_text_filters_cache');
+ $temp->add($item);
$temp->add(new admin_setting_configcheckbox('enablegroupings', get_string('enablegroupings', 'admin'), get_string('configenablegroupings', 'admin'), 0));
$ADMIN->add('misc', $temp);
// "filtersettings" settingpage
$temp = new admin_settingpage('managefilters', get_string('filtersettings', 'admin'));
if ($ADMIN->fulltree) {
- $temp->add(new admin_setting_managefilters());
- $temp->add(new admin_setting_heading('managefilterscommonheading', get_string('commonsettings', 'admin'), ''));
- $temp->add(new admin_setting_configselect('cachetext', get_string('cachetext', 'admin'), get_string('configcachetext', 'admin'), 60, array(604800 => get_string('numdays','',7),
+ $items = array();
+ $items[] = new admin_setting_managefilters();
+ $items[] = new admin_setting_heading('managefilterscommonheading', get_string('commonsettings', 'admin'), '');
+ $items[] = new admin_setting_configselect('cachetext', get_string('cachetext', 'admin'), get_string('configcachetext', 'admin'), 60, array(604800 => get_string('numdays','',7),
86400 => get_string('numdays','',1),
43200 => get_string('numhours','',12),
10800 => get_string('numhours','',3),
120 => get_string('numminutes','',2),
60 => get_string('numminutes','',1),
30 => get_string('numseconds','',30),
- 0 => get_string('no'))));
- $temp->add(new admin_setting_configselect('filteruploadedfiles', get_string('filteruploadedfiles', 'admin'), get_string('configfilteruploadedfiles', 'admin'), 0, array('0' => get_string('none'),
+ 0 => get_string('no')));
+ $items[] = new admin_setting_configselect('filteruploadedfiles', get_string('filteruploadedfiles', 'admin'), get_string('configfilteruploadedfiles', 'admin'), 0, array('0' => get_string('none'),
'1' => get_string('allfiles'),
- '2' => get_string('htmlfilesonly'))));
- $temp->add(new admin_setting_configcheckbox('filtermatchoneperpage', get_string('filtermatchoneperpage', 'admin'), get_string('configfiltermatchoneperpage', 'admin'), 0));
- $temp->add(new admin_setting_configcheckbox('filtermatchonepertext', get_string('filtermatchonepertext', 'admin'), get_string('configfiltermatchonepertext', 'admin'), 0));
- $temp->add(new admin_setting_configcheckbox('filterall', get_string('filterall', 'admin'), get_string('configfilterall', 'admin'), 0));
+ '2' => get_string('htmlfilesonly')));
+ $items[] = new admin_setting_configcheckbox('filtermatchoneperpage', get_string('filtermatchoneperpage', 'admin'), get_string('configfiltermatchoneperpage', 'admin'), 0);
+ $items[] = new admin_setting_configcheckbox('filtermatchonepertext', get_string('filtermatchonepertext', 'admin'), get_string('configfiltermatchonepertext', 'admin'), 0);
+ $items[] = new admin_setting_configcheckbox('filterall', get_string('filterall', 'admin'), get_string('configfilterall', 'admin'), 0);
+ foreach ($items as $item) {
+ $item->set_updatedcallback('reset_text_filters_cache');
+ $temp->add($item);
+ }
}
$ADMIN->add('filtersettings', $temp);
return $value;
}
+/**
+ * Resets all data related to filters, called during upgrade or when filter settings change.
+ * @return void
+ */
+function reset_text_filters_cache() {
+ global $CFG;
+
+ delete_records('cache_text');
+ $purifdir = $CFG->dataroot.'/cache/htmlpurifier';
+ remove_dir($purifdir, true);
+}
/** Given a simple string, this function returns the string
* processed by enabled string filters if $CFG->filterall is enabled
function purify_html($text) {
global $CFG;
+ // this can not be done only once because we sometimes need to reset the cache
+ $cachedir = $CFG->dataroot.'/cache/htmlpurifier/';
+ $status = check_dir_exists($cachedir, true, true);
+
static $purifier = false;
- if (!$purifier) {
- make_upload_directory('cache/htmlpurifier', false);
+ if ($purifier === false) {
require_once $CFG->libdir.'/htmlpurifier/HTMLPurifier.auto.php';
$config = HTMLPurifier_Config::createDefault();
$config->set('Core', 'AcceptFullDocuments', false);
$config->set('Core', 'Encoding', 'UTF-8');
$config->set('HTML', 'Doctype', 'XHTML 1.0 Transitional');
- $config->set('Cache', 'SerializerPath', $CFG->dataroot.'/cache/htmlpurifier');
+ $config->set('Cache', 'SerializerPath', $cachedir);
$config->set('URI', 'AllowedSchemes', array('http'=>1, 'https'=>1, 'ftp'=>1, 'irc'=>1, 'nntp'=>1, 'news'=>1, 'rtsp'=>1, 'teamspeak'=>1, 'gopher'=>1, 'mms'=>1));
$purifier = new HTMLPurifier($config);
}