Verzeichnisstruktur phpBB-3.1.0


Veröffentlicht
27.10.2014

So funktioniert es


Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück

Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis.
Auf den Verzeichnisnamen klicken, dies zeigt nur das Verzeichnis mit Inhalt an

(Beispiel Datei-Icons)

Auf das Icon klicken um den Quellcode anzuzeigen

InputDefinition.php

Zuletzt modifiziert: 09.10.2024, 12:58 - Dateigröße: 11.70 KiB


001  <?php
002   
003  /*
004   * This file is part of the Symfony package.
005   *
006   * (c) Fabien Potencier <fabien@symfony.com>
007   *
008   * For the full copyright and license information, please view the LICENSE
009   * file that was distributed with this source code.
010   */
011   
012  namespace Symfony\Component\Console\Input;
013   
014  if (!defined('JSON_UNESCAPED_UNICODE')) {
015      define('JSON_UNESCAPED_SLASHES', 64);
016      define('JSON_UNESCAPED_UNICODE', 256);
017  }
018   
019  use Symfony\Component\Console\Descriptor\TextDescriptor;
020  use Symfony\Component\Console\Descriptor\XmlDescriptor;
021   
022  /**
023   * A InputDefinition represents a set of valid command line arguments and options.
024   *
025   * Usage:
026   *
027   *     $definition = new InputDefinition(array(
028   *       new InputArgument('name', InputArgument::REQUIRED),
029   *       new InputOption('foo', 'f', InputOption::VALUE_REQUIRED),
030   *     ));
031   *
032   * @author Fabien Potencier <fabien@symfony.com>
033   *
034   * @api
035   */
036  class InputDefinition
037  {
038      private $arguments;
039      private $requiredCount;
040      private $hasAnArrayArgument = false;
041      private $hasOptional;
042      private $options;
043      private $shortcuts;
044   
045      /**
046       * Constructor.
047       *
048       * @param array $definition An array of InputArgument and InputOption instance
049       *
050       * @api
051       */
052      public function __construct(array $definition = array())
053      {
054          $this->setDefinition($definition);
055      }
056   
057      /**
058       * Sets the definition of the input.
059       *
060       * @param array $definition The definition array
061       *
062       * @api
063       */
064      public function setDefinition(array $definition)
065      {
066          $arguments = array();
067          $options = array();
068          foreach ($definition as $item) {
069              if ($item instanceof InputOption) {
070                  $options[] = $item;
071              } else {
072                  $arguments[] = $item;
073              }
074          }
075   
076          $this->setArguments($arguments);
077          $this->setOptions($options);
078      }
079   
080      /**
081       * Sets the InputArgument objects.
082       *
083       * @param InputArgument[] $arguments An array of InputArgument objects
084       *
085       * @api
086       */
087      public function setArguments($arguments = array())
088      {
089          $this->arguments          = array();
090          $this->requiredCount      = 0;
091          $this->hasOptional        = false;
092          $this->hasAnArrayArgument = false;
093          $this->addArguments($arguments);
094      }
095   
096      /**
097       * Adds an array of InputArgument objects.
098       *
099       * @param InputArgument[] $arguments An array of InputArgument objects
100       *
101       * @api
102       */
103      public function addArguments($arguments = array())
104      {
105          if (null !== $arguments) {
106              foreach ($arguments as $argument) {
107                  $this->addArgument($argument);
108              }
109          }
110      }
111   
112      /**
113       * Adds an InputArgument object.
114       *
115       * @param InputArgument $argument An InputArgument object
116       *
117       * @throws \LogicException When incorrect argument is given
118       *
119       * @api
120       */
121      public function addArgument(InputArgument $argument)
122      {
123          if (isset($this->arguments[$argument->getName()])) {
124              throw new \LogicException(sprintf('An argument with name "%s" already exists.', $argument->getName()));
125          }
126   
127          if ($this->hasAnArrayArgument) {
128              throw new \LogicException('Cannot add an argument after an array argument.');
129          }
130   
131          if ($argument->isRequired() && $this->hasOptional) {
132              throw new \LogicException('Cannot add a required argument after an optional one.');
133          }
134   
135          if ($argument->isArray()) {
136              $this->hasAnArrayArgument = true;
137          }
138   
139          if ($argument->isRequired()) {
140              ++$this->requiredCount;
141          } else {
142              $this->hasOptional = true;
143          }
144   
145          $this->arguments[$argument->getName()] = $argument;
146      }
147   
148      /**
149       * Returns an InputArgument by name or by position.
150       *
151       * @param string|int     $name The InputArgument name or position
152       *
153       * @return InputArgument An InputArgument object
154       *
155       * @throws \InvalidArgumentException When argument given doesn't exist
156       *
157       * @api
158       */
159      public function getArgument($name)
160      {
161          if (!$this->hasArgument($name)) {
162              throw new \InvalidArgumentException(sprintf('The "%s" argument does not exist.', $name));
163          }
164   
165          $arguments = is_int($name) ? array_values($this->arguments) : $this->arguments;
166   
167          return $arguments[$name];
168      }
169   
170      /**
171       * Returns true if an InputArgument object exists by name or position.
172       *
173       * @param string|int     $name The InputArgument name or position
174       *
175       * @return bool    true if the InputArgument object exists, false otherwise
176       *
177       * @api
178       */
179      public function hasArgument($name)
180      {
181          $arguments = is_int($name) ? array_values($this->arguments) : $this->arguments;
182   
183          return isset($arguments[$name]);
184      }
185   
186      /**
187       * Gets the array of InputArgument objects.
188       *
189       * @return InputArgument[] An array of InputArgument objects
190       *
191       * @api
192       */
193      public function getArguments()
194      {
195          return $this->arguments;
196      }
197   
198      /**
199       * Returns the number of InputArguments.
200       *
201       * @return int     The number of InputArguments
202       */
203      public function getArgumentCount()
204      {
205          return $this->hasAnArrayArgument ? PHP_INT_MAX : count($this->arguments);
206      }
207   
208      /**
209       * Returns the number of required InputArguments.
210       *
211       * @return int     The number of required InputArguments
212       */
213      public function getArgumentRequiredCount()
214      {
215          return $this->requiredCount;
216      }
217   
218      /**
219       * Gets the default values.
220       *
221       * @return array An array of default values
222       */
223      public function getArgumentDefaults()
224      {
225          $values = array();
226          foreach ($this->arguments as $argument) {
227              $values[$argument->getName()] = $argument->getDefault();
228          }
229   
230          return $values;
231      }
232   
233      /**
234       * Sets the InputOption objects.
235       *
236       * @param InputOption[] $options An array of InputOption objects
237       *
238       * @api
239       */
240      public function setOptions($options = array())
241      {
242          $this->options = array();
243          $this->shortcuts = array();
244          $this->addOptions($options);
245      }
246   
247      /**
248       * Adds an array of InputOption objects.
249       *
250       * @param InputOption[] $options An array of InputOption objects
251       *
252       * @api
253       */
254      public function addOptions($options = array())
255      {
256          foreach ($options as $option) {
257              $this->addOption($option);
258          }
259      }
260   
261      /**
262       * Adds an InputOption object.
263       *
264       * @param InputOption $option An InputOption object
265       *
266       * @throws \LogicException When option given already exist
267       *
268       * @api
269       */
270      public function addOption(InputOption $option)
271      {
272          if (isset($this->options[$option->getName()]) && !$option->equals($this->options[$option->getName()])) {
273              throw new \LogicException(sprintf('An option named "%s" already exists.', $option->getName()));
274          }
275   
276          if ($option->getShortcut()) {
277              foreach (explode('|', $option->getShortcut()) as $shortcut) {
278                  if (isset($this->shortcuts[$shortcut]) && !$option->equals($this->options[$this->shortcuts[$shortcut]])) {
279                      throw new \LogicException(sprintf('An option with shortcut "%s" already exists.', $shortcut));
280                  }
281              }
282          }
283   
284          $this->options[$option->getName()] = $option;
285          if ($option->getShortcut()) {
286              foreach (explode('|', $option->getShortcut()) as $shortcut) {
287                  $this->shortcuts[$shortcut] = $option->getName();
288              }
289          }
290      }
291   
292      /**
293       * Returns an InputOption by name.
294       *
295       * @param string $name The InputOption name
296       *
297       * @return InputOption A InputOption object
298       *
299       * @throws \InvalidArgumentException When option given doesn't exist
300       *
301       * @api
302       */
303      public function getOption($name)
304      {
305          if (!$this->hasOption($name)) {
306              throw new \InvalidArgumentException(sprintf('The "--%s" option does not exist.', $name));
307          }
308   
309          return $this->options[$name];
310      }
311   
312      /**
313       * Returns true if an InputOption object exists by name.
314       *
315       * @param string $name The InputOption name
316       *
317       * @return bool    true if the InputOption object exists, false otherwise
318       *
319       * @api
320       */
321      public function hasOption($name)
322      {
323          return isset($this->options[$name]);
324      }
325   
326      /**
327       * Gets the array of InputOption objects.
328       *
329       * @return InputOption[] An array of InputOption objects
330       *
331       * @api
332       */
333      public function getOptions()
334      {
335          return $this->options;
336      }
337   
338      /**
339       * Returns true if an InputOption object exists by shortcut.
340       *
341       * @param string $name The InputOption shortcut
342       *
343       * @return bool    true if the InputOption object exists, false otherwise
344       */
345      public function hasShortcut($name)
346      {
347          return isset($this->shortcuts[$name]);
348      }
349   
350      /**
351       * Gets an InputOption by shortcut.
352       *
353       * @param string $shortcut the Shortcut name
354       *
355       * @return InputOption An InputOption object
356       */
357      public function getOptionForShortcut($shortcut)
358      {
359          return $this->getOption($this->shortcutToName($shortcut));
360      }
361   
362      /**
363       * Gets an array of default values.
364       *
365       * @return array An array of all default values
366       */
367      public function getOptionDefaults()
368      {
369          $values = array();
370          foreach ($this->options as $option) {
371              $values[$option->getName()] = $option->getDefault();
372          }
373   
374          return $values;
375      }
376   
377      /**
378       * Returns the InputOption name given a shortcut.
379       *
380       * @param string $shortcut The shortcut
381       *
382       * @return string The InputOption name
383       *
384       * @throws \InvalidArgumentException When option given does not exist
385       */
386      private function shortcutToName($shortcut)
387      {
388          if (!isset($this->shortcuts[$shortcut])) {
389              throw new \InvalidArgumentException(sprintf('The "-%s" option does not exist.', $shortcut));
390          }
391   
392          return $this->shortcuts[$shortcut];
393      }
394   
395      /**
396       * Gets the synopsis.
397       *
398       * @return string The synopsis
399       */
400      public function getSynopsis()
401      {
402          $elements = array();
403          foreach ($this->getOptions() as $option) {
404              $shortcut = $option->getShortcut() ? sprintf('-%s|', $option->getShortcut()) : '';
405              $elements[] = sprintf('['.($option->isValueRequired() ? '%s--%s="..."' : ($option->isValueOptional() ? '%s--%s[="..."]' : '%s--%s')).']', $shortcut, $option->getName());
406          }
407   
408          foreach ($this->getArguments() as $argument) {
409              $elements[] = sprintf($argument->isRequired() ? '%s' : '[%s]', $argument->getName().($argument->isArray() ? '1' : ''));
410   
411              if ($argument->isArray()) {
412                  $elements[] = sprintf('... [%sN]', $argument->getName());
413              }
414          }
415   
416          return implode(' ', $elements);
417      }
418   
419      /**
420       * Returns a textual representation of the InputDefinition.
421       *
422       * @return string A string representing the InputDefinition
423       *
424       * @deprecated Deprecated since version 2.3, to be removed in 3.0.
425       */
426      public function asText()
427      {
428          $descriptor = new TextDescriptor();
429   
430          return $descriptor->describe($this);
431      }
432   
433      /**
434       * Returns an XML representation of the InputDefinition.
435       *
436       * @param bool    $asDom Whether to return a DOM or an XML string
437       *
438       * @return string|\DOMDocument An XML string representing the InputDefinition
439       *
440       * @deprecated Deprecated since version 2.3, to be removed in 3.0.
441       */
442      public function asXml($asDom = false)
443      {
444          $descriptor = new XmlDescriptor();
445   
446          return $descriptor->describe($this, array('as_dom' => $asDom));
447      }
448  }
449