public static function module_process($process, &$object_pass = null, $select_modules = false)
 {
     // Run a module process on all registered modules
     foreach (pts_module_manager::attached_modules($process, $select_modules) as $module) {
         pts_module_manager::set_current_module($module);
         $module_response = pts_module_manager::module_call($module, $process, $object_pass);
         switch ($module_response) {
             case pts_module::MODULE_UNLOAD:
                 // Unload the PTS module
                 pts_module_manager::detach_module($module);
                 break;
             case pts_module::QUIT_PTS_CLIENT:
                 // Stop the Phoronix Test Suite immediately
                 pts_client::exit_client();
                 break;
         }
     }
     pts_module_manager::set_current_module(null);
 }
 public static function run($args)
 {
     $module = $args[0];
     pts_module_manager::load_module($module);
     pts_client::$display->generic_heading(pts_module_manager::module_call($module, 'module_name') . ' Module');
     if (in_array($args[0], pts_module_manager::attached_modules())) {
         echo '** This module is currently loaded. **' . PHP_EOL;
     }
     echo 'Version: ' . pts_module_manager::module_call($module, 'module_version') . PHP_EOL;
     echo 'Author: ' . pts_module_manager::module_call($module, 'module_author') . PHP_EOL;
     echo 'Description: ' . pts_module_manager::module_call($module, 'module_description') . PHP_EOL;
     echo PHP_EOL . pts_module_manager::module_call($module, 'module_info') . PHP_EOL;
     $all_options = pts_module_manager::module_call($module, 'user_commands');
     if (count($all_options) > 0) {
         echo 'Module User Commands:' . PHP_EOL;
         foreach (array_keys($all_options) as $option) {
             echo '- ' . $module . '.' . str_replace('_', '-', $option) . PHP_EOL;
         }
         echo PHP_EOL;
     }
 }
 public static function module_framework_init()
 {
     // Process initially called when PTS starts up
     // Check for modules to auto-load from the configuration file
     $load_modules = pts_config::read_user_config('PhoronixTestSuite/Options/Modules/LoadModules', null);
     if (!empty($load_modules)) {
         foreach (pts_strings::comma_explode($load_modules) as $module) {
             $module_r = pts_strings::trim_explode('=', $module);
             if (count($module_r) == 2) {
                 // TODO: end up hooking this into pts_module::read_variable() rather than using the real env
                 pts_client::set_environment_variable($module_r[0], $module_r[1]);
             } else {
                 pts_module_manager::attach_module($module);
             }
         }
     }
     // Check for modules to load manually in PTS_MODULES
     if (($load_modules = pts_client::read_env('PTS_MODULES')) !== false) {
         foreach (pts_strings::comma_explode($load_modules) as $module) {
             if (!pts_module_manager::is_module_attached($module)) {
                 pts_module_manager::attach_module($module);
             }
         }
     }
     // Detect modules to load automatically
     pts_module_manager::detect_modules_to_load();
     // Clean-up modules list
     pts_module_manager::clean_module_list();
     // Reset counter
     pts_module_manager::set_current_module(null);
     // Load the modules
     $module_store_list = array();
     foreach (pts_module_manager::attached_modules() as $module) {
         $class_vars = get_class_vars($module);
         $module_store_vars = isset($class_vars['module_store_vars']) ? $class_vars['module_store_vars'] : null;
         if (is_array($module_store_vars)) {
             foreach ($module_store_vars as $store_var) {
                 if (!in_array($store_var, $module_store_list)) {
                     array_push($module_store_list, $store_var);
                 }
             }
         }
     }
     // Should any of the module options be saved to the results?
     foreach ($module_store_list as $var) {
         $var_value = pts_client::read_env($var);
         if (!empty($var_value)) {
             pts_module_manager::var_store_add($var, $var_value);
         }
     }
     pts_module_manager::module_process('__startup');
     pts_define('PTS_STARTUP_TASK_PERFORMED', true);
     register_shutdown_function(array('pts_module_manager', 'module_process'), '__shutdown');
 }