*/ class TextWrapper { /** * @var PhinxApplication */ private $app; /** * @var array */ private $options = array(); /** * @var integer */ private $exit_code; /** * @param PhinxApplication $app * @param array $options */ public function __construct(PhinxApplication $app, array $options = array()) { $this->app = $app; $this->options = $options; } /** * Get the application instance. * * @return PhinxApplication */ public function getApp() { return $this->app; } /** * Returns the exit code from the last run command. * @return integer */ public function getExitCode() { return $this->exit_code; } /** * Returns the output from running the "status" command. * @param string $env environment name (optional) * @return string */ public function getStatus($env = null) { $command = array('status'); if ($env ?: $this->hasOption('environment')) { $command += array('-e' => $env ?: $this->getOption('environment')); } if ($this->hasOption('configuration')) { $command += array('-c' => $this->getOption('configuration')); } if ($this->hasOption('parser')) { $command += array('-p' => $this->getOption('parser')); } return $this->executeRun($command); } /** * Returns the output from running the "migrate" command. * @param string $env environment name (optional) * @param string $target target version (optional) * @return string */ public function getMigrate($env = null, $target = null) { $command = array('migrate'); if ($env ?: $this->hasOption('environment')) { $command += array('-e' => $env ?: $this->getOption('environment')); } if ($this->hasOption('configuration')) { $command += array('-c' => $this->getOption('configuration')); } if ($this->hasOption('parser')) { $command += array('-p' => $this->getOption('parser')); } if ($target) { $command += array('-t' => $target); } return $this->executeRun($command); } /** * Returns the output from running the "seed:run" command. * @param string|null $env environment name * @param string|null $target target version * @param array|string|null $seed array of seed names or seed name * @return string */ public function getSeed($env = null, $target = null, $seed = null) { $command = array ('seed:run'); if ($env ?: $this->hasOption('environment')) { $command += array('-e' => $env ?: $this->getOption('environment')); } if ($this->hasOption('configuration')) { $command += array('-c' => $this->getOption('configuration')); } if ($this->hasOption('parser')) { $command += array('-p' => $this->getOption('parser')); } if ($target) { $command += array('-t' => $target); } if ($seed) { $seed = (array) $seed; $command += array('-s' => $seed); } return $this->executeRun($command); } /** * Returns the output from running the "rollback" command. * @param string $env environment name (optional) * @param mixed $target target version, or 0 (zero) fully revert (optional) * @return string */ public function getRollback($env = null, $target = null) { $command = array('rollback'); if ($env ?: $this->hasOption('environment')) { $command += array('-e' => $env ?: $this->getOption('environment')); } if ($this->hasOption('configuration')) { $command += array('-c' => $this->getOption('configuration')); } if ($this->hasOption('parser')) { $command += array('-p' => $this->getOption('parser')); } if (isset($target)) { // Need to use isset() with rollback, because -t0 is a valid option! // See http://docs.phinx.org/en/latest/commands.html#the-rollback-command $command += array('-t' => $target); } return $this->executeRun($command); } /** * Check option from options array * * @param string $key * @return bool */ protected function hasOption($key) { return isset($this->options[$key]); } /** * Get option from options array * * @param string $key * @return string|null */ protected function getOption($key) { if (!isset($this->options[$key])) { return null; } return $this->options[$key]; } /** * Set option in options array * * @param string $key * @param string $value * @return object */ public function setOption($key, $value) { $this->options[$key] = $value; return $this; } /** * Execute a command, capturing output and storing the exit code. * * @param array $command * @return string */ protected function executeRun(array $command) { // Output will be written to a temporary stream, so that it can be // collected after running the command. $stream = fopen('php://temp', 'w+'); // Execute the command, capturing the output in the temporary stream // and storing the exit code for debugging purposes. $this->exit_code = $this->app->doRun(new ArrayInput($command), new StreamOutput($stream)); // Get the output of the command and close the stream, which will // destroy the temporary file. $result = stream_get_contents($stream, -1, 0); fclose($stream); return $result; } }