Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/Cli/Command/Development/GenerateApiDocs.php
<?php

namespace XF\Cli\Command\Development;

use
Symfony\Component\Console\Command\Command;
use
Symfony\Component\Console\Input\InputArgument;
use
Symfony\Component\Console\Input\InputInterface;
use
Symfony\Component\Console\Input\InputOption;
use
Symfony\Component\Console\Output\OutputInterface;

class
GenerateApiDocs extends Command
{
    use
RequiresDevModeTrait;

    protected function
configure()
    {
       
$this
           
->setName('xf-dev:generate-api-docs')
            ->
setDescription('Generates the REST API documentation')
            ->
addOption(
               
'renderer',
               
null,
               
InputOption::VALUE_REQUIRED,
               
'The type of renderer to use'
           
)
            ->
addOption(
               
'target',
               
null,
               
InputOption::VALUE_REQUIRED,
               
'Target location to write the output to'
           
)
            ->
addOption(
               
'force',
               
null,
               
InputOption::VALUE_NONE,
               
'Force writing to the target'
           
)
            ->
addArgument(
               
'ids',
               
InputArgument::IS_ARRAY | InputArgument::REQUIRED,
               
'List of add-on IDs to include (space separated'
           
);
    }

    protected function
execute(InputInterface $input, OutputInterface $output)
    {
       
$ids = $input->getArgument('ids');

       
$addOnIds = [];
        foreach (
$ids AS $id)
        {
            if (
$id == 'XF+')
            {
               
$addOnIds[] = 'XF';
               
$addOnIds[] = 'XFMG';
               
$addOnIds[] = 'XFRM';
            }
            else
            {
               
$addOnIds[] = $id;
            }
        }

       
$addOnIds = array_unique($addOnIds);

       
$apiDocs = \XF::app()->apiDocs();
       
$compiler = $apiDocs->compiler();

       
$rendererName = $input->getOption('renderer') ?: 'simpleHtml';
       
$renderer = $apiDocs->renderer($rendererName);

       
$target = $input->getOption('target');
        if (
$target)
        {
           
$target = \XF\Util\File::canonicalizePath($target);

           
$success = $renderer->setTarget($target, $error, $input->getOption('force'));
            if (!
$success)
            {
               
$output->write('<error>' . $error . '</error>');
                return
1;
            }
        }

        foreach (
$addOnIds AS $id)
        {
           
$compiler->compileForAddOn($id);
        }

        if (
$target)
        {
           
// TODO: output unknown lines
       
}

       
$output->write($compiler->render($renderer));

        return
0;
    }
}