Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
33.33% |
8 / 24 |
CRAP | |
41.67% |
50 / 120 |
| config | |
0.00% |
0 / 1 |
|
33.33% |
8 / 24 |
392.15 | |
41.67% |
50 / 120 |
| __construct | |
100.00% |
1 / 1 |
1 | |
100.00% |
18 / 18 |
|||
| get | |
100.00% |
1 / 1 |
2 | |
100.00% |
1 / 1 |
|||
| set | |
100.00% |
1 / 1 |
1 | |
100.00% |
4 / 4 |
|||
| system_get | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 1 |
|||
| get_time_remaining | |
0.00% |
0 / 1 |
2.06 | |
75.00% |
3 / 4 |
|||
| get_memory_remaining | |
0.00% |
0 / 1 |
3.03 | |
85.71% |
6 / 7 |
|||
| set_finished_task | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
| set_active_module | |
100.00% |
1 / 1 |
1 | |
100.00% |
3 / 3 |
|||
| get_progress_data | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
| load_config | |
0.00% |
0 / 1 |
42 | |
0.00% |
0 / 19 |
|||
| create_progress_restart_point | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 4 |
|||
| jump_to_restart_point | |
0.00% |
0 / 1 |
20 | |
0.00% |
0 / 7 |
|||
| has_restart_point | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 1 |
|||
| save_config | |
0.00% |
0 / 1 |
12 | |
0.00% |
0 / 19 |
|||
| increment_current_task_progress | |
0.00% |
0 / 1 |
2.15 | |
66.67% |
4 / 6 |
|||
| set_current_task_progress | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
| set_task_progress_count | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
| get_current_task_progress | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 1 |
|||
| get_task_progress_count | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 1 |
|||
| set_finished_navigation_stage | |
0.00% |
0 / 1 |
12 | |
0.00% |
0 / 5 |
|||
| set_active_navigation_stage | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
| get_navigation_data | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 1 |
|||
| clean_up_config_file | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 3 |
|||
| setup_system_data | |
100.00% |
1 / 1 |
1 | |
100.00% |
6 / 6 |
|||
| <?php | |
| /** | |
| * | |
| * This file is part of the phpBB Forum Software package. | |
| * | |
| * @copyright (c) phpBB Limited <https://www.phpbb.com> | |
| * @license GNU General Public License, version 2 (GPL-2.0) | |
| * | |
| * For full copyright and license information, please see | |
| * the docs/CREDITS.txt file. | |
| * | |
| */ | |
| namespace phpbb\install\helper; | |
| use phpbb\install\exception\installer_config_not_writable_exception; | |
| /** | |
| * Stores common settings and installation status | |
| */ | |
| class config | |
| { | |
| /** | |
| * @var \phpbb\filesystem\filesystem_interface | |
| */ | |
| protected $filesystem; | |
| /** | |
| * Array which contains config settings for the installer | |
| * | |
| * The array will also store all the user input, as well as any | |
| * data that is passed to other tasks by a task. | |
| * | |
| * @var array | |
| */ | |
| protected $installer_config; | |
| /** | |
| * @var string | |
| */ | |
| protected $install_config_file; | |
| /** | |
| * @var \bantu\IniGetWrapper\IniGetWrapper | |
| */ | |
| protected $php_ini; | |
| /** | |
| * @var string | |
| */ | |
| protected $phpbb_root_path; | |
| /** | |
| * Array containing progress information | |
| * | |
| * @var array | |
| */ | |
| protected $progress_data; | |
| /** | |
| * Array containing system information | |
| * | |
| * The array contains run time and memory limitations. | |
| * | |
| * @var array | |
| */ | |
| protected $system_data; | |
| /** | |
| * Array containing navigation bar information | |
| * | |
| * @var array | |
| */ | |
| protected $navigation_data; | |
| /** | |
| * Flag indicating that config file should be cleaned up | |
| * | |
| * @var bool | |
| */ | |
| protected $do_clean_up; | |
| /** | |
| * Constructor | |
| */ | |
| public function __construct(\phpbb\filesystem\filesystem_interface $filesystem, \bantu\IniGetWrapper\IniGetWrapper $php_ini, $phpbb_root_path) | |
| { | |
| $this->filesystem = $filesystem; | |
| $this->php_ini = $php_ini; | |
| $this->phpbb_root_path = $phpbb_root_path; | |
| $this->do_clean_up = false; | |
| // Set up data arrays | |
| $this->navigation_data = array(); | |
| $this->installer_config = array(); | |
| $this->system_data = array(); | |
| $this->progress_data = array( | |
| 'last_task_module_name' => '', // Stores the service name of the latest finished module | |
| 'last_task_module_index' => 0, // Stores the index of the latest finished module | |
| 'last_task_index' => 0, // Stores the index of the latest finished task | |
| 'max_task_progress' => 0, | |
| 'current_task_progress' => 0, | |
| '_restart_points' => array(), | |
| 'use_restart_point' => false, | |
| ); | |
| $this->install_config_file = $this->phpbb_root_path . 'store/install_config.php'; | |
| $this->setup_system_data(); | |
| } | |
| /** | |
| * Returns data for a specified parameter | |
| * | |
| * @param string $param_name Name of the parameter to return | |
| * @param mixed $default Default value to return when the specified data | |
| * does not exist. | |
| * | |
| * @return mixed value of the specified parameter or the default value if the data | |
| * cannot be recovered. | |
| */ | |
| public function get($param_name, $default = false) | |
| { | |
| return (isset($this->installer_config[$param_name])) ? $this->installer_config[$param_name] : $default; | |
| } | |
| /** | |
| * Sets a parameter in installer_config | |
| * | |
| * @param string $param_name Name of the parameter | |
| * @param mixed $value Values to set the parameter | |
| */ | |
| public function set($param_name, $value) | |
| { | |
| $this->installer_config = array_merge($this->installer_config, array( | |
| $param_name => $value, | |
| )); | |
| } | |
| /** | |
| * Returns system parameter | |
| * | |
| * @param string $param_name Name of the parameter | |
| * | |
| * @return mixed Returns system parameter if it is defined, false otherwise | |
| */ | |
| public function system_get($param_name) | |
| { | |
| return (isset($this->system_data[$param_name])) ? $this->system_data[$param_name] : false; | |
| } | |
| /** | |
| * Returns remaining time until the run time limit | |
| * | |
| * @return int Remaining time until the run time limit in seconds | |
| */ | |
| public function get_time_remaining() | |
| { | |
| if ($this->system_data['max_execution_time'] <= 0) | |
| { | |
| return PHP_INT_MAX; | |
| } | |
| return ($this->system_data['start_time'] + $this->system_data['max_execution_time']) - microtime(true); | |
| } | |
| /** | |
| * Returns remaining memory available for PHP | |
| * | |
| * @return int Remaining memory until reaching the limit | |
| */ | |
| public function get_memory_remaining() | |
| { | |
| if ($this->system_data['memory_limit'] <= 0) | |
| { | |
| return 1; | |
| } | |
| if (function_exists('memory_get_usage')) | |
| { | |
| return ($this->system_data['memory_limit'] - memory_get_usage()); | |
| } | |
| // If we cannot get the information then just return a positive number (and cross fingers) | |
| return 1; | |
| } | |
| /** | |
| * Saves the latest executed task | |
| * | |
| * @param int $task_service_index Index of the installer task service in the module | |
| */ | |
| public function set_finished_task($task_service_index) | |
| { | |
| $this->progress_data['last_task_index'] = $task_service_index; | |
| } | |
| /** | |
| * Set active module | |
| * | |
| * @param string $module_service_name Name of the installer module service | |
| * @param int $module_service_index Index of the installer module service | |
| */ | |
| public function set_active_module($module_service_name, $module_service_index) | |
| { | |
| $this->progress_data['last_task_module_name'] = $module_service_name; | |
| $this->progress_data['last_task_module_index'] = $module_service_index; | |
| } | |
| /** | |
| * Getter for progress data | |
| * | |
| * @return array | |
| */ | |
| public function get_progress_data() | |
| { | |
| return $this->progress_data; | |
| } | |
| /** | |
| * Recovers install configuration from file | |
| */ | |
| public function load_config() | |
| { | |
| if (!$this->filesystem->exists($this->install_config_file)) | |
| { | |
| return; | |
| } | |
| $file_content = @file_get_contents($this->install_config_file); | |
| $serialized_data = trim(substr($file_content, 8)); | |
| $installer_config = array(); | |
| $progress_data = array(); | |
| $navigation_data = array(); | |
| if (!empty($serialized_data)) | |
| { | |
| $unserialized_data = json_decode($serialized_data, true); | |
| $installer_config = (is_array($unserialized_data['installer_config'])) ? $unserialized_data['installer_config'] : array(); | |
| $progress_data = (is_array($unserialized_data['progress_data'])) ? $unserialized_data['progress_data'] : array(); | |
| $navigation_data = (is_array($unserialized_data['navigation_data'])) ? $unserialized_data['navigation_data'] : array(); | |
| } | |
| $this->installer_config = array_merge($this->installer_config, $installer_config); | |
| $this->progress_data = array_merge($this->progress_data, $progress_data); | |
| $this->navigation_data = array_merge($this->navigation_data, $navigation_data); | |
| } | |
| /** | |
| * Creates a progress restart point | |
| * | |
| * Restart points can be used to repeat certain tasks periodically. | |
| * You need to call this method from the first task you want to repeat. | |
| * | |
| * @param string $name Name of the restart point | |
| */ | |
| public function create_progress_restart_point($name) | |
| { | |
| $tmp_progress_data = $this->progress_data; | |
| unset($tmp_progress_data['_restart_points']); | |
| $this->progress_data['_restart_points'][$name] = $tmp_progress_data; | |
| } | |
| /** | |
| * Set restart point to continue from | |
| * | |
| * @param string $name Name of the restart point | |
| * | |
| * @return bool Returns false if the restart point name does not exist, otherwise true | |
| */ | |
| public function jump_to_restart_point($name) | |
| { | |
| if (!isset($this->progress_data['_restart_points'][$name]) || empty($this->progress_data['_restart_points'][$name])) | |
| { | |
| return false; | |
| } | |
| foreach ($this->progress_data['_restart_points'][$name] as $key => $value) | |
| { | |
| $this->progress_data[$key] = $value; | |
| } | |
| return true; | |
| } | |
| /** | |
| * Returns whether a restart point with a given name exists or not | |
| * | |
| * @param string $name Name of the restart point | |
| * | |
| * @return bool | |
| */ | |
| public function has_restart_point($name) | |
| { | |
| return isset($this->progress_data['_restart_points'][$name]); | |
| } | |
| /** | |
| * Dumps install configuration to disk | |
| */ | |
| public function save_config() | |
| { | |
| if ($this->do_clean_up) | |
| { | |
| @unlink($this->install_config_file); | |
| return; | |
| } | |
| // Create array to save | |
| $save_array = array( | |
| 'installer_config' => $this->installer_config, | |
| 'progress_data' => $this->progress_data, | |
| 'navigation_data' => $this->navigation_data, | |
| ); | |
| // Create file content | |
| $file_content = '<?php // '; | |
| $file_content .= json_encode($save_array); | |
| $file_content .= "\n"; | |
| // Dump file_content to disk | |
| $fp = @fopen($this->install_config_file, 'w'); | |
| if (!$fp) | |
| { | |
| throw new installer_config_not_writable_exception(); | |
| } | |
| fwrite($fp, $file_content); | |
| fclose($fp); | |
| // Enforce 0600 permission for install config | |
| $this->filesystem->chmod([$this->install_config_file], 0600); | |
| } | |
| /** | |
| * Increments the task progress | |
| * | |
| * @param int $increment_by The amount to increment by | |
| */ | |
| public function increment_current_task_progress($increment_by = 1) | |
| { | |
| $this->progress_data['current_task_progress'] += $increment_by; | |
| if ($this->progress_data['current_task_progress'] > $this->progress_data['max_task_progress']) | |
| { | |
| $this->progress_data['current_task_progress'] = $this->progress_data['max_task_progress']; | |
| } | |
| } | |
| /** | |
| * Sets the task progress to a specific number | |
| * | |
| * @param int $task_progress The task progress number to be set | |
| */ | |
| public function set_current_task_progress($task_progress) | |
| { | |
| $this->progress_data['current_task_progress'] = $task_progress; | |
| } | |
| /** | |
| * Sets the number of tasks belonging to the installer in the current mode. | |
| * | |
| * @param int $task_progress_count Number of tasks | |
| */ | |
| public function set_task_progress_count($task_progress_count) | |
| { | |
| $this->progress_data['max_task_progress'] = $task_progress_count; | |
| } | |
| /** | |
| * Returns the number of the current task being executed | |
| * | |
| * @return int | |
| */ | |
| public function get_current_task_progress() | |
| { | |
| return $this->progress_data['current_task_progress']; | |
| } | |
| /** | |
| * Returns the number of tasks belonging to the installer in the current mode. | |
| * | |
| * @return int | |
| */ | |
| public function get_task_progress_count() | |
| { | |
| return $this->progress_data['max_task_progress']; | |
| } | |
| /** | |
| * Marks stage as completed in the navigation bar | |
| * | |
| * @param array $nav_path Array to the navigation elem | |
| */ | |
| public function set_finished_navigation_stage($nav_path) | |
| { | |
| if (isset($this->navigation_data['finished']) && in_array($nav_path, $this->navigation_data['finished'])) | |
| { | |
| return; | |
| } | |
| $this->navigation_data['finished'][] = $nav_path; | |
| } | |
| /** | |
| * Marks stage as active in the navigation bar | |
| * | |
| * @param array $nav_path Array to the navigation elem | |
| */ | |
| public function set_active_navigation_stage($nav_path) | |
| { | |
| $this->navigation_data['active'] = $nav_path; | |
| } | |
| /** | |
| * Returns navigation data | |
| * | |
| * @return array | |
| */ | |
| public function get_navigation_data() | |
| { | |
| return $this->navigation_data; | |
| } | |
| /** | |
| * Removes install config file | |
| */ | |
| public function clean_up_config_file() | |
| { | |
| $this->do_clean_up = true; | |
| @unlink($this->install_config_file); | |
| } | |
| /** | |
| * Filling up system_data array | |
| */ | |
| protected function setup_system_data() | |
| { | |
| // Query maximum runtime from php.ini | |
| $execution_time = $this->php_ini->getNumeric('max_execution_time'); | |
| $execution_time = min(15, $execution_time / 2); | |
| $this->system_data['max_execution_time'] = $execution_time; | |
| // Set start time | |
| $this->system_data['start_time'] = microtime(true); | |
| // Get memory limit | |
| $this->system_data['memory_limit'] = $this->php_ini->getBytes('memory_limit'); | |
| } | |
| } |