aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/install/module_base.php
diff options
context:
space:
mode:
authorMateBartus <mate.bartus@gmail.com>2015-04-17 23:17:23 +0200
committerMate Bartus <mate.bartus@gmail.com>2015-07-08 01:27:56 +0200
commit8155205ae7a5ec27ff3058137513fc480d7ee6c5 (patch)
tree75582a89e64da1477aa7f5161c15f0600c462d62 /phpBB/install/module_base.php
parent53c5610080d45660fc8d5528135408cb9ac293cf (diff)
downloadforums-8155205ae7a5ec27ff3058137513fc480d7ee6c5.tar
forums-8155205ae7a5ec27ff3058137513fc480d7ee6c5.tar.gz
forums-8155205ae7a5ec27ff3058137513fc480d7ee6c5.tar.bz2
forums-8155205ae7a5ec27ff3058137513fc480d7ee6c5.tar.xz
forums-8155205ae7a5ec27ff3058137513fc480d7ee6c5.zip
[ticket/13740] Implementation of the new installer framework
[ci skip] PHPBB3-13740
Diffstat (limited to 'phpBB/install/module_base.php')
-rw-r--r--phpBB/install/module_base.php175
1 files changed, 175 insertions, 0 deletions
diff --git a/phpBB/install/module_base.php b/phpBB/install/module_base.php
new file mode 100644
index 0000000000..defccaefef
--- /dev/null
+++ b/phpBB/install/module_base.php
@@ -0,0 +1,175 @@
+<?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;
+
+/**
+ * Base class for installer module
+ */
+abstract class module_base implements module_interface
+{
+ /**
+ * @var \Symfony\Component\DependencyInjection\ContainerInterface
+ */
+ protected $container;
+
+ /**
+ * @var \phpbb\install\helper\config
+ */
+ protected $install_config;
+
+ /**
+ * @var \phpbb\install\helper\iohandler\iohandler_interface
+ */
+ protected $iohandler;
+
+ /**
+ * @var bool
+ */
+ protected $is_essential;
+
+ /**
+ * Array of tasks for installer module
+ *
+ * @var array
+ */
+ protected $task_collection;
+
+ /**
+ * Installer module constructor
+ *
+ * @param array $tasks array of installer tasks for installer module
+ * @param bool $essential flag that indicates if module is essential or not
+ */
+ public function __construct(array $tasks, $essential = true)
+ {
+ $this->task_collection = $tasks;
+ $this->is_essential = $essential;
+ }
+
+ /**
+ * Dependency getter
+ *
+ * @param \Symfony\Component\DependencyInjection\ContainerInterface $container
+ * @param \phpbb\install\helper\config $config
+ * @param \phpbb\install\helper\iohandler\iohandler_interface $iohandler
+ *
+ * @return null
+ */
+ public function setup(\Symfony\Component\DependencyInjection\ContainerInterface $container, \phpbb\install\helper\config $config, \phpbb\install\helper\iohandler\iohandler_interface $iohandler)
+ {
+ $this->container = $container;
+ $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_index = $this->recover_progress();
+
+ // Run until there are available resources
+ while ($this->install_config->get_time_remaining() > 0 && $this->install_config->get_memory_remaining() > 0)
+ {
+ // Check if task exists
+ if (!isset($this->task_collection[$task_index]))
+ {
+ break;
+ }
+
+ // Recover task to be executed
+ /** @var \phpbb\install\task_interface $task */
+ $task = $this->container->get($this->task_collection[$task_index]);
+
+ // Iterate to the next task
+ $task_index++;
+
+ // Check if we can run the task
+ if (!$task->is_essential() && !$task->check_requirements())
+ {
+ continue;
+ }
+
+ $task->run();
+
+ // Increment progress
+ if ($this->get_task_count() !== 0)
+ {
+ //$this->iohandler->increment_progress();
+ }
+
+ $this->iohandler->send_response();
+
+ // Log install progress
+ $current_task_index = $task_index - 1;
+ $this->install_config->set_finished_task($this->task_collection[$current_task_index], $current_task_index);
+ }
+ }
+
+ /**
+ * Returns the next task's index
+ *
+ * @return int index of the array element of the next task
+ */
+ protected function recover_progress()
+ {
+ $progress_array = $this->install_config->get_progress_data();
+ $last_finished_task_name = $progress_array['last_task_name'];
+ $last_finished_task_index = $progress_array['last_task_index'];
+
+ // Check if the data is relevant to this module
+ if (isset($this->task_collection[$last_finished_task_index]))
+ {
+ if ($this->task_collection[$last_finished_task_index] === $last_finished_task_name)
+ {
+ // Return the task index of the next task
+ return $last_finished_task_index + 1;
+ }
+ }
+
+ // As of now if the progress has not been resolved we assume that it is because
+ // the task progress belongs to the previous module,
+ // so just default to the first task
+ // @todo make module aware of it's service name that way this can be improved
+ return 0;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function get_task_count()
+ {
+ return sizeof($this->task_collection);
+ }
+}