diff options
author | Tristan Darricau <tristan.darricau@sensiolabs.com> | 2016-02-16 00:06:52 +0100 |
---|---|---|
committer | Tristan Darricau <tristan.darricau@sensiolabs.com> | 2016-02-16 00:06:52 +0100 |
commit | d0ce6a18df2172a6e9baf1f1c2802efb30b25323 (patch) | |
tree | 478bf6c878bacec7c4e60832e0af7d106bd52e52 /phpBB | |
parent | 00d71d854cb844cba7755a2e8adfa4217dbc0ef0 (diff) | |
parent | 6debd9a1bea4ee69a06eac43cc6b2f856f601604 (diff) | |
download | forums-d0ce6a18df2172a6e9baf1f1c2802efb30b25323.tar forums-d0ce6a18df2172a6e9baf1f1c2802efb30b25323.tar.gz forums-d0ce6a18df2172a6e9baf1f1c2802efb30b25323.tar.bz2 forums-d0ce6a18df2172a6e9baf1f1c2802efb30b25323.tar.xz forums-d0ce6a18df2172a6e9baf1f1c2802efb30b25323.zip |
Merge pull request #4171 from CHItA/ticket/14462
[ticket/14462] Try to prevent timeouts in the installer
* CHItA/ticket/14462:
[ticket/14462] Not show timeout messages in convertors
[ticket/14462] Make timeout error translateable
[ticket/14462] Update ordering in install db config
[ticket/14462] Fix comments
[ticket/14462] Fix tests
[ticket/14462] Fix CS and typo
[ticket/14462] Set instance of db driver for database access using global
[ticket/14462] Fix installation in tests
[ticket/14462] Refactor tasks to be more modular
[ticket/14462] Further speed improvements
Diffstat (limited to 'phpBB')
38 files changed, 1116 insertions, 352 deletions
diff --git a/phpBB/adm/style/installer_footer.html b/phpBB/adm/style/installer_footer.html index 63aebec993..fefa8f6d3f 100644 --- a/phpBB/adm/style/installer_footer.html +++ b/phpBB/adm/style/installer_footer.html @@ -11,6 +11,15 @@ </div> </div> +<script type="text/javascript"> +<!-- +installLang = { + title: '{LA_TIMEOUT_DETECTED_TITLE}', + msg: '{LA_TIMEOUT_DETECTED_MESSAGE}' +}; +//--> +</script> + <script type="text/javascript" src="{T_JQUERY_LINK}"></script> <!-- IF S_ALLOW_CDN --><script type="text/javascript">window.jQuery || document.write('\x3Cscript src="{T_ASSETS_PATH}/javascript/jquery.min.js">\x3C/script>');</script><!-- ENDIF --> <script type="text/javascript" src="{T_ASSETS_PATH}/javascript/core.js?assets_version={T_ASSETS_VERSION}"></script> diff --git a/phpBB/assets/javascript/installer.js b/phpBB/assets/javascript/installer.js index 4a4f381844..d9f446a28d 100644 --- a/phpBB/assets/javascript/installer.js +++ b/phpBB/assets/javascript/installer.js @@ -12,6 +12,7 @@ var progressTimer = null; var currentProgress = 0; var refreshRequested = false; + var transmissionOver = false; // Template related variables var $contentWrapper = $('.install-body').find('.main'); @@ -329,6 +330,12 @@ if (responseObject.hasOwnProperty('redirect')) { redirect(responseObject.redirect.url, responseObject.redirect.use_ajax); } + + if (responseObject.hasOwnProperty('over')) { + if (responseObject.over) { + transmissionOver = true; + } + } } /** @@ -357,10 +364,21 @@ $('#loading_indicator').css('display', 'none'); resetPolling(); + var timeoutDetected = !transmissionOver; + if (refreshRequested) { refreshRequested = false; doRefresh(); } + + if (timeoutDetected) { + addMessage('error', + [{ + title: installLang.title, + description: installLang.msg + }] + ); + } } } @@ -420,6 +438,7 @@ */ function startPolling(xhReq) { resetPolling(); + transmissionOver = false; pollTimer = setInterval(function () { pollContent(xhReq); }, 250); diff --git a/phpBB/config/installer/container/services_install_controller.yml b/phpBB/config/installer/container/services_install_controller.yml index 5688c61db9..394eb95c06 100644 --- a/phpBB/config/installer/container/services_install_controller.yml +++ b/phpBB/config/installer/container/services_install_controller.yml @@ -53,6 +53,7 @@ services: phpbb.installer.controller.convert: class: phpbb\convert\controller\convertor arguments: + - '@cache.driver' - '@installer.helper.container_factory' - '@installer.helper.database' - '@phpbb.installer.controller.helper' diff --git a/phpBB/config/installer/container/services_install_data.yml b/phpBB/config/installer/container/services_install_data.yml index d119ba6ebb..df63d16d0d 100644 --- a/phpBB/config/installer/container/services_install_data.yml +++ b/phpBB/config/installer/container/services_install_data.yml @@ -23,6 +23,7 @@ services: installer.install_data.add_modules: class: phpbb\install\module\install_data\task\add_modules arguments: + - '@installer.helper.config' - '@installer.helper.iohandler' - '@installer.helper.container_factory' tags: diff --git a/phpBB/config/installer/container/services_install_database.yml b/phpBB/config/installer/container/services_install_database.yml index 8324cd6086..33f596506d 100644 --- a/phpBB/config/installer/container/services_install_database.yml +++ b/phpBB/config/installer/container/services_install_database.yml @@ -1,16 +1,36 @@ services: - installer.install_database.create_schema: - class: phpbb\install\module\install_database\task\create_schema + installer.install_database.create_schema_file: + class: phpbb\install\module\install_database\task\create_schema_file arguments: - '@installer.helper.config' - '@installer.helper.database' - '@filesystem' - - '@installer.helper.iohandler' - '%core.root_path%' - '%core.php_ext%' tags: - { name: install_database_install, order: 10 } + installer.install_database.set_up_database: + class: phpbb\install\module\install_database\task\set_up_database + arguments: + - '@installer.helper.config' + - '@installer.helper.database' + - '@filesystem' + - '@installer.helper.iohandler' + - '%core.root_path%' + tags: + - { name: install_database_install, order: 20 } + + installer.install_database.add_tables: + class: phpbb\install\module\install_database\task\add_tables + arguments: + - '@installer.helper.config' + - '@installer.helper.database' + - '@filesystem' + - '%core.root_path%' + tags: + - { name: install_database_install, order: 30 } + installer.install_database.add_default_data: class: phpbb\install\module\install_database\task\add_default_data arguments: @@ -21,7 +41,7 @@ services: - '@language' - '%core.root_path%' tags: - - { name: install_database_install, order: 20 } + - { name: install_database_install, order: 40 } installer.install_database.add_config_settings: class: phpbb\install\module\install_database\task\add_config_settings @@ -33,7 +53,7 @@ services: - '@language' - '%core.root_path%' tags: - - { name: install_database_install, order: 30 } + - { name: install_database_install, order: 50 } installer.module.install_database_collection: class: phpbb\di\ordered_service_collection diff --git a/phpBB/config/installer/container/services_install_finish.yml b/phpBB/config/installer/container/services_install_finish.yml index 854b129b69..f144cc6317 100644 --- a/phpBB/config/installer/container/services_install_finish.yml +++ b/phpBB/config/installer/container/services_install_finish.yml @@ -2,6 +2,7 @@ services: installer.install_finish.populate_migrations: class: phpbb\install\module\install_finish\task\populate_migrations arguments: + - '@installer.helper.config' - '@installer.helper.container_factory' tags: - { name: install_finish, order: 10 } diff --git a/phpBB/config/installer/container/services_installer.yml b/phpBB/config/installer/container/services_installer.yml index bf9d28ec65..19b1b4f08e 100644 --- a/phpBB/config/installer/container/services_installer.yml +++ b/phpBB/config/installer/container/services_installer.yml @@ -89,6 +89,7 @@ services: - '@cache.driver' - '@installer.helper.config' - '@path_helper' + - '@installer.helper.container_factory' installer.install.module_collection: class: phpbb\di\ordered_service_collection @@ -108,8 +109,10 @@ services: parent: installer.installer.abstract calls: - [set_modules, ['@installer.install.module_collection']] + - [set_purge_cache_before, [false]] installer.installer.update: parent: installer.installer.abstract calls: - [set_modules, ['@installer.update.module_collection']] + - [set_purge_cache_before, [true]] diff --git a/phpBB/install/convert/controller/convertor.php b/phpBB/install/convert/controller/convertor.php index a36494c7e6..a40f1d0b52 100644 --- a/phpBB/install/convert/controller/convertor.php +++ b/phpBB/install/convert/controller/convertor.php @@ -13,6 +13,7 @@ namespace phpbb\convert\controller; +use phpbb\cache\driver\driver_interface; use phpbb\exception\http_exception; use phpbb\install\controller\helper; use phpbb\install\helper\container_factory; @@ -36,11 +37,16 @@ use Symfony\Component\HttpFoundation\StreamedResponse; class convertor { /** - * @var \phpbb\cache\driver\driver_interface + * @var driver_interface */ protected $cache; /** + * @var driver_interface + */ + protected $installer_cache; + + /** * @var \phpbb\config\db */ protected $config; @@ -123,6 +129,7 @@ class convertor /** * Constructor * + * @param driver_interface $cache * @param container_factory $container * @param database $db_helper * @param helper $controller_helper @@ -135,8 +142,9 @@ class convertor * @param string $phpbb_root_path * @param string $php_ext */ - public function __construct(container_factory $container, database $db_helper, helper $controller_helper, install_helper $install_helper, factory $iohandler, language $language, navigation_provider $nav, request_interface $request, template $template, $phpbb_root_path, $php_ext) + public function __construct(driver_interface $cache, container_factory $container, database $db_helper, helper $controller_helper, install_helper $install_helper, factory $iohandler, language $language, navigation_provider $nav, request_interface $request, template $template, $phpbb_root_path, $php_ext) { + $this->installer_cache = $cache; $this->controller_helper = $controller_helper; $this->db_helper = $db_helper; $this->install_helper = $install_helper; @@ -379,6 +387,7 @@ class convertor // If we reached this step (conversion completed) we want to purge the cache and log the user out. // This is for making sure the session get not screwed due to the 3.0.x users table being completely new. $this->cache->purge(); + $this->installer_cache->purge(); require_once($this->phpbb_root_path . 'includes/constants.' . $this->php_ext); require_once($this->phpbb_root_path . 'includes/functions_convert.' . $this->php_ext); @@ -583,7 +592,7 @@ class convertor $url = $this->controller_helper->route('phpbb_convert_convert', array('converter' => $convertor)); $this->iohandler->redirect($url); - $this->iohandler->send_response(); + $this->iohandler->send_response(true); } else { @@ -677,7 +686,7 @@ class convertor if ($this->request->is_ajax()) { $this->iohandler->add_user_form_group($form_title, $form_data); - $this->iohandler->send_response(); + $this->iohandler->send_response(true); } else { @@ -770,7 +779,7 @@ class convertor if ($this->request->is_ajax()) { $this->iohandler->add_error_message($msg, $desc); - $this->iohandler->send_response(); + $this->iohandler->send_response(true); } else { @@ -794,7 +803,7 @@ class convertor public function redirect_to_html($url) { $this->iohandler->redirect($url); - $this->iohandler->send_response(); + $this->iohandler->send_response(true); } private function setup_navigation($stage) diff --git a/phpBB/language/en/install.php b/phpBB/language/en/install.php index e643dd06c1..31578824ef 100644 --- a/phpBB/language/en/install.php +++ b/phpBB/language/en/install.php @@ -120,7 +120,11 @@ $lang = array_merge($lang, array( // General error messages $lang = array_merge($lang, array( 'INST_ERR_MISSING_DATA' => 'You must fill out all fields in this block.', - 'PHPBB_ALREADY_INSTALLED' => 'phpBB is already installed.' + + 'PHPBB_ALREADY_INSTALLED' => 'phpBB is already installed.', + + 'TIMEOUT_DETECTED_TITLE' => 'The installer detected a timeout', + 'TIMEOUT_DETECTED_MESSAGE' => 'The installer has detected a timeout, you may try to refresh the page, which may lead to data corruption. We suggest that you either increase your timeout settings or try to use the CLI.', )); // Data obtaining translations @@ -200,6 +204,7 @@ $lang = array_merge($lang, array( 'INST_ERR_DB_NO_SQLITE3' => 'The version of the SQLite extension you have installed is too old, it must be upgraded to at least 3.6.15.', 'INST_ERR_DB_NO_ORACLE' => 'The version of Oracle installed on this machine requires you to set the <var>NLS_CHARACTERSET</var> parameter to <var>UTF8</var>. Either upgrade your installation to 9.2+ or change the parameter.', 'INST_ERR_DB_NO_POSTGRES' => 'The database you have selected was not created in <var>UNICODE</var> or <var>UTF8</var> encoding. Try installing with a database in <var>UNICODE</var> or <var>UTF8</var> encoding.', + 'INST_SCHEMA_FILE_NOT_WRITABLE' => 'The schema file is not writable', // // Email data @@ -275,9 +280,11 @@ $lang = array_merge($lang, array( 'TASK_CREATE_CONFIG_FILE' => 'Creating configuration file', // Install database - 'TASK_ADD_CONFIG_SETTINGS' => 'Adding configuration settings', - 'TASK_ADD_DEFAULT_DATA' => 'Adding default settings to the database', - 'TASK_CREATE_DATABASE_SCHEMA' => 'Creating database schema', + 'TASK_ADD_CONFIG_SETTINGS' => 'Adding configuration settings', + 'TASK_ADD_DEFAULT_DATA' => 'Adding default settings to the database', + 'TASK_CREATE_DATABASE_SCHEMA_FILE' => 'Creating database schema file', + 'TASK_SETUP_DATABASE' => 'Setting up database', + 'TASK_CREATE_TABLES' => 'Creating tables', // Install data 'TASK_ADD_BOTS' => 'Registering bots', diff --git a/phpBB/phpbb/install/helper/config.php b/phpBB/phpbb/install/helper/config.php index f58925899b..fad6749019 100644 --- a/phpBB/phpbb/install/helper/config.php +++ b/phpBB/phpbb/install/helper/config.php @@ -96,7 +96,8 @@ class config $this->system_data = array(); $this->progress_data = array( 'last_task_module_name' => '', // Stores the service name of the latest finished module - 'last_task_name' => '', // Stores the service name of the latest finished task + '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(), @@ -187,21 +188,23 @@ class config /** * Saves the latest executed task * - * @param string $task_service_name Name of the installer task service + * @param int $task_service_index Index of the installer task service in the module */ - public function set_finished_task($task_service_name) + public function set_finished_task($task_service_index) { - $this->progress_data['last_task_name'] = $task_service_name; + $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) + 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; } /** @@ -391,6 +394,11 @@ class config */ 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; } diff --git a/phpBB/phpbb/install/helper/container_factory.php b/phpBB/phpbb/install/helper/container_factory.php index 6c1ecd2d02..5cf4f8a283 100644 --- a/phpBB/phpbb/install/helper/container_factory.php +++ b/phpBB/phpbb/install/helper/container_factory.php @@ -13,7 +13,6 @@ namespace phpbb\install\helper; -use phpbb\cache\driver\dummy; use phpbb\install\exception\cannot_build_container_exception; use phpbb\language\language; use phpbb\request\request; @@ -157,25 +156,20 @@ class container_factory ->with_environment('production') ->with_config($phpbb_config_php_file) ->with_config_path($config_path) - ->without_cache() ->without_compiled_container() ->get_container(); // Setting request is required for the compatibility globals as those are generated from // this container - $this->container->register('request')->setSynthetic(true); - $this->container->set('request', $this->request); - - $this->container->register('language')->setSynthetic(true); - $this->container->set('language', $this->language); - - // Replace cache service, as config gets cached, and we don't want that when we are installing - if (!is_dir($other_config_path)) + if (!$this->container->isFrozen()) { - $this->container->register('cache.driver')->setSynthetic(true); - $this->container->set('cache.driver', new dummy()); + $this->container->register('request')->setSynthetic(true); + $this->container->register('language')->setSynthetic(true); } + $this->container->set('request', $this->request); + $this->container->set('language', $this->language); + $this->container->compile(); $phpbb_container = $this->container; diff --git a/phpBB/phpbb/install/helper/iohandler/ajax_iohandler.php b/phpBB/phpbb/install/helper/iohandler/ajax_iohandler.php index 31474ae4e9..8c62ec7bd0 100644 --- a/phpBB/phpbb/install/helper/iohandler/ajax_iohandler.php +++ b/phpBB/phpbb/install/helper/iohandler/ajax_iohandler.php @@ -209,9 +209,15 @@ class ajax_iohandler extends iohandler_base /** * {@inheritdoc} */ - public function send_response() + public function send_response($no_more_output = false) { - $json_data_array = $this->prepare_json_array(); + $json_data_array = $this->prepare_json_array($no_more_output); + + if (empty($json_data_array)) + { + return; + } + $json_data = json_encode($json_data_array); // Try to push content to the browser @@ -223,23 +229,43 @@ class ajax_iohandler extends iohandler_base /** * Prepares iohandler's data to be sent out to the client. * + * @param bool $no_more_output Whether or not there will be more output in this response + * * @return array */ - protected function prepare_json_array() + protected function prepare_json_array($no_more_output = false) { - $json_array = array( - 'errors' => $this->errors, - 'warnings' => $this->warnings, - 'logs' => $this->logs, - 'success' => $this->success, - 'download' => $this->download, - ); + $json_array = array(); + + if (!empty($this->errors)) + { + $json_array['errors'] = $this->errors; + $this->errors = array(); + } + + if (!empty($this->warnings)) + { + $json_array['warnings'] = $this->warnings; + $this->warnings = array(); + } - $this->errors = array(); - $this->warnings = array(); - $this->logs = array(); - $this->success = array(); - $this->download = array(); + if (!empty($this->logs)) + { + $json_array['logs'] = $this->logs; + $this->logs = array(); + } + + if (!empty($this->success)) + { + $json_array['success'] = $this->success; + $this->success = array(); + } + + if (!empty($this->download)) + { + $json_array['download'] = $this->download; + $this->download = array(); + } if (!empty($this->form)) { @@ -293,6 +319,11 @@ class ajax_iohandler extends iohandler_base $this->redirect_url = array(); } + if ($no_more_output) + { + $json_array['over'] = true; + } + return $json_array; } @@ -398,7 +429,7 @@ class ajax_iohandler extends iohandler_base public function redirect($url, $use_ajax = false) { $this->redirect_url = array('url' => $url, 'use_ajax' => $use_ajax); - $this->send_response(); + $this->send_response(true); } /** diff --git a/phpBB/phpbb/install/helper/iohandler/cli_iohandler.php b/phpBB/phpbb/install/helper/iohandler/cli_iohandler.php index 7945904524..94550d2db0 100644 --- a/phpBB/phpbb/install/helper/iohandler/cli_iohandler.php +++ b/phpBB/phpbb/install/helper/iohandler/cli_iohandler.php @@ -114,7 +114,7 @@ class cli_iohandler extends iohandler_base /** * {@inheritdoc} */ - public function send_response() + public function send_response($no_more_output = false) { } diff --git a/phpBB/phpbb/install/helper/iohandler/iohandler_interface.php b/phpBB/phpbb/install/helper/iohandler/iohandler_interface.php index 6b3839506f..f22f33d9cb 100644 --- a/phpBB/phpbb/install/helper/iohandler/iohandler_interface.php +++ b/phpBB/phpbb/install/helper/iohandler/iohandler_interface.php @@ -20,8 +20,10 @@ interface iohandler_interface { /** * Renders or returns response message + * + * @param bool $no_more_output Whether or not there will be more output in this output unit */ - public function send_response(); + public function send_response($no_more_output = false); /** * Returns input variable diff --git a/phpBB/phpbb/install/installer.php b/phpBB/phpbb/install/installer.php index a41b4cd6a6..b5709e96c7 100644 --- a/phpBB/phpbb/install/installer.php +++ b/phpBB/phpbb/install/installer.php @@ -15,11 +15,13 @@ namespace phpbb\install; use phpbb\cache\driver\driver_interface; use phpbb\di\ordered_service_collection; +use phpbb\install\exception\cannot_build_container_exception; use phpbb\install\exception\installer_config_not_writable_exception; use phpbb\install\exception\jump_to_restart_point_exception; use phpbb\install\exception\resource_limit_reached_exception; use phpbb\install\exception\user_interaction_required_exception; use phpbb\install\helper\config; +use phpbb\install\helper\container_factory; use phpbb\install\helper\iohandler\cli_iohandler; use phpbb\install\helper\iohandler\iohandler_interface; use phpbb\path_helper; @@ -32,12 +34,17 @@ class installer protected $cache; /** + * @var container_factory + */ + protected $container_factory; + + /** * @var config */ protected $install_config; /** - * @var array + * @var ordered_service_collection */ protected $installer_modules; @@ -59,18 +66,26 @@ class installer protected $module_step_count; /** + * @var bool + */ + protected $purge_cache_before; + + /** * Constructor * * @param driver_interface $cache Cache service * @param config $config Installer config handler * @param path_helper $path_helper Path helper + * @param container_factory $container Container */ - public function __construct(driver_interface $cache, config $config, path_helper $path_helper) + public function __construct(driver_interface $cache, config $config, path_helper $path_helper, container_factory $container) { $this->cache = $cache; $this->install_config = $config; + $this->container_factory = $container; $this->installer_modules = null; $this->web_root = $path_helper->get_web_root_path(); + $this->purge_cache_before = false; } /** @@ -97,6 +112,16 @@ class installer } /** + * Sets whether to purge cache before the installation process + * + * @param bool $purge_cache_before + */ + public function set_purge_cache_before($purge_cache_before) + { + $this->purge_cache_before = $purge_cache_before; + } + + /** * Run phpBB installer */ public function run() @@ -104,9 +129,16 @@ class installer // Load install progress $this->install_config->load_config(); + if (!$this->install_config->get('cache_purged_before', false) && $this->purge_cache_before) + { + /** @var \phpbb\cache\driver\driver_interface $cache */ + $cache = $this->container_factory->get('cache.driver'); + $cache->purge(); + $this->install_config->set('cache_purged_before', true); + } + // Recover install progress - $module_name = $this->recover_progress(); - $module_found = false; + $module_index = $this->recover_progress(); // Variable used to check if the install process have been finished $install_finished = false; @@ -141,29 +173,13 @@ class installer try { - foreach ($this->installer_modules as $name => $module) - { - // Skip forward until the current task is reached - if (!$module_found) - { - if ($module_name === $name || empty($module_name)) - { - $module_found = true; - } - else - { - continue; - } - } + $iterator = $this->installer_modules->getIterator(); + $iterator->seek($module_index); - // Log progress - $this->install_config->set_active_module($name); - - // Run until there are available resources - if ($this->install_config->get_time_remaining() <= 0 || $this->install_config->get_memory_remaining() <= 0) - { - throw new resource_limit_reached_exception(); - } + while ($iterator->valid()) + { + $module = $iterator->current(); + $name = $iterator->key(); // Check if module should be executed if (!$module->is_essential() && !$module->check_requirements()) @@ -176,17 +192,31 @@ class installer $name, )); $this->install_config->increment_current_task_progress($this->module_step_count[$name]); - continue; + } + else + { + // Set the correct stage in the navigation bar + $this->install_config->set_active_navigation_stage($module->get_navigation_stage_path()); + $this->iohandler->set_active_stage_menu($module->get_navigation_stage_path()); + + $this->iohandler->send_response(); + + $module->run(); + + $this->install_config->set_finished_navigation_stage($module->get_navigation_stage_path()); + $this->iohandler->set_finished_stage_menu($module->get_navigation_stage_path()); } - // Set the correct stage in the navigation bar - $this->install_config->set_active_navigation_stage($module->get_navigation_stage_path()); - $this->iohandler->set_active_stage_menu($module->get_navigation_stage_path()); + $module_index++; + $iterator->next(); - $module->run(); + // Save progress + $this->install_config->set_active_module($name, $module_index); - $this->install_config->set_finished_navigation_stage($module->get_navigation_stage_path()); - $this->iohandler->set_finished_stage_menu($module->get_navigation_stage_path()); + if ($iterator->valid() && ($this->install_config->get_time_remaining() <= 0 || $this->install_config->get_memory_remaining() <= 0)) + { + throw new resource_limit_reached_exception(); + } } // Installation finished @@ -208,7 +238,7 @@ class installer } catch (user_interaction_required_exception $e) { - // Do nothing + $this->iohandler->send_response(true); } catch (resource_limit_reached_exception $e) { @@ -222,7 +252,7 @@ class installer catch (\Exception $e) { $this->iohandler->add_error_message($e->getMessage()); - $this->iohandler->send_response(); + $this->iohandler->send_response(true); $fail_cleanup = true; } @@ -230,11 +260,12 @@ class installer { // Send install finished message $this->iohandler->set_progress('INSTALLER_FINISHED', $this->install_config->get_task_progress_count()); + $this->iohandler->send_response(true); } else if ($send_refresh) { $this->iohandler->request_refresh(); - $this->iohandler->send_response(); + $this->iohandler->send_response(true); } // Save install progress @@ -244,6 +275,17 @@ class installer { $this->install_config->clean_up_config_file(); $this->cache->purge(); + + try + { + /** @var \phpbb\cache\driver\driver_interface $cache */ + $cache = $this->container_factory->get('cache.driver'); + $cache->purge(); + } + catch (cannot_build_container_exception $e) + { + // Do not do anything, this just means there is no config.php yet + } } else { @@ -270,6 +312,6 @@ class installer protected function recover_progress() { $progress_array = $this->install_config->get_progress_data(); - return $progress_array['last_task_module_name']; + return $progress_array['last_task_module_index']; } } diff --git a/phpBB/phpbb/install/module/install_data/task/add_bots.php b/phpBB/phpbb/install/module/install_data/task/add_bots.php index 2ee641ff63..d45a6839a0 100644 --- a/phpBB/phpbb/install/module/install_data/task/add_bots.php +++ b/phpBB/phpbb/install/module/install_data/task/add_bots.php @@ -13,6 +13,8 @@ namespace phpbb\install\module\install_data\task; +use phpbb\install\exception\resource_limit_reached_exception; + class add_bots extends \phpbb\install\task_base { /** @@ -179,7 +181,10 @@ class add_bots extends \phpbb\install\task_base $this->io_handler->add_error_message('NO_GROUP'); } - foreach ($this->bot_list as $bot_name => $bot_ary) + $i = $this->install_config->get('add_bot_index', 0); + $bot_list = array_slice($this->bot_list, $i); + + foreach ($bot_list as $bot_name => $bot_ary) { $user_row = array( 'user_type' => USER_IGNORE, @@ -221,6 +226,21 @@ class add_bots extends \phpbb\install\task_base )); $this->db->sql_query($sql); + + $i++; + + // Stop execution if resource limit is reached + if ($this->install_config->get_time_remaining() <= 0 || $this->install_config->get_memory_remaining() <= 0) + { + break; + } + } + + $this->install_config->set('add_bot_index', $i); + + if ($i < sizeof($this->bot_list)) + { + throw new resource_limit_reached_exception(); } } diff --git a/phpBB/phpbb/install/module/install_data/task/add_modules.php b/phpBB/phpbb/install/module/install_data/task/add_modules.php index bfbe6282bc..d21a5be823 100644 --- a/phpBB/phpbb/install/module/install_data/task/add_modules.php +++ b/phpBB/phpbb/install/module/install_data/task/add_modules.php @@ -13,9 +13,19 @@ namespace phpbb\install\module\install_data\task; +use phpbb\install\exception\resource_limit_reached_exception; +use phpbb\install\helper\config; +use phpbb\install\helper\container_factory; +use phpbb\install\helper\iohandler\iohandler_interface; + class add_modules extends \phpbb\install\task_base { /** + * @var config + */ + protected $config; + + /** * @var \phpbb\db\driver\driver_interface */ protected $db; @@ -136,12 +146,13 @@ class add_modules extends \phpbb\install\task_base /** * Constructor * - * @param \phpbb\install\helper\iohandler\iohandler_interface $iohandler Installer's input-output handler - * @param \phpbb\install\helper\container_factory $container Installer's DI container + * @parma config $config Installer's config + * @param iohandler_interface $iohandler Installer's input-output handler + * @param container_factory $container Installer's DI container */ - public function __construct(\phpbb\install\helper\iohandler\iohandler_interface $iohandler, - \phpbb\install\helper\container_factory $container) + public function __construct(config $config, iohandler_interface $iohandler, container_factory $container) { + $this->config = $config; $this->db = $container->get('dbal.conn'); $this->extension_manager = $container->get('ext.manager'); $this->iohandler = $iohandler; @@ -158,11 +169,19 @@ class add_modules extends \phpbb\install\task_base $this->db->sql_return_on_error(true); $module_classes = array('acp', 'mcp', 'ucp'); + $total = sizeof($module_classes); + $i = $this->config->get('module_class_index', 0); + $module_classes = array_slice($module_classes, $i); + foreach ($module_classes as $module_class) { - $categories = array(); + $categories = $this->config->get('module_categories_array', array()); + + $k = $this->config->get('module_categories_index', 0); + $module_categories = array_slice($this->module_categories[$module_class], $k); + $timed_out = false; - foreach ($this->module_categories[$module_class] as $cat_name => $subs) + foreach ($module_categories as $cat_name => $subs) { // Check if this sub-category has a basename. If it has, use it. $basename = (isset($this->module_categories_basenames[$cat_name])) ? $this->module_categories_basenames[$cat_name] : ''; @@ -221,11 +240,31 @@ class add_modules extends \phpbb\install\task_base $categories[$level2_name]['parent_id'] = (int) $categories[$cat_name]['id']; } } + + $k++; + + // Stop execution if resource limit is reached + if ($this->config->get_time_remaining() <= 0 || $this->config->get_memory_remaining() <= 0) + { + $timed_out = true; + break; + } + } + + $this->config->set('module_categories_array', $categories); + $this->config->set('module_categories_index', $k); + + if ($timed_out) + { + throw new resource_limit_reached_exception(); } // Get the modules we want to add... returned sorted by name $module_info = $this->module_manager->get_module_infos($module_class); + $k = $this->config->get('module_info_index', 0); + $module_info = array_slice($module_info, $k); + foreach ($module_info as $module_basename => $fileinfo) { foreach ($fileinfo['modes'] as $module_mode => $row) @@ -258,189 +297,256 @@ class add_modules extends \phpbb\install\task_base } } } - } - // Move some of the modules around since the code above will put them in the wrong place - if ($module_class === 'acp') - { - // Move main module 4 up... - $sql = 'SELECT * - FROM ' . MODULES_TABLE . " - WHERE module_basename = 'acp_main' - AND module_class = 'acp' - AND module_mode = 'main'"; - $result = $this->db->sql_query($sql); - $row = $this->db->sql_fetchrow($result); - $this->db->sql_freeresult($result); + $k++; - $this->module_manager->move_module_by($row, 'acp', 'move_up', 4); - - // Move permissions intro screen module 4 up... - $sql = 'SELECT * - FROM ' . MODULES_TABLE . " - WHERE module_basename = 'acp_permissions' - AND module_class = 'acp' - AND module_mode = 'intro'"; - $result = $this->db->sql_query($sql); - $row = $this->db->sql_fetchrow($result); - $this->db->sql_freeresult($result); + // Stop execution if resource limit is reached + if ($this->config->get_time_remaining() <= 0 || $this->config->get_memory_remaining() <= 0) + { + $timed_out = true; + break; + } + } - $this->module_manager->move_module_by($row, 'acp', 'move_up', 4); + $this->config->set('module_info_index', $k); - // Move manage users screen module 5 up... - $sql = 'SELECT * - FROM ' . MODULES_TABLE . " - WHERE module_basename = 'acp_users' - AND module_class = 'acp' - AND module_mode = 'overview'"; - $result = $this->db->sql_query($sql); - $row = $this->db->sql_fetchrow($result); - $this->db->sql_freeresult($result); - - $this->module_manager->move_module_by($row, 'acp', 'move_up', 5); + // Stop execution if resource limit is reached + if ($timed_out) + { + throw new resource_limit_reached_exception(); + } - // Move extension management module 1 up... - $sql = 'SELECT * - FROM ' . MODULES_TABLE . " - WHERE module_langname = 'ACP_EXTENSION_MANAGEMENT' - AND module_class = 'acp' - AND module_mode = '' - AND module_basename = ''"; - $result = $this->db->sql_query($sql); - $row = $this->db->sql_fetchrow($result); - $this->db->sql_freeresult($result); + // Move some of the modules around since the code above will put them in the wrong place + if (!$this->config->get('modules_ordered', false)) + { + $this->order_modules($module_class); + $this->config->set('modules_ordered', true); - $this->module_manager->move_module_by($row, 'acp', 'move_up', 1); + // Stop execution if resource limit is reached + if ($this->config->get_time_remaining() <= 0 || $this->config->get_memory_remaining() <= 0) + { + throw new resource_limit_reached_exception(); + } } - if ($module_class == 'mcp') + // And now for the special ones + // (these are modules which appear in multiple categories and thus get added manually + // to some for more control) + if (isset($this->module_extras[$module_class])) { - // Move pm report details module 3 down... - $sql = 'SELECT * - FROM ' . MODULES_TABLE . " - WHERE module_basename = 'mcp_pm_reports' - AND module_class = 'mcp' - AND module_mode = 'pm_report_details'"; - $result = $this->db->sql_query($sql); - $row = $this->db->sql_fetchrow($result); - $this->db->sql_freeresult($result); + $this->add_module_extras($module_class); + } - $this->module_manager->move_module_by($row, 'mcp', 'move_down', 3); + $this->module_manager->remove_cache_file($module_class); - // Move closed pm reports module 3 down... - $sql = 'SELECT * - FROM ' . MODULES_TABLE . " - WHERE module_basename = 'mcp_pm_reports' - AND module_class = 'mcp' - AND module_mode = 'pm_reports_closed'"; - $result = $this->db->sql_query($sql); - $row = $this->db->sql_fetchrow($result); - $this->db->sql_freeresult($result); + $i++; - $this->module_manager->move_module_by($row, 'mcp', 'move_down', 3); + $this->config->set('module_class_index', $i); + $this->config->set('module_categories_index', 0); + $this->config->set('module_info_index', 0); + $this->config->set('added_extra_modules', false); + $this->config->set('modules_ordered', false); + $this->config->set('module_categories_array', array()); - // Move open pm reports module 3 down... - $sql = 'SELECT * - FROM ' . MODULES_TABLE . " - WHERE module_basename = 'mcp_pm_reports' - AND module_class = 'mcp' - AND module_mode = 'pm_reports'"; - $result = $this->db->sql_query($sql); - $row = $this->db->sql_fetchrow($result); - $this->db->sql_freeresult($result); - - $this->module_manager->move_module_by($row, 'mcp', 'move_down', 3); + // Stop execution if resource limit is reached + if ($this->config->get_time_remaining() <= 0 || $this->config->get_memory_remaining() <= 0) + { + break; } + } - if ($module_class == 'ucp') - { - // Move attachment module 4 down... - $sql = 'SELECT * - FROM ' . MODULES_TABLE . " - WHERE module_basename = 'ucp_attachments' - AND module_class = 'ucp' - AND module_mode = 'attachments'"; - $result = $this->db->sql_query($sql); - $row = $this->db->sql_fetchrow($result); - $this->db->sql_freeresult($result); + if ($i < $total) + { + throw new resource_limit_reached_exception(); + } + } - $this->module_manager->move_module_by($row, 'ucp', 'move_down', 4); + /** + * Move modules to their correct place + * + * @param string $module_class + */ + protected function order_modules($module_class) + { + if ($module_class == 'acp') + { + // Move main module 4 up... + $sql = 'SELECT * + FROM ' . MODULES_TABLE . " + WHERE module_basename = 'acp_main' + AND module_class = 'acp' + AND module_mode = 'main'"; + $result = $this->db->sql_query($sql); + $row = $this->db->sql_fetchrow($result); + $this->db->sql_freeresult($result); + + $this->module_manager->move_module_by($row, 'acp', 'move_up', 4); + + // Move permissions intro screen module 4 up... + $sql = 'SELECT * + FROM ' . MODULES_TABLE . " + WHERE module_basename = 'acp_permissions' + AND module_class = 'acp' + AND module_mode = 'intro'"; + $result = $this->db->sql_query($sql); + $row = $this->db->sql_fetchrow($result); + $this->db->sql_freeresult($result); + + $this->module_manager->move_module_by($row, 'acp', 'move_up', 4); + + // Move manage users screen module 5 up... + $sql = 'SELECT * + FROM ' . MODULES_TABLE . " + WHERE module_basename = 'acp_users' + AND module_class = 'acp' + AND module_mode = 'overview'"; + $result = $this->db->sql_query($sql); + $row = $this->db->sql_fetchrow($result); + $this->db->sql_freeresult($result); + + $this->module_manager->move_module_by($row, 'acp', 'move_up', 5); + + // Move extension management module 1 up... + $sql = 'SELECT * + FROM ' . MODULES_TABLE . " + WHERE module_langname = 'ACP_EXTENSION_MANAGEMENT' + AND module_class = 'acp' + AND module_mode = '' + AND module_basename = ''"; + $result = $this->db->sql_query($sql); + $row = $this->db->sql_fetchrow($result); + $this->db->sql_freeresult($result); + + $this->module_manager->move_module_by($row, 'acp', 'move_up', 1); + } - // Move notification options module 4 down... - $sql = 'SELECT * - FROM ' . MODULES_TABLE . " - WHERE module_basename = 'ucp_notifications' - AND module_class = 'ucp' - AND module_mode = 'notification_options'"; - $result = $this->db->sql_query($sql); - $row = $this->db->sql_fetchrow($result); - $this->db->sql_freeresult($result); + if ($module_class == 'mcp') + { + // Move pm report details module 3 down... + $sql = 'SELECT * + FROM ' . MODULES_TABLE . " + WHERE module_basename = 'mcp_pm_reports' + AND module_class = 'mcp' + AND module_mode = 'pm_report_details'"; + $result = $this->db->sql_query($sql); + $row = $this->db->sql_fetchrow($result); + $this->db->sql_freeresult($result); + + $this->module_manager->move_module_by($row, 'mcp', 'move_down', 3); + + // Move closed pm reports module 3 down... + $sql = 'SELECT * + FROM ' . MODULES_TABLE . " + WHERE module_basename = 'mcp_pm_reports' + AND module_class = 'mcp' + AND module_mode = 'pm_reports_closed'"; + $result = $this->db->sql_query($sql); + $row = $this->db->sql_fetchrow($result); + $this->db->sql_freeresult($result); + + $this->module_manager->move_module_by($row, 'mcp', 'move_down', 3); + + // Move open pm reports module 3 down... + $sql = 'SELECT * + FROM ' . MODULES_TABLE . " + WHERE module_basename = 'mcp_pm_reports' + AND module_class = 'mcp' + AND module_mode = 'pm_reports'"; + $result = $this->db->sql_query($sql); + $row = $this->db->sql_fetchrow($result); + $this->db->sql_freeresult($result); + + $this->module_manager->move_module_by($row, 'mcp', 'move_down', 3); + } - $this->module_manager->move_module_by($row, 'ucp', 'move_down', 4); + if ($module_class == 'ucp') + { + // Move attachment module 4 down... + $sql = 'SELECT * + FROM ' . MODULES_TABLE . " + WHERE module_basename = 'ucp_attachments' + AND module_class = 'ucp' + AND module_mode = 'attachments'"; + $result = $this->db->sql_query($sql); + $row = $this->db->sql_fetchrow($result); + $this->db->sql_freeresult($result); + + $this->module_manager->move_module_by($row, 'ucp', 'move_down', 4); + + // Move notification options module 4 down... + $sql = 'SELECT * + FROM ' . MODULES_TABLE . " + WHERE module_basename = 'ucp_notifications' + AND module_class = 'ucp' + AND module_mode = 'notification_options'"; + $result = $this->db->sql_query($sql); + $row = $this->db->sql_fetchrow($result); + $this->db->sql_freeresul
#: share/meta-task/compssUsers.pl:138
#, fuzzy, c-format
msgid "GNOME Workstation"
msgstr "Інфармацыя аб памяці"
#: share/meta-task/compssUsers.pl:139
#, c-format
msgid ""
"A graphical environment with user-friendly set of applications and desktop "
"tools"
msgstr ""
"Графічнае асяродзе са зручным дзеля выкарыстання наборам прыкладанняў і "
"інструментальных сродкаў"
#: share/meta-task/compssUsers.pl:142
#, fuzzy, c-format
msgid "IceWm Desktop"
msgstr "Працоўны стол"
#: share/meta-task/compssUsers.pl:146
#, c-format
msgid "Other Graphical Desktops"
msgstr "Іншыя графічныя Працоўныя сталы"
#: share/meta-task/compssUsers.pl:147
#, c-format
msgid "Window Maker, Enlightenment, Fvwm, etc"
msgstr ""
#: share/meta-task/compssUsers.pl:170
#, c-format
msgid "Utilities"
msgstr "Карыснасьці"
#: share/meta-task/compssUsers.pl:172 share/meta-task/compssUsers.pl:173
#, fuzzy, c-format
msgid "SSH Server"
msgstr "NIS сэервер:"
#: share/meta-task/compssUsers.pl:177
#, fuzzy, c-format
msgid "Webmin"
msgstr "Прылады"
#: share/meta-task/compssUsers.pl:178
#, fuzzy, c-format
msgid "Webmin Remote Configuration Server"
msgstr "Сістэмнае адміністраваньне"
#: share/meta-task/compssUsers.pl:182
#, fuzzy, c-format
msgid "Network Utilities/Monitoring"
msgstr "Канфігурацыя сеткі"
#: share/meta-task/compssUsers.pl:183
#, c-format
msgid "Monitoring tools, processes accounting, tcpdump, nmap, ..."
msgstr ""
#: share/meta-task/compssUsers.pl:187
#, fuzzy, c-format
msgid "Mandriva Wizards"
msgstr "Цэнтар кіраваньня"
#: share/meta-task/compssUsers.pl:188
#, fuzzy, c-format
msgid "Wizards to configure server"
msgstr "Немагчыма выдаліць \"%s\": %s."
#: steps.pm:85
#, c-format
msgid ""
"An error occurred, but I do not know how to handle it nicely.\n"
"Continue at your own risk."
msgstr ""
"Узнікла памылка, якую не атрымліваецца карэктна апрацаваць,\n"
"таму працягвайце на сваю рызыку."
#: steps.pm:437
#, c-format
msgid ""
"Some important packages did not get installed properly.\n"
"Either your cdrom drive or your cdrom is defective.\n"
"Check the cdrom on an installed computer using \"rpm -qpl media/main/*.rpm"
"\"\n"
msgstr ""
"Некаторыя важныя пакеты не былі ўсталяваны карэктна.\n"
"Другі ваш cdrom дыск ці ваш cdrom маюць дэфекты.\n"
"Праверце cdrom на вашым кампутары, выкарыстоўваючы\"rpm -qpl media/main/*.rpm"
"\"\n"
#: steps_auto_install.pm:71 steps_stdio.pm:27
#, c-format
msgid "Entering step `%s'\n"
msgstr "Пераход на крок ‛%s’\n"
#: steps_curses.pm:22
#, c-format
msgid "Mandriva Linux Installation %s"
msgstr "Усталяванне Mandriva Linux %s"
#: steps_curses.pm:32
#, c-format
msgid "<Tab>/<Alt-Tab> between elements"
msgstr "<Tab>/<Alt-Tab> паміж элементамі"
#: steps_gtk.pm:84
#, c-format
msgid "Xorg server is slow to start. Please wait..."
msgstr ""
#: steps_gtk.pm:194
#, c-format
msgid ""
"Your system is low on resources. You may have some problem installing\n"
"Mandriva Linux. If that occurs, you can try a text install instead. For "
"this,\n"
"press `F1' when booting on CDROM, then enter `text'."
msgstr ""
"У Вашай сістэме маецца недахоп рэсурсаў, таму магчымы праблемы\n"
"пры ўсталяванні Mandriva Linux. У гэтым выпадку паспрабуйце тэкставую\n"
"праграму ўсталявання. Для гэтага націсніце ‛F1’ у час загрузкі, а потым\n"
"набярыце ‛text’ і націсніце <ENTER>."
#: steps_gtk.pm:228
#, c-format
msgid "Install Mandriva KDE Desktop"
msgstr ""
#: steps_gtk.pm:229
#, c-format
msgid "Install Mandriva GNOME Desktop"
msgstr ""
#: steps_gtk.pm:230
#, fuzzy, c-format
msgid "Custom install"
msgstr "Ахоўнік экрану"
#: steps_gtk.pm:253
#, c-format
msgid "Here's a preview of the '%s' desktop."
msgstr ""
#: steps_gtk.pm:275
#, c-format
msgid "Click on images in order to see a bigger preview"
msgstr ""
#: steps_gtk.pm:287 steps_interactive.pm:618 steps_list.pm:30
#, c-format
msgid "Package Group Selection"
msgstr "Выбар групы пакетаў"
#: steps_gtk.pm:308 steps_interactive.pm:635
#, c-format
msgid "Individual package selection"
msgstr "Асабісты выбар пакетаў"
#: steps_gtk.pm:330 steps_interactive.pm:561
#, c-format
msgid "Total size: %d / %d MB"
msgstr "Агульны памер: %d / %d Мб"
#: steps_gtk.pm:375
#, c-format
msgid "Bad package"
msgstr "Дрэнны пакет"
#: steps_gtk.pm:377
#, c-format
msgid "Version: "
msgstr "Вэрсія: "
#: steps_gtk.pm:378
#, c-format
msgid "Size: "
msgstr "Памер: "
#: steps_gtk.pm:378
#, c-format
msgid "%d KB\n"
msgstr ""
#: steps_gtk.pm:379
#, fuzzy, c-format
msgid "Importance: "
msgstr "важна"
#: steps_gtk.pm:413
#, c-format
msgid "You can not select/unselect this package"
msgstr "Вы не можаце вылучаць і адмяняць вылучэнне гэтага пакету"
#: steps_gtk.pm:417
#, c-format
msgid "due to missing %s"
msgstr ""
#: steps_gtk.pm:418
#, c-format
msgid "due to unsatisfied %s"
msgstr ""
#: steps_gtk.pm:419
#, c-format
msgid "trying to promote %s"
msgstr ""
#: steps_gtk.pm:420
#, fuzzy, c-format
msgid "in order to keep %s"
msgstr "Уласьцівасьці акна"
#: steps_gtk.pm:425
#, c-format
msgid ""
"You can not select this package as there is not enough space left to install "
"it"
msgstr ""
"Вы не можаце выбраць гэты пакет, таму як не хапае месца для яго ўсталявання"
#: steps_gtk.pm:428
#, c-format
msgid "The following packages are going to be installed"
msgstr "Наступныя пакеты будуць даданы да сістэмы"
#: steps_gtk.pm:429
#, c-format
msgid "The following packages are going to be removed"
msgstr "Наступныя пакеты будуць выдалены"
#: steps_gtk.pm:454
#, c-format
msgid "This is a mandatory package, it can not be unselected"
msgstr "Гэта абавязковы пакет, яго вылучэнне нельга адмяніць"
#: steps_gtk.pm:456
#, c-format
msgid "You can not unselect this package. It is already installed"
msgstr "Вы не можаце адмяніць вылучэнне гэтага пакету. Ён ужо ўсталяваны"
#: steps_gtk.pm:458
#, c-format
msgid "You can not unselect this package. It must be upgraded"
msgstr "Вы не можаце адмяніць вылучэнне гэтага пакету. Яго патрэбна абнавіць"
#: steps_gtk.pm:462
#, c-format
msgid "Show automatically selected packages"
msgstr ""
#: steps_gtk.pm:464
#, c-format
msgid "Install"
msgstr "Усталёўка"
#: steps_gtk.pm:467
#, fuzzy, c-format
msgid "Load/Save selection"
msgstr "Перанесьці вылучэньне"
#: steps_gtk.pm:468
#, fuzzy, c-format
msgid "Updating package selection"
msgstr "Асабісты выбар пакетаў"
#: steps_gtk.pm:473
#, fuzzy, c-format
msgid "Minimal install"
msgstr "Ахоўнік экрану"
#: steps_gtk.pm:487
#, c-format
msgid "Software Management"
msgstr ""
#: steps_gtk.pm:487 steps_interactive.pm:447
#, c-format
msgid "Choose the packages you want to install"
msgstr "Выбар пакетаў для ўсталявання"
#: steps_gtk.pm:504 steps_interactive.pm:649 steps_list.pm:32
#, c-format
msgid "Installing"
msgstr "Усталёўваем"
#: steps_gtk.pm:530
#, fuzzy, c-format
msgid "No details"
msgstr "Падрабязнасці"
#: steps_gtk.pm:545
#, c-format
msgid "Time remaining "
msgstr "Засталося часу "
#: steps_gtk.pm:546
#, fuzzy, c-format
msgid "(estimating...)"
msgstr "Чакаецца"
#: steps_gtk.pm:573
#, fuzzy, c-format
msgid "%d package"
msgid_plural "%d packages"
msgstr[0] "%d пакетаў"
msgstr[1] "%d пакетаў"
#: steps_gtk.pm:619 steps_interactive.pm:837 steps_list.pm:43
#, c-format
msgid "Summary"
msgstr "Агульныя зьвесткі"
#: steps_gtk.pm:636
#, c-format
msgid "Configure"
msgstr "Настройка"
#: steps_gtk.pm:653 steps_interactive.pm:833 steps_interactive.pm:984
#, fuzzy, c-format
msgid "not configured"
msgstr "Настроіць панэль"
#: steps_gtk.pm:690 steps_interactive.pm:331
#, c-format
msgid ""
"The following installation media have been found.\n"
"If you want to skip some of them, you can unselect them now."
msgstr ""
#: steps_gtk.pm:700 steps_interactive.pm:337
#, c-format
msgid ""
"You have the option to copy the contents of the CDs onto the hard drive "
"before installation.\n"
"It will then continue from the hard drive and the packages will remain "
"available once the system is fully installed."
msgstr ""
#: steps_gtk.pm:702 steps_interactive.pm:339
#, c-format
msgid "Copy whole CDs"
msgstr ""
#: steps_interactive.pm:38
#, c-format
msgid "An error occurred"
msgstr "Адбылася памылка"
#: steps_interactive.pm:96
#, fuzzy, c-format
msgid "Please choose your keyboard layout."
msgstr "Калі ласка, абярыце тып клавіятуры."
#: steps_interactive.pm:98
#, c-format
msgid "Here is the full list of available keyboards"
msgstr ""
#: steps_interactive.pm:133
#, fuzzy, c-format
msgid "Install/Upgrade"
msgstr "Усталёўваем"
#: steps_interactive.pm:134
#, c-format
msgid "Is this an install or an upgrade?"
msgstr ""
#: steps_interactive.pm:138
#, fuzzy, c-format
msgid ""
"_: This is a noun:\n"
"Install"
msgstr "Усталёўка"
#: steps_interactive.pm:140
#, c-format
msgid "Upgrade %s"
msgstr ""
#: steps_interactive.pm:144
#, c-format
msgid "Upgrade from a 32bit to a 64bit distribution is not supported"
msgstr ""
#: steps_interactive.pm:148
#, c-format
msgid "Upgrade from a 64bit to a 32bit distribution is not supported"
msgstr ""
#: steps_interactive.pm:167
#, c-format
msgid "Encryption key for %s"
msgstr ""
#: steps_interactive.pm:199
#, c-format
msgid "Cancel installation, reboot system"
msgstr ""
#: steps_interactive.pm:200
#, fuzzy, c-format
msgid "New Installation"
msgstr "Усталёўваем"
#: steps_interactive.pm:201
#, c-format
msgid "Upgrade previous installation (not recommended)"
msgstr ""
#: steps_interactive.pm:205
#, c-format
msgid ""
"Installer has detected that your installed Mandriva Linux system could not\n"
"safely be upgraded to %s.\n"
"\n"
"New installation replacing your previous one is recommended.\n"
"\n"
"Warning : you should backup all your personal data before choosing \"New\n"
"Installation\"."
msgstr ""
#: steps_interactive.pm:247
#, c-format
msgid "IDE"
msgstr "IDE"
#: steps_interactive.pm:247
#, c-format
msgid "Configuring IDE"
msgstr "Настройка IDE"
#: steps_interactive.pm:284
#, c-format
msgid ""
"No free space for 1MB bootstrap! Install will continue, but to boot your "
"system, you'll need to create the bootstrap partition in DiskDrake"
msgstr ""
#: steps_interactive.pm:289
#, c-format
msgid ""
"You'll need to create a PPC PReP Boot bootstrap! Install will continue, but "
"to boot your system, you'll need to create the bootstrap partition in "
"DiskDrake"
msgstr ""
#: steps_interactive.pm:381
#, fuzzy, c-format
msgid ""
"Change your Cd-Rom!\n"
"Please insert the Cd-Rom labelled \"%s\" in your drive and press Ok when "
"done.\n"
"If you do not have it, press Cancel to avoid installation from this Cd-Rom."
msgstr ""
"Змяніце ваш Cd-Rom!\n"
"\n"
"Калі ласка, устаўце Cd-Rom, пазначаны \"%s\", у ваш дыскавод і націсніце Ок "
"пасля.\n"
"Калі вы не маеце яго, націсніце Адмяніць, каб адмяніць усталяванне з гэтага "
"Cd."
#: steps_interactive.pm:403
#, c-format
msgid "Looking for available packages..."
msgstr "Прагляд даступных пакетаў"
#: steps_interactive.pm:411
#, c-format
msgid ""
"Your system does not have enough space left for installation or upgrade (%"
"dMB > %dMB)"
msgstr ""
#: steps_interactive.pm:459
#, c-format
msgid ""
"Please choose load or save package selection.\n"
"The format is the same as auto_install generated files."
msgstr ""
#: steps_interactive.pm:461
#, c-format
msgid "Load"
msgstr "Загрузка"
#: steps_interactive.pm:461
#, c-format
msgid "Save"
msgstr "Захаваць"
#: steps_interactive.pm:469
#, fuzzy, c-format
msgid "Bad file"
msgstr "Загрузка файла"
#: steps_interactive.pm:485
#, fuzzy, c-format
msgid "KDE"
msgstr "IDE"
#: steps_interactive.pm:486
#, c-format
msgid "GNOME"
msgstr ""
#: steps_interactive.pm:489
#, fuzzy, c-format
msgid "Desktop Selection"
msgstr "Выбар групы пакетаў"
#: steps_interactive.pm:490
#, c-format
msgid "You can choose your workstation desktop profile:"
msgstr ""
#: steps_interactive.pm:575
#, c-format
msgid "Selected size is larger than available space"
msgstr ""
#: steps_interactive.pm:590
#, c-format
msgid "Type of install"
msgstr ""
#: steps_interactive.pm:591
#, c-format
msgid ""
"You have not selected any group of packages.\n"
"Please choose the minimal installation you want:"
msgstr ""
#: steps_interactive.pm:594
#, c-format
msgid "With X"
msgstr ""
#: steps_interactive.pm:595
#, c-format
msgid "With basic documentation (recommended!)"
msgstr ""
#: steps_interactive.pm:596
#, c-format
msgid "Truly minimal install (especially no urpmi)"
msgstr ""
#: steps_interactive.pm:650
#, c-format
msgid "Preparing installation"
msgstr "Падрыхтоўка ўсталяваньня"
#: steps_interactive.pm:658
#, c-format
msgid "Installing package %s"
msgstr "Усталяванне пакету %s"
#: steps_interactive.pm:682
#, c-format
msgid "There was an error ordering packages:"
msgstr "Атрымалася памылка ўпарадкавання пакетаў:"
#: steps_interactive.pm:682
#, c-format
msgid "Go on anyway?"
msgstr "Усё роўна працягваць?"
#: steps_interactive.pm:686
#, c-format
msgid "Retry"
msgstr ""
#: steps_interactive.pm:687
#, c-format
msgid "Skip this package"
msgstr ""
#: steps_interactive.pm:688
#, c-format
msgid "Skip all packages from medium \"%s\""
msgstr ""
#: steps_interactive.pm:689
#, fuzzy, c-format
msgid "Go back to media and packages selection"
msgstr "Асабісты выбар пакетаў"
#: steps_interactive.pm:692
#, fuzzy, c-format
msgid "There was an error installing package %s."
msgstr "Атрымалася памылка ўпарадкавання пакетаў:"
#: steps_interactive.pm:710
#, c-format
msgid "Post-install configuration"
msgstr "Настройка пасля ўсталявання"
#: steps_interactive.pm:717
#, c-format
msgid "Please ensure the Update Modules media is in drive %s"
msgstr ""
#: steps_interactive.pm:745 steps_list.pm:47r_factory $container) + public function __construct(config $config, container_factory $container) { + $this->config = $config; $this->extension_manager = $container->get('ext.manager'); $this->migrator = $container->get('migrator'); @@ -46,6 +57,15 @@ class populate_migrations extends \phpbb\install\task_base */ public function run() { + if (!$this->config->get('populate_migration_refresh_before', false)) + { + if ($this->config->get_time_remaining() < 1) + { + $this->config->set('populate_migration_refresh_before', true); + throw new resource_limit_reached_exception(); + } + } + $finder = $this->extension_manager->get_finder(); $migrations = $finder diff --git a/phpBB/phpbb/install/module/obtain_data/task/obtain_admin_data.php b/phpBB/phpbb/install/module/obtain_data/task/obtain_admin_data.php index ac305e8ab5..d1f1af6b83 100644 --- a/phpBB/phpbb/install/module/obtain_data/task/obtain_admin_data.php +++ b/phpBB/phpbb/install/module/obtain_data/task/obtain_admin_data.php @@ -136,7 +136,6 @@ class obtain_admin_data extends \phpbb\install\task_base implements \phpbb\insta $this->io_handler->add_user_form_group('ADMIN_CONFIG', $admin_form); // Require user interaction - $this->io_handler->send_response(); throw new user_interaction_required_exception(); } diff --git a/phpBB/phpbb/install/module/obtain_data/task/obtain_board_data.php b/phpBB/phpbb/install/module/obtain_data/task/obtain_board_data.php index 6c54561d14..ff2a0a2f86 100644 --- a/phpBB/phpbb/install/module/obtain_data/task/obtain_board_data.php +++ b/phpBB/phpbb/install/module/obtain_data/task/obtain_board_data.php @@ -164,7 +164,6 @@ class obtain_board_data extends \phpbb\install\task_base implements \phpbb\insta $this->io_handler->add_user_form_group('BOARD_CONFIG', $board_form); - $this->io_handler->send_response(); throw new user_interaction_required_exception(); } diff --git a/phpBB/phpbb/install/module/obtain_data/task/obtain_database_data.php b/phpBB/phpbb/install/module/obtain_data/task/obtain_database_data.php index 3458aab63e..ce720dbf76 100644 --- a/phpBB/phpbb/install/module/obtain_data/task/obtain_database_data.php +++ b/phpBB/phpbb/install/module/obtain_data/task/obtain_database_data.php @@ -188,7 +188,6 @@ class obtain_database_data extends \phpbb\install\task_base implements \phpbb\in $this->io_handler->add_user_form_group('DB_CONFIG', $database_form); // Require user interaction - $this->io_handler->send_response(); throw new user_interaction_required_exception(); } diff --git a/phpBB/phpbb/install/module/obtain_data/task/obtain_email_data.php b/phpBB/phpbb/install/module/obtain_data/task/obtain_email_data.php index b04b8e353f..606e4a2ddd 100644 --- a/phpBB/phpbb/install/module/obtain_data/task/obtain_email_data.php +++ b/phpBB/phpbb/install/module/obtain_data/task/obtain_email_data.php @@ -144,7 +144,6 @@ class obtain_email_data extends \phpbb\install\task_base implements \phpbb\insta $this->io_handler->add_user_form_group('EMAIL_CONFIG', $email_form); - $this->io_handler->send_response(); throw new user_interaction_required_exception(); } } diff --git a/phpBB/phpbb/install/module/obtain_data/task/obtain_file_updater_method.php b/phpBB/phpbb/install/module/obtain_data/task/obtain_file_updater_method.php index 9bcb73a6a9..d5a8855c37 100644 --- a/phpBB/phpbb/install/module/obtain_data/task/obtain_file_updater_method.php +++ b/phpBB/phpbb/install/module/obtain_data/task/obtain_file_updater_method.php @@ -115,7 +115,6 @@ class obtain_file_updater_method extends task_base ), )); - $this->iohandler->send_response(); throw new user_interaction_required_exception(); } } diff --git a/phpBB/phpbb/install/module/obtain_data/task/obtain_server_data.php b/phpBB/phpbb/install/module/obtain_data/task/obtain_server_data.php index 654b5534a9..1ef70eae08 100644 --- a/phpBB/phpbb/install/module/obtain_data/task/obtain_server_data.php +++ b/phpBB/phpbb/install/module/obtain_data/task/obtain_server_data.php @@ -180,7 +180,6 @@ class obtain_server_data extends \phpbb\install\task_base implements \phpbb\inst $this->io_handler->add_user_form_group('SERVER_CONFIG', $server_form); - $this->io_handler->send_response(); throw new user_interaction_required_exception(); } } diff --git a/phpBB/phpbb/install/module/obtain_data/task/obtain_update_ftp_data.php b/phpBB/phpbb/install/module/obtain_data/task/obtain_update_ftp_data.php index a4d362a0f1..f31472fc58 100644 --- a/phpBB/phpbb/install/module/obtain_data/task/obtain_update_ftp_data.php +++ b/phpBB/phpbb/install/module/obtain_data/task/obtain_update_ftp_data.php @@ -141,7 +141,6 @@ class obtain_update_ftp_data extends task_base ), )); - $this->iohandler->send_response(); throw new user_interaction_required_exception(); } } diff --git a/phpBB/phpbb/install/module/obtain_data/task/obtain_update_settings.php b/phpBB/phpbb/install/module/obtain_data/task/obtain_update_settings.php index be6404dcd8..c139b70fa4 100644 --- a/phpBB/phpbb/install/module/obtain_data/task/obtain_update_settings.php +++ b/phpBB/phpbb/install/module/obtain_data/task/obtain_update_settings.php @@ -93,7 +93,6 @@ class obtain_update_settings extends task_base ), )); - $this->iohandler->send_response(); throw new user_interaction_required_exception(); } } diff --git a/phpBB/phpbb/install/module/requirements/abstract_requirements_module.php b/phpBB/phpbb/install/module/requirements/abstract_requirements_module.php index 26593e6777..121b4ff4e5 100644 --- a/phpBB/phpbb/install/module/requirements/abstract_requirements_module.php +++ b/phpBB/phpbb/install/module/requirements/abstract_requirements_module.php @@ -13,7 +13,6 @@ namespace phpbb\install\module\requirements; -use phpbb\install\exception\resource_limit_reached_exception; use phpbb\install\exception\user_interaction_required_exception; use phpbb\install\module_base; @@ -25,41 +24,8 @@ abstract class abstract_requirements_module extends module_base public function run() { $tests_passed = true; - - // Recover install progress - $task_name = $this->recover_progress(); - $task_found = false; - - /** - * @var string $name ID of the service - * @var \phpbb\install\task_interface $task Task object - */ foreach ($this->task_collection as $name => $task) { - // Run until there are available resources - if ($this->install_config->get_time_remaining() <= 0 || $this->install_config->get_memory_remaining() <= 0) - { - throw new resource_limit_reached_exception(); - } - - // Skip forward until the next task is reached - if (!$task_found) - { - if ($name === $task_name || empty($task_name)) - { - $task_found = true; - - if ($name === $task_name) - { - continue; - } - } - else - { - continue; - } - } - // Check if we can run the task if (!$task->is_essential() && !$task->check_requirements()) { @@ -76,7 +42,7 @@ abstract class abstract_requirements_module extends module_base } // Module finished, so clear task progress - $this->install_config->set_finished_task(''); + $this->install_config->set_finished_task(0); // Check if tests have failed if (!$tests_passed) @@ -91,7 +57,6 @@ abstract class abstract_requirements_module extends module_base )); // Send the response and quit - $this->iohandler->send_response(); throw new user_interaction_required_exception(); } } diff --git a/phpBB/phpbb/install/module/update_database/task/update.php b/phpBB/phpbb/install/module/update_database/task/update.php index aa44d403dd..4b2baf2c23 100644 --- a/phpBB/phpbb/install/module/update_database/task/update.php +++ b/phpBB/phpbb/install/module/update_database/task/update.php @@ -158,7 +158,6 @@ class update extends task_base array_unshift($msg, $e->getMessage()); $this->iohandler->add_error_message($msg); - $this->iohandler->send_response(); throw new user_interaction_required_exception(); } diff --git a/phpBB/phpbb/install/module/update_filesystem/task/download_updated_files.php b/phpBB/phpbb/install/module/update_filesystem/task/download_updated_files.php index 9271e8fd50..f911b7ac62 100644 --- a/phpBB/phpbb/install/module/update_filesystem/task/download_updated_files.php +++ b/phpBB/phpbb/install/module/update_filesystem/task/download_updated_files.php @@ -101,7 +101,6 @@ class download_updated_files extends task_base ), )); - $this->iohandler->send_response(); throw new user_interaction_required_exception(); } } diff --git a/phpBB/phpbb/install/module/update_filesystem/task/show_file_status.php b/phpBB/phpbb/install/module/update_filesystem/task/show_file_status.php index e712b8ad6a..c46c05500a 100644 --- a/phpBB/phpbb/install/module/update_filesystem/task/show_file_status.php +++ b/phpBB/phpbb/install/module/update_filesystem/task/show_file_status.php @@ -136,7 +136,6 @@ class show_file_status extends task_base )); // Show results to the user - $this->iohandler->send_response(); throw new user_interaction_required_exception(); } else diff --git a/phpBB/phpbb/install/module_base.php b/phpBB/phpbb/install/module_base.php index fb68c3aca2..527447b4a1 100644 --- a/phpBB/phpbb/install/module_base.php +++ b/phpBB/phpbb/install/module_base.php @@ -105,47 +105,23 @@ abstract class module_base implements module_interface public function run() { // Recover install progress - $task_name = $this->recover_progress(); - $task_found = false; - - /** - * @var string $name ID of the service - * @var \phpbb\install\task_interface $task Task object - */ - foreach ($this->task_collection as $name => $task) - { - // Run until there are available resources - if ($this->install_config->get_time_remaining() <= 0 || $this->install_config->get_memory_remaining() <= 0) - { - throw new resource_limit_reached_exception(); - } + $task_index = $this->recover_progress(); + $iterator = $this->task_collection->getIterator(); - // Skip forward until the next task is reached - if (!$task_found) - { - if ($name === $task_name || empty($task_name)) - { - $task_found = true; - - if ($name === $task_name) - { - continue; - } - } - else - { - continue; - } - } + if ($task_index < $iterator->count()) + { + $iterator->seek($task_index); + } + else + { + $this->install_config->set_finished_task(0); + return; + } - // Send progress information - if ($this->allow_progress_bar) - { - $this->iohandler->set_progress( - $task->get_task_lang_name(), - $this->install_config->get_current_task_progress() - ); - } + while ($iterator->valid()) + { + $task = $iterator->current(); + $name = $iterator->key(); // Check if we can run the task if (!$task->is_essential() && !$task->check_requirements()) @@ -156,20 +132,33 @@ abstract class module_base implements module_interface )); $this->install_config->increment_current_task_progress($this->task_step_count[$name]); - continue; } - - if ($this->allow_progress_bar) + else { - // Only increment progress by one, as if a task has more than one steps - // then that should be incremented in the task itself - $this->install_config->increment_current_task_progress(); - } + // Send progress information + if ($this->allow_progress_bar) + { + $this->iohandler->set_progress( + $task->get_task_lang_name(), + $this->install_config->get_current_task_progress() + ); + + $this->iohandler->send_response(); + } + + $task->run(); - $task->run(); + if ($this->allow_progress_bar) + { + // Only increment progress by one, as if a task has more than one steps + // then that should be incremented in the task itself + $this->install_config->increment_current_task_progress(); + } + } - // Log install progress - $this->install_config->set_finished_task($name); + $task_index++; + $this->install_config->set_finished_task($task_index); + $iterator->next(); // Send progress information if ($this->allow_progress_bar) @@ -181,10 +170,16 @@ abstract class module_base implements module_interface } $this->iohandler->send_response(); + + // Stop execution if resource limit is reached + if ($this->install_config->get_time_remaining() <= 0 || $this->install_config->get_memory_remaining() <= 0) + { + throw new resource_limit_reached_exception(); + } } // Module finished, so clear task progress - $this->install_config->set_finished_task(''); + $this->install_config->set_finished_task(0); } /** @@ -195,7 +190,7 @@ abstract class module_base implements module_interface protected function recover_progress() { $progress_array = $this->install_config->get_progress_data(); - return $progress_array['last_task_name']; + return $progress_array['last_task_index']; } /** |