<?php class isisBatchTask extends mySfTask { protected function configure() { $this->addArgument('rows', sfCommandArgument::OPTIONAL, 'Number of rows to process for each task'); $this->addOptions(array( new sfCommandOption('application', null, sfCommandOption::PARAMETER_REQUIRED, 'The application name'), new sfCommandOption('env', null, sfCommandOption::PARAMETER_REQUIRED, 'The environment', 'dev'), new sfCommandOption('connection', null, sfCommandOption::PARAMETER_REQUIRED, 'The connection name', 'doctrine'), new sfCommandOption('loglevel', 'l', sfCommandOption::PARAMETER_REQUIRED, 'Log level', 'info'), new sfCommandOption('database', 'd', sfCommandOption::PARAMETER_REQUIRED, 'Database', null), )); $this->namespace = 'isis'; $this->name = 'batch'; $this->briefDescription = 'Imports an ISIS database into the application, batch version'; $this->detailedDescription = <<<EOF The [isis:import|INFO] task imports an ISIS database into the application. This is the batch version and uses PNCTL to avoid memory exhaustion. Call it with: [php symfony isis:batch|INFO] EOF; } protected function execute($arguments = array(), $options = array()) { // Initialize the database connection. $databaseManager = new sfDatabaseManager($this->configuration); $connection = $databaseManager->getDatabase($options['connection'])->getConnection(); // Initialize an IsisConnector. $class = (class_exists('IsisImporterManager')) ? 'IsisImporterManager' : 'sfIsisImporterManager'; $isis = new $class($options['loglevel']); // Error handling. if ($isis == FALSE) { $this->logSection('isis', 'Error opening ISIS database.'); return FALSE; } $databases = $isis->databases($options['database']); foreach ($databases as $database) { $rows = (isset($arguments['rows'])) ? $argument['rows'] : 100; $max = $isis->info($this, 'task', $database); for ($offset = 0; $offset <= $max; $offset = $offset + $rows) { passthru("php symfony isis:import --database=$database --loglevel=". $options['loglevel'] ." $rows $offset"); } } } }