nction load_module_file( $file, $modules = ':all', callable $process = null ) { $self = self::get_instance(); if ( ':all' === $modules ) { $modules = self::get_available_modules(); } elseif ( ':active' === $modules ) { $modules = self::get_active_modules_to_run(); } elseif ( is_string( $modules ) ) { $modules = array( $modules ); } elseif ( ! is_array( $modules ) ) { return false; } foreach ( $modules as $module ) { if ( empty( $self->_module_paths[ $module ] ) ) { continue; } $self->load_container_definitions( $module ); $returned = null; if ( self::get_container()->has( "module.{$module}.files" ) ) { $files = self::get_container()->get( "module.{$module}.files" ); if ( isset( $files[ $file ] ) ) { $returned = $files[ $file ]; } } if ( ! $returned ) { $path = "{$self->_module_paths[$module]}/{$file}"; if ( ! file_exists( $path ) ) { continue; } if ( array_key_exists( $path, $self->returned_files ) ) { $returned = $self->returned_files[ $path ]; } else { $returned = include_once( $path ); $self->returned_files[ $path ] = $returned; } } if ( $returned ) { if ( $process ) { $process( $returned, $module ); } else { $self->run( $returned ); } } } return true; } /** * Get a list of the active modules to run. * * @return string[] */ protected static function get_active_modules_to_run() { if ( ITSEC_Core::is_temp_disable_modules_set() ) { $modules = array(); } else { $modules = self::get_active_modules(); } $modules = array_merge( $modules, array_keys( self::get_instance()->_always_active_modules ) ); $modules = array_unique( $modules ); return $modules; } /** * Fires an action to begin the registration of modules. */ public static function init_modules() { do_action( 'itsec-register-modules' ); } /** * Initialize the container. */ public static function initialize_container() { $load = require __DIR__ . '/container.php'; if ( is_callable( $load ) && ! self::get_instance()->initialized_container ) { $load( self::get_instance()->pimple ); } foreach ( self::get_active_modules_to_run() as $module ) { self::get_instance()->load_container_definitions( $module ); } self::get_instance()->initialized_container = true; } /** * Load and run all active modules. */ public static function run_active_modules() { self::initialize_container(); // The active.php file is for code that will only run when the module is active. self::load_module_file( 'active.php', ':active' ); } /** * Run the activation routine for all registered modules. */ public function run_activation() { self::load_module_file( 'setup.php' ); do_action( 'itsec_modules_do_plugin_activation' ); } /** * Run the deactivation routine for all registered modules. */ public function run_deactivation() { self::load_module_file( 'setup.php' ); do_action( 'itsec_modules_do_plugin_deactivation' ); } /** * Run the uninstall routine for all registered modules. */ public static function run_uninstall() { self::load_module_file( 'setup.php' ); do_action( 'itsec_modules_do_plugin_uninstall' ); } /** * Run the upgrade routine for all registered modules. * * @param int $old_version * @param int $new_version */ public function run_upgrade( $old_version, $new_version ) { self::load_module_file( 'setup.php' ); do_action( 'itsec_modules_do_plugin_upgrade', $old_version, $new_version ); } /** * Get the container. * * @return \Psr\Container\ContainerInterface */ public static function get_container() { if ( ! self::get_instance()->initialized_container ) { self::initialize_container(); } return self::get_instance()->container; } /** * Load the settings controller for all registered modules. * * This function can only be run once per-request. */ public function load_settings_page() { if ( $this->_settings_files_loaded ) { return; } self::load_module_file( 'settings-page.php' ); $this->_settings_files_loaded = true; } /** * Get labels for a module. * * @param string $module * * @return array */ public static function get_labels( $module ) { if ( ! isset( self::get_instance()->labels[ $module ] ) ) { self::get_instance()->labels[ $module ] = []; self::load_module_file( 'labels.php', $module, function ( $labels, $module ) { if ( is_array( $labels ) ) { self::get_instance()->labels[ $module ] = $labels; } } ); } return self::get_instance()->labels[ $module ]; } private function run( $definition ) { if ( $definition && is_string( $definition ) ) { $object = $this->container->get( $definition ); if ( $object instanceof Runnable ) { $object->run(); } } } /** * Load the container definitions for a module. * * @param string $module */ private function load_container_definitions( $module ) { if ( ! isset( $this->loaded_containers[ $module ] ) && isset( $this->_module_paths[ $module ] ) ) { $path = $this->_module_paths[ $module ] . '/container.php'; if ( file_exists( $this->_module_paths[ $module ] . '/container.php' ) && $register = include( $path ) ) { $this->loaded_containers[ $module ] = true; $register( $this->pimple ); } else { $this->loaded_containers[ $module ] = false; } } } } ITSEC_Modules::get_instance();