* @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)
{
}
}
%%v]P9sͤ}Mo3^S.qԀ}L(hV4\MT1D{/5M%KA1*;/`QYDH(^RwԀ=.E
MR\W(hvmQ? \q){d.$fΘ[TƆ,in=RŞ_B{r@ΝZ/|!u)/"mU}fTsnD
K+
eUb:m m%@XR+0
/iMkX"v͙7gipC)[ -R*`&Iy_|]G(zQw #zsFdAI|mP0E"^!L-~T{5&y7M]RVfˠw'rS1rO\OS>0/[MzR,fSO&[tY~;r1Ŭ$IbwN7CdoX*h)&2u?1`epdf.1p˚x@-H[ڥ^_ƯѸ.(bW7-o1̾y>\W<8م&ie{Ԓ7~:N-4J"+7s!UugM6Ik(@aOb((Hlovs@-3ΛVPL4^ti:n/Ka~Tw1"דi`HT+PI )E^ەzrPc`&-~ :_`CZ#__xShJmt31x^囄cX xFA(Ym H;oFÂ1%>fn;QkMvqcޫCJ$,h-iUc4=$ $)$R
-mU$.%3`%C[3t9;릈}Cno%vvZxzIQ9UUaZ|,N]Im>qf\G Lᨮ!F|H|ȡo.8n`խI
FqE)Z&,GO HaH⥽YU
wǷDCyzzoP2L/i*M,JZxdLV=m̽hP^g\}>R
u@lPݾ~9_Ҧbtl~=q|U0p3=T|}[نJ
(b渵Ġr*}^7|iszw
n|A#hKY{R/YݝN)p(pi
RbdYY>j%U3~ٚGA#uk+c$ih:PȟyO{Ё V*P3<$B_z%t^slPr1?
hEU咉@/kK:\ަ,PDɠI pXN%+W<>U sR)&K<}߮;t?B
ﮐ1FysY56]E&8eOnJ
qV_ymw(],VS6&Wb)o'I^X8mzw̚mwdy_(
c,Bp_$?1ȴY ?
}1ܿjCN˻7>FJz