* @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\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 \Symfony\Component\Console\Helper\ProgressBar
*/
protected $progress_bar;
/**
* Set the style and output used to display feedback;
*
* @param OutputStyle $style
* @param OutputInterface $output
*/
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;
}
/**
* {@inheritdoc}
*/
public function get_raw_input($name, $default)
{
return $this->get_input($name, $default, true);
}
/**
* Set input variable
*
* @param string $name Name of input variable
* @param mixed $value Value of input variable
*/
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($no_more_output = false)
{
}
/**
* {@inheritdoc
*/
public function add_error_message($error_title, $error_description = false)
{
$this->io->newLine();
$message = $this->translate_message($error_title, $error_description);
$message_string = $message['title'] . (!empty($message['description']) ? "\n" . $message['description'] : '');
if (strpos($message_string, '
') !== false)
{
$message_string = strip_tags(str_replace('
', "\n", $message_string));
}
$this->io->error($message_string);
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);
$message_string = $message['title'] . (!empty($message['description']) ? "\n" . $message['description'] : '');
$this->io->warning($message_string);
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)
{
$message = $this->translate_message($log_title, $log_description);
$this->output->writeln(sprintf('[%3d/%-3d] ---- %s', $this->current_task_progress, $this->task_progress_count, $message['title']));
}
}
/**
* {@inheritdoc
*/
public function add_success_message($error_title, $error_description = false)
{
$this->io->newLine();
$message = $this->translate_message($error_title, $error_description);
$message_string = $message['title'] . (!empty($message['description']) ? "\n" . $message['description'] : '');
$this->io->success($message_string);
if ($this->progress_bar !== null)
{
$this->io->newLine(2);
$this->progress_bar->display();
}
}
/**
* {@inheritdoc}
*/
public function set_task_count($task_count, $restart = false)
{
parent::set_task_count($task_count, $restart);
if ($this->output->getVerbosity() === OutputInterface::VERBOSITY_NORMAL)
{
if ($this->progress_bar !== null)
{
// Symfony's ProgressBar is immutable regarding task_count, so delete the old and create a new one.
$this->progress_bar->clear();
}
else
{
$this->io->newLine(2);
}
$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->progress_bar->start();
}
}
/**
* {@inheritdoc}
*/
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;
}
}
/**
* {@inheritdoc}
*/
public function request_refresh()
{
}
/**
* {@inheritdoc}
*/
public function set_active_stage_menu($menu_path)
{
}
/**
* {@inheritdoc}
*/
public function set_finished_stage_menu($menu_path)
{
}
/**
* {@inheritdoc}
*/
public function set_cookie($cookie_name, $cookie_value)
{
}
/**
* {@inheritdoc}
*/
public function add_download_link($route, $title, $msg = null)
{
}
/**
* {@inheritdoc}
*/
public function render_update_file_status($status_array)
{
}
/**
* {@inheritdoc}
*/
public function redirect($url, $use_ajax = false)
{
}
}