diff --git a/admin/index.php b/admin/index.php index 7bde7e47167..c0c39b44935 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 a14b873e838..fd0be41112f 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; + +} + ?>