From: poltawski <poltawski>
Date: Wed, 18 Apr 2007 09:39:49 +0000 (+0000)
Subject: MDL-8209 - Force admin/index.php to redirect to upgrade settings screen
X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=2acc1f9678151bfd62a4409bf60d0dd424285e93;p=moodle.git

MDL-8209 - Force admin/index.php to redirect to upgrade settings screen
when some admin settings are not set.
---

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;
+
+}
+
 ?>