* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Mage; use Mage\Command\AbstractCommand; use Mage\Runtime\Runtime; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Finder\Finder; use Symfony\Component\Finder\SplFileInfo; use Monolog\Logger; use Monolog\Handler\StreamHandler; use Symfony\Component\Console\Application; use Symfony\Component\Yaml\Yaml; use Mage\Runtime\Exception\RuntimeException; /** * The Console Application for launching the Mage command in a standalone instance * * @author Andrés Montañez */ class MageApplication extends Application { protected $runtime; /** * Configure the Magallanes Application * * @param $file string The YAML file from which to read the configuration * * @throws RuntimeException */ public function configure($file) { if (!file_exists($file) || !is_readable($file)) { throw new RuntimeException(sprintf('The file "%s" does not exists or is not readable.', $file)); } $config = Yaml::parse(file_get_contents($file)); if (array_key_exists('magephp', $config)) { $config = $config['magephp']; $logger = null; if (array_key_exists('log_dir', $config) && file_exists($config['log_dir']) && is_dir($config['log_dir'])) { $logfile = sprintf('%s/%s.log', $config['log_dir'], date('Ymd_His')); $config['log_file'] = $logfile; $logger = new Logger('magephp'); $logger->pushHandler(new StreamHandler($logfile)); } $this->runtime = new Runtime(); $this->runtime->setConfiguration($config); $this->runtime->setLogger($logger); } else { throw new RuntimeException(sprintf('The file "%s" does not have a valid Magallanes configuration.', $file)); } } /** * Run the Application * * @param InputInterface $input * @param OutputInterface $output * @throws RuntimeException */ public function run(InputInterface $input = null, OutputInterface $output = null) { $this->loadBuiltInCommands(); parent::run(); } /** * Loads the BuiltIn Commands */ protected function loadBuiltInCommands() { $finder = new Finder(); $finder->files()->in(__DIR__ . '/Command/BuiltIn')->name('*Command.php'); /** @var SplFileInfo $file */ foreach ($finder as $file) { $class = substr('\\Mage\\Command\\BuiltIn\\' . str_replace('/', '\\', $file->getRelativePathname()), 0, -4); if (class_exists($class)) { $command = new $class(); if ($command instanceof AbstractCommand) { $command->setRuntime($this->runtime); $this->add($command); } } } } }