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

namespace XF\Cli\Command\Rebuild;

use
Symfony\Component\Console\Command\Command;
use
Symfony\Component\Console\Input\InputInterface;
use
Symfony\Component\Console\Input\InputOption;
use
Symfony\Component\Console\Output\OutputInterface;
use
XF\Cli\Command\JobRunnerTrait;

abstract class
AbstractRebuildCommand extends Command
{
    use
JobRunnerTrait;

   
/**
     * Name of the rebuild command suffix (do not include the command namespace)
     *
     * @return string
     */
   
abstract protected function getRebuildName();

    abstract protected function
getRebuildDescription();

    abstract protected function
getRebuildClass();

    protected function
getRebuildAliases()
    {
        return [];
    }

    protected function
configureOptions()
    {
        return;
    }

    protected function
configure()
    {
       
$this
           
->setName('xf-rebuild:' . $this->getRebuildName())
            ->
setDescription($this->getRebuildDescription())
            ->
addOption(
               
'log-queries',
               
null,
               
InputOption::VALUE_REQUIRED,
               
'Enable query logger for this job. true / false Default: false',
               
'false'
           
)
            ->
addOption(
               
'batch',
               
'b',
               
InputOption::VALUE_REQUIRED,
               
'Batch size for this job. Default: 500.',
               
500
           
)
            ->
addOption(
               
'resume',
               
null,
               
InputOption::VALUE_NONE
           
);

        if (
$this->getRebuildAliases())
        {
           
$this->setAliases($this->getRebuildAliases());
        }

       
$this->configureOptions();
    }

    protected function
execute(InputInterface $input, OutputInterface $output)
    {
       
$jobUniqueKey = 'xfRebuildJob-' . $this->getRebuildName();

        if (
$input->getOption('resume'))
        {
            if (\
XF::app()->jobManager()->getUniqueJob($jobUniqueKey))
            {
               
$this->runJob($jobUniqueKey, $output);
                return
0;
            }

           
$output->writeln("<error>There are no pending jobs of this type to resume.</error>");
            return
1;
        }

       
$params = $this->getJobParams($input, $error);
        if (
$error)
        {
           
$output->writeln('<error>' . $error . '</error>');
            return
1;
        }

        \
XF::db()->logQueries((bool)$params['log-queries']);
        unset(
$params['log-queries']);

       
$this->setupAndRunJob(
           
$jobUniqueKey,
           
$this->getRebuildClass(),
           
$params, $output
       
);

        return
0;
    }

    protected function
getJobParams(InputInterface $input, &$error = null)
    {
       
$params = $input->getOptions();

       
$globalOptions = array_keys($this->getApplication()->getDefinition()->getOptions());
        foreach (
$globalOptions AS $globalOption)
        {
            unset(
$params[$globalOption]);
        }

        if (
$params['log-queries'] === 'false')
        {
           
$params['log-queries'] = false;
        }

        return
$params;
    }
}