/** * Save the new settings passed in $data * * @todo Add vartype handling to ensure $data is array * @param array $data Associative array of value=>xx, forced=>xx, adv=>xx * @return string empty or error message */ public function write_setting($data) { global $CFG; $value = $data['value']; $forced = empty($data['forced']) ? 0 : 1; $adv = empty($data['adv']) ? 0 : 2; $flag = $forced | $adv; //bitwise or if (!in_array($value, array_keys($this->choices))) { return 'Error setting '; } $oldvalue = $this->config_read($this->name); $oldflag = (int) $this->config_read($this->name . '_flag'); $oldforced = 1 & $oldflag; // first bit $result1 = $this->config_write($this->name, $value); $result2 = $this->config_write($this->name . '_flag', $flag); // force regrade if needed if ($oldforced != $forced or $forced and $value != $oldvalue) { require_once $CFG->libdir . '/gradelib.php'; grade_category::updated_forced_settings(); } if ($result1 and $result2) { return ''; } else { return get_string('errorsetting', 'admin'); } }