/**
 * 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();
}
Exemple #2
0
 /**
  * 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);
 }
Exemple #3
0
 /**
  * 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();