diff options
Diffstat (limited to 'engine/start.php')
| -rw-r--r-- | engine/start.php | 303 |
1 files changed, 119 insertions, 184 deletions
diff --git a/engine/start.php b/engine/start.php index 9df474842..55b8ffa5b 100644 --- a/engine/start.php +++ b/engine/start.php @@ -1,186 +1,121 @@ -<?php
-
- /**
- * Elgg engine bootstrapper
- * Loads the various elements of the Elgg engine
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008
- * @link http://elgg.org/
- */
+<?php +/** + * Bootstraps the Elgg engine. + * + * 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 + */ +/* + * 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); + +/** + * 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/'; + +// 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; +} + +// 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); +} + + +// 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', -
- /**
- * Load important prerequisites
- */
-
- if (!@include_once(dirname(__FILE__) . "/lib/exceptions.php")) { // Exceptions
- echo "Error in installation: could not load the Exceptions library.";
- exit;
- } -
- if (!@include_once(dirname(__FILE__) . "/lib/elgglib.php")) { // Main Elgg library
- echo "Elgg could not load its main library."; - exit;
- } - - if (!@include_once(dirname(__FILE__) . "/lib/system_log.php")) { // Logging library - echo "Error in installation: could not load the System Log library."; - exit; - } -
- if (!@include_once(dirname(__FILE__) . "/lib/export.php")) { // Export library
- echo "Error in installation: could not load the Export library."; - exit;
- }
-
- if (!@include_once(dirname(__FILE__) . "/lib/languages.php")) { // Languages library
- echo "Error in installation: could not load the languages library."; - exit;
- } - - if (!@include_once(dirname(__FILE__) . "/lib/input.php")) { // Input library - echo "Error in installation: could not load the input library."; - exit; - } - - if (!@include_once(dirname(__FILE__) . "/lib/install.php")) { // Installation library - echo "Error in installation: could not load the installation library."; - exit; - }
-
- if (!@include_once(dirname(__FILE__) . "/lib/cache.php")) { // Installation library
- echo "Error in installation: could not load the cache library.";
- exit;
- } - - // Use fallback view until sanitised - $oldview = get_input('view'); - set_input('view', 'failsafe');
-
- /**
- * Set light mode default
- */
- $lightmode = false;
-
- /**
- * Establish handlers
- */
-
- // Register the error handler
- set_error_handler('__elgg_php_error_handler');
- set_exception_handler('__elgg_php_exception_handler');
-
- /**
- * If there are basic issues with the way the installation is formed, don't bother trying
- * to load any more files
- */
-
- if ($sanitised = sanitised()) { // Begin portion for sanitised installs only
-
- /**
- * Load the system settings
- */
-
- if (!@include_once(dirname(__FILE__) . "/settings.php")) // Global settings
- throw new InstallationException("Elgg could not load the settings file.");
-
- /**
- * Load and initialise the database
- */
-
- if (!@include_once(dirname(__FILE__) . "/lib/database.php")) // Database connection
- throw new InstallationException("Elgg could not load the main Elgg database library.");
-
- /**
- * Load the remaining libraries from /lib/ in alphabetical order,
- * except for a few exceptions
- */
-
- if (!@include_once(dirname(__FILE__) . "/lib/actions.php")) {
- throw new InstallationException("Elgg could not load the Actions library");
- }
-
- if (!@include_once(dirname(__FILE__) . "/lib/sessions.php")) {
- throw new InstallationException("Elgg could not load the Sessions library");
- }
-
- // We don't want to load or reload these files
-
- $file_exceptions = array(
- '.','..', - '.DS_Store', - 'Thumbs.db',
- '.svn',
- 'CVS','cvs',
- 'settings.php','settings.example.php','languages.php','exceptions.php','elgglib.php','database.php','actions.php','sessions.php'
- );
-
- // Get the list of files to include, and alphabetically sort them
-
- $files = get_library_files(dirname(__FILE__) . "/lib",$file_exceptions);
- asort($files);
-
- // Include them
- foreach($files as $file) { - if (isset($CONFIG->debug) && $CONFIG->debug) error_log("Loading $file...");
- if (!@include_once($file))
- throw new InstallationException("Could not load {$file}");
- }
-
- // Set default config
- set_default_config();
-
- } else { // End portion for sanitised installs only
- - throw new InstallationException(elgg_echo('installation:error:configuration'));
-
- }
-
- // 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(); - - // Determine light mode - $lm = strtolower(get_input('lightmode')); - if ($lm == 'true') $lightmode = true; - - // Load plugins, if we're not in light mode - if (($installed) && ($db_installed) && ($sanitised) && (!$lightmode)) { - load_plugins(); - - trigger_elgg_event('plugins_boot', 'system'); - } -
- // 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")) {
- header("Location: install.php");
- exit;
- } -
- // Trigger events
- if (!substr_count($_SERVER["PHP_SELF"],"install.php") &&
- !substr_count($_SERVER["PHP_SELF"],"setup.php") &&
- !$lightmode) {
- // If default settings haven't been installed, forward to the default settings page
- trigger_elgg_event('init', 'system');
- if (!datalist_get('default_settings')) {
- //forward("setup.php");
- }
- }
- - - // System booted, return to normal view - set_input('view', $oldview);
-?>
\ No newline at end of file + // backward compatibility + 'deprecated-1.7.php', 'deprecated-1.8.php', +); + +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); + } +} + +// 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(); + +// @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'); +} + +// @todo deprecate as plugins can use 'init', 'system' event +elgg_trigger_event('plugins_boot', 'system'); + +// Complete the boot process for both engine and plugins +elgg_trigger_event('init', 'system'); + +$CONFIG->boot_complete = true; + +// System loaded and ready +elgg_trigger_event('ready', 'system'); |
