From 90a73bb361bbc2bfdff1cf41d8ea3aa6e1d6a5fe Mon Sep 17 00:00:00 2001 From: vinkmar Date: Fri, 18 Aug 2006 07:25:17 +0000 Subject: [PATCH] Admin page cleanup (Google soc 2006) --- admin/adminlib.php | 1243 ++++++++++++++++++++++++++++++++++++++ admin/auth.php | 28 +- admin/block.php | 19 +- admin/blocks.php | 20 +- admin/enrol.php | 26 +- admin/enrol_config.php | 30 +- admin/environment.php | 18 +- admin/filter.php | 19 +- admin/filters.php | 63 +- admin/index.php | 27 +- admin/lang.php | 38 +- admin/langdoc.php | 20 +- admin/langimport.php | 57 +- admin/maintenance.php | 23 +- admin/module.php | 19 +- admin/modules.php | 24 +- admin/pagelib.php | 114 ++++ admin/roles/manage.php | 33 +- admin/settings.php | 90 +++ admin/timezoneimport.php | 29 +- admin/user.php | 35 +- 21 files changed, 1618 insertions(+), 357 deletions(-) create mode 100644 admin/adminlib.php create mode 100644 admin/pagelib.php create mode 100644 admin/settings.php diff --git a/admin/adminlib.php b/admin/adminlib.php new file mode 100644 index 0000000000000..0468411dcb551 --- /dev/null +++ b/admin/adminlib.php @@ -0,0 +1,1243 @@ +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); + } +} + +?> \ No newline at end of file diff --git a/admin/auth.php b/admin/auth.php index 80af18c75efe5..9362c7bae4257 100644 --- a/admin/auth.php +++ b/admin/auth.php @@ -3,21 +3,12 @@ require_once('../config.php'); - $auth = optional_param('auth', '', PARAM_SAFEDIR); + require_once($CFG->dirroot . '/admin/adminlib.php'); - require_login(); + admin_externalpage_setup('userauthentication'); - if (!$site = get_site()) { - redirect("index.php"); - } + $auth = optional_param('auth', '', PARAM_SAFEDIR); - if (!isadmin()) { - error("Only the admin can use this page"); - } - - if (!confirm_sesskey()) { - error(get_string('confirmsesskeybad', 'error')); - } $focus = ''; @@ -25,6 +16,10 @@ if ($config = data_submitted()) { + if (!confirm_sesskey()) { + error(get_string('confirmsesskeybad', 'error')); + } + $config = (array)$config; // extract and sanitize the auth key explicitly @@ -126,17 +121,18 @@ $strsettings = get_string("settings"); $strusers = get_string("users"); - print_header("$site->shortname: $strauthenticationoptions", "$site->fullname", - "$stradministration -> $strusers -> $strauthenticationoptions", "$focus"); + admin_externalpage_print_header(); echo "
"; echo "
framename}\" name=\"authmenu\" method=\"post\" action=\"auth.php\">"; echo "sesskey."\" />"; print_string("chooseauthmethod","auth"); + + echo '  '; choose_from_menu ($options, "auth", $auth, "","document.location='auth.php?sesskey=$USER->sesskey&auth='+document.authmenu.auth.options[document.authmenu.auth.selectedIndex].value", ""); - echo "
"; + echo "
"; print_simple_box_start("center", "100%"); print_heading($options[$auth]); @@ -235,7 +231,7 @@ print_simple_box_end(); - print_footer(); + admin_externalpage_print_footer(); exit; /// Functions ///////////////////////////////////////////////////////////////// diff --git a/admin/block.php b/admin/block.php index 522da78fb9591..8ea52e08344a0 100644 --- a/admin/block.php +++ b/admin/block.php @@ -3,17 +3,10 @@ // block.php - allows admin to edit all local configuration variables for a block require_once('../config.php'); + require_once($CFG->dirroot . '/admin/adminlib.php'); + admin_externalpage_setup('blockmanagement'); require_once($CFG->libdir.'/blocklib.php'); - require_login(); - - if (!isadmin()) { - error('Only an admin can use this page'); - } - if (!$site = get_site()) { - error("Site isn't defined!"); - } - $blockid = required_param('block', PARAM_INT); if(($blockrecord = blocks_get_record($blockid)) === false) { @@ -62,10 +55,8 @@ // of the page. It is also used to generate the link to the Moodle Docs for this view. $CFG->pagepath = 'block/' . $block->name() . '/config'; - print_header($site->shortname.': '.$strblockname.": $strconfiguration", $site->fullname, - "$stradmin -> ". - "$strconfiguration -> ". - "$strmanageblocks -> ".$strblockname); + + admin_externalpage_print_header(); print_heading($strblockname); @@ -80,6 +71,6 @@ echo '

'; $block->config_print(); echo ''; - print_footer(); + admin_externalpage_print_footer(); ?> diff --git a/admin/blocks.php b/admin/blocks.php index 895fb111d2c5a..f6e4ebfb3b919 100644 --- a/admin/blocks.php +++ b/admin/blocks.php @@ -3,6 +3,8 @@ // Allows the admin to configure blocks (hide/show, delete and configure) require_once('../config.php'); + require_once($CFG->dirroot . '/admin/adminlib.php'); + admin_externalpage_setup('blockmanagement'); require_once($CFG->libdir.'/blocklib.php'); require_once($CFG->libdir.'/tablelib.php'); @@ -12,16 +14,6 @@ $delete = optional_param('delete', 0, PARAM_INT); $multiple = optional_param('multiple', 0, PARAM_INT); - require_login(); - - if (!isadmin()) { - error("Only administrators can use this page!"); - } - - if (!$site = get_site()) { - error("Site isn't defined!"); - } - /// Print headings @@ -37,9 +29,7 @@ $strname = get_string('name'); $strmultiple = get_string('blockmultiple', 'admin'); - print_header("$site->shortname: $strmanageblocks", "$site->fullname", - "$stradministration -> ". - "$strconfiguration -> $strmanageblocks"); + admin_externalpage_print_header(); print_heading($strmanageblocks); @@ -85,7 +75,7 @@ notice_yesno(get_string('blockdeleteconfirm', '', $strblockname), 'blocks.php?delete='.$block->id.'&confirm=1&sesskey='.$USER->sesskey, 'blocks.php'); - print_footer(); + admin_externalpage_print_footer(); exit; } else { @@ -241,6 +231,6 @@ $table->print_html(); } - print_footer(); + admin_externalpage_print_footer(); ?> diff --git a/admin/enrol.php b/admin/enrol.php index 61c9ed3423e6c..1661bb7281055 100644 --- a/admin/enrol.php +++ b/admin/enrol.php @@ -3,29 +3,23 @@ // Yes, enrol is correct English spelling. require_once('../config.php'); + require_once($CFG->dirroot . '/admin/adminlib.php'); $enrol = optional_param('enrol', $CFG->enrol, PARAM_SAFEDIR); $CFG->pagepath = 'enrol'; - require_login(); + admin_externalpage_setup('enrolment'); - if (!$site = get_site()) { - redirect("index.php"); - } - - if (!isadmin()) { - error("Only the admin can use this page"); - } - if (!confirm_sesskey()) { - error(get_string('confirmsesskeybad', 'error')); - } require_once("$CFG->dirroot/enrol/enrol.class.php"); /// Open the factory class /// Save settings if ($frm = data_submitted()) { + if (!confirm_sesskey()) { + error(get_string('confirmsesskeybad', 'error')); + } if (empty($frm->enable)) { $frm->enable = array(); } @@ -39,16 +33,14 @@ $frm->enable = array_merge(array('manual'), $frm->enable); // make sure manual plugin is called first set_config('enrol_plugins_enabled', implode(',', $frm->enable)); set_config('enrol', $frm->default); - redirect("enrol.php?sesskey=$USER->sesskey", get_string("changessaved"), 1); + redirect("enrol.php", get_string("changessaved"), 1); } /// Print the form $str = get_strings(array('enrolmentplugins', 'users', 'administration', 'settings', 'edit')); - print_header("$site->shortname: $str->enrolmentplugins", "$site->fullname", - "$str->administration -> - $str->users -> $str->enrolmentplugins"); + admin_externalpage_print_header(); $modules = get_list_of_plugins("enrol"); $options = array(); @@ -97,7 +89,7 @@ $default = ''; } $table->data[$name] = array($name, $enable, $default, - ''.$str->edit.''); + ''.$str->edit.''); } asort($table->data); @@ -106,6 +98,6 @@ echo "
\n"; echo ""; - print_footer(); + admin_externalpage_print_footer(); ?> \ No newline at end of file diff --git a/admin/enrol_config.php b/admin/enrol_config.php index f78a915e5760b..1bbc993910c45 100644 --- a/admin/enrol_config.php +++ b/admin/enrol_config.php @@ -3,23 +3,13 @@ // Yes, enrol is correct English spelling. require_once("../config.php"); + require_once($CFG->dirroot . '/admin/adminlib.php'); + + admin_externalpage_setup('enrolment'); $enrol = required_param('enrol', PARAM_ALPHA); $CFG->pagepath = 'enrol/' . $enrol; - - require_login(); - - if (!$site = get_site()) { - redirect("index.php"); - } - if (!isadmin()) { - error("Only the admin can use this page"); - } - - if (!confirm_sesskey()) { - error(get_string('confirmsesskeybad', 'error')); - } require_once("$CFG->dirroot/enrol/enrol.class.php"); /// Open the factory class @@ -28,6 +18,9 @@ /// If data submitted, then process and store. if ($frm = data_submitted()) { + if (!confirm_sesskey()) { + error(get_string('confirmsesskeybad', 'error')); + } if ($enrolment->process_config($frm)) { redirect("enrol.php?sesskey=$USER->sesskey", get_string("changessaved"), 1); } @@ -40,6 +33,7 @@ /// get language strings $str = get_strings(array('enrolmentplugins', 'configuration', 'users', 'administration')); + unset($options); $modules = get_list_of_plugins("enrol"); foreach ($modules as $module) { @@ -47,11 +41,7 @@ } asort($options); - print_header("$site->shortname: $str->enrolmentplugins", "$site->fullname", - "$str->administration -> - $str->users -> - sesskey\">$str->enrolmentplugins -> - $str->configuration"); + admin_externalpage_print_header(); echo "
framename}\" name=\"enrolmenu\" method=\"post\" action=\"enrol_config.php\">"; echo "sesskey."\">"; @@ -61,7 +51,7 @@ /// Choose an enrolment method echo get_string('chooseenrolmethod').': '; choose_from_menu ($options, "enrol", $enrol, "", - "document.location='enrol_config.php?sesskey=$USER->sesskey&enrol='+document.enrolmenu.enrol.options[document.enrolmenu.enrol.selectedIndex].value", ""); + "document.location='enrol_config.php?enrol='+document.enrolmenu.enrol.options[document.enrolmenu.enrol.selectedIndex].value", ""); echo "

"; @@ -82,7 +72,7 @@ print_simple_box_end(); - print_footer(); + admin_externalpage_print_footer(); exit; ?> diff --git a/admin/environment.php b/admin/environment.php index 8b59eb8981d5a..175ca0f3fe910 100644 --- a/admin/environment.php +++ b/admin/environment.php @@ -30,24 +30,16 @@ // from moodle.org be able to check more and more versions. require_once('../config.php'); + require_once($CFG->dirroot . '/admin/adminlib.php'); require_once($CFG->libdir.'/environmentlib.php'); require_once($CFG->libdir.'/componentlib.class.php'); + admin_externalpage_setup('environment'); /// Parameters $action = optional_param('action', '', PARAM_ACTION); $version = optional_param('version', '', PARAM_FILE); // -/// Security checks - require_login(); - - if (!isadmin()) { - error('You need to be admin to use this page'); - } - - if (!$site = get_site()) { - error("Site isn't defined!"); - } /// Get some strings $stradmin = get_string('administration'); @@ -60,9 +52,7 @@ $strmisc = get_string('miscellaneous'); /// Print the header stuff - print_header("$SITE->shortname: $strenvironment", $SITE->fullname, - "$stradmin -> $strmisc -> " - .$strenvironment); + admin_externalpage_print_header(); /// Print the component download link echo ''; @@ -147,5 +137,5 @@ echo ''; /// Print footer - print_footer(); + admin_externalpage_print_footer(); ?> diff --git a/admin/filter.php b/admin/filter.php index 4b571fb6ed8ef..56b7d1cb8b684 100644 --- a/admin/filter.php +++ b/admin/filter.php @@ -3,16 +3,10 @@ // Edit text filter settings require_once('../config.php'); + require_once($CFG->dirroot . '/admin/adminlib.php'); require_once($CFG->libdir.'/tablelib.php'); - // check for allowed access - require_login(); - if (!isadmin()) { - error( 'Only administrators can use the filters administration page' ); - } - if (!$site = get_site()) { - error( 'Site is not defined in filters administration page' ); - } + admin_externalpage_setup('filtermanagement'); // get parameters $param = new Object; @@ -76,11 +70,8 @@ //============================== $filtername = ucfirst($filtername); - print_header( "$site->shortname: $txt->managefilters", "$site->fullname", - "$txt->administration -> $txt->configuration " . - "-> $txt->managefilters -> $filtername" ); - - print_heading( $txt->managefilters ); + admin_externalpage_print_header(); + print_heading( $filtername ); print_simple_box("
".get_string("configwarning", "admin")."
", "center", "50%"); echo "
"; @@ -104,5 +95,5 @@ print_simple_box_end(); - print_footer(); + admin_externalpage_print_footer(); ?> diff --git a/admin/filters.php b/admin/filters.php index 8fde4e0c3d04e..5490e84d177b4 100644 --- a/admin/filters.php +++ b/admin/filters.php @@ -3,20 +3,13 @@ // Edit list of available text filters require_once('../config.php'); + require_once($CFG->dirroot . '/admin/adminlib.php'); require_once($CFG->libdir.'/tablelib.php'); // defines define('FILTER_TABLE','filter_administration_table'); - // check for allowed access - require_login(); - - if (!isadmin()) { - error('Only administrators can use the filters administration page'); - } - if (!$site = get_site()) { - error('Site is not defined in filters administration page'); - } + admin_externalpage_setup('filtermanagement'); // get values from page $params = new object(); @@ -274,61 +267,15 @@ // Display logic //============================== - print_header("$site->shortname: $txt->managefilters", "$site->fullname", - "$txt->administration -> $txt->configuration " . - "-> $txt->managefilters"); + admin_externalpage_print_header(); print_heading_with_help($txt->managefilters, 'filters'); // print the table of all the filters $table->print_html(); - // print the table for the cache controls - print_heading($txt->cachecontrols); - print_simple_box_start('center'); - ?> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
cachetext; ?>cachetext, "", "", ""); ?>configcachetext; ?>
filteruploadedfiles; ?>none,$txt->allfiles,$txt->htmlfilesonly), - "filteruploadedfiles", $CFG->filteruploadedfiles,"","",""); ?>configfilteruploadedfiles; ?>
filtermatchoneperpage; ?>no,$txt->yes), "filtermatchoneperpage", $CFG->filtermatchoneperpage,"","",""); ?>configfiltermatchoneperpage; ?>
filtermatchonepertext; ?>no,$txt->yes), "filtermatchonepertext", $CFG->filtermatchonepertext,"","",""); ?>configfiltermatchonepertext; ?>
filterall; ?>no,$txt->yes), "filterall", $CFG->filterall,"","",""); ?>configfilterall; ?>
  
-
- - diff --git a/admin/index.php b/admin/index.php index b5f0a4ae906e5..c1712e11195d5 100644 --- a/admin/index.php +++ b/admin/index.php @@ -347,11 +347,16 @@ /// At this point everything is set up and the user is an admin, so print menu - $stradministration = get_string("administration"); - print_header("$site->shortname: $stradministration","$site->fullname", "$stradministration"); - print_simple_box_start('center', '100%', '', 20); - print_heading($stradministration); - +# $stradministration = get_string("administration"); +# print_header("$site->shortname: $stradministration","$site->fullname", "$stradministration"); +# print_simple_box_start('center', '100%', '', 20); +# print_heading($stradministration); + + require_once($CFG->dirroot . '/admin/adminlib.php'); + admin_externalpage_setup('adminnotifications'); + admin_externalpage_print_header(); + echo 'Umm... any notifications should show up here... I hope :)

'; + echo 'Also, I\'m including the old admin menu on this page incase I forgot any links in the new admin structure. It should be removed after.

'; /// Deprecated database! Warning!! if (!empty($CFG->migrated_to_new_db)) { print_simple_box_start('center','60%'); @@ -402,6 +407,7 @@ print_simple_box_end(); } +// keeping this old menu here for a little while /* $table->tablealign = "center"; $table->align = array ("right", "left"); $table->wrap = array ("nowrap", "nowrap"); @@ -436,7 +442,6 @@ $table->data[] = array(''.get_string('configuration').'', $configdata); - $userdata = ''; $userdata .= '