Files
Phraseanet/lib/Alchemy/Phrasea/Command/Plugin/ListPlugin.php

91 lines
2.7 KiB
PHP

<?php
/*
* This file is part of Phraseanet
*
* (c) 2005-2014 Alchemy
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Alchemy\Phrasea\Command\Plugin;
use Alchemy\Phrasea\Plugin\Plugin;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
class ListPlugin extends AbstractPluginCommand
{
public function __construct()
{
parent::__construct('plugins:list');
$this
->setDescription('Lists installed plugins')
->addOption('json', 'j', InputOption::VALUE_NONE, 'Output result in JSON');
}
protected function doExecutePluginAction(InputInterface $input, OutputInterface $output)
{
$plugins = array_map(function (Plugin $plugin) use ($input) {
if ($plugin->isErroneous()) {
return $this->formatErroneousPlugin($input, $plugin);
}
return $this->formatPlugin($input, $plugin);
}, $this->container['plugins.manager']->listPlugins());
if ($input->getOption('json')) {
$output->writeln(json_encode(array('plugins' => array_values($plugins))));
} else {
$table = $this->getHelperSet()->get('table');
$table
->setHeaders(array('Name', 'Version', 'Description'))
->setRows($plugins)
;
$table->render($output);
}
return 0;
}
private function formatPlugin(InputInterface $input, Plugin $plugin)
{
if ($input->getOption('json')) {
return array(
'name' => $plugin->getName(),
'version' => $plugin->getManifest()->getVersion(),
'description' => $plugin->getManifest()->getDescription(),
'error' => false,
);
}
return array(
$plugin->getName(),
$plugin->getManifest()->getVersion(),
$plugin->getManifest()->getDescription(),
);
}
private function formatErroneousPlugin(InputInterface $input, Plugin $plugin)
{
if ($input->getOption('json')) {
return array(
'name' => $plugin->getName(),
'error' => true,
'description' => 'Error : '.$plugin->getError()->getMessage(),
'version' => null,
);
}
return array(
'<error>' . $plugin->getName() . '</error>',
'<error>Error : ' . $plugin->getError()->getMessage() . '</error>',
'',
);
}
}