aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB
diff options
context:
space:
mode:
authorTristan Darricau <tristan.darricau@sensiolabs.com>2016-02-16 00:06:52 +0100
committerTristan Darricau <tristan.darricau@sensiolabs.com>2016-02-16 00:06:52 +0100
commitd0ce6a18df2172a6e9baf1f1c2802efb30b25323 (patch)
tree478bf6c878bacec7c4e60832e0af7d106bd52e52 /phpBB
parent00d71d854cb844cba7755a2e8adfa4217dbc0ef0 (diff)
parent6debd9a1bea4ee69a06eac43cc6b2f856f601604 (diff)
downloadforums-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')
-rw-r--r--phpBB/adm/style/installer_footer.html9
-rw-r--r--phpBB/assets/javascript/installer.js19
-rw-r--r--phpBB/config/installer/container/services_install_controller.yml1
-rw-r--r--phpBB/config/installer/container/services_install_data.yml1
-rw-r--r--phpBB/config/installer/container/services_install_database.yml30
-rw-r--r--phpBB/config/installer/container/services_install_finish.yml1
-rw-r--r--phpBB/config/installer/container/services_installer.yml3
-rw-r--r--phpBB/install/convert/controller/convertor.php21
-rw-r--r--phpBB/language/en/install.php15
-rw-r--r--phpBB/phpbb/install/helper/config.php18
-rw-r--r--phpBB/phpbb/install/helper/container_factory.php18
-rw-r--r--phpBB/phpbb/install/helper/iohandler/ajax_iohandler.php63
-rw-r--r--phpBB/phpbb/install/helper/iohandler/cli_iohandler.php2
-rw-r--r--phpBB/phpbb/install/helper/iohandler/iohandler_interface.php4
-rw-r--r--phpBB/phpbb/install/installer.php116
-rw-r--r--phpBB/phpbb/install/module/install_data/task/add_bots.php22
-rw-r--r--phpBB/phpbb/install/module/install_data/task/add_modules.php428
-rw-r--r--phpBB/phpbb/install/module/install_database/task/add_config_settings.php20
-rw-r--r--phpBB/phpbb/install/module/install_database/task/add_default_data.php21
-rw-r--r--phpBB/phpbb/install/module/install_database/task/add_tables.php151
-rw-r--r--phpBB/phpbb/install/module/install_database/task/create_schema_file.php164
-rw-r--r--phpBB/phpbb/install/module/install_database/task/set_up_database.php164
-rw-r--r--phpBB/phpbb/install/module/install_filesystem/task/create_config_file.php2
-rw-r--r--phpBB/phpbb/install/module/install_finish/task/notify_user.php6
-rw-r--r--phpBB/phpbb/install/module/install_finish/task/populate_migrations.php24
-rw-r--r--phpBB/phpbb/install/module/obtain_data/task/obtain_admin_data.php1
-rw-r--r--phpBB/phpbb/install/module/obtain_data/task/obtain_board_data.php1
-rw-r--r--phpBB/phpbb/install/module/obtain_data/task/obtain_database_data.php1
-rw-r--r--phpBB/phpbb/install/module/obtain_data/task/obtain_email_data.php1
-rw-r--r--phpBB/phpbb/install/module/obtain_data/task/obtain_file_updater_method.php1
-rw-r--r--phpBB/phpbb/install/module/obtain_data/task/obtain_server_data.php1
-rw-r--r--phpBB/phpbb/install/module/obtain_data/task/obtain_update_ftp_data.php1
-rw-r--r--phpBB/phpbb/install/module/obtain_data/task/obtain_update_settings.php1
-rw-r--r--phpBB/phpbb/install/module/requirements/abstract_requirements_module.php37
-rw-r--r--phpBB/phpbb/install/module/update_database/task/update.php1
-rw-r--r--phpBB/phpbb/install/module/update_filesystem/task/download_updated_files.php1
-rw-r--r--phpBB/phpbb/install/module/update_filesystem/task/show_file_status.php1
-rw-r--r--phpBB/phpbb/install/module_base.php97
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'];
}
/**