From 2acc1f9678151bfd62a4409bf60d0dd424285e93 Mon Sep 17 00:00:00 2001 From: poltawski Date: Wed, 18 Apr 2007 09:39:49 +0000 Subject: [PATCH] MDL-8209 - Force admin/index.php to redirect to upgrade settings screen when some admin settings are not set. --- admin/index.php | 8 +++++++- lib/adminlib.php | 31 +++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/admin/index.php b/admin/index.php index 7bde7e4716..c0c39b4493 100644 --- a/admin/index.php +++ b/admin/index.php @@ -522,11 +522,17 @@ } } + $adminroot = admin_get_root(); + +/// Check if there are any new admin settings which have still yet to be set + if( any_new_admin_settings( $adminroot ) ){ + redirect('upgradesettings.php'); + } + /// Everything should now be set up, and the user is an admin /// Print default admin page with notifications. - $adminroot = admin_get_root(); admin_externalpage_setup('adminnotifications', $adminroot); admin_externalpage_print_header($adminroot); diff --git a/lib/adminlib.php b/lib/adminlib.php index a14b873e83..fd0be41112 100644 --- a/lib/adminlib.php +++ b/lib/adminlib.php @@ -2823,4 +2823,35 @@ function upgrade_language_pack($lang='') { return false; } +/** + * Based on find_new_settings{@link ()} in upgradesettings.php + * Looks to find any admin settings that have not been initialized. Returns 1 if it finds any. + * + * @param string &$node The node at which to start searching. + * @return int Returns 1 if any settings haven't been initialised, 0 if they all have + */ +function any_new_admin_settings(&$node) { + + if (is_a($node, 'admin_category')) { + $entries = array_keys($node->children); + foreach ($entries as $entry) { + if( any_new_admin_settings($node->children[$entry]) ){ + return 1; + } + } + } + + if (is_a($node, 'admin_settingpage')) { + foreach ($node->settings as $setting) { + if ($setting->get_setting() === NULL) { + return 1; + } + } + } + + + return 0; + +} + ?> -- 2.39.5