<?php /** * Bootstraps and starts the Elgg engine. * * This file loads the full Elgg engine, checks the installation * state, then emits a series of events to finish booting Elgg: * - {@elgg_event boot system} * - {@elgg_event plugins_boot system} * - {@elgg_event init 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. The following * array keys are defined by core Elgg: * * Plugin authors are encouraged to use get_config() instead of accessing the * global directly. * * @see get_config() * @see engine/settings.php * @global stdClass $CONFIG */ global $CONFIG; if (!isset($CONFIG)) { $CONFIG = new stdClass; } $lib_dir = dirname(__FILE__) . '/lib/'; /** * The minimum required libs to bootstrap an Elgg installation. * * @var array */ $required_files = array( 'elgglib.php', 'views.php', 'access.php', 'system_log.php', 'export.php', 'sessions.php', 'languages.php', 'input.php', 'install.php', 'cache.php', 'output.php' ); // include bootstraping libs 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; } } // Register the error handler set_error_handler('_elgg_php_error_handler'); set_exception_handler('_elgg_php_exception_handler'); /** * Load the system settings */ if (!include_once(dirname(__FILE__) . "/settings.php")) { $msg = elgg_echo('InstallationException:CannotLoadSettings'); throw new InstallationException($msg); } // load the rest of the library files from engine/lib/ $lib_files = array( // these need to be loaded first. 'database.php', 'actions.php', 'admin.php', 'annotations.php', 'calendar.php', 'configuration.php', 'cron.php', 'entities.php', 'export.php', 'extender.php', 'filestore.php', 'group.php', 'location.php', 'mb_wrapper.php', 'memcache.php', 'metadata.php', 'metastrings.php', 'navigation.php', 'notification.php', 'objects.php', 'opendd.php', 'pagehandler.php', 'pageowner.php', 'pam.php', 'plugins.php', 'private_settings.php', 'relationships.php', 'river.php', 'sites.php', 'statistics.php', 'tags.php', 'usersettings.php', 'users.php', 'version.php', 'web_services.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)) { $msg = sprintf(elgg_echo('InstallationException:MissingLibrary'), $file); throw new InstallationException($msg); } } // confirm that the installation completed successfully verify_installation(); // Autodetect some default configuration settings set_default_config(); // Trigger boot events for core. Plugins can't hook // into this because they haven't been loaded yet. elgg_trigger_event('boot', 'system'); // Load the plugins that are active load_plugins(); elgg_trigger_event('plugins_boot', 'system'); // Trigger system init event for plugins elgg_trigger_event('init', 'system'); // Regenerate the simple cache if expired. // Don't do it on upgrade because upgrade does it itself. // @todo - move into function and perhaps run off init system event if (!defined('UPGRADING')) { $viewtype = get_input('view', 'default'); $lastupdate = datalist_get("simplecache_lastupdate_$viewtype"); $lastcached = datalist_get("simplecache_lastcached_$viewtype"); if ($lastupdate == 0 || $lastcached < $lastupdate) { elgg_view_regenerate_simplecache($viewtype); } // needs to be set for links in html head $CONFIG->lastcache = $lastcached; }