mirror of
https://github.com/phpbb/phpbb.git
synced 2025-07-18 07:31:32 +02:00
build
git-tools
phpBB
adm
assets
bin
cache
config
develop
docs
download
ext
files
images
includes
install
install_new
language
phpbb
auth
avatar
cache
captcha
config
console
controller
cron
db
di
event
exception
extension
feed
files
filesystem
group
groupposition
help
hook
install
console
controller
exception
helper
module
installer.php
installer_configuration.php
module_base.php
module_interface.php
task_base.php
task_interface.php
language
lock
log
message
mimetype
module
notification
passwords
php
plupload
profilefields
report
request
routing
search
template
textformatter
textreparser
tree
class_loader.php
composer.json
config_php_file.php
content_visibility.php
datetime.php
error_collector.php
file_downloader.php
filesystem.php
finder.php
json_response.php
pagination.php
path_helper.php
permissions.php
recursive_dot_prefix_filter_iterator.php
session.php
symfony_request.php
user.php
user_loader.php
version_helper.php
viewonline_helper.php
store
styles
.htaccess
app.php
common.php
composer.json
composer.lock
cron.php
faq.php
feed.php
index.php
mcp.php
memberlist.php
posting.php
report.php
search.php
ucp.php
viewforum.php
viewonline.php
viewtopic.php
web.config
tests
travis
.editorconfig
.gitignore
.jscsrc
.jshintrc
.travis.yml
CONTRIBUTING.md
README.md
composer.phar
phpunit.xml.dist
219 lines
4.7 KiB
PHP
219 lines
4.7 KiB
PHP
<?php
|
|
/**
|
|
*
|
|
* This file is part of the phpBB Forum Software package.
|
|
*
|
|
* @copyright (c) phpBB Limited <https://www.phpbb.com>
|
|
* @license GNU General Public License, version 2 (GPL-2.0)
|
|
*
|
|
* For full copyright and license information, please see
|
|
* the docs/CREDITS.txt file.
|
|
*
|
|
*/
|
|
|
|
namespace phpbb\install;
|
|
|
|
use phpbb\di\ordered_service_collection;
|
|
use phpbb\install\exception\resource_limit_reached_exception;
|
|
use phpbb\install\helper\config;
|
|
use phpbb\install\helper\iohandler\iohandler_interface;
|
|
|
|
/**
|
|
* Base class for installer module
|
|
*/
|
|
abstract class module_base implements module_interface
|
|
{
|
|
/**
|
|
* @var config
|
|
*/
|
|
protected $install_config;
|
|
|
|
/**
|
|
* @var iohandler_interface
|
|
*/
|
|
protected $iohandler;
|
|
|
|
/**
|
|
* @var bool
|
|
*/
|
|
protected $is_essential;
|
|
|
|
/**
|
|
* Array of tasks for installer module
|
|
*
|
|
* @var ordered_service_collection
|
|
*/
|
|
protected $task_collection;
|
|
|
|
/**
|
|
* @var array
|
|
*/
|
|
protected $task_step_count;
|
|
|
|
/**
|
|
* @var bool
|
|
*/
|
|
protected $allow_progress_bar;
|
|
|
|
/**
|
|
* Installer module constructor
|
|
*
|
|
* @param ordered_service_collection $tasks array of installer tasks for installer module
|
|
* @param bool $essential flag indicating whether the module is essential or not
|
|
* @param bool $allow_progress_bar flag indicating whether or not to send progress information from within the module
|
|
*/
|
|
public function __construct(ordered_service_collection $tasks, $essential = true, $allow_progress_bar = true)
|
|
{
|
|
$this->task_collection = $tasks;
|
|
$this->is_essential = $essential;
|
|
$this->allow_progress_bar = $allow_progress_bar;
|
|
}
|
|
|
|
/**
|
|
* Dependency getter
|
|
*
|
|
* @param config $config
|
|
* @param iohandler_interface $iohandler
|
|
*/
|
|
public function setup(config $config, iohandler_interface $iohandler)
|
|
{
|
|
$this->install_config = $config;
|
|
$this->iohandler = $iohandler;
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function is_essential()
|
|
{
|
|
return $this->is_essential;
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*
|
|
* Overwrite this method if your task is non-essential!
|
|
*/
|
|
public function check_requirements()
|
|
{
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
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();
|
|
}
|
|
|
|
// 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;
|
|
}
|
|
}
|
|
|
|
// Send progress information
|
|
if ($this->allow_progress_bar)
|
|
{
|
|
$this->iohandler->set_progress(
|
|
$task->get_task_lang_name(),
|
|
$this->install_config->get_current_task_progress()
|
|
);
|
|
}
|
|
|
|
// Check if we can run the task
|
|
if (!$task->is_essential() && !$task->check_requirements())
|
|
{
|
|
$this->iohandler->add_log_message(array(
|
|
'SKIP_TASK',
|
|
$name,
|
|
));
|
|
|
|
$this->install_config->increment_current_task_progress($this->task_step_count[$name]);
|
|
continue;
|
|
}
|
|
|
|
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();
|
|
}
|
|
|
|
$task->run();
|
|
|
|
// Log install progress
|
|
$this->install_config->set_finished_task($name);
|
|
|
|
// 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();
|
|
}
|
|
|
|
// Module finished, so clear task progress
|
|
$this->install_config->set_finished_task('');
|
|
}
|
|
|
|
/**
|
|
* Returns the next task's name
|
|
*
|
|
* @return string Index of the array element of the next task
|
|
*/
|
|
protected function recover_progress()
|
|
{
|
|
$progress_array = $this->install_config->get_progress_data();
|
|
return $progress_array['last_task_name'];
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function get_step_count()
|
|
{
|
|
$task_step_count = 0;
|
|
$task_class_names = $this->task_collection->get_service_classes();
|
|
|
|
foreach ($task_class_names as $name => $task_class)
|
|
{
|
|
$step_count = $task_class::get_step_count();
|
|
$task_step_count += $step_count;
|
|
$this->task_step_count[$name] = $step_count;
|
|
}
|
|
|
|
return $task_step_count;
|
|
}
|
|
}
|