aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/phpbb/install/helper/iohandler
diff options
context:
space:
mode:
Diffstat (limited to 'phpBB/phpbb/install/helper/iohandler')
-rw-r--r--phpBB/phpbb/install/helper/iohandler/ajax_iohandler.php2
-rw-r--r--phpBB/phpbb/install/helper/iohandler/cli_iohandler.php235
-rw-r--r--phpBB/phpbb/install/helper/iohandler/factory.php7
-rw-r--r--phpBB/phpbb/install/helper/iohandler/iohandler_base.php34
-rw-r--r--phpBB/phpbb/install/helper/iohandler/iohandler_interface.php27
5 files changed, 300 insertions, 5 deletions
diff --git a/phpBB/phpbb/install/helper/iohandler/ajax_iohandler.php b/phpBB/phpbb/install/helper/iohandler/ajax_iohandler.php
index 71571fecba..85cb2ca753 100644
--- a/phpBB/phpbb/install/helper/iohandler/ajax_iohandler.php
+++ b/phpBB/phpbb/install/helper/iohandler/ajax_iohandler.php
@@ -182,6 +182,7 @@ class ajax_iohandler extends iohandler_base
'errors' => $this->errors,
'warnings' => $this->warnings,
'logs' => $this->logs,
+ 'success' => $this->success,
);
if (!empty($this->form))
@@ -208,6 +209,7 @@ class ajax_iohandler extends iohandler_base
$this->errors = array();
$this->warnings = array();
$this->logs = array();
+ $this->success = array();
$this->nav_data = array();
if ($this->request_client_refresh)
diff --git a/phpBB/phpbb/install/helper/iohandler/cli_iohandler.php b/phpBB/phpbb/install/helper/iohandler/cli_iohandler.php
new file mode 100644
index 0000000000..d990f48925
--- /dev/null
+++ b/phpBB/phpbb/install/helper/iohandler/cli_iohandler.php
@@ -0,0 +1,235 @@
+<?php
+/**
+ *
+ * This file is part of the phpBB Forum Software package.
+ *
+ * @copyright (c) phpBB Limited <https://www.phpbb.com>
+ * @license GNU General Public License, version 2 (GPL-2.0)
+ *
+ * For full copyright and license information, please see
+ * the docs/CREDITS.txt file.
+ *
+ */
+
+namespace phpbb\install\helper\iohandler;
+
+use phpbb\install\exception\installer_exception;
+use Symfony\Component\Console\Helper\ProgressBar;
+use Symfony\Component\Console\Output\OutputInterface;
+use Symfony\Component\Console\Style\OutputStyle;
+
+/**
+ * Input-Output handler for the CLI frontend
+ */
+class cli_iohandler extends iohandler_base
+{
+ /**
+ * @var OutputInterface
+ */
+ protected $output;
+
+ /**
+ * @var OutputStyle
+ */
+ protected $io;
+
+ /**
+ * @var array
+ */
+ protected $input_values = array();
+
+ /**
+ * @var ProgressBar
+ */
+ protected $progress_bar;
+
+ /**
+ * Set the style and output used to display feedback;
+ *
+ * @param OutputStyle $style
+ */
+ public function set_style(OutputStyle $style, OutputInterface $output)
+ {
+ $this->io = $style;
+ $this->output = $output;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function get_input($name, $default, $multibyte = false)
+ {
+ $result = $default;
+
+ if (isset($this->input_values[$name]))
+ {
+ $result = $this->input_values[$name];
+ }
+
+
+ if ($multibyte)
+ {
+ return utf8_normalize_nfc($result);
+ }
+
+ return $result;
+ }
+
+ public function set_input($name, $value)
+ {
+ $this->input_values[$name] = $value;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function get_server_variable($name, $default = '')
+ {
+ return $default;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function get_header_variable($name, $default = '')
+ {
+ return $default;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function is_secure()
+ {
+ return false;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function add_user_form_group($title, $form)
+ {
+ throw new installer_exception('MISSING_DATA');
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function send_response()
+ {
+ }
+
+ /**
+ * {@inheritdoc
+ */
+ public function add_error_message($error_title, $error_description = false)
+ {
+ $this->io->newLine();
+
+ $message = $this->translate_message($error_title, $error_description);
+ $this->io->error($message['title'] . "\n" . $message['description']);
+
+ if ($this->progress_bar !== null)
+ {
+ $this->io->newLine(2);
+ $this->progress_bar->display();
+ }
+ }
+
+ /**
+ * {@inheritdoc
+ */
+ public function add_warning_message($warning_title, $warning_description = false)
+ {
+ $this->io->newLine();
+
+ $message = $this->translate_message($warning_title, $warning_description);
+ $this->io->warning($message['title'] . "\n" . $message['description']);
+
+ if ($this->progress_bar !== null)
+ {
+ $this->io->newLine(2);
+ $this->progress_bar->display();
+ }
+ }
+
+ /**
+ * {@inheritdoc
+ */
+ public function add_log_message($log_title, $log_description = false)
+ {
+ if ($this->output->getVerbosity() > OutputInterface::VERBOSITY_NORMAL)
+ {
+ $this->output->writeln(sprintf('[%3d/%-3d] ---- %s', $this->current_task_progress, $this->task_progress_count, $this->translate_message($log_title, $log_description)['title']));
+ }
+ }
+
+ /**
+ * {@inheritdoc
+ */
+ public function add_success_message($error_title, $error_description = false)
+ {
+ $this->io->newLine();
+
+ $message = $this->translate_message($error_title, $error_description);
+ $this->io->success($message['title'] . "\n" . $message['description']);
+
+ if ($this->progress_bar !== null)
+ {
+ $this->io->newLine(2);
+ $this->progress_bar->display();
+ }
+ }
+
+ public function set_task_count($task_count)
+ {
+ parent::set_task_count($task_count);
+
+ if ($this->output->getVerbosity() === OutputInterface::VERBOSITY_NORMAL)
+ {
+ $this->progress_bar = $this->io->createProgressBar($task_count);
+ $this->progress_bar->setFormat(
+ " %current:3s%/%max:-3s% %bar% %percent:3s%%\n" .
+ " %message%\n");
+ $this->progress_bar->setBarWidth(60);
+
+ if (!defined('PHP_WINDOWS_VERSION_BUILD')) {
+ $this->progress_bar->setEmptyBarCharacter('░'); // light shade character \u2591
+ $this->progress_bar->setProgressCharacter('');
+ $this->progress_bar->setBarCharacter('▓'); // dark shade character \u2593
+ }
+ $this->progress_bar->setMessage('');
+ $this->io->newLine(2);
+ $this->progress_bar->start();
+ }
+ }
+
+ public function set_progress($task_lang_key, $task_number)
+ {
+ parent::set_progress($task_lang_key, $task_number);
+
+ if ($this->progress_bar !== null)
+ {
+ $this->progress_bar->setProgress($this->current_task_progress);
+ $this->progress_bar->setMessage($this->current_task_name);
+ }
+ else
+ {
+ $this->output->writeln(sprintf('[%3d/%-3d] %s', $this->current_task_progress, $this->task_progress_count, $this->current_task_name));
+ }
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function finish_progress($message_lang_key)
+ {
+ parent::finish_progress($message_lang_key);
+
+ if ($this->progress_bar !== null)
+ {
+ $this->progress_bar->finish();
+ $this->progress_bar = null;
+ }
+ }
+}
diff --git a/phpBB/phpbb/install/helper/iohandler/factory.php b/phpBB/phpbb/install/helper/iohandler/factory.php
index 0af75b78ae..7081af06a5 100644
--- a/phpBB/phpbb/install/helper/iohandler/factory.php
+++ b/phpBB/phpbb/install/helper/iohandler/factory.php
@@ -59,7 +59,7 @@ class factory
*/
public function get()
{
- switch ($this->environment)
+ if ($this->container->has('installer.helper.iohandler_' . $this->environment))
{
case 'ajax':
return $this->container->get('installer.helper.iohandler_ajax');
@@ -68,9 +68,14 @@ class factory
// @todo replace this
return $this->container->get('installer.helper.iohandler_ajax');
break;
+ case 'cli':
+ return $this->container->get('installer.helper.iohandler_cli');
+ break;
default:
throw new iohandler_not_implemented_exception();
break;
}
+
+ throw new iohandler_not_implemented_exception();
}
}
diff --git a/phpBB/phpbb/install/helper/iohandler/iohandler_base.php b/phpBB/phpbb/install/helper/iohandler/iohandler_base.php
index f767ecf4e9..006411f1e3 100644
--- a/phpBB/phpbb/install/helper/iohandler/iohandler_base.php
+++ b/phpBB/phpbb/install/helper/iohandler/iohandler_base.php
@@ -44,6 +44,13 @@ abstract class iohandler_base implements iohandler_interface
protected $logs;
/**
+ * Array of success messages
+ *
+ * @var array
+ */
+ protected $success;
+
+ /**
* @var \phpbb\language\language
*/
protected $language;
@@ -71,6 +78,7 @@ abstract class iohandler_base implements iohandler_interface
$this->errors = array();
$this->warnings = array();
$this->logs = array();
+ $this->success = array();
$this->task_progress_count = 0;
$this->current_task_progress = 0;
@@ -114,6 +122,14 @@ abstract class iohandler_base implements iohandler_interface
/**
* {@inheritdoc}
*/
+ public function add_success_message($success_title, $success_description = false)
+ {
+ $this->success[] = $this->translate_message($success_title, $success_description);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
public function set_task_count($task_count)
{
$this->task_progress_count = $task_count;
@@ -124,11 +140,27 @@ abstract class iohandler_base implements iohandler_interface
*/
public function set_progress($task_lang_key, $task_number)
{
+ $this->current_task_name = '';
+
if (!empty($task_lang_key))
{
$this->current_task_name = $this->language->lang($task_lang_key);
- $this->current_task_progress = $task_number;
}
+
+ $this->current_task_progress = $task_number;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function finish_progress($message_lang_key)
+ {
+ if (!empty($message_lang_key))
+ {
+ $this->current_task_name = $this->language->lang($message_lang_key);
+ }
+
+ $this->current_task_progress = $this->task_progress_count;
}
/**
diff --git a/phpBB/phpbb/install/helper/iohandler/iohandler_interface.php b/phpBB/phpbb/install/helper/iohandler/iohandler_interface.php
index c40fea24ce..44b409bb0a 100644
--- a/phpBB/phpbb/install/helper/iohandler/iohandler_interface.php
+++ b/phpBB/phpbb/install/helper/iohandler/iohandler_interface.php
@@ -85,7 +85,7 @@ interface iohandler_interface
*
* @param string|array $warning_title Title of the warning message
* @param string|bool|array $warning_description Description of the warning (and possibly guidelines to resolve it),
- * or false if the error description is not available
+ * or false if the warning description is not available
*/
public function add_warning_message($warning_title, $warning_description = false);
@@ -96,12 +96,26 @@ interface iohandler_interface
* resolved as printf($param[0], $param[1], ...).
*
* @param string|array $log_title Title of the log message
- * @param string|bool|array $log_description Description of the log (and possibly guidelines to resolve it),
- * or false if the error description is not available
+ * @param string|bool|array $log_description Description of the log,
+ * or false if the log description is not available
*/
public function add_log_message($log_title, $log_description = false);
/**
+ * Adds a success message to the rendering queue
+ *
+ * Note: When an array is passed into the parameters below, it will be
+ * resolved as printf($param[0], $param[1], ...).
+ *
+ * @param string|array $success_title Title of the success message
+ * @param string|bool|array $success_description Description of the success,
+ * or false if the success description is not available
+ *
+ * @return null
+ */
+ public function add_success_message($success_title, $success_description = false);
+
+ /**
* Adds a requested data group to the rendering queue
*
* @param string $title Language variable with the title of the form
@@ -142,4 +156,11 @@ interface iohandler_interface
* @param array $menu_path Array to the navigation elem
*/
public function set_finished_stage_menu($menu_path);
+
+ /**
+ * Finish the progress bar
+ *
+ * @param string $message_lang_key Language key for the message
+ */
+ public function finish_progress($message_lang_key);
}