Sindbad~EG File Manager

Current Path : /home/sarayaglobal/goodmaid.net/libraries/src/Console/
Upload File :
Current File : /home/sarayaglobal/goodmaid.net/libraries/src/Console/TasksRunCommand.php

<?php
/**
 * Joomla! Content Management System.
 *
 * @copyright  (C) 2021 Open Source Matters, Inc. <https://www.joomla.org>
 * @license    GNU General Public License version 2 or later; see LICENSE.txt
 */

namespace Joomla\CMS\Console;

// Restrict direct access
\defined('JPATH_PLATFORM') or die;

use Joomla\Component\Scheduler\Administrator\Scheduler\Scheduler;
use Joomla\Component\Scheduler\Administrator\Task\Status;
use Joomla\Console\Command\AbstractCommand;
use Symfony\Component\Console\Exception\InvalidArgumentException;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Style\SymfonyStyle;

/**
 * Console command to run scheduled tasks.
 *
 * @since 4.1.0
 */
class TasksRunCommand extends AbstractCommand
{
	/**
	 * The default command name
	 *
	 * @var    string
	 * @since  4.1.0
	 */
	protected static $defaultName = 'scheduler:run';

	/**
	 * @var SymfonyStyle
	 * @since  4.1.0
	 */
	private $ioStyle;

	/**
	 * @param   InputInterface   $input   The input to inject into the command.
	 * @param   OutputInterface  $output  The output to inject into the command.
	 *
	 * @return integer The command exit code.
	 *
	 * @since 4.1.0
	 * @throws \RunTimeException
	 * @throws InvalidArgumentException
	 */
	protected function doExecute(InputInterface $input, OutputInterface $output): int
	{
		/**
		 * Not as a class constant because of some the autoload order doesn't let us
		 * load the namespace when it's time to do that (why?)
		 */
		static $outTextMap = [
			Status::OK          => 'Task#%1$02d \'%2$s\' processed in %3$.2f seconds.',
			Status::WILL_RESUME => '<notice>Task#%1$02d \'%2$s\' ran for %3$.2f seconds, will resume next time.</notice>',
			Status::NO_RUN      => '<warning>Task#%1$02d \'%2$s\' failed to run. Is it already running?</warning>',
			Status::NO_ROUTINE  => '<error>Task#%1$02d \'%2$s\' is orphaned! Visit the backend to resolve.</error>',
			'N/A'               => '<error>Task#%1$02d \'%2$s\' exited with code %4$d in %3$.2f seconds.</error>',
		];

		$this->configureIo($input, $output);
		$this->ioStyle->title('Run tasks');

		$scheduler = new Scheduler;

		$id    = $input->getOption('id');
		$all   = $input->getOption('all');

		if ($id)
		{
			$records[] = $scheduler->fetchTaskRecord($id);
		}
		else
		{
			$filters             = $scheduler::TASK_QUEUE_FILTERS;
			$listConfig          = $scheduler::TASK_QUEUE_LIST_CONFIG;
			$listConfig['limit'] = ($all ? null : 1);

			$records = $scheduler->fetchTaskRecords($filters, $listConfig);
		}

		if ($id && !$records[0])
		{
			$this->ioStyle->writeln('<error>No matching task found!</error>');

			return Status::NO_TASK;
		}
		elseif (!$records)
		{
			$this->ioStyle->writeln('<error>No tasks due!</error>');

			return Status::NO_TASK;
		}

		$status    = ['startTime' => microtime(true)];
		$taskCount = \count($records);
		$exit      = Status::OK;

		foreach ($records as $record)
		{
			$cStart   = microtime(true);
			$task     = $scheduler->runTask(['id' => $record->id, 'allowDisabled' => true, 'allowConcurrent' => true]);
			$exit     = empty($task) ? Status::NO_RUN : $task->getContent()['status'];
			$duration = microtime(true) - $cStart;
			$key      = (\array_key_exists($exit, $outTextMap)) ? $exit : 'N/A';
			$this->ioStyle->writeln(sprintf($outTextMap[$key], $record->id, $record->title, $duration, $exit));
		}

		$netTime = round(microtime(true) - $status['startTime'], 2);
		$this->ioStyle->newLine();
		$this->ioStyle->writeln("<info>Finished running $taskCount tasks in $netTime seconds.</info>");

		return $taskCount === 1 ? $exit : Status::OK;
	}

	/**
	 * Configure the IO.
	 *
	 * @param   InputInterface   $input   The input to inject into the command.
	 * @param   OutputInterface  $output  The output to inject into the command.
	 *
	 * @return  void
	 *
	 * @since  4.1.0
	 */
	private function configureIO(InputInterface $input, OutputInterface $output)
	{
		$this->ioStyle = new SymfonyStyle($input, $output);
	}

	/**
	 * Configure the command.
	 *
	 * @return  void
	 *
	 * @since   4.1.0
	 */
	protected function configure(): void
	{
		$this->addOption('id', 'i', InputOption::VALUE_REQUIRED, 'The id of the task to run.');
		$this->addOption('all', '', InputOption::VALUE_NONE, 'Run all due tasks. Note that this is overridden if --id is used.');

		$help = "<info>%command.name%</info> run scheduled tasks.
		\nUsage: <info>php %command.full_name% [flags]</info>";

		$this->setDescription('Run one or more scheduled tasks');
		$this->setHelp($help);
	}
}

Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists