Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 23
CRAP
0.00% covered (danger)
0.00%
0 / 141
cli_iohandler
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 23
1482.00
0.00% covered (danger)
0.00%
0 / 141
 set_style
0.00% covered (danger)
0.00%
0 / 1
2.00
0.00% covered (danger)
0.00%
0 / 4
 get_input
0.00% covered (danger)
0.00%
0 / 1
12.00
0.00% covered (danger)
0.00%
0 / 12
 get_raw_input
0.00% covered (danger)
0.00%
0 / 1
2.00
0.00% covered (danger)
0.00%
0 / 3
 set_input
0.00% covered (danger)
0.00%
0 / 1
2.00
0.00% covered (danger)
0.00%
0 / 3
 get_server_variable
0.00% covered (danger)
0.00%
0 / 1
2.00
0.00% covered (danger)
0.00%
0 / 3
 get_header_variable
0.00% covered (danger)
0.00%
0 / 1
2.00
0.00% covered (danger)
0.00%
0 / 3
 is_secure
0.00% covered (danger)
0.00%
0 / 1
2.00
0.00% covered (danger)
0.00%
0 / 3
 add_user_form_group
0.00% covered (danger)
0.00%
0 / 1
2.00
0.00% covered (danger)
0.00%
0 / 3
 send_response
0.00% covered (danger)
0.00%
0 / 1
2.00
0.00% covered (danger)
0.00%
0 / 2
 add_error_message
0.00% covered (danger)
0.00%
0 / 1
20.00
0.00% covered (danger)
0.00%
0 / 15
 add_warning_message
0.00% covered (danger)
0.00%
0 / 1
12.00
0.00% covered (danger)
0.00%
0 / 11
 add_log_message
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 7
 add_success_message
0.00% covered (danger)
0.00%
0 / 1
12.00
0.00% covered (danger)
0.00%
0 / 11
 set_task_count
0.00% covered (danger)
0.00%
0 / 1
20.00
0.00% covered (danger)
0.00%
0 / 27
 set_progress
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 12
 finish_progress
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 8
 request_refresh
0.00% covered (danger)
0.00%
0 / 1
2.00
0.00% covered (danger)
0.00%
0 / 2
 set_active_stage_menu
0.00% covered (danger)
0.00%
0 / 1
2.00
0.00% covered (danger)
0.00%
0 / 2
 set_finished_stage_menu
0.00% covered (danger)
0.00%
0 / 1
2.00
0.00% covered (danger)
0.00%
0 / 2
 set_cookie
0.00% covered (danger)
0.00%
0 / 1
2.00
0.00% covered (danger)
0.00%
0 / 2
 add_download_link
0.00% covered (danger)
0.00%
0 / 1
2.00
0.00% covered (danger)
0.00%
0 / 2
 render_update_file_status
0.00% covered (danger)
0.00%
0 / 1
2.00
0.00% covered (danger)
0.00%
0 / 2
 redirect
0.00% covered (danger)
0.00%
0 / 1
2.00
0.00% covered (danger)
0.00%
0 / 2
<?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\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, '<br />') !== false)
        {
            $message_string = strip_tags(str_replace('<br />', "\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)
    {
    }
}