[ticket/13126] Extends migrator_output_handler instead of using a closure

PHPBB3-13126
This commit is contained in:
Tristan Darricau 2014-10-16 01:34:23 +02:00
parent 56d7c2c6ed
commit 58075e25e8
5 changed files with 125 additions and 57 deletions

View file

@ -174,18 +174,7 @@ define('IN_DB_UPDATE', true);
// End startup code // End startup code
$migrator = $phpbb_container->get('migrator'); $migrator = $phpbb_container->get('migrator');
$migrator->set_output_handler( $migrator->set_output_handler(new \phpbb\db\html_migrator_output_handler($user));
new \phpbb\db\migrator_output_handler(
function($message, $verbosity) use ($user)
{
if ($verbosity <= \phpbb\db\migrator_output_handler::VERBOSITY_NORMAL)
{
$final_message = call_user_func_array(array($user, 'lang'), $message);
echo $final_message . "<br />\n";
}
}
)
);
$migrator->create_migrations_table(); $migrator->create_migrations_table();

View file

@ -0,0 +1,72 @@
<?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\console\command\db;
use phpbb\user;
use phpbb\db\migrator_output_handler;
use Symfony\Component\Console\Output\OutputInterface;
class console_migrator_output_handler extends migrator_output_handler
{
/**
* User object.
*
* @var user
*/
private $user;
/**
* Console output object.
*
* @var OutputInterface
*/
private $output;
/**
* Constructor
*
* @param user $user User object
* @param OutputInterface $output Console output object
*/
public function __construct(user $user, OutputInterface $output)
{
$this->user = $user;
$this->output = $output;
}
/**
* Write output using the configured closure.
*
* @param string|array $message The message to write or an array containing the language key and all of its parameters.
* @param int $verbosity The verbosity of the message.
*/
public function write($message, $verbosity)
{
if ($verbosity <= $this->output->getVerbosity())
{
$translated_message = call_user_func_array(array($this->user, 'lang'), $message);
if ($verbosity === \phpbb\db\migrator_output_handler::VERBOSITY_NORMAL)
{
$translated_message = '<info>' . $translated_message . '</info>';
}
else if ($verbosity === \phpbb\db\migrator_output_handler::VERBOSITY_VERY_VERBOSE)
{
$translated_message = '<comment>' . $translated_message . '</comment>';
}
$this->output->writeln($translated_message);
}
}
}

View file

@ -53,29 +53,7 @@ class migrate extends \phpbb\console\command\command
protected function execute(InputInterface $input, OutputInterface $output) protected function execute(InputInterface $input, OutputInterface $output)
{ {
$user = $this->user; $this->migrator->set_output_handler(new console_migrator_output_handler($this->user, $output));
$this->migrator->set_output_handler(
new \phpbb\db\migrator_output_handler(
function($message, $verbosity) use ($output, $user)
{
if ($verbosity <= $output->getVerbosity())
{
$final_message = call_user_func_array(array($user, 'lang'), $message);
if ($verbosity === \phpbb\db\migrator_output_handler::VERBOSITY_NORMAL)
{
$final_message = '<info>' . $final_message . '</info>';
}
else if ($verbosity === \phpbb\db\migrator_output_handler::VERBOSITY_VERY_VERBOSE)
{
$final_message = '<comment>' . $final_message . '</comment>';
}
$output->writeln($final_message);
}
}
)
);
$this->migrator->create_migrations_table(); $this->migrator->create_migrations_table();

View file

@ -0,0 +1,51 @@
<?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\db;
use phpbb\user;
class html_migrator_output_handler extends migrator_output_handler
{
/**
* User object.
*
* @var user
*/
private $user;
/**
* Constructor
*
* @param user $user User object
*/
public function __construct(user $user)
{
$this->user = $user;
}
/**
* Write output using the configured closure.
*
* @param string|array $message The message to write or an array containing the language key and all of its parameters.
* @param int $verbosity The verbosity of the message.
*/
public function write($message, $verbosity)
{
if ($verbosity <= migrator_output_handler::VERBOSITY_NORMAL)
{
$final_message = call_user_func_array(array($this->user, 'lang'), $message);
echo $final_message . "<br />\n";
}
}
}

View file

@ -21,26 +21,6 @@ class migrator_output_handler
const VERBOSITY_VERY_VERBOSE = 3; const VERBOSITY_VERY_VERBOSE = 3;
const VERBOSITY_DEBUG = 4; const VERBOSITY_DEBUG = 4;
/**
* A callable used to write the output.
*
* @var callable
*/
private $closure;
/**
* Constructor
*
* @param callable $closure The closure used to write the output. (null by default)
*/
public function __construct(\Closure $closure = null)
{
if ($closure === null) {
$closure = function($message, $verbosity) {};
}
$this->closure = $closure;
}
/** /**
* Write output using the configured closure. * Write output using the configured closure.
* *
@ -49,7 +29,5 @@ class migrator_output_handler
*/ */
public function write($message, $verbosity) public function write($message, $verbosity)
{ {
$closure = $this->closure;
$closure((array) $message, $verbosity);
} }
} }