123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- <?php
- /*
- * This file is part of the symfony package.
- * (c) 2004-2006 Fabien Potencier <fabien.potencier@symfony-project.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
- /**
- * Base class for all symfony tasks.
- *
- * @package symfony
- * @subpackage task
- * @author Fabien Potencier <fabien.potencier@symfony-project.com>
- * @version SVN: $Id: sfBaseTask.class.php 16558 2009-03-24 18:17:58Z Kris.Wallsmith $
- */
- abstract class sfBaseTask extends sfCommandApplicationTask
- {
- protected
- $configuration = null;
- /**
- * @see sfTask
- */
- protected function doRun(sfCommandManager $commandManager, $options)
- {
- $event = $this->dispatcher->filter(new sfEvent($this, 'command.filter_options', array('command_manager' => $commandManager)), $options);
- $options = $event->getReturnValue();
- $this->process($commandManager, $options);
- $event = new sfEvent($this, 'command.pre_command', array('arguments' => $commandManager->getArgumentValues(), 'options' => $commandManager->getOptionValues()));
- $this->dispatcher->notifyUntil($event);
- if ($event->isProcessed())
- {
- return $event->getReturnValue();
- }
- $this->checkProjectExists();
- $application = $commandManager->getArgumentSet()->hasArgument('application') ? $commandManager->getArgumentValue('application') : null;
- $env = $commandManager->getOptionSet()->hasOption('env') ? $commandManager->getOptionValue('env') : 'test';
- if (!is_null($application))
- {
- $this->checkAppExists($application);
- require_once sfConfig::get('sf_config_dir').'/ProjectConfiguration.class.php';
- $this->configuration = ProjectConfiguration::getApplicationConfiguration($application, $env, true, null, $this->dispatcher);
- }
- else
- {
- if (file_exists(sfConfig::get('sf_config_dir').'/ProjectConfiguration.class.php'))
- {
- require_once sfConfig::get('sf_config_dir').'/ProjectConfiguration.class.php';
- $this->configuration = new ProjectConfiguration(null, $this->dispatcher);
- }
- else
- {
- $this->configuration = new sfProjectConfiguration(getcwd(), $this->dispatcher);
- }
- }
- $autoloader = sfSimpleAutoload::getInstance(sfConfig::get('sf_cache_dir').'/project_autoload.cache');
- foreach ($this->configuration->getModelDirs() as $dir)
- {
- $autoloader->addDirectory($dir);
- }
- if (!is_null($this->commandApplication) && !$this->commandApplication->withTrace())
- {
- sfConfig::set('sf_logging_enabled', false);
- }
- $ret = $this->execute($commandManager->getArgumentValues(), $commandManager->getOptionValues());
- $this->dispatcher->notify(new sfEvent($this, 'command.post_command'));
- return $ret;
- }
- /**
- * Returns the filesystem instance.
- *
- * @return sfFilesystem A sfFilesystem instance
- */
- public function getFilesystem()
- {
- if (!isset($this->filesystem))
- {
- if (is_null($this->commandApplication) || $this->commandApplication->isVerbose())
- {
- $this->filesystem = new sfFilesystem($this->dispatcher, $this->formatter);
- }
- else
- {
- $this->filesystem = new sfFilesystem();
- }
- }
- return $this->filesystem;
- }
- /**
- * Checks if the current directory is a symfony project directory.
- *
- * @return true if the current directory is a symfony project directory, false otherwise
- */
- public function checkProjectExists()
- {
- if (!file_exists('symfony'))
- {
- throw new sfException('You must be in a symfony project directory.');
- }
- }
- /**
- * Checks if an application exists.
- *
- * @param string $app The application name
- *
- * @return bool true if the application exists, false otherwise
- */
- public function checkAppExists($app)
- {
- if (!is_dir(sfConfig::get('sf_apps_dir').'/'.$app))
- {
- throw new sfException(sprintf('Application "%s" does not exist', $app));
- }
- }
- /**
- * Checks if a module exists.
- *
- * @param string $app The application name
- * @param string $module The module name
- *
- * @return bool true if the module exists, false otherwise
- */
- public function checkModuleExists($app, $module)
- {
- if (!is_dir(sfConfig::get('sf_apps_dir').'/'.$app.'/modules/'.$module))
- {
- throw new sfException(sprintf('Module "%s/%s" does not exist.', $app, $module));
- }
- }
- }
|