Seditio Source
Root |
./othercms/croogo-4.0.7/vendor/cakephp/migrations/src/AbstractSeed.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;

use
Migrations\Command\Seed;
use
Phinx\Migration\Manager;
use
Phinx\Seed\AbstractSeed as BaseAbstractSeed;
use
Symfony\Component\Console\Input\ArgvInput;
use
Symfony\Component\Console\Input\InputInterface;

/**
 * Class AbstractSeed
 * Extends Phinx base AbstractSeed class in order to extend the features the seed class
 * offers.
 */
abstract class AbstractSeed extends BaseAbstractSeed
{

   
/**
     * InputInterface this Seed class is being used with.
     *
     * @var \Symfony\Component\Console\Input\InputInterface
     */
   
protected $input;

   
/**
     * Gives the ability to a seeder to call another seeder.
     * This is particularly useful if you need to run the seeders of your applications in a specific sequences,
     * for instance to respect foreign key constraints.
     *
     * @param string $seeder Name of the seeder to call from the current seed
     * @return void
     */
   
public function call($seeder)
    {
       
$this->getOutput()->writeln('');
       
$this->getOutput()->writeln(
           
' ====' .
           
' <info>' . $seeder . ':</info>' .
           
' <comment>seeding</comment>'
       
);

       
$start = microtime(true);
       
$this->runCall($seeder);
       
$end = microtime(true);

       
$this->getOutput()->writeln(
           
' ====' .
           
' <info>' . $seeder . ':</info>' .
           
' <comment>seeded' .
           
' ' . sprintf('%.4fs', $end - $start) . '</comment>'
       
);
       
$this->getOutput()->writeln('');
    }

   
/**
     * Calls another seeder from this seeder.
     * It will load the Seed class you are calling and run it.
     *
     * @param string $seeder Name of the seeder to call from the current seed
     * @return void
     */
   
protected function runCall($seeder)
    {
        list(
$pluginName, $seeder) = pluginSplit($seeder);

       
$argv = [
           
'seed',
           
'--seed',
           
$seeder,
        ];

       
$plugin = $pluginName ?: $this->input->getOption('plugin');
        if (
$plugin !== null) {
           
$argv[] = '--plugin';
           
$argv[] = $plugin;
        }

       
$connection = $this->input->getOption('connection');
        if (
$connection !== null) {
           
$argv[] = '--connection';
           
$argv[] = $connection;
        }

       
$source = $this->input->getOption('source');
        if (
$source !== null) {
           
$argv[] = '--source';
           
$argv[] = $source;
        }

       
$seedCommand = new Seed();
       
$input = new ArgvInput($argv, $seedCommand->getDefinition());
       
$seedCommand->setInput($input);
       
$config = $seedCommand->getConfig();

       
$seedPaths = $config->getSeedPaths();
        require_once(
array_pop($seedPaths) . DS . $seeder . '.php');
       
$seeder = new $seeder();
       
$seeder->setOutput($this->getOutput());
       
$seeder->setAdapter($this->getAdapter());
       
$seeder->setInput($this->input);
       
$seeder->run();
    }

   
/**
     * Sets the InputInterface this Seed class is being used with.
     *
     * @param InputInterface $input Input object.
     * @return void
     */
   
public function setInput(InputInterface $input)
    {
       
$this->input = $input;
    }
}