1. sfPluginPublishAssetsTask.class.php
  2. /** * Publishes Web Assets for Core and third party plugins * * @package symfony * @subpackage task * @author Fabian Lange * @version SVN: $Id: sfPluginPublishAssetsTask.class.php 23922 2009-11-14 14:58:38Z fabien $ */
  3. class sfPluginPublishAssetsTask extends sfPluginBaseTask
  4. {
  5. /**
  6. * @see sfTask
  7. */
  8. protected function configure()
  9. {
  10. $this->addArguments(array(
  11. new sfCommandArgument('plugins', sfCommandArgument::OPTIONAL | sfCommandArgument::IS_ARRAY, 'Publish this plugin\'s assets'),
  12. ));
  13. $this->addOptions(array(
  14. new sfCommandOption('core-only', '', sfCommandOption::PARAMETER_NONE, 'If set only core plugins will publish their assets'),
  15. ));
  16. $this->namespace = 'plugin';
  17. $this->name = 'publish-assets';
  18. $this->briefDescription = 'Publishes web assets for all plugins';
  19. $this->detailedDescription = <<<EOF
  20. The [plugin:publish-assets|INFO] task will publish web assets from all plugins.
  21. [./symfony plugin:publish-assets|INFO]
  22. In fact this will send the [plugin.post_install|INFO] event to each plugin.
  23. You can specify which plugin or plugins should install their assets by passing
  24. those plugins' names as arguments:
  25. [./symfony plugin:publish-assets sfDoctrinePlugin|INFO]
  26. EOF;
  27. }
  28. /**
  29. * @see sfTask
  30. */
  31. protected function execute($arguments = array(), $options = array())
  32. {
  33. $enabledPlugins = $this->configuration->getPlugins();
  34. if ($diff = array_diff($arguments['plugins'], $enabledPlugins))
  35. {
  36. throw new InvalidArgumentException('Plugin(s) not found: '.join(', ', $diff));
  37. }
  38. if ($options['core-only'])
  39. {
  40. $corePlugins = sfFinder::type('dir')->relative()->maxdepth(0)->in($this->configuration->getSymfonyLibDir().'/plugins');
  41. $arguments['plugins'] = array_unique(array_merge($arguments['plugins'], array_intersect($enabledPlugins, $corePlugins)));
  42. }
  43. else if (!count($arguments['plugins']))
  44. {
  45. $arguments['plugins'] = $enabledPlugins;
  46. }
  47. foreach ($arguments['plugins'] as $plugin)
  48. {
  49. $pluginConfiguration = $this->configuration->getPluginConfiguration($plugin);
  50. $this->logSection('plugin', 'Configuring plugin - '.$plugin);
  51. $this->installPluginAssets($plugin, $pluginConfiguration->getRootDir());
  52. }
  53. }
  54. /**
  55. * Installs web content for a plugin.
  56. *
  57. * @param string $plugin The plugin name
  58. * @param string $dir The plugin directory
  59. */
  60. protected function installPluginAssets($plugin, $dir)
  61. {
  62. $webDir = $dir.DIRECTORY_SEPARATOR.'web';
  63. if (is_dir($webDir))
  64. {
  65. $this->getFilesystem()->relativeSymlink($webDir, sfConfig::get('sf_web_dir').DIRECTORY_SEPARATOR.$plugin, true);
  66. }
  67. }
  68. }

Debug toolbar