D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
opt
/
psa
/
admin
/
plib
/
modules
/
wp-toolkit
/
vendor
/
robmorgan
/
phinx
/
src
/
Phinx
/
Wrapper
/
Filename :
TextWrapper.php
back
Copy
<?php /** * MIT License * For full license information, please view the LICENSE file that was distributed with this source code. */ namespace WPToolkitDependenciesIsolationPrefix\Phinx\Wrapper; use WPToolkitDependenciesIsolationPrefix\Phinx\Console\PhinxApplication; use WPToolkitDependenciesIsolationPrefix\Symfony\Component\Console\Input\ArrayInput; use WPToolkitDependenciesIsolationPrefix\Symfony\Component\Console\Output\StreamOutput; /** * Phinx text wrapper: a way to run `status`, `migrate`, and `rollback` commands * and get the output of the command back as plain text. * * @author Woody Gilk <woody.gilk@gmail.com> */ class TextWrapper { /** * @var \Phinx\Console\PhinxApplication */ protected $app; /** * @var array<string, mixed> */ protected $options; /** * @var int */ protected $exitCode; /** * @param \Phinx\Console\PhinxApplication $app Application * @param array<string, mixed> $options Options */ public function __construct(PhinxApplication $app, array $options = []) { $this->app = $app; $this->options = $options; } /** * Get the application instance. * * @return \Phinx\Console\PhinxApplication */ public function getApp() : PhinxApplication { return $this->app; } /** * Returns the exit code from the last run command. * * @return int */ public function getExitCode() : int { return $this->exitCode; } /** * Returns the output from running the "status" command. * * @param string|null $env environment name (optional) * @return string */ public function getStatus(?string $env = null) : string { $command = ['status']; if ($this->hasEnvValue($env)) { $command['-e'] = $env ?: $this->getOption('environment'); } if ($this->hasOption('configuration')) { $command['-c'] = $this->getOption('configuration'); } if ($this->hasOption('parser')) { $command['-p'] = $this->getOption('parser'); } if ($this->hasOption('format')) { $command['-f'] = $this->getOption('format'); } return $this->executeRun($command); } /** * @param string|null $env environment name * @return bool */ private function hasEnvValue($env) : bool { return $env || $this->hasOption('environment'); } /** * Returns the output from running the "migrate" command. * * @param string|null $env environment name (optional) * @param string|null $target target version (optional) * @return string */ public function getMigrate(?string $env = null, ?string $target = null) : string { $command = ['migrate']; if ($this->hasEnvValue($env)) { $command += ['-e' => $env ?: $this->getOption('environment')]; } if ($this->hasOption('configuration')) { $command += ['-c' => $this->getOption('configuration')]; } if ($this->hasOption('parser')) { $command += ['-p' => $this->getOption('parser')]; } if ($target) { $command += ['-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 string[]|string|null $seed Array of seed names or seed name * @return string */ public function getSeed(?string $env = null, ?string $target = null, $seed = null) : string { $command = ['seed:run']; if ($this->hasEnvValue($env)) { $command += ['-e' => $env ?: $this->getOption('environment')]; } if ($this->hasOption('configuration')) { $command += ['-c' => $this->getOption('configuration')]; } if ($this->hasOption('parser')) { $command += ['-p' => $this->getOption('parser')]; } if ($target) { $command += ['-t' => $target]; } if ($seed) { $seed = (array) $seed; $command += ['-s' => $seed]; } return $this->executeRun($command); } /** * Returns the output from running the "rollback" command. * * @param string|null $env Environment name (optional) * @param mixed $target Target version, or 0 (zero) fully revert (optional) * @return string */ public function getRollback(?string $env = null, $target = null) : string { $command = ['rollback']; if ($this->hasEnvValue($env)) { $command += ['-e' => $env ?: $this->getOption('environment')]; } if ($this->hasOption('configuration')) { $command += ['-c' => $this->getOption('configuration')]; } if ($this->hasOption('parser')) { $command += ['-p' => $this->getOption('parser')]; } if (isset($target)) { // Need to use isset() with rollback, because -t0 is a valid option! // See https://book.cakephp.org/phinx/0/en/commands.html#the-rollback-command $command += ['-t' => $target]; } return $this->executeRun($command); } /** * Check option from options array * * @param string $key Key * @return bool */ protected function hasOption(string $key) : bool { return isset($this->options[$key]); } /** * Get option from options array * * @param string $key Key * @return string|null */ protected function getOption(string $key) : ?string { if (!isset($this->options[$key])) { return null; } return $this->options[$key]; } /** * Set option in options array * * @param string $key Key * @param string $value Value * @return $this */ public function setOption(string $key, string $value) { $this->options[$key] = $value; return $this; } /** * Execute a command, capturing output and storing the exit code. * * @param array $command Command * @return string */ protected function executeRun(array $command) : string { // 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->exitCode = $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; } }