Seditio Source
Root |
./othercms/croogo-4.0.7/vendor/cakephp/migrations/src/Command/Dump.php
<?php
/**
 * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
 *
 * Licensed under The MIT License
 * Redistributions of files must retain the above copyright notice.
 *
 * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
 * @link          http://cakephp.org CakePHP(tm) Project
 * @license       http://www.opensource.org/licenses/mit-license.php MIT License
 */
namespace Migrations\Command;

use
Cake\Datasource\ConnectionManager;
use
Migrations\ConfigurationTrait;
use
Migrations\TableFinderTrait;
use
Phinx\Console\Command\AbstractCommand;
use
Symfony\Component\Console\Input\InputInterface;
use
Symfony\Component\Console\Input\InputOption;
use
Symfony\Component\Console\Output\OutputInterface;

/**
 * Dump command class.
 * A "dump" is a snapshot of a database at a given point in time. It is stored in a
 * .lock file in the same folder as migrations files.
 */
class Dump extends AbstractCommand
{
    use
CommandTrait;
    use
ConfigurationTrait;
    use
TableFinderTrait;

   
/**
     * Output object.
     *
     * @var \Symfony\Component\Console\Output\OutputInterface
     */
   
protected $output;

   
/**
     * {@inheritdoc}
     */
   
protected function configure()
    {
       
$this->setName('dump')
            ->
setDescription('Dumps the current schema of the database to be used while baking a diff')
            ->
setHelp(sprintf(
               
'%sDumps the current schema of the database to be used while baking a diff%s',
               
PHP_EOL,
               
PHP_EOL
           
))
            ->
addOption('plugin', 'p', InputOption::VALUE_REQUIRED, 'The plugin the file should be created for')
            ->
addOption('connection', 'c', InputOption::VALUE_REQUIRED, 'The datasource connection to use')
            ->
addOption('source', 's', InputOption::VALUE_REQUIRED, 'The folder where migrations are in');
    }

   
/**
     * @param \Symfony\Component\Console\Output\OutputInterface $output The output object.
     * @return mixed
     */
   
public function output(OutputInterface $output = null)
    {
        if (
$output !== null) {
           
$this->output = $output;
        }

        return
$this->output;
    }

   
/**
     * Dumps the current schema to be used when baking a diff
     *
     * @param \Symfony\Component\Console\Input\InputInterface $input the input object
     * @param \Symfony\Component\Console\Output\OutputInterface $output the output object
     * @return int
     */
   
protected function execute(InputInterface $input, OutputInterface $output)
    {
       
$this->setInput($input);
       
$this->bootstrap($input, $output);
       
$this->output($output);

       
$path = $this->getOperationsPath($input);
       
$connectionName = $input->getOption('connection') ?: 'default';
       
$connection = ConnectionManager::get($connectionName);
       
$collection = $connection->getSchemaCollection();

       
$options = [
           
'require-table' => false,
           
'plugin' => $this->getPlugin($input),
        ];
       
$tables = $this->getTablesToBake($collection, $options);

       
$dump = [];
        if (
$tables) {
            foreach (
$tables as $table) {
               
$schema = $collection->describe($table);
               
$dump[$table] = $schema;
            }
        }

       
$filePath = $path . DS . 'schema-dump-' . $connectionName . '.lock';
       
$output->writeln(sprintf('<info>Writing dump file `%s`...</info>', $filePath));
        if (
file_put_contents($filePath, serialize($dump))) {
           
$output->writeln(sprintf('<info>Dump file `%s` was successfully written</info>', $filePath));

            return
BaseCommand::CODE_SUCCESS;
        }

       
$output->writeln(sprintf(
           
'<error>An error occurred while writing dump file `%s`</error>',
           
$filePath
       
));

        return
BaseCommand::CODE_ERROR;
    }
}