MDL-11561 improved text filter cache resetting when settings change; fixed bug causing fatal errors if html purifier enabled during upgrade; merged from MOODLE_19_STABLE

This commit is contained in:
skodak
2007-12-25 10:03:59 +00:00
parent 7e7d4d3dbd
commit 109e3cb281
7 changed files with 41 additions and 23 deletions
+3
View File
@@ -51,6 +51,9 @@
set_config($name, stripslashes($value));
}
}
reset_text_filters_cache();
redirect($returnurl);
exit;
}
+2 -1
View File
@@ -94,8 +94,9 @@
break;
}
// save and return
// save, reset cache and return
set_config('textfilters', implode(',', $activefilters));
reset_text_filters_cache();
redirect($returnurl);
?>
+3 -1
View File
@@ -8,7 +8,9 @@ if ($hassiteconfig) { // speedup for non-admins, add all caps used on this page
$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);
+14 -9
View File
@@ -68,9 +68,10 @@ if ($hassiteconfig) {
// "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),
@@ -90,13 +91,17 @@ if ($hassiteconfig) {
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);
+2
View File
@@ -53,6 +53,8 @@ function tex_filter_get_cmd($pathname, $texexp) {
*/
function filter_tex_updatedcallback($name) {
global $CFG;
reset_text_filters_cache();
if (file_exists("$CFG->dataroot/filter/tex")) {
remove_dir("$CFG->dataroot/filter/tex");
}
-9
View File
@@ -1598,15 +1598,6 @@ class admin_setting {
}
}
/**
* Dummy settings class - workaround for keeping empty categories visible
*/
class admin_setting_dummy extends admin_setting {
function admin_setting_dummy() {
parent::admin_setting('dummy', 'dummy', 'dummy', NULL);
}
}
/**
* No setting - just heading and text.
*/
+17 -3
View File
@@ -1580,6 +1580,17 @@ function text_format_name( $key ) {
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
@@ -1925,15 +1936,18 @@ function clean_text($text, $format=FORMAT_MOODLE) {
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);
}