aboutsummaryrefslogtreecommitdiff
path: root/engine/start.php
diff options
context:
space:
mode:
Diffstat (limited to 'engine/start.php')
-rw-r--r--engine/start.php201
1 files changed, 88 insertions, 113 deletions
diff --git a/engine/start.php b/engine/start.php
index 8329c1e75..55b8ffa5b 100644
--- a/engine/start.php
+++ b/engine/start.php
@@ -1,146 +1,121 @@
<?php
/**
- * Elgg engine bootstrapper
- * Loads the various elements of the Elgg engine
+ * Bootstraps the Elgg engine.
*
- * @package Elgg
+ * This file loads the full Elgg engine, checks the installation
+ * state, and triggers a series of events to finish booting Elgg:
+ * - {@elgg_event boot system}
+ * - {@elgg_event init system}
+ * - {@elgg_event ready system}
+ *
+ * If Elgg is fully uninstalled, the browser will be redirected to an
+ * installation page.
+ *
+ * @see install.php
+ * @package Elgg.Core
* @subpackage Core
- * @author Curverider Ltd
- * @link http://elgg.org/
*/
/*
- * Basic profiling
+ * No settings means a fresh install
+ */
+if (!file_exists(dirname(__FILE__) . '/settings.php')) {
+ header("Location: install.php");
+ exit;
+}
+
+/**
+ * The time with microseconds when the Elgg engine was started.
+ *
+ * @global float
*/
global $START_MICROTIME;
$START_MICROTIME = microtime(true);
-/*
- * Create global CONFIG object
+/**
+ * Configuration values.
+ *
+ * The $CONFIG global contains configuration values required
+ * for running Elgg as defined in the settings.php file.
+ *
+ * Plugin authors are encouraged to use elgg_get_config() instead of accessing
+ * the global directly.
+ *
+ * @see elgg_get_config()
+ * @see engine/settings.php
+ * @global stdClass $CONFIG
*/
global $CONFIG;
if (!isset($CONFIG)) {
$CONFIG = new stdClass;
}
+$CONFIG->boot_complete = false;
$lib_dir = dirname(__FILE__) . '/lib/';
-// bootstrapping with required files in a required order
-$required_files = array(
- 'exceptions.php', 'elgglib.php', 'access.php', 'system_log.php', 'export.php',
- 'sessions.php', 'languages.php', 'input.php', 'install.php', 'cache.php', 'output.php'
-);
-
-foreach ($required_files as $file) {
- $path = $lib_dir . $file;
- if (!include($path)) {
- echo "Could not load file '$path'. "
- . 'Please check your Elgg installation for all required files.';
- exit;
- }
+// Load the bootstrapping library
+$path = $lib_dir . 'elgglib.php';
+if (!include_once($path)) {
+ echo "Could not load file '$path'. Please check your Elgg installation for all required files.";
+ exit;
}
-// Use fallback view until sanitised
-$oldview = get_input('view');
-set_input('view', 'failsafe');
-
-// Register the error handler
-set_error_handler('__elgg_php_error_handler');
-set_exception_handler('__elgg_php_exception_handler');
-
-// attempt to save settings.php and .htaccess if in installation.
-if ($sanitised = sanitised()) {
- /**
- * Load the system settings
- */
- if (!include_once(dirname(__FILE__) . "/settings.php")) {
- throw new InstallationException("Elgg could not load the settings file.");
- }
-
- // Get config
- global $CONFIG;
-
- // load the rest of the library files from engine/lib/
- $lib_files = array(
- // these want to be loaded first apparently?
- 'database.php', 'actions.php',
-
- 'admin.php', 'annotations.php', 'api.php', 'cache.php',
- 'calendar.php', 'configuration.php', 'cron.php', 'entities.php',
- 'export.php', 'extender.php', 'filestore.php', 'group.php',
- 'input.php', 'install.php', 'location.php', 'mb_wrapper.php',
- 'memcache.php', 'metadata.php', 'metastrings.php', 'notification.php',
- 'objects.php', 'opendd.php', 'pagehandler.php',
- 'pageowner.php', 'pam.php', 'plugins.php', 'query.php',
- 'relationships.php', 'river.php', 'sites.php', 'social.php',
- 'statistics.php', 'system_log.php', 'tags.php', 'usersettings.php',
- 'users.php', 'version.php', 'widgets.php', 'xml.php', 'xml-rpc.php'
- );
-
- foreach($lib_files as $file) {
- $file = $lib_dir . $file;
- elgg_log("Loading $file...");
- if (!include_once($file)) {
- throw new InstallationException("Could not load {$file}");
- }
- }
-} else {
- throw new InstallationException(elgg_echo('installation:error:configuration'));
+// Load the system settings
+if (!include_once(dirname(__FILE__) . "/settings.php")) {
+ $msg = 'Elgg could not load the settings file. It does not exist or there is a file permissions issue.';
+ throw new InstallationException($msg);
}
-// Autodetect some default configuration settings
-set_default_config();
-// Trigger events
-trigger_elgg_event('boot', 'system');
-
-// Load plugins
-$installed = is_installed();
-$db_installed = is_db_installed();
-
-// Load plugins, if we're not in light mode
-if (($installed) && ($db_installed) && ($sanitised)) {
- load_plugins();
+// load the rest of the library files from engine/lib/
+$lib_files = array(
+ 'access.php', 'actions.php', 'admin.php', 'annotations.php', 'cache.php',
+ 'calendar.php', 'configuration.php', 'cron.php', 'database.php',
+ 'entities.php', 'export.php', 'extender.php', 'filestore.php', 'group.php',
+ 'input.php', 'languages.php', 'location.php', 'mb_wrapper.php',
+ 'memcache.php', 'metadata.php', 'metastrings.php', 'navigation.php',
+ 'notification.php', 'objects.php', 'opendd.php', 'output.php',
+ 'pagehandler.php', 'pageowner.php', 'pam.php', 'plugins.php',
+ 'private_settings.php', 'relationships.php', 'river.php', 'sessions.php',
+ 'sites.php', 'statistics.php', 'system_log.php', 'tags.php',
+ 'user_settings.php', 'users.php', 'upgrade.php', 'views.php',
+ 'web_services.php', 'widgets.php', 'xml.php', 'xml-rpc.php',
+
+ // backward compatibility
+ 'deprecated-1.7.php', 'deprecated-1.8.php',
+);
- trigger_elgg_event('plugins_boot', 'system');
+foreach ($lib_files as $file) {
+ $file = $lib_dir . $file;
+ elgg_log("Loading $file...");
+ if (!include_once($file)) {
+ $msg = "Could not load $file";
+ throw new InstallationException($msg);
+ }
}
-// Forward if we haven't been installed
-if ((!$installed || !$db_installed)
- && !substr_count($_SERVER["PHP_SELF"], "install.php")
- && !substr_count($_SERVER["PHP_SELF"], "css.php")
- && !substr_count($_SERVER["PHP_SELF"], "action_handler.php")) {
+// Connect to database, load language files, load configuration, init session
+// Plugins can't use this event because they haven't been loaded yet.
+elgg_trigger_event('boot', 'system');
+
+// Load the plugins that are active
+elgg_load_plugins();
- header("Location: install.php");
- exit;
+// @todo move loading plugins into a single boot function that replaces 'boot', 'system' event
+// and then move this code in there.
+// This validates the view type - first opportunity to do it is after plugins load.
+$view_type = elgg_get_viewtype();
+if (!elgg_is_valid_view_type($view_type)) {
+ elgg_set_viewtype('default');
}
-// Trigger events
-if (!substr_count($_SERVER["PHP_SELF"],"install.php")
- && !substr_count($_SERVER["PHP_SELF"],"setup.php")
- && !(defined('upgrading') && upgrading == 'upgrading')) {
+// @todo deprecate as plugins can use 'init', 'system' event
+elgg_trigger_event('plugins_boot', 'system');
- trigger_elgg_event('init', 'system');
-}
+// Complete the boot process for both engine and plugins
+elgg_trigger_event('init', 'system');
-// System booted, return to normal view
-set_input('view', $oldview);
-if (empty($oldview)) {
- if (empty($CONFIG->view)) {
- $oldview = 'default';
- } else {
- $oldview = $CONFIG->view;
- }
-}
+$CONFIG->boot_complete = true;
-if (($installed) && ($db_installed)) {
- $lastupdate = datalist_get('simplecache_lastupdate');
- $lastcached = datalist_get('simplecache_'.$oldview);
- if ($lastupdate == 0 || $lastcached < $lastupdate) {
- elgg_view_regenerate_simplecache();
- $lastcached = time();
- datalist_set('simplecache_lastupdate',$lastcached);
- datalist_set('simplecache_'.$oldview,$lastcached);
- }
- $CONFIG->lastcache = $lastcached;
-}
+// System loaded and ready
+elgg_trigger_event('ready', 'system');