dirroot . '/backup/lib.php'); //--------------------------------------------------------------------------------------------------- // Interfaces //--------------------------------------------------------------------------------------------------- // part_of_admin_tree indicates that a node (whether it be an admin_settingpage or an // admin_category or an admin_externalpage) is searchable interface part_of_admin_tree { function &locate($name); function check_access(); function path($name, $path = array()); } // parentable_part_of_admin_tree indicates that a node can have children in the hierarchy. only // admin_category implements this interface (yes, yes, theoretically admin_setting* is a child of // admin_settingpage, but you can't navigate admin_setting*s through the hierarchy) interface parentable_part_of_admin_tree { function add($destinationname, &$something); } //--------------------------------------------------------------------------------------------------- // Classes //--------------------------------------------------------------------------------------------------- // admin categories don't handle much... they can't be printed to the screen (except as a hierarchy), and when we // check_access() to a category, we're actually just checking if any of its children are accessible class admin_category implements part_of_admin_tree, parentable_part_of_admin_tree { var $children; var $name; var $visiblename; function admin_category($name, $visiblename) { $this->children = array(); $this->name = $name; $this->visiblename = $visiblename; } function path($name, $path = array()) { $path[count($path)] = $this->name; if ($this->name == $name) { return $path; } foreach($this->children as $child) { if ($return = $child->path($name, $path)) { return $return; } } return NULL; } function &locate($name) { if ($this->name == $name) { return $this; } foreach($this->children as $child) { if ($return =& $child->locate($name)) { return $return; } } $return = NULL; return $return; } function add($destinationname, &$something, $precedence = '') { if (!($something instanceof part_of_admin_tree)) { return false; } if ($destinationname == $this->name) { if ($precedence === '') { $this->children[] = $something; } else { if (isset($this->children[$precedence])) { // this should never, ever be triggered in a release version of moodle. echo ('There is a precedence conflict in the category ' . $this->name . '. The object named ' . $something->name . ' is overwriting the object named ' . $this->children[$precedence]->name . '.
'); } $this->children[$precedence] = $something; } return true; } foreach($this->children as $child) { if ($child instanceof parentable_part_of_admin_tree) { if ($child->add($destinationname, $something, $precedence)) { return true; } } } return false; } function check_access() { $return = false; foreach ($this->children as $child) { $return = $return || $child->check_access(); } return $return; } } // this is the class we use to add an external page to the admin hierarchy. on the // external page (if you'd like), do the following for a consistent look & feel: // -require_once admin/adminlib.php // -start the page with a call to admin_externalpage_setup($name) // -use admin_externalpage_print_header() to print the header & blocks // -use admin_externalpage_print_footer() to print the footer class admin_externalpage implements part_of_admin_tree { var $name; var $visiblename; var $url; var $role; function admin_externalpage($name, $visiblename, $url, $role = 'moodle/legacy:admin') { $this->name = $name; $this->visiblename = $visiblename; $this->url = $url; $this->role = $role; } function path($name, $path = array()) { if ($name == $this->name) { array_push($path, $this->name); return $path; } else { return NULL; } } function &locate($name) { $return = ($this->name == $name ? $this : NULL); return $return; } function check_access() { $context = get_context_instance(CONTEXT_SYSTEM, SITEID); return has_capability($this->role, $context); } } // authentication happens at this level // an admin_settingpage is a LEAF of the admin_tree, it can't have children. it only contains // an array of admin_settings that can be printed out onto a webpage class admin_settingpage implements part_of_admin_tree { var $name; var $visiblename; var $settings; var $role; function path($name, $path = array()) { if ($name == $this->name) { array_push($path, $this->name); return $path; } else { return NULL; } } function &locate($name) { $return = ($this->name == $name ? $this : NULL); return $return; } function admin_settingpage($name, $visiblename, $role = 'moodle/legacy:admin') { $this->settings = new stdClass(); $this->name = $name; $this->visiblename = $visiblename; $this->role = $role; } function add(&$setting) { if ($setting instanceof admin_setting) { $temp = $setting->name; $this->settings->$temp =& $setting; return true; } return false; } function check_access() { $context = get_context_instance(CONTEXT_SYSTEM, SITEID); return has_capability($this->role, $context); } function output_html() { $return = '' . "\n"; foreach($this->settings as $setting) { $return .= $setting->output_html(); } $return .= '
'; return $return; } // return '' (empty string) for successful write, otherwise return language-specific error function write_settings($data) { $return = ''; foreach($this->settings as $setting) { $return .= $setting->write_setting($data['s_' . $setting->name]); } return $return; } } // read & write happens at this level; no authentication class admin_setting { var $name; var $visiblename; var $description; var $data; function admin_setting($name, $visiblename, $description) { $this->name = $name; $this->visiblename = $visiblename; $this->description = $description; } function get_setting() { return; // has to be overridden } function write_setting($data) { return; // has to be overridden } function output_html() { return; // has to be overridden } } class admin_setting_configtext extends admin_setting { var $paramtype; function admin_setting_configtext($name, $visiblename, $description, $paramtype = 'PARAM_RAW') { $this->paramtype = $paramtype; parent::admin_setting($name, $visiblename, $description); } function get_setting() { global $CFG; $temp = $this->name; // there's gotta be a more elegant way return $CFG->$temp; // of doing this } function write_setting($data) { $data = clean_param($data, $this->paramtype); return (set_config($this->name,$data) ? '' : 'Error setting ' . $this->visiblename . '
'); } function output_html() { return '' . $this->visiblename . '' . '' . ' ' . $this->description . ''; } } class admin_setting_configcheckbox extends admin_setting { function get_setting() { global $CFG; $temp = $this->name; // there's gotta be a more elegant way return $CFG->$temp; // of doing this } function write_setting($data) { if ($data == '1') { return (set_config($this->name,1) ? '' : 'Error setting ' . $this->visiblename . '
'); } else { return (set_config($this->name,0) ? '' : 'Error setting ' . $this->visiblename . '
'); } } function output_html() { return '' . $this->visiblename . '' . 'get_setting() == true ? 'checked="checked"' : '') . ' />' . ' ' . $this->description . ''; } } class admin_setting_configselect extends admin_setting { var $choices; function admin_setting_configselect($name, $visiblename, $description, $choices) { $this->choices = $choices; parent::admin_setting($name, $visiblename, $description); } function get_setting() { global $CFG; $temp = $this->name; return $CFG->$temp; } function write_setting($data) { // check that what we got was in the original choices if (! in_array($data, array_keys($this->choices))) { return 'Error setting ' . $this->visiblename . '
'; } return (set_config($this->name, $data) ? '' : 'Error setting ' . $this->visiblename . '
'); } function output_html() { $return = '' . $this->visiblename . ' ' . $this->description . ''; return $return; } } // this is a liiitle bit messy. we're using two selects, but we're returning them as an array named after $name (so we only use $name2 // internally for the setting) class admin_setting_configtime extends admin_setting { var $name2; var $choices; var $choices2; function admin_setting_configtime($hoursname, $minutesname, $visiblename, $description) { $this->name2 = $minutesname; $this->choices = array(); for ($i = 0; $i < 24; $i++) { $this->choices[$i] = $i; } $this->choices2 = array(); for ($i = 0; $i < 60; $i += 5) { $this->choices2[$i] = $i; } parent::admin_setting($hoursname, $visiblename, $description); } function get_setting() { global $CFG; $temp = $this->name; $temp2 = $this->name2; return array((empty($CFG->$temp) ? 0 : $CFG->$temp), (empty($CFG->$temp2) ? 0 : $CFG->$temp2)); } function write_setting($data) { // check that what we got was in the original choices if (!(in_array($data['h'], array_keys($this->choices)) && in_array($data['m'], array_keys($this->choices2)))) { return 'Error setting ' . $this->visiblename . '
'; } return (set_config($this->name, $data['h']) && set_config($this->name2, $data['m']) ? '' : 'Error setting ' . $this->visiblename . '
'); } function output_html() { $setvalue = $this->get_setting(); $return = '' . $this->visiblename . '    ' . $this->description . ''; return $return; } } class admin_setting_configmultiselect extends admin_setting_configselect { function get_setting() { global $CFG; $temp = $this->name; return explode(',', $CFG->$temp); } function write_setting($data) { foreach ($data as $datum) { if (! in_array($datum, array_keys($this->choices))) { return 'Error setting ' . $this->visiblename . '
'; } } return (set_config($this->name, implode(',',$data)) ? '' : 'Error setting ' . $this->visiblename . '
'); } function output_html() { $return = '' . $this->visiblename . ' ' . $this->description . ''; return $return; } } class admin_setting_special_adminseesall extends admin_setting_configcheckbox { function admin_setting_special_adminseesall() { $name = 'calendar_adminseesall'; $visiblename = get_string('adminseesall', 'admin'); $description = get_string('helpadminseesall', 'admin'); parent::admin_setting_configcheckbox($name, $visiblename, $description); } function write_setting($data) { global $SESSION; unset($SESSION->cal_courses_shown); parent::write_setting($data); } } class admin_setting_sitesetselect extends admin_setting_configselect { var $id; function admin_setting_sitesetselect($name, $visiblename, $description, $choices) { $site = get_site(); $this->id = $site->id; parent::admin_setting_configselect($name, $visiblename, $description, $choices); } function get_setting() { $site = get_site(); $temp = $this->name; return $site->$temp; } function write_setting($data) { if (!in_array($data, array_keys($this->choices))) { return 'Error setting ' . $this->visiblename . '
'; } $record = new stdClass(); $record->id = $this->id; $temp = $this->name; $record->$temp = $data; $record->timemodified = time(); return (update_record('course', $record) ? '' : 'Error setting ' . $this->visiblename . '
'); } } class admin_setting_special_frontpage extends admin_setting_configselect { function admin_setting_special_frontpage($loggedin = false) { global $CFG; require_once($CFG->dirroot . '/course/lib.php'); $name = 'frontpage' . ($loggedin ? 'loggedin' : ''); $visiblename = get_string('frontpage' . ($loggedin ? 'loggedin' : ''),'admin'); $description = get_string('configfrontpage' . ($loggedin ? 'loggedin' : ''),'admin'); $choices = array(FRONTPAGENEWS => get_string('frontpagenews'), FRONTPAGECOURSELIST => get_string('frontpagecourselist'), FRONTPAGECATEGORYNAMES => get_string('frontpagecategorynames'), FRONTPAGECATEGORYCOMBO => get_string('frontpagecategorycombo'), '' => get_string('none')); if (count_records("course") > FRONTPAGECOURSELIMIT) { unset($choices[FRONTPAGECOURSELIST]); } parent::admin_setting_configselect($name, $visiblename, $description, $choices); } function get_setting() { global $CFG; $temp = $this->name; return (explode(',', $CFG->$temp)); } function write_setting($data) { if (empty($data)) { $data = array(); } foreach($data as $datum) { if (! in_array($datum, array_keys($this->choices))) { return 'Error setting ' . $this->visiblename . '
'; } } return (set_config($this->name, implode(',', $data)) ? '' : 'Error setting ' . $this->visiblename . '
'); } function output_html() { $currentsetting = $this->get_setting(); $return = '' . $this->visiblename . ''; for ($i = 0; $i < count($this->choices) - 1; $i++) { $return .=''; if ($i !== count($this->choices) - 2) { $return .= '  ' . get_string('then') . '  '; } } $return .= ' ' . $this->description . ''; return $return; } } class admin_setting_sitesetcheckbox extends admin_setting_configcheckbox { var $id; function admin_setting_sitesetcheckbox($name, $visiblename, $description) { $site = get_site(); $this->id = $site->id; parent::admin_setting_configcheckbox($name, $visiblename, $description); } function get_setting() { $site = get_site(); $temp = $this->name; return ($site->$temp == '1' ? 1 : 0); } function write_setting($data) { $record = new stdClass(); $record->id = $this->id; $temp = $this->name; $record->$temp = ($data == '1' ? 1 : 0); $record->timemodified = time(); return (update_record('course', $record) ? '' : 'Error setting ' . $this->visiblename . '
'); } } class admin_setting_sitesettext extends admin_setting_configtext { var $id; function admin_setting_sitesettext($name, $visiblename, $description) { $site = get_site(); $this->id = $site->id; parent::admin_setting_configtext($name, $visiblename, $description); } function get_setting() { $site = get_site(); $temp = $this->name; return $site->$temp; } function write_setting($data) { $record = new stdClass(); $record->id = $this->id; $temp = $this->name; $record->$temp = $data; $record->timemodified = time(); return (update_record('course', $record) ? '' : 'Error setting ' . $this->visiblename . '
'); } } class admin_setting_special_frontpagedesc extends admin_setting { var $id; function admin_setting_special_frontpagedesc() { $site = get_site(); $this->id = $site->id; $name = 'summary'; $visiblename = get_string('frontpagedescription'); $description = get_string('frontpagedescriptionhelp'); parent::admin_setting($name, $visiblename, $description); } function output_html() { $usehtmleditor = can_use_html_editor(); $return = '' . $this->visiblename . '' . ''; ob_start(); // double-check the number of columns below... might overrun some screen resolutions print_textarea($usehtmleditor, 20, 40, 0, 0, 's_' . $this->name, $this->get_setting()); if ($usehtmleditor) { use_html_editor(); } $return .= ob_get_contents(); ob_end_clean(); $return .= ' ' . $this->description . ''; return $return; } function get_setting() { $site = get_site(); $temp = $this->name; return ($site->$temp); } function write_setting($data) { $data = addslashes(clean_param($data, PARAM_CLEANHTML)); $record = new stdClass(); $record->id = $this->id; $temp = $this->name; $record->$temp = $data; $record->timemodified = time(); return(update_record('course', $record) ? '' : 'Error setting ' . $this->visiblename . '
'); } } class admin_setting_special_editorfontlist extends admin_setting { var $items; function admin_setting_special_editorfontlist() { global $CFG; $name = 'editorfontlist'; $visiblename = get_string('editorfontlist', 'admin'); $description = get_string('configeditorfontlist', 'admin'); $items = explode(';', $CFG->editorfontlist); $this->items = array(); foreach ($items as $item) { $item = explode(':', $item); $this->items[$item[0]] = $item[1]; } parent::admin_setting($name, $visiblename, $description); } function get_setting() { return $this->items; } function write_setting($data) { // there miiight be an easier way to do this :) $keys = array(); $values = array(); foreach ($data as $key => $value) { if (substr($key,0,1) == 'k') { $keys[substr($key,1)] = $value; } elseif (substr($key,0,1) == 'v') { $values[substr($key,1)] = $value; } } $result = ''; for ($i = 0; $i < count($keys); $i++) { if (($keys[$i] !== '') && ($values[$i] !== '')) { $result .= $keys[$i] . ':' . $values[$i] . ';'; } } $result = substr($result, 0, -1); // trim the last semicolon return (set_config($this->name, $result) ? '' : 'Error setting ' . $this->visiblename . '
'); } function output_html() { $return = '' . $this->visiblename . ''; $count = 0; foreach ($this->items as $key => $value) { $return .= ''; $return .= '  '; $return .= '
'; $count++; } $return .= ''; $return .= '  '; $return .= '
'; $return .= ''; $return .= '  '; $return .= ''; $return .= ' ' . $this->description . ''; return $return; } } class admin_setting_special_editordictionary extends admin_setting_configselect { function admin_setting_special_editordictionary() { $name = 'editordictionary'; $visiblename = get_string('editordictionary','admin'); $description = get_string('configeditordictionary', 'admin'); $choices = $this->editor_get_dictionaries(); if (! is_array($choices)) { $choices = array(''); } parent::admin_setting_configselect($name, $visiblename, $description, $choices); } // function borrowed from the old moodle/admin/editor.php, slightly modified function editor_get_dictionaries () { /// Get all installed dictionaries in the system global $CFG; // error_reporting(E_ALL); // for debug, final version shouldn't have this... clearstatcache(); // If aspellpath isn't set don't even bother ;-) if (empty($CFG->aspellpath)) { return 'Empty aspell path!'; } // Do we have access to popen function? if (!function_exists('popen')) { return 'Popen function disabled!'; } $cmd = $CFG->aspellpath; $output = ''; $dictionaries = array(); $dicts = array(); if(!($handle = @popen(escapeshellarg($cmd) .' dump dicts', 'r'))) { return 'Couldn\'t create handle!'; } while(!feof($handle)) { $output .= fread($handle, 1024); } @pclose($handle); $dictionaries = explode(chr(10), $output); // Get rid of possible empty values if (is_array($dictionaries)) { $cnt = count($dictionaries); for ($i = 0; $i < $cnt; $i++) { if (!empty($dictionaries[$i])) { $dicts[] = $dictionaries[$i]; } } } if (count($dicts) >= 1) { return $dicts; } return 'Error! Check your aspell installation!'; } } class admin_setting_special_editorhidebuttons extends admin_setting { var $name; var $visiblename; var $description; var $items; function admin_setting_special_editorhidebuttons() { $this->name = 'editorhidebuttons'; $this->visiblename = get_string('editorhidebuttons', 'admin'); $this->description = get_string('confeditorhidebuttons', 'admin'); // weird array... buttonname => buttonimage (assume proper path appended). if you leave buttomimage blank, text will be printed instead $this->items = array('fontname' => '', 'fontsize' => '', 'formatblock' => '', 'bold' => 'ed_format_bold.gif', 'italic' => 'ed_format_italic.gif', 'underline' => 'ed_format_underline.gif', 'strikethrough' => 'ed_format_strike.gif', 'subscript' => 'ed_format_sub.gif', 'superscript' => 'ed_format_sup.gif', 'copy' => 'ed_copy.gif', 'cut' => 'ed_cut.gif', 'paste' => 'ed_paste.gif', 'clean' => 'ed_wordclean.gif', 'undo' => 'ed_undo.gif', 'redo' => 'ed_redo.gif', 'justifyleft' => 'ed_align_left.gif', 'justifycenter' => 'ed_align_center.gif', 'justifyright' => 'ed_align_right.gif', 'justifyfull' => 'ed_align_justify.gif', 'lefttoright' => 'ed_left_to_right.gif', 'righttoleft' => 'ed_right_to_left.gif', 'insertorderedlist' => 'ed_list_num.gif', 'insertunorderedlist' => 'ed_list_bullet.gif', 'outdent' => 'ed_indent_less.gif', 'indent' => 'ed_indent_more.gif', 'forecolor' => 'ed_color_fg.gif', 'hilitecolor' => 'ed_color_bg.gif', 'inserthorizontalrule' => 'ed_hr.gif', 'createanchor' => 'ed_anchor.gif', 'createlink' => 'ed_link.gif', 'unlink' => 'ed_unlink.gif', 'insertimage' => 'ed_image.gif', 'inserttable' => 'insert_table.gif', 'insertsmile' => 'em.icon.smile.gif', 'insertchar' => 'icon_ins_char.gif', 'spellcheck' => 'spell-check.gif', 'htmlmode' => 'ed_html.gif', 'popupeditor' => 'fullscreen_maximize.gif', 'search_replace' => 'ed_replace.gif'); } function get_setting() { global $CFG; $temp = $this->name; return explode(' ', $CFG->$temp); } function write_setting($data) { $result = array(); if (empty($data)) { $data = array(); } foreach ($data as $key => $value) { if (!in_array($key, array_keys($this->items))) { return 'Error setting ' . $this->visiblename . '
'; } if ($value == '1') { $result[] = $key; } } return (set_config($this->name, implode(' ',$result)) ? '' : 'Error setting ' . $this->visiblename . '
'); } function output_html() { global $CFG; // checkboxes with input name="$this->name[$key]" value="1" // we do 15 fields per column $currentsetting = $this->get_setting(); $return = '' . $this->visiblename . ''; $return .= ''; $return .= '
'; $count = 0; foreach($this->items as $key => $value) { if ($count % 15 == 0) { $return .= ''; } $return .= ($value == '' ? get_string($key,'editor') : '' . get_string($key,'editor') . '') . ' '; $return .= '       '; $count++; if ($count % 15 != 0) { $return .= '

'; } } $return .= '
'; $return .= ' ' . $this->description . ''; return $return; } } class admin_setting_backupselect extends admin_setting_configselect { function get_setting() { $backup_config = backup_get_config(); // we need this function from backup/lib.php ... but it causes conflicts. ideas? $temp = $this->name; return (isset($backup_config->$temp) ? $backup_config->$temp : 0); // we default to false/0 if the pair doesn't exist } function write_setting($data) { // check that what we got was in the original choices if (! in_array($data, array_keys($this->choices))) { return 'Error setting ' . $this->visiblename . '
'; } return (backup_set_config($this->name, $data) ? '' : 'Error setting ' . $this->visiblename . '
'); } } class admin_setting_special_backupsaveto extends admin_setting_configtext { function admin_setting_special_backupsaveto() { $name = 'backup_sche_destination'; $visiblename = get_string('saveto'); $description = get_string('backupsavetohelp'); parent::admin_setting_configtext($name, $visiblename, $description); } function get_setting() { $backup_config = backup_get_config(); $temp = $this->name; return (isset($backup_config->$temp) ? $backup_config->$temp : ''); // we default to false/0 if the pair doesn't exist } function write_setting($data) { $data = clean_param($data, PARAM_PATH); if (!empty($data) and (substr($data,-1) == '/' or substr($data,-1) == '\\')) { return get_string('pathslasherror') . '
'; } else if (!empty($data) and !is_dir($data)) { return get_string('pathnotexists') . '
'; } return (backup_set_config($this->name, $data) ? '' : 'Error setting ' . $this->visiblename . '
'); } } class admin_setting_backupcheckbox extends admin_setting_configcheckbox { function write_setting($data) { if ($data == '1') { return (backup_set_config($this->name, 1) ? '' : 'Error setting ' . $this->visiblename . '
'); } else { return (backup_set_config($this->name, 0) ? '' : 'Error setting ' . $this->visiblename . '
'); } } function get_setting() { $backup_config = backup_get_config(); $temp = $this->name; return (isset($backup_config->$temp) ? $backup_config->$temp : 0); // we default to false if the pair doesn't exist } } class admin_setting_special_backuptime extends admin_setting_configtime { function admin_setting_special_backuptime() { $name = 'backup_sche_hour'; $name2 = 'backup_sche_minute'; $visiblename = get_string('executeat'); $description = get_string('backupexecuteathelp'); parent::admin_setting_configtime($name, $name2, $visiblename, $description); } function get_setting() { $backup_config = backup_get_config(); $temp = $this->name; $temp2 = $this->name2; return array(isset($backup_config->$temp) ? $backup_config->$temp : 0, isset($backup_config->$temp2) ? $backup_config->$temp2 : 0); // we default to 0:0 if the pair doesn't exist } function write_setting($data) { // check that what we got was in the original choices if (!(in_array($data['h'], array_keys($this->choices)) && in_array($data['m'], array_keys($this->choices2)))) { return 'Error setting ' . $this->visiblename . '
'; } return (backup_set_config($this->name, $data['h']) && backup_set_config($this->name2, $data['m']) ? '' : 'Error setting ' . $this->visiblename . '
'); } } class admin_setting_special_backupdays extends admin_setting { function admin_setting_special_backupdays() { $name = 'backup_sche_weekdays'; $visiblename = get_string('schedule'); $description = get_string('backupschedulehelp'); parent::admin_setting($name, $visiblename, $description); } function get_setting() { $backup_config = backup_get_config(); $temp = $this->name; return (isset($backup_config->$temp) ? $backup_config->$temp : '0000000'); } function output_html() { return '' . $this->visiblename . '' . '' . '' . '' . '' . '' . '' . '' . '' . '
  ' . get_string('sunday', 'calendar') . '  
  ' . get_string('monday', 'calendar') . '  
  ' . get_string('tuesday', 'calendar') . '  
  ' . get_string('wednesday', 'calendar') . '  
  ' . get_string('thursday', 'calendar') . '  
  ' . get_string('friday', 'calendar') . '  
  ' . get_string('saturday', 'calendar') . '  
get_setting(),0,1) == '1' ? 'checked="checked"' : '') . ' />
get_setting(),1,1) == '1' ? 'checked="checked"' : '') . ' />
get_setting(),2,1) == '1' ? 'checked="checked"' : '') . ' />
get_setting(),3,1) == '1' ? 'checked="checked"' : '') . ' />
get_setting(),4,1) == '1' ? 'checked="checked"' : '') . ' />
get_setting(),5,1) == '1' ? 'checked="checked"' : '') . ' />
get_setting(),6,1) == '1' ? 'checked="checked"' : '') . ' />
' . ' ' . $this->description . ''; } // we're using the array trick (see http://ca.php.net/manual/en/faq.html.php#faq.html.arrays) to get the data passed to use without having to modify // admin_settingpage (note that admin_settingpage only calls write_setting with the data that matches $this->name... so if we have multiple form fields, // they MUST go into an array named $this->name, or else we won't receive them here function write_setting($data) { $week = 'umtwrfs'; $result = array(0 => 0, 1 => 0, 2 => 0, 3 => 0, 4 => 0, 5 => 0, 6 => 0); foreach($data as $key => $value) { if ($value == '1') { $result[strpos($week, $key)] = 1; } } return (backup_set_config($this->name, implode('',$result)) ? '' : 'Error setting ' . $this->visiblename . '
'); } } class admin_setting_special_debug extends admin_setting_configcheckbox { function admin_setting_special_debug() { $name = 'debug'; $visiblename = get_string('debug', 'admin'); $description = get_string('configdebug', 'admin'); parent::admin_setting_configcheckbox($name, $visiblename, $description); } function write_setting($data) { if ($data == '1') { return (set_config($this->name,15) ? '' : 'Error setting ' . $this->visiblename . '
'); } else { return (set_config($this->name,7) ? '' : 'Error setting ' . $this->visiblename . '
'); } } function output_html() { return '' . $this->visiblename . '' . 'get_setting() == 15 ? 'checked="checked"' : '') . ' />' . ' ' . $this->description . ''; } } class admin_setting_special_calendar_weekend extends admin_setting { function admin_setting_special_calendar_weekend() { $name = 'calendar_weekend'; $visiblename = get_string('calendar_weekend', 'admin'); $description = get_string('helpweekenddays', 'admin'); parent::admin_setting($name, $visiblename, $description); } function get_setting() { global $CFG; $temp = $this->name; $setting = intval($CFG->$temp); return array('u' => $setting & 1, 'm' => $setting & 2, 't' => $setting & 4, 'w' => $setting & 8, 'r' => $setting & 16, 'f' => $setting & 32, 's' => $setting & 64); } function write_setting($data) { $week = 'umtwrfs'; $result = array(0 => 0, 1 => 0, 2 => 0, 3 => 0, 4 => 0, 5 => 0, 6 => 0); foreach($data as $key => $value) { if ($value == '1') { $result[strpos($week, $key)] = 1; } } return (set_config($this->name, bindec(implode('',$result))) ? '' : 'Error setting ' . $this->visiblename . '
'); } function output_html() { $result = $this->get_setting(); return '' . $this->visiblename . '' . '' . '' . '' . '' . '' . '' . '' . '' . '
  ' . get_string('sunday', 'calendar') . '  
  ' . get_string('monday', 'calendar') . '  
  ' . get_string('tuesday', 'calendar') . '  
  ' . get_string('wednesday', 'calendar') . '  
  ' . get_string('thursday', 'calendar') . '  
  ' . get_string('friday', 'calendar') . '  
  ' . get_string('saturday', 'calendar') . '  
' . ' ' . $this->description . ''; } } class admin_setting_special_perfdebug extends admin_setting_configcheckbox { function admin_setting_special_perfdebug() { $name = 'perfdebug'; $visiblename = get_string('perfdebug', 'admin'); $description = get_string('configperfdebug', 'admin'); parent::admin_setting_configcheckbox($name, $visiblename, $description); } function write_setting($data) { if ($data == '1') { return (set_config($this->name,15) ? '' : 'Error setting ' . $this->visiblename . '
'); } else { return (set_config($this->name,7) ? '' : 'Error setting ' . $this->visiblename . '
'); } } function output_html() { return '' . $this->visiblename . '' . 'get_setting() == 15 ? 'checked="checked"' : '') . ' />' . ' ' . $this->description . ''; } } // Code for a function that helps externalpages print proper headers and footers // N.B.: THIS FUNCTION HANDLES AUTHENTICATION function admin_externalpage_setup($section) { global $CFG, $ADMIN, $PAGE, $_GET, $root; require_once($CFG->libdir . '/blocklib.php'); require_once($CFG->dirroot . '/admin/pagelib.php'); // we really shouldn't do this... but it works. and it's so elegantly simple. // oh well :) $_GET['section'] = $section; define('TEMPORARY_ADMIN_PAGE_ID',26); define('BLOCK_L_MIN_WIDTH',160); define('BLOCK_L_MAX_WIDTH',210); $pagetype = PAGE_ADMIN; // erm... someone should check this. does $pageclass = 'page_admin'; // any of it duplicate the code I have in page_map_class($pagetype, $pageclass); // admin/pagelib.php? $PAGE = page_create_object($pagetype,TEMPORARY_ADMIN_PAGE_ID); $PAGE->init_full(); $root = $ADMIN->locate($PAGE->section); if ($site = get_site()) { require_login(); } else { redirect($CFG->wwwroot . '/admin/index.php'); die; } if (!($root instanceof admin_externalpage)) { error('Section does not exist, is invalid, or should not be accessed via this URL.'); die; } // this eliminates our need to authenticate on the actual pages if (!($root->check_access())) { error('Access denied.'); die; } } function admin_externalpage_print_header() { global $CFG, $ADMIN, $PAGE, $_GET, $root; $pageblocks = blocks_setup($PAGE); $preferred_width_left = bounded_number(BLOCK_L_MIN_WIDTH, blocks_preferred_width($pageblocks[BLOCK_POS_LEFT]), BLOCK_L_MAX_WIDTH); $PAGE->print_header(); echo ''; echo ''; echo '
'; blocks_print_group($PAGE, $pageblocks, BLOCK_POS_LEFT); echo ''; } function admin_externalpage_print_footer() { echo '
'; print_footer(); } // Code to build admin-tree ---------------------------------------------------------------------------- // hrm... gotta put this somewhere more systematic $site = get_site(); // start the admin tree! $ADMIN = new admin_category('root','Administration'); // we process this file first to get categories up and running include_once($CFG->dirroot . '/admin/settings/first.php'); // now we process all other files in admin/settings to build the // admin tree foreach (glob($CFG->dirroot . '/admin/settings/*.php') as $file) { if ($file != $CFG->dirroot . '/admin/settings/first.php') { include_once($file); } } ?>