diff options
Diffstat (limited to 'engine/start.php')
| -rw-r--r-- | engine/start.php | 194 |
1 files changed, 88 insertions, 106 deletions
diff --git a/engine/start.php b/engine/start.php index aade0a817..55b8ffa5b 100644 --- a/engine/start.php +++ b/engine/start.php @@ -1,139 +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', -); - -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 library files - $lib_files = array( - 'actions.php', 'activity.php', 'admin.php', 'annotations.php', 'api.php', - 'cache.php', 'calendar.php', 'configuration.php', 'cron.php', - 'entities.php', 'export.php', 'extender.php', 'database.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', 'river2.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}"); - } - } - - // Load system settings - if (!include_once(dirname(__FILE__) . "/settings.php")) { - throw new InstallationException("Elgg could not load the settings 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; -}
\ No newline at end of file +// System loaded and ready +elgg_trigger_event('ready', 'system'); |
