From c07e6d8da5cdc46782467d8180b23925012c70c8 Mon Sep 17 00:00:00 2001 From: tjhunt Date: Mon, 13 Apr 2009 06:51:45 +0000 Subject: [PATCH] filters: MDL-7336 upgrade $CFG->textfilters into filter_active table. --- lib/db/upgrade.php | 24 +++++++++++++ lib/filterlib.php | 90 ++++++++++++++++++++++++++++++++++++++++++++++ version.php | 2 +- 3 files changed, 115 insertions(+), 1 deletion(-) diff --git a/lib/db/upgrade.php b/lib/db/upgrade.php index 09541c8cc1..c7cc88996d 100644 --- a/lib/db/upgrade.php +++ b/lib/db/upgrade.php @@ -1599,6 +1599,30 @@ WHERE gradeitemid IS NOT NULL AND grademax IS NOT NULL"); upgrade_main_savepoint($result, 2009040301); } + if ($result && $oldversion < 2009040302) { + /// Transfer current settings from $CFG->textfilters + $disabledfilters = filter_get_all_installed(); + if (empty($CFG->textfilters)) { + $activefilters = array(); + } else { + $activefilters = explode(',', $CFG->textfilters); + } + $syscontext = get_context_instance(CONTEXT_SYSTEM); + $sortorder = 1; + foreach ($activefilters as $filter) { + filter_set_global_state($filter, TEXTFILTER_ON, $sortorder); + $sortorder += 1; + unset($disabledfilters[$filter]); + } + foreach ($disabledfilters as $filter => $notused) { + filter_set_global_state($filter, TEXTFILTER_DISABLED, $sortorder); + $sortorder += 1; + } + + /// Main savepoint reached + upgrade_main_savepoint($result, 2009040302); + } + return $result; } diff --git a/lib/filterlib.php b/lib/filterlib.php index 74f203fed8..207da17b7f 100644 --- a/lib/filterlib.php +++ b/lib/filterlib.php @@ -1,6 +1,13 @@ $DB->get_field('filter_active', 'MAX(sortorder)', array()) + 1) { + throw new coding_exception("Invalid sort order passed to filter_set_global_state."); + } + } + + // See if there is an existing record. + $syscontext = get_context_instance(CONTEXT_SYSTEM); + $rec = $DB->get_record('filter_active', array('filter' => $filter, 'contextid' => $syscontext->id)); + if (empty($rec)) { + $insert = true; + $rec = new stdClass; + $rec->filter = $filter; + $rec->contextid = $syscontext->id; + } else { + $insert = false; + if ($sortorder === false && !($rec->active == TEXTFILTER_DISABLED xor $state == TEXTFILTER_DISABLED)) { + $sortorder = $rec->sortorder; + } + } + + // Automatic sort order. + if ($sortorder === false) { + if ($state == TEXTFILTER_DISABLED) { + $prevmaxsortorder = $DB->get_field('filter_active', 'MAX(sortorder)', array()); + } else { + $prevmaxsortorder = $DB->get_field_select('filter_active', 'MAX(sortorder)', 'active <> ?', array(TEXTFILTER_DISABLED)); + } + if (empty($prevmaxsortorder)) { + $sortorder = 1; + } else { + $sortorder = $prevmaxsortorder + 1; + if (!$insert && $state == TEXTFILTER_DISABLED) { + $sortorder = $prevmaxsortorder; + } + } + } + + // Move any existing records out of the way of the sortorder. + if ($insert) { + $DB->execute('UPDATE {filter_active} SET sortorder = sortorder + 1 WHERE sortorder >= ?', array($sortorder)); + } else if ($sortorder != $rec->sortorder) { + $sparesortorder = $DB->get_field('filter_active', 'MIN(sortorder)', array()) - 1; + $DB->set_field('filter_active', 'sortorder', $sparesortorder, array('filter' => $filter, 'contextid' => $syscontext->id)); + if ($sortorder < $rec->sortorder) { + $DB->execute('UPDATE {filter_active} SET sortorder = sortorder + 1 WHERE sortorder >= ? AND sortorder < ?', + array($sortorder, $rec->sortorder)); + } else if ($sortorder > $rec->sortorder) { + $DB->execute('UPDATE {filter_active} SET sortorder = sortorder - 1 WHERE sortorder <= ? AND sortorder > ?', + array($sortorder, $rec->sortorder)); + } + } + + // Insert/update the new record. + $rec->active = $state; + $rec->sortorder = $sortorder; + if ($insert) { + $DB->insert_record('filter_active', $rec); + } else { + $DB->update_record('filter_active', $rec); + } +} + /** * Process phrases intelligently found within a HTML text (such as adding links) * diff --git a/version.php b/version.php index 97942affeb..e471904093 100644 --- a/version.php +++ b/version.php @@ -6,7 +6,7 @@ // This is compared against the values stored in the database to determine // whether upgrades should be performed (see lib/db/*.php) - $version = 2009040301; // YYYYMMDD = date of the last version bump + $version = 2009040302; // YYYYMMDD = date of the last version bump // XX = daily increments $release = '2.0 dev (Build: 20090413)'; // Human-friendly version name -- 2.39.5