libdir.'/adminlib.php'); $query = trim(stripslashes_safe(required_param('query', PARAM_NOTAGS))); // Search string $adminroot = admin_get_root(); admin_externalpage_setup('search', $adminroot); // now hidden page $CFG->adminsearchquery = $query; // So we can reference it in search boxes later in this invocation $resultshtml = search_settings_html(admin_get_root(), $query); // now we'll deal with the case that the admin has submitted the form with changed settings if ($data = data_submitted()) { $data = (array)$data; if (confirm_sesskey()) { $changedsettings = search_settings(admin_get_root(), $query); $errors = ''; foreach($changedsettings as $changedsetting) { if (isset($data['s_' . $changedsetting->name])) { $errors .= $changedsetting->write_setting($data['s_' . $changedsetting->name]); } else { $errors .= $changedsetting->write_setting($changedsetting->defaultsetting); } } if (empty($errors)) { // there must be either redirect without message or continue button or else upgrade would be sometimes broken redirect($CFG->wwwroot . '/' . $CFG->admin . '/search.php?query=' . $query); die; } else { error(get_string('errorwithsettings', 'admin') . '
' . $errors); die; } } else { error(get_string('confirmsesskeybad', 'error')); die; } } // and finally, if we get here, then there are matching settings and we have to print a form // to modify them admin_externalpage_print_header($adminroot); // print_simple_box(get_string('upgradesettingsintro','admin'),'','100%','',5,'generalbox',''); echo '
'; echo ''; echo ''; echo '
'; echo '
'; if ($resultshtml != '') { echo $resultshtml; echo '
'; } else { echo get_string('noresults','admin'); } echo ''; admin_externalpage_print_footer($adminroot); /** * Find settings using a query. * * @param string &$node The node at which to start searching. Should be $ADMIN for all external calls to this function. * @param string $query The search string. * @return array An array containing admin_setting objects that match $query. */ function search_settings(&$node, $query) { if (is_a($node, 'admin_category')) { $return = array(); $entries = array_keys($node->children); foreach ($entries as $entry) { $return = array_merge($return, search_settings($node->children[$entry], $query)); } return $return; } if (is_a($node, 'admin_settingpage')) { $return = array(); foreach ($node->settings as $setting) { if (stristr($setting->name,$query) || stristr($setting->visiblename,$query) || stristr($setting->description,$query)) { $return[] =& $setting; } unset($setting); // needed to prevent odd (imho) reference behaviour // see http://www.php.net/manual/en/language.references.whatdo.php#AEN6399 } return $return; } return array(); } function search_settings_html(&$node, $query) { global $CFG; if (is_a($node, 'admin_category')) { $entries = array_keys($node->children); $return = ''; foreach ($entries as $entry) { $return .= search_settings_html($node->children[$entry], $query); } return $return; } if (is_a($node, 'admin_settingpage')) { $foundsettings = array(); foreach ($node->settings as $setting) { if (stristr($setting->name,$query) || stristr($setting->visiblename,$query) || stristr($setting->description,$query)) { $foundsettings[] =& $setting; } unset($setting); // needed to prevent odd (imho) reference behaviour // see http://www.php.net/manual/en/language.references.whatdo.php#AEN6399 } $return = ''; if (count($foundsettings) > 0) { $return .= print_heading(get_string('searchresults','admin').' - '. '' . $node->visiblename . '', '', 2, 'main', true); $return .= '
' . "\n"; foreach ($foundsettings as $foundsetting) { $return .= '
' . "\n"; $return .= highlight($query,$foundsetting->output_html()); } $return .= '
'; } return $return; } return ''; } ?>