public static function load_modules()
{
if (!self::is_active() && !self::is_development_mode()) {
if (!is_multisite() || !get_site_option('jetpack_protect_active')) {
return;
}
}
$version = Jetpack_Options::get_option('version');
if (!$version) {
$version = $old_version = JETPACK__VERSION . ':' . time();
/** This action is documented in class.jetpack.php */
do_action('updating_jetpack_version', $version, false);
Jetpack_Options::update_options(compact('version', 'old_version'));
}
list($version) = explode(':', $version);
$modules = array_filter(Jetpack::get_active_modules(), array('Jetpack', 'is_module'));
$modules_data = array();
// Don't load modules that have had "Major" changes since the stored version until they have been deactivated/reactivated through the lint check.
if (version_compare($version, JETPACK__VERSION, '<')) {
$updated_modules = array();
foreach ($modules as $module) {
$modules_data[$module] = Jetpack::get_module($module);
if (!isset($modules_data[$module]['changed'])) {
continue;
}
if (version_compare($modules_data[$module]['changed'], $version, '<=')) {
continue;
}
$updated_modules[] = $module;
}
$modules = array_diff($modules, $updated_modules);
}
$is_development_mode = Jetpack::is_development_mode();
foreach ($modules as $index => $module) {
// If we're in dev mode, disable modules requiring a connection
if ($is_development_mode) {
// Prime the pump if we need to
if (empty($modules_data[$module])) {
$modules_data[$module] = Jetpack::get_module($module);
}
// If the module requires a connection, but we're in local mode, don't include it.
if ($modules_data[$module]['requires_connection']) {
continue;
}
}
if (did_action('jetpack_module_loaded_' . $module)) {
continue;
}
if (!@(include Jetpack::get_module_path($module))) {
unset($modules[$index]);
self::update_active_modules(array_values($modules));
continue;
}
/**
* Fires when a specific module is loaded.
* The dynamic part of the hook, $module, is the module slug.
*
* @since 1.1.0
*/
do_action('jetpack_module_loaded_' . $module);
}
/**
* Fires when all the modules are loaded.
*
* @since 1.1.0
*/
do_action('jetpack_modules_loaded');
// Load module-specific code that is needed even when a module isn't active. Loaded here because code contained therein may need actions such as setup_theme.
if (Jetpack::is_active() || Jetpack::is_development_mode()) {
require_once JETPACK__PLUGIN_DIR . 'modules/module-extras.php';
}
}