Index: lib/accesslib.php
===================================================================
RCS file: /cvsroot/moodle/moodle/lib/accesslib.php,v
retrieving revision 1.601
diff -u -r1.601 accesslib.php
--- lib/accesslib.php	19 Jun 2009 14:25:58 -0000	1.601
+++ lib/accesslib.php	24 Jun 2009 05:45:44 -0000
@@ -453,7 +453,7 @@
 function has_capability($capability, $context, $userid=NULL, $doanything=true) {
     global $USER, $CFG, $DB, $SCRIPT, $ACCESSLIB_PRIVATE;
 
-    if (empty($CFG->rolesactive)) {
+    if (during_initial_install()) {
         if ($SCRIPT === "/$CFG->admin/index.php" or $SCRIPT === "/$CFG->admin/cliupgrade.php") {
             // we are in an installer - roles can not work yet
             return true;
@@ -1768,7 +1768,7 @@
     global $USER, $CFG, $ACCESSLIB_PRIVATE;
 
     // roles not installed yet - we are in the middle of installation
-    if (empty($CFG->rolesactive)) {
+    if (during_initial_install()) {
         return;
     }
 
@@ -6207,7 +6207,7 @@
 function mark_context_dirty($path) {
     global $CFG, $ACCESSLIB_PRIVATE;
 
-    if (empty($CFG->rolesactive)) {
+    if (during_initial_install()) {
         return;
     }
 
Index: lib/weblib.php
===================================================================
RCS file: /cvsroot/moodle/moodle/lib/weblib.php,v
retrieving revision 1.1274
diff -u -r1.1274 weblib.php
--- lib/weblib.php	23 Jun 2009 10:41:22 -0000	1.1274
+++ lib/weblib.php	24 Jun 2009 05:46:02 -0000
@@ -2341,7 +2341,6 @@
     return '<span id="maincontent"></span>';
 }
 
-
 /// STANDARD WEB PAGE PARTS ///////////////////////////////////////////////////
 
 /**
@@ -3688,13 +3687,13 @@
     // Work out whether we should be showing the activity (e.g. Forums) link.
     // Note: build_navigation() is called from many places --
     // install & upgrade for example -- where we cannot count on the
-    // roles infrastructure to be defined. Hence the $CFG->rolesactive check.
+    // roles infrastructure to be defined. Hence the during_initial_install() check.
     if (!isset($CFG->hideactivitytypenavlink)) {
         $CFG->hideactivitytypenavlink = 0;
     }
     if ($CFG->hideactivitytypenavlink == 2) {
         $hideactivitylink = true;
-    } else if ($CFG->hideactivitytypenavlink == 1 && $CFG->rolesactive &&
+    } else if ($CFG->hideactivitytypenavlink == 1 && !during_initial_install() &&
             !empty($COURSE->id) && $COURSE->id != SITEID) {
         if (!isset($COURSE->context)) {
             $COURSE->context = get_context_instance(CONTEXT_COURSE, $COURSE->id);
@@ -6931,7 +6930,7 @@
 function page_doc_link($text='', $iconpath='') {
     global $CFG, $PAGE;
 
-    if (empty($CFG->docroot) || empty($CFG->rolesactive)) {
+    if (empty($CFG->docroot) || during_initial_install()) {
         return '';
     }
     if (!has_capability('moodle/site:doclinks', $PAGE->context)) {
Index: lib/pagelib.php
===================================================================
RCS file: /cvsroot/moodle/moodle/lib/pagelib.php,v
retrieving revision 1.122
diff -u -r1.122 pagelib.php
--- lib/pagelib.php	18 Jun 2009 10:43:13 -0000	1.122
+++ lib/pagelib.php	24 Jun 2009 05:45:53 -0000
@@ -608,7 +608,7 @@
     protected function starting_output() {
         global $SITE, $CFG;
 
-        if (empty($CFG->rolesactive)) {
+        if (during_initial_install()) {
             $this->_course = new stdClass;
             $this->_course->id = 1;
             moodle_setlocale();
Index: lib/setuplib.php
===================================================================
RCS file: /cvsroot/moodle/moodle/lib/setuplib.php,v
retrieving revision 1.59
diff -u -r1.59 setuplib.php
--- lib/setuplib.php	12 Jun 2009 10:59:28 -0000	1.59
+++ lib/setuplib.php	24 Jun 2009 05:45:53 -0000
@@ -353,6 +353,21 @@
 }
 
 /**
+ * Indicates whether we are in the middle of the initial Moodle install.
+ *
+ * Very occasionally it is necessary avoid running certain bits of code before the
+ * Moodle installation has completed. The installed flag is set in admin/index.php
+ * after Moodle core and all the plugins have been installed, but just before
+ * the person doing the initial install is asked to choose the admin password.
+ *
+ * @return boolean true if the initial install is not complete.
+ */
+function during_initial_install() {
+    global $CFG;
+    return empty($CFG->rolesactive);
+}
+
+/**
  * Function to raise the memory limit to a new value.
  * Will respect the memory limit if it is higher, thus allowing
  * settings in php.ini, apache conf or command line switches
Index: lib/adminlib.php
===================================================================
RCS file: /cvsroot/moodle/moodle/lib/adminlib.php,v
retrieving revision 1.365
diff -u -r1.365 adminlib.php
--- lib/adminlib.php	20 Jun 2009 11:00:41 -0000	1.365
+++ lib/adminlib.php	24 Jun 2009 05:45:52 -0000
@@ -1260,7 +1260,7 @@
 
         // log change
         $log = new object();
-        $log->userid       = empty($CFG->rolesactive) ? 0 :$USER->id; // 0 as user id during install
+        $log->userid       = during_initial_install() ? 0 :$USER->id; // 0 as user id during install
         $log->timemodified = time();
         $log->plugin       = $this->plugin;
         $log->name         = $name;
@@ -3713,7 +3713,7 @@
      */
     public function load_choices() {
         global $CFG, $DB;
-        if (empty($CFG->rolesactive)) {
+        if (during_initial_install()) {
             return false;
         }
         if (is_array($this->choices)) {
@@ -3738,7 +3738,7 @@
     public function get_defaultsetting() {
         global $CFG;
 
-        if (empty($CFG->rolesactive)) {
+        if (during_initial_install()) {
             return null;
         }
         $result = array();
Index: admin/index.php
===================================================================
RCS file: /cvsroot/moodle/moodle/admin/index.php,v
retrieving revision 1.389
diff -u -r1.389 index.php
--- admin/index.php	7 Jun 2009 08:46:13 -0000	1.389
+++ admin/index.php	24 Jun 2009 05:45:38 -0000
@@ -244,9 +244,10 @@
 // upgrade all plugins and other parts
 upgrade_noncore(true);
 
-// indicate that this site is fully configured except the admin password
-if (empty($CFG->rolesactive)) {
-    set_config('rolesactive', 1);
+// If this is the first install, indicate that this site is fully configured
+// except the admin password
+if (during_initial_install()) {
+    set_config('rolesactive', 1); // after this, during_initial_install will return false.
     set_config('adminsetuppending', 1);
     // we neeed this redirect to setup proper session
     upgrade_finished("index.php?sessionstarted=1&amp;lang=$CFG->lang");
Index: admin/settings/users.php
===================================================================
RCS file: /cvsroot/moodle/moodle/admin/settings/users.php,v
retrieving revision 1.50
diff -u -r1.50 users.php
--- admin/settings/users.php	19 Jun 2009 14:26:00 -0000	1.50
+++ admin/settings/users.php	24 Jun 2009 05:45:38 -0000
@@ -82,7 +82,7 @@
     // "userpolicies" settingpage
     $temp = new admin_settingpage('userpolicies', get_string('userpolicies', 'admin'));
     if ($ADMIN->fulltree) {
-        if (!empty($CFG->rolesactive)) {
+        if (!during_initial_install()) {
             $context = get_context_instance(CONTEXT_SYSTEM);
             if (!$guestrole = get_guest_role()) {
                 $guestrole->id = 0;
@@ -138,7 +138,7 @@
 
         $temp->add(new admin_setting_configcheckbox('nodefaultuserrolelists', get_string('nodefaultuserrolelists', 'admin'), get_string('confignodefaultuserrolelists', 'admin'), 0));
 
-        if (!empty($CFG->rolesactive)) {
+        if (!during_initial_install()) {
             $temp->add(new admin_setting_configselect('defaultcourseroleid', get_string('defaultcourseroleid', 'admin'),
                           get_string('configdefaultcourseroleid', 'admin'), $studentrole->id, $allroles));
             $temp->add(new admin_setting_configselect('creatornewroleid', get_string('creatornewroleid', 'admin'),
@@ -147,7 +147,7 @@
 
         $temp->add(new admin_setting_configcheckbox('autologinguests', get_string('autologinguests', 'admin'), get_string('configautologinguests', 'admin'), 0));
 
-        if (!empty($CFG->rolesactive)) {
+        if (!during_initial_install()) {
             $temp->add(new admin_setting_configmultiselect('nonmetacoursesyncroleids', get_string('nonmetacoursesyncroleids', 'admin'),
                       get_string('confignonmetacoursesyncroleids', 'admin'), array(), $allroles));
         }
Index: mnet/environment.php
===================================================================
RCS file: /cvsroot/moodle/moodle/mnet/environment.php,v
retrieving revision 1.21
diff -u -r1.21 environment.php
--- mnet/environment.php	11 Jan 2009 09:41:49 -0000	1.21
+++ mnet/environment.php	24 Jun 2009 05:46:02 -0000
@@ -64,7 +64,7 @@
 
         // We don't generate keys on install/upgrade because we want the USER
         // record to have an email address, city and country already.
-        if (empty($CFG->rolesactive)) return true;
+        if (during_initial_install()) return true;
         if ($CFG->mnet_dispatcher_mode == 'off') return true;
         if (!extension_loaded("openssl")) return true;
         if (!empty($this->keypair)) return true;

