/** * Set the global activated state for a text filter. * * @param string $filtername The filter name, for example 'tex'. * @param int $state One of the values TEXTFILTER_ON, TEXTFILTER_OFF or TEXTFILTER_DISABLED. * @param int $move -1 means up, 0 means the same, 1 means down */ function filter_set_global_state($filtername, $state, $move = 0) { global $DB; // Check requested state is valid. if (!in_array($state, array(TEXTFILTER_ON, TEXTFILTER_OFF, TEXTFILTER_DISABLED))) { throw new coding_exception("Illegal option '{$state}' passed to filter_set_global_state. " . "Must be one of TEXTFILTER_ON, TEXTFILTER_OFF or TEXTFILTER_DISABLED."); } if ($move > 0) { $move = 1; } else { if ($move < 0) { $move = -1; } } if (strpos($filtername, 'filter/') === 0) { //debugging("Old filtername '$filtername' parameter used in filter_set_global_state()", DEBUG_DEVELOPER); $filtername = substr($filtername, 7); } else { if (strpos($filtername, '/') !== false) { throw new coding_exception("Invalid filter name '{$filtername}' used in filter_set_global_state()"); } } $transaction = $DB->start_delegated_transaction(); $syscontext = context_system::instance(); $filters = $DB->get_records('filter_active', array('contextid' => $syscontext->id), 'sortorder ASC'); $on = array(); $off = array(); foreach ($filters as $f) { if ($f->active == TEXTFILTER_DISABLED) { $off[$f->filter] = $f; } else { $on[$f->filter] = $f; } } // Update the state or add new record. if (isset($on[$filtername])) { $filter = $on[$filtername]; if ($filter->active != $state) { add_to_config_log('filter_active', $filter->active, $state, $filtername); $filter->active = $state; $DB->update_record('filter_active', $filter); if ($filter->active == TEXTFILTER_DISABLED) { unset($on[$filtername]); $off = array($filter->filter => $filter) + $off; } } } else { if (isset($off[$filtername])) { $filter = $off[$filtername]; if ($filter->active != $state) { add_to_config_log('filter_active', $filter->active, $state, $filtername); $filter->active = $state; $DB->update_record('filter_active', $filter); if ($filter->active != TEXTFILTER_DISABLED) { unset($off[$filtername]); $on[$filter->filter] = $filter; } } } else { add_to_config_log('filter_active', '', $state, $filtername); $filter = new stdClass(); $filter->filter = $filtername; $filter->contextid = $syscontext->id; $filter->active = $state; $filter->sortorder = 99999; $filter->id = $DB->insert_record('filter_active', $filter); $filters[$filter->id] = $filter; if ($state == TEXTFILTER_DISABLED) { $off[$filter->filter] = $filter; } else { $on[$filter->filter] = $filter; } } } // Move only active. if ($move != 0 and isset($on[$filter->filter])) { $i = 1; foreach ($on as $f) { $f->newsortorder = $i; $i++; } $filter->newsortorder = $filter->newsortorder + $move; foreach ($on as $f) { if ($f->id == $filter->id) { continue; } if ($f->newsortorder == $filter->newsortorder) { if ($move == 1) { $f->newsortorder = $f->newsortorder - 1; } else { $f->newsortorder = $f->newsortorder + 1; } } } core_collator::asort_objects_by_property($on, 'newsortorder', core_collator::SORT_NUMERIC); } // Inactive are sorted by filter name. core_collator::asort_objects_by_property($off, 'filter', core_collator::SORT_NATURAL); // Update records if necessary. $i = 1; foreach ($on as $f) { if ($f->sortorder != $i) { $DB->set_field('filter_active', 'sortorder', $i, array('id' => $f->id)); } $i++; } foreach ($off as $f) { if ($f->sortorder != $i) { $DB->set_field('filter_active', 'sortorder', $i, array('id' => $f->id)); } $i++; } $transaction->allow_commit(); }
/** * Log config changes if necessary. * @param string $name * @param string $oldvalue * @param string $value */ protected function add_to_config_log($name, $oldvalue, $value) { add_to_config_log($name, $oldvalue, $value, $this->plugin); }
/** * Make this block type deletable and addable. * * @param mixed $blockidorname string or int */ public static function unprotect_block($blockidorname) { global $DB; $syscontext = context_system::instance(); require_capability('moodle/site:config', $syscontext); $block = false; if (is_int($blockidorname)) { $block = $DB->get_record('block', array('id' => $blockidorname), 'id, name', MUST_EXIST); } else { $block = $DB->get_record('block', array('name' => $blockidorname), 'id, name', MUST_EXIST); } $undeletableblocktypes = self::get_undeletable_block_types(); if (in_array($block->name, $undeletableblocktypes)) { $undeletableblocktypes = array_diff($undeletableblocktypes, array($block->name)); set_config('undeletableblocktypes', implode(',', $undeletableblocktypes)); add_to_config_log('block_protect', "1", "0", $block->name); } }
/** * Used to set a config pair and log change * * @param string $name * @param mixed $value Gets converted to string if not null * @return bool Write setting to config table */ public function config_write($name, $value) { global $DB, $USER, $CFG; if ($this->nosave) { return true; } // make sure it is a real change $oldvalue = get_config($this->plugin, $name); $oldvalue = $oldvalue === false ? null : $oldvalue; // normalise $value = is_null($value) ? null : (string) $value; if ($oldvalue === $value) { return true; } // store change set_config($name, $value, $this->plugin); // Some admin settings affect course modinfo if ($this->affectsmodinfo) { // Clear course cache for all courses rebuild_course_cache(0, true); } add_to_config_log($name, $oldvalue, $value, $this->plugin); return true; // BC only }
print_error('blockdoesnotexist', 'error'); } $DB->set_field('block', 'visible', '0', array('id' => $block->id)); // Hide block add_to_config_log('block_visibility', $block->visible, '0', $block->name); core_plugin_manager::reset_caches(); admin_get_root(true, false); // settings not required - only pages } if (!empty($show) && confirm_sesskey()) { if (!($block = $DB->get_record('block', array('id' => $show)))) { print_error('blockdoesnotexist', 'error'); } $DB->set_field('block', 'visible', '1', array('id' => $block->id)); // Show block add_to_config_log('block_visibility', $block->visible, '1', $block->name); core_plugin_manager::reset_caches(); admin_get_root(true, false); // settings not required - only pages } if (!empty($protect) && confirm_sesskey()) { block_manager::protect_block((int) $protect); admin_get_root(true, false); // settings not required - only pages } if (!empty($unprotect) && confirm_sesskey()) { block_manager::unprotect_block((int) $unprotect); admin_get_root(true, false); // settings not required - only pages } $undeletableblocktypes = block_manager::get_undeletable_block_types();