Updating vendors + files from 1.10

skala
Julio Montoya 13 years ago
parent ed50c47195
commit 261ca3114d
  1. 99
      main/inc/Entity/Role.php
  2. 1105
      main/inc/lib/agenda.lib.php
  3. 6
      main/template/default/admin/administrator/role/add.tpl
  4. 6
      main/template/default/admin/administrator/role/edit.tpl
  5. 8
      main/template/default/admin/administrator/role/list.tpl
  6. 6
      main/template/default/auth/login.tpl
  7. 143
      src/ChamiloLMS/Command/Translation/ExportLanguagesCommand.php
  8. 109
      src/ChamiloLMS/Controller/Admin/Administrator/RoleController.php
  9. 294
      src/ChamiloLMS/Controller/BaseController.php
  10. 32
      src/ChamiloLMS/Form/RoleType.php
  11. 71
      src/ChamiloLMS/Provider/ReflectionControllerProvider.php
  12. 153
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Descriptor/ApplicationDescription.php
  13. 92
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Descriptor/Descriptor.php
  14. 30
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Descriptor/DescriptorInterface.php
  15. 129
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Descriptor/JsonDescriptor.php
  16. 129
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Descriptor/MarkdownDescriptor.php
  17. 210
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Descriptor/TextDescriptor.php
  18. 212
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Descriptor/XmlDescriptor.php
  19. 67
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Event/ConsoleExceptionEvent.php
  20. 95
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Helper/DescriptorHelper.php
  21. 98
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Descriptor/AbstractDescriptorTest.php
  22. 27
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Descriptor/JsonDescriptorTest.php
  23. 27
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Descriptor/MarkdownDescriptorTest.php
  24. 75
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Descriptor/ObjectsProvider.php
  25. 27
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Descriptor/TextDescriptorTest.php
  26. 27
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Descriptor/XmlDescriptorTest.php
  27. 18
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/DescriptorApplication1.php
  28. 24
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/DescriptorApplication2.php
  29. 27
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/DescriptorCommand1.php
  30. 30
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/DescriptorCommand2.php
  31. 1
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_1.json
  32. 199
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_1.md
  33. 17
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_1.txt
  34. 104
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_1.xml
  35. 1
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_2.json
  36. 388
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_2.md
  37. 22
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_2.txt
  38. 181
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/application_2.xml
  39. 1
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/command_1.json
  40. 8
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/command_1.md
  41. 7
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/command_1.txt
  42. 12
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/command_1.xml
  43. 1
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/command_2.json
  44. 30
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/command_2.md
  45. 11
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/command_2.txt
  46. 18
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/command_2.xml
  47. 1
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_argument_1.json
  48. 7
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_argument_1.md
  49. 1
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_argument_1.txt
  50. 5
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_argument_1.xml
  51. 1
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_argument_2.json
  52. 7
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_argument_2.md
  53. 1
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_argument_2.txt
  54. 5
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_argument_2.xml
  55. 1
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_argument_3.json
  56. 7
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_argument_3.md
  57. 1
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_argument_3.txt
  58. 7
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_argument_3.xml
  59. 1
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_definition_1.json
  60. 0
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_definition_1.md
  61. 0
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_definition_1.txt
  62. 5
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_definition_1.xml
  63. 1
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_definition_2.json
  64. 9
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_definition_2.md
  65. 2
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_definition_2.txt
  66. 10
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_definition_2.xml
  67. 1
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_definition_3.json
  68. 11
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_definition_3.md
  69. 2
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_definition_3.txt
  70. 9
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_definition_3.xml
  71. 1
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_definition_4.json
  72. 21
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_definition_4.md
  73. 5
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_definition_4.txt
  74. 14
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_definition_4.xml
  75. 1
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_option_1.json
  76. 9
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_option_1.md
  77. 1
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_option_1.txt
  78. 4
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_option_1.xml
  79. 1
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_option_2.json
  80. 9
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_option_2.md
  81. 1
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_option_2.txt
  82. 7
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_option_2.xml
  83. 1
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_option_3.json
  84. 9
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_option_3.md
  85. 1
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_option_3.txt
  86. 5
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_option_3.xml
  87. 1
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_option_4.json
  88. 9
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_option_4.md
  89. 1
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_option_4.txt
  90. 5
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Fixtures/input_option_4.xml
  91. 136
      vendor/chamilo/chash/vendor/symfony/console/Symfony/Component/Console/Tests/Helper/HelperSetTest.php
  92. 12
      vendor/igorw/config-service-provider/.travis.yml
  93. 42
      vendor/igorw/config-service-provider/CHANGELOG.md
  94. 37
      vendor/igorw/config-service-provider/src/Igorw/Silex/ChainConfigDriver.php
  95. 9
      vendor/igorw/config-service-provider/src/Igorw/Silex/ConfigDriver.php
  96. 43
      vendor/igorw/config-service-provider/src/Igorw/Silex/JsonConfigDriver.php
  97. 18
      vendor/igorw/config-service-provider/src/Igorw/Silex/PhpConfigDriver.php
  98. 23
      vendor/igorw/config-service-provider/src/Igorw/Silex/TomlConfigDriver.php
  99. 22
      vendor/igorw/config-service-provider/src/Igorw/Silex/YamlConfigDriver.php
  100. 204
      vendor/igorw/config-service-provider/tests/integration/ConfigServiceProviderTest.php
  101. Some files were not shown because too many files have changed in this diff Show More

@ -0,0 +1,99 @@
<?php
namespace Entity;
use Symfony\Component\Security\Core\Role\Role as SymfonyRole;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Table(name="roles")
* @ORM\Entity()
*/
class Role extends SymfonyRole
{
/**
* @ORM\Column(name="id", type="integer")
* @ORM\Id()
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column(name="name", type="string", length=255)
*/
private $name;
/**
* @ORM\Column(name="role", type="string", length=255, unique=true)
*/
private $role;
/**
* @ORM\ManyToMany(targetEntity="User", mappedBy="roles")
* @ORM\JoinTable(name="users_roles",
* joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="user_id")})
*/
private $users;
public function __construct()
{
$this->users = new ArrayCollection();
}
/**
* @see RoleInterface
*/
public function getRole()
{
return $this->role;
}
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set name
*
* @param string $name
* @return Role
*/
public function setName($name)
{
$this->name = $name;
return $this;
}
/**
* Get name
*
* @return string
*/
public function getName()
{
return $this->name;
}
/**
* Set name
*
* @param string $name
* @return Role
*/
public function setRole($name)
{
$this->name = $name;
return $this;
}
}

File diff suppressed because it is too large Load Diff

@ -0,0 +1,6 @@
{% extends app.template_style ~ "/layout/layout_1_col.tpl" %}
{% block content %}
<form action="{{ path('admin_administrator_roles_add')}}" method="post" {{ form_enctype(form) }}>
{{ form_widget(form) }}
</form>
{% endblock %}

@ -0,0 +1,6 @@
{% extends app.template_style ~ "/layout/layout_1_col.tpl" %}
{% block content %}
<form action="{{ path('admin_administrator_roles_edit')}}" method="post" {{ form_enctype(form) }}>
{{ form_widget(form) }}
</form>
{% endblock %}

@ -0,0 +1,8 @@
{% extends app.template_style ~ "/layout/layout_1_col.tpl" %}
{% block content %}
{% for item in items %}
{{ item.name }} - {{ item.role}} <a class="btn" href="{{ url('admin_administrator_roles_edit', { id: item.id }) }}"> Edit</a>
<br />
{% endfor %}
{% endblock %}

@ -0,0 +1,6 @@
<form action="{{ path('check-login') }}" method="post">
{{ error }}
<input type="text" name="username" />
<input type="password" name="password" value="" />
<input type="submit" />
</form>

@ -0,0 +1,143 @@
<?php
/* For licensing terms, see /license.txt */
namespace ChamiloLMS\Command\Translation;
use Symfony\Component\Console\Input\ArrayInput;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Finder\Finder;
/**
* Class ExportLanguagesCommand
* @package ChamiloLMS\Command\Translation
*/
class ExportLanguagesCommand extends Command
{
/**
*
*/
protected function configure()
{
$this
->setName('translation:export_to_gettext')
->setDescription('Export chamilo translations to po files');
//->addArgument('theme', InputArgument::OPTIONAL, 'The theme to dump, if none is set then all themes will be generated', null);
}
/**
* @param Console\Input\InputInterface $input
* @param Console\Output\OutputInterface $output
* @return int|null|void
*/
protected function execute(Console\Input\InputInterface $input, Console\Output\OutputInterface $output)
{
$languageList = array('english', 'spanish', 'french');
//$languageList = array('spanish');
foreach ($languageList as $lang) {
$output->writeln("<info>Generating lang po files for: $lang</info>");
$this->convertLanguageToGettext($lang, $output);
}
}
/**
* @param string $destinationLanguage chamilo language 'spanish', 'french', etc
* @param $output
*/
private function convertLanguageToGettext($destinationLanguage, Console\Output\OutputInterface $output)
{
/** @var \Silex\Application $app */
$app = $this->getApplication()->getSilexApplication();
$tempPath = $app['paths']['sys_temp_path'].'langs';
if (!is_dir($tempPath)) {
mkdir($tempPath);
$output->writeln('<info>folder $tempPath created </info>');
}
$isocode = api_get_language_isocode($destinationLanguage);
$englishPath = $app['paths']['root_sys'].'main/lang/english/';
// Translate this language.
$toLanguagePath = $app['paths']['root_sys'].'main/lang/'.$destinationLanguage;
if (is_dir($englishPath)) {
if ($dh = opendir($englishPath)) {
while (($file = readdir($dh)) !== false) {
$info = pathinfo($file);
if ($info['extension'] != 'php') {
continue;
}
$info['filename'] = explode('.', $info['filename']);
$info['filename'] = $info['filename'][0];
if ($info['filename'] != 'admin') {
//continue;
}
$translations = array();
$filename = $englishPath.'/'.$file;
$po = file($filename);
if (!file_exists($filename) || !file_exists($toLanguagePath.'/'.$file)) {
continue;
}
foreach ($po as $line) {
$pos = strpos($line, '=');
if ($pos) {
$variable = (substr($line, 1, $pos-1));
$variable = trim($variable);
require $filename;
$my_variable_in_english = $$variable;
require $toLanguagePath.'/'.$file;
$my_variable = $$variable;
/** This fixes a notice due an array in the lang files */
if (strpos($variable, 'langNameOfLang') === false) {
$translations[] = array(
'msgid' => $variable,
'msgstr' => $my_variable
);
} else {
continue;
}
}
}
//var_dump($translations);
if (!is_dir($tempPath.'/'.$info['filename'])) {
mkdir($tempPath.'/'.$info['filename']);
$output->writeln('<info>folder '.$tempPath.'/'.$info['filename'].' created </info>');
}
$new_po_file = $tempPath.'/'.$info['filename'].'/'.$isocode.'.po';
$fp = fopen($new_po_file, 'w');
$header = 'msgid ""'."\n".'msgstr ""'."\n".'"Content-Type: text/plain; charset=utf-8 \n"';
fwrite($fp, $header);
fwrite($fp, "\n\n");
foreach ($translations as $item) {
$line = 'msgid "'.addslashes($item['msgid']).'"'."\n";
$translated = $item['msgstr'];
$translated = addslashes($translated);
$translated = str_replace(array("\\'"), "'", $translated);
$line .= 'msgstr "'.$translated.'"'."\n\n";
fwrite($fp, $line);
}
fclose($fp);
$message = "File $file converted to ".$new_po_file;
$output->writeln($message);
}
closedir($dh);
}
}
}
}

@ -0,0 +1,109 @@
<?php
/* For licensing terms, see /license.txt */
namespace ChamiloLMS\Controller\Admin\Administrator;
use ChamiloLMS\Controller\BaseController;
use Silex\Application;
use Symfony\Component\Form\Extension\Validator\Constraints\FormValidator;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Entity;
use ChamiloLMS\Form\RoleType;
/**
* Class RoleController
* @todo @route and @method function don't work yet
* @package ChamiloLMS\Controller
* @author Julio Montoya <gugli100@gmail.com>
*/
class RoleController extends BaseController
{
/**
*
* @param Application $app
* @Route("/")
* @Method({"GET"})
*/
public function indexAction()
{
$items = parent::listAction('array');
$template = $this->get('template');
$template->assign('items', $items);
$response = $template->render_template('admin/administrator/role/list.tpl');
return new Response($response, 200, array());
}
/**
*
* @Route("/{id}", requirements={"id" = "\d+"}, defaults={"foo" = "bar"})
* @Method({"GET"})
*/
public function readAction($id)
{
return parent::readAction($id);
}
public function editAction($id)
{
$roleRepo = $this->getRepository();
$role = $roleRepo->findOneById($id);
$form = $this->get('form.factory')->create(new RoleType(), $role);
$template = $this->get('template');
$template->assign('form', $form->createView());
$response = $template->render_template('admin/administrator/role/edit.tpl');
return new Response($response, 200, array());
}
public function addAction()
{
$form = $this->get('form.factory')->create(new RoleType());
$form->bind($this->getRequest());
if ($form->isValid()) {
$em = $this->get('orm.em');
$role = $form->getData();
$em->persist($role);
$em->flush();
$params = array('id' => $role->getId());
$url = $this->get('url_generator')->generate('admin_administrator_roles_read', $params);
return $this->redirect($url);
}
$template = $this->get('template');
$template->assign('form', $form->createView());
$response = $template->render_template('admin/administrator/role/add.tpl');
return new Response($response, 200, array());
}
/**
* @Route("", name="api_events_create")
* @Method({"POST"})
*/
public function createAction()
{
return parent::createAction();
}
/**
* @see BaseController::getRepository()
* @return EntityRepository
*/
protected function getRepository()
{
return $this->get('orm.em')->getRepository('Entity\Role');
}
/**
* @see BaseController::getNewEntity()
* @return Object
*/
protected function getNewEntity()
{
return new Entity\Role();
}
}

@ -0,0 +1,294 @@
<?php
/* For licensing terms, see /license.txt */
namespace ChamiloLMS\Controller;
use Symfony\Component\HttpFoundation\JsonResponse;
use Doctrine\ORM\Query;
use Doctrine\ORM\NoResultException;
use Silex\Application;
/**
* Each entity controller must extends this class.
*
* @abstract
*/
abstract class BaseController
{
protected $app;
/**
* @param $app
*/
public function __construct($app)
{
$this->app = $app;
}
public function getRequest()
{
return $this->get('request');
}
public function redirect($redirect)
{
return $this->app->redirect($redirect);
}
/**
* @param string $item
* @return mixed
*/
public function get($item)
{
return $this->app[$item];
}
/**
* This method should return the entity's repository.
*
* @abstract
* @return EntityRepository
*/
abstract protected function getRepository();
/**
* This method should return a new entity instance to be used for the "create" action.
*
* @abstract
* @return Object
*/
abstract protected function getNewEntity();
/**
* Base "list" action.
*
* @return JsonResponse
*/
protected function listAction($format = 'json')
{
return $this->getList($format);
}
protected function getList($format = 'json')
{
$list = $this->getRepository()
->createQueryBuilder('e')
->getQuery()->getResult(Query::HYDRATE_ARRAY);
switch ($format) {
case 'json':
return new JsonResponse($list);
break;
default:
return $list;
break;
}
}
/**
* Base "read" action.
*
* @param int $id
* @return JsonResponse|NotFoundHttpException
*/
protected function readAction($id)
{
$entityInstance = $this->getEntityForJson($id);
if (false === $entityInstance) {
return $this->createNotFoundException();
}
return new JsonResponse($entityInstance);
}
/**
* Base "create" action.
*
* @return JsonResponse|NotFoundHttpException
*/
protected function createAction()
{
$json = $this->getDataFromRequest();
$object = $this->updateEntity($this->getNewEntity(), $json);
if (false === $object) {
throw new \Exception('Unable to create the entity');
}
$em = $this->getDoctrine()->getManager();
$em->persist($object);
$em->flush();
return new JsonResponse($this->getEntityForJson($object->getId()));
}
/**
* Base "create" action.
*
* @return JsonResponse|NotFoundHttpException
*/
protected function createJsonAction()
{
$json = $this->getDataFromRequest();
if (false === $json) {
throw new \Exception('Invalid JSON');
}
$object = $this->updateEntity($this->getNewEntity(), $json);
if (false === $object) {
throw new \Exception('Unable to create the entity');
}
$em = $this->getDoctrine()->getManager();
$em->persist($object);
$em->flush();
return new JsonResponse($this->getEntityForJson($object->getId()));
}
/**
* Base "upload" action.
*
* @return JsonResponse|NotFoundHttpException
*/
protected function updateAction($id)
{
$object = $this->getEntity($id);
if (false === $object) {
return $this->createNotFoundException();
}
$json = $this->getDataFromRequest();
if (false === $json) {
throw new \Exception('Invalid JSON');
}
if (false === $this->updateEntity($object, $json)) {
throw new \Exception('Unable to update the entity');
}
$this->getDoctrine()->getManager()->flush($object);
return new JsonResponse($this->getEntityForJson($object->getId()));
}
/**
* Base "upload" action.
*
* @return JsonResponse|NotFoundHttpException
*/
protected function updateJsonAction($id)
{
$object = $this->getEntity($id);
if (false === $object) {
return $this->createNotFoundException();
}
$json = $this->getDataFromRequest();
if (false === $json) {
throw new \Exception('Invalid JSON');
}
if (false === $this->updateEntity($object, $json)) {
throw new \Exception('Unable to update the entity');
}
$this->getDoctrine()->getManager()->flush($object);
return new JsonResponse($this->getEntityForJson($object->getId()));
}
/**
* Base "delete" action.
*
* @return JsonResponse|NotFoundHttpException
*/
protected function deleteAction($id)
{
$object = $this->getEntity($id);
if (false === $object) {
return $this->createNotFoundException();
}
$em = $this->getDoctrine()->getManager();
$em->remove($object);
$em->flush();
return new JsonResponse(array());
}
/**
* Returns an entity from its ID, or FALSE in case of error.
*
* @param int $id
* @return Object|boolean
*/
protected function getEntity($id)
{
try {
return $this->getRepository()->find($id);
} catch (NoResultException $ex) {
return false;
}
return false;
}
/**
* Returns an entity from its ID as an associative array, or FALSE in case of error.
*
* @param int $id
* @return array|boolean
*/
protected function getEntityForJson($id)
{
try {
return $this->getRepository()->createQueryBuilder('e')
->where('e.id = :id')
->setParameter('id', $id)
->getQuery()->getSingleResult(Query::HYDRATE_ARRAY);
} catch (NoResultException $ex) {
return false;
}
return false;
}
/**
* Returns the request's JSON content, or FALSE in case of error.
*
* @return string|boolean
*/
protected function getDataFromRequest()
{
$data = $this->get("request")->getContent();
if (!$data) {
return false;
}
return $data;
}
/**
* Updates an entity with data from a JSON string.
* Returns the entity, or FALSE in case of error.
*
* @param Object $entity
* @param string $json
* @return Object|boolean
*/
protected function updateEntity($entity, $json)
{
$data = json_decode($json);
if ($data == null) {
return false;
}
foreach ($data as $name => $value) {
if ($name != 'id') {
$setter = 'set'.ucfirst($name);
if (method_exists($entity, $setter)) {
call_user_func_array(array($entity, $setter), array($value));
}
}
}
return $entity;
}
}

@ -0,0 +1,32 @@
<?php
namespace ChamiloLMS\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use Entity;
class RoleType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
//$role = new Entity\Role();
$builder->add('name', 'text');
$builder->add('role', 'text');
$builder->add('submit', 'submit');
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Entity\Role'
));
}
public function getName()
{
return 'role';
}
}

@ -0,0 +1,71 @@
<?php
namespace ChamiloLMS\Provider;
use Silex\Application;
use Silex\ControllerProviderInterface;
use Symfony\Component\Routing\Loader\AnnotationFileLoader;
use Symfony\Component\Routing\Loader\AnnotationClassLoader;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\Routing\Annotation\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Sensio\Bundle\FrameworkExtraBundle\Routing\AnnotatedRouteControllerLoader;
use Doctrine\Common\Annotations\AnnotationReader;
class ReflectionControllerProvider implements ControllerProviderInterface
{
private $controllerName;
function __construct($controllerName)
{
$this->controllerName = $controllerName;
}
function connect(Application $app)
{
/** @var \Silex\ControllerCollection $controllers */
$controllers = $app['controllers_factory'];
//$reflection = new \ReflectionClass($this->class);
$reflection = new \ReflectionClass($app[$this->controllerName]);
$annotationReader = new AnnotationReader();
//$classAnnotations = $annotationReader->getClassAnnotations($reflection);
$routeAnnotation = new Route(array());
$methodAnnotation = new Method(array());
$methods = $reflection->getMethods(\ReflectionMethod::IS_PUBLIC);
foreach ($methods as $method) {
$methodName = $method->getName();
if (in_array($methodName, array('__construct'))) {
continue;
}
/** @var Route $routeObject */
$routeObject = $annotationReader->getMethodAnnotation($method, $routeAnnotation);
/** @var Method $routeObject */
$methodObject = $annotationReader->getMethodAnnotation($method, $methodAnnotation);
$methodsToString = 'GET';
if ($methodObject) {
$methodsToString = implode('|', $methodObject->getMethods());
}
$controllers->match($routeObject->getPath(), $this->controllerName.':'.$methodName, $methodsToString);
}
return $controllers;
}
private function adjustPath($path)
{
$path = lcfirst($path);
$path = ('index' === $path) ? '' : $path;
$path = '/'.$path;
return $path;
}
}

@ -0,0 +1,153 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\Console\Descriptor;
use Symfony\Component\Console\Application;
use Symfony\Component\Console\Command\Command;
/**
* @author Jean-François Simon <jeanfrancois.simon@sensiolabs.com>
*/
class ApplicationDescription
{
const GLOBAL_NAMESPACE = '_global';
/**
* @var Application
*/
private $application;
/**
* @var null|string
*/
private $namespace;
/**
* @var array
*/
private $namespaces;
/**
* @var Command[]
*/
private $commands;
/**
* @var Command[]
*/
private $aliases;
/**
* Constructor.
*
* @param Application $application
* @param string|null $namespace
*/
public function __construct(Application $application, $namespace = null)
{
$this->application = $application;
$this->namespace = $namespace;
}
/**
* @return array
*/
public function getNamespaces()
{
if (null === $this->namespaces) {
$this->inspectApplication();
}
return $this->namespaces;
}
/**
* @return Command[]
*/
public function getCommands()
{
if (null === $this->commands) {
$this->inspectApplication();
}
return $this->commands;
}
/**
* @param string $name
*
* @return Command
*
* @throws \InvalidArgumentException
*/
public function getCommand($name)
{
if (!isset($this->commands[$name]) && !isset($this->aliases[$name])) {
throw new \InvalidArgumentException(sprintf('Command %s does not exist.', $name));
}
return isset($this->commands[$name]) ? $this->commands[$name] : $this->aliases[$name];
}
private function inspectApplication()
{
$this->commands = array();
$this->namespaces = array();
$all = $this->application->all($this->namespace ? $this->application->findNamespace($this->namespace) : null);
foreach ($this->sortCommands($all) as $namespace => $commands) {
$names = array();
/** @var Command $command */
foreach ($commands as $name => $command) {
if (!$command->getName()) {
continue;
}
if ($command->getName() === $name) {
$this->commands[$name] = $command;
} else {
$this->aliases[$name] = $command;
}
$names[] = $name;
}
$this->namespaces[$namespace] = array('id' => $namespace, 'commands' => $names);
}
}
/**
* @param array $commands
*
* @return array
*/
private function sortCommands(array $commands)
{
$namespacedCommands = array();
foreach ($commands as $name => $command) {
$key = $this->application->extractNamespace($name, 1);
if (!$key) {
$key = '_global';
}
$namespacedCommands[$key][$name] = $command;
}
ksort($namespacedCommands);
foreach ($namespacedCommands as &$commands) {
ksort($commands);
}
return $namespacedCommands;
}
}

@ -0,0 +1,92 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\Console\Descriptor;
use Symfony\Component\Console\Application;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputDefinition;
use Symfony\Component\Console\Input\InputOption;
/**
* @author Jean-François Simon <jeanfrancois.simon@sensiolabs.com>
*/
abstract class Descriptor implements DescriptorInterface
{
public function describe($object, array $options = array())
{
switch (true) {
case $object instanceof InputArgument:
return $this->describeInputArgument($object, $options);
case $object instanceof InputOption:
return $this->describeInputOption($object, $options);
case $object instanceof InputDefinition:
return $this->describeInputDefinition($object, $options);
case $object instanceof Command:
return $this->describeCommand($object, $options);
case $object instanceof Application:
return $this->describeApplication($object, $options);
}
throw new \InvalidArgumentException(sprintf('Object of type "%s" is not describable.', get_class($object)));
}
/**
* Describes an InputArgument instance.
*
* @param InputArgument $argument
* @param array $options
*
* @return string|mixed
*/
abstract protected function describeInputArgument(InputArgument $argument, array $options = array());
/**
* Describes an InputOption instance.
*
* @param InputOption $option
* @param array $options
*
* @return string|mixed
*/
abstract protected function describeInputOption(InputOption $option, array $options = array());
/**
* Describes an InputDefinition instance.
*
* @param InputDefinition $definition
* @param array $options
*
* @return string|mixed
*/
abstract protected function describeInputDefinition(InputDefinition $definition, array $options = array());
/**
* Describes a Command instance.
*
* @param Command $command
* @param array $options
*
* @return string|mixed
*/
abstract protected function describeCommand(Command $command, array $options = array());
/**
* Describes an Application instance.
*
* @param Application $application
* @param array $options
*
* @return string|mixed
*/
abstract protected function describeApplication(Application $application, array $options = array());
}

@ -0,0 +1,30 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\Console\Descriptor;
/**
* Descriptor interface.
*
* @author Jean-François Simon <contact@jfsimon.fr>
*/
interface DescriptorInterface
{
/**
* Describes an InputArgument instance.
*
* @param object $object
* @param array $options
*
* @return string|mixed
*/
public function describe($object, array $options = array());
}

@ -0,0 +1,129 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\Console\Descriptor;
use Symfony\Component\Console\Application;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputDefinition;
use Symfony\Component\Console\Input\InputOption;
/**
* JSON descriptor.
*
* @author Jean-François Simon <contact@jfsimon.fr>
*/
class JsonDescriptor extends Descriptor
{
/**
* {@inheritdoc}
*/
protected function describeInputArgument(InputArgument $argument, array $options = array())
{
return $this->output(array(
'name' => $argument->getName(),
'is_required' => $argument->isRequired(),
'is_array' => $argument->isArray(),
'description' => $argument->getDescription(),
'default' => $argument->getDefault(),
), $options);
}
/**
* {@inheritdoc}
*/
protected function describeInputOption(InputOption $option, array $options = array())
{
return $this->output(array(
'name' => '--'.$option->getName(),
'shortcut' => $option->getShortcut() ? '-'.implode('|-', explode('|', $option->getShortcut())) : '',
'accept_value' => $option->acceptValue(),
'is_value_required' => $option->isValueRequired(),
'is_multiple' => $option->isArray(),
'description' => $option->getDescription(),
'default' => $option->getDefault(),
), $options);
}
/**
* {@inheritdoc}
*/
protected function describeInputDefinition(InputDefinition $definition, array $options = array())
{
$inputArguments = array();
foreach ($definition->getArguments() as $name => $argument) {
$inputArguments[$name] = $this->describeInputArgument($argument, array('as_array' => true));
}
$inputOptions = array();
foreach ($definition->getOptions() as $name => $option) {
$inputOptions[$name] = $this->describeInputOption($option, array('as_array' => true));
}
return $this->output(array('arguments' => $inputArguments, 'options' => $inputOptions), $options);
}
/**
* {@inheritdoc}
*/
protected function describeCommand(Command $command, array $options = array())
{
$command->getSynopsis();
$command->mergeApplicationDefinition(false);
return $this->output(array(
'name' => $command->getName(),
'usage' => $command->getSynopsis(),
'description' => $command->getDescription(),
'help' => $command->getProcessedHelp(),
'aliases' => $command->getAliases(),
'definition' => $this->describeInputDefinition($command->getNativeDefinition(), array('as_array' => true)),
), $options);
}
/**
* {@inheritdoc}
*/
protected function describeApplication(Application $application, array $options = array())
{
$describedNamespace = isset($options['namespace']) ? $options['namespace'] : null;
$description = new ApplicationDescription($application, $describedNamespace);
$commands = array();
foreach ($description->getCommands() as $command) {
$commands[] = $this->describeCommand($command, array('as_array' => true));
}
$data = $describedNamespace
? array('commands' => $commands, 'namespace' => $describedNamespace)
: array('commands' => $commands, 'namespaces' => array_values($description->getNamespaces()));
return $this->output($data, $options);
}
/**
* Outputs data as array or string according to options.
*
* @param array $data
* @param array $options
*
* @return array|string
*/
private function output(array $data, array $options)
{
if (isset($options['as_array']) && $options['as_array']) {
return $data;
}
return json_encode($data, isset($options['json_encoding']) ? $options['json_encoding'] : 0);
}
}

@ -0,0 +1,129 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\Console\Descriptor;
use Symfony\Component\Console\Application;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputDefinition;
use Symfony\Component\Console\Input\InputOption;
/**
* Markdown descriptor.
*
* @author Jean-François Simon <contact@jfsimon.fr>
*/
class MarkdownDescriptor extends Descriptor
{
/**
* {@inheritdoc}
*/
protected function describeInputArgument(InputArgument $argument, array $options = array())
{
return '**'.$argument->getName().':**'."\n\n"
.'* Name: '.($argument->getName() ?: '<none>')."\n"
.'* Is required: '.($argument->isRequired() ? 'yes' : 'no')."\n"
.'* Is array: '.($argument->isArray() ? 'yes' : 'no')."\n"
.'* Description: '.($argument->getDescription() ?: '<none>')."\n"
.'* Default: `'.str_replace("\n", '', var_export($argument->getDefault(), true)).'`';
}
/**
* {@inheritdoc}
*/
protected function describeInputOption(InputOption $option, array $options = array())
{
return '**'.$option->getName().':**'."\n\n"
.'* Name: `--'.$option->getName().'`'."\n"
.'* Shortcut: '.($option->getShortcut() ? '`-'.implode('|-', explode('|', $option->getShortcut())).'`' : '<none>')."\n"
.'* Accept value: '.($option->acceptValue() ? 'yes' : 'no')."\n"
.'* Is value required: '.($option->isValueRequired() ? 'yes' : 'no')."\n"
.'* Is multiple: '.($option->isArray() ? 'yes' : 'no')."\n"
.'* Description: '.($option->getDescription() ?: '<none>')."\n"
.'* Default: `'.str_replace("\n", '', var_export($option->getDefault(), true)).'`';
}
/**
* {@inheritdoc}
*/
protected function describeInputDefinition(InputDefinition $definition, array $options = array())
{
$blocks = array();
if (count($definition->getArguments()) > 0) {
$blocks[] = '### Arguments:';
foreach ($definition->getArguments() as $argument) {
$blocks[] = $this->describeInputArgument($argument);
}
}
if (count($definition->getOptions()) > 0) {
$blocks[] = '### Options:';
foreach ($definition->getOptions() as $option) {
$blocks[] = $this->describeInputOption($option);
}
}
return implode("\n\n", $blocks);
}
/**
* {@inheritdoc}
*/
protected function describeCommand(Command $command, array $options = array())
{
$command->getSynopsis();
$command->mergeApplicationDefinition(false);
$markdown = $command->getName()."\n"
.str_repeat('-', strlen($command->getName()))."\n\n"
.'* Description: '.($command->getDescription() ?: '<none>')."\n"
.'* Usage: `'.$command->getSynopsis().'`'."\n"
.'* Aliases: '.(count($command->getAliases()) ? '`'.implode('`, `', $command->getAliases()).'`' : '<none>');
if ($help = $command->getProcessedHelp()) {
$markdown .= "\n\n".$help;
}
if ($definitionMarkdown = $this->describeInputDefinition($command->getNativeDefinition())) {
$markdown .= "\n\n".$definitionMarkdown;
}
return $markdown;
}
/**
* {@inheritdoc}
*/
protected function describeApplication(Application $application, array $options = array())
{
$describedNamespace = isset($options['namespace']) ? $options['namespace'] : null;
$description = new ApplicationDescription($application, $describedNamespace);
$blocks = array($application->getName()."\n".str_repeat('=', strlen($application->getName())));
foreach ($description->getNamespaces() as $namespace) {
if (ApplicationDescription::GLOBAL_NAMESPACE !== $namespace['id']) {
$blocks[] = '**'.$namespace['id'].':**';
}
$blocks[] = implode("\n", array_map(function ($commandName) {
return '* '.$commandName;
} , $namespace['commands']));
}
foreach ($description->getCommands() as $command) {
$blocks[] = $this->describeCommand($command);
}
return implode("\n\n", $blocks);
}
}

@ -0,0 +1,210 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\Console\Descriptor;
use Symfony\Component\Console\Application;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputDefinition;
use Symfony\Component\Console\Input\InputOption;
/**
* Text descriptor.
*
* @author Jean-François Simon <contact@jfsimon.fr>
*/
class TextDescriptor extends Descriptor
{
/**
* {@inheritdoc}
*/
protected function describeInputArgument(InputArgument $argument, array $options = array())
{
if (null !== $argument->getDefault() && (!is_array($argument->getDefault()) || count($argument->getDefault()))) {
$default = sprintf('<comment> (default: %s)</comment>', $this->formatDefaultValue($argument->getDefault()));
} else {
$default = '';
}
$nameWidth = isset($options['name_width']) ? $options['name_width'] : strlen($argument->getName());
$output = str_replace("\n", "\n".str_repeat(' ', $nameWidth + 2), $argument->getDescription());
$output = sprintf(" <info>%-${nameWidth}s</info> %s%s", $argument->getName(), $output, $default);
return isset($options['raw_text']) && $options['raw_text'] ? strip_tags($output) : $output;
}
/**
* {@inheritdoc}
*/
protected function describeInputOption(InputOption $option, array $options = array())
{
if ($option->acceptValue() && null !== $option->getDefault() && (!is_array($option->getDefault()) || count($option->getDefault()))) {
$default = sprintf('<comment> (default: %s)</comment>', $this->formatDefaultValue($option->getDefault()));
} else {
$default = '';
}
$nameWidth = isset($options['name_width']) ? $options['name_width'] : strlen($option->getName());
$nameWithShortcutWidth = $nameWidth - strlen($option->getName()) - 2;
$output = sprintf(" <info>%s</info> %-${nameWithShortcutWidth}s%s%s%s",
'--'.$option->getName(),
$option->getShortcut() ? sprintf('(-%s) ', $option->getShortcut()) : '',
str_replace("\n", "\n".str_repeat(' ', $nameWidth + 2), $option->getDescription()),
$default,
$option->isArray() ? '<comment> (multiple values allowed)</comment>' : ''
);
return isset($options['raw_text']) && $options['raw_text'] ? strip_tags($output) : $output;
}
/**
* {@inheritdoc}
*/
protected function describeInputDefinition(InputDefinition $definition, array $options = array())
{
$nameWidth = 0;
foreach ($definition->getOptions() as $option) {
$nameLength = strlen($option->getName()) + 2;
if ($option->getShortcut()) {
$nameLength += strlen($option->getShortcut()) + 3;
}
$nameWidth = max($nameWidth, $nameLength);
}
foreach ($definition->getArguments() as $argument) {
$nameWidth = max($nameWidth, strlen($argument->getName()));
}
++$nameWidth;
$messages = array();
if ($definition->getArguments()) {
$messages[] = '<comment>Arguments:</comment>';
foreach ($definition->getArguments() as $argument) {
$messages[] = $this->describeInputArgument($argument, array('name_width' => $nameWidth));
}
$messages[] = '';
}
if ($definition->getOptions()) {
$messages[] = '<comment>Options:</comment>';
foreach ($definition->getOptions() as $option) {
$messages[] = $this->describeInputOption($option, array('name_width' => $nameWidth));
}
$messages[] = '';
}
$output = implode("\n", $messages);
return isset($options['raw_text']) && $options['raw_text'] ? strip_tags($output) : $output;
}
/**
* {@inheritdoc}
*/
protected function describeCommand(Command $command, array $options = array())
{
$command->getSynopsis();
$command->mergeApplicationDefinition(false);
$messages = array('<comment>Usage:</comment>', ' '.$command->getSynopsis(), '');
if ($command->getAliases()) {
$messages[] = '<comment>Aliases:</comment> <info>'.implode(', ', $command->getAliases()).'</info>';
}
$messages[] = $this->describeInputDefinition($command->getNativeDefinition());
if ($help = $command->getProcessedHelp()) {
$messages[] = '<comment>Help:</comment>';
$messages[] = ' '.str_replace("\n", "\n ", $help)."\n";
}
$output = implode("\n", $messages);
return isset($options['raw_text']) && $options['raw_text'] ? strip_tags($output) : $output;
}
/**
* {@inheritdoc}
*/
protected function describeApplication(Application $application, array $options = array())
{
$describedNamespace = isset($options['namespace']) ? $options['namespace'] : null;
$description = new ApplicationDescription($application, $describedNamespace);
$messages = array();
if (isset($options['raw_text']) && $options['raw_text']) {
$width = $this->getColumnWidth($description->getCommands());
foreach ($description->getCommands() as $command) {
$messages[] = sprintf("%-${width}s %s", $command->getName(), $command->getDescription());
}
} else {
$width = $this->getColumnWidth($description->getCommands());
$messages[] = $application->getHelp();
$messages[] = '';
if ($describedNamespace) {
$messages[] = sprintf("<comment>Available commands for the \"%s\" namespace:</comment>", $describedNamespace);
} else {
$messages[] = '<comment>Available commands:</comment>';
}
// add commands by namespace
foreach ($description->getNamespaces() as $namespace) {
if (!$describedNamespace && ApplicationDescription::GLOBAL_NAMESPACE !== $namespace['id']) {
$messages[] = '<comment>'.$namespace['id'].'</comment>';
}
foreach ($namespace['commands'] as $name) {
$messages[] = sprintf(" <info>%-${width}s</info> %s", $name, $description->getCommand($name)->getDescription());
}
}
}
$output = implode("\n", $messages);
return isset($options['raw_text']) && $options['raw_text'] ? strip_tags($output) : $output;
}
/**
* Formats input option/argument default value.
*
* @param mixed $default
*
* @return string
*/
private function formatDefaultValue($default)
{
if (version_compare(PHP_VERSION, '5.4', '<')) {
return str_replace('\/', '/', json_encode($default));
}
return json_encode($default, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
}
/**
* @param Command[] $commands
*
* @return int
*/
private function getColumnWidth(array $commands)
{
$width = 0;
foreach ($commands as $command) {
$width = strlen($command->getName()) > $width ? strlen($command->getName()) : $width;
}
return $width + 2;
}
}

@ -0,0 +1,212 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\Console\Descriptor;
use Symfony\Component\Console\Application;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputDefinition;
use Symfony\Component\Console\Input\InputOption;
/**
* XML descriptor.
*
* @author Jean-François Simon <contact@jfsimon.fr>
*/
class XmlDescriptor extends Descriptor
{
/**
* {@inheritdoc}
*/
protected function describeInputArgument(InputArgument $argument, array $options = array())
{
$dom = new \DOMDocument('1.0', 'UTF-8');
$dom->appendChild($objectXML = $dom->createElement('argument'));
$objectXML->setAttribute('name', $argument->getName());
$objectXML->setAttribute('is_required', $argument->isRequired() ? 1 : 0);
$objectXML->setAttribute('is_array', $argument->isArray() ? 1 : 0);
$objectXML->appendChild($descriptionXML = $dom->createElement('description'));
$descriptionXML->appendChild($dom->createTextNode($argument->getDescription()));
$objectXML->appendChild($defaultsXML = $dom->createElement('defaults'));
$defaults = is_array($argument->getDefault()) ? $argument->getDefault() : (is_bool($argument->getDefault()) ? array(var_export($argument->getDefault(), true)) : ($argument->getDefault() ? array($argument->getDefault()) : array()));
foreach ($defaults as $default) {
$defaultsXML->appendChild($defaultXML = $dom->createElement('default'));
$defaultXML->appendChild($dom->createTextNode($default));
}
return $this->output($dom, $options);
}
/**
* {@inheritdoc}
*/
protected function describeInputOption(InputOption $option, array $options = array())
{
$dom = new \DOMDocument('1.0', 'UTF-8');
$dom->appendChild($objectXML = $dom->createElement('option'));
$objectXML->setAttribute('name', '--'.$option->getName());
$pos = strpos($option->getShortcut(), '|');
if (false !== $pos) {
$objectXML->setAttribute('shortcut', '-'.substr($option->getShortcut(), 0, $pos));
$objectXML->setAttribute('shortcuts', '-'.implode('|-', explode('|', $option->getShortcut())));
} else {
$objectXML->setAttribute('shortcut', $option->getShortcut() ? '-'.$option->getShortcut() : '');
}
$objectXML->setAttribute('accept_value', $option->acceptValue() ? 1 : 0);
$objectXML->setAttribute('is_value_required', $option->isValueRequired() ? 1 : 0);
$objectXML->setAttribute('is_multiple', $option->isArray() ? 1 : 0);
$objectXML->appendChild($descriptionXML = $dom->createElement('description'));
$descriptionXML->appendChild($dom->createTextNode($option->getDescription()));
if ($option->acceptValue()) {
$defaults = is_array($option->getDefault()) ? $option->getDefault() : (is_bool($option->getDefault()) ? array(var_export($option->getDefault(), true)) : ($option->getDefault() ? array($option->getDefault()) : array()));
$objectXML->appendChild($defaultsXML = $dom->createElement('defaults'));
if (!empty($defaults)) {
foreach ($defaults as $default) {
$defaultsXML->appendChild($defaultXML = $dom->createElement('default'));
$defaultXML->appendChild($dom->createTextNode($default));
}
}
}
return $this->output($dom, $options);
}
/**
* {@inheritdoc}
*/
protected function describeInputDefinition(InputDefinition $definition, array $options = array())
{
$dom = new \DOMDocument('1.0', 'UTF-8');
$dom->appendChild($definitionXML = $dom->createElement('definition'));
$definitionXML->appendChild($argumentsXML = $dom->createElement('arguments'));
foreach ($definition->getArguments() as $argument) {
$this->appendDocument($argumentsXML, $this->describeInputArgument($argument, array('as_dom' => true)));
}
$definitionXML->appendChild($optionsXML = $dom->createElement('options'));
foreach ($definition->getOptions() as $option) {
$this->appendDocument($optionsXML, $this->describeInputOption($option, array('as_dom' => true)));
}
return $this->output($dom, $options);
}
/**
* {@inheritdoc}
*/
protected function describeCommand(Command $command, array $options = array())
{
$dom = new \DOMDocument('1.0', 'UTF-8');
$dom->appendChild($commandXML = $dom->createElement('command'));
$command->getSynopsis();
$command->mergeApplicationDefinition(false);
$commandXML->setAttribute('id', $command->getName());
$commandXML->setAttribute('name', $command->getName());
$commandXML->appendChild($usageXML = $dom->createElement('usage'));
$usageXML->appendChild($dom->createTextNode(sprintf($command->getSynopsis(), '')));
$commandXML->appendChild($descriptionXML = $dom->createElement('description'));
$descriptionXML->appendChild($dom->createTextNode(str_replace("\n", "\n ", $command->getDescription())));
$commandXML->appendChild($helpXML = $dom->createElement('help'));
$helpXML->appendChild($dom->createTextNode(str_replace("\n", "\n ", $command->getProcessedHelp())));
$commandXML->appendChild($aliasesXML = $dom->createElement('aliases'));
foreach ($command->getAliases() as $alias) {
$aliasesXML->appendChild($aliasXML = $dom->createElement('alias'));
$aliasXML->appendChild($dom->createTextNode($alias));
}
$definitionXML = $this->describeInputDefinition($command->getNativeDefinition(), array('as_dom' => true));
$this->appendDocument($commandXML, $definitionXML->getElementsByTagName('definition')->item(0));
return $this->output($dom, $options);
}
/**
* {@inheritdoc}
*/
protected function describeApplication(Application $application, array $options = array())
{
$dom = new \DOMDocument('1.0', 'UTF-8');
$dom->appendChild($rootXml = $dom->createElement('symfony'));
$rootXml->appendChild($commandsXML = $dom->createElement('commands'));
$describedNamespace = isset($options['namespace']) ? $options['namespace'] : null;
$description = new ApplicationDescription($application, $describedNamespace);
if ($describedNamespace) {
$commandsXML->setAttribute('namespace', $describedNamespace);
}
foreach ($description->getCommands() as $command) {
$this->appendDocument($commandsXML, $this->describeCommand($command, array('as_dom' => true)));
}
if (!$describedNamespace) {
$rootXml->appendChild($namespacesXML = $dom->createElement('namespaces'));
foreach ($description->getNamespaces() as $namespace) {
$namespacesXML->appendChild($namespaceArrayXML = $dom->createElement('namespace'));
$namespaceArrayXML->setAttribute('id', $namespace['id']);
foreach ($namespace['commands'] as $name) {
$namespaceArrayXML->appendChild($commandXML = $dom->createElement('command'));
$commandXML->appendChild($dom->createTextNode($name));
}
}
}
return $this->output($dom, $options);
}
/**
* Appends document children to parent node.
*
* @param \DOMNode $parentNode
* @param \DOMNode $importedParent
*/
private function appendDocument(\DOMNode $parentNode, \DOMNode $importedParent)
{
foreach ($importedParent->childNodes as $childNode) {
$parentNode->appendChild($parentNode->ownerDocument->importNode($childNode, true));
}
}
/**
* Outputs document as DOMDocument or string according to options.
*
* @param \DOMDocument $dom
* @param array $options
*
* @return \DOMDocument|string
*/
private function output(\DOMDocument $dom, array $options)
{
if (isset($options['as_dom']) && $options['as_dom']) {
return $dom;
}
$dom->formatOutput = true;
return $dom->saveXML();
}
}

@ -0,0 +1,67 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\Console\Event;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
/**
* Allows to handle exception thrown in a command.
*
* @author Fabien Potencier <fabien@symfony.com>
*/
class ConsoleExceptionEvent extends ConsoleEvent
{
private $exception;
private $exitCode;
public function __construct(Command $command, InputInterface $input, OutputInterface $output, \Exception $exception, $exitCode)
{
parent::__construct($command, $input, $output);
$this->setException($exception);
$this->exitCode = (int) $exitCode;
}
/**
* Returns the thrown exception.
*
* @return \Exception The thrown exception
*/
public function getException()
{
return $this->exception;
}
/**
* Replaces the thrown exception.
*
* This exception will be thrown if no response is set in the event.
*
* @param \Exception $exception The thrown exception
*/
public function setException(\Exception $exception)
{
$this->exception = $exception;
}
/**
* Gets the exit code.
*
* @return integer The command exit code
*/
public function getExitCode()
{
return $this->exitCode;
}
}

@ -0,0 +1,95 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\Console\Helper;
use Symfony\Component\Console\Application;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Descriptor\DescriptorInterface;
use Symfony\Component\Console\Descriptor\JsonDescriptor;
use Symfony\Component\Console\Descriptor\MarkdownDescriptor;
use Symfony\Component\Console\Descriptor\TextDescriptor;
use Symfony\Component\Console\Descriptor\XmlDescriptor;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputDefinition;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
/**
* This class adds helper method to describe objects in various formats.
*
* @author Jean-François Simon <contact@jfsimon.fr>
*/
class DescriptorHelper extends Helper
{
/**
* @var DescriptorInterface[]
*/
private $descriptors = array();
/**
* Constructor.
*/
public function __construct()
{
$this
->register('txt', new TextDescriptor())
->register('xml', new XmlDescriptor())
->register('json', new JsonDescriptor())
->register('md', new MarkdownDescriptor())
;
}
/**
* Describes an object if supported.
*
* @param OutputInterface $output
* @param object $object
* @param string $format
* @param boolean $raw
*/
public function describe(OutputInterface $output, $object, $format = null, $raw = false, $namespace = null)
{
$options = array('raw_text' => $raw, 'format' => $format ?: 'txt', 'namespace' => $namespace);
$type = !$raw && 'txt' === $options['format'] ? OutputInterface::OUTPUT_NORMAL : OutputInterface::OUTPUT_RAW;
if (!isset($this->descriptors[$options['format']])) {
throw new \InvalidArgumentException(sprintf('Unsupported format "%s".', $options['format']));
}
$descriptor = $this->descriptors[$options['format']];
$output->writeln($descriptor->describe($object, $options), $type);
}
/**
* Registers a descriptor.
*
* @param string $format
* @param DescriptorInterface $descriptor
*
* @return DescriptorHelper
*/
public function register($format, DescriptorInterface $descriptor)
{
$this->descriptors[$format] = $descriptor;
return $this;
}
/**
* {@inheritdoc}
*/
public function getName()
{
return 'descriptor';
}
}

@ -0,0 +1,98 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\Console\Tests\Descriptor;
use Symfony\Component\Console\Application;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Descriptor\DescriptorInterface;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputDefinition;
use Symfony\Component\Console\Input\InputOption;
abstract class AbstractDescriptorTest extends \PHPUnit_Framework_TestCase
{
/** @dataProvider getDescribeInputArgumentTestData */
public function testDescribeInputArgument(InputArgument $argument, $expectedDescription)
{
$this->assertEquals(trim($expectedDescription), trim($this->getDescriptor()->describe($argument)));
}
/** @dataProvider getDescribeInputOptionTestData */
public function testDescribeInputOption(InputOption $option, $expectedDescription)
{
$this->assertEquals(trim($expectedDescription), trim($this->getDescriptor()->describe($option)));
}
/** @dataProvider getDescribeInputDefinitionTestData */
public function testDescribeInputDefinition(InputDefinition $definition, $expectedDescription)
{
$this->assertEquals(trim($expectedDescription), trim($this->getDescriptor()->describe($definition)));
}
/** @dataProvider getDescribeCommandTestData */
public function testDescribeCommand(Command $command, $expectedDescription)
{
$this->assertEquals(trim($expectedDescription), trim($this->getDescriptor()->describe($command)));
}
/** @dataProvider getDescribeApplicationTestData */
public function testDescribeApplication(Application $application, $expectedDescription)
{
// Replaces the dynamic placeholders of the command help text with a static version.
// The placeholder %command.full_name% includes the script path that is not predictable
// and can not be tested against.
foreach ($application->all() as $command) {
$command->setHelp(str_replace('%command.full_name%', 'app/console %command.name%', $command->getHelp()));
}
$this->assertEquals(trim($expectedDescription), trim(str_replace(PHP_EOL, "\n", $this->getDescriptor()->describe($application))));
}
public function getDescribeInputArgumentTestData()
{
return $this->getDescriptionTestData(ObjectsProvider::getInputArguments());
}
public function getDescribeInputOptionTestData()
{
return $this->getDescriptionTestData(ObjectsProvider::getInputOptions());
}
public function getDescribeInputDefinitionTestData()
{
return $this->getDescriptionTestData(ObjectsProvider::getInputDefinitions());
}
public function getDescribeCommandTestData()
{
return $this->getDescriptionTestData(ObjectsProvider::getCommands());
}
public function getDescribeApplicationTestData()
{
return $this->getDescriptionTestData(ObjectsProvider::getApplications());
}
abstract protected function getDescriptor();
abstract protected function getFormat();
private function getDescriptionTestData(array $objects)
{
$data = array();
foreach ($objects as $name => $object) {
$description = file_get_contents(sprintf('%s/../Fixtures/%s.%s', __DIR__, $name, $this->getFormat()));
$data[] = array($object, $description);
}
return $data;
}
}

@ -0,0 +1,27 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\Console\Tests\Descriptor;
use Symfony\Component\Console\Descriptor\JsonDescriptor;
class JsonDescriptorTest extends AbstractDescriptorTest
{
protected function getDescriptor()
{
return new JsonDescriptor();
}
protected function getFormat()
{
return 'json';
}
}

@ -0,0 +1,27 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\Console\Tests\Descriptor;
use Symfony\Component\Console\Descriptor\MarkdownDescriptor;
class MarkdownDescriptorTest extends AbstractDescriptorTest
{
protected function getDescriptor()
{
return new MarkdownDescriptor();
}
protected function getFormat()
{
return 'md';
}
}

@ -0,0 +1,75 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\Console\Tests\Descriptor;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputDefinition;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Tests\Fixtures\DescriptorApplication1;
use Symfony\Component\Console\Tests\Fixtures\DescriptorApplication2;
use Symfony\Component\Console\Tests\Fixtures\DescriptorCommand1;
use Symfony\Component\Console\Tests\Fixtures\DescriptorCommand2;
use Symfony\Component\Finder\Shell\Command;
/**
* @author Jean-François Simon <contact@jfsimon.fr>
*/
class ObjectsProvider
{
public static function getInputArguments()
{
return array(
'input_argument_1' => new InputArgument('argument_name', InputArgument::REQUIRED),
'input_argument_2' => new InputArgument('argument_name', InputArgument::IS_ARRAY, 'argument description'),
'input_argument_3' => new InputArgument('argument_name', InputArgument::OPTIONAL, 'argument description', 'default_value'),
);
}
public static function getInputOptions()
{
return array(
'input_option_1' => new InputOption('option_name', 'o', InputOption::VALUE_NONE),
'input_option_2' => new InputOption('option_name', 'o', InputOption::VALUE_OPTIONAL, 'option description', 'default_value'),
'input_option_3' => new InputOption('option_name', 'o', InputOption::VALUE_REQUIRED, 'option description'),
'input_option_4' => new InputOption('option_name', 'o', InputOption::VALUE_IS_ARRAY | InputOption::VALUE_OPTIONAL, 'option description', array()),
);
}
public static function getInputDefinitions()
{
return array(
'input_definition_1' => new InputDefinition(),
'input_definition_2' => new InputDefinition(array(new InputArgument('argument_name', InputArgument::REQUIRED))),
'input_definition_3' => new InputDefinition(array(new InputOption('option_name', 'o', InputOption::VALUE_NONE))),
'input_definition_4' => new InputDefinition(array(
new InputArgument('argument_name', InputArgument::REQUIRED),
new InputOption('option_name', 'o', InputOption::VALUE_NONE),
)),
);
}
public static function getCommands()
{
return array(
'command_1' => new DescriptorCommand1(),
'command_2' => new DescriptorCommand2(),
);
}
public static function getApplications()
{
return array(
'application_1' => new DescriptorApplication1(),
'application_2' => new DescriptorApplication2(),
);
}
}

@ -0,0 +1,27 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\Console\Tests\Descriptor;
use Symfony\Component\Console\Descriptor\TextDescriptor;
class TextDescriptorTest extends AbstractDescriptorTest
{
protected function getDescriptor()
{
return new TextDescriptor();
}
protected function getFormat()
{
return 'txt';
}
}

@ -0,0 +1,27 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\Console\Tests\Descriptor;
use Symfony\Component\Console\Descriptor\XmlDescriptor;
class XmlDescriptorTest extends AbstractDescriptorTest
{
protected function getDescriptor()
{
return new XmlDescriptor();
}
protected function getFormat()
{
return 'xml';
}
}

@ -0,0 +1,18 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\Console\Tests\Fixtures;
use Symfony\Component\Console\Application;
class DescriptorApplication1 extends Application
{
}

@ -0,0 +1,24 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\Console\Tests\Fixtures;
use Symfony\Component\Console\Application;
class DescriptorApplication2 extends Application
{
public function __construct()
{
parent::__construct('My Symfony application', 'v1.0');
$this->add(new DescriptorCommand1());
$this->add(new DescriptorCommand2());
}
}

@ -0,0 +1,27 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\Console\Tests\Fixtures;
use Symfony\Component\Console\Command\Command;
class DescriptorCommand1 extends Command
{
protected function configure()
{
$this
->setName('descriptor:command1')
->setAliases(array('alias1', 'alias2'))
->setDescription('command 1 description')
->setHelp('command 1 help')
;
}
}

@ -0,0 +1,30 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\Console\Tests\Fixtures;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputOption;
class DescriptorCommand2 extends Command
{
protected function configure()
{
$this
->setName('descriptor:command2')
->setDescription('command 2 description')
->setHelp('command 2 help')
->addArgument('argument_name', InputArgument::REQUIRED)
->addOption('option_name', 'o', InputOption::VALUE_NONE)
;
}
}

@ -0,0 +1 @@
{"commands":[{"name":"help","usage":"help [--xml] [--format=\"...\"] [--raw] [command_name]","description":"Displays help for a command","help":"The <info>help<\/info> command displays help for a given command:\n\n <info>php app\/console help list<\/info>\n\nYou can also output the help in other formats by using the <comment>--format<\/comment> option:\n\n <info>php app\/console help --format=xml list<\/info>\n\nTo display the list of available commands, please use the <info>list<\/info> command.","aliases":[],"definition":{"arguments":{"command_name":{"name":"command_name","is_required":false,"is_array":false,"description":"The command name","default":"help"}},"options":{"xml":{"name":"--xml","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"To output help as XML","default":false},"format":{"name":"--format","shortcut":"","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"To output help in other formats","default":null},"raw":{"name":"--raw","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"To output raw command help","default":false},"help":{"name":"--help","shortcut":"-h","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this help message.","default":false},"quiet":{"name":"--quiet","shortcut":"-q","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not output any message.","default":false},"verbose":{"name":"--verbose","shortcut":"-v|-vv|-vvv","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug","default":false},"version":{"name":"--version","shortcut":"-V","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Display this application version.","default":false},"ansi":{"name":"--ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Force ANSI output.","default":false},"no-ansi":{"name":"--no-ansi","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Disable ANSI output.","default":false},"no-interaction":{"name":"--no-interaction","shortcut":"-n","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"Do not ask any interactive question.","default":false}}}},{"name":"list","usage":"list [--xml] [--raw] [--format=\"...\"] [namespace]","description":"Lists commands","help":"The <info>list<\/info> command lists all commands:\n\n <info>php app\/console list<\/info>\n\nYou can also display the commands for a specific namespace:\n\n <info>php app\/console list test<\/info>\n\nYou can also output the information in other formats by using the <comment>--format<\/comment> option:\n\n <info>php app\/console list --format=xml<\/info>\n\nIt's also possible to get raw list of commands (useful for embedding command runner):\n\n <info>php app\/console list --raw<\/info>","aliases":[],"definition":{"arguments":{"namespace":{"name":"namespace","is_required":false,"is_array":false,"description":"The namespace name","default":null}},"options":{"xml":{"name":"--xml","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"To output list as XML","default":false},"raw":{"name":"--raw","shortcut":"","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"To output raw command list","default":false},"format":{"name":"--format","shortcut":"","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"To output list in other formats","default":null}}}}],"namespaces":[{"id":"_global","commands":["help","list"]}]}

@ -0,0 +1,199 @@
UNKNOWN
=======
* help
* list
help
----
* Description: Displays help for a command
* Usage: `help [--xml] [--format="..."] [--raw] [command_name]`
* Aliases: <none>
The <info>help</info> command displays help for a given command:
<info>php app/console help list</info>
You can also output the help in other formats by using the <comment>--format</comment> option:
<info>php app/console help --format=xml list</info>
To display the list of available commands, please use the <info>list</info> command.
### Arguments:
**command_name:**
* Name: command_name
* Is required: no
* Is array: no
* Description: The command name
* Default: `'help'`
### Options:
**xml:**
* Name: `--xml`
* Shortcut: <none>
* Accept value: no
* Is value required: no
* Is multiple: no
* Description: To output help as XML
* Default: `false`
**format:**
* Name: `--format`
* Shortcut: <none>
* Accept value: yes
* Is value required: yes
* Is multiple: no
* Description: To output help in other formats
* Default: `NULL`
**raw:**
* Name: `--raw`
* Shortcut: <none>
* Accept value: no
* Is value required: no
* Is multiple: no
* Description: To output raw command help
* Default: `false`
**help:**
* Name: `--help`
* Shortcut: `-h`
* Accept value: no
* Is value required: no
* Is multiple: no
* Description: Display this help message.
* Default: `false`
**quiet:**
* Name: `--quiet`
* Shortcut: `-q`
* Accept value: no
* Is value required: no
* Is multiple: no
* Description: Do not output any message.
* Default: `false`
**verbose:**
* Name: `--verbose`
* Shortcut: `-v|-vv|-vvv`
* Accept value: no
* Is value required: no
* Is multiple: no
* Description: Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
* Default: `false`
**version:**
* Name: `--version`
* Shortcut: `-V`
* Accept value: no
* Is value required: no
* Is multiple: no
* Description: Display this application version.
* Default: `false`
**ansi:**
* Name: `--ansi`
* Shortcut: <none>
* Accept value: no
* Is value required: no
* Is multiple: no
* Description: Force ANSI output.
* Default: `false`
**no-ansi:**
* Name: `--no-ansi`
* Shortcut: <none>
* Accept value: no
* Is value required: no
* Is multiple: no
* Description: Disable ANSI output.
* Default: `false`
**no-interaction:**
* Name: `--no-interaction`
* Shortcut: `-n`
* Accept value: no
* Is value required: no
* Is multiple: no
* Description: Do not ask any interactive question.
* Default: `false`
list
----
* Description: Lists commands
* Usage: `list [--xml] [--raw] [--format="..."] [namespace]`
* Aliases: <none>
The <info>list</info> command lists all commands:
<info>php app/console list</info>
You can also display the commands for a specific namespace:
<info>php app/console list test</info>
You can also output the information in other formats by using the <comment>--format</comment> option:
<info>php app/console list --format=xml</info>
It's also possible to get raw list of commands (useful for embedding command runner):
<info>php app/console list --raw</info>
### Arguments:
**namespace:**
* Name: namespace
* Is required: no
* Is array: no
* Description: The namespace name
* Default: `NULL`
### Options:
**xml:**
* Name: `--xml`
* Shortcut: <none>
* Accept value: no
* Is value required: no
* Is multiple: no
* Description: To output list as XML
* Default: `false`
**raw:**
* Name: `--raw`
* Shortcut: <none>
* Accept value: no
* Is value required: no
* Is multiple: no
* Description: To output raw command list
* Default: `false`
**format:**
* Name: `--format`
* Shortcut: <none>
* Accept value: yes
* Is value required: yes
* Is multiple: no
* Description: To output list in other formats
* Default: `NULL`

@ -0,0 +1,17 @@
<info>Console Tool</info>
<comment>Usage:</comment>
[options] command [arguments]
<comment>Options:</comment>
<info>--help</info> <info>-h</info> Display this help message.
<info>--quiet</info> <info>-q</info> Do not output any message.
<info>--verbose</info> <info>-v|vv|vvv</info> Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
<info>--version</info> <info>-V</info> Display this application version.
<info>--ansi</info> Force ANSI output.
<info>--no-ansi</info> Disable ANSI output.
<info>--no-interaction</info> <info>-n</info> Do not ask any interactive question.
<comment>Available commands:</comment>
<info>help </info> Displays help for a command
<info>list </info> Lists commands

@ -0,0 +1,104 @@
<?xml version="1.0" encoding="UTF-8"?>
<symfony>
<commands>
<command id="help" name="help">
<usage>help [--xml] [--format="..."] [--raw] [command_name]</usage>
<description>Displays help for a command</description>
<help>The &lt;info&gt;help&lt;/info&gt; command displays help for a given command:
&lt;info&gt;php app/console help list&lt;/info&gt;
You can also output the help in other formats by using the &lt;comment&gt;--format&lt;/comment&gt; option:
&lt;info&gt;php app/console help --format=xml list&lt;/info&gt;
To display the list of available commands, please use the &lt;info&gt;list&lt;/info&gt; command.</help>
<aliases/>
<arguments>
<argument name="command_name" is_required="0" is_array="0">
<description>The command name</description>
<defaults>
<default>help</default>
</defaults>
</argument>
</arguments>
<options>
<option name="--xml" shortcut="" accept_value="0" is_value_required="0" is_multiple="0">
<description>To output help as XML</description>
</option>
<option name="--format" shortcut="" accept_value="1" is_value_required="1" is_multiple="0">
<description>To output help in other formats</description>
<defaults/>
</option>
<option name="--raw" shortcut="" accept_value="0" is_value_required="0" is_multiple="0">
<description>To output raw command help</description>
</option>
<option name="--help" shortcut="-h" accept_value="0" is_value_required="0" is_multiple="0">
<description>Display this help message.</description>
</option>
<option name="--quiet" shortcut="-q" accept_value="0" is_value_required="0" is_multiple="0">
<description>Do not output any message.</description>
</option>
<option name="--verbose" shortcut="-v" shortcuts="-v|-vv|-vvv" accept_value="0" is_value_required="0" is_multiple="0">
<description>Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug</description>
</option>
<option name="--version" shortcut="-V" accept_value="0" is_value_required="0" is_multiple="0">
<description>Display this application version.</description>
</option>
<option name="--ansi" shortcut="" accept_value="0" is_value_required="0" is_multiple="0">
<description>Force ANSI output.</description>
</option>
<option name="--no-ansi" shortcut="" accept_value="0" is_value_required="0" is_multiple="0">
<description>Disable ANSI output.</description>
</option>
<option name="--no-interaction" shortcut="-n" accept_value="0" is_value_required="0" is_multiple="0">
<description>Do not ask any interactive question.</description>
</option>
</options>
</command>
<command id="list" name="list">
<usage>list [--xml] [--raw] [--format="..."] [namespace]</usage>
<description>Lists commands</description>
<help>The &lt;info&gt;list&lt;/info&gt; command lists all commands:
&lt;info&gt;php app/console list&lt;/info&gt;
You can also display the commands for a specific namespace:
&lt;info&gt;php app/console list test&lt;/info&gt;
You can also output the information in other formats by using the &lt;comment&gt;--format&lt;/comment&gt; option:
&lt;info&gt;php app/console list --format=xml&lt;/info&gt;
It's also possible to get raw list of commands (useful for embedding command runner):
&lt;info&gt;php app/console list --raw&lt;/info&gt;</help>
<aliases/>
<arguments>
<argument name="namespace" is_required="0" is_array="0">
<description>The namespace name</description>
<defaults/>
</argument>
</arguments>
<options>
<option name="--xml" shortcut="" accept_value="0" is_value_required="0" is_multiple="0">
<description>To output list as XML</description>
</option>
<option name="--raw" shortcut="" accept_value="0" is_value_required="0" is_multiple="0">
<description>To output raw command list</description>
</option>
<option name="--format" shortcut="" accept_value="1" is_value_required="1" is_multiple="0">
<description>To output list in other formats</description>
<defaults/>
</option>
</options>
</command>
</commands>
<namespaces>
<namespace id="_global">
<command>help</command>
<command>list</command>
</namespace>
</namespaces>
</symfony>

@ -0,0 +1,388 @@
My Symfony application
======================
* alias1
* alias2
* help
* list
**descriptor:**
* descriptor:command1
* descriptor:command2
help
----
* Description: Displays help for a command
* Usage: `help [--xml] [--format="..."] [--raw] [command_name]`
* Aliases: <none>
The <info>help</info> command displays help for a given command:
<info>php app/console help list</info>
You can also output the help in other formats by using the <comment>--format</comment> option:
<info>php app/console help --format=xml list</info>
To display the list of available commands, please use the <info>list</info> command.
### Arguments:
**command_name:**
* Name: command_name
* Is required: no
* Is array: no
* Description: The command name
* Default: `'help'`
### Options:
**xml:**
* Name: `--xml`
* Shortcut: <none>
* Accept value: no
* Is value required: no
* Is multiple: no
* Description: To output help as XML
* Default: `false`
**format:**
* Name: `--format`
* Shortcut: <none>
* Accept value: yes
* Is value required: yes
* Is multiple: no
* Description: To output help in other formats
* Default: `NULL`
**raw:**
* Name: `--raw`
* Shortcut: <none>
* Accept value: no
* Is value required: no
* Is multiple: no
* Description: To output raw command help
* Default: `false`
**help:**
* Name: `--help`
* Shortcut: `-h`
* Accept value: no
* Is value required: no
* Is multiple: no
* Description: Display this help message.
* Default: `false`
**quiet:**
* Name: `--quiet`
* Shortcut: `-q`
* Accept value: no
* Is value required: no
* Is multiple: no
* Description: Do not output any message.
* Default: `false`
**verbose:**
* Name: `--verbose`
* Shortcut: `-v|-vv|-vvv`
* Accept value: no
* Is value required: no
* Is multiple: no
* Description: Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
* Default: `false`
**version:**
* Name: `--version`
* Shortcut: `-V`
* Accept value: no
* Is value required: no
* Is multiple: no
* Description: Display this application version.
* Default: `false`
**ansi:**
* Name: `--ansi`
* Shortcut: <none>
* Accept value: no
* Is value required: no
* Is multiple: no
* Description: Force ANSI output.
* Default: `false`
**no-ansi:**
* Name: `--no-ansi`
* Shortcut: <none>
* Accept value: no
* Is value required: no
* Is multiple: no
* Description: Disable ANSI output.
* Default: `false`
**no-interaction:**
* Name: `--no-interaction`
* Shortcut: `-n`
* Accept value: no
* Is value required: no
* Is multiple: no
* Description: Do not ask any interactive question.
* Default: `false`
list
----
* Description: Lists commands
* Usage: `list [--xml] [--raw] [--format="..."] [namespace]`
* Aliases: <none>
The <info>list</info> command lists all commands:
<info>php app/console list</info>
You can also display the commands for a specific namespace:
<info>php app/console list test</info>
You can also output the information in other formats by using the <comment>--format</comment> option:
<info>php app/console list --format=xml</info>
It's also possible to get raw list of commands (useful for embedding command runner):
<info>php app/console list --raw</info>
### Arguments:
**namespace:**
* Name: namespace
* Is required: no
* Is array: no
* Description: The namespace name
* Default: `NULL`
### Options:
**xml:**
* Name: `--xml`
* Shortcut: <none>
* Accept value: no
* Is value required: no
* Is multiple: no
* Description: To output list as XML
* Default: `false`
**raw:**
* Name: `--raw`
* Shortcut: <none>
* Accept value: no
* Is value required: no
* Is multiple: no
* Description: To output raw command list
* Default: `false`
**format:**
* Name: `--format`
* Shortcut: <none>
* Accept value: yes
* Is value required: yes
* Is multiple: no
* Description: To output list in other formats
* Default: `NULL`
descriptor:command1
-------------------
* Description: command 1 description
* Usage: `descriptor:command1`
* Aliases: `alias1`, `alias2`
command 1 help
### Options:
**help:**
* Name: `--help`
* Shortcut: `-h`
* Accept value: no
* Is value required: no
* Is multiple: no
* Description: Display this help message.
* Default: `false`
**quiet:**
* Name: `--quiet`
* Shortcut: `-q`
* Accept value: no
* Is value required: no
* Is multiple: no
* Description: Do not output any message.
* Default: `false`
**verbose:**
* Name: `--verbose`
* Shortcut: `-v|-vv|-vvv`
* Accept value: no
* Is value required: no
* Is multiple: no
* Description: Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
* Default: `false`
**version:**
* Name: `--version`
* Shortcut: `-V`
* Accept value: no
* Is value required: no
* Is multiple: no
* Description: Display this application version.
* Default: `false`
**ansi:**
* Name: `--ansi`
* Shortcut: <none>
* Accept value: no
* Is value required: no
* Is multiple: no
* Description: Force ANSI output.
* Default: `false`
**no-ansi:**
* Name: `--no-ansi`
* Shortcut: <none>
* Accept value: no
* Is value required: no
* Is multiple: no
* Description: Disable ANSI output.
* Default: `false`
**no-interaction:**
* Name: `--no-interaction`
* Shortcut: `-n`
* Accept value: no
* Is value required: no
* Is multiple: no
* Description: Do not ask any interactive question.
* Default: `false`
descriptor:command2
-------------------
* Description: command 2 description
* Usage: `descriptor:command2 [-o|--option_name] argument_name`
* Aliases: <none>
command 2 help
### Arguments:
**argument_name:**
* Name: argument_name
* Is required: yes
* Is array: no
* Description: <none>
* Default: `NULL`
### Options:
**option_name:**
* Name: `--option_name`
* Shortcut: `-o`
* Accept value: no
* Is value required: no
* Is multiple: no
* Description: <none>
* Default: `false`
**help:**
* Name: `--help`
* Shortcut: `-h`
* Accept value: no
* Is value required: no
* Is multiple: no
* Description: Display this help message.
* Default: `false`
**quiet:**
* Name: `--quiet`
* Shortcut: `-q`
* Accept value: no
* Is value required: no
* Is multiple: no
* Description: Do not output any message.
* Default: `false`
**verbose:**
* Name: `--verbose`
* Shortcut: `-v|-vv|-vvv`
* Accept value: no
* Is value required: no
* Is multiple: no
* Description: Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
* Default: `false`
**version:**
* Name: `--version`
* Shortcut: `-V`
* Accept value: no
* Is value required: no
* Is multiple: no
* Description: Display this application version.
* Default: `false`
**ansi:**
* Name: `--ansi`
* Shortcut: <none>
* Accept value: no
* Is value required: no
* Is multiple: no
* Description: Force ANSI output.
* Default: `false`
**no-ansi:**
* Name: `--no-ansi`
* Shortcut: <none>
* Accept value: no
* Is value required: no
* Is multiple: no
* Description: Disable ANSI output.
* Default: `false`
**no-interaction:**
* Name: `--no-interaction`
* Shortcut: `-n`
* Accept value: no
* Is value required: no
* Is multiple: no
* Description: Do not ask any interactive question.
* Default: `false`

@ -0,0 +1,22 @@
<info>My Symfony application</info> version <comment>v1.0</comment>
<comment>Usage:</comment>
[options] command [arguments]
<comment>Options:</comment>
<info>--help</info> <info>-h</info> Display this help message.
<info>--quiet</info> <info>-q</info> Do not output any message.
<info>--verbose</info> <info>-v|vv|vvv</info> Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
<info>--version</info> <info>-V</info> Display this application version.
<info>--ansi</info> Force ANSI output.
<info>--no-ansi</info> Disable ANSI output.
<info>--no-interaction</info> <info>-n</info> Do not ask any interactive question.
<comment>Available commands:</comment>
<info>alias1 </info> command 1 description
<info>alias2 </info> command 1 description
<info>help </info> Displays help for a command
<info>list </info> Lists commands
<comment>descriptor</comment>
<info>descriptor:command1 </info> command 1 description
<info>descriptor:command2 </info> command 2 description

@ -0,0 +1,181 @@
<?xml version="1.0" encoding="UTF-8"?>
<symfony>
<commands>
<command id="help" name="help">
<usage>help [--xml] [--format="..."] [--raw] [command_name]</usage>
<description>Displays help for a command</description>
<help>The &lt;info&gt;help&lt;/info&gt; command displays help for a given command:
&lt;info&gt;php app/console help list&lt;/info&gt;
You can also output the help in other formats by using the &lt;comment&gt;--format&lt;/comment&gt; option:
&lt;info&gt;php app/console help --format=xml list&lt;/info&gt;
To display the list of available commands, please use the &lt;info&gt;list&lt;/info&gt; command.</help>
<aliases/>
<arguments>
<argument name="command_name" is_required="0" is_array="0">
<description>The command name</description>
<defaults>
<default>help</default>
</defaults>
</argument>
</arguments>
<options>
<option name="--xml" shortcut="" accept_value="0" is_value_required="0" is_multiple="0">
<description>To output help as XML</description>
</option>
<option name="--format" shortcut="" accept_value="1" is_value_required="1" is_multiple="0">
<description>To output help in other formats</description>
<defaults/>
</option>
<option name="--raw" shortcut="" accept_value="0" is_value_required="0" is_multiple="0">
<description>To output raw command help</description>
</option>
<option name="--help" shortcut="-h" accept_value="0" is_value_required="0" is_multiple="0">
<description>Display this help message.</description>
</option>
<option name="--quiet" shortcut="-q" accept_value="0" is_value_required="0" is_multiple="0">
<description>Do not output any message.</description>
</option>
<option name="--verbose" shortcut="-v" shortcuts="-v|-vv|-vvv" accept_value="0" is_value_required="0" is_multiple="0">
<description>Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug</description>
</option>
<option name="--version" shortcut="-V" accept_value="0" is_value_required="0" is_multiple="0">
<description>Display this application version.</description>
</option>
<option name="--ansi" shortcut="" accept_value="0" is_value_required="0" is_multiple="0">
<description>Force ANSI output.</description>
</option>
<option name="--no-ansi" shortcut="" accept_value="0" is_value_required="0" is_multiple="0">
<description>Disable ANSI output.</description>
</option>
<option name="--no-interaction" shortcut="-n" accept_value="0" is_value_required="0" is_multiple="0">
<description>Do not ask any interactive question.</description>
</option>
</options>
</command>
<command id="list" name="list">
<usage>list [--xml] [--raw] [--format="..."] [namespace]</usage>
<description>Lists commands</description>
<help>The &lt;info&gt;list&lt;/info&gt; command lists all commands:
&lt;info&gt;php app/console list&lt;/info&gt;
You can also display the commands for a specific namespace:
&lt;info&gt;php app/console list test&lt;/info&gt;
You can also output the information in other formats by using the &lt;comment&gt;--format&lt;/comment&gt; option:
&lt;info&gt;php app/console list --format=xml&lt;/info&gt;
It's also possible to get raw list of commands (useful for embedding command runner):
&lt;info&gt;php app/console list --raw&lt;/info&gt;</help>
<aliases/>
<arguments>
<argument name="namespace" is_required="0" is_array="0">
<description>The namespace name</description>
<defaults/>
</argument>
</arguments>
<options>
<option name="--xml" shortcut="" accept_value="0" is_value_required="0" is_multiple="0">
<description>To output list as XML</description>
</option>
<option name="--raw" shortcut="" accept_value="0" is_value_required="0" is_multiple="0">
<description>To output raw command list</description>
</option>
<option name="--format" shortcut="" accept_value="1" is_value_required="1" is_multiple="0">
<description>To output list in other formats</description>
<defaults/>
</option>
</options>
</command>
<command id="descriptor:command1" name="descriptor:command1">
<usage>descriptor:command1</usage>
<description>command 1 description</description>
<help>command 1 help</help>
<aliases>
<alias>alias1</alias>
<alias>alias2</alias>
</aliases>
<arguments/>
<options>
<option name="--help" shortcut="-h" accept_value="0" is_value_required="0" is_multiple="0">
<description>Display this help message.</description>
</option>
<option name="--quiet" shortcut="-q" accept_value="0" is_value_required="0" is_multiple="0">
<description>Do not output any message.</description>
</option>
<option name="--verbose" shortcut="-v" shortcuts="-v|-vv|-vvv" accept_value="0" is_value_required="0" is_multiple="0">
<description>Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug</description>
</option>
<option name="--version" shortcut="-V" accept_value="0" is_value_required="0" is_multiple="0">
<description>Display this application version.</description>
</option>
<option name="--ansi" shortcut="" accept_value="0" is_value_required="0" is_multiple="0">
<description>Force ANSI output.</description>
</option>
<option name="--no-ansi" shortcut="" accept_value="0" is_value_required="0" is_multiple="0">
<description>Disable ANSI output.</description>
</option>
<option name="--no-interaction" shortcut="-n" accept_value="0" is_value_required="0" is_multiple="0">
<description>Do not ask any interactive question.</description>
</option>
</options>
</command>
<command id="descriptor:command2" name="descriptor:command2">
<usage>descriptor:command2 [-o|--option_name] argument_name</usage>
<description>command 2 description</description>
<help>command 2 help</help>
<aliases/>
<arguments>
<argument name="argument_name" is_required="1" is_array="0">
<description></description>
<defaults/>
</argument>
</arguments>
<options>
<option name="--option_name" shortcut="-o" accept_value="0" is_value_required="0" is_multiple="0">
<description></description>
</option>
<option name="--help" shortcut="-h" accept_value="0" is_value_required="0" is_multiple="0">
<description>Display this help message.</description>
</option>
<option name="--quiet" shortcut="-q" accept_value="0" is_value_required="0" is_multiple="0">
<description>Do not output any message.</description>
</option>
<option name="--verbose" shortcut="-v" shortcuts="-v|-vv|-vvv" accept_value="0" is_value_required="0" is_multiple="0">
<description>Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug</description>
</option>
<option name="--version" shortcut="-V" accept_value="0" is_value_required="0" is_multiple="0">
<description>Display this application version.</description>
</option>
<option name="--ansi" shortcut="" accept_value="0" is_value_required="0" is_multiple="0">
<description>Force ANSI output.</description>
</option>
<option name="--no-ansi" shortcut="" accept_value="0" is_value_required="0" is_multiple="0">
<description>Disable ANSI output.</description>
</option>
<option name="--no-interaction" shortcut="-n" accept_value="0" is_value_required="0" is_multiple="0">
<description>Do not ask any interactive question.</description>
</option>
</options>
</command>
</commands>
<namespaces>
<namespace id="_global">
<command>alias1</command>
<command>alias2</command>
<command>help</command>
<command>list</command>
</namespace>
<namespace id="descriptor">
<command>descriptor:command1</command>
<command>descriptor:command2</command>
</namespace>
</namespaces>
</symfony>

@ -0,0 +1 @@
{"name":"descriptor:command1","usage":"descriptor:command1","description":"command 1 description","help":"command 1 help","aliases":["alias1","alias2"],"definition":{"arguments":[],"options":[]}}

@ -0,0 +1,8 @@
descriptor:command1
-------------------
* Description: command 1 description
* Usage: `descriptor:command1`
* Aliases: `alias1`, `alias2`
command 1 help

@ -0,0 +1,7 @@
<comment>Usage:</comment>
descriptor:command1
<comment>Aliases:</comment> <info>alias1, alias2</info>
<comment>Help:</comment>
command 1 help

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<command id="descriptor:command1" name="descriptor:command1">
<usage>descriptor:command1</usage>
<description>command 1 description</description>
<help>command 1 help</help>
<aliases>
<alias>alias1</alias>
<alias>alias2</alias>
</aliases>
<arguments/>
<options/>
</command>

@ -0,0 +1 @@
{"name":"descriptor:command2","usage":"descriptor:command2 [-o|--option_name] argument_name","description":"command 2 description","help":"command 2 help","aliases":[],"definition":{"arguments":{"argument_name":{"name":"argument_name","is_required":true,"is_array":false,"description":"","default":null}},"options":{"option_name":{"name":"--option_name","shortcut":"-o","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"","default":false}}}}

@ -0,0 +1,30 @@
descriptor:command2
-------------------
* Description: command 2 description
* Usage: `descriptor:command2 [-o|--option_name] argument_name`
* Aliases: <none>
command 2 help
### Arguments:
**argument_name:**
* Name: argument_name
* Is required: yes
* Is array: no
* Description: <none>
* Default: `NULL`
### Options:
**option_name:**
* Name: `--option_name`
* Shortcut: `-o`
* Accept value: no
* Is value required: no
* Is multiple: no
* Description: <none>
* Default: `false`

@ -0,0 +1,11 @@
<comment>Usage:</comment>
descriptor:command2 [-o|--option_name] argument_name
<comment>Arguments:</comment>
<info>argument_name </info>
<comment>Options:</comment>
<info>--option_name</info> (-o)
<comment>Help:</comment>
command 2 help

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<command id="descriptor:command2" name="descriptor:command2">
<usage>descriptor:command2 [-o|--option_name] argument_name</usage>
<description>command 2 description</description>
<help>command 2 help</help>
<aliases/>
<arguments>
<argument name="argument_name" is_required="1" is_array="0">
<description></description>
<defaults/>
</argument>
</arguments>
<options>
<option name="--option_name" shortcut="-o" accept_value="0" is_value_required="0" is_multiple="0">
<description></description>
</option>
</options>
</command>

@ -0,0 +1 @@
{"name":"argument_name","is_required":true,"is_array":false,"description":"","default":null}

@ -0,0 +1,7 @@
**argument_name:**
* Name: argument_name
* Is required: yes
* Is array: no
* Description: <none>
* Default: `NULL`

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<argument name="argument_name" is_required="1" is_array="0">
<description></description>
<defaults/>
</argument>

@ -0,0 +1 @@
{"name":"argument_name","is_required":false,"is_array":true,"description":"argument description","default":[]}

@ -0,0 +1,7 @@
**argument_name:**
* Name: argument_name
* Is required: no
* Is array: yes
* Description: argument description
* Default: `array ()`

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<argument name="argument_name" is_required="0" is_array="1">
<description>argument description</description>
<defaults/>
</argument>

@ -0,0 +1 @@
{"name":"argument_name","is_required":false,"is_array":false,"description":"argument description","default":"default_value"}

@ -0,0 +1,7 @@
**argument_name:**
* Name: argument_name
* Is required: no
* Is array: no
* Description: argument description
* Default: `'default_value'`

@ -0,0 +1 @@
<info>argument_name</info> argument description<comment> (default: "default_value")</comment>

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<argument name="argument_name" is_required="0" is_array="0">
<description>argument description</description>
<defaults>
<default>default_value</default>
</defaults>
</argument>

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<definition>
<arguments/>
<options/>
</definition>

@ -0,0 +1 @@
{"arguments":{"argument_name":{"name":"argument_name","is_required":true,"is_array":false,"description":"","default":null}},"options":[]}

@ -0,0 +1,9 @@
### Arguments:
**argument_name:**
* Name: argument_name
* Is required: yes
* Is array: no
* Description: <none>
* Default: `NULL`

@ -0,0 +1,2 @@
<comment>Arguments:</comment>
<info>argument_name </info>

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<definition>
<arguments>
<argument name="argument_name" is_required="1" is_array="0">
<description></description>
<defaults/>
</argument>
</arguments>
<options/>
</definition>

@ -0,0 +1 @@
{"arguments":[],"options":{"option_name":{"name":"--option_name","shortcut":"-o","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"","default":false}}}

@ -0,0 +1,11 @@
### Options:
**option_name:**
* Name: `--option_name`
* Shortcut: `-o`
* Accept value: no
* Is value required: no
* Is multiple: no
* Description: <none>
* Default: `false`

@ -0,0 +1,2 @@
<comment>Options:</comment>
<info>--option_name</info> (-o)

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<definition>
<arguments/>
<options>
<option name="--option_name" shortcut="-o" accept_value="0" is_value_required="0" is_multiple="0">
<description></description>
</option>
</options>
</definition>

@ -0,0 +1 @@
{"arguments":{"argument_name":{"name":"argument_name","is_required":true,"is_array":false,"description":"","default":null}},"options":{"option_name":{"name":"--option_name","shortcut":"-o","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"","default":false}}}

@ -0,0 +1,21 @@
### Arguments:
**argument_name:**
* Name: argument_name
* Is required: yes
* Is array: no
* Description: <none>
* Default: `NULL`
### Options:
**option_name:**
* Name: `--option_name`
* Shortcut: `-o`
* Accept value: no
* Is value required: no
* Is multiple: no
* Description: <none>
* Default: `false`

@ -0,0 +1,5 @@
<comment>Arguments:</comment>
<info>argument_name </info>
<comment>Options:</comment>
<info>--option_name</info> (-o)

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<definition>
<arguments>
<argument name="argument_name" is_required="1" is_array="0">
<description></description>
<defaults/>
</argument>
</arguments>
<options>
<option name="--option_name" shortcut="-o" accept_value="0" is_value_required="0" is_multiple="0">
<description></description>
</option>
</options>
</definition>

@ -0,0 +1 @@
{"name":"--option_name","shortcut":"-o","accept_value":false,"is_value_required":false,"is_multiple":false,"description":"","default":false}

@ -0,0 +1,9 @@
**option_name:**
* Name: `--option_name`
* Shortcut: `-o`
* Accept value: no
* Is value required: no
* Is multiple: no
* Description: <none>
* Default: `false`

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<option name="--option_name" shortcut="-o" accept_value="0" is_value_required="0" is_multiple="0">
<description></description>
</option>

@ -0,0 +1 @@
{"name":"--option_name","shortcut":"-o","accept_value":true,"is_value_required":false,"is_multiple":false,"description":"option description","default":"default_value"}

@ -0,0 +1,9 @@
**option_name:**
* Name: `--option_name`
* Shortcut: `-o`
* Accept value: yes
* Is value required: no
* Is multiple: no
* Description: option description
* Default: `'default_value'`

@ -0,0 +1 @@
<info>--option_name</info> (-o) option description<comment> (default: "default_value")</comment>

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<option name="--option_name" shortcut="-o" accept_value="1" is_value_required="0" is_multiple="0">
<description>option description</description>
<defaults>
<default>default_value</default>
</defaults>
</option>

@ -0,0 +1 @@
{"name":"--option_name","shortcut":"-o","accept_value":true,"is_value_required":true,"is_multiple":false,"description":"option description","default":null}

@ -0,0 +1,9 @@
**option_name:**
* Name: `--option_name`
* Shortcut: `-o`
* Accept value: yes
* Is value required: yes
* Is multiple: no
* Description: option description
* Default: `NULL`

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<option name="--option_name" shortcut="-o" accept_value="1" is_value_required="1" is_multiple="0">
<description>option description</description>
<defaults/>
</option>

@ -0,0 +1 @@
{"name":"--option_name","shortcut":"-o","accept_value":true,"is_value_required":false,"is_multiple":true,"description":"option description","default":[]}

@ -0,0 +1,9 @@
**option_name:**
* Name: `--option_name`
* Shortcut: `-o`
* Accept value: yes
* Is value required: no
* Is multiple: yes
* Description: option description
* Default: `array ()`

@ -0,0 +1 @@
<info>--option_name</info> (-o) option description<comment> (multiple values allowed)</comment>

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<option name="--option_name" shortcut="-o" accept_value="1" is_value_required="0" is_multiple="1">
<description>option description</description>
<defaults/>
</option>

@ -0,0 +1,136 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\Console\Tests\Helper;
use Symfony\Component\Console\Helper\HelperSet;
use Symfony\Component\Console\Command\Command;
class HelperSetTest extends \PHPUnit_Framework_TestCase
{
/**
* @covers \Symfony\Component\Console\Helper\HelperSet::__construct
*/
public function testConstructor()
{
$mock_helper = $this->getGenericMockHelper('fake_helper');
$helperset = new HelperSet(array('fake_helper_alias' => $mock_helper));
$this->assertEquals($mock_helper, $helperset->get('fake_helper_alias'), '__construct sets given helper to helpers');
$this->assertTrue($helperset->has('fake_helper_alias'), '__construct sets helper alias for given helper');
}
/**
* @covers \Symfony\Component\Console\Helper\HelperSet::set
*/
public function testSet()
{
$helperset = new HelperSet();
$helperset->set($this->getGenericMockHelper('fake_helper', $helperset));
$this->assertTrue($helperset->has('fake_helper'), '->set() adds helper to helpers');
$helperset = new HelperSet();
$helperset->set($this->getGenericMockHelper('fake_helper_01', $helperset));
$helperset->set($this->getGenericMockHelper('fake_helper_02', $helperset));
$this->assertTrue($helperset->has('fake_helper_01'), '->set() will set multiple helpers on consecutive calls');
$this->assertTrue($helperset->has('fake_helper_02'), '->set() will set multiple helpers on consecutive calls');
$helperset = new HelperSet();
$helperset->set($this->getGenericMockHelper('fake_helper', $helperset), 'fake_helper_alias');
$this->assertTrue($helperset->has('fake_helper'), '->set() adds helper alias when set');
$this->assertTrue($helperset->has('fake_helper_alias'), '->set() adds helper alias when set');
}
/**
* @covers \Symfony\Component\Console\Helper\HelperSet::has
*/
public function testHas()
{
$helperset = new HelperSet(array('fake_helper_alias' => $this->getGenericMockHelper('fake_helper')));
$this->assertTrue($helperset->has('fake_helper'), '->has() finds set helper');
$this->assertTrue($helperset->has('fake_helper_alias'), '->has() finds set helper by alias');
}
/**
* @covers \Symfony\Component\Console\Helper\HelperSet::get
*/
public function testGet()
{
$helper_01 = $this->getGenericMockHelper('fake_helper_01');
$helper_02 = $this->getGenericMockHelper('fake_helper_02');
$helperset = new HelperSet(array('fake_helper_01_alias' => $helper_01, 'fake_helper_02_alias' => $helper_02));
$this->assertEquals($helper_01, $helperset->get('fake_helper_01'), '->get() returns correct helper by name');
$this->assertEquals($helper_01, $helperset->get('fake_helper_01_alias'), '->get() returns correct helper by alias');
$this->assertEquals($helper_02, $helperset->get('fake_helper_02'), '->get() returns correct helper by name');
$this->assertEquals($helper_02, $helperset->get('fake_helper_02_alias'), '->get() returns correct helper by alias');
$helperset = new HelperSet();
try {
$helperset->get('foo');
$this->fail('->get() throws \InvalidArgumentException when helper not found');
} catch (\Exception $e) {
$this->assertInstanceOf('\InvalidArgumentException', $e, '->get() throws \InvalidArgumentException when helper not found');
$this->assertContains('The helper "foo" is not defined.', $e->getMessage(), '->get() throws \InvalidArgumentException when helper not found');
}
}
/**
* @covers \Symfony\Component\Console\Helper\HelperSet::setCommand
*/
public function testSetCommand()
{
$cmd_01 = new Command('foo');
$cmd_02 = new Command('bar');
$helperset = new HelperSet();
$helperset->setCommand($cmd_01);
$this->assertEquals($cmd_01, $helperset->getCommand(), '->setCommand() stores given command');
$helperset = new HelperSet();
$helperset->setCommand($cmd_01);
$helperset->setCommand($cmd_02);
$this->assertEquals($cmd_02, $helperset->getCommand(), '->setCommand() overwrites stored command with consecutive calls');
}
/**
* @covers \Symfony\Component\Console\Helper\HelperSet::getCommand
*/
public function testGetCommand()
{
$cmd = new Command('foo');
$helperset = new HelperSet();
$helperset->setCommand($cmd);
$this->assertEquals($cmd, $helperset->getCommand(), '->getCommand() retrieves stored command');
}
/**
* Create a generic mock for the helper interface. Optionally check for a call to setHelperSet with a specific
* helperset instance.
*
* @param string $name
* @param HelperSet $helperset allows a mock to verify a particular helperset set is being added to the Helper
*/
private function getGenericMockHelper($name, HelperSet $helperset = null)
{
$mock_helper = $this->getMock('\Symfony\Component\Console\Helper\HelperInterface');
$mock_helper->expects($this->any())
->method('getName')
->will($this->returnValue($name));
if ($helperset) {
$mock_helper->expects($this->any())
->method('setHelperSet')
->with($this->equalTo($helperset));
}
return $mock_helper;
}
}

@ -0,0 +1,12 @@
language: php
php:
- 5.3.3
- 5.3
- 5.4
before_script:
- composer self-update
- composer install --dev --prefer-source
script: phpunit --coverage-text

@ -0,0 +1,42 @@
CHANGELOG
=========
* 1.2.1 (2013-05-31)
* Deps: Support for 1.1 branch of silex
* 1.2.0 (2013-04-23)
* BC break: Re-organized things into drivers
* Feature: Support for TOML format (@raphaelstolt)
* 1.1.5 (2013-03-09)
* Bugfix: Allow recursive merging of empty hash values (@fzerorubigd)
* 1.1.4 (2013-03-05)
* Feature: Throw exception on invalid JSON (@binfo)
* 1.1.3 (2013-02-03)
* Feature: Recursive merging of config values (@airdeck)
* 1.1.2 (2013-01-28)
* Feature: Support for plain-PHP config files
* 1.1.1 (2013-01-03)
* Feature: Allow defining replacements in config file (@MarcinKleczek)
* Bugfix: Allow empty config file (@rsvasilyev)
* 1.1.0 (2012-08-27)
* Feature: Optional YAML format support (@timheil)
* Bugfix: Only run strtr on string values to prevent implicit cast
* 1.0.0 (2012-07-14)
* First tagged release
* Feature: Replacements (@jeromemacias)

@ -0,0 +1,37 @@
<?php
namespace Igorw\Silex;
use Toml\Parser;
class ChainConfigDriver implements ConfigDriver
{
private $drivers;
public function __construct(array $drivers)
{
$this->drivers = $drivers;
}
public function load($filename)
{
$driver = $this->getDriver($filename);
return $driver->load($filename);
}
public function supports($filename)
{
return (bool) $this->getDriver($filename);
}
private function getDriver($filename)
{
foreach ($this->drivers as $driver) {
if ($driver->supports($filename)) {
return $driver;
}
}
return null;
}
}

@ -0,0 +1,9 @@
<?php
namespace Igorw\Silex;
interface ConfigDriver
{
function load($filename);
function supports($filename);
}

@ -0,0 +1,43 @@
<?php
namespace Igorw\Silex;
class JsonConfigDriver implements ConfigDriver
{
public function load($filename)
{
$config = $this->parseJson($filename);
if (JSON_ERROR_NONE !== json_last_error()) {
$jsonError = $this->getJsonError(json_last_error());
throw new \RuntimeException(
sprintf('Invalid JSON provided "%s" in "%s"', $jsonError, $filename));
}
return $config ?: array();
}
public function supports($filename)
{
return (bool) preg_match('#\.json(\.dist)?$#', $filename);
}
private function parseJson($filename)
{
$json = file_get_contents($filename);
return json_decode($json, true);
}
private function getJsonError($code)
{
$errorMessages = array(
JSON_ERROR_DEPTH => 'The maximum stack depth has been exceeded',
JSON_ERROR_STATE_MISMATCH => 'Invalid or malformed JSON',
JSON_ERROR_CTRL_CHAR => 'Control character error, possibly incorrectly encoded',
JSON_ERROR_SYNTAX => 'Syntax error',
JSON_ERROR_UTF8 => 'Malformed UTF-8 characters, possibly incorrectly encoded',
);
return isset($errorMessages[$code]) ? $errorMessages[$code] : 'Unknown';
}
}

@ -0,0 +1,18 @@
<?php
namespace Igorw\Silex;
class PhpConfigDriver implements ConfigDriver
{
public function load($filename)
{
$config = require $filename;
$config = (1 === $config) ? array() : $config;
return $config ?: array();
}
public function supports($filename)
{
return (bool) preg_match('#\.php(\.dist)?$#', $filename);
}
}

@ -0,0 +1,23 @@
<?php
namespace Igorw\Silex;
use Toml\Parser;
class TomlConfigDriver implements ConfigDriver
{
public function load($filename)
{
if (!class_exists('Toml\\Parser')) {
throw new \RuntimeException('Unable to read toml as the Toml Parser is not installed.');
}
$config = Parser::fromFile($filename);
return $config ?: array();
}
public function supports($filename)
{
return (bool) preg_match('#\.toml(\.dist)?$#', $filename);
}
}

@ -0,0 +1,22 @@
<?php
namespace Igorw\Silex;
use Symfony\Component\Yaml\Yaml;
class YamlConfigDriver implements ConfigDriver
{
public function load($filename)
{
if (!class_exists('Symfony\\Component\\Yaml\\Yaml')) {
throw new \RuntimeException('Unable to read yaml as the Symfony Yaml Component is not installed.');
}
$config = Yaml::parse($filename);
return $config ?: array();
}
public function supports($filename)
{
return (bool) preg_match('#\.ya?ml(\.dist)?$#', $filename);
}
}

@ -0,0 +1,204 @@
<?php
/*
* This file is part of ConfigServiceProvider.
*
* (c) Igor Wiedler <igor@wiedler.ch>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
use Silex\Application;
use Igorw\Silex\ConfigServiceProvider;
/**
* @author Igor Wiedler <igor@wiedler.ch>
* @author Jérôme Macias <jerome.macias@gmail.com>
*/
class ConfigServiceProviderTest extends \PHPUnit_Framework_TestCase
{
/**
* @dataProvider provideFilenames
*/
public function testRegisterWithoutReplacement($filename)
{
$app = new Application();
$app->register(new ConfigServiceProvider($filename));
$this->assertSame(true, $app['debug']);
$this->assertSame('%data%', $app['data']);
}
/**
* @dataProvider provideFilenames
*/
public function testRegisterWithReplacement($filename)
{
$app = new Application();
$app->register(new ConfigServiceProvider($filename, array(
'data' => 'test-replacement'
)));
$this->assertSame(true, $app['debug']);
$this->assertSame('test-replacement', $app['data']);
}
/**
* @dataProvider provideEmptyFilenames
*/
public function testEmptyConfigs($filename)
{
$readConfigMethod = new \ReflectionMethod('Igorw\Silex\ConfigServiceProvider', 'readConfig');
$readConfigMethod->setAccessible(true);
$this->assertEquals(
array(),
$readConfigMethod->invoke(new ConfigServiceProvider($filename))
);
}
/**
* @dataProvider provideReplacementFilenames
*/
public function testInFileReplacements($filename)
{
$app = new Application();
$app->register(new ConfigServiceProvider($filename));
$this->assertSame('/var/www', $app['%path%']);
$this->assertSame('/var/www/web/images', $app['path.images']);
$this->assertSame('/var/www/upload', $app['path.upload']);
$this->assertSame('http://example.com', $app['%url%']);
$this->assertSame('http://example.com/images', $app['url.images']);
}
/**
* Currently not tested via testMergeConfigs as TOML seems to have problems
* to create 'db.options' keys
*/
public function testTomlMergeConfigs()
{
$app = new Application();
$filenameBase = __DIR__."/Fixtures/config_base.toml";
$filenameExtended = __DIR__."/Fixtures/config_extend.toml";
$app->register(new ConfigServiceProvider($filenameBase));
$app->register(new ConfigServiceProvider($filenameExtended));
$this->assertSame('pdo_mysql', $app['db']['driver']);
$this->assertSame('utf8', $app['db']['charset']);
$this->assertSame('127.0.0.1', $app['db']['host']);
$this->assertSame('mydatabase', $app['db']['dbname']);
$this->assertSame('root', $app['db']['user']);
$this->assertSame('', $app['db']['password']);
$this->assertSame('123', $app['myproject']['param1']);
$this->assertSame('456', $app['myproject']['param2']);
$this->assertSame('456', $app['myproject']['param3']);
$this->assertSame(array(4, 5, 6), $app['myproject']['param4']);
$this->assertSame('456', $app['myproject']['param5']);
$this->assertSame(array(1, 2, 3, 4), $app['keys']['set']);
}
/**
* @dataProvider provideMergeFilenames
*/
public function testMergeConfigs($filenameBase, $filenameExtended)
{
$app = new Application();
$app->register(new ConfigServiceProvider($filenameBase));
$app->register(new ConfigServiceProvider($filenameExtended));
$this->assertSame('pdo_mysql', $app['db.options']['driver']);
$this->assertSame('utf8', $app['db.options']['charset']);
$this->assertSame('127.0.0.1', $app['db.options']['host']);
$this->assertSame('mydatabase', $app['db.options']['dbname']);
$this->assertSame('root', $app['db.options']['user']);
$this->assertSame(null, $app['db.options']['password']);
$this->assertSame('123', $app['myproject.test']['param1']);
$this->assertSame('456', $app['myproject.test']['param2']);
$this->assertSame('123', $app['myproject.test']['param3']['param2A']);
$this->assertSame('456', $app['myproject.test']['param3']['param2B']);
$this->assertSame('456', $app['myproject.test']['param3']['param2C']);
$this->assertSame(array(4, 5, 6), $app['myproject.test']['param4']);
$this->assertSame('456', $app['myproject.test']['param5']);
$this->assertSame(array(1,2,3,4), $app['test.noparent.key']['test']);
}
/**
* @test
* @expectedException RuntimeException
* @expectedExceptionMessage Invalid JSON provided "Syntax error" in
*/
public function invalidJsonShouldThrowException()
{
$app = new Application();
$app->register(new ConfigServiceProvider(__DIR__."/Fixtures/broken.json"));
}
/**
* @test
* @expectedException Symfony\Component\Yaml\Exception\ParseException
*/
public function invalidYamlShouldThrowException()
{
$app = new Application();
$app->register(new ConfigServiceProvider(__DIR__."/Fixtures/broken.yml"));
}
/**
* @test
* @expectedException \Exception
*/
public function invalidTomlShouldThrowException()
{
$app = new Application();
$app->register(new ConfigServiceProvider(__DIR__."/Fixtures/broken.toml"));
}
public function provideFilenames()
{
return array(
array(__DIR__."/Fixtures/config.php"),
array(__DIR__."/Fixtures/config.json"),
array(__DIR__."/Fixtures/config.yml"),
array(__DIR__."/Fixtures/config.toml"),
);
}
public function provideReplacementFilenames()
{
return array(
array(__DIR__."/Fixtures/config_replacement.php"),
array(__DIR__."/Fixtures/config_replacement.json"),
array(__DIR__."/Fixtures/config_replacement.yml"),
array(__DIR__."/Fixtures/config_replacement.toml"),
);
}
public function provideEmptyFilenames()
{
return array(
array(__DIR__."/Fixtures/config_empty.php"),
array(__DIR__."/Fixtures/config_empty.json"),
array(__DIR__."/Fixtures/config_empty.yml"),
array(__DIR__."/Fixtures/config_empty.toml"),
);
}
public function provideMergeFilenames()
{
return array(
array(__DIR__."/Fixtures/config_base.php", __DIR__."/Fixtures/config_extend.php"),
array(__DIR__."/Fixtures/config_base.json", __DIR__."/Fixtures/config_extend.json"),
array(__DIR__."/Fixtures/config_base.yml", __DIR__."/Fixtures/config_extend.yml"),
);
}
}

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save