2010-04-08 08:03:04 +04:00
|
|
|
<?php
|
|
|
|
|
2010-08-23 10:21:41 +04:00
|
|
|
namespace Symfony\Component\Console\Input;
|
2010-04-08 08:03:04 +04:00
|
|
|
|
|
|
|
/*
|
2010-10-30 15:24:50 +04:00
|
|
|
* This file is part of the Symfony framework.
|
2010-04-08 08:03:04 +04:00
|
|
|
*
|
|
|
|
* (c) Fabien Potencier <fabien.potencier@symfony-project.com>
|
|
|
|
*
|
|
|
|
* This source file is subject to the MIT license that is bundled
|
|
|
|
* with this source code in the file LICENSE.
|
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
|
|
|
* A InputDefinition represents a set of valid command line arguments and options.
|
|
|
|
*
|
|
|
|
* Usage:
|
|
|
|
*
|
|
|
|
* $definition = new InputDefinition(array(
|
|
|
|
* new InputArgument('name', InputArgument::REQUIRED),
|
2010-11-28 11:59:23 +03:00
|
|
|
* new InputOption('foo', 'f', InputOption::VALUE_REQUIRED),
|
2010-04-08 08:03:04 +04:00
|
|
|
* ));
|
|
|
|
*
|
2010-10-30 15:24:50 +04:00
|
|
|
* @author Fabien Potencier <fabien.potencier@symfony-project.com>
|
2010-04-08 08:03:04 +04:00
|
|
|
*/
|
|
|
|
class InputDefinition
|
|
|
|
{
|
2010-10-30 15:24:50 +04:00
|
|
|
protected $arguments;
|
|
|
|
protected $requiredCount;
|
|
|
|
protected $hasAnArrayArgument = false;
|
|
|
|
protected $hasOptional;
|
|
|
|
protected $options;
|
|
|
|
protected $shortcuts;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Constructor.
|
|
|
|
*
|
|
|
|
* @param array $definition An array of InputArgument and InputOption instance
|
|
|
|
*/
|
|
|
|
public function __construct(array $definition = array())
|
2010-04-08 08:03:04 +04:00
|
|
|
{
|
2010-10-30 15:24:50 +04:00
|
|
|
$this->setDefinition($definition);
|
2010-04-08 08:03:04 +04:00
|
|
|
}
|
|
|
|
|
2010-10-30 15:24:50 +04:00
|
|
|
public function setDefinition(array $definition)
|
2010-04-08 08:03:04 +04:00
|
|
|
{
|
2010-10-30 15:24:50 +04:00
|
|
|
$arguments = array();
|
|
|
|
$options = array();
|
|
|
|
foreach ($definition as $item) {
|
|
|
|
if ($item instanceof InputOption) {
|
|
|
|
$options[] = $item;
|
|
|
|
} else {
|
|
|
|
$arguments[] = $item;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
$this->setArguments($arguments);
|
|
|
|
$this->setOptions($options);
|
2010-04-08 08:03:04 +04:00
|
|
|
}
|
2010-10-30 15:24:50 +04:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Sets the InputArgument objects.
|
|
|
|
*
|
|
|
|
* @param array $arguments An array of InputArgument objects
|
|
|
|
*/
|
|
|
|
public function setArguments($arguments = array())
|
2010-04-08 08:03:04 +04:00
|
|
|
{
|
2010-10-30 15:24:50 +04:00
|
|
|
$this->arguments = array();
|
|
|
|
$this->requiredCount = 0;
|
|
|
|
$this->hasOptional = false;
|
|
|
|
$this->hasAnArrayArgument = false;
|
|
|
|
$this->addArguments($arguments);
|
2010-04-08 08:03:04 +04:00
|
|
|
}
|
|
|
|
|
2010-10-30 15:24:50 +04:00
|
|
|
/**
|
|
|
|
* Add an array of InputArgument objects.
|
|
|
|
*
|
|
|
|
* @param InputArgument[] $arguments An array of InputArgument objects
|
|
|
|
*/
|
|
|
|
public function addArguments($arguments = array())
|
2010-04-08 08:03:04 +04:00
|
|
|
{
|
2010-10-30 15:24:50 +04:00
|
|
|
if (null !== $arguments) {
|
|
|
|
foreach ($arguments as $argument) {
|
|
|
|
$this->addArgument($argument);
|
|
|
|
}
|
|
|
|
}
|
2010-04-08 08:03:04 +04:00
|
|
|
}
|
|
|
|
|
2010-10-30 15:24:50 +04:00
|
|
|
/**
|
|
|
|
* Add an InputArgument object.
|
|
|
|
*
|
|
|
|
* @param InputArgument $argument An InputArgument object
|
|
|
|
*
|
|
|
|
* @throws \LogicException When incorrect argument is given
|
|
|
|
*/
|
|
|
|
public function addArgument(InputArgument $argument)
|
2010-04-08 08:03:04 +04:00
|
|
|
{
|
2010-10-30 15:24:50 +04:00
|
|
|
if (isset($this->arguments[$argument->getName()])) {
|
|
|
|
throw new \LogicException(sprintf('An argument with name "%s" already exist.', $argument->getName()));
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($this->hasAnArrayArgument) {
|
|
|
|
throw new \LogicException('Cannot add an argument after an array argument.');
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($argument->isRequired() && $this->hasOptional) {
|
|
|
|
throw new \LogicException('Cannot add a required argument after an optional one.');
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($argument->isArray()) {
|
|
|
|
$this->hasAnArrayArgument = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($argument->isRequired()) {
|
|
|
|
++$this->requiredCount;
|
|
|
|
} else {
|
|
|
|
$this->hasOptional = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
$this->arguments[$argument->getName()] = $argument;
|
2010-04-08 08:03:04 +04:00
|
|
|
}
|
|
|
|
|
2010-10-30 15:24:50 +04:00
|
|
|
/**
|
|
|
|
* Returns an InputArgument by name or by position.
|
|
|
|
*
|
|
|
|
* @param string|integer $name The InputArgument name or position
|
|
|
|
*
|
|
|
|
* @return InputArgument An InputArgument object
|
|
|
|
*
|
|
|
|
* @throws \InvalidArgumentException When argument given doesn't exist
|
|
|
|
*/
|
|
|
|
public function getArgument($name)
|
2010-04-08 08:03:04 +04:00
|
|
|
{
|
2010-10-30 15:24:50 +04:00
|
|
|
$arguments = is_int($name) ? array_values($this->arguments) : $this->arguments;
|
|
|
|
|
|
|
|
if (!$this->hasArgument($name)) {
|
|
|
|
throw new \InvalidArgumentException(sprintf('The "%s" argument does not exist.', $name));
|
|
|
|
}
|
|
|
|
|
|
|
|
return $arguments[$name];
|
2010-04-08 08:03:04 +04:00
|
|
|
}
|
|
|
|
|
2010-10-30 15:24:50 +04:00
|
|
|
/**
|
|
|
|
* Returns true if an InputArgument object exists by name or position.
|
|
|
|
*
|
|
|
|
* @param string|integer $name The InputArgument name or position
|
|
|
|
*
|
|
|
|
* @return Boolean true if the InputArgument object exists, false otherwise
|
|
|
|
*/
|
|
|
|
public function hasArgument($name)
|
2010-04-08 08:03:04 +04:00
|
|
|
{
|
2010-10-30 15:24:50 +04:00
|
|
|
$arguments = is_int($name) ? array_values($this->arguments) : $this->arguments;
|
|
|
|
|
|
|
|
return isset($arguments[$name]);
|
2010-04-08 08:03:04 +04:00
|
|
|
}
|
2010-10-30 15:24:50 +04:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Gets the array of InputArgument objects.
|
|
|
|
*
|
|
|
|
* @return array An array of InputArgument objects
|
|
|
|
*/
|
|
|
|
public function getArguments()
|
2010-04-08 08:03:04 +04:00
|
|
|
{
|
2010-10-30 15:24:50 +04:00
|
|
|
return $this->arguments;
|
2010-04-08 08:03:04 +04:00
|
|
|
}
|
|
|
|
|
2010-10-30 15:24:50 +04:00
|
|
|
/**
|
|
|
|
* Returns the number of InputArguments.
|
|
|
|
*
|
|
|
|
* @return integer The number of InputArguments
|
|
|
|
*/
|
|
|
|
public function getArgumentCount()
|
2010-04-08 08:03:04 +04:00
|
|
|
{
|
2010-10-30 15:24:50 +04:00
|
|
|
return $this->hasAnArrayArgument ? PHP_INT_MAX : count($this->arguments);
|
2010-04-08 08:03:04 +04:00
|
|
|
}
|
|
|
|
|
2010-10-30 15:24:50 +04:00
|
|
|
/**
|
|
|
|
* Returns the number of required InputArguments.
|
|
|
|
*
|
|
|
|
* @return integer The number of required InputArguments
|
|
|
|
*/
|
|
|
|
public function getArgumentRequiredCount()
|
2010-04-08 08:03:04 +04:00
|
|
|
{
|
2010-10-30 15:24:50 +04:00
|
|
|
return $this->requiredCount;
|
2010-04-08 08:03:04 +04:00
|
|
|
}
|
|
|
|
|
2010-10-30 15:24:50 +04:00
|
|
|
/**
|
|
|
|
* Gets the default values.
|
|
|
|
*
|
|
|
|
* @return array An array of default values
|
|
|
|
*/
|
|
|
|
public function getArgumentDefaults()
|
2010-04-08 08:03:04 +04:00
|
|
|
{
|
2010-10-30 15:24:50 +04:00
|
|
|
$values = array();
|
|
|
|
foreach ($this->arguments as $argument) {
|
|
|
|
$values[$argument->getName()] = $argument->getDefault();
|
|
|
|
}
|
|
|
|
|
|
|
|
return $values;
|
2010-04-08 08:03:04 +04:00
|
|
|
}
|
2010-10-30 15:24:50 +04:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Sets the InputOption objects.
|
|
|
|
*
|
|
|
|
* @param array $options An array of InputOption objects
|
|
|
|
*/
|
|
|
|
public function setOptions($options = array())
|
2010-04-08 08:03:04 +04:00
|
|
|
{
|
2010-10-30 15:24:50 +04:00
|
|
|
$this->options = array();
|
|
|
|
$this->shortcuts = array();
|
|
|
|
$this->addOptions($options);
|
2010-04-08 08:03:04 +04:00
|
|
|
}
|
2010-10-30 15:24:50 +04:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Add an array of InputOption objects.
|
|
|
|
*
|
|
|
|
* @param InputOption[] $options An array of InputOption objects
|
|
|
|
*/
|
|
|
|
public function addOptions($options = array())
|
2010-04-08 08:03:04 +04:00
|
|
|
{
|
2010-10-30 15:24:50 +04:00
|
|
|
foreach ($options as $option) {
|
|
|
|
$this->addOption($option);
|
|
|
|
}
|
2010-04-08 08:03:04 +04:00
|
|
|
}
|
|
|
|
|
2010-10-30 15:24:50 +04:00
|
|
|
/**
|
|
|
|
* Add an InputOption object.
|
|
|
|
*
|
|
|
|
* @param InputOption $option An InputOption object
|
|
|
|
*
|
|
|
|
* @throws \LogicException When option given already exist
|
|
|
|
*/
|
|
|
|
public function addOption(InputOption $option)
|
2010-04-08 08:03:04 +04:00
|
|
|
{
|
2010-10-30 15:24:50 +04:00
|
|
|
if (isset($this->options[$option->getName()])) {
|
|
|
|
throw new \LogicException(sprintf('An option named "%s" already exist.', $option->getName()));
|
|
|
|
} else if (isset($this->shortcuts[$option->getShortcut()])) {
|
|
|
|
throw new \LogicException(sprintf('An option with shortcut "%s" already exist.', $option->getShortcut()));
|
|
|
|
}
|
|
|
|
|
|
|
|
$this->options[$option->getName()] = $option;
|
|
|
|
if ($option->getShortcut()) {
|
|
|
|
$this->shortcuts[$option->getShortcut()] = $option->getName();
|
|
|
|
}
|
2010-04-08 08:03:04 +04:00
|
|
|
}
|
2010-10-30 15:24:50 +04:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns an InputOption by name.
|
|
|
|
*
|
|
|
|
* @param string $name The InputOption name
|
|
|
|
*
|
|
|
|
* @return InputOption A InputOption object
|
|
|
|
*/
|
|
|
|
public function getOption($name)
|
2010-04-08 08:03:04 +04:00
|
|
|
{
|
2010-10-30 15:24:50 +04:00
|
|
|
if (!$this->hasOption($name)) {
|
|
|
|
throw new \InvalidArgumentException(sprintf('The "--%s" option does not exist.', $name));
|
|
|
|
}
|
|
|
|
|
|
|
|
return $this->options[$name];
|
2010-04-08 08:03:04 +04:00
|
|
|
}
|
|
|
|
|
2010-10-30 15:24:50 +04:00
|
|
|
/**
|
|
|
|
* Returns true if an InputOption object exists by name.
|
|
|
|
*
|
|
|
|
* @param string $name The InputOption name
|
|
|
|
*
|
|
|
|
* @return Boolean true if the InputOption object exists, false otherwise
|
|
|
|
*/
|
|
|
|
public function hasOption($name)
|
2010-04-08 08:03:04 +04:00
|
|
|
{
|
2010-10-30 15:24:50 +04:00
|
|
|
return isset($this->options[$name]);
|
2010-04-08 08:03:04 +04:00
|
|
|
}
|
|
|
|
|
2010-10-30 15:24:50 +04:00
|
|
|
/**
|
|
|
|
* Gets the array of InputOption objects.
|
|
|
|
*
|
|
|
|
* @return array An array of InputOption objects
|
|
|
|
*/
|
|
|
|
public function getOptions()
|
2010-04-08 08:03:04 +04:00
|
|
|
{
|
2010-10-30 15:24:50 +04:00
|
|
|
return $this->options;
|
2010-04-08 08:03:04 +04:00
|
|
|
}
|
|
|
|
|
2010-10-30 15:24:50 +04:00
|
|
|
/**
|
|
|
|
* Returns true if an InputOption object exists by shortcut.
|
|
|
|
*
|
|
|
|
* @param string $name The InputOption shortcut
|
|
|
|
*
|
|
|
|
* @return Boolean true if the InputOption object exists, false otherwise
|
|
|
|
*/
|
|
|
|
public function hasShortcut($name)
|
2010-04-08 08:03:04 +04:00
|
|
|
{
|
2010-10-30 15:24:50 +04:00
|
|
|
return isset($this->shortcuts[$name]);
|
2010-04-08 08:03:04 +04:00
|
|
|
}
|
|
|
|
|
2010-10-30 15:24:50 +04:00
|
|
|
/**
|
|
|
|
* Gets an InputOption by shortcut.
|
|
|
|
*
|
|
|
|
* @return InputOption An InputOption object
|
|
|
|
*/
|
|
|
|
public function getOptionForShortcut($shortcut)
|
2010-04-08 08:03:04 +04:00
|
|
|
{
|
2010-10-30 15:24:50 +04:00
|
|
|
return $this->getOption($this->shortcutToName($shortcut));
|
2010-04-08 08:03:04 +04:00
|
|
|
}
|
|
|
|
|
2010-10-30 15:24:50 +04:00
|
|
|
/**
|
|
|
|
* Gets an array of default values.
|
|
|
|
*
|
|
|
|
* @return array An array of all default values
|
|
|
|
*/
|
|
|
|
public function getOptionDefaults()
|
2010-04-08 08:03:04 +04:00
|
|
|
{
|
2010-10-30 15:24:50 +04:00
|
|
|
$values = array();
|
|
|
|
foreach ($this->options as $option) {
|
|
|
|
$values[$option->getName()] = $option->getDefault();
|
|
|
|
}
|
|
|
|
|
|
|
|
return $values;
|
2010-04-08 08:03:04 +04:00
|
|
|
}
|
2010-10-30 15:24:50 +04:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns the InputOption name given a shortcut.
|
|
|
|
*
|
|
|
|
* @param string $shortcut The shortcut
|
|
|
|
*
|
|
|
|
* @return string The InputOption name
|
|
|
|
*
|
|
|
|
* @throws \InvalidArgumentException When option given does not exist
|
|
|
|
*/
|
|
|
|
protected function shortcutToName($shortcut)
|
2010-04-08 08:03:04 +04:00
|
|
|
{
|
2010-10-30 15:24:50 +04:00
|
|
|
if (!isset($this->shortcuts[$shortcut])) {
|
|
|
|
throw new \InvalidArgumentException(sprintf('The "-%s" option does not exist.', $shortcut));
|
|
|
|
}
|
2010-04-08 08:03:04 +04:00
|
|
|
|
2010-10-30 15:24:50 +04:00
|
|
|
return $this->shortcuts[$shortcut];
|
|
|
|
}
|
2010-04-08 08:03:04 +04:00
|
|
|
|
2010-10-30 15:24:50 +04:00
|
|
|
/**
|
|
|
|
* Gets the synopsis.
|
|
|
|
*
|
|
|
|
* @return string The synopsis
|
|
|
|
*/
|
|
|
|
public function getSynopsis()
|
2010-04-08 08:03:04 +04:00
|
|
|
{
|
2010-10-30 15:24:50 +04:00
|
|
|
$elements = array();
|
|
|
|
foreach ($this->getOptions() as $option) {
|
|
|
|
$shortcut = $option->getShortcut() ? sprintf('-%s|', $option->getShortcut()) : '';
|
2010-11-28 11:59:23 +03:00
|
|
|
$elements[] = sprintf('['.($option->isValueRequired() ? '%s--%s="..."' : ($option->isValueOptional() ? '%s--%s[="..."]' : '%s--%s')).']', $shortcut, $option->getName());
|
2010-04-08 08:03:04 +04:00
|
|
|
}
|
|
|
|
|
2010-10-30 15:24:50 +04:00
|
|
|
foreach ($this->getArguments() as $argument) {
|
|
|
|
$elements[] = sprintf($argument->isRequired() ? '%s' : '[%s]', $argument->getName().($argument->isArray() ? '1' : ''));
|
2010-04-08 08:03:04 +04:00
|
|
|
|
2010-10-30 15:24:50 +04:00
|
|
|
if ($argument->isArray()) {
|
|
|
|
$elements[] = sprintf('... [%sN]', $argument->getName());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return implode(' ', $elements);
|
2010-04-08 08:03:04 +04:00
|
|
|
}
|
|
|
|
|
2010-10-30 15:24:50 +04:00
|
|
|
/**
|
|
|
|
* Returns a textual representation of the InputDefinition.
|
|
|
|
*
|
|
|
|
* @return string A string representing the InputDefinition
|
|
|
|
*/
|
|
|
|
public function asText()
|
2010-04-08 08:03:04 +04:00
|
|
|
{
|
2010-10-30 15:24:50 +04:00
|
|
|
// find the largest option or argument name
|
|
|
|
$max = 0;
|
|
|
|
foreach ($this->getOptions() as $option) {
|
|
|
|
$max = strlen($option->getName()) + 2 > $max ? strlen($option->getName()) + 2 : $max;
|
2010-04-08 08:03:04 +04:00
|
|
|
}
|
2010-10-30 15:24:50 +04:00
|
|
|
foreach ($this->getArguments() as $argument) {
|
|
|
|
$max = strlen($argument->getName()) > $max ? strlen($argument->getName()) : $max;
|
2010-04-08 08:03:04 +04:00
|
|
|
}
|
2010-10-30 15:24:50 +04:00
|
|
|
++$max;
|
2010-04-08 08:03:04 +04:00
|
|
|
|
2010-10-30 15:24:50 +04:00
|
|
|
$text = array();
|
2010-04-08 08:03:04 +04:00
|
|
|
|
2010-10-30 15:24:50 +04:00
|
|
|
if ($this->getArguments()) {
|
|
|
|
$text[] = '<comment>Arguments:</comment>';
|
|
|
|
foreach ($this->getArguments() as $argument) {
|
|
|
|
if (null !== $argument->getDefault() && (!is_array($argument->getDefault()) || count($argument->getDefault()))) {
|
|
|
|
$default = sprintf('<comment> (default: %s)</comment>', is_array($argument->getDefault()) ? str_replace("\n", '', var_export($argument->getDefault(), true)): $argument->getDefault());
|
|
|
|
} else {
|
|
|
|
$default = '';
|
|
|
|
}
|
2010-04-08 08:03:04 +04:00
|
|
|
|
2010-10-30 15:24:50 +04:00
|
|
|
$text[] = sprintf(" <info>%-${max}s</info> %s%s", $argument->getName(), $argument->getDescription(), $default);
|
|
|
|
}
|
|
|
|
|
|
|
|
$text[] = '';
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($this->getOptions()) {
|
|
|
|
$text[] = '<comment>Options:</comment>';
|
|
|
|
|
|
|
|
foreach ($this->getOptions() as $option) {
|
2010-11-28 11:59:23 +03:00
|
|
|
if ($option->acceptValue() && null !== $option->getDefault() && (!is_array($option->getDefault()) || count($option->getDefault()))) {
|
2010-10-30 15:24:50 +04:00
|
|
|
$default = sprintf('<comment> (default: %s)</comment>', is_array($option->getDefault()) ? str_replace("\n", '', print_r($option->getDefault(), true)): $option->getDefault());
|
|
|
|
} else {
|
|
|
|
$default = '';
|
|
|
|
}
|
|
|
|
|
|
|
|
$multiple = $option->isArray() ? '<comment> (multiple values allowed)</comment>' : '';
|
|
|
|
$text[] = sprintf(' %-'.$max.'s %s%s%s%s', '<info>--'.$option->getName().'</info>', $option->getShortcut() ? sprintf('(-%s) ', $option->getShortcut()) : '', $option->getDescription(), $default, $multiple);
|
|
|
|
}
|
|
|
|
|
|
|
|
$text[] = '';
|
|
|
|
}
|
|
|
|
|
|
|
|
return implode("\n", $text);
|
2010-04-08 08:03:04 +04:00
|
|
|
}
|
|
|
|
|
2010-10-30 15:24:50 +04:00
|
|
|
/**
|
|
|
|
* Returns an XML representation of the InputDefinition.
|
|
|
|
*
|
|
|
|
* @param Boolean $asDom Whether to return a DOM or an XML string
|
|
|
|
*
|
|
|
|
* @return string|DOMDocument An XML string representing the InputDefinition
|
|
|
|
*/
|
|
|
|
public function asXml($asDom = false)
|
2010-04-08 08:03:04 +04:00
|
|
|
{
|
2010-10-30 15:24:50 +04:00
|
|
|
$dom = new \DOMDocument('1.0', 'UTF-8');
|
|
|
|
$dom->formatOutput = true;
|
|
|
|
$dom->appendChild($definitionXML = $dom->createElement('definition'));
|
|
|
|
|
|
|
|
$definitionXML->appendChild($argumentsXML = $dom->createElement('arguments'));
|
|
|
|
foreach ($this->getArguments() as $argument) {
|
|
|
|
$argumentsXML->appendChild($argumentXML = $dom->createElement('argument'));
|
|
|
|
$argumentXML->setAttribute('name', $argument->getName());
|
|
|
|
$argumentXML->setAttribute('is_required', $argument->isRequired() ? 1 : 0);
|
|
|
|
$argumentXML->setAttribute('is_array', $argument->isArray() ? 1 : 0);
|
|
|
|
$argumentXML->appendChild($descriptionXML = $dom->createElement('description'));
|
|
|
|
$descriptionXML->appendChild($dom->createTextNode($argument->getDescription()));
|
|
|
|
|
|
|
|
$argumentXML->appendChild($defaultsXML = $dom->createElement('defaults'));
|
|
|
|
$defaults = is_array($argument->getDefault()) ? $argument->getDefault() : ($argument->getDefault() ? array($argument->getDefault()) : array());
|
|
|
|
foreach ($defaults as $default) {
|
|
|
|
$defaultsXML->appendChild($defaultXML = $dom->createElement('default'));
|
|
|
|
$defaultXML->appendChild($dom->createTextNode($default));
|
|
|
|
}
|
2010-04-08 08:03:04 +04:00
|
|
|
}
|
|
|
|
|
2010-10-30 15:24:50 +04:00
|
|
|
$definitionXML->appendChild($optionsXML = $dom->createElement('options'));
|
|
|
|
foreach ($this->getOptions() as $option) {
|
|
|
|
$optionsXML->appendChild($optionXML = $dom->createElement('option'));
|
|
|
|
$optionXML->setAttribute('name', '--'.$option->getName());
|
|
|
|
$optionXML->setAttribute('shortcut', $option->getShortcut() ? '-'.$option->getShortcut() : '');
|
2010-11-28 11:59:23 +03:00
|
|
|
$optionXML->setAttribute('accept_value', $option->acceptValue() ? 1 : 0);
|
|
|
|
$optionXML->setAttribute('is_value_required', $option->isValueRequired() ? 1 : 0);
|
2010-10-30 15:24:50 +04:00
|
|
|
$optionXML->setAttribute('is_multiple', $option->isArray() ? 1 : 0);
|
|
|
|
$optionXML->appendChild($descriptionXML = $dom->createElement('description'));
|
|
|
|
$descriptionXML->appendChild($dom->createTextNode($option->getDescription()));
|
|
|
|
|
2010-11-28 11:59:23 +03:00
|
|
|
if ($option->acceptValue()) {
|
2010-10-30 15:24:50 +04:00
|
|
|
$optionXML->appendChild($defaultsXML = $dom->createElement('defaults'));
|
|
|
|
$defaults = is_array($option->getDefault()) ? $option->getDefault() : ($option->getDefault() ? array($option->getDefault()) : array());
|
|
|
|
foreach ($defaults as $default) {
|
|
|
|
$defaultsXML->appendChild($defaultXML = $dom->createElement('default'));
|
|
|
|
$defaultXML->appendChild($dom->createTextNode($default));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return $asDom ? $dom : $dom->saveXml();
|
|
|
|
}
|
2010-04-08 08:03:04 +04:00
|
|
|
}
|